From: K.Kosako Date: Fri, 26 Jul 2019 04:48:07 +0000 (+0900) Subject: add is_simple_type_node() X-Git-Tag: v6.9.3~32 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c529ab06840d978ea98570486d4df66229d30d38;p=onig add is_simple_type_node() --- diff --git a/src/regcomp.c b/src/regcomp.c index 6a29066..54b5389 100644 --- a/src/regcomp.c +++ b/src/regcomp.c @@ -598,6 +598,23 @@ select_str_opcode(int mb_len, int str_len, int ignore_case) return op; } +static int +is_simple_type_node(Node* node) +{ + switch (NODE_TYPE(node)) { + case NODE_STRING: + case NODE_CCLASS: + case NODE_CTYPE: + case NODE_BACKREF: + return 1; + break; + + default: + return 0; + break; + } +} + static int compile_tree_empty_check(Node* node, regex_t* reg, int empty_info, ScanEnv* env) { @@ -3600,7 +3617,7 @@ next_setup(Node* node, Node* next_node, regex_t* reg) #endif /* automatic posseivation a*b ==> (?>a*)b */ if (qn->lower <= 1) { - if (NODE_IS_SIMPLE_TYPE(NODE_BODY(node))) { + if (is_simple_type_node(NODE_BODY(node))) { Node *x, *y; x = get_head_value_node(NODE_BODY(node), 0, reg); if (IS_NOT_NULL(x)) { @@ -4763,7 +4780,7 @@ setup_tree(Node* node, regex_t* reg, int state, ScanEnv* env) QuantNode* tqn = QUANT_(target); if (IS_REPEAT_INFINITE(tqn->upper) && tqn->lower <= 1 && tqn->greedy != 0) { /* (?>a*), a*+ etc... */ - if (NODE_IS_SIMPLE_TYPE(NODE_BODY(target))) + if (is_simple_type_node(NODE_BODY(target))) NODE_STATUS_ADD(node, STOP_BT_SIMPLE_REPEAT); } }