summaryrefslogtreecommitdiff
path: root/src/sp_var_parser.h
blob: eec1d06e47957a486914297324daf98a5ca5aeea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#ifndef SP_VAR_PARSER_H
# define SP_VAR_PARSER_H
# include "php_snuffleupagus.h"
# include "sp_list.h"

typedef enum {
  OBJECT = 1,
  ARRAY,
  ARRAY_END,
  STRING_DELIMITER,
  CLASS,
  VAR,
  ESC_STRING_DELIMITER,
  CONSTANT
} elem_type;

typedef struct sp_token_s {
  elem_type type;
  char *token;
  unsigned int pos;
} sp_token_t;

typedef struct parser_s {
  elem_type type;
  char *value;
  struct parser_s *idx;
  struct parser_s *next;
} sp_tree;

zval *get_value(zend_execute_data *, const sp_tree *, bool);
sp_tree *sp_tree_new();
sp_tree *parse_var(const char *);
void print_type_list(const char *, sp_tree*, int);
void sp_tree_free(sp_tree *);

# define OBJECT_TOKEN "->"
# define ARRAY_TOKEN "["
# define ARRAY_END_TOKEN "]"
# define STRING_TOKEN "\""
# define ESC_STRING_TOKEN "\'"
# define CLASS_TOKEN "::"

# define VARIABLE_TOKEN '$'

# define PRIVATE_PROP_FMT "%c%s%c%s"
# define PROTECTED_PROP_FMT "%c*%c%s"

# define REGEXP_VAR "^\\$[a-z_][a-z0-9_]*$"
# define REGEXP_CONST "^[a-z_0-9\\\\]*$"

#endif