Diff for /parser3/src/main/compile.tab.C between versions 1.74 and 1.107

version 1.74, 2002/10/17 10:57:06 version 1.107, 2005/11/21 10:13:43
Line 11 Line 11
 #define BAD_HEX_LITERAL 261  #define BAD_HEX_LITERAL 261
 #define BAD_METHOD_DECL_START   262  #define BAD_METHOD_DECL_START   262
 #define BAD_METHOD_PARAMETER_NAME_CHARACTER     263  #define BAD_METHOD_PARAMETER_NAME_CHARACTER     263
 #define BAD_MATH_OPERATOR_CHARACTER     264  #define BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE     264
 #define LAND    265  #define LAND    265
 #define LOR     266  #define LOR     266
 #define LXOR    267  #define LXOR    267
Line 33 Line 33
 #define FEXISTS 283  #define FEXISTS 283
 #define DEXISTS 284  #define DEXISTS 284
 #define IS      285  #define IS      285
 #define NUNARY  286  #define LITERAL_TRUE    286
   #define LITERAL_FALSE   287
   #define NUNARY  288
   
 #line 1 "compile.y"  #line 1 "compile.y"
   
 /** @file  /** @file
         Parser: compiler(lexical parser and grammar).          Parser: compiler(lexical parser and grammar).
   
         Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)
         Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)          Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
   
         $Id$  
 */  */
   
 /**  /**
Line 57 Line 57
                 -#:     in iis make up specialized Pool object for that                  -#:     in iis make up specialized Pool object for that
 */  */
   
 #define YYSTYPE  Array/*<Operation>*/ *  #define YYSTYPE  ArrayOperation* 
 #define YYPARSE_PARAM  pc  #define YYPARSE_PARAM  pc
 #define YYLEX_PARAM  pc  #define YYLEX_PARAM  pc
 #define YYDEBUG  1  #define YYDEBUG  1
 #define YYERROR_VERBOSE 1  #define YYERROR_VERBOSE 1
 #define yyerror(msg)  real_yyerror((parse_control *)pc, msg)  #define yyerror(msg)  real_yyerror((Parse_control *)pc, msg)
 #define YYPRINT(file, type, value)  yyprint(file, type, value)  #define YYPRINT(file, type, value)  yyprint(file, type, value)
   
   // includes
   
 #include "compile_tools.h"  #include "compile_tools.h"
 #include "pa_value.h"  #include "pa_value.h"
 #include "pa_request.h"  #include "pa_request.h"
Line 74 Line 76
 #include "pa_vvoid.h"  #include "pa_vvoid.h"
 #include "pa_vmethod_frame.h"  #include "pa_vmethod_frame.h"
   
   // defines
   
 #define USE_CONTROL_METHOD_NAME "USE"  #define USE_CONTROL_METHOD_NAME "USE"
   
 static int real_yyerror(parse_control *pc, char *s);  // forwards
 static void yyprint(FILE *file, int type, YYSTYPE value);  
 static int yylex(YYSTYPE *lvalp, void *pc);  
   
   static int real_yyerror(Parse_control* pc, char* s);
   static void yyprint(FILE* file, int type, YYSTYPE value);
   static int yylex(YYSTYPE* lvalp, void* pc);
   
   static const VBool vfalse(false);
   static const VBool vtrue(true);
   static const VVoid vvoid;
   
 // local convinient inplace typecast & var  // local convinient inplace typecast & var
 #define PC  (*(parse_control *)pc)  #undef PC
   #define PC  (*(Parse_control *)pc)
   #undef POOL
 #define POOL  (*PC.pool)  #define POOL  (*PC.pool)
 #undef NEW  
 #define NEW new(POOL)  
 #ifndef DOXYGEN  #ifndef DOXYGEN
 #ifndef YYSTYPE  #ifndef YYSTYPE
 #define YYSTYPE int  #define YYSTYPE int
