pike.git
/
src
/
docode.c
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/docode.c:2806:
bitmask |= 1 << idx; } } if (bitmask) { emit1(F_SAVE_LOCALS, (offset << 16) | bitmask); } } } /* Used to generate code for functions. */
-
INT32 do_code_block(node *n)
+
INT32 do_code_block(node *n
, int identifier_flags
)
{ struct compilation *c = THIS_COMPILATION; struct reference *id = NULL;
-
struct identifier *i = NULL;
+
INT32 entry_point; int aggregate_cnum = -1; #ifdef PIKE_DEBUG if (current_stack_depth != -4711) Pike_fatal("Reentrance in do_code_block().\n"); current_stack_depth = 0; #endif if (Pike_compiler->compiler_frame->current_function_number >= 0) { id = Pike_compiler->new_program->identifier_references + Pike_compiler->compiler_frame->current_function_number;
-
i = ID_FROM_PTR(Pike_compiler->new_program, id);
+
} init_bytecode(); label_no=1; /* NOTE: This is no ordinary label... */ low_insert_label(0); emit0(F_ENTRY); emit0(F_START_FUNCTION); if (Pike_compiler->compiler_frame->num_args) { emit2(F_FILL_STACK, Pike_compiler->compiler_frame->num_args, 1); } emit1(F_MARK_AT, Pike_compiler->compiler_frame->num_args);
-
if (
i && i->
identifier_flags & IDENTIFIER_VARARGS) {
+
if (identifier_flags & IDENTIFIER_VARARGS) {
struct svalue *sval = simple_mapping_string_lookup(get_builtin_constants(), "aggregate"); if (!sval) { yyerror("predef::aggregate() is missing.\n"); Pike_fatal("No aggregate!\n"); UNREACHABLE(return 0); } aggregate_cnum = store_constant(sval, 0, NULL); emit1(F_CALL_BUILTIN, aggregate_cnum); if (Pike_compiler->compiler_frame->max_number_of_locals !=
pike.git/src/docode.c:2893:
/* NOTE: This is no ordinary label... */ low_insert_label(Pike_compiler->compiler_frame->recur_label); emit0(F_ENTRY); emit0(F_START_FUNCTION); if (Pike_compiler->compiler_frame->num_args) { emit2(F_FILL_STACK, Pike_compiler->compiler_frame->num_args, 1); } emit1(F_MARK_AT, Pike_compiler->compiler_frame->num_args);
-
if (
i && i->
identifier_flags & IDENTIFIER_VARARGS) {
+
if (identifier_flags & IDENTIFIER_VARARGS) {
emit1(F_CALL_BUILTIN, aggregate_cnum); if (Pike_compiler->compiler_frame->max_number_of_locals != Pike_compiler->compiler_frame->num_args+1) { emit2(F_FILL_STACK, Pike_compiler->compiler_frame->max_number_of_locals, 0); } emit2(F_INIT_FRAME, Pike_compiler->compiler_frame->num_args+1, Pike_compiler->compiler_frame->max_number_of_locals); } else { emit0(F_POP_TO_MARK);