Diff for /parser3/src/main/compile.tab.C between versions 1.138 and 1.147

version 1.138, 2009/06/04 09:42:23 version 1.147, 2010/04/28 17:56:22
Line 459  static const unsigned short int yyrline[ Line 459  static const unsigned short int yyrline[
        0,   132,   132,   139,   141,   141,   142,   144,   144,   146,         0,   132,   132,   139,   141,   141,   142,   144,   144,   146,
      247,   247,   248,   248,   249,   250,   250,   252,   252,   302,       247,   247,   248,   248,   249,   250,   250,   252,   252,   302,
      302,   303,   304,   304,   305,   305,   307,   307,   311,   311,       302,   303,   304,   304,   305,   305,   307,   307,   311,   311,
      313,   313,   314,   314,   315,   315,   315,   319,   353,   354,       313,   313,   314,   314,   315,   315,   315,   319,   360,   361,
      354,   355,   357,   358,   359,   417,   418,   418,   422,   435,       361,   362,   364,   365,   366,   419,   420,   420,   424,   437,
      436,   437,   438,   455,   460,   463,   464,   465,   467,   470,       438,   439,   440,   466,   471,   474,   475,   476,   478,   481,
      467,   478,   486,   493,   494,   495,   497,   503,   504,   504,       478,   489,   497,   504,   505,   506,   508,   514,   515,   515,
      508,   519,   522,   519,   550,   552,   552,   554,   555,   556,       519,   531,   534,   531,   578,   580,   580,   582,   583,   584,
      558,   561,   558,   564,   565,   567,   568,   571,   572,   575,       586,   589,   586,   592,   593,   595,   596,   599,   600,   603,
      576,   578,   581,   595,   600,   601,   602,   607,   607,   609,       604,   606,   609,   623,   628,   629,   630,   635,   635,   637,
      609,   610,   611,   619,   624,   627,   628,   629,   630,   632,       637,   638,   639,   647,   652,   655,   656,   657,   658,   660,
      636,   645,   648,   645,   656,   661,   661,   662,   668,   669,       664,   673,   676,   673,   684,   689,   689,   690,   696,   697,
      671,   688,   700,   702,   703,   704,   705,   706,   707,   708,       699,   716,   728,   730,   731,   732,   733,   734,   735,   736,
      709,   711,   712,   713,   714,   715,   716,   717,   718,   720,       737,   739,   740,   741,   742,   743,   744,   745,   746,   748,
      721,   722,   723,   724,   725,   726,   727,   728,   729,   730,       749,   750,   751,   752,   753,   754,   755,   756,   757,   758,
      731,   732,   733,   734,   735,   736,   737,   738,   739,   740,       759,   760,   761,   762,   763,   764,   765,   766,   767,   768,
      741,   742,   743,   744,   745,   746,   749,   754,   775,   780,       769,   770,   771,   772,   773,   774,   777,   782,   803,   808,
      781,   782,   784       809,   810,   812
 };  };
 #endif  #endif
   