Line 100  static int yylex(YYSTYPE *lvalp, void *p Line 109  static int yylex(YYSTYPE *lvalp, void *p
   
   
   
 #define YYFINAL         252  #define YYFINAL         263
 #define YYFLAG          -32768  #define YYFLAG          -32768
 #define YYNTBASE        60  #define YYNTBASE        62
   
 #define YYTRANSLATE(x) ((unsigned)(x) <= 286 ? yytranslate[x] : 139)  #define YYTRANSLATE(x) ((unsigned)(x) <= 288 ? yytranslate[x] : 150)
   
 static const char yytranslate[] = {     0,  static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,    46,       2,     2,     2,     2,     2,     2,     2,     2,     2,    48,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,    44,    58,     2,    50,    41,    35,    59,    54,       2,     2,    46,    60,     2,    52,    43,    37,    61,    56,
     55,    38,    36,     2,    37,    53,    39,     2,     2,     2,      57,    40,    38,     2,    39,    55,    41,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,    57,    49,    32,       2,     2,     2,     2,     2,     2,     2,    59,    51,    34,
      2,    33,     2,    45,     2,     2,     2,     2,     2,     2,       2,    35,     2,    47,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
     47,    40,    48,    56,     2,     2,     2,     2,     2,     2,      49,    42,    50,    58,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,    51,    34,    52,    43,     2,     2,     2,     2,       2,     2,    53,    36,    54,    45,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
Line 135  static const char yytranslate[] = { Line 144  static const char yytranslate[] = {
      2,     2,     2,     2,     2,     1,     3,     4,     5,     6,       2,     2,     2,     2,     2,     1,     3,     4,     5,     6,
      7,     8,     9,    10,    11,    12,    13,    14,    15,    16,       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
     17,    18,    19,    20,    21,    22,    23,    24,    25,    26,      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     27,    28,    29,    30,    31,    42      27,    28,    29,    30,    31,    32,    33,    44
 };  };
   
 #if YYDEBUG != 0  #if YYDEBUG != 0
 static const short yyprhs[] = {     0,  static const short yyprhs[] = {     0,
      0,     2,     4,     6,     9,    11,    13,    15,    20,    22,       0,     2,     4,     6,     9,    11,    13,    15,    20,    22,
     24,    26,    29,    32,    34,    36,    44,    46,    48,    52,      24,    26,    29,    32,    34,    36,    37,    46,    48,    50,
     54,    56,    58,    62,    64,    66,    68,    70,    72,    75,      54,    56,    58,    60,    64,    66,    68,    70,    72,    74,
     77,    79,    81,    83,    85,    87,    90,    93,    95,    99,      77,    79,    81,    83,    85,    87,    89,    92,    95,    97,
    101,   103,   105,   108,   110,   113,   117,   119,   121,   123,     101,   103,   105,   107,   110,   112,   115,   119,   121,   123,
    125,   128,   131,   133,   135,   137,   141,   145,   149,   151,     125,   127,   130,   133,   135,   137,   139,   140,   141,   147,
    153,   155,   157,   159,   161,   164,   166,   167,   168,   175,     151,   155,   157,   159,   161,   163,   165,   167,   170,   172,
    177,   179,   182,   184,   186,   188,   192,   196,   200,   202,     173,   174,   181,   183,   185,   188,   190,   192,   194,   195,
    206,   208,   212,   214,   218,   220,   222,   224,   226,   228,     196,   202,   206,   210,   212,   216,   218,   222,   224,   228,
    230,   232,   234,   237,   239,   242,   245,   247,   249,   252,     230,   232,   234,   236,   238,   240,   242,   245,   247,   250,
    254,   256,   258,   260,   263,   266,   270,   272,   274,   277,     253,   255,   257,   260,   262,   264,   266,   268,   271,   274,
    280,   282,   284,   287,   290,   292,   294,   296,   298,   302,     275,   276,   282,   284,   286,   289,   292,   294,   296,   299,
    306,   310,   313,   316,   319,   322,   325,   328,   331,   334,     302,   304,   306,   308,   310,   312,   314,   318,   322,   326,
    338,   342,   346,   350,   354,   358,   362,   366,   370,   374,     329,   332,   335,   338,   341,   344,   347,   350,   354,   358,
    378,   382,   386,   390,   394,   398,   402,   406,   410,   414,     362,   366,   370,   374,   378,   382,   386,   390,   394,   398,
    418,   422,   426,   430,   434,   438,   442,   444,   446,   447     402,   406,   410,   414,   418,   422,   426,   430,   434,   438,
      442,   446,   450,   454,   458,   460,   462,   464,   465,   467,
      469
 };  };
   
 static const short yyrhs[] = {    62,  static const short yyrhs[] = {    64,
      0,    61,     0,    63,     0,    61,    63,     0,    75,     0,       0,    63,     0,    65,     0,    63,    65,     0,    78,     0,
     64,     0,    69,     0,    45,     4,    46,    65,     0,   138,      66,     0,    71,     0,    47,     4,    48,    67,     0,   149,
      0,    66,     0,    67,     0,    66,    67,     0,    68,    46,       0,    68,     0,    69,     0,    68,    69,     0,    70,    48,
      0,   138,     0,     4,     0,    45,     4,    71,    70,    74,       0,   149,     0,     4,     0,     0,    47,     4,    74,    73,
     46,    75,     0,   138,     0,    71,     0,    47,    72,    48,      77,    48,    72,    78,     0,   149,     0,    74,     0,    49,
      0,   138,     0,    73,     0,     4,     0,    73,    49,     4,      75,    50,     0,   149,     0,    76,     0,     4,     0,    76,
      0,   138,     0,     4,     0,   138,     0,    76,     0,    77,      51,     4,     0,   149,     0,     4,     0,   149,     0,    79,
      0,    76,    77,     0,   136,     0,    78,     0,    79,     0,       0,    80,     0,    79,    80,     0,   145,     0,    81,     0,
     87,     0,   100,     0,    80,     0,    50,    81,     0,    83,      82,     0,    90,     0,   105,     0,    83,     0,    52,    84,
      3,     0,    82,     0,    51,    83,    52,     0,    84,     0,       0,    86,     3,     0,    85,     0,    53,    86,    54,     0,
     85,     0,    86,     0,   130,    86,     0,   122,     0,   119,      87,     0,    88,     0,    89,     0,   138,    89,     0,   128,
    122,     0,    50,    88,    92,     0,    89,     0,    90,     0,       0,   125,   128,     0,    52,    91,    95,     0,    92,     0,
     91,     0,   118,     0,    53,   118,     0,   130,   118,     0,      93,     0,    94,     0,   124,     0,    55,   124,     0,   138,
     93,     0,    94,     0,    95,     0,    47,    96,    48,     0,     124,     0,    96,     0,    99,     0,   100,     0,     0,     0,
     54,   133,    55,     0,    51,    75,    52,     0,   137,     0,      49,    97,   101,    98,    50,     0,    56,   141,    57,     0,
      4,     0,    97,     0,    98,     0,    99,     0,    78,     0,      53,    78,    54,     0,   146,     0,     4,     0,   102,     0,
     77,    76,     0,   101,     0,     0,     0,    56,   102,   104,     103,     0,   104,     0,    81,     0,    80,    79,     0,   106,
    103,   105,     3,     0,    83,     0,   106,     0,   105,   106,       0,     0,     0,    58,   107,   109,   108,   110,     3,     0,
      0,   107,     0,   108,     0,   109,     0,    47,   110,    48,      86,     0,   111,     0,   110,   111,     0,   112,     0,   115,
      0,    54,   111,    55,     0,    51,   112,    52,     0,   113,       0,   116,     0,     0,     0,    49,   113,   117,   114,    50,
      0,   110,    49,   113,     0,   114,     0,   111,    49,   114,       0,    56,   118,    57,     0,    53,   119,    54,     0,   120,
      0,   115,     0,   112,    49,   115,     0,   116,     0,   117,       0,   117,    51,   120,     0,   121,     0,   118,    51,   121,
      0,    75,     0,   137,     0,     4,     0,    97,     0,   133,       0,   122,     0,   119,    51,   122,     0,   123,     0,   141,
      0,   123,     0,   119,   123,     0,   120,     0,   119,   120,       0,    78,     0,   146,     0,     4,     0,   102,     0,   129,
      0,   121,    53,     0,   123,     0,   123,     0,     4,     5,       0,   125,   129,     0,   126,     0,   125,   126,     0,   127,
      0,     4,     0,   124,     0,   125,     0,   126,     0,    50,      55,     0,   129,     0,   129,     0,     4,     5,     0,     4,
    127,     0,     4,   128,     0,    47,    76,    48,     0,     4,       0,   130,     0,   131,     0,   132,     0,    52,   135,     0,
      0,   129,     0,   128,   129,     0,    50,   127,     0,   131,       4,   136,     0,     0,     0,    49,   133,    79,   134,    50,
      0,   132,     0,     4,    57,     0,   131,    57,     0,   134,       0,     4,     0,   137,     0,   136,   137,     0,    52,   135,
      0,     4,     0,    80,     0,   101,     0,    58,   135,    58,       0,   139,     0,   140,     0,     4,    59,     0,   139,    59,
      0,    59,   135,    59,     0,    54,   134,    55,     0,    37,       0,   142,     0,   143,     0,   147,     0,   148,     0,    83,
    134,     0,    36,   134,     0,    43,   134,     0,    44,   134,       0,   106,     0,    60,   144,    60,     0,    61,   144,    61,
      0,    27,   134,     0,    28,   134,     0,    29,   134,     0,       0,    56,   142,    57,     0,    39,   142,     0,    38,   142,
     30,   134,     0,   134,    37,   134,     0,   134,    36,   134,       0,    45,   142,     0,    46,   142,     0,    27,   142,     0,
      0,   134,    38,   134,     0,   134,    39,   134,     0,   134,      28,   142,     0,    29,   142,     0,    30,   142,     0,   142,
     41,   134,     0,   134,    40,   134,     0,   134,    19,   134,      39,   142,     0,   142,    38,   142,     0,   142,    40,   142,
      0,   134,    20,   134,     0,   134,    35,   134,     0,   134,       0,   142,    41,   142,     0,   142,    43,   142,     0,   142,
     34,   134,     0,   134,    14,   134,     0,   134,    11,   134,      42,   142,     0,   142,    19,   142,     0,   142,    20,   142,
      0,   134,    12,   134,     0,   134,    13,   134,     0,   134,       0,   142,    37,   142,     0,   142,    36,   142,     0,   142,
     32,   134,     0,   134,    33,   134,     0,   134,    15,   134,      14,   142,     0,   142,    11,   142,     0,   142,    12,   142,
      0,   134,    16,   134,     0,   134,    17,   134,     0,   134,       0,   142,    13,   142,     0,   142,    34,   142,     0,   142,
     18,   134,     0,   134,    21,   134,     0,   134,    22,   134,      35,   142,     0,   142,    15,   142,     0,   142,    16,   142,
      0,   134,    23,   134,     0,   134,    24,   134,     0,   134,       0,   142,    17,   142,     0,   142,    18,   142,     0,   142,
     25,   134,     0,   134,    26,   134,     0,   134,    31,   134,      21,   142,     0,   142,    22,   142,     0,   142,    23,   142,
      0,    75,     0,     4,     0,     0,     0       0,   142,    24,   142,     0,   142,    25,   142,     0,   142,
       26,   142,     0,   142,    31,   142,     0,     4,     0,    78,
        0,     4,     0,     0,    32,     0,    33,     0,     0
 };  };
   
 #endif  #endif
   
 #if YYDEBUG != 0  #if YYDEBUG != 0
 static const short yyrline[] = { 0,  static const short yyrline[] = { 0,
    115,   125,   127,   127,   128,   130,   130,   132,   199,   199,     125,   133,   135,   135,   136,   138,   138,   140,   212,   212,
    200,   200,   201,   202,   202,   204,   233,   233,   234,   235,     213,   213,   214,   215,   215,   217,   252,   257,   257,   258,
    235,   236,   236,   238,   238,   242,   242,   244,   244,   245,     259,   259,   260,   260,   262,   262,   266,   266,   268,   268,
    245,   246,   246,   246,   250,   257,   258,   258,   259,   260,     269,   269,   270,   270,   270,   274,   281,   282,   282,   283,
    262,   263,   285,   286,   286,   290,   294,   296,   297,   298,     284,   286,   287,   309,   310,   310,   314,   318,   320,   321,
    315,   320,   322,   324,   325,   327,   333,   341,   347,   349,     322,   339,   344,   346,   348,   349,   351,   354,   356,   362,
    350,   352,   358,   359,   359,   363,   369,   372,   375,   388,     370,   376,   378,   379,   381,   387,   388,   388,   392,   398,
    390,   390,   391,   393,   394,   396,   397,   398,   399,   401,     401,   404,   417,   419,   419,   420,   422,   423,   425,   428,
    403,   405,   407,   409,   411,   415,   419,   423,   425,   426,     430,   431,   432,   433,   435,   437,   439,   441,   443,   445,
    428,   437,   437,   439,   439,   440,   441,   449,   454,   456,     449,   464,   468,   470,   471,   476,   476,   478,   478,   479,
    458,   459,   460,   462,   466,   475,   481,   486,   486,   487,     480,   488,   493,   495,   497,   498,   499,   501,   505,   514,
    492,   494,   496,   508,   520,   525,   527,   528,   529,   530,     517,   519,   525,   530,   530,   531,   536,   538,   540,   552,
    531,   533,   534,   535,   536,   537,   538,   539,   540,   542,     564,   565,   567,   568,   569,   570,   571,   572,   573,   575,
    543,   544,   545,   546,   547,   548,   549,   550,   551,   552,     576,   577,   578,   579,   580,   581,   582,   584,   585,   586,
    553,   554,   555,   556,   557,   558,   559,   560,   561,   562,     587,   588,   589,   590,   591,   592,   593,   594,   595,   596,
    563,   564,   565,   566,   567,   568,   571,   580,   585,   586     597,   598,   599,   600,   601,   602,   603,   604,   605,   606,
      607,   608,   609,   610,   613,   618,   627,   632,   633,   634,
      636
 };  };
 #endif  #endif
   
Line 234  static const short yyrline[] = { 0, Line 249  static const short yyrline[] = { 0,
   
 static const char * const yytname[] = {   "$","error","$undefined.","EON","STRING",  static const char * const yytname[] = {   "$","error","$undefined.","EON","STRING",
 "BOGUS","BAD_STRING_COMPARISON_OPERATOR","BAD_HEX_LITERAL","BAD_METHOD_DECL_START",  "BOGUS","BAD_STRING_COMPARISON_OPERATOR","BAD_HEX_LITERAL","BAD_METHOD_DECL_START",
 "BAD_METHOD_PARAMETER_NAME_CHARACTER","BAD_MATH_OPERATOR_CHARACTER","\"&&\"",  "BAD_METHOD_PARAMETER_NAME_CHARACTER","BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE",
 "\"||\"","\"!||\"","\"!|\"","\"<=\"","\">=\"","\"==\"","\"!=\"","\"<<\"","\">>\"",  "\"&&\"","\"||\"","\"!||\"","\"!|\"","\"<=\"","\">=\"","\"==\"","\"!=\"","\"<<\"",
 "\"lt\"","\"gt\"","\"le\"","\"ge\"","\"eq\"","\"ne\"","\"def\"","\"in\"","\"-f\"",  "\">>\"","\"lt\"","\"gt\"","\"le\"","\"ge\"","\"eq\"","\"ne\"","\"def\"","\"in\"",
 "\"-d\"","\"is\"","'<'","'>'","'|'","'&'","'+'","'-'","'*'","'/'","'\\\\'","'%'",  "\"-f\"","\"-d\"","\"is\"","\"true\"","\"false\"","'<'","'>'","'|'","'&'","'+'",
 "NUNARY","'~'","'!'","'@'","'\\n'","'['","']'","';'","'$'","'{'","'}'","'.'",  "'-'","'*'","'/'","'\\\\'","'%'","NUNARY","'~'","'!'","'@'","'\\n'","'['","']'",
 "'('","')'","'^'","':'","'\\\"'","'\\''","all","methods","one_big_piece","method",  "';'","'$'","'{'","'}'","'.'","'('","')'","'^'","':'","'\\\"'","'\\''","all",
 "control_method","maybe_control_strings","control_strings","control_string",  "methods","one_big_piece","method","control_method","maybe_control_strings",
 "maybe_string","code_method","maybe_bracketed_strings","bracketed_maybe_strings",  "control_strings","control_string","maybe_string","code_method","@1","maybe_bracketed_strings",
 "maybe_strings","strings","maybe_comment","maybe_codes","codes","code","action",  "bracketed_maybe_strings","maybe_strings","strings","maybe_comment","maybe_codes",
 "get","get_value","get_name_value","name_in_curly_rdive","name_without_curly_rdive",  "codes","code","action","get","get_value","get_name_value","name_in_curly_rdive",
 "name_without_curly_rdive_read","name_without_curly_rdive_class","name_without_curly_rdive_code",  "name_without_curly_rdive","name_without_curly_rdive_read","name_without_curly_rdive_class",
 "put","name_expr_wdive","name_expr_wdive_root","name_expr_wdive_write","name_expr_wdive_class",  "name_without_curly_rdive_code","put","name_expr_wdive","name_expr_wdive_root",
 "construct","construct_square","construct_round","construct_curly","any_constructor_code_value",  "name_expr_wdive_write","name_expr_wdive_class","construct","construct_square",
 "constructor_code_value","constructor_code","codes__excluding_sole_str_literal",  "@2","@3","construct_round","construct_curly","any_constructor_code_value","constructor_code_value",
 "call","call_value","@1","@2","call_name","store_params","store_param","store_square_param",  "constructor_code","codes__excluding_sole_str_literal","call","call_value","@4",
   "@5","call_name","store_params","store_param","store_square_param","@6","@7",
 "store_round_param","store_curly_param","store_code_param_parts","store_expr_param_parts",  "store_round_param","store_curly_param","store_code_param_parts","store_expr_param_parts",
 "store_curly_param_parts","store_code_param_part","store_expr_param_part","store_curly_param_part",  "store_curly_param_parts","store_code_param_part","store_expr_param_part","store_curly_param_part",
 "code_param_value","write_expr_value","name_expr_dive_code","name_path","name_step",  "code_param_value","name_expr_dive_code","name_path","name_step","name_advance1",
 "name_advance1","name_advance2","name_expr_value","name_expr_subvar_value","name_expr_with_subvar_value",  "name_advance2","name_expr_value","name_expr_subvar_value","name_expr_with_subvar_value",
 "name_square_code_value","subvar_ref_name_rdive","subvar_get_writes","subvar__get_write",  "name_square_code_value","@8","@9","subvar_ref_name_rdive","subvar_get_writes",
 "class_prefix","class_static_prefix","class_constructor_prefix","expr_value",  "subvar__get_write","class_prefix","class_static_prefix","class_constructor_prefix",
 "expr","string_inside_quotes_value","write_string","void_value","empty", NULL  "expr_value","expr","double_or_STRING","string_inside_quotes_value","write_string",
   "void_value","true_value","false_value","empty", NULL
 };  };
 #endif  #endif
   
 static const short yyr1[] = {     0,  static const short yyr1[] = {     0,
     60,    60,    61,    61,    62,    63,    63,    64,    65,    65,      62,    62,    63,    63,    64,    65,    65,    66,    67,    67,
     66,    66,    67,    68,    68,    69,    70,    70,    71,    72,      68,    68,    69,    70,    70,    72,    71,    73,    73,    74,
     72,    73,    73,    74,    74,    75,    75,    76,    76,    77,      75,    75,    76,    76,    77,    77,    78,    78,    79,    79,
     77,    78,    78,    78,    79,    80,    81,    81,    82,    83,      80,    80,    81,    81,    81,    82,    83,    84,    84,    85,
     83,    84,    85,    86,    86,    87,    88,    88,    88,    89,      86,    86,    87,    88,    89,    89,    90,    91,    91,    91,
     90,    91,    92,    92,    92,    93,    94,    95,    96,    96,      92,    93,    94,    95,    95,    95,    97,    98,    96,    99,
     96,    97,    98,    99,    99,   100,   102,   103,   101,   104,     100,   101,   101,   101,   102,   103,   104,   104,   105,   107,
    105,   105,   106,   106,   106,   107,   108,   109,   110,   110,     108,   106,   109,   110,   110,   111,   111,   111,   113,   114,
    111,   111,   112,   112,   113,   114,   115,   116,   116,   116,     112,   115,   116,   117,   117,   118,   118,   119,   119,   120,
    117,   118,   118,   119,   119,   120,   121,   122,   122,   123,     121,   122,   123,   123,   123,   124,   124,   125,   125,   126,
    123,   123,   123,   124,   125,   126,   127,   128,   128,   129,     127,   128,   128,   129,   129,   129,   129,   130,   131,   133,
    130,   130,   131,   132,   133,   134,   134,   134,   134,   134,     134,   132,   135,   136,   136,   137,   138,   138,   139,   140,
    134,   134,   134,   134,   134,   134,   134,   134,   134,   134,     141,   142,   142,   142,   142,   142,   142,   142,   142,   142,
    134,   134,   134,   134,   134,   134,   134,   134,   134,   134,     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
    134,   134,   134,   134,   134,   134,   134,   134,   134,   134,     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
    134,   134,   134,   134,   134,   134,   135,   136,   137,   138     142,   142,   142,   142,   142,   142,   142,   142,   142,   142,
      142,   142,   142,   142,   143,   144,   145,   146,   147,   148,
      149
 };  };
   
 static const short yyr2[] = {     0,  static const short yyr2[] = {     0,
      1,     1,     1,     2,     1,     1,     1,     4,     1,     1,       1,     1,     1,     2,     1,     1,     1,     4,     1,     1,
      1,     2,     2,     1,     1,     7,     1,     1,     3,     1,       1,     2,     2,     1,     1,     0,     8,     1,     1,     3,
      1,     1,     3,     1,     1,     1,     1,     1,     2,     1,       1,     1,     1,     3,     1,     1,     1,     1,     1,     2,
      1,     1,     1,     1,     1,     2,     2,     1,     3,     1,       1,     1,     1,     1,     1,     1,     2,     2,     1,     3,
      1,     1,     2,     1,     2,     3,     1,     1,     1,     1,       1,     1,     1,     2,     1,     2,     3,     1,     1,     1,
      2,     2,     1,     1,     1,     3,     3,     3,     1,     1,       1,     2,     2,     1,     1,     1,     0,     0,     5,     3,
      1,     1,     1,     1,     2,     1,     0,     0,     6,     1,       3,     1,     1,     1,     1,     1,     1,     2,     1,     0,
      1,     2,     1,     1,     1,     3,     3,     3,     1,     3,       0,     6,     1,     1,     2,     1,     1,     1,     0,     0,
      1,     3,     1,     3,     1,     1,     1,     1,     1,     1,       5,     3,     3,     1,     3,     1,     3,     1,     3,     1,
      1,     1,     2,     1,     2,     2,     1,     1,     2,     1,       1,     1,     1,     1,     1,     1,     2,     1,     2,     2,
      1,     1,     1,     2,     2,     3,     1,     1,     2,     2,       1,     1,     2,     1,     1,     1,     1,     2,     2,     0,
      1,     1,     2,     2,     1,     1,     1,     1,     3,     3,       0,     5,     1,     1,     2,     2,     1,     1,     2,     2,
      3,     2,     2,     2,     2,     2,     2,     2,     2,     3,       1,     1,     1,     1,     1,     1,     3,     3,     3,     2,
        2,     2,     2,     2,     2,     2,     2,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     3,     3,     3,     3,       3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
      3,     3,     3,     3,     3,     3,     1,     1,     0,     0       3,     3,     3,     3,     1,     1,     1,     0,     1,     1,
        0
 };  };
   
 static const short yydefact[] = {   160,  static const short yydefact[] = {   171,
    158,     0,     0,    67,     2,     1,     3,     6,     7,     5,     167,     0,     0,    70,     2,     1,     3,     6,     7,     5,
     27,    28,    31,    32,    35,    33,    34,    66,    30,    26,      28,    29,    32,    33,    36,    34,    35,    69,    31,    27,
      0,   100,     0,     0,     0,     0,    36,    38,     0,    40,       0,   104,   110,     0,     0,     0,    37,    39,     0,    41,
     41,    42,     0,    47,    48,    49,    50,     0,    94,     0,      42,    43,     0,    48,    49,    50,    51,     0,    98,     0,
     44,    92,   101,   102,   103,     0,   111,   112,     0,     4,      45,    96,   105,   106,   107,     0,   117,   118,     0,     4,
     29,   160,   160,   160,    99,     0,   113,   105,   108,     0,      30,   171,   171,   171,   103,     0,   119,   109,   114,     0,
    107,   104,     0,     0,    98,     0,   100,    51,     0,    92,     113,   108,     0,     0,   102,     0,   104,    52,     0,    96,
     37,   159,   160,     0,    46,    53,    54,    55,   100,    95,      38,    57,   171,     0,    47,    54,    55,    56,   104,    99,
     45,    93,    96,    43,    52,   114,    70,    68,    15,     8,      46,    97,   100,    44,    53,   120,    73,    71,    15,     8,
     10,    11,     0,     9,    22,     0,    21,    20,   160,    18,      10,    11,     0,     9,    23,     0,    22,    21,   171,    19,
     17,   110,   109,   106,    39,    93,   158,     0,    31,     0,      18,   116,   115,   111,    40,    97,   168,     0,   165,     0,
     61,    62,    63,    59,     0,   116,     0,     0,     0,     0,       0,     0,     0,   169,   170,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   160,   160,   117,   118,       0,   171,   171,   125,   126,     0,   121,   122,   123,   124,
      0,   115,     0,    12,    14,    13,    19,     0,    25,     0,       0,    12,    14,    13,    20,     0,    26,     0,    25,     0,
     24,    65,    56,    58,   126,   127,   128,   129,   123,   122,     167,     0,    32,    58,    64,    65,    66,    62,    61,   134,
    124,   125,     0,   157,     0,     0,    57,     0,     0,     0,     135,   136,   137,   131,   130,   132,   133,     0,   166,     0,
        0,    60,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,       0,     0,     0,     0,     0,     0,     0,     0,     0,    79,
      0,     0,     0,     0,   159,   160,     0,     0,    71,    73,     171,     0,     0,    74,    76,    77,    78,    24,    16,   112,
     74,    75,    23,   160,   121,   119,   120,   141,   142,   143,      68,     0,   129,   127,   128,   149,   150,   151,   148,   154,
    140,   146,   147,   148,   149,   136,   137,   150,   151,   152,     155,   156,   157,   144,   145,   158,   159,   160,   161,   162,
    153,   154,   155,   156,   144,   145,   139,   138,   131,   130,     163,   164,   152,   153,   147,   146,   139,   138,   140,   141,
    132,   133,   135,   134,   158,    90,     0,    79,    85,    88,     143,   142,   168,    92,     0,    88,     0,    86,    91,    72,
     87,     0,    83,     0,    81,    86,    91,    69,    72,    16,      75,   171,    59,   167,    95,    80,    84,    90,    93,   171,
     76,   159,   160,    78,     0,    77,    80,    84,    82,     0,      83,     0,    82,    17,   168,     0,    89,    87,    85,    81,
      0,     0       0,     0,     0
 };  };
   
 static const short yydefgoto[] = {   250,  static const short yydefgoto[] = {   261,
      5,     6,     7,     8,    90,    91,    92,    93,     9,    99,       5,     6,     7,     8,    90,    91,    92,    93,     9,   242,
     54,    96,    97,   140,   154,    11,    12,    13,    14,   129,      99,    54,    96,    97,   138,   159,    11,    12,    13,    14,
     27,    28,    29,    30,    31,    32,    16,    33,    34,    35,     124,    27,    28,    29,    30,    31,    32,    16,    33,    34,
     36,    75,    76,    77,    78,   110,   226,   112,   113,    17,      35,    36,    75,    76,   107,   202,    77,    78,   144,   245,
    130,    49,   133,    88,   188,   189,   190,   191,   192,   227,     146,   147,    17,   125,    49,   131,    88,   193,   194,   195,
    234,   232,   228,   235,   233,   229,   236,    37,    64,    39,     233,   256,   196,   197,   246,   237,   235,   247,   238,   236,
     40,    41,    65,    43,    44,    45,    62,    58,    59,    66,     248,    37,    64,    39,    40,    41,    65,    43,    44,    45,
     47,    48,   237,   132,   155,    19,   230,    20      60,   140,    62,    58,    59,    66,    47,    48,   239,   127,
      128,   160,    19,   249,   129,   130,    20
 };  };
   
 static const short yypact[] = {    13,  static const short yypact[] = {     6,
 -32768,    24,    98,-32768,    36,-32768,-32768,-32768,-32768,-32768,  -32768,    23,    50,-32768,   -17,-32768,-32768,-32768,-32768,-32768,
     14,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,      18,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
    -26,    39,    14,    44,    45,   100,-32768,-32768,    47,-32768,     -31,    19,-32768,    43,    42,    44,-32768,-32768,    52,-32768,
 -32768,-32768,    52,-32768,-32768,-32768,-32768,   118,-32768,    59,  -32768,-32768,   -33,-32768,-32768,-32768,-32768,    65,-32768,    22,
 -32768,     4,-32768,-32768,-32768,   118,    -3,-32768,    45,-32768,  -32768,     4,-32768,-32768,-32768,    65,    24,-32768,    42,-32768,
 -32768,   101,   113,    71,-32768,    44,-32768,    70,-32768,    32,  -32768,    97,   104,    64,-32768,    43,-32768,    78,-32768,    18,
 -32768,-32768,    73,   118,    83,   118,    70,-32768,   100,    83,  -32768,-32768,    77,    65,    88,    65,    78,-32768,    44,    88,
 -32768,    27,    14,    57,-32768,-32768,-32768,-32768,     1,-32768,  -32768,-32768,    18,     5,-32768,-32768,-32768,-32768,    16,-32768,
 -32768,     4,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  -32768,     4,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
     20,-32768,    78,    91,-32768,    90,    94,-32768,   135,-32768,       8,-32768,    85,    86,-32768,   100,   117,-32768,   166,-32768,
 -32768,-32768,-32768,-32768,-32768,    83,    92,    14,   -22,   106,  -32768,-32768,-32768,    18,-32768,    88,    27,   119,-32768,     5,
 -32768,-32768,-32768,-32768,   115,-32768,    57,    57,    57,    57,       5,     5,     5,-32768,-32768,     5,     5,     5,     5,    63,
     57,    57,    57,    57,   105,    57,    14,    14,-32768,-32768,       5,    18,    18,-32768,-32768,   114,   274,-32768,-32768,-32768,
    114,   281,    72,-32768,-32768,-32768,-32768,   142,-32768,   107,      79,-32768,-32768,-32768,-32768,   170,-32768,   137,-32768,   136,
 -32768,    14,-32768,-32768,   440,   440,   440,   440,-32768,-32768,     138,    18,    60,-32768,-32768,-32768,-32768,-32768,-32768,   443,
 -32768,-32768,   236,-32768,   112,   120,-32768,    57,    57,    57,     443,   443,   443,-32768,-32768,-32768,-32768,   141,-32768,   127,
     57,    57,    57,    57,    57,    57,    57,    57,    57,    57,     128,-32768,     5,     5,     5,     5,     5,     5,     5,     5,
     57,    57,    57,    57,    57,    57,    57,    57,    57,    57,       5,     5,     5,     5,     5,     5,     5,     5,     5,     5,
     57,    57,    57,    57,    41,    14,    57,     5,-32768,-32768,       5,     5,     5,     5,     5,     5,     5,     5,     5,-32768,
 -32768,-32768,-32768,    14,-32768,-32768,-32768,   371,   343,   312,      18,     5,    39,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
    244,   399,   399,   412,   412,   136,   136,   399,   399,   399,      18,   140,-32768,-32768,-32768,   370,   340,   307,   428,   400,
    399,   412,   412,   440,   399,   399,   447,   453,    93,    93,     400,   413,   413,    98,    98,   400,   400,   400,   400,   413,
 -32768,-32768,-32768,-32768,   -11,-32768,    19,-32768,-32768,-32768,     413,   443,   400,   400,   180,   453,   105,   105,-32768,-32768,
 -32768,   -10,-32768,   -33,-32768,-32768,-32768,-32768,-32768,-32768,  -32768,-32768,    32,-32768,    35,-32768,   -32,-32768,-32768,-32768,
 -32768,    41,    14,-32768,    57,-32768,-32768,-32768,-32768,   180,  -32768,    18,-32768,    70,-32768,   144,-32768,-32768,-32768,    18,
    181,-32768  -32768,     5,-32768,-32768,    32,   146,-32768,-32768,-32768,-32768,
      197,   202,-32768
 };  };
   
 static const short yypgoto[] = {-32768,  static const short yypgoto[] = {-32768,
 -32768,-32768,   177,-32768,-32768,-32768,    99,-32768,-32768,-32768,  -32768,-32768,   199,-32768,-32768,-32768,   118,-32768,-32768,-32768,
    129,-32768,-32768,-32768,     3,   -18,    -7,   -71,-32768,     0,  -32768,   156,-32768,-32768,-32768,     1,   -55,    -7,  -104,-32768,
 -32768,-32768,    -6,-32768,-32768,   -37,-32768,-32768,-32768,-32768,       0,-32768,-32768,   -10,-32768,-32768,   -38,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,   119,-32768,-32768,-32768,  -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   108,
      2,-32768,-32768,-32768,-32768,    -4,-32768,-32768,-32768,-32768,  -32768,-32768,-32768,     2,-32768,-32768,-32768,-32768,    31,-32768,
 -32768,-32768,   -50,   -52,   -48,-32768,-32768,   -16,    95,   -23,  -32768,-32768,-32768,-32768,-32768,-32768,-32768,   -30,   -25,   -22,
 -32768,   -24,     9,-32768,-32768,-32768,   169,-32768,   168,   224,  -32768,    72,   123,   -24,-32768,   -12,     3,-32768,-32768,-32768,
 -32768,-32768,   154,    40,   102,-32768,   157,   -20  -32768,-32768,   173,-32768,   172,   228,-32768,-32768,   158,    95,
   -32768,   111,-32768,   129,-32768,-32768,    28
 };  };
   
   
 #define YYLAST          494  #define YYLAST          496
   
   
 static const short yytable[] = {    15,  static const short yytable[] = {    15,
    109,    18,    10,    51,    60,    55,   -98,   238,    84,    68,      10,    18,   143,    51,   104,    42,  -102,    84,   109,     1,
     15,    42,    18,    81,    80,   245,     1,     1,    63,    52,      15,    89,    18,    80,    63,    72,    52,    53,   252,    73,
     53,   246,    15,    89,    18,   -64,   -64,    21,    84,    85,      55,     1,    74,    55,   253,    81,    21,    84,    70,     2,
    107,    94,    98,   101,    70,     1,   -89,   -89,   243,    81,     141,   110,   111,   112,   113,   244,   114,   115,    87,    80,
     80,   244,    87,    55,   225,    80,    82,    61,    22,    71,      82,   240,   116,   117,    80,    22,    61,    67,    42,   118,
     56,   185,    51,    86,    42,   186,   -97,     2,   187,    15,     119,    81,     2,    22,    71,  -171,   120,     3,  -101,    15,
    116,    18,     3,     3,   108,  -160,   241,   242,     4,     4,     121,    18,     4,     4,   122,   123,    22,    56,    79,     3,
    135,    15,    15,    18,    18,   115,     3,   106,   141,   104,      56,   106,    15,   108,    18,     4,    83,    57,     3,    94,
      2,     3,     4,   117,   118,   119,   120,     4,    56,   142,      98,   101,    86,     3,     4,   250,   201,   190,   251,     4,
      3,    23,   121,   122,    24,    57,     4,    38,    72,   123,      23,   191,    23,    24,   192,    24,    51,    68,    23,   142,
    124,    22,    73,    67,    89,    74,   125,    15,    22,    18,      89,    24,    25,    15,    26,    18,    15,    95,    18,   -67,
    126,    83,     4,   109,   127,   128,    95,    53,   185,    56,     -67,    23,    53,    23,    24,    25,    24,    85,   133,   -94,
     69,    79,   186,   136,   105,   187,    15,    15,    18,    18,     -94,    15,    15,    18,    18,    38,   139,   190,   143,    56,
    181,   182,   183,   184,    51,   -97,   -14,   137,   139,   -60,     105,   191,   134,   -14,   192,   184,   185,   186,   187,   188,
     38,    15,   138,    18,    23,   193,    23,    24,    25,    24,     189,    15,  -101,    18,   186,   187,   188,   189,    69,   135,
     26,    23,   194,   143,    24,    25,   145,   146,   147,   148,     143,   163,   164,   165,   166,   167,   168,   169,   170,   171,
    149,   150,   151,   152,    23,   153,   144,    24,   157,   196,     172,   173,   174,   175,   176,   177,   178,   136,    38,   137,
    109,   179,   180,   181,   182,   183,   184,   108,   197,   251,     162,   179,   149,   198,   180,   181,   182,   183,   184,   185,
    252,    50,   100,   239,    15,    15,    18,    18,   231,   134,     186,   187,   188,   189,   199,   200,   204,   -63,   205,   243,
    111,   247,   249,    15,   248,    18,   240,   198,   199,   200,      15,   234,    18,    51,   255,   260,   262,   203,   171,   172,
    201,   202,   203,   204,   205,   206,   207,   208,   209,   210,      15,   263,    18,    50,   150,   151,   152,   153,   132,   100,
    211,   212,   213,   214,   215,   216,   217,   218,   219,   220,     154,   155,   156,   157,   145,   158,   183,   184,   185,   186,
    221,   222,   223,   224,   102,   103,    46,   131,   114,   156,     187,   188,   189,   241,   259,   142,   258,   257,   102,   103,
      0,     0,     0,     0,   108,     0,     0,     0,     0,     0,      46,   126,    15,   161,    18,   148,     0,     0,     0,     0,
      0,    15,    15,    18,    18,   231,   158,   159,   160,   161,       0,    15,   254,    18,     0,     0,     0,   142,     0,    15,
    162,   163,   164,   165,   166,   167,   168,   169,   170,   171,     234,    18,     0,     0,    15,     0,    18,   206,   207,   208,
    172,   173,   166,   167,     0,     0,   174,   175,   176,   177,     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
    178,   179,   180,   181,   182,   183,   184,   177,   178,   179,     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
    180,   181,   182,   183,   184,     0,     0,     0,     0,     0,     229,   230,   231,   232,   163,   164,   165,   166,   167,   168,
    195,   158,   159,   160,   161,   162,   163,   164,   165,   166,     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
    167,   168,   169,   170,   171,   172,   173,     0,     0,     0,       0,     0,     0,     0,   179,     0,     0,   180,   181,   182,
      0,   174,   175,   176,   177,   178,   179,   180,   181,   182,     183,   184,   185,   186,   187,   188,   189,   163,   164,     0,
    183,   184,   158,   159,     0,   161,   162,   163,   164,   165,     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
    166,   167,   168,   169,   170,   171,   172,   173,     0,     0,     176,   177,   178,     0,     0,     0,     0,   179,     0,     0,
      0,     0,   174,   175,   176,   177,   178,   179,   180,   181,     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
    182,   183,   184,   158,     0,     0,   161,   162,   163,   164,     163,     0,     0,   166,   167,   168,   169,   170,   171,   172,
    165,   166,   167,   168,   169,   170,   171,   172,   173,     0,     173,   174,   175,   176,   177,   178,     0,     0,     0,     0,
      0,     0,     0,   174,   175,   176,   177,   178,   179,   180,     179,     0,     0,   180,   181,   182,   183,   184,   185,   186,
    181,   182,   183,   184,   161,   162,   163,   164,   165,   166,     187,   188,   189,   166,   167,   168,   169,   170,   171,   172,
    167,   168,   169,   170,   171,   172,   173,     0,     0,     0,     173,   174,   175,   176,   177,   178,     0,     0,     0,     0,
      0,   174,   175,   176,   177,   178,   179,   180,   181,   182,     179,     0,     0,   180,   181,   182,   183,   184,   185,   186,
    183,   184,   161,     0,     0,   164,   165,   166,   167,     0,     187,   188,   189,   166,     0,     0,   169,   170,   171,   172,
      0,     0,     0,   172,   173,   161,     0,     0,     0,   174,       0,     0,     0,     0,   177,   178,   166,     0,     0,     0,
    166,   167,   177,   178,   179,   180,   181,   182,   183,   184,     179,   171,   172,     0,     0,   182,   183,   184,   185,   186,
      0,     0,   174,     0,     0,   177,   178,   179,   180,   181,     187,   188,   189,   179,     0,     0,   171,   172,   182,   183,
    182,   183,   184,   161,     0,     0,     0,     0,   166,   167,     184,   185,   186,   187,   188,   189,   166,     0,     0,     0,
      0,     0,     0,     0,     0,   166,   167,     0,     0,     0,       0,   171,   172,   182,   183,   184,   185,   186,   187,   188,
      0,   166,   167,   177,   178,   179,   180,   181,   182,   183,     189,   171,   172,     0,     0,     0,     0,     0,   182,   183,
    184,   178,   179,   180,   181,   182,   183,   184,   179,   180,     184,   185,   186,   187,   188,   189,     0,     0,     0,     0,
    181,   182,   183,   184     184,   185,   186,   187,   188,   189
 };  };
   
 static const short yycheck[] = {     0,  static const short yycheck[] = {     0,
     72,     0,     0,    11,    23,     5,     3,     3,    46,    26,       0,     0,   107,    11,    60,     3,     3,    46,     4,     4,
     11,     3,    11,    38,    38,    49,     4,     4,    25,    46,      11,     4,    11,    38,    25,    49,    48,    49,    51,    53,
     47,    55,    23,     4,    23,    48,    49,     4,    66,    46,       5,     4,    56,     5,    57,    38,     4,    66,    26,    47,
      4,    52,    53,    54,    26,     4,    48,    49,    49,    64,       4,    27,    28,    29,    30,     4,    32,    33,    49,    64,
     64,    52,    49,     5,     4,    69,    38,     4,     4,     3,      38,     3,    38,    39,    69,     4,     4,     4,    46,    45,
     50,    47,    60,    57,    46,    51,    53,    45,    54,    60,      46,    64,    47,     4,     3,    48,    52,    52,    55,    60,
      4,    60,    50,    50,    72,    46,    48,    49,    56,    56,      56,    60,    58,    58,    60,    61,     4,    52,     4,    52,
     91,    72,    73,    72,    73,    73,    50,    69,    99,    48,      52,    69,    73,    73,    73,    58,    55,    59,    52,    52,
     45,    50,    56,    27,    28,    29,    30,    56,    50,   108,      53,    54,    59,    52,    58,    51,   142,    49,    54,    58,
     50,    47,    36,    37,    50,    57,    56,     3,    47,    43,      49,    53,    49,    52,    56,    52,   104,    26,    49,   107,
     44,     4,    51,     4,     4,    54,    50,   108,     4,   108,       4,    52,    53,   104,    55,   104,   107,     4,   107,    50,
     54,    53,    56,   185,    58,    59,     4,    47,    47,    50,      51,    49,    49,    49,    52,    53,    52,    46,    91,    50,
     26,     4,    51,    46,    52,    54,   127,   128,   127,   128,      51,   122,   123,   122,   123,     3,    99,    49,   233,    52,
     38,    39,    40,    41,   142,    53,    46,    48,     4,    48,      54,    53,    48,    48,    56,    38,    39,    40,    41,    42,
     46,   142,    49,   142,    47,     4,    47,    50,    51,    50,      43,   142,    55,   142,    40,    41,    42,    43,    26,    50,
     53,    47,    46,    48,    50,    51,   117,   118,   119,   120,     255,    11,    12,    13,    14,    15,    16,    17,    18,    19,
    121,   122,   123,   124,    47,   126,    52,    50,    55,    58,      20,    21,    22,    23,    24,    25,    26,    51,    46,     4,
    242,    36,    37,    38,    39,    40,    41,   185,    59,     0,      57,    31,    54,     4,    34,    35,    36,    37,    38,    39,
      0,     5,    54,   188,   185,   186,   185,   186,   186,    91,      40,    41,    42,    43,    48,    50,    60,    50,    61,    50,
     72,   242,   245,   194,   243,   194,   194,   158,   159,   160,     191,   191,   191,   201,    51,    50,     0,    57,    19,    20,
    161,   162,   163,   164,   165,   166,   167,   168,   169,   170,     201,     0,   201,     5,   110,   111,   112,   113,    91,    54,
    171,   172,   173,   174,   175,   176,   177,   178,   179,   180,     116,   117,   118,   119,   107,   121,    37,    38,    39,    40,
    181,   182,   183,   184,    56,    58,     3,    74,    72,   128,      41,    42,    43,   193,   255,   233,   252,   250,    56,    58,
     -1,    -1,    -1,    -1,   242,    -1,    -1,    -1,    -1,    -1,       3,    74,   233,   123,   233,   107,    -1,    -1,    -1,    -1,
     -1,   242,   243,   242,   243,   243,    11,    12,    13,    14,      -1,   242,   242,   242,    -1,    -1,    -1,   255,    -1,   250,
     15,    16,    17,    18,    19,    20,    21,    22,    23,    24,     250,   250,    -1,    -1,   255,    -1,   255,   163,   164,   165,
     25,    26,    19,    20,    -1,    -1,    31,    32,    33,    34,     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
     35,    36,    37,    38,    39,    40,    41,    34,    35,    36,     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
     37,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,     186,   187,   188,   189,    11,    12,    13,    14,    15,    16,
     55,    11,    12,    13,    14,    15,    16,    17,    18,    19,      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
     20,    21,    22,    23,    24,    25,    26,    -1,    -1,    -1,      -1,    -1,    -1,    -1,    31,    -1,    -1,    34,    35,    36,
     -1,    31,    32,    33,    34,    35,    36,    37,    38,    39,      37,    38,    39,    40,    41,    42,    43,    11,    12,    -1,
     40,    41,    11,    12,    -1,    14,    15,    16,    17,    18,      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
     19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,      24,    25,    26,    -1,    -1,    -1,    -1,    31,    -1,    -1,
     -1,    -1,    31,    32,    33,    34,    35,    36,    37,    38,      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
     39,    40,    41,    11,    -1,    -1,    14,    15,    16,    17,      11,    -1,    -1,    14,    15,    16,    17,    18,    19,    20,
     18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,      21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    31,    32,    33,    34,    35,    36,    37,      31,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
     38,    39,    40,    41,    14,    15,    16,    17,    18,    19,      41,    42,    43,    14,    15,    16,    17,    18,    19,    20,
     20,    21,    22,    23,    24,    25,    26,    -1,    -1,    -1,      21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    -1,
     -1,    31,    32,    33,    34,    35,    36,    37,    38,    39,      31,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
     40,    41,    14,    -1,    -1,    17,    18,    19,    20,    -1,      41,    42,    43,    14,    -1,    -1,    17,    18,    19,    20,
     -1,    -1,    -1,    25,    26,    14,    -1,    -1,    -1,    31,      -1,    -1,    -1,    -1,    25,    26,    14,    -1,    -1,    -1,
     19,    20,    34,    35,    36,    37,    38,    39,    40,    41,      31,    19,    20,    -1,    -1,    36,    37,    38,    39,    40,
     -1,    -1,    31,    -1,    -1,    34,    35,    36,    37,    38,      41,    42,    43,    31,    -1,    -1,    19,    20,    36,    37,
     39,    40,    41,    14,    -1,    -1,    -1,    -1,    19,    20,      38,    39,    40,    41,    42,    43,    14,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    19,    20,    -1,    -1,    -1,      -1,    19,    20,    36,    37,    38,    39,    40,    41,    42,
     -1,    19,    20,    34,    35,    36,    37,    38,    39,    40,      43,    19,    20,    -1,    -1,    -1,    -1,    -1,    36,    37,
     41,    35,    36,    37,    38,    39,    40,    41,    36,    37,      38,    39,    40,    41,    42,    43,    -1,    -1,    -1,    -1,
     38,    39,    40,    41      38,    39,    40,    41,    42,    43
 };  };
 #define YYPURE 1  #define YYPURE 1
   
Line 765  yyparse(YYPARSE_PARAM_ARG) Line 790  yyparse(YYPARSE_PARAM_ARG)
   
 #ifdef YYPURE  #ifdef YYPURE
   int yychar;    int yychar;
   YYSTYPE yylval;    YYSTYPE yylval=0; /*paf:calm down, vc7 warning level 4*/
   int yynerrs;    int yynerrs;
 #ifdef YYLSP_NEEDED  #ifdef YYLSP_NEEDED
   YYLTYPE yylloc;    YYLTYPE yylloc;
 #endif  #endif
 #endif  #endif
   
   YYSTYPE yyval;                /*  the variable used to return         */    YYSTYPE yyval=0; /*paf:calm down, vc7 warning level 4*/               /*  the variable used to return         */
                                 /*  semantic values from the action     */                                  /*  semantic values from the action     */
                                 /*  routines                            */                                  /*  routines                            */
   
Line 1032  yyreduce: Line 1057  yyreduce:
   switch (yyn) {    switch (yyn) {
   
 case 1:  case 1:
 #line 116 "compile.y"  #line 126 "compile.y"
 {  {
         Method& method=*NEW Method(POOL,           Method& method=*new Method(Method::CT_ANY,
                 PC.request->main_method_name,   
                 Method::CT_ANY,  
                 0, 0, /*min, max numbered_params_count*/                  0, 0, /*min, max numbered_params_count*/
                 0/*param_names*/, 0/*local_names*/,                   0/*param_names*/, 0/*local_names*/, 
                 yyvsp[0]/*parser_code*/, 0/*native_code*/);                  yyvsp[0]/*parser_code*/, 0/*native_code*/);
         PC.cclass->add_method(PC.request->main_method_name, method);          PC.cclass->add_method(PC.alias_method(main_method_name), method);
 ;  ;
     break;}      break;}
 case 8:  case 8:
 #line 133 "compile.y"  #line 141 "compile.y"
 {  {
         const String& command=*LA2S(yyvsp[-2]);          const String& command=*LA2S(*yyvsp[-2]);
         YYSTYPE strings_code=yyvsp[0];          YYSTYPE strings_code=yyvsp[0];
         if(strings_code->size()<1*2) {          if(strings_code->count()<1*OPERATIONS_PER_OPVALUE) {
                 strcpy(PC.error, "@");                  strcpy(PC.error, "@");
                 strcat(PC.error, command.cstr());                  strcat(PC.error, command.cstr());
                 strcat(PC.error, " is empty");                  strcat(PC.error, " is empty");
Line 1061  case 8: Line 1084  case 8:
                         strcat(PC.error, "'");                          strcat(PC.error, "'");
                         YYERROR;                          YYERROR;
                 }                  }
                 if(strings_code->size()==1*2) {                  if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) {
                         // new class' name                          // new class' name
                         const String *name=LA2S(strings_code);                          const String& name=*LA2S(*strings_code);
                         // creating the class                          // creating the class
                         PC.cclass=NEW VClass(POOL);                          VStateless_class* cclass=new VClass;
                         PC.cclass->set_name(*name);                          PC.cclass=cclass;
                           PC.cclass->set_name(name);
                         // append to request's classes                          // append to request's classes
                         PC.request->classes().put(*name, PC.cclass);                          PC.request.classes().put(name, cclass);
                 } else {                  } else {
                         strcpy(PC.error, "@"CLASS_NAME" must contain sole name");                          strcpy(PC.error, "@"CLASS_NAME" must contain only one line with class name (contains more then one)");
                         YYERROR;                          YYERROR;
                 }                  }
         } else if(command==USE_CONTROL_METHOD_NAME) {          } else if(command==USE_CONTROL_METHOD_NAME) {
                 for(int i=0; i<strings_code->size(); i+=2)                   for(size_t i=0; i<strings_code->count(); i+=OPERATIONS_PER_OPVALUE) 
                         PC.request->use_file(PC.request->main_class, *LA2S(strings_code, i));                          PC.request.use_file(PC.request.main_class, *LA2S(*strings_code, i));
         } else if(command==BASE_NAME) {          } else if(command==BASE_NAME) {
                 if(PC.cclass->base_class()) { // already changed from default?                  if(PC.cclass->base_class()) { // already changed from default?
                         strcpy(PC.error, "class already have a base '");                          strcpy(PC.error, "class already have a base '");
Line 1083  case 8: Line 1107  case 8:
                         strcat(PC.error, "'");                          strcat(PC.error, "'");
                         YYERROR;                          YYERROR;
                 }                  }
                 if(strings_code->size()==1*2) {                  if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) {
                         const String& base_name=*LA2S(strings_code);                          const String& base_name=*LA2S(*strings_code);
                         Value *vbase_class=static_cast<VClass *>(                          if(Value* base_class_value=PC.request.classes().get(base_name)) {
                                 PC.request->classes().get(base_name));                                  // @CLASS == @BASE sanity check
                         VStateless_class *base_class=vbase_class?vbase_class->get_class():0;                                  if(VStateless_class *base_class=base_class_value->get_class()) {
                         if(!base_class) {                                          if(PC.cclass==base_class) {
                                                   strcpy(PC.error, "@"CLASS_NAME" equals @"BASE_NAME);
                                                   YYERROR;
                                           }
                                           PC.cclass->get_class()->set_base(base_class);
                                   } else { // they asked to derive from a class without methods ['env' & co]
                                           strcpy(PC.error, base_name.cstr());
                                           strcat(PC.error, ": you can not derive from this class in @"BASE_NAME);
                                           YYERROR;
                                   }
                           } else {
                                 strcpy(PC.error, base_name.cstr());                                  strcpy(PC.error, base_name.cstr());
                                 strcat(PC.error, ": undefined class in @"BASE_NAME);                                  strcat(PC.error, ": undefined class in @"BASE_NAME);
                                 YYERROR;                                  YYERROR;
                         }                          }
                         // @CLASS == @BASE sanity check  
                         if(PC.cclass==base_class) {  
                                 strcpy(PC.error, "@"CLASS_NAME" equals @"BASE_NAME);  
                                 YYERROR;  
                         }  
                         PC.cclass->set_base(base_class);  
                 } else {                  } else {
                         strcpy(PC.error, "@"BASE_NAME" must contain sole name");                          strcpy(PC.error, "@"BASE_NAME" must contain sole name");
                         YYERROR;                          YYERROR;
Line 1113  case 8: Line 1141  case 8:
 ;  ;
     break;}      break;}
 case 12:  case 12:
 #line 200 "compile.y"  #line 213 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 16:  case 16:
 #line 205 "compile.y"  #line 217 "compile.y"
 {  { 
         const String *name=LA2S(yyvsp[-5]);          PC.explicit_result=false;
           const String& name=*LA2S(*yyvsp[-4]);
   
         YYSTYPE params_names_code=yyvsp[-4];          YYSTYPE params_names_code=yyvsp[-3];
         Array *params_names=0;          ArrayString* params_names=0;
         if(int size=params_names_code->size()) {          if(int size=params_names_code->count()) {
                 params_names=NEW Array(POOL);                  params_names=new ArrayString;
                 for(int i=0; i<size; i+=2)                  for(int i=0; i<size; i+=OPERATIONS_PER_OPVALUE)
                         *params_names+=LA2S(params_names_code, i);                          *params_names+=LA2S(*params_names_code, i);
         }          }
   
         YYSTYPE locals_names_code=yyvsp[-3];          YYSTYPE locals_names_code=yyvsp[-2];
         Array *locals_names=0;          ArrayString* locals_names=0;
         if(int size=locals_names_code->size()) {          if(int size=locals_names_code->count()) {
                 locals_names=NEW Array(POOL);                  locals_names=new ArrayString;
                 for(int i=0; i<size; i+=2)                  for(int i=0; i<size; i+=OPERATIONS_PER_OPVALUE) {
                         *locals_names+=LA2S(locals_names_code, i);                          const String* local_name=LA2S(*locals_names_code, i);
                           if(*local_name==RESULT_VAR_NAME)
                                   PC.explicit_result=true;
                           else
                                   *locals_names+=local_name;
                   }
         }          }
   
         Method& method=*NEW Method(POOL,           Method* method=new Method(
                 *name,                   //name, 
                 Method::CT_ANY,                  Method::CT_ANY,
                 0, 0/*min,max numbered_params_count*/,                   0, 0/*min,max numbered_params_count*/, 
                 params_names, locals_names,                   params_names, locals_names, 
                 yyvsp[0], 0);                  0/*to be filled later in next {} */, 0);
         PC.cclass->add_method(*name, method);          PC.cclass->add_method(PC.alias_method(name), *method);
           *reinterpret_cast<Method**>(&yyval)=method;
   
           // todo: check [][;result;]
   ;
       break;}
   case 17:
   #line 252 "compile.y"
   {
           // fill in the code
           reinterpret_cast<Method*>(yyvsp[-1])->parser_code=yyvsp[0];
 ;  ;
     break;}      break;}
 case 19:  case 20:
 #line 234 "compile.y"  #line 258 "compile.y"
 {yyval=yyvsp[-1];  {yyval=yyvsp[-1];
     break;}      break;}
 case 23:  case 24:
 #line 236 "compile.y"  #line 260 "compile.y"
 { yyval=yyvsp[-2]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 29:  case 30:
 #line 244 "compile.y"  #line 268 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 35:  case 36:
 #line 250 "compile.y"  #line 274 "compile.y"
 {  {
         yyval=yyvsp[0]; /* stack: resulting value */           yyval=yyvsp[0]; /* stack: resulting value */ 
         changetail_or_append(yyval,           changetail_or_append(*yyval, 
                 OP_GET_ELEMENT, false,  /*->*/OP_GET_ELEMENT__WRITE,                  OP_GET_ELEMENT, false,  /*->*/OP_GET_ELEMENT__WRITE,
                 /*or */OP_WRITE_VALUE                  /*or */OP_WRITE_VALUE
                 ); /* value=pop; wcontext.write(value) */                  ); /* value=pop; wcontext.write(value) */
 ;  ;
     break;}      break;}
 case 36:  case 37:
 #line 257 "compile.y"  #line 281 "compile.y"
 { yyval=yyvsp[0] ;  { yyval=yyvsp[0] ;
     break;}      break;}
 case 39:  case 40:
 #line 259 "compile.y"  #line 283 "compile.y"
 { yyval=yyvsp[-1] ;  { yyval=yyvsp[-1] ;
     break;}      break;}
 case 42:  case 43:
 #line 263 "compile.y"  #line 287 "compile.y"
 {  {
         yyval=N(POOL);           yyval=N(); 
         Array *diving_code=yyvsp[0];          ArrayOperation* diving_code=yyvsp[0];
         const String *first_name=LA2S(diving_code);          const String* first_name=LA2S(*diving_code);
         // self.xxx... -> xxx...          // self.xxx... -> xxx...
         // OP_VALUE+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+...          // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+...
         if(first_name && *first_name==SELF_ELEMENT_NAME) {          if(first_name && *first_name==SELF_ELEMENT_NAME) {
                 O(yyval, OP_WITH_SELF); /* stack: starting context */                  O(*yyval, OP_WITH_SELF); /* stack: starting context */
                 P(yyval, diving_code,                   P(*yyval, *diving_code, 
                         /* skip over... */                          /* skip over... */
                         diving_code->size()>=3?3/*OP_VALUE+string+OP_GET_ELEMENTx*/:2/*OP_+string*/);                          diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/);
         } else {          } else {
                 O(yyval, OP_WITH_READ); /* stack: starting context */                  O(*yyval, OP_WITH_READ); /* stack: starting context */
   
                 // ^if ELEMENT -> ^if ELEMENT_OR_OPERATOR                  // ^if ELEMENT -> ^if ELEMENT_OR_OPERATOR
                 // OP_VALUE+string+OP_GET_ELEMENT. -> OP_VALUE+string+OP_GET_ELEMENT_OR_OPERATOR.                  // OP_VALUE+origin+string+OP_GET_ELEMENT. -> OP_VALUE+origin+string+OP_GET_ELEMENT_OR_OPERATOR.
                 if(PC.in_call_value && diving_code->size()==3)                  if(PC.in_call_value && diving_code->count()==4)
                         diving_code->put_int(2, OP_GET_ELEMENT_OR_OPERATOR);                          diving_code->put(4-1, OP_GET_ELEMENT_OR_OPERATOR);
                 P(yyval, diving_code);                  P(*yyval, *diving_code);
         }          }
         /* diving code; stack: current context */          /* diving code; stack: current context */
 ;  ;
     break;}      break;}
 case 43:  case 44:
 #line 285 "compile.y"  #line 309 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}  
 case 45:  
 #line 286 "compile.y"  
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  
     break;}      break;}
 case 46:  case 46:
 #line 290 "compile.y"  #line 310 "compile.y"
   { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
       break;}
   case 47:
   #line 314 "compile.y"
 {  {
         yyval=yyvsp[-1]; /* stack: context,name */          yyval=yyvsp[-1]; /* stack: context,name */
         P(yyval, yyvsp[0]); /* stack: context,name,constructor_value */          P(*yyval, *yyvsp[0]); /* stack: context,name,constructor_value */
 ;  ;
     break;}      break;}
 case 50:  case 51:
 #line 298 "compile.y"  #line 322 "compile.y"
 {  {
         yyval=N(POOL);          yyval=N();
         Array *diving_code=yyvsp[0];          ArrayOperation* diving_code=yyvsp[0];
         const String *first_name=LA2S(diving_code);          const String* first_name=LA2S(*diving_code);
         // $self.xxx... -> $xxx...          // $self.xxx... -> $xxx...
         // OP_VALUE+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+...          // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+...
         if(first_name && *first_name==SELF_ELEMENT_NAME) {          if(first_name && *first_name==SELF_ELEMENT_NAME) {
                 O(yyval, OP_WITH_SELF); /* stack: starting context */                  O(*yyval, OP_WITH_SELF); /* stack: starting context */
                 P(yyval, diving_code,                   P(*yyval, *diving_code, 
                         /* skip over... */                          /* skip over... */
                         diving_code->size()>=3?3/*OP_VALUE+string+OP_GET_ELEMENTx*/:2/*OP_+string*/);                          diving_code->count()>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP_+origin+string*/);
         } else {          } else {
                 O(yyval, OP_WITH_ROOT); /* stack: starting context */                  O(*yyval, OP_WITH_ROOT); /* stack: starting context */
                 P(yyval, diving_code);                  P(*yyval, *diving_code);
         }          }
         /* diving code; stack: current context */          /* diving code; stack: current context */
 ;  ;
     break;}      break;}
 case 51:  case 52:
 #line 315 "compile.y"  #line 339 "compile.y"
 {  {
         yyval=N(POOL);           yyval=N(); 
         O(yyval, OP_WITH_WRITE); /* stack: starting context */          O(*yyval, OP_WITH_WRITE); /* stack: starting context */
         P(yyval, yyvsp[0]); /* diving code; stack: context,name */          P(*yyval, *yyvsp[0]); /* diving code; stack: context,name */
 ;  ;
     break;}      break;}
 case 52:  case 53:
 #line 320 "compile.y"  #line 344 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
       break;}
   case 57:
   #line 351 "compile.y"
   {
           // allow $result_or_other_variable[ letters here any time ]
           *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
   ;
       break;}
   case 58:
   #line 354 "compile.y"
   {
           PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
   ;
     break;}      break;}
 case 56:  case 59:
 #line 327 "compile.y"  #line 356 "compile.y"
 {  {
         // stack: context, name          // stack: context, name
         yyval=yyvsp[-1]; // stack: context, name, value          yyval=yyvsp[-2]; // stack: context, name, value
         O(yyval, OP_CONSTRUCT_VALUE); /* value=pop; name=pop; context=pop; construct(context,name,value) */          O(*yyval, OP_CONSTRUCT_VALUE); /* value=pop; name=pop; context=pop; construct(context,name,value) */
 ;  ;
     break;}      break;}
 case 57:  case 60:
 #line 333 "compile.y"  #line 362 "compile.y"
 {   { 
         yyval=N(POOL);           yyval=N(); 
         O(yyval, OP_PREPARE_TO_EXPRESSION);          O(*yyval, OP_PREPARE_TO_EXPRESSION);
         // stack: context, name          // stack: context, name
         P(yyval, yyvsp[-1]); // stack: context, name, value          P(*yyval, *yyvsp[-1]); // stack: context, name, value
         O(yyval, OP_CONSTRUCT_EXPR); /* value=pop->as_expr_result; name=pop; context=pop; construct(context,name,value) */          O(*yyval, OP_CONSTRUCT_EXPR); /* value=pop->as_expr_result; name=pop; context=pop; construct(context,name,value) */
 ;  ;
     break;}      break;}
 case 58:  case 61:
 #line 341 "compile.y"  #line 370 "compile.y"
 {  {
         // stack: context, name          // stack: context, name
         yyval=N(POOL);           yyval=N(); 
         OA(yyval, OP_CURLY_CODE__CONSTRUCT, yyvsp[-1]); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */          OA(*yyval, OP_CURLY_CODE__CONSTRUCT, yyvsp[-1]); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */
 ;  ;
     break;}      break;}
 case 62:  case 65:
 #line 352 "compile.y"  #line 381 "compile.y"
 {  {
         yyval=N(POOL);           yyval=N(); 
         OA(yyval, OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */          OA(*yyval, OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */
         /* some code that writes to that context */          /* some code that writes to that context */
         /* context=pop; stack: context.value() */          /* context=pop; stack: context.value() */
 ;  ;
     break;}      break;}
 case 65:  case 68:
 #line 359 "compile.y"  #line 388 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 66:  case 69:
 #line 363 "compile.y"  #line 392 "compile.y"
 {  {
         yyval=yyvsp[0]; /* stack: value */          yyval=yyvsp[0]; /* stack: value */
         changetail_or_append(yyval,           changetail_or_append(*yyval, 
                 OP_CALL, true,  /*->*/ OP_CALL__WRITE,                  OP_CALL, true,  /*->*/ OP_CALL__WRITE,
                 /*or */OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */                  /*or */OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */
 ;  ;
     break;}      break;}
 case 67:  case 70:
 #line 369 "compile.y"  #line 398 "compile.y"
 {   { 
                                         PC.in_call_value=true;                                           PC.in_call_value=true; 
                         ;                          ;
     break;}      break;}
 case 68:  case 71:
 #line 372 "compile.y"  #line 401 "compile.y"
 {  {
                                 PC.in_call_value=false;                                  PC.in_call_value=false;
                         ;                          ;
     break;}      break;}
 case 69:  case 72:
 #line 375 "compile.y"  #line 404 "compile.y"
 { /* ^field.$method{vasya} */  { /* ^field.$method{vasya} */
         yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */          yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */
   
         YYSTYPE params_code=yyvsp[-1];          YYSTYPE params_code=yyvsp[-1];
         if(params_code->size()==3) { // probably [] case. [OP_VALUE + Void + STORE_PARAM]          if(params_code->count()==4) { // probably [] case. [OP_VALUE+origin+Void+STORE_PARAM]
                 if(Value *value=LA2V(params_code)) // it is OP_VALUE + value?                  if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value?
                         if(!value->is_defined()) // value is VVoid?                          if(!value->is_defined()) // value is VVoid?
                                 params_code=0; // ^zzz[] case. don't append lone empty param.                                  params_code=0; // ^zzz[] case. don't append lone empty param.
         }          }
         /* stack: context, method_junction */          /* stack: context, method_junction */
         OA(yyval, OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value          OA(*yyval, OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value
 ;  ;
     break;}      break;}
 case 72:  case 75:
 #line 390 "compile.y"  #line 419 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 76:  case 79:
 #line 396 "compile.y"  #line 425 "compile.y"
 {yyval=yyvsp[-1];  {
           // allow ^call[ letters here any time ]
           *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
   ;
       break;}
   case 80:
   #line 428 "compile.y"
   {
           PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
   ;
     break;}      break;}
 case 77:  case 81:
 #line 397 "compile.y"  #line 430 "compile.y"
   {yyval=yyvsp[-2];
       break;}
   case 82:
   #line 431 "compile.y"
 {yyval=yyvsp[-1];  {yyval=yyvsp[-1];
     break;}      break;}
 case 78:  case 83:
 #line 398 "compile.y"  #line 432 "compile.y"
 {yyval=yyvsp[-1];  {yyval=yyvsp[-1];
     break;}      break;}
 case 80:  case 85:
 #line 401 "compile.y"  #line 435 "compile.y"
 { yyval=yyvsp[-2]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 82:  case 87:
 #line 405 "compile.y"  #line 439 "compile.y"
 { yyval=yyvsp[-2]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 84:  case 89:
 #line 409 "compile.y"  #line 443 "compile.y"
 { yyval=yyvsp[-2]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 85:  case 90:
 #line 411 "compile.y"  #line 445 "compile.y"
 {  {
         yyval=yyvsp[0];          yyval=yyvsp[0];
         O(yyval, OP_STORE_PARAM);          O(*yyval, OP_STORE_PARAM);
 ;  
     break;}  
 case 86:  
 #line 415 "compile.y"  
 {  
         yyval=N(POOL);   
         OA(yyval, OP_EXPR_CODE__STORE_PARAM, yyvsp[0]);  
 ;  ;
     break;}      break;}
 case 87:  case 91:
 #line 419 "compile.y"  #line 449 "compile.y"
 {  {
         yyval=N(POOL);           YYSTYPE expr_code=yyvsp[0];
         OA(yyval, OP_CURLY_CODE__STORE_PARAM, yyvsp[0]);          if(expr_code->count()==3
                   && (*expr_code)[0].code==OP_VALUE) { // optimizing (double/bool/incidently 'string' too) case. [OP_VALUE+origin+Double]
                   yyval=expr_code; 
                   O(*yyval, OP_STORE_PARAM); // no evaluating
           } else {
                   ArrayOperation* code=N();
                   O(*code, OP_PREPARE_TO_EXPRESSION);
                   P(*code, *expr_code);
                   O(*code, OP_WRITE_EXPR_RESULT);
                   yyval=N(); 
                   OA(*yyval, OP_EXPR_CODE__STORE_PARAM, code);
           }
 ;  ;
     break;}      break;}
 case 91:  case 92:
 #line 428 "compile.y"  #line 464 "compile.y"
 {  {
         yyval=N(POOL);           yyval=N(); 
         O(yyval, OP_PREPARE_TO_EXPRESSION);          OA(*yyval, OP_CURLY_CODE__STORE_PARAM, yyvsp[0]);
         P(yyval, yyvsp[0]);  
         O(yyval, OP_WRITE_EXPR_RESULT);  
 ;  ;
     break;}      break;}
 case 93:  case 97:
 #line 437 "compile.y"  #line 476 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 95:  case 99:
 #line 439 "compile.y"  #line 478 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 97:  case 101:
 #line 441 "compile.y"  #line 480 "compile.y"
 {  {
         // we know that name_advance1 not called from ^xxx context          // we know that name_advance1 not called from ^xxx context
         // so we'll not check for operator call possibility as we do in name_advance2          // so we'll not check for operator call possibility as we do in name_advance2
   
         /* stack: context */          /* stack: context */
         yyval=yyvsp[0]; /* stack: context,name */          yyval=yyvsp[0]; /* stack: context,name */
         O(yyval, OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */          O(*yyval, OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */
 ;  ;
     break;}      break;}
 case 98:  case 102:
 #line 449 "compile.y"  #line 488 "compile.y"
 {  {
         /* stack: context */          /* stack: context */
         yyval=yyvsp[0]; /* stack: context,name */          yyval=yyvsp[0]; /* stack: context,name */
         O(yyval, OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */          O(*yyval, OP_GET_ELEMENT); /* name=pop; context=pop; stack: context.get_element(name) */
 ;  ;
     break;}      break;}
 case 104:  case 108:
 #line 462 "compile.y"  #line 501 "compile.y"
 {  {
         yyval=yyvsp[0];          yyval=yyvsp[0];
         O(yyval, OP_GET_ELEMENT);          O(*yyval, OP_GET_ELEMENT);
 ;  ;
     break;}      break;}
 case 105:  case 109:
 #line 466 "compile.y"  #line 505 "compile.y"
 {  {
         Array *code;          ArrayOperation* code;
         {          {
                 change_string_literal_to_write_string_literal(code=yyvsp[-1]);                  change_string_literal_to_write_string_literal(*(code=yyvsp[-1]));
                 P(code, yyvsp[0]);                  P(*code, *yyvsp[0]);
         }          }
         yyval=N(POOL);           yyval=N(); 
         OA(yyval, OP_STRING_POOL, code);          OA(*yyval, OP_STRING_POOL, code);
 ;  ;
     break;}      break;}
 case 106:  case 110:
 #line 475 "compile.y"  #line 514 "compile.y"
 {  {
         yyval=N(POOL);           // allow $result_or_other_variable[ letters here any time ]
         OA(yyval, OP_OBJECT_POOL, yyvsp[-1]); /* stack: empty write context */          *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
   ;
       break;}
   case 111:
   #line 517 "compile.y"
   {
           PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
   ;
       break;}
   case 112:
   #line 519 "compile.y"
   {
           yyval=N(); 
           OA(*yyval, OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */
         /* some code that writes to that context */          /* some code that writes to that context */
         /* context=pop; stack: context.value() */          /* context=pop; stack: context.value() */
 ;  ;
     break;}      break;}
 case 107:  case 113:
 #line 481 "compile.y"  #line 525 "compile.y"
 {  {
         yyval=N(POOL);           yyval=N(); 
         O(yyval, OP_WITH_READ);          O(*yyval, OP_WITH_READ);
         P(yyval, yyvsp[0]);          P(*yyval, *yyvsp[0]);
 ;  ;
     break;}      break;}
 case 109:  case 115:
 #line 486 "compile.y"  #line 530 "compile.y"
 { yyval=yyvsp[-1]; P(yyval, yyvsp[0]) ;  { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;
     break;}      break;}
 case 110:  case 116:
 #line 487 "compile.y"  #line 531 "compile.y"
 {  {
         yyval=yyvsp[0];          yyval=yyvsp[0];
         O(yyval, OP_GET_ELEMENT__WRITE);          O(*yyval, OP_GET_ELEMENT__WRITE);
 ;  ;
     break;}      break;}
 case 113:  case 119:
 #line 496 "compile.y"  #line 540 "compile.y"
 {  {
         yyval=yyvsp[-1]; // stack: class name string          yyval=yyvsp[-1]; // stack: class name string
         if(*LA2S(yyval) == BASE_NAME) { // pseude BASE class          if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class
                 if(VStateless_class *base=PC.cclass->base_class()) {                  if(VStateless_class* base=PC.cclass->base_class()) {
                         change_string_literal_value(yyval, base->name());                          change_string_literal_value(*yyval, base->name());
                 } else {                  } else {
                         strcpy(PC.error, "no base class declared");                          strcpy(PC.error, "no base class declared");
                         YYERROR;                          YYERROR;
                 }                  }
         }          }
         O(yyval, OP_GET_CLASS);          O(*yyval, OP_GET_CLASS);
 ;  ;
     break;}      break;}
 case 114:  case 120:
 #line 508 "compile.y"  #line 552 "compile.y"
 {  {
         yyval=yyvsp[-1];          yyval=yyvsp[-1];
         if(!PC.in_call_value) {          if(!PC.in_call_value) {
                 strcpy(PC.error, ":: not allowed here");                  strcpy(PC.error, ":: not allowed here");
                 YYERROR;                  YYERROR;
         }          }
         O(yyval, OP_PREPARE_TO_CONSTRUCT_OBJECT);          O(*yyval, OP_PREPARE_TO_CONSTRUCT_OBJECT);
 ;  ;
     break;}      break;}
 case 115:  
 #line 520 "compile.y"  
 {  
         // see OP_PREPARE_TO_EXPRESSION!!  
         if((yyval=yyvsp[0])->size()==2) // only one string literal in there?  
                 change_string_literal_to_double_literal(yyval); // make that string literal Double  
 ;  
     break;}  
 case 119:  
 #line 529 "compile.y"  
 { yyval = yyvsp[-1]; ;  
     break;}  
 case 120:  
 #line 530 "compile.y"  
 { yyval = yyvsp[-1]; ;  
     break;}  
 case 121:  
 #line 531 "compile.y"  
 { yyval = yyvsp[-1]; ;  
     break;}  
 case 122:  
 #line 533 "compile.y"  
 { yyval=yyvsp[0];  O(yyval, OP_NEG) ;  
     break;}  
 case 123:  
 #line 534 "compile.y"  
 { yyval=yyvsp[0] ;  
     break;}  
 case 124:  
 #line 535 "compile.y"  
 { yyval=yyvsp[0];        O(yyval, OP_INV) ;  
     break;}  
 case 125:  
 #line 536 "compile.y"  
 { yyval=yyvsp[0];  O(yyval, OP_NOT) ;  
     break;}  
 case 126:  
 #line 537 "compile.y"  
 { yyval=yyvsp[0];  O(yyval, OP_DEF) ;  
     break;}  
 case 127:  case 127:
 #line 538 "compile.y"  #line 571 "compile.y"
 { yyval=yyvsp[0];  O(yyval, OP_IN) ;  { yyval = yyvsp[-1] ;
     break;}      break;}
 case 128:  case 128:
 #line 539 "compile.y"  #line 572 "compile.y"
 { yyval=yyvsp[0];  O(yyval, OP_FEXISTS) ;  { yyval = yyvsp[-1] ;
     break;}      break;}
 case 129:  case 129:
 #line 540 "compile.y"  #line 573 "compile.y"
 { yyval=yyvsp[0];  O(yyval, OP_DEXISTS) ;  { yyval = yyvsp[-1]; ;
     break;}      break;}
 case 130:  case 130:
 #line 542 "compile.y"  #line 575 "compile.y"
 {       yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_SUB) ;  { yyval=yyvsp[0];  O(*yyval, OP_NEG) ;
     break;}      break;}
 case 131:  case 131:
 #line 543 "compile.y"  #line 576 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_ADD) ;  { yyval=yyvsp[0] ;
     break;}      break;}
 case 132:  case 132:
 #line 544 "compile.y"  #line 577 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_MUL) ;  { yyval=yyvsp[0];        O(*yyval, OP_INV) ;
     break;}      break;}
 case 133:  case 133:
 #line 545 "compile.y"  #line 578 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_DIV) ;  { yyval=yyvsp[0];  O(*yyval, OP_NOT) ;
     break;}      break;}
 case 134:  case 134:
 #line 546 "compile.y"  #line 579 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_MOD) ;  { yyval=yyvsp[0];  O(*yyval, OP_DEF) ;
     break;}      break;}
 case 135:  case 135:
 #line 547 "compile.y"  #line 580 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_INTDIV) ;  { yyval=yyvsp[0];  O(*yyval, OP_IN) ;
     break;}      break;}
 case 136:  case 136:
 #line 548 "compile.y"  #line 581 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_BIN_SL) ;  { yyval=yyvsp[0];  O(*yyval, OP_FEXISTS) ;
     break;}      break;}
 case 137:  case 137:
 #line 549 "compile.y"  #line 582 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_BIN_SR) ;  { yyval=yyvsp[0];  O(*yyval, OP_DEXISTS) ;
     break;}      break;}
 case 138:  case 138:
 #line 550 "compile.y"  #line 584 "compile.y"
 { yyval=yyvsp[-2];      P(yyval, yyvsp[0]);  O(yyval, OP_BIN_AND) ;  {       yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_SUB) ;
     break;}      break;}
 case 139:  case 139:
 #line 551 "compile.y"  #line 585 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_BIN_OR) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_ADD) ;
     break;}      break;}
 case 140:  case 140:
 #line 552 "compile.y"  #line 586 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_BIN_XOR) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_MUL) ;
     break;}      break;}
 case 141:  case 141:
 #line 553 "compile.y"  #line 587 "compile.y"
 { yyval=yyvsp[-2];  OA(yyval, OP_NESTED_CODE, yyvsp[0]);  O(yyval, OP_LOG_AND) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_DIV) ;
     break;}      break;}
 case 142:  case 142:
 #line 554 "compile.y"  #line 588 "compile.y"
 { yyval=yyvsp[-2];  OA(yyval, OP_NESTED_CODE, yyvsp[0]);  O(yyval, OP_LOG_OR) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_MOD) ;
     break;}      break;}
 case 143:  case 143:
 #line 555 "compile.y"  #line 589 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_LOG_XOR) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_INTDIV) ;
     break;}      break;}
 case 144:  case 144:
 #line 556 "compile.y"  #line 590 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_LT) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_BIN_SL) ;
     break;}      break;}
 case 145:  case 145:
 #line 557 "compile.y"  #line 591 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_GT) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_BIN_SR) ;
     break;}      break;}
 case 146:  case 146:
 #line 558 "compile.y"  #line 592 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_LE) ;  { yyval=yyvsp[-2];      P(*yyval, *yyvsp[0]);  O(*yyval, OP_BIN_AND) ;
     break;}      break;}
 case 147:  case 147:
 #line 559 "compile.y"  #line 593 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_GE) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_BIN_OR) ;
     break;}      break;}
 case 148:  case 148:
 #line 560 "compile.y"  #line 594 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_EQ) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_BIN_XOR) ;
     break;}      break;}
 case 149:  case 149:
 #line 561 "compile.y"  #line 595 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_NUM_NE) ;  { yyval=yyvsp[-2];  OA(*yyval, OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP_LOG_AND) ;
     break;}      break;}
 case 150:  case 150:
 #line 562 "compile.y"  #line 596 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_LT) ;  { yyval=yyvsp[-2];  OA(*yyval, OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP_LOG_OR) ;
     break;}      break;}
 case 151:  case 151:
 #line 563 "compile.y"  #line 597 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_GT) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_LOG_XOR) ;
     break;}      break;}
 case 152:  case 152:
 #line 564 "compile.y"  #line 598 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_LE) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_LT) ;
     break;}      break;}
 case 153:  case 153:
 #line 565 "compile.y"  #line 599 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_GE) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_GT) ;
     break;}      break;}
 case 154:  case 154:
 #line 566 "compile.y"  #line 600 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_EQ) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_LE) ;
     break;}      break;}
 case 155:  case 155:
 #line 567 "compile.y"  #line 601 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_STR_NE) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_GE) ;
     break;}      break;}
 case 156:  case 156:
 #line 568 "compile.y"  #line 602 "compile.y"
 { yyval=yyvsp[-2];  P(yyval, yyvsp[0]);  O(yyval, OP_IS) ;  { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_EQ) ;
     break;}      break;}
 case 157:  case 157:
 #line 571 "compile.y"  #line 603 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_NUM_NE) ;
       break;}
   case 158:
   #line 604 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_LT) ;
       break;}
   case 159:
   #line 605 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_GT) ;
       break;}
   case 160:
   #line 606 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_LE) ;
       break;}
   case 161:
   #line 607 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_GE) ;
       break;}
   case 162:
   #line 608 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_EQ) ;
       break;}
   case 163:
   #line 609 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_STR_NE) ;
       break;}
   case 164:
   #line 610 "compile.y"
   { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP_IS) ;
       break;}
   case 165:
   #line 613 "compile.y"
 {  {
         yyval=N(POOL);          // optimized from OP_STRING->OP_VALUE for doubles
         OA(yyval, OP_STRING_POOL, yyvsp[0]); /* stack: empty write context */          maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0]));
   ;
       break;}
   case 166:
   #line 618 "compile.y"
   {
           yyval=N();
           OA(*yyval, OP_STRING_POOL, yyvsp[0]); /* stack: empty write context */
         /* some code that writes to that context */          /* some code that writes to that context */
         /* context=pop; stack: context.get_string() */          /* context=pop; stack: context.get_string() */
 ;  ;
     break;}      break;}
 case 158:  case 167:
 #line 580 "compile.y"  #line 627 "compile.y"
 {  {
         // optimized from OP_STRING+OP_WRITE_VALUE to OP_STRING__WRITE          // optimized from OP_STRING+OP_WRITE_VALUE to OP_STRING__WRITE
         change_string_literal_to_write_string_literal(yyval=yyvsp[0])          change_string_literal_to_write_string_literal(*(yyval=yyvsp[0]))
 ;  ;
     break;}      break;}
 case 159:  case 168:
 #line 585 "compile.y"  #line 632 "compile.y"
 { yyval=VL(NEW VVoid(POOL)) ;  { yyval=VL(/*we know that we will not change it*/const_cast<VVoid*>(&vvoid), 0, 0, 0) ;
     break;}      break;}
 case 160:  case 169:
 #line 586 "compile.y"  #line 633 "compile.y"
 { yyval=N(POOL) ;  { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vtrue), 0, 0, 0) ;
       break;}
   case 170:
   #line 634 "compile.y"
   { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vfalse), 0, 0, 0) ;
       break;}
   case 171:
   #line 636 "compile.y"
   { yyval=N() ;
     break;}      break;}
 }  }
    /* the action file gets copied in in place of this dollarsign */     /* the action file gets copied in in place of this dollarsign */
