From f2a87d34f6469af1715608412fc5454e177d0901 Mon Sep 17 00:00:00 2001 From: xXx-caillou-xXx Date: Wed, 20 Dec 2017 18:28:21 +0100 Subject: Refactor a bit the sp_tree implementation --- src/php_snuffleupagus.h | 1 + src/sp_tree.c | 2 +- src/sp_tree.h | 27 +++++++++++++++++++++++++++ src/sp_var_parser.c | 4 ++-- src/sp_var_parser.h | 48 +++++++++++++----------------------------------- 5 files changed, 44 insertions(+), 38 deletions(-) create mode 100644 src/sp_tree.h (limited to 'src') diff --git a/src/php_snuffleupagus.h b/src/php_snuffleupagus.h index bccf998..cf50a10 100644 --- a/src/php_snuffleupagus.h +++ b/src/php_snuffleupagus.h @@ -26,6 +26,7 @@ #include "zend_extensions.h" #include "sp_list.h" +#include "sp_tree.h" #include "sp_var_parser.h" #include "sp_config.h" #include "sp_config_utils.h" diff --git a/src/sp_tree.c b/src/sp_tree.c index 328a919..55b6ff4 100644 --- a/src/sp_tree.c +++ b/src/sp_tree.c @@ -15,6 +15,6 @@ sp_tree *sp_tree_new() { sp_tree *new = pecalloc(sizeof(sp_tree), 1, 1); new->next = new->idx = NULL; new->value = NULL; - new->type = 0; + new->type = UNDEFINED; return new; } diff --git a/src/sp_tree.h b/src/sp_tree.h new file mode 100644 index 0000000..c831736 --- /dev/null +++ b/src/sp_tree.h @@ -0,0 +1,27 @@ +#ifndef SP_TREE_H +#define SP_TREE_H +#include "php_snuffleupagus.h" + +typedef enum { + UNDEFINED = 0, + OBJECT, + ARRAY, + ARRAY_END, + STRING_DELIMITER, + CLASS, + VAR, + ESC_STRING_DELIMITER, + CONSTANT +} elem_type; + +typedef struct parser_s { + elem_type type; + char *value; + struct parser_s *idx; + struct parser_s *next; +} sp_tree; + +sp_tree *sp_tree_new(); +void sp_tree_free(sp_tree *); + +#endif diff --git a/src/sp_var_parser.c b/src/sp_var_parser.c index bc0a80e..6d80b39 100644 --- a/src/sp_var_parser.c +++ b/src/sp_var_parser.c @@ -52,7 +52,7 @@ static int create_var(sp_tree *tree, const char *restrict value, if (!tree) { return -1; } - if (tree->next == NULL && tree->type == 0) { + if (tree->next == NULL && tree->type == UNDEFINED) { var_node = tree; } else { var_node = pecalloc(sizeof(sp_tree), 1, 1); @@ -239,7 +239,7 @@ sp_tree *parse_var(const char *line) { tree = parse_tokens(line, tokens_list); sp_list_free(tokens_list); // Check if tree is empty. - if (tree && tree->next == NULL && tree->type == 0) { + if (tree && tree->next == NULL && tree->type == UNDEFINED) { tree->type = CONSTANT; tree->value = pestrdup("", 1); } diff --git a/src/sp_var_parser.h b/src/sp_var_parser.h index eec1d06..eec77c9 100644 --- a/src/sp_var_parser.h +++ b/src/sp_var_parser.h @@ -1,18 +1,6 @@ #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; +#define SP_VAR_PARSER_H +#include "php_snuffleupagus.h" typedef struct sp_token_s { elem_type type; @@ -20,32 +8,22 @@ typedef struct sp_token_s { 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 OBJECT_TOKEN "->" +#define ARRAY_TOKEN "[" +#define ARRAY_END_TOKEN "]" +#define STRING_TOKEN "\"" +#define ESC_STRING_TOKEN "\'" +#define CLASS_TOKEN "::" -# define VARIABLE_TOKEN '$' +#define VARIABLE_TOKEN '$' -# define PRIVATE_PROP_FMT "%c%s%c%s" -# define PROTECTED_PROP_FMT "%c*%c%s" +#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\\\\]*$" +#define REGEXP_VAR "^\\$[a-z_][a-z0-9_]*$" +#define REGEXP_CONST "^[a-z_0-9\\\\]*$" #endif -- cgit v1.3