diff --git a/include/tree.h b/include/tree.h index 8be4b0b..7c51432 100644 --- a/include/tree.h +++ b/include/tree.h @@ -15,7 +15,8 @@ enum libab_tree_variant_e { TREE_NUM, TREE_OP, TREE_RESERVED_OP, - TREE_UNARY_OP, + TREE_PREFIX_OP, + TREE_POSTFIX_OP, TREE_BLOCK, TREE_VOID, TREE_IF, diff --git a/src/debug.c b/src/debug.c index 04e37bb..645eaf7 100644 --- a/src/debug.c +++ b/src/debug.c @@ -10,7 +10,8 @@ const char* _debug_node_name(libab_tree_variant var) { "num", "op", "reserved_op", - "unary_op", + "prefix_op", + "postfix_op", "block", "void", "if", diff --git a/src/parser.c b/src/parser.c index 75bb0b6..b710d25 100644 --- a/src/parser.c +++ b/src/parser.c @@ -721,8 +721,10 @@ libab_result _parser_construct_op(struct parser_state* state, libab_lexer_match* (*into)->variant = TREE_OP; } else if(match->type == TOKEN_OP_RESERVED) { (*into)->variant = TREE_RESERVED_OP; + } else if(match->type == TOKEN_OP_PREFIX) { + (*into)->variant = TREE_PREFIX_OP; } else { - (*into)->variant = TREE_UNARY_OP; + (*into)->variant = TREE_POSTFIX_OP; } } @@ -828,7 +830,7 @@ libab_result _parser_expression_tree(struct parser_state* state, ll* source, lib free(top); top = NULL; } - } else if(top->variant == TREE_UNARY_OP || top->variant == TREE_CALL) { + } else if(top->variant == TREE_PREFIX_OP || top->variant == TREE_POSTFIX_OP || top->variant == TREE_CALL) { libab_tree* child = NULL; result = _parser_expression_tree(state, source, &child); @@ -839,7 +841,7 @@ libab_result _parser_expression_tree(struct parser_state* state, ll* source, lib if(result != LIBAB_SUCCESS) { if(child) libab_tree_free_recursive(child); - if(top->variant == TREE_UNARY_OP) { + if(top->variant == TREE_PREFIX_OP || top->variant == TREE_POSTFIX_OP) { libab_tree_free(top); free(top); } else { diff --git a/src/tree.c b/src/tree.c index 1e6f2b5..b790bcf 100644 --- a/src/tree.c +++ b/src/tree.c @@ -3,7 +3,7 @@ int libab_tree_has_vector(libab_tree_variant variant) { return variant == TREE_BASE || variant == TREE_OP || - variant == TREE_UNARY_OP || variant == TREE_BLOCK || + variant == TREE_PREFIX_OP || variant == TREE_POSTFIX_OP || variant == TREE_BLOCK || variant == TREE_IF || variant == TREE_CALL || variant == TREE_WHILE || variant == TREE_DOWHILE || variant == TREE_FUN || variant == TREE_RETURN || variant == TREE_RESERVED_OP; @@ -11,7 +11,7 @@ int libab_tree_has_vector(libab_tree_variant variant) { int libab_tree_has_string(libab_tree_variant variant) { return variant == TREE_ID || variant == TREE_NUM || - variant == TREE_OP || variant == TREE_UNARY_OP || + variant == TREE_OP || variant == TREE_PREFIX_OP || variant == TREE_POSTFIX_OP || variant == TREE_FUN || variant == TREE_FUN_PARAM || variant == TREE_RESERVED_OP; }