Line 1887  yyerrhandle: Line 1979  yyerrhandle:
     }      }
   return 1;    return 1;
 }  }
 #line 588 "compile.y"  #line 638 "compile.y"
   
 #endif  #endif
   
Line 1907  yyerrhandle: Line 1999  yyerrhandle:
                 4:[^({]=pop                  4:[^({]=pop
 */  */
   
 static int yylex(YYSTYPE *lvalp, void *pc) {  inline void ungetc(Parse_control& pc, uint last_line_end_col) {
         #define lexical_brackets_nestage PC.brackets_nestages[PC.ls_sp]          pc.source--;
           if(pc.pos.col==0) {
                   --pc.pos.line; pc.pos.col=last_line_end_col;
           } else
                   --pc.pos.col;
   
   }
   static int yylex(YYSTYPE *lvalp, void *apc) {
           register Parse_control& pc=*static_cast<Parse_control*>(apc);
   
           #define lexical_brackets_nestage pc.brackets_nestages[pc.ls_sp]
         #define RC {result=c; goto break2; }          #define RC {result=c; goto break2; }
   
     register int c;          register int c;
     int result;          int result;
                   
         if(PC.pending_state) {          if(pc.pending_state) {
                 result=PC.pending_state;                  result=pc.pending_state;
                 PC.pending_state=0;                  pc.pending_state=0;
                 return result;                  return result;
         }          }
                   
         const char *begin=PC.source;          const char *begin=pc.source;
           Pos begin_pos=pc.pos;
         const char *end;          const char *end;
         int begin_line=PC.line;  
         int skip_analized=0;          int skip_analized=0;
         while(true) {          while(true) {
                 c=*(end=(PC.source++));                  c=*(end=(pc.source++));
 //              fprintf(stderr, "\nchar: %c %02X; nestage: %d, sp=%d", c, c, lexical_brackets_nestage, PC.sp);  //              fprintf(stderr, "\nchar: %c %02X; nestage: %d, sp=%d", c, c, lexical_brackets_nestage, pc.sp);
   
                 if(c=='\n') {                  if(c=='\n')
                         PC.line++;                          pc.pos_next_line();
                         PC.col=0;                  else
                 } else                          pc.pos_next_c(c);
                         PC.col++;  //              fprintf(stderr, "\nchar: %c file(%d:%d)", c, pc.pos.line, pc.pos.col);
   
                 if(c=='@' && PC.col==0+1) {                  if(pc.pos.col==0+1 && c=='@') {
                         if(PC.ls==LS_DEF_SPECIAL_BODY) {                          if(pc.ls==LS_DEF_SPECIAL_BODY) {
                                 // @SPECIAL                                  // @SPECIAL
                                 // ...                                  // ...
                                 // @<here =                                   // @<here = 
                                 pop_LS(PC); // exiting from LS_DEF_SPECIAL_BODY state                                  pop_LS(pc); // exiting from LS_DEF_SPECIAL_BODY state
                         } // continuing checks                          } // continuing checks
                         if(PC.ls==LS_USER) {                          if(pc.ls==LS_USER) {
                                 push_LS(PC, LS_DEF_NAME);                                  push_LS(pc, LS_DEF_NAME);
                                 RC;                                  RC;
                         } else // @ in first column inside some code [when could that be?]                          } else // @ in first column inside some code [when could that be?]
                                 result=BAD_METHOD_DECL_START;                                  result=BAD_METHOD_DECL_START;
                         goto break2;                          goto break2;
                 } else if(c=='^')                  }
                         switch(PC.ls) {                  if(c=='^') {
                           if(pc.ls==LS_METHOD_AFTER) {
                                   // handle after-method situation
                                   pop_LS(pc);
                                   result=EON;
                                   skip_analized=-1; // return to punctuation afterwards to assure it's literality
                                   goto break2;
                           }
                           switch(pc.ls) {
 case LS_EXPRESSION_VAR_NAME_WITH_COLON:  case LS_EXPRESSION_VAR_NAME_WITH_COLON:
 case LS_EXPRESSION_VAR_NAME_WITHOUT_COLON:  case LS_EXPRESSION_VAR_NAME_WITHOUT_COLON:
 case LS_VAR_NAME_SIMPLE_WITH_COLON:  case LS_VAR_NAME_SIMPLE_WITH_COLON:
Line 1960  case LS_DEF_COMMENT: Line 2070  case LS_DEF_COMMENT:
         // no literals in names, please          // no literals in names, please
         break;          break;
 default:  default:
                         switch(*PC.source) {                          switch(*pc.source) {
                         // ^escaping some punctuators                          // ^escaping some punctuators
                         case '^': case '$': case ';':                          case '^': case '$': case ';':
                         case '(': case ')':                          case '(': case ')':
Line 1968  default: Line 2078  default:
                         case '{': case '}':                          case '{': case '}':
                         case '"':  case ':':                          case '"':  case ':':
                                 if(end!=begin) {                                  if(end!=begin) {
                                           if(!pc.string_start)
                                                   pc.string_start=begin_pos;
                                         // append piece till ^                                          // append piece till ^
                                         PC.string->APPEND_CLEAN(begin, end-begin, PC.file, begin_line);                                          pc.string.append_strdup_know_length(begin, end-begin);
                                 }                                  }
                                 // reset piece 'begin' position & line                                  // reset piece 'begin' position & line
                                 end=begin=PC.source; // ^                                  begin=pc.source; // ->punctuation
                                 begin_line=PC.line;                                  begin_pos=pc.pos;
                                 if(PC.ls==LS_METHOD_AFTER) {                                  // skip over _ after ^
                                         pop_LS(PC);                                  pc.source++;  pc.pos.col++;
                                         result=EON;                                  // skip analysis = forced literal
                                         skip_analized=-1; // return to ^ afterwards to assure it's literality                                  continue;
                                         goto break2;  
                                 } else {  
                                         // skip over _ after ^  
                                         PC.source++;  PC.col++;  
                                         // skip analysis = forced literal  
                                         continue;  
                                 }  
   
                         // converting ^#HH into char(hex(HH))                          // converting ^#HH into char(hex(HH))
                         case '#':                          case '#':
                                 if(end!=begin) {                                  if(end!=begin) {
                                           if(!pc.string_start)
                                                   pc.string_start=begin_pos;
                                         // append piece till ^                                          // append piece till ^
                                         PC.string->APPEND_CLEAN(begin, end-begin, PC.file, begin_line);                                          pc.string.append_strdup_know_length(begin, end-begin);
                                 }                                  }
                                 // #HH ?                                  // #HH ?
                                 if(PC.source[0]=='#' && PC.source[1] && PC.source[2]) {                                  if(pc.source[0]=='#' && pc.source[1] && pc.source[2]) {
                                         char *hex=(char *)POOL.malloc(1);                                          char c=
                                         hex[0]=                                                  hex_value[(unsigned char)pc.source[1]]*0x10+
                                                 hex_value[(unsigned char)PC.source[1]]*0x10+                                                  hex_value[(unsigned char)pc.source[2]];
                                                 hex_value[(unsigned char)PC.source[2]];                                          if(c==0) {
                                         if(hex[0]==0) {  
                                                 result=BAD_HEX_LITERAL;                                                  result=BAD_HEX_LITERAL;
                                                 goto break2; // wrong hex value[no ^#00 chars allowed]: bail out                                                  goto break2; // wrong hex value[no ^#00 chars allowed]: bail out
                                         }                                          }
                                         // append char(hex(HH))                                          // append char(hex(HH))
                                         PC.string->APPEND_CLEAN(hex, 1, PC.file, begin_line);                                          pc.string.append(c);
                                         // skip over ^#HH                                          // skip over ^#HH
                                         PC.source+=3;                                          pc.source+=3;
                                         PC.col+=3;                                          pc.pos.col+=3;
                                         // reset piece 'begin' position & line                                          // reset piece 'begin' position & line
                                         begin=PC.source; // ^                                          begin=pc.source; // ->after ^#HH
                                         begin_line=PC.line;                                          begin_pos=pc.pos;
                                           // skip analysis = forced literal
                                         continue;                                          continue;
                                 }                                  }
                                 break;                                  break;
                         }                          }
                         break;                          break;
                           }
                 }                  }
                 // #comment  start skipping                  // #comment  start skipping
                 if(c=='#' && PC.col==1) {                  if(c=='#' && pc.pos.col==1) {
                         if(end!=begin) {                          if(end!=begin) {
                                   if(!pc.string_start)
                                           pc.string_start=begin_pos;
                                 // append piece till #                                  // append piece till #
                                 PC.string->APPEND_CLEAN(begin, end-begin, PC.file, begin_line);                                  pc.string.append_strdup_know_length(begin, end-begin);
                         }                          }
                         // fall into COMMENT lexical state [wait for \n]                          // fall into COMMENT lexical state [wait for \n]
                         push_LS(PC, LS_USER_COMMENT);                          push_LS(pc, LS_USER_COMMENT);
                         continue;                          continue;
                 }                  }
                 switch(PC.ls) {                  switch(pc.ls) {
   
                 // USER'S = NOT OURS                  // USER'S = NOT OURS
                 case LS_USER:                  case LS_USER:
         case LS_NAME_SQUARE_PART: // name.[here].xxx                  case LS_NAME_SQUARE_PART: // name.[here].xxx
                         if(PC.trim_bof)                          if(pc.trim_bof)
                                 switch(c) {                                  switch(c) {
                                 case '\n': case ' ': case '\t':                                  case '\n': case ' ': case '\t':
                                         begin=PC.source;                                          begin=pc.source;
                                         begin_line=PC.line;                                          begin_pos=pc.pos;
                                         continue; // skip it                                          continue; // skip it
                                 default:                                  default:
                                         PC.trim_bof=false;                                          pc.trim_bof=false;
                                 }                                  }
                         switch(c) {                          switch(c) {
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case ']':                          case ']':
                                 if(PC.ls==LS_NAME_SQUARE_PART)                                  if(pc.ls==LS_NAME_SQUARE_PART)
                                         if(--lexical_brackets_nestage==0) {// $name.[co<]?>de<]?>                                          if(--lexical_brackets_nestage==0) {// $name.[co<]?>de<]?>
                                                 pop_LS(PC); // $name.[co<]>de<]!>                                                  pop_LS(pc); // $name.[co<]>de<]!>
                                                 RC;                                                  RC;
                                         }                                          }
                                 break;                                  break;
                         case '[': // $name.[co<[>de]                          case '[': // $name.[co<[>de]
                                 if(PC.ls==LS_NAME_SQUARE_PART)                                  if(pc.ls==LS_NAME_SQUARE_PART)
                                         lexical_brackets_nestage++;                                          lexical_brackets_nestage++;
                                 break;                                  break;
                         }                          }
                           if(pc.explicit_result && c)
                                   switch(c) {
                                   case '\n': case ' ': case '\t':
                                           begin=pc.source;
                                           begin_pos=pc.pos;
                                           continue; // skip it
                                   default:
                                           result=BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE;
                                           goto break2;
                                   }
                         break;                          break;
                                                   
                 // #COMMENT                  // #COMMENT
                 case LS_USER_COMMENT:                  case LS_USER_COMMENT:
                         if(c=='\n') {                          if(c=='\n') {
                                 // skip comment                                  // skip comment
                                 begin=PC.source;                                  begin=pc.source;
                                 begin_line=PC.line;                                  begin_pos=pc.pos;
   
                                 pop_LS(PC);                                  pop_LS(pc);
                                 continue;                                  continue;
                         }                          }
                         break;                          break;
Line 2080  default: Line 2200  default:
                         case '"':                          case '"':
                         case '\'':                          case '\'':
                                 if(                                  if(
                                         PC.ls == LS_EXPRESSION_STRING_QUOTED && c=='"' ||                                          pc.ls == LS_EXPRESSION_STRING_QUOTED && c=='"' ||
                                         PC.ls == LS_EXPRESSION_STRING_APOSTROFED && c=='\'') {                                          pc.ls == LS_EXPRESSION_STRING_APOSTROFED && c=='\'') {
                                         pop_LS(PC); //"abc". | 'abc'.                                          pop_LS(pc); //"abc". | 'abc'.
                                         RC;                                          RC;
                                 }                                  }
                                 break;                                  break;
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
Line 2099  default: Line 2219  default:
                 case LS_DEF_NAME:                  case LS_DEF_NAME:
                         switch(c) {                          switch(c) {
                         case '[':                          case '[':
                                 PC.ls=LS_DEF_PARAMS;                                  pc.ls=LS_DEF_PARAMS;
                                 RC;                                  RC;
                         case '\n':                          case '\n':
                                 PC.ls=LS_DEF_SPECIAL_BODY;                                  pc.ls=LS_DEF_SPECIAL_BODY;
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
Line 2115  default: Line 2235  default:
                         case ';':                          case ';':
                                 RC;                                  RC;
                         case ']':                          case ']':
                                 PC.ls=*PC.source=='['?LS_DEF_LOCALS:LS_DEF_COMMENT;                                  pc.ls=*pc.source=='['?LS_DEF_LOCALS:LS_DEF_COMMENT;
                                 RC;                                  RC;
                         case '\n': // wrong. bailing out                          case '\n': // wrong. bailing out
                                 pop_LS(PC);                                  pop_LS(pc);
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
Line 2129  default: Line 2249  default:
                         case ';':                          case ';':
                                 RC;                                  RC;
                         case ']':                          case ']':
                                 PC.ls=LS_DEF_COMMENT;                                  pc.ls=LS_DEF_COMMENT;
                                 RC;                                  RC;
                         case '\n': // wrong. bailing out                          case '\n': // wrong. bailing out
                                 pop_LS(PC);                                  pop_LS(pc);
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
   
                 case LS_DEF_COMMENT:                  case LS_DEF_COMMENT:
                         if(c=='\n') {                          if(c=='\n') {
                                 pop_LS(PC);                                  pop_LS(pc);
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
Line 2155  default: Line 2275  default:
                         switch(c) {                          switch(c) {
                         case ')':                          case ')':
                                 if(--lexical_brackets_nestage==0)                                  if(--lexical_brackets_nestage==0)
                                         if(PC.ls==LS_METHOD_ROUND) // method round param ended                                          if(pc.ls==LS_METHOD_ROUND) // method round param ended
                                                 PC.ls=LS_METHOD_AFTER; // look for method end                                                  pc.ls=LS_METHOD_AFTER; // look for method end
                                         else // PC.ls==LS_VAR_ROUND // variable constructor ended                                          else // pc.ls==LS_VAR_ROUND // variable constructor ended
                                                 pop_LS(PC); // return to normal life                                                  pop_LS(pc); // return to normal life
                                 RC;                                  RC;
                         case '#': // comment start skipping                          case '#': // comment start skipping
                                 if(end!=begin) {                                  if(end!=begin) {
                                           if(!pc.string_start)
                                                   pc.string_start=begin_pos;
                                         // append piece till #                                          // append piece till #
                                         PC.string->APPEND_CLEAN(begin, end-begin, PC.file, begin_line);                                          pc.string.append_strdup_know_length(begin, end-begin);
                                 }                                  }
                                 // fall into COMMENT lexical state [wait for \n]                                  // fall into COMMENT lexical state [wait for \n]
                                 push_LS(PC, LS_EXPRESSION_COMMENT);                                  push_LS(pc, LS_EXPRESSION_COMMENT);
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 continue;                                  continue;
                         case '$':                          case '$':
                                 push_LS(PC, LS_EXPRESSION_VAR_NAME_WITH_COLON);                                                           push_LS(pc, LS_EXPRESSION_VAR_NAME_WITH_COLON);                         
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case '(':                          case '(':
                                 lexical_brackets_nestage++;                                  lexical_brackets_nestage++;
                                 RC;                                  RC;
                         case '-':                          case '-':
                                 switch(*PC.source) {                                  switch(*pc.source) {
                                 case 'f': // -f                                  case 'f': // -f
                                         skip_analized=1;                                          skip_analized=1;
                                         result=FEXISTS;                                          result=FEXISTS;
Line 2198  default: Line 2320  default:
                         case ';':                          case ';':
                                 RC;                                  RC;
                         case '&': case '|':                          case '&': case '|':
                                 if(*PC.source==c) { // && ||                                  if(*pc.source==c) { // && ||
                                         result=c=='&'?LAND:LOR;                                          result=c=='&'?LAND:LOR;
                                         skip_analized=1;                                          skip_analized=1;
                                 } else                                  } else
                                         result=c;                                          result=c;
                                 goto break2;                                  goto break2;
                         case '!':                          case '!':
                                 switch(PC.source[0]) {                                   switch(pc.source[0]) { 
                                 case '|': // !| !||                                  case '|': // !| !||
                                         skip_analized=1;                                          skip_analized=1;
                                         if(PC.source[1]=='|') {                                          if(pc.source[1]=='|') {
                                                 skip_analized++;                                                  skip_analized++;
                                                 result=LXOR;                                                  result=LXOR;
                                         } else                                          } else
Line 2222  default: Line 2344  default:
                                 RC;                                  RC;
   
                         case '<': // <<, <=, <                          case '<': // <<, <=, <
                                 switch(*PC.source) {                                  switch(*pc.source) {
                                 case '<': // <[<]                                  case '<': // <[<]
                                         skip_analized=1; result=NSL; break;                                          skip_analized=1; result=NSL; break;
                                 case '=': // <[=]                                  case '=': // <[=]
Line 2232  default: Line 2354  default:
                                 }                                  }
                                 goto break2;                                  goto break2;
                         case '>': // >>, >=, >                          case '>': // >>, >=, >
                                 switch(*PC.source) {                                  switch(*pc.source) {
                                 case '>': // >[>]                                  case '>': // >[>]
                                         skip_analized=1; result=NSR; break;                                          skip_analized=1; result=NSR; break;
                                 case '=': // >[=]                                  case '=': // >[=]
Line 2242  default: Line 2364  default:
                                 }                                  }
                                 goto break2;                                  goto break2;
                         case '=': // ==                          case '=': // ==
                                 switch(*PC.source) {                                  switch(*pc.source) {
                                 case '=': // =[=]                                  case '=': // =[=]
                                         skip_analized=1; result=NEQ; break;                                          skip_analized=1; result=NEQ; break;
                                 default: // =[]                                  default: // =[]
Line 2251  default: Line 2373  default:
                                 goto break2;                                  goto break2;
   
                         case '"':                          case '"':
                                 push_LS(PC, LS_EXPRESSION_STRING_QUOTED);                                  push_LS(pc, LS_EXPRESSION_STRING_QUOTED);
                                 RC;                                  RC;
                         case '\'':                          case '\'':
                                 push_LS(PC, LS_EXPRESSION_STRING_APOSTROFED);                                  push_LS(pc, LS_EXPRESSION_STRING_APOSTROFED);
                                 RC;                                  RC;
                         case 'l': case 'g': case 'e': case 'n':                          case 'l': case 'g': case 'e': case 'n':
                                 if(end==begin) // right after whitespace                                  if(end==begin) // right after whitespace
                                         if(isspace(PC.source[1])) {                                          if(isspace(pc.source[1])) {
                                                 switch(*PC.source) {                                                  switch(*pc.source) {
                                                         //                                      case '?': // ok [and bad cases, yacc would bark at them]                                                          //                                      case '?': // ok [and bad cases, yacc would bark at them]
                                                 case 't': // lt gt [et nt]                                                  case 't': // lt gt [et nt]
                                                         result=c=='l'?SLT:c=='g'?SGT:BAD_STRING_COMPARISON_OPERATOR;                                                          result=c=='l'?SLT:c=='g'?SGT:BAD_STRING_COMPARISON_OPERATOR;
Line 2278  default: Line 2400  default:
                                 break;                                  break;
                         case 'i':                          case 'i':
                                 if(end==begin) // right after whitespace                                  if(end==begin) // right after whitespace
                                         if(isspace(PC.source[1])) {                                          if(isspace(pc.source[1])) {
                                                 switch(PC.source[0]) {                                                  switch(pc.source[0]) {
                                                 case 'n': // in                                                  case 'n': // in
                                                         skip_analized=1;                                                          skip_analized=1;
                                                         result=IN;                                                          result=IN;
Line 2293  default: Line 2415  default:
                                 break;                                  break;
                         case 'd':                          case 'd':
                                 if(end==begin) // right after whitespace                                  if(end==begin) // right after whitespace
                                         if(PC.source[0]=='e' && PC.source[1]=='f') { // def                                          if(pc.source[0]=='e' && pc.source[1]=='f') { // def
                                                 skip_analized=2;                                                  skip_analized=2;
                                                 result=DEF;                                                  result=DEF;
                                                 goto break2;                                                  goto break2;
                                         }                                          }
                                 break;                                  break;
                           case 't':
                                   if(end==begin) // right after whitespace
                                           if(pc.source[0]=='r' && pc.source[1]=='u' && pc.source[2]=='e') { // def
                                                   skip_analized=3;
                                                   result=LITERAL_TRUE;
                                                   goto break2;
                                           }
                                   break;
                           case 'f':
                                   if(end==begin) // right after whitespace
                                           if(pc.source[0]=='a' && pc.source[1]=='l' && pc.source[2]=='s' && pc.source[3]=='e') { // def
                                                   skip_analized=4;
                                                   result=LITERAL_FALSE;
                                                   goto break2;
                                           }
                                   break;
                         case ' ': case '\t': case '\n':                          case ' ': case '\t': case '\n':
                                 if(end!=begin) { // there were a string after previous operator?                                  if(end!=begin) { // there were a string after previous operator?
                                         result=0; // return that string                                          result=0; // return that string
Line 2307  default: Line 2445  default:
                                 // that's a leading|traling space or after-operator-space                                  // that's a leading|traling space or after-operator-space
                                 // ignoring it                                  // ignoring it
                                 // reset piece 'begin' position & line                                  // reset piece 'begin' position & line
                                 begin=PC.source; // after whitespace char                                  begin=pc.source; // after whitespace char
                                 begin_line=PC.line;                                  begin_pos=pc.pos;
                                 continue;                                  continue;
                         }                          }
                         break;                          break;
Line 2316  default: Line 2454  default:
                         if(c=='(')                          if(c=='(')
                                 lexical_brackets_nestage++;                                  lexical_brackets_nestage++;
                                                   
                         switch(*PC.source) {                          switch(*pc.source) {
                         case '\n': case ')':                          case '\n': case ')':
                                 if(*PC.source==')')                                  if(*pc.source==')')
                                         if(--lexical_brackets_nestage!=0)                                          if(--lexical_brackets_nestage!=0)
                                                 continue;                                                  continue;
   
                                 // skip comment                                  // skip comment
                                 begin=PC.source;                                  begin=pc.source;
                                 begin_line=PC.line;                                  begin_pos=pc.pos;
   
                                 pop_LS(PC);                                  pop_LS(pc);
                                 continue;                                  continue;
                         }                          }
                         break;                          break;
Line 2337  default: Line 2475  default:
                 case LS_EXPRESSION_VAR_NAME_WITH_COLON:                   case LS_EXPRESSION_VAR_NAME_WITH_COLON: 
                 case LS_EXPRESSION_VAR_NAME_WITHOUT_COLON:                  case LS_EXPRESSION_VAR_NAME_WITHOUT_COLON:
                         if(                          if(
                                 PC.ls==LS_EXPRESSION_VAR_NAME_WITH_COLON ||                                  pc.ls==LS_EXPRESSION_VAR_NAME_WITH_COLON ||
                                 PC.ls==LS_EXPRESSION_VAR_NAME_WITHOUT_COLON) {                                  pc.ls==LS_EXPRESSION_VAR_NAME_WITHOUT_COLON) {
                                 // name in expr ends also before                                   // name in expr ends also before 
                                 switch(c) {                                  switch(c) {
                                 // expression minus                                  // expression minus
                                 case '-':                                   case '-': 
                                 // expression integer division                                  // expression integer division
                                 case '\\':                                  case '\\':
                                         pop_LS(PC);                                          pop_LS(pc);
                                         PC.source--;  if(--PC.col<0) { PC.line--;  PC.col=-1; }                                          pc.ungetc();
                                         result=EON;                                          result=EON;
                                         goto break2;                                          goto break2;
                                 }                                  }
                         }                          }
                         if(                          if(
                                 PC.ls==LS_VAR_NAME_SIMPLE_WITHOUT_COLON ||                                  pc.ls==LS_VAR_NAME_SIMPLE_WITHOUT_COLON ||
                                 PC.ls==LS_EXPRESSION_VAR_NAME_WITHOUT_COLON) {                                  pc.ls==LS_EXPRESSION_VAR_NAME_WITHOUT_COLON) {
                                 // name already has ':', stop before next                                   // name already has ':', stop before next 
                                 switch(c) {                                  switch(c) {
                                 case ':':                                   case ':': 
                                         pop_LS(PC);                                          pop_LS(pc);
                                         PC.source--;  if(--PC.col<0) { PC.line--;  PC.col=-1; }                                          pc.ungetc();
                                         result=EON;                                          result=EON;
                                         goto break2;                                          goto break2;
                                 }                                  }
Line 2377  default: Line 2515  default:
                         case ',': case '?': case '#':                          case ',': case '?': case '#':
                         // before call                          // before call
                         case '^':                           case '^': 
                                 pop_LS(PC);                                  pop_LS(pc);
                                 PC.source--;  if(--PC.col<0) { PC.line--;  PC.col=-1; }                                  pc.ungetc();
                                 result=EON;                                  result=EON;
                                 goto break2;                                  goto break2;
                         case '[':                          case '[':
                                 // $name.<[>code]                                  // $name.<[>code]
                                 if(PC.col>1/*not first column*/ && (                                  if(pc.pos.col>1/*not first column*/ && (
                                         end[-1]=='$'/*was start of get*/ ||                                          end[-1]=='$'/*was start of get*/ ||
                                         end[-1]==':'/*was class name delim */ ||                                          end[-1]==':'/*was class name delim */ ||
                                         end[-1]=='.'/*was name delim */                                          end[-1]=='.'/*was name delim */
                                         )) {                                          )) {
                                         push_LS(PC, LS_NAME_SQUARE_PART);                                          push_LS(pc, LS_NAME_SQUARE_PART);
                                         lexical_brackets_nestage=1;                                          lexical_brackets_nestage=1;
                                         RC;                                          RC;
                                 }                                  }
                                 PC.ls=LS_VAR_SQUARE;                                  pc.ls=LS_VAR_SQUARE;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '{':                          case '{':
                                 if(begin==end) { // ${name}, no need of EON, switching LS                                  if(begin==end) { // ${name}, no need of EON, switching LS
                                         PC.ls=LS_VAR_NAME_CURLY;                                           pc.ls=LS_VAR_NAME_CURLY; 
                                 } else {                                  } else {
                                         PC.ls=LS_VAR_CURLY;                                          pc.ls=LS_VAR_CURLY;
                                         lexical_brackets_nestage=1;                                          lexical_brackets_nestage=1;
                                 }                                  }
   
                                 RC;                                  RC;
                         case '(':                          case '(':
                                 PC.ls=LS_VAR_ROUND;                                  pc.ls=LS_VAR_ROUND;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '.': // name part delim                          case '.': // name part delim
                         case '$': // name part subvar                          case '$': // name part subvar
                         case ':': // class<:>name                          case ':': // class<:>name
                                 // go to _WITHOUT_COLON state variant...                                  // go to _WITHOUT_COLON state variant...
                                 if(PC.ls==LS_VAR_NAME_SIMPLE_WITH_COLON)                                  if(pc.ls==LS_VAR_NAME_SIMPLE_WITH_COLON)
                                         PC.ls=LS_VAR_NAME_SIMPLE_WITHOUT_COLON;                                          pc.ls=LS_VAR_NAME_SIMPLE_WITHOUT_COLON;
                                 else if(PC.ls==LS_EXPRESSION_VAR_NAME_WITH_COLON)                                  else if(pc.ls==LS_EXPRESSION_VAR_NAME_WITH_COLON)
                                         PC.ls=LS_EXPRESSION_VAR_NAME_WITHOUT_COLON;                                          pc.ls=LS_EXPRESSION_VAR_NAME_WITHOUT_COLON;
                                 // ...stop before next ':'                                  // ...stop before next ':'
                                 RC;                                  RC;
                         }                          }
Line 2425  default: Line 2563  default:
                         switch(c) {                          switch(c) {
                         case '[':                          case '[':
                                 // ${name.<[>code]}                                  // ${name.<[>code]}
                                 push_LS(PC, LS_NAME_SQUARE_PART);                                  push_LS(pc, LS_NAME_SQUARE_PART);
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '}': // ${name} finished, restoring LS                          case '}': // ${name} finished, restoring LS
                                 pop_LS(PC);                                  pop_LS(pc);
                                 RC;                                  RC;
                         case '.': // name part delim                          case '.': // name part delim
                         case '$': // name part subvar                          case '$': // name part subvar
Line 2441  default: Line 2579  default:
                 case LS_VAR_SQUARE:                  case LS_VAR_SQUARE:
                         switch(c) {                          switch(c) {
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case ']':                          case ']':
                                 if(--lexical_brackets_nestage==0) {                                  if(--lexical_brackets_nestage==0) {
                                         pop_LS(PC);                                          pop_LS(pc);
                                         RC;                                          RC;
                                 }                                  }
                                 break;                                  break;
Line 2463  default: Line 2601  default:
                 case LS_VAR_CURLY:                  case LS_VAR_CURLY:
                         switch(c) {                          switch(c) {
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case '}':                          case '}':
                                 if(--lexical_brackets_nestage==0) {                                  if(--lexical_brackets_nestage==0) {
                                         pop_LS(PC);                                          pop_LS(pc);
                                         RC;                                          RC;
                                 }                                  }
                                 break;                                  break;
Line 2485  default: Line 2623  default:
                         switch(c) {                          switch(c) {
                         case '[':                          case '[':
                                 // ^name.<[>code].xxx                                  // ^name.<[>code].xxx
                                 if(PC.col>1/*not first column*/ && (                                  if(pc.pos.col>1/*not first column*/ && (
                                         end[-1]=='^'/*was start of call*/ || // never, ^[ is literal...                                          end[-1]=='^'/*was start of call*/ || // never, ^[ is literal...
                                         end[-1]==':'/*was class name delim */ ||                                          end[-1]==':'/*was class name delim */ ||
                                         end[-1]=='.'/*was name delim */                                          end[-1]=='.'/*was name delim */
                                         )) {                                          )) {
                                         push_LS(PC, LS_NAME_SQUARE_PART);                                          push_LS(pc, LS_NAME_SQUARE_PART);
                                         lexical_brackets_nestage=1;                                          lexical_brackets_nestage=1;
                                         RC;                                          RC;
                                 }                                  }
                                 PC.ls=LS_METHOD_SQUARE;                                  pc.ls=LS_METHOD_SQUARE;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '{':                          case '{':
                                 PC.ls=LS_METHOD_CURLY;                                  pc.ls=LS_METHOD_CURLY;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '(':                          case '(':
                                 PC.ls=LS_METHOD_ROUND;                                  pc.ls=LS_METHOD_ROUND;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         case '.': // name part delim                           case '.': // name part delim 
Line 2510  default: Line 2648  default:
                         case ':': // ':name' or 'class:name'                          case ':': // ':name' or 'class:name'
                         case '^': // ^abc^xxx wrong. bailing out                          case '^': // ^abc^xxx wrong. bailing out
                         case ']': case '}': case ')': // ^abc]}) wrong. bailing out                          case ']': case '}': case ')': // ^abc]}) wrong. bailing out
                           case ' ': // ^if ( wrong. bailing out
                                 RC;                                  RC;
                         }                          }
                         break;                          break;
Line 2517  default: Line 2656  default:
                 case LS_METHOD_SQUARE:                  case LS_METHOD_SQUARE:
                         switch(c) {                          switch(c) {
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case ';': // param delim                          case ';': // param delim
                                 RC;                                  RC;
                         case ']':                          case ']':
                                 if(--lexical_brackets_nestage==0) {                                  if(--lexical_brackets_nestage==0) {
                                         PC.ls=LS_METHOD_AFTER;                                          pc.ls=LS_METHOD_AFTER;
                                         RC;                                          RC;
                                 }                                  }
                                 break;                                  break;
Line 2539  default: Line 2678  default:
                 case LS_METHOD_CURLY:                  case LS_METHOD_CURLY:
                         switch(c) {                          switch(c) {
                         case '$':                          case '$':
                                 push_LS(PC, LS_VAR_NAME_SIMPLE_WITH_COLON);                                  push_LS(pc, LS_VAR_NAME_SIMPLE_WITH_COLON);
                                 RC;                                  RC;
                         case '^':                          case '^':
                                 push_LS(PC, LS_METHOD_NAME);                                  push_LS(pc, LS_METHOD_NAME);
                                 RC;                                  RC;
                         case ';': // param delim                          case ';': // param delim
                                 RC;                                  RC;
                         case '}':                          case '}':
                                 if(--lexical_brackets_nestage==0) {                                  if(--lexical_brackets_nestage==0) {
                                         PC.ls=LS_METHOD_AFTER;                                          pc.ls=LS_METHOD_AFTER;
                                         RC;                                          RC;
                                 }                                  }
                                 break;                                  break;
Line 2556  default: Line 2695  default:
                                 lexical_brackets_nestage++;                                  lexical_brackets_nestage++;
                                 break;                                  break;
                         }                          }
                           if(pc.explicit_result && c)
                                   switch(c) {
                                   case '\n': case ' ': case '\t':
                                           begin=pc.source;
                                           begin_pos=pc.pos;
                                           continue; // skip it
                                   default:
                                           result=BAD_NONWHITESPACE_CHARACTER_IN_EXPLICIT_RESULT_MODE;
                                           goto break2;
                                   }
                         break;                          break;
   
                 case LS_METHOD_AFTER:                  case LS_METHOD_AFTER:
                         if(c=='[') {/* ][ }[ )[ */                          if(c=='[') {/* ][ }[ )[ */
                                 PC.ls=LS_METHOD_SQUARE;                                  pc.ls=LS_METHOD_SQUARE;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         }                                                                    }                                          
                         if(c=='{') {/* ]{ }{ ){ */                          if(c=='{') {/* ]{ }{ ){ */
                                 PC.ls=LS_METHOD_CURLY;                                  pc.ls=LS_METHOD_CURLY;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         }                                                                    }                                          
                         if(c=='(') {/* ]( }( )( */                          if(c=='(') {/* ]( }( )( */
                                 PC.ls=LS_METHOD_ROUND;                                  pc.ls=LS_METHOD_ROUND;
                                 lexical_brackets_nestage=1;                                  lexical_brackets_nestage=1;
                                 RC;                                  RC;
                         }                                                                    }                                          
                         pop_LS(PC);                          pop_LS(pc);
                         PC.source--;  if(--PC.col<0) { PC.line--;  PC.col=-1; }                          pc.ungetc();
                         result=EON;                          result=EON;
                         goto break2;                          goto break2;
                 }                  }
Line 2593  break2: Line 2742  break2:
                         if(end!=begin && end[-1]=='\n') // allow one empty line before LS_DEF_NAME                          if(end!=begin && end[-1]=='\n') // allow one empty line before LS_DEF_NAME
                                 end--;                                  end--;
                 }                  }
                 if(end!=begin && PC.ls!=LS_USER_COMMENT) { // last piece still alive and not comment?                  if(end!=begin && pc.ls!=LS_USER_COMMENT) { // last piece still alive and not comment?
                           if(!pc.string_start)
                                   pc.string_start=begin_pos;
                         // append it                          // append it
                         PC.string->APPEND_CLEAN(begin, end-begin, PC.file, begin_line/*, start_col*/);                          pc.string.append_strdup_know_length(begin, end-begin);
                 }                  }
         }          }
         if(PC.string->size()) { // something accumulated?          if(!pc.string.is_empty()) { // something accumulated?
                 // create STRING value: array of OP_VALUE+vstring                  // create STRING value: array of OP_VALUE+origin+vstring
                 *lvalp=VL(NEW VString(*PC.string));                  *lvalp=VL(
                           new VString(*new String(pc.string, String::L_CLEAN)),
                           pc.file_no, pc.string_start.line, pc.string_start.col);
                 // new pieces storage                  // new pieces storage
                 PC.string=NEW String(POOL);                  pc.string.clear();
                   pc.string_start.clear();
                 // make current result be pending for next call, return STRING for now                  // make current result be pending for next call, return STRING for now
                 PC.pending_state=result;  result=STRING;                  pc.pending_state=result;  result=STRING;
         }          }
         if(skip_analized) {          if(skip_analized) {
                 PC.source+=skip_analized;  PC.col+=skip_analized;                  pc.source+=skip_analized;  pc.pos.col+=skip_analized;
         }          }
         return result;          return result;
 }  }
   
 static int real_yyerror(parse_control *pc, char *s) {  // Called by yyparse on error  static int real_yyerror(Parse_control *pc, char *s) {  // Called by yyparse on error
            strncpy(PC.error, s, MAX_STRING);             strncpy(PC.error, s, MAX_STRING);
            return 1;             return 1;
 }  }
   
 static void yyprint(FILE *file, int type, YYSTYPE value) {  static void yyprint(FILE *file, int type, YYSTYPE value) {
         if(type==STRING)          if(type==STRING)
                 fprintf(file, " \"%s\"", LA2S(value)->cstr());                  fprintf(file, " \"%s\"", LA2S(*value)->cstr());
 }  }

Removed from v.1.74  
changed lines
  Added in v.1.107


E-mail: