-
-
Save SteelPangolin/5252ea888d09c51b7d35 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- a/parsekit-1.3.0/parsekit.c | |
| +++ b/parsekit-1.3.0/parsekit.c | |
| @@ -78,18 +78,18 @@ | |
| #ifdef IS_CV | |
| /* PHP >= 5.1 */ | |
| } else if (node->op_type == IS_CV) { | |
| - add_assoc_long(return_value, "var", node->u.var); | |
| - add_assoc_stringl(return_value, "varname", op_array->vars[node->u.var].name, op_array->vars[node->u.var].name_len, 1); | |
| + add_assoc_long(return_value, "var", node->u.op.var); | |
| + add_assoc_stringl(return_value, "varname", op_array->vars[node->u.op.var].name, op_array->vars[node->u.op.var].name_len, 1); | |
| #endif | |
| } else { | |
| /* IS_VAR || IS_TMP_VAR || IS_UNUSED */ | |
| char sop[(sizeof(void *) * 2) + 1]; | |
| - snprintf(sop, (sizeof(void *) * 2) + 1, "%X", (unsigned int)node->u.var); | |
| + snprintf(sop, (sizeof(void *) * 2) + 1, "%X", (unsigned int)node->u.op.var); | |
| if ((flags & PHP_PARSEKIT_VAR) || | |
| (options & PHP_PARSEKIT_ALL_ELEMENTS)) { | |
| - add_assoc_long(return_value, "var", node->u.var / sizeof(temp_variable)); | |
| + add_assoc_long(return_value, "var", node->u.op.var / sizeof(temp_variable)); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "var"); | |
| } | |
| @@ -114,7 +114,7 @@ | |
| (options & PHP_PARSEKIT_ALL_ELEMENTS)) { | |
| add_assoc_string(return_value, "jmp_addr", sop, 1); | |
| snprintf(sop, sizeof(sop)-1, "%u", | |
| - ((unsigned int)((char*)node->u.var - (char*)op_array->opcodes))/sizeof(zend_op)); | |
| + ((unsigned int)((char*)node->u.op.var - (char*)op_array->opcodes))/sizeof(zend_op)); | |
| add_assoc_string(return_value, "jmp_offset", sop, 1); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "jmp_addr"); | |
| @@ -123,9 +123,9 @@ | |
| if ((flags & PHP_PARSEKIT_EA_TYPE) || | |
| (options & PHP_PARSEKIT_ALL_ELEMENTS)) { | |
| - add_assoc_long(return_value, "EA.type", node->u.EA.type); | |
| + add_assoc_long(return_value, "EA", node->EA); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| - add_assoc_null(return_value, "EA.type"); | |
| + add_assoc_null(return_value, "EA"); | |
| } | |
| } | |
| } | |
| @@ -300,7 +300,7 @@ | |
| } | |
| add_assoc_long(return_value, "num_args", ops->num_args); | |
| add_assoc_long(return_value, "required_num_args", ops->required_num_args); | |
| - add_assoc_bool(return_value, "pass_rest_by_reference", ops->pass_rest_by_reference); | |
| + add_assoc_bool(return_value, "pass_rest_by_reference", ops->fn_flags & ZEND_ACC_PASS_REST_BY_REFERENCE); | |
| if (ops->num_args && ops->arg_info) { | |
| MAKE_STD_ZVAL(tmpzval); | |
| @@ -374,15 +374,15 @@ | |
| #endif | |
| /* ZE1 and ZE2 */ | |
| - add_assoc_bool(return_value, "return_reference", ops->return_reference); | |
| + add_assoc_bool(return_value, "return_reference", ops->fn_flags & ZEND_ACC_RETURN_REFERENCE); | |
| add_assoc_long(return_value, "refcount", *(ops->refcount)); | |
| add_assoc_long(return_value, "last", ops->last); | |
| - add_assoc_long(return_value, "size", ops->size); | |
| + add_assoc_long(return_value, "size", CG(context).opcodes_size); | |
| add_assoc_long(return_value, "T", ops->T); | |
| add_assoc_long(return_value, "last_brk_cont", ops->last_brk_cont); | |
| - add_assoc_long(return_value, "current_brk_cont", ops->current_brk_cont); | |
| - add_assoc_long(return_value, "backpatch_count", ops->backpatch_count); | |
| - add_assoc_bool(return_value, "done_pass_two", ops->done_pass_two); | |
| + add_assoc_long(return_value, "current_brk_cont", CG(context).current_brk_cont); | |
| + add_assoc_long(return_value, "backpatch_count", CG(context).backpatch_count); | |
| + add_assoc_bool(return_value, "done_pass_two", ops->fn_flags & ZEND_ACC_DONE_PASS_TWO); | |
| if (ops->last_brk_cont > 0) { | |
| MAKE_STD_ZVAL(tmpzval); | |
| @@ -413,10 +413,10 @@ | |
| add_assoc_null(return_value, "static_variables"); | |
| } | |
| - if (ops->start_op) { | |
| + if (EG(start_op)) { | |
| char sop[(sizeof(void *) * 2) + 1]; | |
| - snprintf(sop, sizeof(sop), "%X", (unsigned int)ops->start_op); | |
| + snprintf(sop, sizeof(sop), "%X", (unsigned int)EG(start_op)); | |
| add_assoc_string(return_value, "start_op", sop, 1); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "start_op"); | |
| @@ -431,7 +431,7 @@ | |
| /* Leave this last, it simplifies readability */ | |
| MAKE_STD_ZVAL(tmpzval); | |
| array_init(tmpzval); | |
| - for(op = ops->opcodes, i = 0; op && i < ops->size; op++, i++) { | |
| + for(op = ops->opcodes, i = 0; op && i < CG(context).opcodes_size; op++, i++) { | |
| zval *zop; | |
| MAKE_STD_ZVAL(zop); | |
| @@ -447,17 +447,17 @@ | |
| static int php_parsekit_parse_node_simple(char **pret, zend_op_array *op_array, znode *node, zend_op_array *oparray TSRMLS_DC) | |
| { | |
| if (node->op_type == IS_UNUSED) { | |
| - if (node->u.var) { | |
| + if (node->u.op.var) { | |
| #ifdef ZEND_ENGINE_2 | |
| - if (node->u.jmp_addr >= oparray->opcodes && | |
| - node->u.jmp_addr <= (oparray->opcodes + (sizeof(zend_op) * oparray->size))) | |
| + if (node->u.op.jmp_addr >= oparray->opcodes && | |
| + node->u.op.jmp_addr <= (oparray->opcodes + (sizeof(zend_op) * CG(context).opcodes_size))) | |
| { | |
| - spprintf(pret, 0, "#%d", node->u.jmp_addr - oparray->opcodes); | |
| + spprintf(pret, 0, "#%d", node->u.op.jmp_addr - oparray->opcodes); | |
| } | |
| else | |
| #endif | |
| { | |
| - spprintf(pret, 0, "0x%X", node->u.var); | |
| + spprintf(pret, 0, "0x%X", node->u.op.var); | |
| } | |
| return 1; | |
| } else { | |
| @@ -514,7 +514,7 @@ | |
| } | |
| } | |
| - spprintf(pret, 0, "T(%d)", node->u.var / sizeof(temp_variable)); | |
| + spprintf(pret, 0, "T(%d)", node->u.op.var / sizeof(temp_variable)); | |
| return 1; | |
| } | |
| /* }}} */ | |
| @@ -528,7 +528,7 @@ | |
| array_init(return_value); | |
| - for (op = ops->opcodes, i = 0; op && i < ops->size; op++, i++) { | |
| + for (op = ops->opcodes, i = 0; op && i < CG(context).opcodes_size; op++, i++) { | |
| char *opline, *result, *op1, *op2; | |
| int opline_len, freeit = 0; | |
| @@ -633,7 +633,7 @@ | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "parent"); | |
| } | |
| - add_assoc_bool(return_value, "constants_updated", ce->constants_updated); | |
| + add_assoc_bool(return_value, "constants_updated", ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED); | |
| #ifdef ZEND_ENGINE_2 | |
| /* ZE2 class_entry members */ | |
| add_assoc_long(return_value, "ce_flags", ce->ce_flags); | |
| @@ -691,12 +691,12 @@ | |
| add_assoc_null(return_value, "properties_info"); | |
| } | |
| - if (ce->static_members && zend_hash_num_elements(ce->static_members) > 0) { | |
| + if (ce->static_members_table && zend_hash_num_elements(ce->static_members_table) > 0) { | |
| zval *tmp_zval; | |
| MAKE_STD_ZVAL(tmpzval); | |
| array_init(tmpzval); | |
| - zend_hash_copy(HASH_OF(tmpzval), ce->static_members, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *)); | |
| + zend_hash_copy(HASH_OF(tmpzval), ce->static_members_table, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *)); | |
| add_assoc_zval(return_value, "static_members", tmpzval); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "static_members"); | |
| @@ -724,11 +724,11 @@ | |
| add_assoc_null(return_value, "interfaces"); | |
| } | |
| - add_assoc_string(return_value, "filename", ce->filename, 1); | |
| - add_assoc_long(return_value, "line_start", ce->line_start); | |
| - add_assoc_long(return_value, "line_end", ce->line_end); | |
| - if (ce->doc_comment) { | |
| - add_assoc_stringl(return_value, "doc_comment", ce->doc_comment, ce->doc_comment_len, 1); | |
| + add_assoc_string(return_value, "filename", ce->info.user.filename, 1); | |
| + add_assoc_long(return_value, "line_start", ce->info.user.line_start); | |
| + add_assoc_long(return_value, "line_end", ce->info.user.line_end); | |
| + if (ce->info.user.doc_comment) { | |
| + add_assoc_stringl(return_value, "doc_comment", ce->info.user.doc_comment, ce->info.user.doc_comment_len, 1); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "doc_comment"); | |
| } | |
| @@ -757,12 +757,12 @@ | |
| add_assoc_null(return_value, "function_table"); | |
| } | |
| - if (zend_hash_num_elements(&(ce->default_properties)) > 0) { | |
| + if (zend_hash_num_elements(&(ce->default_properties_table)) > 0) { | |
| zval *tmp_zval; | |
| MAKE_STD_ZVAL(tmpzval); | |
| array_init(tmpzval); | |
| - zend_hash_copy(HASH_OF(tmpzval), &(ce->default_properties), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *)); | |
| + zend_hash_copy(HASH_OF(tmpzval), &(ce->default_properties_table), (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *)); | |
| add_assoc_zval(return_value, "default_properties", tmpzval); | |
| } else if (options & PHP_PARSEKIT_ALWAYS_SET) { | |
| add_assoc_null(return_value, "default_properties"); | |
| @@ -1131,7 +1131,7 @@ | |
| #endif | |
| /* {{{ function_entry */ | |
| -function_entry parsekit_functions[] = { | |
| +zend_function_entry parsekit_functions[] = { | |
| PHP_FE(parsekit_compile_string, php_parsekit_second_arg_force_ref) | |
| PHP_FE(parsekit_compile_file, php_parsekit_second_arg_force_ref) | |
| PHP_FE(parsekit_opcode_flags, NULL) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment