diff options
author | Andrei Zmievski <andrei@php.net> | 2003-03-31 20:42:01 +0000 |
---|---|---|
committer | Andrei Zmievski <andrei@php.net> | 2003-03-31 20:42:01 +0000 |
commit | 5657b8369119dab9c81deb036d7a43c83df332cb (patch) | |
tree | 74f0557311da249690b7b2efdc08512cdcc03d5d /Zend/zend_language_parser.y | |
parent | 383808e9d3e17d2ca2cb513d5d7d6b1dd9681c12 (diff) | |
download | php-git-5657b8369119dab9c81deb036d7a43c83df332cb.tar.gz |
Multi-purpose patch:
- The fields of zend_namespace were not completely initialized which
led to a variety of problems.
- The occurrence of class/interface/namespace definition is now
captured.
- Functions/classes/interfaces/namespaces can be preceded by doc
comments which are stored for use by extensions.
Diffstat (limited to 'Zend/zend_language_parser.y')
-rw-r--r-- | Zend/zend_language_parser.y | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y index b95d3a8c84..35689198b6 100644 --- a/Zend/zend_language_parser.y +++ b/Zend/zend_language_parser.y @@ -179,6 +179,7 @@ inner_statement: statement: unticked_statement { zend_do_ticks(TSRMLS_C); } + | doc_comment { zend_do_free(&$1 TSRMLS_CC); } unticked_statement { zend_do_ticks(TSRMLS_C); } ; unticked_statement: @@ -284,17 +285,27 @@ is_reference: unticked_function_declaration_statement: - T_FUNCTION { $1.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$1, &$4, 0, $3.op_type, NULL TSRMLS_CC); } - '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$1 TSRMLS_CC); } + optional_doc_comment T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 0, $4.op_type, NULL TSRMLS_CC); } + '(' parameter_list ')' '{' inner_statement_list '}' { zend_do_end_function_declaration(&$2, &$1 TSRMLS_CC); } ; unticked_class_declaration_statement: - class_entry_type T_STRING extends_from - { zend_do_begin_class_declaration(&$1, &$2, &$3 TSRMLS_CC); } + optional_doc_comment class_entry_type T_STRING extends_from + { zend_do_begin_class_declaration(&$2, &$3, &$4 TSRMLS_CC); } implements_list '{' class_statement_list - '}' { zend_do_end_class_declaration(&$1, &$2 TSRMLS_CC); } + '}' { zend_do_end_class_declaration(&$2, &$4, &$1 TSRMLS_CC); } +; + +optional_doc_comment: + /* empty */ { $$.op_type = IS_UNUSED; } + | doc_comment { $$ = $1; } +; + + +doc_comment: + T_DOC_COMMENT { $$ = $1; } ; @@ -305,7 +316,7 @@ class_entry_type: ; namespace_declaration_statement: - T_NAMESPACE namespace_name '{' { zend_do_begin_namespace(&$1, &$2 TSRMLS_CC); } namespace_statement_list '}' { zend_do_end_namespace(&$1 TSRMLS_CC); } + optional_doc_comment T_NAMESPACE namespace_name '{' { zend_do_begin_namespace(&$2, &$3 TSRMLS_CC); } namespace_statement_list '}' { zend_do_end_namespace(&$2, &$1 TSRMLS_CC); } ; namespace_statement_list: @@ -503,7 +514,9 @@ class_statement: variable_modifiers { CG(access_type) = $1.u.constant.value.lval; } class_variable_declaration ';' | class_constant_declaration ';' | method_modifiers T_FUNCTION { $2.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$2, &$5, 1, $4.op_type, &$1 TSRMLS_CC); } '(' - parameter_list ')' method_body { zend_do_abstract_method(&$5, &$1, &$10 TSRMLS_CC); zend_do_end_function_declaration(&$2 TSRMLS_CC); } + parameter_list ')' method_body { zend_do_abstract_method(&$5, &$1, &$10 TSRMLS_CC); zend_do_end_function_declaration(&$2, NULL TSRMLS_CC); } + | doc_comment method_modifiers T_FUNCTION { $3.u.opline_num = CG(zend_lineno); } is_reference T_STRING { zend_do_begin_function_declaration(&$3, &$6, 1, $5.op_type, &$2 TSRMLS_CC); } '(' + parameter_list ')' method_body { zend_do_abstract_method(&$6, &$2, &$11 TSRMLS_CC); zend_do_end_function_declaration(&$3, &$1 TSRMLS_CC); } ; |