Skip to content

Commit 50d50c2

Browse files
committed
Added an opcode to opcode name map
That way extensions etc. don't have to maintain their own lists anymore. Also as phpdbg is included and needs such a map, it'd be counterproductive to need to change two things on every new opcode.
1 parent a6fa520 commit 50d50c2

File tree

2 files changed

+177
-0
lines changed

2 files changed

+177
-0
lines changed

Zend/zend_vm_gen.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,11 +1201,21 @@ function gen_vm($def, $skel) {
12011201
// Insert header
12021202
out($f, $GLOBALS['header_text']);
12031203

1204+
fputs($f, "#ifndef ZEND_VM_OPCODES_H\n#define ZEND_VM_OPCODES_H\n\n");
1205+
12041206
foreach ($opcodes as $code => $dsc) {
12051207
$code = str_pad((string)$code,$code_len," ",STR_PAD_LEFT);
12061208
$op = str_pad($dsc["op"],$max_opcode_len);
12071209
fputs($f,"#define $op $code\n");
12081210
}
1211+
1212+
fputs($f,"\nconst char *zend_vm_opcodes_map[] = {\n");
1213+
for ($i = 0; $i <= $max_opcode; $i++) {
1214+
fputs($f,"\t".(isset($opcodes[$i]["op"])?'"'.$opcodes[$i]["op"].'"':"NULL").",\n");
1215+
}
1216+
fputs($f, "};\n");
1217+
1218+
fputs($f, "\n#endif");
12091219
fclose($f);
12101220
echo "zend_vm_opcodes.h generated successfully.\n";
12111221

Zend/zend_vm_opcodes.h

Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
+----------------------------------------------------------------------+
1919
*/
2020

21+
#ifndef ZEND_VM_OPCODES_H
22+
#define ZEND_VM_OPCODES_H
23+
2124
#define ZEND_NOP 0
2225
#define ZEND_ADD 1
2326
#define ZEND_SUB 2
@@ -159,3 +162,167 @@
159162
#define ZEND_SEPARATE 156
160163
#define ZEND_QM_ASSIGN_VAR 157
161164
#define ZEND_JMP_SET_VAR 158
165+
166+
const char *zend_vm_opcodes_map[] = {
167+
"ZEND_NOP",
168+
"ZEND_ADD",
169+
"ZEND_SUB",
170+
"ZEND_MUL",
171+
"ZEND_DIV",
172+
"ZEND_MOD",
173+
"ZEND_SL",
174+
"ZEND_SR",
175+
"ZEND_CONCAT",
176+
"ZEND_BW_OR",
177+
"ZEND_BW_AND",
178+
"ZEND_BW_XOR",
179+
"ZEND_BW_NOT",
180+
"ZEND_BOOL_NOT",
181+
"ZEND_BOOL_XOR",
182+
"ZEND_IS_IDENTICAL",
183+
"ZEND_IS_NOT_IDENTICAL",
184+
"ZEND_IS_EQUAL",
185+
"ZEND_IS_NOT_EQUAL",
186+
"ZEND_IS_SMALLER",
187+
"ZEND_IS_SMALLER_OR_EQUAL",
188+
"ZEND_CAST",
189+
"ZEND_QM_ASSIGN",
190+
"ZEND_ASSIGN_ADD",
191+
"ZEND_ASSIGN_SUB",
192+
"ZEND_ASSIGN_MUL",
193+
"ZEND_ASSIGN_DIV",
194+
"ZEND_ASSIGN_MOD",
195+
"ZEND_ASSIGN_SL",
196+
"ZEND_ASSIGN_SR",
197+
"ZEND_ASSIGN_CONCAT",
198+
"ZEND_ASSIGN_BW_OR",
199+
"ZEND_ASSIGN_BW_AND",
200+
"ZEND_ASSIGN_BW_XOR",
201+
"ZEND_PRE_INC",
202+
"ZEND_PRE_DEC",
203+
"ZEND_POST_INC",
204+
"ZEND_POST_DEC",
205+
"ZEND_ASSIGN",
206+
"ZEND_ASSIGN_REF",
207+
"ZEND_ECHO",
208+
"ZEND_PRINT",
209+
"ZEND_JMP",
210+
"ZEND_JMPZ",
211+
"ZEND_JMPNZ",
212+
"ZEND_JMPZNZ",
213+
"ZEND_JMPZ_EX",
214+
"ZEND_JMPNZ_EX",
215+
"ZEND_CASE",
216+
"ZEND_SWITCH_FREE",
217+
"ZEND_BRK",
218+
"ZEND_CONT",
219+
"ZEND_BOOL",
220+
"ZEND_INIT_STRING",
221+
"ZEND_ADD_CHAR",
222+
"ZEND_ADD_STRING",
223+
"ZEND_ADD_VAR",
224+
"ZEND_BEGIN_SILENCE",
225+
"ZEND_END_SILENCE",
226+
"ZEND_INIT_FCALL_BY_NAME",
227+
"ZEND_DO_FCALL",
228+
"ZEND_DO_FCALL_BY_NAME",
229+
"ZEND_RETURN",
230+
"ZEND_RECV",
231+
"ZEND_RECV_INIT",
232+
"ZEND_SEND_VAL",
233+
"ZEND_SEND_VAR",
234+
"ZEND_SEND_REF",
235+
"ZEND_NEW",
236+
"ZEND_INIT_NS_FCALL_BY_NAME",
237+
"ZEND_FREE",
238+
"ZEND_INIT_ARRAY",
239+
"ZEND_ADD_ARRAY_ELEMENT",
240+
"ZEND_INCLUDE_OR_EVAL",
241+
"ZEND_UNSET_VAR",
242+
"ZEND_UNSET_DIM",
243+
"ZEND_UNSET_OBJ",
244+
"ZEND_FE_RESET",
245+
"ZEND_FE_FETCH",
246+
"ZEND_EXIT",
247+
"ZEND_FETCH_R",
248+
"ZEND_FETCH_DIM_R",
249+
"ZEND_FETCH_OBJ_R",
250+
"ZEND_FETCH_W",
251+
"ZEND_FETCH_DIM_W",
252+
"ZEND_FETCH_OBJ_W",
253+
"ZEND_FETCH_RW",
254+
"ZEND_FETCH_DIM_RW",
255+
"ZEND_FETCH_OBJ_RW",
256+
"ZEND_FETCH_IS",
257+
"ZEND_FETCH_DIM_IS",
258+
"ZEND_FETCH_OBJ_IS",
259+
"ZEND_FETCH_FUNC_ARG",
260+
"ZEND_FETCH_DIM_FUNC_ARG",
261+
"ZEND_FETCH_OBJ_FUNC_ARG",
262+
"ZEND_FETCH_UNSET",
263+
"ZEND_FETCH_DIM_UNSET",
264+
"ZEND_FETCH_OBJ_UNSET",
265+
"ZEND_FETCH_DIM_TMP_VAR",
266+
"ZEND_FETCH_CONSTANT",
267+
"ZEND_GOTO",
268+
"ZEND_EXT_STMT",
269+
"ZEND_EXT_FCALL_BEGIN",
270+
"ZEND_EXT_FCALL_END",
271+
"ZEND_EXT_NOP",
272+
"ZEND_TICKS",
273+
"ZEND_SEND_VAR_NO_REF",
274+
"ZEND_CATCH",
275+
"ZEND_THROW",
276+
"ZEND_FETCH_CLASS",
277+
"ZEND_CLONE",
278+
"ZEND_RETURN_BY_REF",
279+
"ZEND_INIT_METHOD_CALL",
280+
"ZEND_INIT_STATIC_METHOD_CALL",
281+
"ZEND_ISSET_ISEMPTY_VAR",
282+
"ZEND_ISSET_ISEMPTY_DIM_OBJ",
283+
NULL,
284+
NULL,
285+
NULL,
286+
NULL,
287+
NULL,
288+
NULL,
289+
NULL,
290+
NULL,
291+
NULL,
292+
NULL,
293+
NULL,
294+
NULL,
295+
NULL,
296+
NULL,
297+
NULL,
298+
NULL,
299+
"ZEND_PRE_INC_OBJ",
300+
"ZEND_PRE_DEC_OBJ",
301+
"ZEND_POST_INC_OBJ",
302+
"ZEND_POST_DEC_OBJ",
303+
"ZEND_ASSIGN_OBJ",
304+
NULL,
305+
"ZEND_INSTANCEOF",
306+
"ZEND_DECLARE_CLASS",
307+
"ZEND_DECLARE_INHERITED_CLASS",
308+
"ZEND_DECLARE_FUNCTION",
309+
"ZEND_RAISE_ABSTRACT_ERROR",
310+
"ZEND_DECLARE_CONST",
311+
"ZEND_ADD_INTERFACE",
312+
"ZEND_DECLARE_INHERITED_CLASS_DELAYED",
313+
"ZEND_VERIFY_ABSTRACT_CLASS",
314+
"ZEND_ASSIGN_DIM",
315+
"ZEND_ISSET_ISEMPTY_PROP_OBJ",
316+
"ZEND_HANDLE_EXCEPTION",
317+
"ZEND_USER_OPCODE",
318+
NULL,
319+
"ZEND_JMP_SET",
320+
"ZEND_DECLARE_LAMBDA_FUNCTION",
321+
"ZEND_ADD_TRAIT",
322+
"ZEND_BIND_TRAITS",
323+
"ZEND_SEPARATE",
324+
"ZEND_QM_ASSIGN_VAR",
325+
"ZEND_JMP_SET_VAR",
326+
};
327+
328+
#endif

0 commit comments

Comments
 (0)