pike.git/
src/
language.yacc
Branch:
Tag:
Non-build tags
All tags
No tags
2016-05-13
2016-05-13 12:29:00 by Henrik Grubbström (Grubba) <grubba@grubba.org>
8457546e0ed82268de0b765b99891289ef460f8e (
105
lines) (+
38
/-
67
)
[
Show
|
Annotate
]
Branch:
8.1
Compiler: Reduce code duplication somewhat.
Adds productions save_{locals,block_level}.
269:
%type <number> optional_comma %type <number> optional_constant %type <number> optional_create_arguments
+
%type <number> save_block_level
+
%type <number> save_locals
%type <str> magic_identifiers %type <str> magic_identifiers1
2859:
} ;
-
cond
:
TOK_IF
+
save_locals
:
/* empty */
{
-
$<number
>
$
=Pike_compiler->compiler_frame->current_number_of_locals;
+
Pike_compiler-
>
compiler_frame->last_block_level
=
+
$$ =
Pike_compiler->compiler_frame->current_number_of_locals;
}
-
line
_
number
_
info
+
;
+
+
save
_
block
_
level: /* empty */
{ /* Trick to store more than one number on compiler stack - Hubbe */
-
$<number>$
=
Pike_compiler->compiler_frame->last_block_level;
-
Pike_compiler->compiler_frame->last_block_level
=$<number>2
;
+
$$
= Pike_compiler->compiler_frame->last_block_level;
}
-
+
;
+
+
cond: TOK_IF save_block_level save_locals line_number_info
'(' safe_comma_expr end_cond statement optional_else_part { $$ = mknode('?', $6, mknode(':', mkcastnode(void_type_string, $8), mkcastnode(void_type_string, $9)));
-
COPY_LINE_NUMBER_INFO($$,
$3
);
+
COPY_LINE_NUMBER_INFO($$,
$4
);
$$ = mkcastnode(void_type_string, $$);
-
COPY_LINE_NUMBER_INFO($$,
$3
);
-
free_node
(
$3
);
-
$$ = pop_local_variables(
$<number>2
, $$);
-
Pike_compiler->compiler_frame->last_block_level=
$<number>4
;
+
COPY_LINE_NUMBER_INFO($$,
$4
);
+
free_node(
$4
);
+
$$ = pop_local_variables(
$3
, $$);
+
Pike_compiler->compiler_frame->last_block_level
=
$2
;
} ;
2926:
{ $$=mknode(':',$2,$4); } ;
-
foreach: TOK_FOREACH
-
{
-
$<number>$=Pike
_
compiler->compiler
_
frame->current
_
number_of_
locals
;
-
}
-
line_number_info
-
{
-
/* Trick to store more than one number on compiler stack - Hubbe */
-
$<number>$=Pike_compiler->compiler_frame->last_block_level;
-
Pike_compiler->compiler_frame->last_block_level=$<number>2;
-
}
+
foreach: TOK_FOREACH
save
_
block
_
level save
_locals line_number_info
'(' expr0 foreach_lvalues end_cond { /* Fix AUTO type. */
3004:
/* Error in lvalue */ $$=mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $6), $10); }
-
COPY_LINE_NUMBER_INFO($$,
$3
);
-
free_node
(
$3
);
-
$$ = pop_local_variables(
$<number>2
, $$);
-
Pike_compiler->compiler_frame->last_block_level=
$<number>4
;
+
COPY_LINE_NUMBER_INFO($$,
$4
);
+
free_node(
$4
);
+
$$ = pop_local_variables(
$3
, $$);
+
Pike_compiler->compiler_frame->last_block_level
=
$2
;
Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS; } ;
3044:
} ;
-
for: TOK_FOR
-
{
-
$<number>$=Pike
_
compiler->compiler
_
frame->current
_
number_of_
locals
;
-
}
-
line_number_info
-
{
-
/* Trick to store more than one number on compiler stack - Hubbe */
-
$<number>$=Pike_compiler->compiler_frame->last_block_level;
-
Pike_compiler->compiler_frame->last_block_level=$<number>2;
-
}
+
for: TOK_FOR
save
_
block
_
level save
_locals line_number_info
'(' unused expected_semicolon for_expr expected_semicolon unused end_cond statement { $$=mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $6), mknode(F_FOR,$8,mknode(':',$12,$10)));
-
COPY_LINE_NUMBER_INFO($$,
$3
);
-
free_node
(
$3
);
-
$$ = pop_local_variables(
$<number>2
, $$);
-
Pike_compiler->compiler_frame->last_block_level=
$<number>4
;
+
COPY_LINE_NUMBER_INFO($$,
$4
);
+
free_node(
$4
);
+
$$ = pop_local_variables(
$3
, $$);
+
Pike_compiler->compiler_frame->last_block_level
=
$2
;
Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS; } ;
-
-
while:
TOK_WHILE
-
{
-
$<number>$=Pike
_
compiler->compiler
_
frame->current
_
number_of_
locals
;
-
}
-
line_number_info
-
{
-
/* Trick to store more than one number on compiler stack - Hubbe */
-
$<number>$=Pike_compiler->compiler_frame->last_block_level;
-
Pike_compiler->compiler_frame->last_block_level=$<number>2;
-
}
+
while: TOK_WHILE
save
_
block
_
level save
_locals line_number_info
'(' safe_comma_expr end_cond statement { $$=mknode(F_FOR,$6,mknode(':',$8,NULL));
-
COPY_LINE_NUMBER_INFO($$,
$3
);
-
free_node
(
$3
);
-
$$ = pop_local_variables(
$<number>2
, $$);
-
Pike_compiler->compiler_frame->last_block_level=
$<number>4
;
+
COPY_LINE_NUMBER_INFO($$,
$4
);
+
free_node(
$4
);
+
$$ = pop_local_variables(
$3
, $$);
+
Pike_compiler->compiler_frame->last_block_level
=
$2
;
Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS; } ;
3093:
| safe_comma_expr ;
-
switch: TOK_SWITCH
-
{
-
$<number>$=Pike
_
compiler->compiler
_
frame->current
_
number_of_
locals
;
-
}
-
line_number_info
-
{
-
/* Trick to store more than one number on compiler stack - Hubbe */
-
$<number>$=Pike_compiler->compiler_frame->last_block_level;
-
Pike_compiler->compiler_frame->last_block_level=$<number>2;
-
}
+
switch: TOK_SWITCH
save
_
block
_
level save
_locals line_number_info
'(' safe_comma_expr end_cond statement { $$=mknode(F_SWITCH,$6,$8);
-
COPY_LINE_NUMBER_INFO($$,
$3
);
-
free_node
(
$3
);
-
$$ = pop_local_variables(
$<number>2
, $$);
-
Pike_compiler->compiler_frame->last_block_level=
$<number>4
;
+
COPY_LINE_NUMBER_INFO($$,
$4
);
+
free_node(
$4
);
+
$$ = pop_local_variables(
$3
, $$);
+
Pike_compiler->compiler_frame->last_block_level
=
$2
;
} ;