diff --git a/Zend/zend_vm_gen.php b/Zend/zend_vm_gen.php index 3eddeefbeba..551599d7ace 100644 --- a/Zend/zend_vm_gen.php +++ b/Zend/zend_vm_gen.php @@ -1181,6 +1181,7 @@ function gen_vm($def, $skel) { out($f, $GLOBALS['header_text']); fputs($f, "#ifndef ZEND_VM_OPCODES_H\n#define ZEND_VM_OPCODES_H\n\n"); + fputs($f, "extern ZEND_API const char *zend_vm_opcodes_map[".($max_opcode + 1)."];\n\n"); foreach ($opcodes as $code => $dsc) { $code = str_pad((string)$code,$code_len," ",STR_PAD_LEFT); @@ -1188,15 +1189,24 @@ function gen_vm($def, $skel) { fputs($f,"#define $op $code\n"); } - fputs($f,"\nstatic const char *zend_vm_opcodes_map[] = {\n"); + fputs($f, "\n#endif"); + fclose($f); + echo "zend_vm_opcodes.h generated successfully.\n"; + + // zend_vm_opcodes.c + $f = fopen(__DIR__ . "zend_vm_opcodes.c", "w+") or die("ERROR: Cannot create zend_vm_opcodes.c\n"); + + // Insert header + out($f, $GLOBALS['header_text']); + + fputs($f,"const char *zend_vm_opcodes_map[".($max_opcode + 1)."] = {\n"); for ($i = 0; $i <= $max_opcode; $i++) { fputs($f,"\t".(isset($opcodes[$i]["op"])?'"'.$opcodes[$i]["op"].'"':"NULL").",\n"); } fputs($f, "};\n"); - fputs($f, "\n#endif"); fclose($f); - echo "zend_vm_opcodes.h generated successfully.\n"; + echo "zend_vm_opcodes.c generated successfully.\n"; // Generate zend_vm_execute.h $f = fopen(__DIR__ . "/zend_vm_execute.h", "w+") or die("ERROR: Cannot create zend_vm_execute.h\n"); diff --git a/Zend/zend_vm_opcodes.c b/Zend/zend_vm_opcodes.c new file mode 100644 index 00000000000..55a0de12e92 --- /dev/null +++ b/Zend/zend_vm_opcodes.c @@ -0,0 +1,186 @@ +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.00 of the Zend license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.zend.com/license/2_00.txt. | + | If you did not receive a copy of the Zend license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@zend.com so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Andi Gutmans | + | Zeev Suraski | + | Dmitry Stogov | + +----------------------------------------------------------------------+ +*/ + +const char *zend_vm_opcodes_map[164] = { + "ZEND_NOP", + "ZEND_ADD", + "ZEND_SUB", + "ZEND_MUL", + "ZEND_DIV", + "ZEND_MOD", + "ZEND_SL", + "ZEND_SR", + "ZEND_CONCAT", + "ZEND_BW_OR", + "ZEND_BW_AND", + "ZEND_BW_XOR", + "ZEND_BW_NOT", + "ZEND_BOOL_NOT", + "ZEND_BOOL_XOR", + "ZEND_IS_IDENTICAL", + "ZEND_IS_NOT_IDENTICAL", + "ZEND_IS_EQUAL", + "ZEND_IS_NOT_EQUAL", + "ZEND_IS_SMALLER", + "ZEND_IS_SMALLER_OR_EQUAL", + "ZEND_CAST", + "ZEND_QM_ASSIGN", + "ZEND_ASSIGN_ADD", + "ZEND_ASSIGN_SUB", + "ZEND_ASSIGN_MUL", + "ZEND_ASSIGN_DIV", + "ZEND_ASSIGN_MOD", + "ZEND_ASSIGN_SL", + "ZEND_ASSIGN_SR", + "ZEND_ASSIGN_CONCAT", + "ZEND_ASSIGN_BW_OR", + "ZEND_ASSIGN_BW_AND", + "ZEND_ASSIGN_BW_XOR", + "ZEND_PRE_INC", + "ZEND_PRE_DEC", + "ZEND_POST_INC", + "ZEND_POST_DEC", + "ZEND_ASSIGN", + "ZEND_ASSIGN_REF", + "ZEND_ECHO", + "ZEND_PRINT", + "ZEND_JMP", + "ZEND_JMPZ", + "ZEND_JMPNZ", + "ZEND_JMPZNZ", + "ZEND_JMPZ_EX", + "ZEND_JMPNZ_EX", + "ZEND_CASE", + "ZEND_SWITCH_FREE", + "ZEND_BRK", + "ZEND_CONT", + "ZEND_BOOL", + "ZEND_INIT_STRING", + "ZEND_ADD_CHAR", + "ZEND_ADD_STRING", + "ZEND_ADD_VAR", + "ZEND_BEGIN_SILENCE", + "ZEND_END_SILENCE", + "ZEND_INIT_FCALL_BY_NAME", + "ZEND_DO_FCALL", + "ZEND_DO_FCALL_BY_NAME", + "ZEND_RETURN", + "ZEND_RECV", + "ZEND_RECV_INIT", + "ZEND_SEND_VAL", + "ZEND_SEND_VAR", + "ZEND_SEND_REF", + "ZEND_NEW", + "ZEND_INIT_NS_FCALL_BY_NAME", + "ZEND_FREE", + "ZEND_INIT_ARRAY", + "ZEND_ADD_ARRAY_ELEMENT", + "ZEND_INCLUDE_OR_EVAL", + "ZEND_UNSET_VAR", + "ZEND_UNSET_DIM", + "ZEND_UNSET_OBJ", + "ZEND_FE_RESET", + "ZEND_FE_FETCH", + "ZEND_EXIT", + "ZEND_FETCH_R", + "ZEND_FETCH_DIM_R", + "ZEND_FETCH_OBJ_R", + "ZEND_FETCH_W", + "ZEND_FETCH_DIM_W", + "ZEND_FETCH_OBJ_W", + "ZEND_FETCH_RW", + "ZEND_FETCH_DIM_RW", + "ZEND_FETCH_OBJ_RW", + "ZEND_FETCH_IS", + "ZEND_FETCH_DIM_IS", + "ZEND_FETCH_OBJ_IS", + "ZEND_FETCH_FUNC_ARG", + "ZEND_FETCH_DIM_FUNC_ARG", + "ZEND_FETCH_OBJ_FUNC_ARG", + "ZEND_FETCH_UNSET", + "ZEND_FETCH_DIM_UNSET", + "ZEND_FETCH_OBJ_UNSET", + "ZEND_FETCH_DIM_TMP_VAR", + "ZEND_FETCH_CONSTANT", + "ZEND_GOTO", + "ZEND_EXT_STMT", + "ZEND_EXT_FCALL_BEGIN", + "ZEND_EXT_FCALL_END", + "ZEND_EXT_NOP", + "ZEND_TICKS", + "ZEND_SEND_VAR_NO_REF", + "ZEND_CATCH", + "ZEND_THROW", + "ZEND_FETCH_CLASS", + "ZEND_CLONE", + "ZEND_RETURN_BY_REF", + "ZEND_INIT_METHOD_CALL", + "ZEND_INIT_STATIC_METHOD_CALL", + "ZEND_ISSET_ISEMPTY_VAR", + "ZEND_ISSET_ISEMPTY_DIM_OBJ", + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + NULL, + "ZEND_PRE_INC_OBJ", + "ZEND_PRE_DEC_OBJ", + "ZEND_POST_INC_OBJ", + "ZEND_POST_DEC_OBJ", + "ZEND_ASSIGN_OBJ", + NULL, + "ZEND_INSTANCEOF", + "ZEND_DECLARE_CLASS", + "ZEND_DECLARE_INHERITED_CLASS", + "ZEND_DECLARE_FUNCTION", + "ZEND_RAISE_ABSTRACT_ERROR", + "ZEND_DECLARE_CONST", + "ZEND_ADD_INTERFACE", + "ZEND_DECLARE_INHERITED_CLASS_DELAYED", + "ZEND_VERIFY_ABSTRACT_CLASS", + "ZEND_ASSIGN_DIM", + "ZEND_ISSET_ISEMPTY_PROP_OBJ", + "ZEND_HANDLE_EXCEPTION", + "ZEND_USER_OPCODE", + NULL, + "ZEND_JMP_SET", + "ZEND_DECLARE_LAMBDA_FUNCTION", + "ZEND_ADD_TRAIT", + "ZEND_BIND_TRAITS", + "ZEND_SEPARATE", + "ZEND_QM_ASSIGN_VAR", + "ZEND_JMP_SET_VAR", + "ZEND_DISCARD_EXCEPTION", + "ZEND_YIELD", + "ZEND_GENERATOR_RETURN", + "ZEND_FAST_CALL", + "ZEND_FAST_RET", +}; diff --git a/Zend/zend_vm_opcodes.h b/Zend/zend_vm_opcodes.h index 18bb0d27f71..b6f4cfc8976 100644 --- a/Zend/zend_vm_opcodes.h +++ b/Zend/zend_vm_opcodes.h @@ -21,6 +21,8 @@ #ifndef ZEND_VM_OPCODES_H #define ZEND_VM_OPCODES_H +extern ZEND_API const char *zend_vm_opcodes_map[164]; + #define ZEND_NOP 0 #define ZEND_ADD 1 #define ZEND_SUB 2 @@ -168,171 +170,4 @@ #define ZEND_FAST_CALL 162 #define ZEND_FAST_RET 163 -static const char *zend_vm_opcodes_map[] = { - "ZEND_NOP", - "ZEND_ADD", - "ZEND_SUB", - "ZEND_MUL", - "ZEND_DIV", - "ZEND_MOD", - "ZEND_SL", - "ZEND_SR", - "ZEND_CONCAT", - "ZEND_BW_OR", - "ZEND_BW_AND", - "ZEND_BW_XOR", - "ZEND_BW_NOT", - "ZEND_BOOL_NOT", - "ZEND_BOOL_XOR", - "ZEND_IS_IDENTICAL", - "ZEND_IS_NOT_IDENTICAL", - "ZEND_IS_EQUAL", - "ZEND_IS_NOT_EQUAL", - "ZEND_IS_SMALLER", - "ZEND_IS_SMALLER_OR_EQUAL", - "ZEND_CAST", - "ZEND_QM_ASSIGN", - "ZEND_ASSIGN_ADD", - "ZEND_ASSIGN_SUB", - "ZEND_ASSIGN_MUL", - "ZEND_ASSIGN_DIV", - "ZEND_ASSIGN_MOD", - "ZEND_ASSIGN_SL", - "ZEND_ASSIGN_SR", - "ZEND_ASSIGN_CONCAT", - "ZEND_ASSIGN_BW_OR", - "ZEND_ASSIGN_BW_AND", - "ZEND_ASSIGN_BW_XOR", - "ZEND_PRE_INC", - "ZEND_PRE_DEC", - "ZEND_POST_INC", - "ZEND_POST_DEC", - "ZEND_ASSIGN", - "ZEND_ASSIGN_REF", - "ZEND_ECHO", - "ZEND_PRINT", - "ZEND_JMP", - "ZEND_JMPZ", - "ZEND_JMPNZ", - "ZEND_JMPZNZ", - "ZEND_JMPZ_EX", - "ZEND_JMPNZ_EX", - "ZEND_CASE", - "ZEND_SWITCH_FREE", - "ZEND_BRK", - "ZEND_CONT", - "ZEND_BOOL", - "ZEND_INIT_STRING", - "ZEND_ADD_CHAR", - "ZEND_ADD_STRING", - "ZEND_ADD_VAR", - "ZEND_BEGIN_SILENCE", - "ZEND_END_SILENCE", - "ZEND_INIT_FCALL_BY_NAME", - "ZEND_DO_FCALL", - "ZEND_DO_FCALL_BY_NAME", - "ZEND_RETURN", - "ZEND_RECV", - "ZEND_RECV_INIT", - "ZEND_SEND_VAL", - "ZEND_SEND_VAR", - "ZEND_SEND_REF", - "ZEND_NEW", - "ZEND_INIT_NS_FCALL_BY_NAME", - "ZEND_FREE", - "ZEND_INIT_ARRAY", - "ZEND_ADD_ARRAY_ELEMENT", - "ZEND_INCLUDE_OR_EVAL", - "ZEND_UNSET_VAR", - "ZEND_UNSET_DIM", - "ZEND_UNSET_OBJ", - "ZEND_FE_RESET", - "ZEND_FE_FETCH", - "ZEND_EXIT", - "ZEND_FETCH_R", - "ZEND_FETCH_DIM_R", - "ZEND_FETCH_OBJ_R", - "ZEND_FETCH_W", - "ZEND_FETCH_DIM_W", - "ZEND_FETCH_OBJ_W", - "ZEND_FETCH_RW", - "ZEND_FETCH_DIM_RW", - "ZEND_FETCH_OBJ_RW", - "ZEND_FETCH_IS", - "ZEND_FETCH_DIM_IS", - "ZEND_FETCH_OBJ_IS", - "ZEND_FETCH_FUNC_ARG", - "ZEND_FETCH_DIM_FUNC_ARG", - "ZEND_FETCH_OBJ_FUNC_ARG", - "ZEND_FETCH_UNSET", - "ZEND_FETCH_DIM_UNSET", - "ZEND_FETCH_OBJ_UNSET", - "ZEND_FETCH_DIM_TMP_VAR", - "ZEND_FETCH_CONSTANT", - "ZEND_GOTO", - "ZEND_EXT_STMT", - "ZEND_EXT_FCALL_BEGIN", - "ZEND_EXT_FCALL_END", - "ZEND_EXT_NOP", - "ZEND_TICKS", - "ZEND_SEND_VAR_NO_REF", - "ZEND_CATCH", - "ZEND_THROW", - "ZEND_FETCH_CLASS", - "ZEND_CLONE", - "ZEND_RETURN_BY_REF", - "ZEND_INIT_METHOD_CALL", - "ZEND_INIT_STATIC_METHOD_CALL", - "ZEND_ISSET_ISEMPTY_VAR", - "ZEND_ISSET_ISEMPTY_DIM_OBJ", - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - NULL, - "ZEND_PRE_INC_OBJ", - "ZEND_PRE_DEC_OBJ", - "ZEND_POST_INC_OBJ", - "ZEND_POST_DEC_OBJ", - "ZEND_ASSIGN_OBJ", - NULL, - "ZEND_INSTANCEOF", - "ZEND_DECLARE_CLASS", - "ZEND_DECLARE_INHERITED_CLASS", - "ZEND_DECLARE_FUNCTION", - "ZEND_RAISE_ABSTRACT_ERROR", - "ZEND_DECLARE_CONST", - "ZEND_ADD_INTERFACE", - "ZEND_DECLARE_INHERITED_CLASS_DELAYED", - "ZEND_VERIFY_ABSTRACT_CLASS", - "ZEND_ASSIGN_DIM", - "ZEND_ISSET_ISEMPTY_PROP_OBJ", - "ZEND_HANDLE_EXCEPTION", - "ZEND_USER_OPCODE", - NULL, - "ZEND_JMP_SET", - "ZEND_DECLARE_LAMBDA_FUNCTION", - "ZEND_ADD_TRAIT", - "ZEND_BIND_TRAITS", - "ZEND_SEPARATE", - "ZEND_QM_ASSIGN_VAR", - "ZEND_JMP_SET_VAR", - "ZEND_DISCARD_EXCEPTION", - "ZEND_YIELD", - "ZEND_GENERATOR_RETURN", - "ZEND_FAST_CALL", - "ZEND_FAST_RET", -}; - #endif \ No newline at end of file