114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifndef REGPARSE_H
214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define REGPARSE_H
314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/**********************************************************************
414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  regparse.h -  Oniguruma (regular expression library)
514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng**********************************************************************/
614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/*-
714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * Copyright (c) 2002-2007  K.Kosako  <sndgk393 AT ybb DOT ne DOT jp>
814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * All rights reserved.
914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *
100af8e57c740304a5ee79d40d227b673fa9f223efCinnamon Shia * (C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
1114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *
1214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * Redistribution and use in source and binary forms, with or without
1314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * modification, are permitted provided that the following conditions
1414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * are met:
1514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 1. Redistributions of source code must retain the above copyright
1614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *    notice, this list of conditions and the following disclaimer.
1714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * 2. Redistributions in binary form must reproduce the above copyright
1814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *    notice, this list of conditions and the following disclaimer in the
1914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *    documentation and/or other materials provided with the distribution.
2014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng *
2114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
2514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng * SUCH DAMAGE.
3214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng */
3314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
3414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#include "regint.h"
3514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
3614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/* node type */
3714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_STR         0
3814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_CCLASS      1
3914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_CTYPE       2
4014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_CANY        3
4114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_BREF        4
4214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_QTFR        5
4314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_ENCLOSE     6
4414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_ANCHOR      7
4514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_LIST        8
4614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_ALT         9
4714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NT_CALL       10
4814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
4914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/* node type bit */
5014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NTYPE2BIT(type)      (1<<(type))
5114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
5214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_STR        NTYPE2BIT(NT_STR)
5314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_CCLASS     NTYPE2BIT(NT_CCLASS)
5414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_CTYPE      NTYPE2BIT(NT_CTYPE)
5514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_CANY       NTYPE2BIT(NT_CANY)
5614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_BREF       NTYPE2BIT(NT_BREF)
5714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_QTFR       NTYPE2BIT(NT_QTFR)
5814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_ENCLOSE    NTYPE2BIT(NT_ENCLOSE)
5914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_ANCHOR     NTYPE2BIT(NT_ANCHOR)
6014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_LIST       NTYPE2BIT(NT_LIST)
6114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_ALT        NTYPE2BIT(NT_ALT)
6214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BIT_NT_CALL       NTYPE2BIT(NT_CALL)
6314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
6414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_NODE_TYPE_SIMPLE(type) \
6514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  ((NTYPE2BIT(type) & (BIT_NT_STR | BIT_NT_CCLASS | BIT_NT_CTYPE |\
6614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng                       BIT_NT_CANY | BIT_NT_BREF)) != 0)
6714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
6814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NTYPE(node)             ((node)->u.base.type)
6914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define SET_NTYPE(node, ntype)   (node)->u.base.type = (ntype)
7014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
7114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTR(node)         (&((node)->u.str))
7214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCCLASS(node)      (&((node)->u.cclass))
7314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCTYPE(node)       (&((node)->u.ctype))
7414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NBREF(node)        (&((node)->u.bref))
7514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NQTFR(node)        (&((node)->u.qtfr))
7614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NENCLOSE(node)     (&((node)->u.enclose))
7714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NANCHOR(node)      (&((node)->u.anchor))
7814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCONS(node)        (&((node)->u.cons))
7914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCALL(node)        (&((node)->u.call))
8014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
8114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCAR(node)         (NCONS(node)->car)
8214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NCDR(node)         (NCONS(node)->cdr)
8314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
8414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
8514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
8614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define ANCHOR_ANYCHAR_STAR_MASK (ANCHOR_ANYCHAR_STAR | ANCHOR_ANYCHAR_STAR_ML)
8714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define ANCHOR_END_BUF_MASK      (ANCHOR_END_BUF | ANCHOR_SEMI_END_BUF)
8814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
8914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define ENCLOSE_MEMORY           (1<<0)
9014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define ENCLOSE_OPTION           (1<<1)
9114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define ENCLOSE_STOP_BACKTRACK   (1<<2)
9214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
9314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NODE_STR_MARGIN         16
9414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NODE_STR_BUF_SIZE       24  /* sizeof(CClassNode) - sizeof(int)*4 */
9514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NODE_BACKREFS_SIZE       6
9614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
9714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTR_RAW                (1<<0) /* by backslashed number */
9814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTR_AMBIG              (1<<1)
9914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTR_DONT_GET_OPT_INFO  (1<<2)
10014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
10114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_LEN(node)             ((int)((node)->u.str.end - (node)->u.str.s))
10214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_SET_RAW(node)          (node)->u.str.flag |= NSTR_RAW
10314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_CLEAR_RAW(node)        (node)->u.str.flag &= ~NSTR_RAW
10414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_SET_AMBIG(node)        (node)->u.str.flag |= NSTR_AMBIG
10514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_SET_DONT_GET_OPT_INFO(node) \
10614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  (node)->u.str.flag |= NSTR_DONT_GET_OPT_INFO
10714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_IS_RAW(node)          (((node)->u.str.flag & NSTR_RAW)   != 0)
10814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_IS_AMBIG(node)        (((node)->u.str.flag & NSTR_AMBIG) != 0)
10914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NSTRING_IS_DONT_GET_OPT_INFO(node) \
11014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  (((node)->u.str.flag & NSTR_DONT_GET_OPT_INFO) != 0)
11114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
11214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define BACKREFS_P(br) \
11314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  (IS_NOT_NULL((br)->back_dynamic) ? (br)->back_dynamic : (br)->back_static);
11414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
11514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NQ_TARGET_ISNOT_EMPTY     0
11614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NQ_TARGET_IS_EMPTY        1
11714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NQ_TARGET_IS_EMPTY_MEM    2
11814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NQ_TARGET_IS_EMPTY_REC    3
11914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
12014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng/* status bits */
12114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_MIN_FIXED             (1<<0)
12214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_MAX_FIXED             (1<<1)
12314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_CLEN_FIXED            (1<<2)
12414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_MARK1                 (1<<3)
12514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_MARK2                 (1<<4)
12614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_MEM_BACKREFED         (1<<5)
12714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_STOP_BT_SIMPLE_REPEAT (1<<6)
12814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_RECURSION             (1<<7)
12914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_CALLED                (1<<8)
13014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_ADDR_FIXED            (1<<9)
13114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_NAMED_GROUP           (1<<10)
13214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_NAME_REF              (1<<11)
13314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_IN_REPEAT             (1<<12) /* STK_REPEAT is nested in stack. */
13414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_NEST_LEVEL            (1<<13)
13514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NST_BY_NUMBER             (1<<14) /* {n,m} */
13614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
13714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define SET_ENCLOSE_STATUS(node,f)      (node)->u.enclose.state |=  (f)
13814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define CLEAR_ENCLOSE_STATUS(node,f)    (node)->u.enclose.state &= ~(f)
13914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
14014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_CALLED(en)          (((en)->state & NST_CALLED)        != 0)
14114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_ADDR_FIXED(en)      (((en)->state & NST_ADDR_FIXED)    != 0)
14214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_RECURSION(en)       (((en)->state & NST_RECURSION)     != 0)
14314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_MARK1(en)           (((en)->state & NST_MARK1)         != 0)
14414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_MARK2(en)           (((en)->state & NST_MARK2)         != 0)
14514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_MIN_FIXED(en)       (((en)->state & NST_MIN_FIXED)     != 0)
14614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_MAX_FIXED(en)       (((en)->state & NST_MAX_FIXED)     != 0)
14714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_CLEN_FIXED(en)      (((en)->state & NST_CLEN_FIXED)    != 0)
14814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_STOP_BT_SIMPLE_REPEAT(en) \
14914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    (((en)->state & NST_STOP_BT_SIMPLE_REPEAT) != 0)
15014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_ENCLOSE_NAMED_GROUP(en)     (((en)->state & NST_NAMED_GROUP)   != 0)
15114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
15214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define SET_CALL_RECURSION(node)       (node)->u.call.state |= NST_RECURSION
15314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_CALL_RECURSION(cn)          (((cn)->state & NST_RECURSION)  != 0)
15414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_CALL_NAME_REF(cn)           (((cn)->state & NST_NAME_REF)   != 0)
15514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_BACKREF_NAME_REF(bn)        (((bn)->state & NST_NAME_REF)   != 0)
15614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_BACKREF_NEST_LEVEL(bn)      (((bn)->state & NST_NEST_LEVEL) != 0)
15714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_QUANTIFIER_IN_REPEAT(qn)    (((qn)->state & NST_IN_REPEAT)  != 0)
15814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_QUANTIFIER_BY_NUMBER(qn)    (((qn)->state & NST_BY_NUMBER)  != 0)
15914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
16014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define CALLNODE_REFNUM_UNDEF  -1
16114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
16214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
16314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
16414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar* s;
16514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar* end;
16614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  unsigned int flag;
16714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int    capa;    /* (allocated size - 1) or 0: use buf[] */
16814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar  buf[NODE_STR_BUF_SIZE];
16914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} StrNode;
17014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
17114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
17214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
17314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int state;
17414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* target;
17514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int lower;
17614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int upper;
17714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int greedy;
17814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int target_empty_info;
17914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* head_exact;
18014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* next_head_exact;
18114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int is_refered;     /* include called node. don't eliminate even if {0} */
18214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_COMBINATION_EXPLOSION_CHECK
18314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int comb_exp_check_num;  /* 1,2,3...: check,  0: no check  */
18414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
18514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} QtfrNode;
18614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
18714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
18814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
18914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int state;
19014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int type;
19114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int regnum;
19214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigOptionType option;
19314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node*  target;
19414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  AbsAddrType    call_addr;
19514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  /* for multiple call reference */
19614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigDistance min_len; /* min length (byte) */
19714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigDistance max_len; /* max length (byte) */
19814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int char_len;         /* character length  */
19914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int opt_count;        /* referenced count in optimize_node_left() */
20014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} EncloseNode;
20114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
20214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_SUBEXP_CALL
20314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
20414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
20514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int           offset;
20614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* target;
20714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} UnsetAddr;
20814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
20914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
21014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int        num;
21114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int        alloc;
21214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UnsetAddr* us;
21314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} UnsetAddrList;
21414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
21514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
21614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
21714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int     state;
21814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int     group_num;
21914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*  name;
22014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*  name_end;
22114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node*  target;  /* EncloseNode : ENCLOSE_MEMORY */
22214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UnsetAddrList* unset_addr_list;
22314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} CallNode;
22414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
22514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
22614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
22714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
22814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
22914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int  state;
23014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int  back_num;
23114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int  back_static[NODE_BACKREFS_SIZE];
23214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int* back_dynamic;
23314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int  nest_level;
23414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} BRefNode;
23514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
23614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
23714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
23814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int type;
23914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* target;
24014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int char_len;
24114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} AnchorNode;
24214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
24314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
24414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
24514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* car;
24614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  struct _Node* cdr;
24714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} ConsAltNode;
24814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
24914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
25014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  NodeBase base;
25114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int ctype;
25214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int not;
25314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} CtypeNode;
25414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
25514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct _Node {
25614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  union {
25714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    NodeBase     base;
25814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    StrNode      str;
25914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    CClassNode   cclass;
26014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    QtfrNode     qtfr;
26114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    EncloseNode  enclose;
26214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    BRefNode     bref;
26314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    AnchorNode   anchor;
26414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    ConsAltNode  cons;
26514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    CtypeNode    ctype;
26614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_SUBEXP_CALL
26714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    CallNode     call;
26814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
26914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  } u;
27014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} Node;
27114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
27214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
27314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define NULL_NODE  ((Node* )0)
27414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
27514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define SCANENV_MEMNODES_SIZE               8
27614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define SCANENV_MEM_NODES(senv)   \
27714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng (IS_NOT_NULL((senv)->mem_nodes_dynamic) ? \
27814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng    (senv)->mem_nodes_dynamic : (senv)->mem_nodes_static)
27914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
28014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
28114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigOptionType   option;
28214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigCaseFoldType case_fold_flag;
28314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigEncoding     enc;
28414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  OnigSyntaxType*  syntax;
28514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  BitStatusType    capture_history;
28614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  BitStatusType    bt_mem_start;
28714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  BitStatusType    bt_mem_end;
28814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  BitStatusType    backrefed_mem;
28914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*           pattern;
29014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*           pattern_end;
29114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*           error;
29214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UChar*           error_end;
29314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  regex_t*         reg;       /* for reg->names only */
29414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int              num_call;
29514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_SUBEXP_CALL
29614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  UnsetAddrList*   unset_addr_list;
29714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
29814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int              num_mem;
29914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_NAMED_GROUP
30014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int              num_named;
30114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
30214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int              mem_alloc;
30314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  Node*            mem_nodes_static[SCANENV_MEMNODES_SIZE];
30414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  Node**           mem_nodes_dynamic;
30514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_COMBINATION_EXPLOSION_CHECK
30614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int num_comb_exp_check;
30714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int comb_exp_max_regnum;
30814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int curr_max_regnum;
30914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int has_recursion;
31014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
31114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} ScanEnv;
31214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
31314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
31414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_SYNTAX_OP(syn, opm)    (((syn)->op  & (opm)) != 0)
31514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_SYNTAX_OP2(syn, opm)   (((syn)->op2 & (opm)) != 0)
31614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#define IS_SYNTAX_BV(syn, bvm)    (((syn)->behavior & (bvm)) != 0)
31714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
31814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_NAMED_GROUP
31914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengtypedef struct {
32014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng  int new_val;
32114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng} GroupNumRemap;
32214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
32314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_renumber_name_table P_((regex_t* reg, GroupNumRemap* map));
32414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
32514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
32614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_strncmp P_((const UChar* s1, const UChar* s2, int n));
32714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_strcpy P_((UChar* dest, const UChar* src, const UChar* end));
32814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_scan_env_set_error_string P_((ScanEnv* env, int ecode, UChar* arg, UChar* arg_end));
32914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_scan_unsigned_number P_((UChar** src, const UChar* end, OnigEncoding enc));
33014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_reduce_nested_quantifier P_((Node* pnode, Node* cnode));
33114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_node_conv_to_str_node P_((Node* node, int raw));
33214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_node_str_cat P_((Node* node, const UChar* s, const UChar* end));
33314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_node_str_set P_((Node* node, const UChar* s, const UChar* end));
33414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_node_free P_((Node* node));
33514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_new_enclose P_((int type));
33614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_new_anchor P_((int type));
33714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_new_str P_((const UChar* s, const UChar* end));
33814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_new_list P_((Node* left, Node* right));
33914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_list_add P_((Node* list, Node* x));
34014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern Node*  onig_node_new_alt P_((Node* left, Node* right));
34114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern void   onig_node_str_clear P_((Node* node));
34214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_free_node_list P_((void));
34314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_names_free P_((regex_t* reg));
34414b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_parse_make_tree P_((Node** root, const UChar* pattern, const UChar* end, regex_t* reg, ScanEnv* env));
34514b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int    onig_free_shared_cclass_table P_((void));
34614b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
34714b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef ONIG_DEBUG
34814b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#ifdef USE_NAMED_GROUP
34914b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Shengextern int onig_print_names(FILE*, regex_t*);
35014b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
35114b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif
35214b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng
35314b0e5781bd61e905e4d0c988fc4efbbbc8f1ba0Cecil Sheng#endif /* REGPARSE_H */
354