{%DEFINES%} ZEND_API void {%EXECUTOR_NAME%}(zend_op_array *op_array TSRMLS_DC) { zend_execute_data execute_data; {%HELPER_VARS%} {%INTERNAL_LABELS%} if (EG(exception)) { return; } /* Initialize execute_data */ EX(fbc) = NULL; EX(called_scope) = NULL; EX(object) = NULL; EX(old_error_reporting) = NULL; if (op_array->T < TEMP_VAR_STACK_LIMIT) { EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T); } else { EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0); } EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var); memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var); EX(op_array) = op_array; EX(original_in_execution) = EG(in_execution); EX(symbol_table) = EG(active_symbol_table); EX(prev_execute_data) = EG(current_execute_data); EG(current_execute_data) = &execute_data; EG(in_execution) = 1; if (op_array->start_op) { ZEND_VM_SET_OPCODE(op_array->start_op); } else { ZEND_VM_SET_OPCODE(op_array->opcodes); } if (op_array->uses_this && EG(This)) { Z_ADDREF_P(EG(This)); /* For $this pointer */ if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) { Z_DELREF_P(EG(This)); } } EG(opline_ptr) = &EX(opline); EX(function_state).function = (zend_function *) op_array; while (1) { {%ZEND_VM_CONTINUE_LABEL%} #ifdef ZEND_WIN32 if (EG(timed_out)) { zend_timeout(0); } #endif {%ZEND_VM_DISPATCH%} { {%INTERNAL_EXECUTOR%} } } zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen"); } {%EXTERNAL_EXECUTOR%} void {%INITIALIZER_NAME%}(void) { {%EXTERNAL_LABELS%} }