|
|
| version 1.182, 2002/02/18 15:21:01 | version 1.186.2.1, 2002/05/07 07:23:10 |
|---|---|
| Line 107 static int yylex(YYSTYPE *lvalp, void *p | Line 107 static int yylex(YYSTYPE *lvalp, void *p |
| all: | all: |
| one_big_piece { | one_big_piece { |
| Method& method=*NEW Method(POOL, | Method& method=*NEW Method(POOL, |
| *main_method_name, | PC.request->main_method_name, |
| Method::CT_ANY, | 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*/, |
| $1/*parser_code*/, 0/*native_code*/); | $1/*parser_code*/, 0/*native_code*/); |
| PC.cclass->add_method(*main_method_name, method); | PC.cclass->add_method(PC.request->main_method_name, method); |
| } | } |
| | methods; | | methods; |
| Line 239 action: get | put | call; | Line 239 action: get | put | call; |
| /* get */ | /* get */ |
| get: get_value { | get: get_value { |
| $$=$1; /* stack: resulting value */ | $$=$1; /* stack: resulting value */ |
| O($$, OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | changetail_or_append($$, |
| OP_GET_ELEMENT, false, /*->*/OP_GET_ELEMENT__WRITE, | |
| /*or */OP_WRITE_VALUE | |
| ); /* value=pop; wcontext.write(value) */ | |
| }; | }; |
| get_value: '$' get_name_value { $$=$2 }; | get_value: '$' get_name_value { $$=$2 }; |
| get_name_value: name_without_curly_rdive EON | name_in_curly_rdive; | get_name_value: name_without_curly_rdive EON | name_in_curly_rdive; |
| Line 329 construct_round: '(' expr_value ')' { | Line 332 construct_round: '(' expr_value ')' { |
| construct_curly: '{' maybe_codes '}' { | construct_curly: '{' maybe_codes '}' { |
| // stack: context, name | // stack: context, name |
| $$=N(POOL); | $$=N(POOL); |
| CCA($$, $2); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */ | OA($$, OP_CURLY_CODE__CONSTRUCT, $2); /* code=pop; name=pop; context=pop; construct(context,name,junction(code)) */ |
| }; | }; |
| any_constructor_code_value: | any_constructor_code_value: |
| Line 339 any_constructor_code_value: | Line 342 any_constructor_code_value: |
| ; | ; |
| constructor_code_value: constructor_code { | constructor_code_value: constructor_code { |
| $$=N(POOL); | $$=N(POOL); |
| O($$, OP_CREATE_EWPOOL); /* stack: empty write context */ | OA($$, OP_OBJECT_POOL, $1); /* stack: empty write context */ |
| P($$, $1); /* some code that writes to that context */ | /* some code that writes to that context */ |
| O($$, OP_REDUCE_EWPOOL); /* context=pop; stack: context.value() */ | /* context=pop; stack: context.value() */ |
| }; | }; |
| constructor_code: codes__excluding_sole_str_literal; | constructor_code: codes__excluding_sole_str_literal; |
| codes__excluding_sole_str_literal: action | code codes { $$=$1; P($$, $2) }; | codes__excluding_sole_str_literal: action | code codes { $$=$1; P($$, $2) }; |
| Line 350 codes__excluding_sole_str_literal: actio | Line 353 codes__excluding_sole_str_literal: actio |
| call: call_value { | call: call_value { |
| $$=$1; /* stack: value */ | $$=$1; /* stack: value */ |
| O($$, OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | changetail_or_append($$, |
| OP_CALL, true, /*->*/ OP_CALL__WRITE, | |
| /*or */OP_WRITE_VALUE); /* value=pop; wcontext.write(value) */ | |
| }; | }; |
| call_value: '^' { | call_value: '^' { |
| PC.in_call_value=true; | PC.in_call_value=true; |
| Line 360 call_value: '^' { | Line 365 call_value: '^' { |
| } | } |
| store_params EON { /* ^field.$method{vasya} */ | store_params EON { /* ^field.$method{vasya} */ |
| $$=$3; /* with_xxx,diving code; stack: context,method_junction */ | $$=$3; /* with_xxx,diving code; stack: context,method_junction */ |
| O($$, OP_GET_METHOD_FRAME); /* stack: context,method_frame */ | |
| YYSTYPE params_code=$5; | YYSTYPE params_code=$5; |
| if(params_code->size()==3) // probably [] case. [OP_VALUE + Void + STORE_PARAM] | if(params_code->size()==3) { // probably [] case. [OP_VALUE + Void + STORE_PARAM] |
| if(Value *value=LA2V(params_code)) // it is OP_VALUE + value? | if(Value *value=LA2V(params_code)) // it is OP_VALUE + 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. |
| if(params_code) | } |
| P($$, params_code); // filling method_frame.store_params | /* stack: context, method_junction */ |
| O($$, OP_CALL); // method_frame=pop; ncontext=pop; call(ncontext,method_frame) stack: value | OA($$, OP_CALL, params_code); // method_frame=make frame(pop junction); ncontext=pop; call(ncontext,method_frame) stack: value |
| }; | }; |
| call_name: name_without_curly_rdive; | call_name: name_without_curly_rdive; |
| Line 401 store_code_param_part: code_param_value | Line 405 store_code_param_part: code_param_value |
| }; | }; |
| store_expr_param_part: write_expr_value { | store_expr_param_part: write_expr_value { |
| $$=N(POOL); | $$=N(POOL); |
| PEA($$, $1); | OA($$, OP_EXPR_CODE__STORE_PARAM, $1); |
| }; | }; |
| store_curly_param_part: maybe_codes { | store_curly_param_part: maybe_codes { |
| $$=N(POOL); | $$=N(POOL); |
| PCA($$, $1); | OA($$, OP_CURLY_CODE__STORE_PARAM, $1); |
| }; | }; |
| code_param_value: | code_param_value: |
| void_value /* optimized [;...] case */ | void_value /* optimized [;...] case */ |
| Line 451 name_expr_subvar_value: '$' subvar_ref_n | Line 455 name_expr_subvar_value: '$' subvar_ref_n |
| O($$, OP_GET_ELEMENT); | O($$, OP_GET_ELEMENT); |
| }; | }; |
| name_expr_with_subvar_value: STRING subvar_get_writes { | name_expr_with_subvar_value: STRING subvar_get_writes { |
| Array *code; | |
| { | |
| change_string_literal_to_write_string_literal(code=$1); | |
| P(code, $2); | |
| } | |
| $$=N(POOL); | $$=N(POOL); |
| O($$, OP_CREATE_EWPOOL); | OA($$, OP_STRING_POOL, code); |
| P($$, $1); | |
| O($$, OP_WRITE_VALUE); | |
| P($$, $2); | |
| O($$, OP_REDUCE_EWPOOL); | |
| }; | }; |
| name_square_code_value: '[' codes ']' { | name_square_code_value: '[' codes ']' { |
| $$=N(POOL); | $$=N(POOL); |
| O($$, OP_CREATE_EWPOOL); | OA($$, OP_OBJECT_POOL, $2); /* stack: empty write context */ |
| P($$, $2); | /* some code that writes to that context */ |
| O($$, OP_REDUCE_EWPOOL); | /* context=pop; stack: context.value() */ |
| }; | }; |
| subvar_ref_name_rdive: STRING { | subvar_ref_name_rdive: STRING { |
| $$=N(POOL); | $$=N(POOL); |
| Line 526 expr: | Line 531 expr: |
| | expr '&' expr { $$=$1; P($$, $3); O($$, OP_BIN_AND) } | | expr '&' expr { $$=$1; P($$, $3); O($$, OP_BIN_AND) } |
| | expr '|' expr { $$=$1; P($$, $3); O($$, OP_BIN_OR) } | | expr '|' expr { $$=$1; P($$, $3); O($$, OP_BIN_OR) } |
| | expr '#' expr { $$=$1; P($$, $3); O($$, OP_BIN_XOR) } | | expr '#' expr { $$=$1; P($$, $3); O($$, OP_BIN_XOR) } |
| | expr "&&" expr { $$=$1; PNC($$, $3); O($$, OP_LOG_AND) } | | expr "&&" expr { $$=$1; OA($$, OP_NESTED_CODE, $3); O($$, OP_LOG_AND) } |
| | expr "||" expr { $$=$1; PNC($$, $3); O($$, OP_LOG_OR) } | | expr "||" expr { $$=$1; OA($$, OP_NESTED_CODE, $3); O($$, OP_LOG_OR) } |
| | expr "##" expr { $$=$1; P($$, $3); O($$, OP_LOG_XOR) } | | expr "##" expr { $$=$1; P($$, $3); O($$, OP_LOG_XOR) } |
| | expr '<' expr { $$=$1; P($$, $3); O($$, OP_NUM_LT) } | | expr '<' expr { $$=$1; P($$, $3); O($$, OP_NUM_LT) } |
| | expr '>' expr { $$=$1; P($$, $3); O($$, OP_NUM_GT) } | | expr '>' expr { $$=$1; P($$, $3); O($$, OP_NUM_GT) } |
| Line 546 expr: | Line 551 expr: |
| string_inside_quotes_value: maybe_codes { | string_inside_quotes_value: maybe_codes { |
| $$=N(POOL); | $$=N(POOL); |
| O($$, OP_CREATE_SWPOOL); /* stack: empty write context */ | OA($$, OP_STRING_POOL, $1); /* stack: empty write context */ |
| P($$, $1); /* some code that writes to that context */ | /* some code that writes to that context */ |
| O($$, OP_REDUCE_SWPOOL); /* context=pop; stack: context.get_string() */ | /* context=pop; stack: context.get_string() */ |
| }; | }; |
| /* basics */ | /* basics */ |