Line 1430  yyreduce: Line 1430  yyreduce:
         case 2:          case 2:
 #line 132 "compile.y"  #line 132 "compile.y"
     {      {
         Method& method=*new Method(Method::CT_ANY,          Method* method=new Method(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.alias_method(main_method_name), method);          PC.cclass->set_method(PC.alias_method(main_method_name), method);
 ;}  ;}
     break;      break;
   
Line 1480  yyreduce: Line 1480  yyreduce:
                 }                  }
                 if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) {                  if(strings_code->count()==1*OPERATIONS_PER_OPVALUE) {
                         const String& base_name=*LA2S(*strings_code);                          const String& base_name=*LA2S(*strings_code);
                         if(Value* base_class_value=PC.request.classes().get(base_name)) {                          if(Value* base_class_value=PC.request.get_class(base_name)) {
                                 // @CLASS == @BASE sanity check                                  // @CLASS == @BASE sanity check
                                 if(VStateless_class *base_class=base_class_value->get_class()) {                                  if(VStateless_class *base_class=base_class_value->get_class()) {
                                         if(PC.cclass==base_class) {                                          if(PC.cclass==base_class) {
Line 1595  yyreduce: Line 1595  yyreduce:
   case 18:    case 18:
 #line 292 "compile.y"  #line 292 "compile.y"
     {      {
                 Method& method=*reinterpret_cast<Method*>(yyvsp[-1]);                  Method* method=reinterpret_cast<Method*>(yyvsp[-1]);
                 // fill in the code                  // fill in the code
                 method.parser_code=yyvsp[0];                  method->parser_code=yyvsp[0];
   
                 // register in class                  // register in class
                 const String& name=*LA2S(*yyvsp[-6]);                  const String& name=*LA2S(*yyvsp[-6]);
                 PC.cclass->add_method(PC.alias_method(name), method);                  PC.cclass->set_method(PC.alias_method(name), method);
 ;}  ;}
     break;      break;
   
Line 1625  yyreduce: Line 1625  yyreduce:
     {      {
         yyval=N();          yyval=N();
         YYSTYPE code=yyvsp[0];          YYSTYPE code=yyvsp[0];
           size_t count=code->count();
   
 #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT
         if(!maybe_change_first_opcode(*code, OP::OP_VALUE__GET_ELEMENT, /*=>*/OP::OP_VALUE__GET_ELEMENT__WRITE))          if(
                   count!=3
                   || !maybe_change_first_opcode(*code, OP::OP_VALUE__GET_ELEMENT, /*=>*/OP::OP_VALUE__GET_ELEMENT__WRITE)
           )
 #endif  #endif
   
 #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT
         if(!maybe_change_first_opcode(*code, OP::OP_WITH_SELF__VALUE__GET_ELEMENT, /*=>*/OP::OP_WITH_SELF__VALUE__GET_ELEMENT__WRITE))          if(
                   count!=3
                   || !maybe_change_first_opcode(*code, OP::OP_WITH_SELF__VALUE__GET_ELEMENT, /*=>*/OP::OP_WITH_SELF__VALUE__GET_ELEMENT__WRITE)
           )
 #endif  #endif
   
 #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT
                 if(          if(
                         code->count()!=5                  count!=5
                         || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_ELEMENT, /*=>*/OP::OP_GET_OBJECT_ELEMENT__WRITE)                  || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_ELEMENT, /*=>*/OP::OP_GET_OBJECT_ELEMENT__WRITE)
                 )          )
 #endif  #endif
   
 #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT
                 if(          if(
                         code->count()!=5                  count!=5
                         || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_VAR_ELEMENT, /*=>*/OP::OP_GET_OBJECT_VAR_ELEMENT__WRITE)                  || !maybe_change_first_opcode(*code, OP::OP_GET_OBJECT_VAR_ELEMENT, /*=>*/OP::OP_GET_OBJECT_VAR_ELEMENT__WRITE)
                 )          )
 #endif  #endif
                 {          {
                         changetail_or_append(*code,                   changetail_or_append(*code,
                                 OP::OP_GET_ELEMENT, false,  /*=>*/OP::OP_GET_ELEMENT__WRITE,                          OP::OP_GET_ELEMENT, false,  /*=>*/OP::OP_GET_ELEMENT__WRITE,
                                 /*or */OP::OP_WRITE_VALUE                          /*or */OP::OP_WRITE_VALUE
                                 ); /* value=pop; wcontext.write(value) */                          ); /* value=pop; wcontext.write(value) */
                 }          }
   
         P(*yyval, *code);          P(*yyval, *code);
 ;}  ;}
     break;      break;
   
   case 38:    case 38:
 #line 353 "compile.y"  #line 360 "compile.y"
     { yyval=yyvsp[0] ;}      { yyval=yyvsp[0] ;}
     break;      break;
   
   case 41:    case 41:
 #line 355 "compile.y"  #line 362 "compile.y"
     { yyval=yyvsp[-1] ;}      { yyval=yyvsp[-1] ;}
     break;      break;
   
   case 44:    case 44:
 #line 359 "compile.y"  #line 366 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         YYSTYPE diving_code=yyvsp[0];          YYSTYPE diving_code=yyvsp[0];
         const String* first_name=LA2S(*diving_code);  
         size_t count=diving_code->count();          size_t count=diving_code->count();
         // self.xxx... => xxx...  
         // OP_VALUE+origin+string+OP_GET_ELEMENT+... -> OP_WITH_SELF+...          if(maybe_make_self(*yyval, *diving_code, count)) {
         if(first_name && *first_name==SELF_ELEMENT_NAME) {                  // $self.
 #ifdef OPTIMIZE_BYTECODE_GET_SELF_ELEMENT          } else
                 if(maybe_make_with_self_get_element(*yyval, *diving_code, count)){  
                         // optimization for $self.field and ^self.method  
                 } else  
 #endif  
                         {  
                                 O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */  
                                 P(*yyval, *diving_code,   
                                         /* skip over... */  
                                         count>=4?4/*OP_VALUE+origin+string+OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/);  
                         }  
         }  
   
 #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_ELEMENT
         else if(maybe_make_get_object_element(*yyval, *diving_code, count)){          if(maybe_make_get_object_element(*yyval, *diving_code, count)){
                 // optimization for $object.field + ^object.method[                  // optimization for $object.field + ^object.method[
         }          } else
 #endif  #endif
   
 #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_OBJECT_VAR_ELEMENT
         else if(maybe_make_get_object_var_element(*yyval, *diving_code, count)){          if(maybe_make_get_object_var_element(*yyval, *diving_code, count)){
                 // optimization for $object.$var                  // optimization for $object.$var
         }          } else
 #endif  #endif
   
 #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT
         else if(count==4){ // optimization          if(
                   count>=4
                   && (*diving_code)[0].code==OP::OP_VALUE
                   && (*diving_code)[3].code==OP::OP_GET_ELEMENT
           ){
                    // optimization
                 O(*yyval,                  O(*yyval,
                         (PC.in_call_value)                          (PC.in_call_value && count==4)
                         ? OP::OP_VALUE__GET_ELEMENT_OR_OPERATOR // ^object[ : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT_OR_OPERATOR+origin+string                          ? OP::OP_VALUE__GET_ELEMENT_OR_OPERATOR // ^object[ : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT_OR_OPERATOR+origin+string
                         : OP::OP_VALUE__GET_ELEMENT             // $object  : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT+origin+string                          : OP::OP_VALUE__GET_ELEMENT             // $object  : OP_VALUE+origin+string+OP_GET_ELEMENT => OP_VALUE__GET_ELEMENT+origin+string
                 );                  );
                 P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value                  P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value
                   if(count>4)
                           P(*yyval, *diving_code, 4); // copy tail
         } else {          } else {
                 O(*yyval, OP::OP_WITH_READ); /* stack: starting context */                  O(*yyval, OP::OP_WITH_READ); /* stack: starting context */
                 P(*yyval, *diving_code);                  P(*yyval, *diving_code);
         }          }
 #else  #else
         else {          {
                 O(*yyval, OP::OP_WITH_READ); /* stack: starting context */                  O(*yyval, OP::OP_WITH_READ); /* stack: starting context */
   
                 // ^if OP_ELEMENT => ^if OP_ELEMENT_OR_OPERATOR                  // ^if OP_ELEMENT => ^if OP_ELEMENT_OR_OPERATOR
Line 1731  yyreduce: Line 1733  yyreduce:
     break;      break;
   
   case 45:    case 45:
 #line 417 "compile.y"  #line 419 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 47:    case 47:
 #line 418 "compile.y"  #line 420 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 48:    case 48:
 #line 422 "compile.y"  #line 424 "compile.y"
     {      {
         yyval=N();          yyval=N();
 #ifdef OPTIMIZE_BYTECODE_CONSTRUCT  #ifdef OPTIMIZE_BYTECODE_CONSTRUCT
         if(maybe_optimize_construct(*yyval, *yyvsp[-1], *yyvsp[0])){          if(maybe_optimize_construct(*yyval, *yyvsp[-1], *yyvsp[0])){
                 // $a(expr), $.a(expr), $a[value], $.a[value]                  // $a(expr), $.a(expr), $a[value], $.a[value], $self.a[value], $self.a(expr)
         } else           } else 
 #endif  #endif
         {          {
Line 1757  yyreduce: Line 1759  yyreduce:
     break;      break;
   
   case 52:    case 52:
 #line 438 "compile.y"  #line 440 "compile.y"
     {      {
         yyval=N();          yyval=N();
         YYSTYPE diving_code=yyvsp[0];          YYSTYPE diving_code=yyvsp[0];
         const String* first_name=LA2S(*diving_code);          size_t count=diving_code->count();
         // $self.xxx... => $xxx...  
         // OP_VALUE+origin+string+OP_GET_ELEMENT+... => OP_WITH_SELF+...          if(maybe_make_self(*yyval, *diving_code, count)) {
         if(first_name && *first_name==SELF_ELEMENT_NAME) {                  // $self.
                 O(*yyval, OP::OP_WITH_SELF); /* stack: starting context */          } else
                 P(*yyval, *diving_code,   #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT
                         /* skip over... */          if(
                         diving_code->count()>=4?4/*OP::OP_VALUE+origin+string+OP::OP_GET_ELEMENTx*/:3/*OP::OP_+origin+string*/);                  count>=4
         } else {                  && (*diving_code)[0].code==OP::OP_VALUE
                   && (*diving_code)[3].code==OP::OP_GET_ELEMENT
           ){
                   O(*yyval, OP::OP_WITH_ROOT__VALUE__GET_ELEMENT);
                   P(*yyval, *diving_code, 1/*offset*/, 2/*limit*/); // copy origin+value
                   if(count>4)
                           P(*yyval, *diving_code, 4); // tail
           } else
   #endif
           {
                 O(*yyval, OP::OP_WITH_ROOT); /* stack: starting context */                  O(*yyval, OP::OP_WITH_ROOT); /* stack: starting context */
                 P(*yyval, *diving_code);                  P(*yyval, *diving_code);
         }          }
Line 1778  yyreduce: Line 1789  yyreduce:
     break;      break;
   
   case 53:    case 53:
 #line 455 "compile.y"  #line 466 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         O(*yyval, OP::OP_WITH_WRITE); /* stack: starting context */          O(*yyval, OP::OP_WITH_WRITE); /* stack: starting context */
Line 1787  yyreduce: Line 1798  yyreduce:
     break;      break;
   
   case 54:    case 54:
 #line 460 "compile.y"  #line 471 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 58:    case 58:
 #line 467 "compile.y"  #line 478 "compile.y"
     {      {
         // allow $result_or_other_variable[ letters here any time ]          // allow $result_or_other_variable[ letters here any time ]
         *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;          *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
Line 1800  yyreduce: Line 1811  yyreduce:
     break;      break;
   
   case 59:    case 59:
 #line 470 "compile.y"  #line 481 "compile.y"
     {      {
         PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);          PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
 ;}  ;}
     break;      break;
   
   case 60:    case 60:
 #line 472 "compile.y"  #line 483 "compile.y"
     {      {
         // stack: context, name          // stack: context, name
         yyval=yyvsp[-2]; // stack: context, name, value          yyval=yyvsp[-2]; // stack: context, name, value
Line 1816  yyreduce: Line 1827  yyreduce:
     break;      break;
   
   case 61:    case 61:
 #line 478 "compile.y"  #line 489 "compile.y"
     {       { 
         yyval=N();           yyval=N(); 
         O(*yyval, OP::OP_PREPARE_TO_EXPRESSION);          O(*yyval, OP::OP_PREPARE_TO_EXPRESSION);
Line 1827  yyreduce: Line 1838  yyreduce:
     break;      break;
   
   case 62:    case 62:
 #line 486 "compile.y"  #line 497 "compile.y"
     {      {
         // stack: context, name          // stack: context, name
         yyval=N();           yyval=N(); 
Line 1836  yyreduce: Line 1847  yyreduce:
     break;      break;
   
   case 66:    case 66:
 #line 497 "compile.y"  #line 508 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */          OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[0]); /* stack: empty write context */
Line 1846  yyreduce: Line 1857  yyreduce:
     break;      break;
   
   case 69:    case 69:
 #line 504 "compile.y"  #line 515 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 70:    case 70:
 #line 508 "compile.y"  #line 519 "compile.y"
     {      {
 #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR  #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR
         if((*yyvsp[0]).count())          if((*yyvsp[0]).count())
 #endif  #endif
         {          {
                 yyval=yyvsp[0]; /* stack: value */                  yyval=yyvsp[0]; /* stack: value */
                 changetail_or_append(*yyval,                   if(!maybe_change_first_opcode(*yyval, OP::OP_CONSTRUCT_OBJECT, /*=>*/OP::OP_CONSTRUCT_OBJECT__WRITE))
                         OP::OP_CALL, true,  /*=>*/ OP::OP_CALL__WRITE,                          changetail_or_append(*yyval, 
                         /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */                                  OP::OP_CALL, true,  /*=>*/ OP::OP_CALL__WRITE,
                                   /*or */OP::OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */
         }          }
 ;}  ;}
     break;      break;
   
   case 71:    case 71:
 #line 519 "compile.y"  #line 531 "compile.y"
     {       { 
                                         PC.in_call_value=true;                                           PC.in_call_value=true; 
                         ;}                          ;}
     break;      break;
   
   case 72:    case 72:
 #line 522 "compile.y"  #line 534 "compile.y"
     {      {
                                 PC.in_call_value=false;                                  PC.in_call_value=false;
                         ;}                          ;}
     break;      break;
   
   case 73:    case 73:
 #line 525 "compile.y"  #line 537 "compile.y"
     { /* ^field.$method{vasya} */      { /* ^field.$method{vasya} */
 #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR  #ifdef OPTIMIZE_BYTECODE_CUT_REM_OPERATOR
 #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT  #ifdef OPTIMIZE_BYTECODE_GET_ELEMENT
Line 1888  yyreduce: Line 1900  yyreduce:
 #else  #else
         const String* operator_name=LA2S(*yyvsp[-3], 1);          const String* operator_name=LA2S(*yyvsp[-3], 1);
 #endif  #endif
         if(operator_name && *operator_name == REM_OPERATOR_NAME){          if(operator_name && *operator_name==REM_OPERATOR_NAME){
                 yyval=N();                  yyval=N();
         } else           } else 
 #endif  #endif
                 {                  {
                         yyval=yyvsp[-3]; /* with_xxx,diving code; stack: context,method_junction */  
   
                         YYSTYPE params_code=yyvsp[-1];                          YYSTYPE params_code=yyvsp[-1];
                         if(params_code->count()==3) { // probably [] case. [OP::OP_VALUE+origin+Void]                          if(params_code->count()==3) { // probably [] case. [OP::OP_VALUE+origin+Void]
                                 if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value?                                  if(Value* value=LA2V(*params_code)) // it is OP_VALUE+origin+value?
Line 1902  yyreduce: Line 1912  yyreduce:
                                                 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::OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value  
                           YYSTYPE var_code=yyvsp[-3];
                           if(
                                   var_code->count()==8
                                   && (*var_code)[0].code==OP::OP_VALUE__GET_CLASS
                                   && (*var_code)[3].code==OP::OP_PREPARE_TO_CONSTRUCT_OBJECT
                                   && (*var_code)[4].code==OP::OP_VALUE
                                   && (*var_code)[7].code==OP::OP_GET_ELEMENT
                           ){
                                   yyval=N();
                                   O(*yyval, OP::OP_CONSTRUCT_OBJECT);
                                   P(*yyval, *var_code, 1/*offset*/, 2/*limit*/); // class name
                                   P(*yyval, *var_code, 5/*offset*/, 2/*limit*/); // constructor name
                                   OA(*yyval, params_code);
                           } else 
                                   {
                                           yyval=var_code; /* with_xxx,diving code; stack: context,method_junction */
                                           OA(*yyval, OP::OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value
                                   }
                 }                  }
 ;}  ;}
     break;      break;
   
   case 76:    case 76:
 #line 552 "compile.y"  #line 580 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 80:    case 80:
 #line 558 "compile.y"  #line 586 "compile.y"
     {      {
         // allow ^call[ letters here any time ]          // allow ^call[ letters here any time ]
         *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;          *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
Line 1921  yyreduce: Line 1949  yyreduce:
     break;      break;
   
   case 81:    case 81:
 #line 561 "compile.y"  #line 589 "compile.y"
     {      {
         PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);          PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
 ;}  ;}
     break;      break;
   
   case 82:    case 82:
 #line 563 "compile.y"  #line 591 "compile.y"
     {yyval=yyvsp[-2];}      {yyval=yyvsp[-2];}
     break;      break;
   
   case 83:    case 83:
 #line 564 "compile.y"  #line 592 "compile.y"
     {yyval=yyvsp[-1];}      {yyval=yyvsp[-1];}
     break;      break;
   
   case 84:    case 84:
 #line 565 "compile.y"  #line 593 "compile.y"
     {yyval=yyvsp[-1];}      {yyval=yyvsp[-1];}
     break;      break;
   
   case 86:    case 86:
 #line 568 "compile.y"  #line 596 "compile.y"
     { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 88:    case 88:
 #line 572 "compile.y"  #line 600 "compile.y"
     { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 90:    case 90:
 #line 576 "compile.y"  #line 604 "compile.y"
     { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-2]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 91:    case 91:
 #line 578 "compile.y"  #line 606 "compile.y"
     {      {
         yyval=yyvsp[0];          yyval=yyvsp[0];
 ;}  ;}
     break;      break;
   
   case 92:    case 92:
 #line 581 "compile.y"  #line 609 "compile.y"
     {      {
         YYSTYPE expr_code=yyvsp[0];          YYSTYPE expr_code=yyvsp[0];
         if(expr_code->count()==3          if(expr_code->count()==3
Line 1983  yyreduce: Line 2011  yyreduce:
     break;      break;
   
   case 93:    case 93:
 #line 595 "compile.y"  #line 623 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         OA(*yyval, OP::OP_CURLY_CODE__STORE_PARAM, yyvsp[0]);          OA(*yyval, OP::OP_CURLY_CODE__STORE_PARAM, yyvsp[0]);
Line 1991  yyreduce: Line 2019  yyreduce:
     break;      break;
   
   case 98:    case 98:
 #line 607 "compile.y"  #line 635 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 100:    case 100:
 #line 609 "compile.y"  #line 637 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 102:    case 102:
 #line 611 "compile.y"  #line 639 "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
Line 2013  yyreduce: Line 2041  yyreduce:
     break;      break;
   
   case 103:    case 103:
 #line 619 "compile.y"  #line 647 "compile.y"
     {      {
         /* stack: context */          /* stack: context */
         yyval=yyvsp[0]; /* stack: context,name */          yyval=yyvsp[0]; /* stack: context,name */
Line 2022  yyreduce: Line 2050  yyreduce:
     break;      break;
   
   case 109:    case 109:
 #line 632 "compile.y"  #line 660 "compile.y"
     {      {
         yyval=yyvsp[0];          yyval=yyvsp[0];
         O(*yyval, OP::OP_GET_ELEMENT);          O(*yyval, OP::OP_GET_ELEMENT);
Line 2030  yyreduce: Line 2058  yyreduce:
     break;      break;
   
   case 110:    case 110:
 #line 636 "compile.y"  #line 664 "compile.y"
     {      {
         YYSTYPE code;          YYSTYPE code;
         {          {
Line 2043  yyreduce: Line 2071  yyreduce:
     break;      break;
   
   case 111:    case 111:
 #line 645 "compile.y"  #line 673 "compile.y"
     {      {
         // allow $result_or_other_variable[ letters here any time ]          // allow $result_or_other_variable[ letters here any time ]
         *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;          *reinterpret_cast<bool*>(&yyval)=PC.explicit_result; PC.explicit_result=false;
Line 2051  yyreduce: Line 2079  yyreduce:
     break;      break;
   
   case 112:    case 112:
 #line 648 "compile.y"  #line 676 "compile.y"
     {      {
         PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);          PC.explicit_result=*reinterpret_cast<bool*>(&yyvsp[-1]);
 ;}  ;}
     break;      break;
   
   case 113:    case 113:
 #line 650 "compile.y"  #line 678 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */          OA(*yyval, OP::OP_OBJECT_POOL, yyvsp[-2]); /* stack: empty write context */
Line 2068  yyreduce: Line 2096  yyreduce:
     break;      break;
   
   case 114:    case 114:
 #line 656 "compile.y"  #line 684 "compile.y"
     {      {
         yyval=N();           yyval=N(); 
         O(*yyval, OP::OP_WITH_READ);          O(*yyval, OP::OP_WITH_READ);
Line 2077  yyreduce: Line 2105  yyreduce:
     break;      break;
   
   case 116:    case 116:
 #line 661 "compile.y"  #line 689 "compile.y"
     { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}      { yyval=yyvsp[-1]; P(*yyval, *yyvsp[0]) ;}
     break;      break;
   
   case 117:    case 117:
 #line 662 "compile.y"  #line 690 "compile.y"
     {      {
         yyval=yyvsp[0];          yyval=yyvsp[0];
         O(*yyval, OP::OP_GET_ELEMENT__WRITE);          O(*yyval, OP::OP_GET_ELEMENT__WRITE);
Line 2090  yyreduce: Line 2118  yyreduce:
     break;      break;
   
   case 120:    case 120:
 #line 671 "compile.y"  #line 699 "compile.y"
     {      {
         yyval=yyvsp[-1]; // stack: class name string          yyval=yyvsp[-1]; // stack: class name string
         if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class          if(*LA2S(*yyval) == BASE_NAME) { // pseudo BASE class
Line 2101  yyreduce: Line 2129  yyreduce:
                         YYERROR;                          YYERROR;
                 }                  }
         }          }
 #ifdef OPTIMIZE_BYTECODE_GET_CLASS  
         // optimized OP_VALUE+origin+string+OP_GET_CLASS => OP_VALUE__GET_CLASS+origin+string          // optimized OP_VALUE+origin+string+OP_GET_CLASS => OP_VALUE__GET_CLASS+origin+string
         maybe_change_first_opcode(*yyval, OP::OP_VALUE, OP::OP_VALUE__GET_CLASS)          maybe_change_first_opcode(*yyval, OP::OP_VALUE, OP::OP_VALUE__GET_CLASS)
 #else  
         O(*yyval, OP::OP_GET_CLASS);  
 #endif  
 ;}  ;}
     break;      break;
   
   case 121:    case 121:
 #line 688 "compile.y"  #line 716 "compile.y"
     {      {
         yyval=yyvsp[-1];          yyval=yyvsp[-1];
         if(!PC.in_call_value) {          if(!PC.in_call_value) {
Line 2123  yyreduce: Line 2147  yyreduce:
     break;      break;
   
   case 128:    case 128:
 #line 707 "compile.y"  #line 735 "compile.y"
     { yyval = yyvsp[-1] ;}      { yyval = yyvsp[-1] ;}
     break;      break;
   
   case 129:    case 129:
 #line 708 "compile.y"  #line 736 "compile.y"
     { yyval = yyvsp[-1] ;}      { yyval = yyvsp[-1] ;}
     break;      break;
   
   case 130:    case 130:
 #line 709 "compile.y"  #line 737 "compile.y"
     { yyval = yyvsp[-1]; ;}      { yyval = yyvsp[-1]; ;}
     break;      break;
   
   case 131:    case 131:
 #line 711 "compile.y"  #line 739 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_NEG) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_NEG) ;}
     break;      break;
   
   case 132:    case 132:
 #line 712 "compile.y"  #line 740 "compile.y"
     { yyval=yyvsp[0] ;}      { yyval=yyvsp[0] ;}
     break;      break;
   
   case 133:    case 133:
 #line 713 "compile.y"  #line 741 "compile.y"
     { yyval=yyvsp[0];    O(*yyval, OP::OP_INV) ;}      { yyval=yyvsp[0];    O(*yyval, OP::OP_INV) ;}
     break;      break;
   
   case 134:    case 134:
 #line 714 "compile.y"  #line 742 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_NOT) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_NOT) ;}
     break;      break;
   
   case 135:    case 135:
 #line 715 "compile.y"  #line 743 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_DEF) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_DEF) ;}
     break;      break;
   
   case 136:    case 136:
 #line 716 "compile.y"  #line 744 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_IN) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_IN) ;}
     break;      break;
   
   case 137:    case 137:
 #line 717 "compile.y"  #line 745 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_FEXISTS) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_FEXISTS) ;}
     break;      break;
   
   case 138:    case 138:
 #line 718 "compile.y"  #line 746 "compile.y"
     { yyval=yyvsp[0];  O(*yyval, OP::OP_DEXISTS) ;}      { yyval=yyvsp[0];  O(*yyval, OP::OP_DEXISTS) ;}
     break;      break;
   
   case 139:    case 139:
 #line 720 "compile.y"  #line 748 "compile.y"
     {   yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_SUB) ;}      {   yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_SUB) ;}
     break;      break;
   
   case 140:    case 140:
 #line 721 "compile.y"  #line 749 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_ADD) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_ADD) ;}
     break;      break;
   
   case 141:    case 141:
 #line 722 "compile.y"  #line 750 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_MUL) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_MUL) ;}
     break;      break;
   
   case 142:    case 142:
 #line 723 "compile.y"  #line 751 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_DIV) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_DIV) ;}
     break;      break;
   
   case 143:    case 143:
 #line 724 "compile.y"  #line 752 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_MOD) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_MOD) ;}
     break;      break;
   
   case 144:    case 144:
 #line 725 "compile.y"  #line 753 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_INTDIV) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_INTDIV) ;}
     break;      break;
   
   case 145:    case 145:
 #line 726 "compile.y"  #line 754 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_SL) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_SL) ;}
     break;      break;
   
   case 146:    case 146:
 #line 727 "compile.y"  #line 755 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_SR) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_SR) ;}
     break;      break;
   
   case 147:    case 147:
 #line 728 "compile.y"  #line 756 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_AND) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_AND) ;}
     break;      break;
   
   case 148:    case 148:
 #line 729 "compile.y"  #line 757 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_OR) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_OR) ;}
     break;      break;
   
   case 149:    case 149:
 #line 730 "compile.y"  #line 758 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_XOR) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_BIN_XOR) ;}
     break;      break;
   
   case 150:    case 150:
 #line 731 "compile.y"  #line 759 "compile.y"
     { yyval=yyvsp[-2];  OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP::OP_LOG_AND) ;}      { yyval=yyvsp[-2];  OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP::OP_LOG_AND) ;}
     break;      break;
   
   case 151:    case 151:
 #line 732 "compile.y"  #line 760 "compile.y"
     { yyval=yyvsp[-2];  OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP::OP_LOG_OR) ;}      { yyval=yyvsp[-2];  OA(*yyval, OP::OP_NESTED_CODE, yyvsp[0]);  O(*yyval, OP::OP_LOG_OR) ;}
     break;      break;
   
   case 152:    case 152:
 #line 733 "compile.y"  #line 761 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_LOG_XOR) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_LOG_XOR) ;}
     break;      break;
   
   case 153:    case 153:
 #line 734 "compile.y"  #line 762 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_LT) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_LT) ;}
     break;      break;
   
   case 154:    case 154:
 #line 735 "compile.y"  #line 763 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_GT) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_GT) ;}
     break;      break;
   
   case 155:    case 155:
 #line 736 "compile.y"  #line 764 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_LE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_LE) ;}
     break;      break;
   
   case 156:    case 156:
 #line 737 "compile.y"  #line 765 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_GE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_GE) ;}
     break;      break;
   
   case 157:    case 157:
 #line 738 "compile.y"  #line 766 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_EQ) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_EQ) ;}
     break;      break;
   
   case 158:    case 158:
 #line 739 "compile.y"  #line 767 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_NE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_NUM_NE) ;}
     break;      break;
   
   case 159:    case 159:
 #line 740 "compile.y"  #line 768 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_LT) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_LT) ;}
     break;      break;
   
   case 160:    case 160:
 #line 741 "compile.y"  #line 769 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_GT) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_GT) ;}
     break;      break;
   
   case 161:    case 161:
 #line 742 "compile.y"  #line 770 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_LE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_LE) ;}
     break;      break;
   
   case 162:    case 162:
 #line 743 "compile.y"  #line 771 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_GE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_GE) ;}
     break;      break;
   
   case 163:    case 163:
 #line 744 "compile.y"  #line 772 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_EQ) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_EQ) ;}
     break;      break;
   
   case 164:    case 164:
 #line 745 "compile.y"  #line 773 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_NE) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_STR_NE) ;}
     break;      break;
   
   case 165:    case 165:
 #line 746 "compile.y"  #line 774 "compile.y"
     { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_IS) ;}      { yyval=yyvsp[-2];  P(*yyval, *yyvsp[0]);  O(*yyval, OP::OP_IS) ;}
     break;      break;
   
   case 166:    case 166:
 #line 749 "compile.y"  #line 777 "compile.y"
     {      {
         // optimized OP_STRING => OP_VALUE for doubles          // optimized OP_STRING => OP_VALUE for doubles
         maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0]));          maybe_change_string_literal_to_double_literal(*(yyval=yyvsp[0]));
Line 2321  yyreduce: Line 2345  yyreduce:
     break;      break;
   
   case 167:    case 167:
 #line 754 "compile.y"  #line 782 "compile.y"
     {      {
 #ifdef OPTIMIZE_BYTECODE_STRING_POOL  #ifdef OPTIMIZE_BYTECODE_STRING_POOL
         // it brakes ^if(" 09 "){...}          // it brakes ^if(" 09 "){...}
Line 2343  yyreduce: Line 2367  yyreduce:
     break;      break;
   
   case 168:    case 168:
 #line 775 "compile.y"  #line 803 "compile.y"
     {      {
         // optimized OP_STRING+OP_WRITE_VALUE => OP_STRING__WRITE          // optimized OP_STRING+OP_WRITE_VALUE => OP_STRING__WRITE
         change_string_literal_to_write_string_literal(*(yyval=yyvsp[0]))          change_string_literal_to_write_string_literal(*(yyval=yyvsp[0]))
Line 2351  yyreduce: Line 2375  yyreduce:
     break;      break;
   
   case 169:    case 169:
 #line 780 "compile.y"  #line 808 "compile.y"
     { yyval=VL(/*we know that we will not change it*/const_cast<VVoid*>(&vvoid), 0, 0, 0) ;}      { yyval=VL(/*we know that we will not change it*/const_cast<VVoid*>(&vvoid), 0, 0, 0) ;}
     break;      break;
   
   case 170:    case 170:
 #line 781 "compile.y"  #line 809 "compile.y"
     { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vtrue), 0, 0, 0) ;}      { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vtrue), 0, 0, 0) ;}
     break;      break;
   
   case 171:    case 171:
 #line 782 "compile.y"  #line 810 "compile.y"
     { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vfalse), 0, 0, 0) ;}      { yyval = VL(/*we know that we will not change it*/const_cast<VBool*>(&vfalse), 0, 0, 0) ;}
     break;      break;
   
   case 172:    case 172:
 #line 784 "compile.y"  #line 812 "compile.y"
     { yyval=N() ;}      { yyval=N() ;}
     break;      break;
   
Line 2374  yyreduce: Line 2398  yyreduce:
     }      }
   
 /* Line 1010 of yacc.c.  */  /* Line 1010 of yacc.c.  */
 #line 2378 "compile.tab.C"  #line 2406 "compile.tab.C"
   
   yyvsp -= yylen;    yyvsp -= yylen;
   yyssp -= yylen;    yyssp -= yylen;
Line 2599  yyreturn: Line 2623  yyreturn:
 }  }
   
   
 #line 786 "compile.y"  #line 814 "compile.y"
   
 #endif  #endif
   
Line 3139  default: Line 3163  default:
                         case ']': case '}': case ')':                           case ']': case '}': case ')': 
                         case '"': case '\'':                          case '"': case '\'':
                         case '<': case '>':  // these stand for HTML brackets AND expression binary ops                          case '<': case '>':  // these stand for HTML brackets AND expression binary ops
                         case '+': case '*': case '/': case '%':                           case '+': case '*': case '/': case '\\': case '%': 
                         case '&': case '|':                           case '&': case '|': 
                         case '=': case '!':                          case '=': case '!':
                         // common delimiters                          // common delimiters

Removed from v.1.138  
changed lines
  Added in v.1.147


E-mail: