From e7f541396715ee2895abcf73044b91ae9b746201 Mon Sep 17 00:00:00 2001 From: xXx-caillou-xXx Date: Wed, 20 Dec 2017 18:09:53 +0100 Subject: Better parsing of the rules Thanks to this huge commit from @xXx-caillou-xXx, we can now write amazingly flexible rules.--- src/sp_var_parser.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/sp_var_parser.h (limited to 'src/sp_var_parser.h') diff --git a/src/sp_var_parser.h b/src/sp_var_parser.h new file mode 100644 index 0000000..eec1d06 --- /dev/null +++ b/src/sp_var_parser.h @@ -0,0 +1,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 -- cgit v1.3