From b90d80b58806083ded586da0745f02b38d301819 Mon Sep 17 00:00:00 2001 From: Andi Gutmans Date: Sat, 2 Mar 2002 20:38:52 +0000 Subject: - Initial patch to support importing from class scopes (for Stig). - It isn't complete yet but I want to work on it from another machine. It - shouldn't break anything else so just don't try and use it. - The following is a teaser of something that already works: --- Zend/zend_compile.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'Zend/zend_compile.c') diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 33216efa87..997848d350 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -552,6 +552,60 @@ zend_bool zend_is_function_or_method_call(znode *variable) return ((type & ZEND_PARSED_METHOD_CALL) || (type == ZEND_PARSED_FUNCTION_CALL)); } +void zend_do_begin_import(TSRMLS_D) +{ + zend_llist_init(&CG(import_commands), sizeof(zend_op), NULL, 0); +} + +void zend_do_import(int type, znode *what TSRMLS_DC) +{ + zend_op opline; + + init_op(&opline TSRMLS_CC); + + switch (type) { + case T_FUNCTION: + opline.opcode = ZEND_IMPORT_FUNCTION; + break; + case T_CLASS: + opline.opcode = ZEND_IMPORT_CLASS; + break; + case T_CONST: + opline.opcode = ZEND_IMPORT_CONST; + break; + } + + if (what) { + if (type == T_FUNCTION || type == T_CLASS) { + zend_str_tolower(what->u.constant.value.str.val, what->u.constant.value.str.len); + } + opline.op2 = *what; + } else { + SET_UNUSED(opline.op2); + } + + zend_llist_add_element(&CG(import_commands), &opline); +} + +void zend_do_end_import(znode *import_from TSRMLS_DC) +{ + zend_llist_element *le; + zend_op *opline, *opline_ptr; + + + le = CG(import_commands).head; + + while (le) { + opline_ptr = (zend_op *)le->data; + opline = get_next_op(CG(active_op_array) TSRMLS_CC); + memcpy(opline, opline_ptr, sizeof(zend_op)); + opline->op1 = *import_from; + le = le->next; + } + zend_llist_destroy(&CG(import_commands)); +} + + void zend_do_begin_variable_parse(TSRMLS_D) { -- cgit v1.2.1