LCOV - code coverage report
Current view: top level - tests - test_as2js_node_data.ci (source / functions) Hit Total Coverage
Test: coverage.info Lines: 46 48 95.8 %
Date: 2014-11-22 Functions: 4 5 80.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* test_as2js_node_data.cpp -- written by Alexis WILKE for Made to Order Software Corp. (c) 2005-2014 */
       2             : 
       3             : /*
       4             : 
       5             : Copyright (c) 2005-2014 Made to Order Software Corp.
       6             : 
       7             : http://snapwebsites.org/project/as2js
       8             : 
       9             : Permission is hereby granted, free of charge, to any
      10             : person obtaining a copy of this software and
      11             : associated documentation files (the "Software"), to
      12             : deal in the Software without restriction, including
      13             : without limitation the rights to use, copy, modify,
      14             : merge, publish, distribute, sublicense, and/or sell
      15             : copies of the Software, and to permit persons to whom
      16             : the Software is furnished to do so, subject to the
      17             : following conditions:
      18             : 
      19             : The above copyright notice and this permission notice
      20             : shall be included in all copies or substantial
      21             : portions of the Software.
      22             : 
      23             : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
      24             : ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
      25             : LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
      26             : FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
      27             : EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      28             : LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
      29             : WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
      30             : ARISING FROM, OUT OF OR IN CONNECTION WITH THE
      31             : SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      32             : SOFTWARE.
      33             : 
      34             : */
      35             : 
      36             : 
      37             : // data made common to both node .cpp files
      38             : namespace
      39             : {
      40             : 
      41             : struct flags_per_node_t
      42             : {
      43             :     as2js::Node::flag_t const   f_flag;
      44             :     char const * const          f_name;
      45             : };
      46             : 
      47             : flags_per_node_t const g_flags_none[] =
      48             : {
      49             :     {
      50             :         as2js::Node::flag_t::NODE_FLAG_max,
      51             :         nullptr
      52             :     }
      53             : };
      54             : 
      55             : flags_per_node_t const g_flags_catch[] =
      56             : {
      57             :     {
      58             :         as2js::Node::flag_t::NODE_CATCH_FLAG_TYPED,
      59             :         "TYPED"
      60             :     },
      61             :     {
      62             :         as2js::Node::flag_t::NODE_FLAG_max,
      63             :         nullptr
      64             :     }
      65             : };
      66             : 
      67             : flags_per_node_t const g_flags_directive_list[] =
      68             : {
      69             :     {
      70             :         as2js::Node::flag_t::NODE_DIRECTIVE_LIST_FLAG_NEW_VARIABLES,
      71             :         "NEW-VARIABLES"
      72             :     },
      73             :     {
      74             :         as2js::Node::flag_t::NODE_FLAG_max,
      75             :         nullptr
      76             :     }
      77             : };
      78             : 
      79             : flags_per_node_t const g_flags_enum[] =
      80             : {
      81             :     {
      82             :         as2js::Node::flag_t::NODE_ENUM_FLAG_CLASS,
      83             :         "CLASS"
      84             :     },
      85             :     {
      86             :         as2js::Node::flag_t::NODE_FLAG_max,
      87             :         nullptr
      88             :     }
      89             : };
      90             : 
      91             : flags_per_node_t const g_flags_for[] =
      92             : {
      93             :     {
      94             :         as2js::Node::flag_t::NODE_FOR_FLAG_CONST,
      95             :         "CONST"
      96             :     },
      97             :     {
      98             :         as2js::Node::flag_t::NODE_FOR_FLAG_FOREACH,
      99             :         "FOREACH"
     100             :     },
     101             :     {
     102             :         as2js::Node::flag_t::NODE_FOR_FLAG_IN,
     103             :         "IN"
     104             :     },
     105             :     {
     106             :         as2js::Node::flag_t::NODE_FLAG_max,
     107             :         nullptr
     108             :     }
     109             : };
     110             : 
     111             : flags_per_node_t const g_flags_function[] =
     112             : {
     113             :     {
     114             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_GETTER,
     115             :         "GETTER"
     116             :     },
     117             :     {
     118             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_SETTER,
     119             :         "SETTER"
     120             :     },
     121             :     {
     122             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_OUT,
     123             :         "OUT"
     124             :     },
     125             :     {
     126             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_VOID,
     127             :         "VOID"
     128             :     },
     129             :     {
     130             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_NEVER,
     131             :         "NEVER"
     132             :     },
     133             :     {
     134             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_NOPARAMS,
     135             :         "NOPARAMS"
     136             :     },
     137             :     {
     138             :         as2js::Node::flag_t::NODE_FUNCTION_FLAG_OPERATOR,
     139             :         "OPERATOR"
     140             :     },
     141             :     {
     142             :         as2js::Node::flag_t::NODE_FLAG_max,
     143             :         nullptr
     144             :     }
     145             : };
     146             : 
     147             : flags_per_node_t const g_flags_identifier[] =
     148             : {
     149             :     {
     150             :         as2js::Node::flag_t::NODE_IDENTIFIER_FLAG_WITH,
     151             :         "WITH"
     152             :     },
     153             :     {
     154             :         as2js::Node::flag_t::NODE_IDENTIFIER_FLAG_TYPED,
     155             :         "TYPED"
     156             :     },
     157             :     {
     158             :         as2js::Node::flag_t::NODE_FLAG_max,
     159             :         nullptr
     160             :     }
     161             : };
     162             : 
     163             : flags_per_node_t const g_flags_import[] =
     164             : {
     165             :     {
     166             :         as2js::Node::flag_t::NODE_IMPORT_FLAG_IMPLEMENTS,
     167             :         "IMPLEMENTS"
     168             :     },
     169             :     {
     170             :         as2js::Node::flag_t::NODE_FLAG_max,
     171             :         nullptr
     172             :     }
     173             : };
     174             : 
     175             : flags_per_node_t const g_flags_package[] =
     176             : {
     177             :     {
     178             :         as2js::Node::flag_t::NODE_PACKAGE_FLAG_FOUND_LABELS,
     179             :         "FOUND-LABELS"
     180             :     },
     181             :     {
     182             :         as2js::Node::flag_t::NODE_PACKAGE_FLAG_REFERENCED,
     183             :         "REFERENCED"
     184             :     },
     185             :     {
     186             :         as2js::Node::flag_t::NODE_FLAG_max,
     187             :         nullptr
     188             :     }
     189             : };
     190             : 
     191             : flags_per_node_t const g_flags_param_match[] =
     192             : {
     193             :     {
     194             :         as2js::Node::flag_t::NODE_PARAM_MATCH_FLAG_UNPROTOTYPED,
     195             :         "UNPROTOTYPED"
     196             :     },
     197             :     {
     198             :         as2js::Node::flag_t::NODE_FLAG_max,
     199             :         nullptr
     200             :     }
     201             : };
     202             : 
     203             : flags_per_node_t const g_flags_param[] =
     204             : {
     205             :     {
     206             :         as2js::Node::flag_t::NODE_PARAM_FLAG_CONST,
     207             :         "CONST"
     208             :     },
     209             :     {
     210             :         as2js::Node::flag_t::NODE_PARAM_FLAG_IN,
     211             :         "IN"
     212             :     },
     213             :     {
     214             :         as2js::Node::flag_t::NODE_PARAM_FLAG_OUT,
     215             :         "OUT"
     216             :     },
     217             :     {
     218             :         as2js::Node::flag_t::NODE_PARAM_FLAG_NAMED,
     219             :         "NAMED"
     220             :     },
     221             :     {
     222             :         as2js::Node::flag_t::NODE_PARAM_FLAG_REST,
     223             :         "REST"
     224             :     },
     225             :     {
     226             :         as2js::Node::flag_t::NODE_PARAM_FLAG_UNCHECKED,
     227             :         "UNCHECKED"
     228             :     },
     229             :     {
     230             :         as2js::Node::flag_t::NODE_PARAM_FLAG_UNPROTOTYPED,
     231             :         "UNPROTOTYPED"
     232             :     },
     233             :     {
     234             :         as2js::Node::flag_t::NODE_PARAM_FLAG_REFERENCED,
     235             :         "REFERENCED"
     236             :     },
     237             :     {
     238             :         as2js::Node::flag_t::NODE_PARAM_FLAG_PARAMREF,
     239             :         "PARAMREF"
     240             :     },
     241             :     {
     242             :         as2js::Node::flag_t::NODE_PARAM_FLAG_CATCH,
     243             :         "CATCH"
     244             :     },
     245             :     {
     246             :         as2js::Node::flag_t::NODE_FLAG_max,
     247             :         nullptr
     248             :     }
     249             : };
     250             : 
     251             : flags_per_node_t const g_flags_switch[] =
     252             : {
     253             :     {
     254             :         as2js::Node::flag_t::NODE_SWITCH_FLAG_DEFAULT,
     255             :         "DEFAULT"
     256             :     },
     257             :     {
     258             :         as2js::Node::flag_t::NODE_FLAG_max,
     259             :         nullptr
     260             :     }
     261             : };
     262             : 
     263             : flags_per_node_t const g_flags_type[] =
     264             : {
     265             :     {
     266             :         as2js::Node::flag_t::NODE_TYPE_FLAG_MODULO,
     267             :         "MODULO"
     268             :     },
     269             :     {
     270             :         as2js::Node::flag_t::NODE_FLAG_max,
     271             :         nullptr
     272             :     }
     273             : };
     274             : 
     275             : flags_per_node_t const g_flags_variable[] =
     276             : {
     277             :     {
     278             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_CONST,
     279             :         "CONST"
     280             :     },
     281             :     {
     282             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_LOCAL,
     283             :         "LOCAL"
     284             :     },
     285             :     {
     286             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_MEMBER,
     287             :         "MEMBER"
     288             :     },
     289             :     {
     290             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_ATTRIBUTES,
     291             :         "ATTRIBUTES"
     292             :     },
     293             :     {
     294             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_ENUM,
     295             :         "ENUM"
     296             :     },
     297             :     {
     298             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_COMPILED,
     299             :         "COMPILED"
     300             :     },
     301             :     {
     302             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_INUSE,
     303             :         "INUSE"
     304             :     },
     305             :     {
     306             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_ATTRS,
     307             :         "ATTRS"
     308             :     },
     309             :     {
     310             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_DEFINED,
     311             :         "DEFINED"
     312             :     },
     313             :     {
     314             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_DEFINING,
     315             :         "DEFINING"
     316             :     },
     317             :     {
     318             :         as2js::Node::flag_t::NODE_VARIABLE_FLAG_TOADD,
     319             :         "TOADD"
     320             :     },
     321             :     {
     322             :         as2js::Node::flag_t::NODE_FLAG_max,
     323             :         nullptr
     324             :     }
     325             : };
     326             : 
     327             : 
     328             : 
     329             : 
     330             : struct node_type_info_t
     331             : {
     332             :     as2js::Node::node_t         f_type;
     333             :     char const *                f_name;
     334             :     char const *                f_operator;
     335             :     uint64_t                    f_flags;
     336             :     flags_per_node_t const *    f_node_flags;
     337             : };
     338             : 
     339             : 
     340             : uint64_t const              TEST_NODE_IS_NUMBER          = 0x0000000000000001;
     341             : uint64_t const              TEST_NODE_IS_NAN             = 0x0000000000000002;
     342             : uint64_t const              TEST_NODE_IS_INT64           = 0x0000000000000004;
     343             : uint64_t const              TEST_NODE_IS_FLOAT64         = 0x0000000000000008;
     344             : uint64_t const              TEST_NODE_IS_BOOLEAN         = 0x0000000000000010;
     345             : uint64_t const              TEST_NODE_IS_TRUE            = 0x0000000000000020;
     346             : uint64_t const              TEST_NODE_IS_FALSE           = 0x0000000000000040;
     347             : uint64_t const              TEST_NODE_IS_STRING          = 0x0000000000000080;
     348             : uint64_t const              TEST_NODE_IS_UNDEFINED       = 0x0000000000000100;
     349             : uint64_t const              TEST_NODE_IS_NULL            = 0x0000000000000200;
     350             : uint64_t const              TEST_NODE_IS_IDENTIFIER      = 0x0000000000000400;
     351             : uint64_t const              TEST_NODE_ACCEPT_STRING      = 0x0000000000000800;
     352             : uint64_t const              TEST_NODE_HAS_SIDE_EFFECTS   = 0x0000000000001000;
     353             : uint64_t const              TEST_NODE_IS_PARAM_MATCH     = 0x0000000000002000;
     354             : uint64_t const              TEST_NODE_IS_SWITCH_OPERATOR = 0x0000000000004000;
     355             : 
     356             : // index from 0 to g_node_types_size - 1 to go through all the valid
     357             : // node types
     358             : #pragma GCC diagnostic push
     359             : #pragma GCC diagnostic ignored "-Wpedantic"
     360             : // pedantic because the .<field_name> is not accepted by default in C++
     361             : node_type_info_t const g_node_types[] =
     362             : {
     363             :     {
     364             :         .f_type = as2js::Node::node_t::NODE_EOF,
     365             :         .f_name = "EOF",
     366             :         .f_operator = nullptr,
     367             :         .f_flags = TEST_NODE_IS_NAN,
     368             :         .f_node_flags = g_flags_none
     369             :     },
     370             :     {
     371             :         .f_type = as2js::Node::node_t::NODE_UNKNOWN,
     372             :         .f_name = "UNKNOWN",
     373             :         .f_operator = nullptr,
     374             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     375             :         .f_node_flags = g_flags_none
     376             :     },
     377             :     {
     378             :         .f_type = as2js::Node::node_t::NODE_ADD,
     379             :         .f_name = "ADD",
     380             :         .f_operator = "+",
     381             :         .f_flags = TEST_NODE_IS_NAN,
     382             :         .f_node_flags = g_flags_none
     383             :     },
     384             :     {
     385             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT,
     386             :         .f_name = "ASSIGNMENT",
     387             :         .f_operator = "=",
     388             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     389             :         .f_node_flags = g_flags_none
     390             :     },
     391             :     {
     392             :         .f_type = as2js::Node::node_t::NODE_BITWISE_AND,
     393             :         .f_name = "BITWISE_AND",
     394             :         .f_operator = "&",
     395             :         .f_flags = TEST_NODE_IS_NAN,
     396             :         .f_node_flags = g_flags_none
     397             :     },
     398             :     {
     399             :         .f_type = as2js::Node::node_t::NODE_BITWISE_NOT,
     400             :         .f_name = "BITWISE_NOT",
     401             :         .f_operator = "~",
     402             :         .f_flags = TEST_NODE_IS_NAN,
     403             :         .f_node_flags = g_flags_none
     404             :     },
     405             :     {
     406             :         .f_type = as2js::Node::node_t::NODE_BITWISE_OR,
     407             :         .f_name = "BITWISE_OR",
     408             :         .f_operator = "|",
     409             :         .f_flags = TEST_NODE_IS_NAN,
     410             :         .f_node_flags = g_flags_none
     411             :     },
     412             :     {
     413             :         .f_type = as2js::Node::node_t::NODE_BITWISE_XOR,
     414             :         .f_name = "BITWISE_XOR",
     415             :         .f_operator = "^",
     416             :         .f_flags = TEST_NODE_IS_NAN,
     417             :         .f_node_flags = g_flags_none
     418             :     },
     419             :     {
     420             :         .f_type = as2js::Node::node_t::NODE_CLOSE_CURVLY_BRACKET,
     421             :         .f_name = "CLOSE_CURVLY_BRACKET",
     422             :         .f_operator = nullptr,
     423             :         .f_flags = TEST_NODE_IS_NAN,
     424             :         .f_node_flags = g_flags_none
     425             :     },
     426             :     {
     427             :         .f_type = as2js::Node::node_t::NODE_CLOSE_PARENTHESIS,
     428             :         .f_name = "CLOSE_PARENTHESIS",
     429             :         .f_operator = nullptr,
     430             :         .f_flags = TEST_NODE_IS_NAN,
     431             :         .f_node_flags = g_flags_none
     432             :     },
     433             :     {
     434             :         .f_type = as2js::Node::node_t::NODE_CLOSE_SQUARE_BRACKET,
     435             :         .f_name = "CLOSE_SQUARE_BRACKET",
     436             :         .f_operator = nullptr,
     437             :         .f_flags = TEST_NODE_IS_NAN,
     438             :         .f_node_flags = g_flags_none
     439             :     },
     440             :     {
     441             :         .f_type = as2js::Node::node_t::NODE_COLON,
     442             :         .f_name = "COLON",
     443             :         .f_operator = nullptr,
     444             :         .f_flags = TEST_NODE_IS_NAN,
     445             :         .f_node_flags = g_flags_none
     446             :     },
     447             :     {
     448             :         .f_type = as2js::Node::node_t::NODE_COMMA,
     449             :         .f_name = "COMMA",
     450             :         .f_operator = nullptr,
     451             :         .f_flags = TEST_NODE_IS_NAN,
     452             :         .f_node_flags = g_flags_none
     453             :     },
     454             :     {
     455             :         .f_type = as2js::Node::node_t::NODE_CONDITIONAL,
     456             :         .f_name = "CONDITIONAL",
     457             :         .f_operator = nullptr,
     458             :         .f_flags = TEST_NODE_IS_NAN,
     459             :         .f_node_flags = g_flags_none
     460             :     },
     461             :     {
     462             :         .f_type = as2js::Node::node_t::NODE_DIVIDE,
     463             :         .f_name = "DIVIDE",
     464             :         .f_operator = "/",
     465             :         .f_flags = TEST_NODE_IS_NAN,
     466             :         .f_node_flags = g_flags_none
     467             :     },
     468             :     {
     469             :         .f_type = as2js::Node::node_t::NODE_GREATER,
     470             :         .f_name = "GREATER",
     471             :         .f_operator = ">",
     472             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     473             :         .f_node_flags = g_flags_none
     474             :     },
     475             :     {
     476             :         .f_type = as2js::Node::node_t::NODE_LESS,
     477             :         .f_name = "LESS",
     478             :         .f_operator = "<",
     479             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     480             :         .f_node_flags = g_flags_none
     481             :     },
     482             :     {
     483             :         .f_type = as2js::Node::node_t::NODE_LOGICAL_NOT,
     484             :         .f_name = "LOGICAL_NOT",
     485             :         .f_operator = "!",
     486             :         .f_flags = TEST_NODE_IS_NAN,
     487             :         .f_node_flags = g_flags_none
     488             :     },
     489             :     {
     490             :         .f_type = as2js::Node::node_t::NODE_MODULO,
     491             :         .f_name = "MODULO",
     492             :         .f_operator = "%",
     493             :         .f_flags = TEST_NODE_IS_NAN,
     494             :         .f_node_flags = g_flags_none
     495             :     },
     496             :     {
     497             :         .f_type = as2js::Node::node_t::NODE_MULTIPLY,
     498             :         .f_name = "MULTIPLY",
     499             :         .f_operator = "*",
     500             :         .f_flags = TEST_NODE_IS_NAN,
     501             :         .f_node_flags = g_flags_none
     502             :     },
     503             :     {
     504             :         .f_type = as2js::Node::node_t::NODE_OPEN_CURVLY_BRACKET,
     505             :         .f_name = "OPEN_CURVLY_BRACKET",
     506             :         .f_operator = nullptr,
     507             :         .f_flags = TEST_NODE_IS_NAN,
     508             :         .f_node_flags = g_flags_none
     509             :     },
     510             :     {
     511             :         .f_type = as2js::Node::node_t::NODE_OPEN_PARENTHESIS,
     512             :         .f_name = "OPEN_PARENTHESIS",
     513             :         .f_operator = nullptr,
     514             :         .f_flags = TEST_NODE_IS_NAN,
     515             :         .f_node_flags = g_flags_none
     516             :     },
     517             :     {
     518             :         .f_type = as2js::Node::node_t::NODE_OPEN_SQUARE_BRACKET,
     519             :         .f_name = "OPEN_SQUARE_BRACKET",
     520             :         .f_operator = nullptr,
     521             :         .f_flags = TEST_NODE_IS_NAN,
     522             :         .f_node_flags = g_flags_none
     523             :     },
     524             :     {
     525             :         .f_type = as2js::Node::node_t::NODE_MEMBER,
     526             :         .f_name = "MEMBER",
     527             :         .f_operator = nullptr,
     528             :         .f_flags = TEST_NODE_IS_NAN,
     529             :         .f_node_flags = g_flags_none
     530             :     },
     531             :     {
     532             :         .f_type = as2js::Node::node_t::NODE_SEMICOLON,
     533             :         .f_name = "SEMICOLON",
     534             :         .f_operator = nullptr,
     535             :         .f_flags = TEST_NODE_IS_NAN,
     536             :         .f_node_flags = g_flags_none
     537             :     },
     538             :     {
     539             :         .f_type = as2js::Node::node_t::NODE_SUBTRACT,
     540             :         .f_name = "SUBTRACT",
     541             :         .f_operator = "-",
     542             :         .f_flags = TEST_NODE_IS_NAN,
     543             :         .f_node_flags = g_flags_none
     544             :     },
     545             :     {
     546             :         .f_type = as2js::Node::node_t::NODE_ABSTRACT,
     547             :         .f_name = "ABSTRACT",
     548             :         .f_operator = nullptr,
     549             :         .f_flags = TEST_NODE_IS_NAN,
     550             :         .f_node_flags = g_flags_none
     551             :     },
     552             :     {
     553             :         .f_type = as2js::Node::node_t::NODE_ARRAY,
     554             :         .f_name = "ARRAY",
     555             :         .f_operator = nullptr,
     556             :         .f_flags = TEST_NODE_IS_NAN,
     557             :         .f_node_flags = g_flags_none
     558             :     },
     559             :     {
     560             :         .f_type = as2js::Node::node_t::NODE_ARRAY_LITERAL,
     561             :         .f_name = "ARRAY_LITERAL",
     562             :         .f_operator = nullptr,
     563             :         .f_flags = TEST_NODE_IS_NAN,
     564             :         .f_node_flags = g_flags_none
     565             :     },
     566             :     {
     567             :         .f_type = as2js::Node::node_t::NODE_AS,
     568             :         .f_name = "AS",
     569             :         .f_operator = nullptr,
     570             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     571             :         .f_node_flags = g_flags_none
     572             :     },
     573             :     {
     574             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_ADD,
     575             :         .f_name = "ASSIGNMENT_ADD",
     576             :         .f_operator = "+=",
     577             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     578             :         .f_node_flags = g_flags_none
     579             :     },
     580             :     {
     581             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_BITWISE_AND,
     582             :         .f_name = "ASSIGNMENT_BITWISE_AND",
     583             :         .f_operator = "&=",
     584             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     585             :         .f_node_flags = g_flags_none
     586             :     },
     587             :     {
     588             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_BITWISE_OR,
     589             :         .f_name = "ASSIGNMENT_BITWISE_OR",
     590             :         .f_operator = "|=",
     591             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     592             :         .f_node_flags = g_flags_none
     593             :     },
     594             :     {
     595             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_BITWISE_XOR,
     596             :         .f_name = "ASSIGNMENT_BITWISE_XOR",
     597             :         .f_operator = "^=",
     598             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     599             :         .f_node_flags = g_flags_none
     600             :     },
     601             :     {
     602             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_DIVIDE,
     603             :         .f_name = "ASSIGNMENT_DIVIDE",
     604             :         .f_operator = "/=",
     605             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     606             :         .f_node_flags = g_flags_none
     607             :     },
     608             :     {
     609             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_LOGICAL_AND,
     610             :         .f_name = "ASSIGNMENT_LOGICAL_AND",
     611             :         .f_operator = "&&=",
     612             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     613             :         .f_node_flags = g_flags_none
     614             :     },
     615             :     {
     616             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_LOGICAL_OR,
     617             :         .f_name = "ASSIGNMENT_LOGICAL_OR",
     618             :         .f_operator = "||=",
     619             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     620             :         .f_node_flags = g_flags_none
     621             :     },
     622             :     {
     623             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_LOGICAL_XOR,
     624             :         .f_name = "ASSIGNMENT_LOGICAL_XOR",
     625             :         .f_operator = "^^=",
     626             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     627             :         .f_node_flags = g_flags_none
     628             :     },
     629             :     {
     630             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_MAXIMUM,
     631             :         .f_name = "ASSIGNMENT_MAXIMUM",
     632             :         .f_operator = ">?=",
     633             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     634             :         .f_node_flags = g_flags_none
     635             :     },
     636             :     {
     637             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_MINIMUM,
     638             :         .f_name = "ASSIGNMENT_MINIMUM",
     639             :         .f_operator = "<?=",
     640             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     641             :         .f_node_flags = g_flags_none
     642             :     },
     643             :     {
     644             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_MODULO,
     645             :         .f_name = "ASSIGNMENT_MODULO",
     646             :         .f_operator = "%=",
     647             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     648             :         .f_node_flags = g_flags_none
     649             :     },
     650             :     {
     651             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_MULTIPLY,
     652             :         .f_name = "ASSIGNMENT_MULTIPLY",
     653             :         .f_operator = "*=",
     654             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     655             :         .f_node_flags = g_flags_none
     656             :     },
     657             :     {
     658             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_POWER,
     659             :         .f_name = "ASSIGNMENT_POWER",
     660             :         .f_operator = "**=",
     661             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     662             :         .f_node_flags = g_flags_none
     663             :     },
     664             :     {
     665             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_ROTATE_LEFT,
     666             :         .f_name = "ASSIGNMENT_ROTATE_LEFT",
     667             :         .f_operator = "<%=",
     668             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     669             :         .f_node_flags = g_flags_none
     670             :     },
     671             :     {
     672             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_ROTATE_RIGHT,
     673             :         .f_name = "ASSIGNMENT_ROTATE_RIGHT",
     674             :         .f_operator = ">%=",
     675             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     676             :         .f_node_flags = g_flags_none
     677             :     },
     678             :     {
     679             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_SHIFT_LEFT,
     680             :         .f_name = "ASSIGNMENT_SHIFT_LEFT",
     681             :         .f_operator = "<<=",
     682             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     683             :         .f_node_flags = g_flags_none
     684             :     },
     685             :     {
     686             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_SHIFT_RIGHT,
     687             :         .f_name = "ASSIGNMENT_SHIFT_RIGHT",
     688             :         .f_operator = ">>=",
     689             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     690             :         .f_node_flags = g_flags_none
     691             :     },
     692             :     {
     693             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_SHIFT_RIGHT_UNSIGNED,
     694             :         .f_name = "ASSIGNMENT_SHIFT_RIGHT_UNSIGNED",
     695             :         .f_operator = ">>>=",
     696             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     697             :         .f_node_flags = g_flags_none
     698             :     },
     699             :     {
     700             :         .f_type = as2js::Node::node_t::NODE_ASSIGNMENT_SUBTRACT,
     701             :         .f_name = "ASSIGNMENT_SUBTRACT",
     702             :         .f_operator = "-=",
     703             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     704             :         .f_node_flags = g_flags_none
     705             :     },
     706             :     {
     707             :         .f_type = as2js::Node::node_t::NODE_ATTRIBUTES,
     708             :         .f_name = "ATTRIBUTES",
     709             :         .f_operator = nullptr,
     710             :         .f_flags = TEST_NODE_IS_NAN,
     711             :         .f_node_flags = g_flags_none
     712             :     },
     713             :     {
     714             :         .f_type = as2js::Node::node_t::NODE_AUTO,
     715             :         .f_name = "AUTO",
     716             :         .f_operator = nullptr,
     717             :         .f_flags = TEST_NODE_IS_NAN,
     718             :         .f_node_flags = g_flags_none
     719             :     },
     720             :     {
     721             :         .f_type = as2js::Node::node_t::NODE_BOOLEAN,
     722             :         .f_name = "BOOLEAN",
     723             :         .f_operator = nullptr,
     724             :         .f_flags = TEST_NODE_IS_NAN,
     725             :         .f_node_flags = g_flags_none
     726             :     },
     727             :     {
     728             :         .f_type = as2js::Node::node_t::NODE_BREAK,
     729             :         .f_name = "BREAK",
     730             :         .f_operator = nullptr,
     731             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     732             :         .f_node_flags = g_flags_none
     733             :     },
     734             :     {
     735             :         .f_type = as2js::Node::node_t::NODE_BYTE,
     736             :         .f_name = "BYTE",
     737             :         .f_operator = nullptr,
     738             :         .f_flags = TEST_NODE_IS_NAN,
     739             :         .f_node_flags = g_flags_none
     740             :     },
     741             :     {
     742             :         .f_type = as2js::Node::node_t::NODE_CALL,
     743             :         .f_name = "CALL",
     744             :         .f_operator = "()",
     745             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     746             :         .f_node_flags = g_flags_none
     747             :     },
     748             :     {
     749             :         .f_type = as2js::Node::node_t::NODE_CASE,
     750             :         .f_name = "CASE",
     751             :         .f_operator = nullptr,
     752             :         .f_flags = TEST_NODE_IS_NAN,
     753             :         .f_node_flags = g_flags_none
     754             :     },
     755             :     {
     756             :         .f_type = as2js::Node::node_t::NODE_CATCH,
     757             :         .f_name = "CATCH",
     758             :         .f_operator = nullptr,
     759             :         .f_flags = TEST_NODE_IS_NAN,
     760             :         .f_node_flags = g_flags_catch
     761             :     },
     762             :     {
     763             :         .f_type = as2js::Node::node_t::NODE_CHAR,
     764             :         .f_name = "CHAR",
     765             :         .f_operator = nullptr,
     766             :         .f_flags = TEST_NODE_IS_NAN,
     767             :         .f_node_flags = g_flags_none
     768             :     },
     769             :     {
     770             :         .f_type = as2js::Node::node_t::NODE_CLASS,
     771             :         .f_name = "CLASS",
     772             :         .f_operator = nullptr,
     773             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     774             :         .f_node_flags = g_flags_none
     775             :     },
     776             :     {
     777             :         .f_type = as2js::Node::node_t::NODE_COMPARE,
     778             :         .f_name = "COMPARE",
     779             :         .f_operator = "<=>",
     780             :         .f_flags = TEST_NODE_IS_NAN,
     781             :         .f_node_flags = g_flags_none
     782             :     },
     783             :     {
     784             :         .f_type = as2js::Node::node_t::NODE_CONST,
     785             :         .f_name = "CONST",
     786             :         .f_operator = nullptr,
     787             :         .f_flags = TEST_NODE_IS_NAN,
     788             :         .f_node_flags = g_flags_none
     789             :     },
     790             :     {
     791             :         .f_type = as2js::Node::node_t::NODE_CONTINUE,
     792             :         .f_name = "CONTINUE",
     793             :         .f_operator = nullptr,
     794             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     795             :         .f_node_flags = g_flags_none
     796             :     },
     797             :     {
     798             :         .f_type = as2js::Node::node_t::NODE_DEBUGGER,
     799             :         .f_name = "DEBUGGER",
     800             :         .f_operator = nullptr,
     801             :         .f_flags = TEST_NODE_IS_NAN,
     802             :         .f_node_flags = g_flags_none
     803             :     },
     804             :     {
     805             :         .f_type = as2js::Node::node_t::NODE_DECREMENT,
     806             :         .f_name = "DECREMENT",
     807             :         .f_operator = "--x",
     808             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     809             :         .f_node_flags = g_flags_none
     810             :     },
     811             :     {
     812             :         .f_type = as2js::Node::node_t::NODE_DEFAULT,
     813             :         .f_name = "DEFAULT",
     814             :         .f_operator = nullptr,
     815             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     816             :         .f_node_flags = g_flags_none
     817             :     },
     818             :     {
     819             :         .f_type = as2js::Node::node_t::NODE_DELETE,
     820             :         .f_name = "DELETE",
     821             :         .f_operator = nullptr,
     822             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
     823             :         .f_node_flags = g_flags_none
     824             :     },
     825             :     {
     826             :         .f_type = as2js::Node::node_t::NODE_DIRECTIVE_LIST,
     827             :         .f_name = "DIRECTIVE_LIST",
     828             :         .f_operator = nullptr,
     829             :         .f_flags = TEST_NODE_IS_NAN,
     830             :         .f_node_flags = g_flags_directive_list
     831             :     },
     832             :     {
     833             :         .f_type = as2js::Node::node_t::NODE_DO,
     834             :         .f_name = "DO",
     835             :         .f_operator = nullptr,
     836             :         .f_flags = TEST_NODE_IS_NAN,
     837             :         .f_node_flags = g_flags_none
     838             :     },
     839             :     {
     840             :         .f_type = as2js::Node::node_t::NODE_DOUBLE,
     841             :         .f_name = "DOUBLE",
     842             :         .f_operator = nullptr,
     843             :         .f_flags = TEST_NODE_IS_NAN,
     844             :         .f_node_flags = g_flags_none
     845             :     },
     846             :     {
     847             :         .f_type = as2js::Node::node_t::NODE_ELSE,
     848             :         .f_name = "ELSE",
     849             :         .f_operator = nullptr,
     850             :         .f_flags = TEST_NODE_IS_NAN,
     851             :         .f_node_flags = g_flags_none
     852             :     },
     853             :     {
     854             :         .f_type = as2js::Node::node_t::NODE_EMPTY,
     855             :         .f_name = "EMPTY",
     856             :         .f_operator = nullptr,
     857             :         .f_flags = TEST_NODE_IS_NAN,
     858             :         .f_node_flags = g_flags_none
     859             :     },
     860             :     {
     861             :         .f_type = as2js::Node::node_t::NODE_ENSURE,
     862             :         .f_name = "ENSURE",
     863             :         .f_operator = nullptr,
     864             :         .f_flags = TEST_NODE_IS_NAN,
     865             :         .f_node_flags = g_flags_none
     866             :     },
     867             :     {
     868             :         .f_type = as2js::Node::node_t::NODE_ENUM,
     869             :         .f_name = "ENUM",
     870             :         .f_operator = nullptr,
     871             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     872             :         .f_node_flags = g_flags_enum
     873             :     },
     874             :     {
     875             :         .f_type = as2js::Node::node_t::NODE_EQUAL,
     876             :         .f_name = "EQUAL",
     877             :         .f_operator = "==",
     878             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     879             :         .f_node_flags = g_flags_none
     880             :     },
     881             :     {
     882             :         .f_type = as2js::Node::node_t::NODE_EXCLUDE,
     883             :         .f_name = "EXCLUDE",
     884             :         .f_operator = nullptr,
     885             :         .f_flags = TEST_NODE_IS_NAN,
     886             :         .f_node_flags = g_flags_none
     887             :     },
     888             :     {
     889             :         .f_type = as2js::Node::node_t::NODE_EXTENDS,
     890             :         .f_name = "EXTENDS",
     891             :         .f_operator = nullptr,
     892             :         .f_flags = TEST_NODE_IS_NAN,
     893             :         .f_node_flags = g_flags_none
     894             :     },
     895             :     {
     896             :         .f_type = as2js::Node::node_t::NODE_EXPORT,
     897             :         .f_name = "EXPORT",
     898             :         .f_operator = nullptr,
     899             :         .f_flags = TEST_NODE_IS_NAN,
     900             :         .f_node_flags = g_flags_none
     901             :     },
     902             :     {
     903             :         .f_type = as2js::Node::node_t::NODE_FALSE,
     904             :         .f_name = "FALSE",
     905             :         .f_operator = nullptr,
     906             :         .f_flags = TEST_NODE_IS_BOOLEAN | TEST_NODE_IS_FALSE,
     907             :         .f_node_flags = g_flags_none
     908             :     },
     909             :     {
     910             :         .f_type = as2js::Node::node_t::NODE_FINAL,
     911             :         .f_name = "FINAL",
     912             :         .f_operator = nullptr,
     913             :         .f_flags = TEST_NODE_IS_NAN,
     914             :         .f_node_flags = g_flags_none
     915             :     },
     916             :     {
     917             :         .f_type = as2js::Node::node_t::NODE_FINALLY,
     918             :         .f_name = "FINALLY",
     919             :         .f_operator = nullptr,
     920             :         .f_flags = TEST_NODE_IS_NAN,
     921             :         .f_node_flags = g_flags_none
     922             :     },
     923             :     {
     924             :         .f_type = as2js::Node::node_t::NODE_FLOAT,
     925             :         .f_name = "FLOAT",
     926             :         .f_operator = nullptr,
     927             :         .f_flags = TEST_NODE_IS_NAN,
     928             :         .f_node_flags = g_flags_none
     929             :     },
     930             :     {
     931             :         .f_type = as2js::Node::node_t::NODE_FLOAT64,
     932             :         .f_name = "FLOAT64",
     933             :         .f_operator = nullptr,
     934             :         .f_flags = TEST_NODE_IS_NUMBER | TEST_NODE_IS_FLOAT64,
     935             :         .f_node_flags = g_flags_none
     936             :     },
     937             :     {
     938             :         .f_type = as2js::Node::node_t::NODE_FOR,
     939             :         .f_name = "FOR",
     940             :         .f_operator = nullptr,
     941             :         .f_flags = TEST_NODE_IS_NAN,
     942             :         .f_node_flags = g_flags_for
     943             :     },
     944             :     {
     945             :         .f_type = as2js::Node::node_t::NODE_FUNCTION,
     946             :         .f_name = "FUNCTION",
     947             :         .f_operator = nullptr,
     948             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     949             :         .f_node_flags = g_flags_function
     950             :     },
     951             :     {
     952             :         .f_type = as2js::Node::node_t::NODE_GOTO,
     953             :         .f_name = "GOTO",
     954             :         .f_operator = nullptr,
     955             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     956             :         .f_node_flags = g_flags_none
     957             :     },
     958             :     {
     959             :         .f_type = as2js::Node::node_t::NODE_GREATER_EQUAL,
     960             :         .f_name = "GREATER_EQUAL",
     961             :         .f_operator = ">=",
     962             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     963             :         .f_node_flags = g_flags_none
     964             :     },
     965             :     {
     966             :         .f_type = as2js::Node::node_t::NODE_IDENTIFIER,
     967             :         .f_name = "IDENTIFIER",
     968             :         .f_operator = nullptr,
     969             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_IDENTIFIER | TEST_NODE_ACCEPT_STRING,
     970             :         .f_node_flags = g_flags_identifier
     971             :     },
     972             :     {
     973             :         .f_type = as2js::Node::node_t::NODE_IF,
     974             :         .f_name = "IF",
     975             :         .f_operator = nullptr,
     976             :         .f_flags = TEST_NODE_IS_NAN,
     977             :         .f_node_flags = g_flags_none
     978             :     },
     979             :     {
     980             :         .f_type = as2js::Node::node_t::NODE_IMPLEMENTS,
     981             :         .f_name = "IMPLEMENTS",
     982             :         .f_operator = nullptr,
     983             :         .f_flags = TEST_NODE_IS_NAN,
     984             :         .f_node_flags = g_flags_none
     985             :     },
     986             :     {
     987             :         .f_type = as2js::Node::node_t::NODE_IMPORT,
     988             :         .f_name = "IMPORT",
     989             :         .f_operator = nullptr,
     990             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
     991             :         .f_node_flags = g_flags_import
     992             :     },
     993             :     {
     994             :         .f_type = as2js::Node::node_t::NODE_IN,
     995             :         .f_name = "IN",
     996             :         .f_operator = nullptr,
     997             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
     998             :         .f_node_flags = g_flags_none
     999             :     },
    1000             :     {
    1001             :         .f_type = as2js::Node::node_t::NODE_INCLUDE,
    1002             :         .f_name = "INCLUDE",
    1003             :         .f_operator = nullptr,
    1004             :         .f_flags = TEST_NODE_IS_NAN,
    1005             :         .f_node_flags = g_flags_none
    1006             :     },
    1007             :     {
    1008             :         .f_type = as2js::Node::node_t::NODE_INCREMENT,
    1009             :         .f_name = "INCREMENT",
    1010             :         .f_operator = "++x",
    1011             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
    1012             :         .f_node_flags = g_flags_none
    1013             :     },
    1014             :     {
    1015             :         .f_type = as2js::Node::node_t::NODE_INLINE,
    1016             :         .f_name = "INLINE",
    1017             :         .f_operator = nullptr,
    1018             :         .f_flags = TEST_NODE_IS_NAN,
    1019             :         .f_node_flags = g_flags_none
    1020             :     },
    1021             :     {
    1022             :         .f_type = as2js::Node::node_t::NODE_INSTANCEOF,
    1023             :         .f_name = "INSTANCEOF",
    1024             :         .f_operator = nullptr,
    1025             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1026             :         .f_node_flags = g_flags_none
    1027             :     },
    1028             :     {
    1029             :         .f_type = as2js::Node::node_t::NODE_INT64,
    1030             :         .f_name = "INT64",
    1031             :         .f_operator = nullptr,
    1032             :         .f_flags = TEST_NODE_IS_NUMBER | TEST_NODE_IS_INT64,
    1033             :         .f_node_flags = g_flags_none
    1034             :     },
    1035             :     {
    1036             :         .f_type = as2js::Node::node_t::NODE_INTERFACE,
    1037             :         .f_name = "INTERFACE",
    1038             :         .f_operator = nullptr,
    1039             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1040             :         .f_node_flags = g_flags_none
    1041             :     },
    1042             :     {
    1043             :         .f_type = as2js::Node::node_t::NODE_INVARIANT,
    1044             :         .f_name = "INVARIANT",
    1045             :         .f_operator = nullptr,
    1046             :         .f_flags = TEST_NODE_IS_NAN,
    1047             :         .f_node_flags = g_flags_none
    1048             :     },
    1049             :     {
    1050             :         .f_type = as2js::Node::node_t::NODE_IS,
    1051             :         .f_name = "IS",
    1052             :         .f_operator = nullptr,
    1053             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1054             :         .f_node_flags = g_flags_none
    1055             :     },
    1056             :     {
    1057             :         .f_type = as2js::Node::node_t::NODE_LABEL,
    1058             :         .f_name = "LABEL",
    1059             :         .f_operator = nullptr,
    1060             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1061             :         .f_node_flags = g_flags_none
    1062             :     },
    1063             :     {
    1064             :         .f_type = as2js::Node::node_t::NODE_LESS_EQUAL,
    1065             :         .f_name = "LESS_EQUAL",
    1066             :         .f_operator = "<=",
    1067             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1068             :         .f_node_flags = g_flags_none
    1069             :     },
    1070             :     {
    1071             :         .f_type = as2js::Node::node_t::NODE_LIST,
    1072             :         .f_name = "LIST",
    1073             :         .f_operator = nullptr,
    1074             :         .f_flags = TEST_NODE_IS_NAN,
    1075             :         .f_node_flags = g_flags_none
    1076             :     },
    1077             :     {
    1078             :         .f_type = as2js::Node::node_t::NODE_LOGICAL_AND,
    1079             :         .f_name = "LOGICAL_AND",
    1080             :         .f_operator = "&&",
    1081             :         .f_flags = TEST_NODE_IS_NAN,
    1082             :         .f_node_flags = g_flags_none
    1083             :     },
    1084             :     {
    1085             :         .f_type = as2js::Node::node_t::NODE_LOGICAL_OR,
    1086             :         .f_name = "LOGICAL_OR",
    1087             :         .f_operator = "||",
    1088             :         .f_flags = TEST_NODE_IS_NAN,
    1089             :         .f_node_flags = g_flags_none
    1090             :     },
    1091             :     {
    1092             :         .f_type = as2js::Node::node_t::NODE_LOGICAL_XOR,
    1093             :         .f_name = "LOGICAL_XOR",
    1094             :         .f_operator = "^^",
    1095             :         .f_flags = TEST_NODE_IS_NAN,
    1096             :         .f_node_flags = g_flags_none
    1097             :     },
    1098             :     {
    1099             :         .f_type = as2js::Node::node_t::NODE_LONG,
    1100             :         .f_name = "LONG",
    1101             :         .f_operator = nullptr,
    1102             :         .f_flags = TEST_NODE_IS_NAN,
    1103             :         .f_node_flags = g_flags_none
    1104             :     },
    1105             :     {
    1106             :         .f_type = as2js::Node::node_t::NODE_MATCH,
    1107             :         .f_name = "MATCH",
    1108             :         .f_operator = "~=",
    1109             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1110             :         .f_node_flags = g_flags_none
    1111             :     },
    1112             :     {
    1113             :         .f_type = as2js::Node::node_t::NODE_MAXIMUM,
    1114             :         .f_name = "MAXIMUM",
    1115             :         .f_operator = ">?",
    1116             :         .f_flags = TEST_NODE_IS_NAN,
    1117             :         .f_node_flags = g_flags_none
    1118             :     },
    1119             :     {
    1120             :         .f_type = as2js::Node::node_t::NODE_MINIMUM,
    1121             :         .f_name = "MINIMUM",
    1122             :         .f_operator = "<?",
    1123             :         .f_flags = TEST_NODE_IS_NAN,
    1124             :         .f_node_flags = g_flags_none
    1125             :     },
    1126             :     {
    1127             :         .f_type = as2js::Node::node_t::NODE_NAME,
    1128             :         .f_name = "NAME",
    1129             :         .f_operator = nullptr,
    1130             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1131             :         .f_node_flags = g_flags_none
    1132             :     },
    1133             :     {
    1134             :         .f_type = as2js::Node::node_t::NODE_NAMESPACE,
    1135             :         .f_name = "NAMESPACE",
    1136             :         .f_operator = nullptr,
    1137             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1138             :         .f_node_flags = g_flags_none
    1139             :     },
    1140             :     {
    1141             :         .f_type = as2js::Node::node_t::NODE_NATIVE,
    1142             :         .f_name = "NATIVE",
    1143             :         .f_operator = nullptr,
    1144             :         .f_flags = TEST_NODE_IS_NAN,
    1145             :         .f_node_flags = g_flags_none
    1146             :     },
    1147             :     {
    1148             :         .f_type = as2js::Node::node_t::NODE_NEW,
    1149             :         .f_name = "NEW",
    1150             :         .f_operator = nullptr,
    1151             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
    1152             :         .f_node_flags = g_flags_none
    1153             :     },
    1154             :     {
    1155             :         .f_type = as2js::Node::node_t::NODE_NOT_EQUAL,
    1156             :         .f_name = "NOT_EQUAL",
    1157             :         .f_operator = "!=",
    1158             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1159             :         .f_node_flags = g_flags_none
    1160             :     },
    1161             :     {
    1162             :         .f_type = as2js::Node::node_t::NODE_NOT_MATCH,
    1163             :         .f_name = "NOT_MATCH",
    1164             :         .f_operator = "!~",
    1165             :         .f_flags = TEST_NODE_IS_NAN,
    1166             :         .f_node_flags = g_flags_none
    1167             :     },
    1168             :     {
    1169             :         .f_type = as2js::Node::node_t::NODE_NULL,
    1170             :         .f_name = "NULL",
    1171             :         .f_operator = nullptr,
    1172             :         .f_flags = TEST_NODE_IS_NULL,
    1173             :         .f_node_flags = g_flags_none
    1174             :     },
    1175             :     {
    1176             :         .f_type = as2js::Node::node_t::NODE_OBJECT_LITERAL,
    1177             :         .f_name = "OBJECT_LITERAL",
    1178             :         .f_operator = nullptr,
    1179             :         .f_flags = TEST_NODE_IS_NAN,
    1180             :         .f_node_flags = g_flags_none
    1181             :     },
    1182             :     {
    1183             :         .f_type = as2js::Node::node_t::NODE_PACKAGE,
    1184             :         .f_name = "PACKAGE",
    1185             :         .f_operator = nullptr,
    1186             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1187             :         .f_node_flags = g_flags_package
    1188             :     },
    1189             :     {
    1190             :         .f_type = as2js::Node::node_t::NODE_PARAM,
    1191             :         .f_name = "PARAM",
    1192             :         .f_operator = nullptr,
    1193             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1194             :         .f_node_flags = g_flags_param
    1195             :     },
    1196             :     {
    1197             :         .f_type = as2js::Node::node_t::NODE_PARAMETERS,
    1198             :         .f_name = "PARAMETERS",
    1199             :         .f_operator = nullptr,
    1200             :         .f_flags = TEST_NODE_IS_NAN,
    1201             :         .f_node_flags = g_flags_none
    1202             :     },
    1203             :     {
    1204             :         .f_type = as2js::Node::node_t::NODE_PARAM_MATCH,
    1205             :         .f_name = "PARAM_MATCH",
    1206             :         .f_operator = nullptr,
    1207             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_PARAM_MATCH,
    1208             :         .f_node_flags = g_flags_param_match
    1209             :     },
    1210             :     {
    1211             :         .f_type = as2js::Node::node_t::NODE_POST_DECREMENT,
    1212             :         .f_name = "POST_DECREMENT",
    1213             :         .f_operator = "x--",
    1214             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
    1215             :         .f_node_flags = g_flags_none
    1216             :     },
    1217             :     {
    1218             :         .f_type = as2js::Node::node_t::NODE_POST_INCREMENT,
    1219             :         .f_name = "POST_INCREMENT",
    1220             :         .f_operator = "x++",
    1221             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_HAS_SIDE_EFFECTS,
    1222             :         .f_node_flags = g_flags_none
    1223             :     },
    1224             :     {
    1225             :         .f_type = as2js::Node::node_t::NODE_POWER,
    1226             :         .f_name = "POWER",
    1227             :         .f_operator = "**",
    1228             :         .f_flags = TEST_NODE_IS_NAN,
    1229             :         .f_node_flags = g_flags_none
    1230             :     },
    1231             :     {
    1232             :         .f_type = as2js::Node::node_t::NODE_PRIVATE,
    1233             :         .f_name = "PRIVATE",
    1234             :         .f_operator = nullptr,
    1235             :         .f_flags = TEST_NODE_IS_NAN,
    1236             :         .f_node_flags = g_flags_none
    1237             :     },
    1238             :     {
    1239             :         .f_type = as2js::Node::node_t::NODE_PROGRAM,
    1240             :         .f_name = "PROGRAM",
    1241             :         .f_operator = nullptr,
    1242             :         .f_flags = TEST_NODE_IS_NAN,
    1243             :         .f_node_flags = g_flags_none
    1244             :     },
    1245             :     {
    1246             :         .f_type = as2js::Node::node_t::NODE_PROTECTED,
    1247             :         .f_name = "PROTECTED",
    1248             :         .f_operator = nullptr,
    1249             :         .f_flags = TEST_NODE_IS_NAN,
    1250             :         .f_node_flags = g_flags_none
    1251             :     },
    1252             :     {
    1253             :         .f_type = as2js::Node::node_t::NODE_PUBLIC,
    1254             :         .f_name = "PUBLIC",
    1255             :         .f_operator = nullptr,
    1256             :         .f_flags = TEST_NODE_IS_NAN,
    1257             :         .f_node_flags = g_flags_none
    1258             :     },
    1259             :     {
    1260             :         .f_type = as2js::Node::node_t::NODE_RANGE,
    1261             :         .f_name = "RANGE",
    1262             :         .f_operator = nullptr,
    1263             :         .f_flags = TEST_NODE_IS_NAN,
    1264             :         .f_node_flags = g_flags_none
    1265             :     },
    1266             :     {
    1267             :         .f_type = as2js::Node::node_t::NODE_REGULAR_EXPRESSION,
    1268             :         .f_name = "REGULAR_EXPRESSION",
    1269             :         .f_operator = nullptr,
    1270             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1271             :         .f_node_flags = g_flags_none
    1272             :     },
    1273             :     {
    1274             :         .f_type = as2js::Node::node_t::NODE_REQUIRE,
    1275             :         .f_name = "REQUIRE",
    1276             :         .f_operator = nullptr,
    1277             :         .f_flags = TEST_NODE_IS_NAN,
    1278             :         .f_node_flags = g_flags_none
    1279             :     },
    1280             :     {
    1281             :         .f_type = as2js::Node::node_t::NODE_REST,
    1282             :         .f_name = "REST",
    1283             :         .f_operator = nullptr,
    1284             :         .f_flags = TEST_NODE_IS_NAN,
    1285             :         .f_node_flags = g_flags_none
    1286             :     },
    1287             :     {
    1288             :         .f_type = as2js::Node::node_t::NODE_RETURN,
    1289             :         .f_name = "RETURN",
    1290             :         .f_operator = nullptr,
    1291             :         .f_flags = TEST_NODE_IS_NAN,
    1292             :         .f_node_flags = g_flags_none
    1293             :     },
    1294             :     {
    1295             :         .f_type = as2js::Node::node_t::NODE_ROOT,
    1296             :         .f_name = "ROOT",
    1297             :         .f_operator = nullptr,
    1298             :         .f_flags = TEST_NODE_IS_NAN,
    1299             :         .f_node_flags = g_flags_none
    1300             :     },
    1301             :     {
    1302             :         .f_type = as2js::Node::node_t::NODE_ROTATE_LEFT,
    1303             :         .f_name = "ROTATE_LEFT",
    1304             :         .f_operator = "<%",
    1305             :         .f_flags = TEST_NODE_IS_NAN,
    1306             :         .f_node_flags = g_flags_none
    1307             :     },
    1308             :     {
    1309             :         .f_type = as2js::Node::node_t::NODE_ROTATE_RIGHT,
    1310             :         .f_name = "ROTATE_RIGHT",
    1311             :         .f_operator = ">%",
    1312             :         .f_flags = TEST_NODE_IS_NAN,
    1313             :         .f_node_flags = g_flags_none
    1314             :     },
    1315             :     {
    1316             :         .f_type = as2js::Node::node_t::NODE_SCOPE,
    1317             :         .f_name = "SCOPE",
    1318             :         .f_operator = nullptr,
    1319             :         .f_flags = TEST_NODE_IS_NAN,
    1320             :         .f_node_flags = g_flags_none
    1321             :     },
    1322             :     {
    1323             :         .f_type = as2js::Node::node_t::NODE_SET,
    1324             :         .f_name = "SET",
    1325             :         .f_operator = nullptr,
    1326             :         .f_flags = TEST_NODE_IS_NAN,
    1327             :         .f_node_flags = g_flags_none
    1328             :     },
    1329             :     {
    1330             :         .f_type = as2js::Node::node_t::NODE_SHIFT_LEFT,
    1331             :         .f_name = "SHIFT_LEFT",
    1332             :         .f_operator = "<<",
    1333             :         .f_flags = TEST_NODE_IS_NAN,
    1334             :         .f_node_flags = g_flags_none
    1335             :     },
    1336             :     {
    1337             :         .f_type = as2js::Node::node_t::NODE_SHIFT_RIGHT,
    1338             :         .f_name = "SHIFT_RIGHT",
    1339             :         .f_operator = ">>",
    1340             :         .f_flags = TEST_NODE_IS_NAN,
    1341             :         .f_node_flags = g_flags_none
    1342             :     },
    1343             :     {
    1344             :         .f_type = as2js::Node::node_t::NODE_SHIFT_RIGHT_UNSIGNED,
    1345             :         .f_name = "SHIFT_RIGHT_UNSIGNED",
    1346             :         .f_operator = ">>>",
    1347             :         .f_flags = TEST_NODE_IS_NAN,
    1348             :         .f_node_flags = g_flags_none
    1349             :     },
    1350             :     {
    1351             :         .f_type = as2js::Node::node_t::NODE_SHORT,
    1352             :         .f_name = "SHORT",
    1353             :         .f_operator = nullptr,
    1354             :         .f_flags = TEST_NODE_IS_NAN,
    1355             :         .f_node_flags = g_flags_none
    1356             :     },
    1357             :     {
    1358             :         .f_type = as2js::Node::node_t::NODE_SMART_MATCH,
    1359             :         .f_name = "SMART_MATCH",
    1360             :         .f_operator = "~~",
    1361             :         .f_flags = TEST_NODE_IS_NAN,
    1362             :         .f_node_flags = g_flags_none
    1363             :     },
    1364             :     {
    1365             :         .f_type = as2js::Node::node_t::NODE_STATIC,
    1366             :         .f_name = "STATIC",
    1367             :         .f_operator = nullptr,
    1368             :         .f_flags = TEST_NODE_IS_NAN,
    1369             :         .f_node_flags = g_flags_none
    1370             :     },
    1371             :     {
    1372             :         .f_type = as2js::Node::node_t::NODE_STRICTLY_EQUAL,
    1373             :         .f_name = "STRICTLY_EQUAL",
    1374             :         .f_operator = "===",
    1375             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1376             :         .f_node_flags = g_flags_none
    1377             :     },
    1378             :     {
    1379             :         .f_type = as2js::Node::node_t::NODE_STRICTLY_NOT_EQUAL,
    1380             :         .f_name = "STRICTLY_NOT_EQUAL",
    1381             :         .f_operator = "!==",
    1382             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_SWITCH_OPERATOR,
    1383             :         .f_node_flags = g_flags_none
    1384             :     },
    1385             :     {
    1386             :         .f_type = as2js::Node::node_t::NODE_STRING,
    1387             :         .f_name = "STRING",
    1388             :         .f_operator = nullptr,
    1389             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_STRING | TEST_NODE_ACCEPT_STRING,
    1390             :         .f_node_flags = g_flags_identifier
    1391             :     },
    1392             :     {
    1393             :         .f_type = as2js::Node::node_t::NODE_SUPER,
    1394             :         .f_name = "SUPER",
    1395             :         .f_operator = nullptr,
    1396             :         .f_flags = TEST_NODE_IS_NAN,
    1397             :         .f_node_flags = g_flags_none
    1398             :     },
    1399             :     {
    1400             :         .f_type = as2js::Node::node_t::NODE_SWITCH,
    1401             :         .f_name = "SWITCH",
    1402             :         .f_operator = nullptr,
    1403             :         .f_flags = TEST_NODE_IS_NAN,
    1404             :         .f_node_flags = g_flags_switch
    1405             :     },
    1406             :     {
    1407             :         .f_type = as2js::Node::node_t::NODE_SYNCHRONIZED,
    1408             :         .f_name = "SYNCHRONIZED",
    1409             :         .f_operator = nullptr,
    1410             :         .f_flags = TEST_NODE_IS_NAN,
    1411             :         .f_node_flags = g_flags_none
    1412             :     },
    1413             :     {
    1414             :         .f_type = as2js::Node::node_t::NODE_THEN,
    1415             :         .f_name = "THEN",
    1416             :         .f_operator = nullptr,
    1417             :         .f_flags = TEST_NODE_IS_NAN,
    1418             :         .f_node_flags = g_flags_none
    1419             :     },
    1420             :     {
    1421             :         .f_type = as2js::Node::node_t::NODE_THIS,
    1422             :         .f_name = "THIS",
    1423             :         .f_operator = nullptr,
    1424             :         .f_flags = TEST_NODE_IS_NAN,
    1425             :         .f_node_flags = g_flags_none
    1426             :     },
    1427             :     {
    1428             :         .f_type = as2js::Node::node_t::NODE_THROW,
    1429             :         .f_name = "THROW",
    1430             :         .f_operator = nullptr,
    1431             :         .f_flags = TEST_NODE_IS_NAN,
    1432             :         .f_node_flags = g_flags_none
    1433             :     },
    1434             :     {
    1435             :         .f_type = as2js::Node::node_t::NODE_THROWS,
    1436             :         .f_name = "THROWS",
    1437             :         .f_operator = nullptr,
    1438             :         .f_flags = TEST_NODE_IS_NAN,
    1439             :         .f_node_flags = g_flags_none
    1440             :     },
    1441             :     {
    1442             :         .f_type = as2js::Node::node_t::NODE_TRANSIENT,
    1443             :         .f_name = "TRANSIENT",
    1444             :         .f_operator = nullptr,
    1445             :         .f_flags = TEST_NODE_IS_NAN,
    1446             :         .f_node_flags = g_flags_none
    1447             :     },
    1448             :     {
    1449             :         .f_type = as2js::Node::node_t::NODE_TRUE,
    1450             :         .f_name = "TRUE",
    1451             :         .f_operator = nullptr,
    1452             :         .f_flags = TEST_NODE_IS_BOOLEAN | TEST_NODE_IS_TRUE,
    1453             :         .f_node_flags = g_flags_none
    1454             :     },
    1455             :     {
    1456             :         .f_type = as2js::Node::node_t::NODE_TRY,
    1457             :         .f_name = "TRY",
    1458             :         .f_operator = nullptr,
    1459             :         .f_flags = TEST_NODE_IS_NAN,
    1460             :         .f_node_flags = g_flags_none
    1461             :     },
    1462             :     {
    1463             :         .f_type = as2js::Node::node_t::NODE_TYPE,
    1464             :         .f_name = "TYPE",
    1465             :         .f_operator = nullptr,
    1466             :         .f_flags = TEST_NODE_IS_NAN,
    1467             :         .f_node_flags = g_flags_type
    1468             :     },
    1469             :     {
    1470             :         .f_type = as2js::Node::node_t::NODE_TYPEOF,
    1471             :         .f_name = "TYPEOF",
    1472             :         .f_operator = nullptr,
    1473             :         .f_flags = TEST_NODE_IS_NAN,
    1474             :         .f_node_flags = g_flags_none
    1475             :     },
    1476             :     {
    1477             :         .f_type = as2js::Node::node_t::NODE_UNDEFINED,
    1478             :         .f_name = "UNDEFINED",
    1479             :         .f_operator = nullptr,
    1480             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_UNDEFINED,
    1481             :         .f_node_flags = g_flags_none
    1482             :     },
    1483             :     {
    1484             :         .f_type = as2js::Node::node_t::NODE_USE,
    1485             :         .f_name = "USE",
    1486             :         .f_operator = nullptr,
    1487             :         .f_flags = TEST_NODE_IS_NAN,
    1488             :         .f_node_flags = g_flags_none
    1489             :     },
    1490             :     {
    1491             :         .f_type = as2js::Node::node_t::NODE_VAR,
    1492             :         .f_name = "VAR",
    1493             :         .f_operator = nullptr,
    1494             :         .f_flags = TEST_NODE_IS_NAN,
    1495             :         .f_node_flags = g_flags_none
    1496             :     },
    1497             :     {
    1498             :         .f_type = as2js::Node::node_t::NODE_VARIABLE,
    1499             :         .f_name = "VARIABLE",
    1500             :         .f_operator = nullptr,
    1501             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1502             :         .f_node_flags = g_flags_variable
    1503             :     },
    1504             :     {
    1505             :         .f_type = as2js::Node::node_t::NODE_VAR_ATTRIBUTES,
    1506             :         .f_name = "VAR_ATTRIBUTES",
    1507             :         .f_operator = nullptr,
    1508             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_ACCEPT_STRING,
    1509             :         .f_node_flags = g_flags_variable
    1510             :     },
    1511             :     {
    1512             :         .f_type = as2js::Node::node_t::NODE_VIDENTIFIER,
    1513             :         .f_name = "VIDENTIFIER",
    1514             :         .f_operator = nullptr,
    1515             :         .f_flags = TEST_NODE_IS_NAN | TEST_NODE_IS_IDENTIFIER | TEST_NODE_ACCEPT_STRING,
    1516             :         .f_node_flags = g_flags_identifier
    1517             :     },
    1518             :     {
    1519             :         .f_type = as2js::Node::node_t::NODE_VOID,
    1520             :         .f_name = "VOID",
    1521             :         .f_operator = nullptr,
    1522             :         .f_flags = TEST_NODE_IS_NAN,
    1523             :         .f_node_flags = g_flags_none
    1524             :     },
    1525             :     {
    1526             :         .f_type = as2js::Node::node_t::NODE_VOLATILE,
    1527             :         .f_name = "VOLATILE",
    1528             :         .f_operator = nullptr,
    1529             :         .f_flags = TEST_NODE_IS_NAN,
    1530             :         .f_node_flags = g_flags_none
    1531             :     },
    1532             :     {
    1533             :         .f_type = as2js::Node::node_t::NODE_WHILE,
    1534             :         .f_name = "WHILE",
    1535             :         .f_operator = nullptr,
    1536             :         .f_flags = TEST_NODE_IS_NAN,
    1537             :         .f_node_flags = g_flags_none
    1538             :     },
    1539             :     {
    1540             :         .f_type = as2js::Node::node_t::NODE_WITH,
    1541             :         .f_name = "WITH",
    1542             :         .f_operator = nullptr,
    1543             :         .f_flags = TEST_NODE_IS_NAN,
    1544             :         .f_node_flags = g_flags_none
    1545             :     },
    1546             :     {
    1547             :         .f_type = as2js::Node::node_t::NODE_YIELD,
    1548             :         .f_name = "YIELD",
    1549             :         .f_operator = nullptr,
    1550             :         .f_flags = TEST_NODE_IS_NAN,
    1551             :         .f_node_flags = g_flags_none
    1552             :     }
    1553             : };
    1554             : #pragma GCC diagnostic pop
    1555             : size_t const g_node_types_size(sizeof(g_node_types) / sizeof(g_node_types[0]));
    1556             : 
    1557             : 
    1558             : 
    1559             : char const *g_attribute_names[static_cast<int>(as2js::Node::attribute_t::NODE_ATTR_max)] =
    1560             : {
    1561             :     "PUBLIC",
    1562             :     "PRIVATE",
    1563             :     "PROTECTED",
    1564             :     "INTERNAL",
    1565             :     "TRANSIENT",
    1566             :     "VOLATILE",
    1567             :     "STATIC",
    1568             :     "ABSTRACT",
    1569             :     "VIRTUAL",
    1570             :     "ARRAY",
    1571             :     "INLINE",
    1572             :     "REQUIRE_ELSE",
    1573             :     "ENSURE_THEN",
    1574             :     "NATIVE",
    1575             :     "DEPRECATED",
    1576             :     "UNSAFE",
    1577             :     "CONSTRUCTOR",
    1578             :     "FINAL",
    1579             :     "ENUMERABLE",
    1580             :     "TRUE",
    1581             :     "FALSE",
    1582             :     "UNUSED",
    1583             :     "DYNAMIC",
    1584             :     "FOREACH",
    1585             :     "NOBREAK",
    1586             :     "AUTOBREAK",
    1587             :     "DEFINED"
    1588             : };
    1589             : 
    1590             : as2js::Node::attribute_t const g_group_member_visibility[] =
    1591             : {
    1592             :     as2js::Node::attribute_t::NODE_ATTR_PRIVATE,
    1593             :     as2js::Node::attribute_t::NODE_ATTR_PROTECTED,
    1594             :     as2js::Node::attribute_t::NODE_ATTR_PUBLIC,
    1595             :     as2js::Node::attribute_t::NODE_ATTR_max // end the list
    1596             : };
    1597             : 
    1598             : as2js::Node::attribute_t const g_group_function_type[] =
    1599             : {
    1600             :     as2js::Node::attribute_t::NODE_ATTR_ABSTRACT,
    1601             :     as2js::Node::attribute_t::NODE_ATTR_CONSTRUCTOR,
    1602             :     as2js::Node::attribute_t::NODE_ATTR_STATIC,
    1603             :     as2js::Node::attribute_t::NODE_ATTR_VIRTUAL,
    1604             :     as2js::Node::attribute_t::NODE_ATTR_max // end the list
    1605             : };
    1606             : 
    1607             : as2js::Node::attribute_t const g_group_function_contract[] =
    1608             : {
    1609             :     as2js::Node::attribute_t::NODE_ATTR_REQUIRE_ELSE,
    1610             :     as2js::Node::attribute_t::NODE_ATTR_ENSURE_THEN,
    1611             :     as2js::Node::attribute_t::NODE_ATTR_max // end the list
    1612             : };
    1613             : 
    1614             : as2js::Node::attribute_t const g_group_switch_type[] =
    1615             : {
    1616             :     as2js::Node::attribute_t::NODE_ATTR_FOREACH,
    1617             :     as2js::Node::attribute_t::NODE_ATTR_NOBREAK,
    1618             :     as2js::Node::attribute_t::NODE_ATTR_AUTOBREAK,
    1619             :     as2js::Node::attribute_t::NODE_ATTR_max // end the list
    1620             : };
    1621             : 
    1622             : as2js::Node::attribute_t const g_group_conditional_compilation[] =
    1623             : {
    1624             :     as2js::Node::attribute_t::NODE_ATTR_TRUE,
    1625             :     as2js::Node::attribute_t::NODE_ATTR_FALSE,
    1626             :     as2js::Node::attribute_t::NODE_ATTR_max // end the list
    1627             : };
    1628             : 
    1629             : struct groups_attributes_t
    1630             : {
    1631             :     as2js::Node::attribute_t const *    f_attributes;
    1632             :     char const *                        f_names;
    1633             : };
    1634             : 
    1635             : groups_attributes_t const g_groups_of_attributes[] =
    1636             : {
    1637             :     {
    1638             :         g_group_member_visibility,
    1639             :         "public, private, and protected"
    1640             :     },
    1641             :     {
    1642             :         g_group_function_type,
    1643             :         "abstract, constructor, inline, native, static, and virtual"
    1644             :     },
    1645             :     {
    1646             :         g_group_function_contract,
    1647             :         "require else and ensure then"
    1648             :     },
    1649             :     {
    1650             :         g_group_switch_type,
    1651             :         "foreach, nobreak, and autobreak"
    1652             :     },
    1653             :     {
    1654             :         g_group_conditional_compilation,
    1655             :         "true and false"
    1656             :     }
    1657             : };
    1658             : size_t const g_groups_of_attributes_size(sizeof(g_groups_of_attributes) / sizeof(g_groups_of_attributes[0]));
    1659             : 
    1660             : 
    1661             : 
    1662             : 
    1663             : class test_callback : public as2js::MessageCallback
    1664             : {
    1665             : public:
    1666         320 :     test_callback()
    1667         320 :     {
    1668         320 :         as2js::Message::set_message_callback(this);
    1669         320 :         g_warning_count = as2js::Message::warning_count();
    1670         320 :         g_error_count = as2js::Message::error_count();
    1671         320 :     }
    1672             : 
    1673         320 :     ~test_callback()
    1674         640 :     {
    1675             :         // make sure the pointer gets reset!
    1676         320 :         as2js::Message::set_message_callback(nullptr);
    1677         320 :     }
    1678             : 
    1679             :     // implementation of the output
    1680         320 :     virtual void output(as2js::message_level_t message_level, as2js::err_code_t error_code, as2js::Position const& pos, std::string const& message)
    1681             :     {
    1682             : 
    1683             : //std::cerr<< "\nmsg = " << pos.get_filename() << " / " << f_expected_pos.get_filename() << "\n";
    1684             : 
    1685         320 :         CPPUNIT_ASSERT(f_expected_call);
    1686         320 :         CPPUNIT_ASSERT(message_level == f_expected_message_level);
    1687         320 :         CPPUNIT_ASSERT(error_code == f_expected_error_code);
    1688         320 :         CPPUNIT_ASSERT(pos.get_filename() == f_expected_pos.get_filename());
    1689         320 :         CPPUNIT_ASSERT(pos.get_function() == f_expected_pos.get_function());
    1690         320 :         CPPUNIT_ASSERT(pos.get_page() == f_expected_pos.get_page());
    1691         320 :         CPPUNIT_ASSERT(pos.get_page_line() == f_expected_pos.get_page_line());
    1692         320 :         CPPUNIT_ASSERT(pos.get_paragraph() == f_expected_pos.get_paragraph());
    1693         320 :         CPPUNIT_ASSERT(pos.get_line() == f_expected_pos.get_line());
    1694         320 :         CPPUNIT_ASSERT(message == f_expected_message);
    1695             : 
    1696         320 :         if(message_level == as2js::message_level_t::MESSAGE_LEVEL_WARNING)
    1697             :         {
    1698           0 :             ++g_warning_count;
    1699           0 :             CPPUNIT_ASSERT(g_warning_count == as2js::Message::warning_count());
    1700             :         }
    1701             : 
    1702         320 :         if(message_level == as2js::message_level_t::MESSAGE_LEVEL_FATAL
    1703         320 :         || message_level == as2js::message_level_t::MESSAGE_LEVEL_ERROR)
    1704             :         {
    1705         320 :             ++g_error_count;
    1706             : //std::cerr << "error: " << g_error_count << " / " << as2js::Message::error_count() << "\n";
    1707         320 :             CPPUNIT_ASSERT(g_error_count == as2js::Message::error_count());
    1708             :         }
    1709             : 
    1710         320 :         f_got_called = true;
    1711         320 :     }
    1712             : 
    1713             :     controlled_vars::tlbool_t   f_expected_call;
    1714             :     controlled_vars::flbool_t   f_got_called;
    1715             :     as2js::message_level_t      f_expected_message_level;
    1716             :     as2js::err_code_t           f_expected_error_code;
    1717             :     as2js::Position             f_expected_pos;
    1718             :     std::string                 f_expected_message; // UTF-8 string
    1719             :     static controlled_vars::zint32_t   g_warning_count;
    1720             :     static controlled_vars::zint32_t   g_error_count;
    1721             : };
    1722             : 
    1723           8 : controlled_vars::zint32_t   test_callback::g_warning_count;
    1724           8 : controlled_vars::zint32_t   test_callback::g_error_count;
    1725             : 
    1726             : 
    1727        4852 : void output_str(std::ostream& out, as2js::String str)
    1728             : {
    1729        4852 :     out << ": '";
    1730      156148 :     for(as2js::as_char_t const *s(str.c_str()); *s != '\0'; ++s)
    1731             :     {
    1732      151296 :         if(*s < 0x20)
    1733             :         {
    1734             :             // show controls as ^<letter>
    1735           4 :             out << '^' << static_cast<char>(*s + '@');
    1736             :         }
    1737      151292 :         else if(*s < 0x7f)
    1738             :         {
    1739          17 :             if(*s == '\'')
    1740             :             {
    1741           1 :                 out << "\\'";
    1742             :             }
    1743             :             else
    1744             :             {
    1745          16 :                 out << static_cast<char>(*s);
    1746             :             }
    1747             :         }
    1748      151275 :         else if(*s < 0x100)
    1749             :         {
    1750          18 :             out << "\\x" << std::hex << *s << std::dec;
    1751             :         }
    1752      151257 :         else if(*s < 0x10000)
    1753             :         {
    1754        8564 :             out << "\\u" << std::hex << std::setfill('0') << std::setw(4) << *s << std::dec;
    1755             :         }
    1756             :         else
    1757             :         {
    1758      142693 :             out << "\\U" << std::hex << std::setfill('0') << std::setw(8) << *s << std::dec;
    1759             :         }
    1760             :     }
    1761        4852 :     out << "'";
    1762        4852 : }
    1763             : 
    1764             : 
    1765             : }
    1766             : // no name namespace
    1767             : 
    1768             : 
    1769             : 
    1770             : 
    1771             : // vim: ts=4 sw=4 et

Generated by: LCOV version 1.10