Permalink
Browse files

Implement a different way to catch documentation comments.

  • Loading branch information...
1 parent 4888473 commit bdd3b6042c538a58fbb629a832e19cabb4b507a7 Andrei Zmievski committed Apr 2, 2003
Showing with 38 additions and 30 deletions.
  1. +24 −29 Zend/zend_compile.c
  2. +6 −0 Zend/zend_compile.h
  3. +3 −0 Zend/zend_globals.h
  4. +1 −1 Zend/zend_language_parser.y
  5. +4 −0 Zend/zend_language_scanner.l
View
@@ -1068,6 +1068,12 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
}
function_token->throw_list = CG(throw_list);
CG(throw_list) = NULL;
+
+ if (CG(doc_comment)) {
+ CG(active_op_array)->doc_comment = estrndup(CG(doc_comment), CG(doc_comment_len));
+ CG(active_op_array)->doc_comment_len = CG(doc_comment_len);
+ RESET_DOC_COMMENT();
+ }
}
@@ -1077,12 +1083,6 @@ void zend_do_end_function_declaration(znode *function_token TSRMLS_DC)
zend_do_return(NULL, 0 TSRMLS_CC);
pass_two(CG(active_op_array) TSRMLS_CC);
CG(active_op_array)->line_end = zend_get_compiled_lineno(TSRMLS_C);
-#if 0
- if (doc_comment && doc_comment->op_type != IS_UNUSED) {
- CG(active_op_array)->doc_comment = doc_comment->u.constant.value.str.val;
- CG(active_op_array)->doc_comment_len = doc_comment->u.constant.value.str.len;
- }
-#endif
CG(active_op_array) = function_token->u.op_array;
/* Pop the switch and foreach seperators */
@@ -2241,6 +2241,12 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
opline->result.u.var = get_temporary_variable(CG(active_op_array));
opline->result.op_type = IS_CONST;
CG(implementing_class) = opline->result;
+
+ if (CG(doc_comment)) {
+ CG(active_class_entry)->doc_comment = estrndup(CG(doc_comment), CG(doc_comment_len));
+ CG(active_class_entry)->doc_comment_len = CG(doc_comment_len);
+ RESET_DOC_COMMENT();
+ }
}
@@ -2259,13 +2265,6 @@ void zend_do_end_class_declaration(znode *class_token, znode *parent_token TSRML
CG(active_class_entry)->line_end = zend_get_compiled_lineno(TSRMLS_C);
-#if 0
- if (doc_comment && doc_comment->op_type != IS_UNUSED) {
- CG(active_class_entry)->doc_comment = doc_comment->u.constant.value.str.val;
- CG(active_class_entry)->doc_comment_len = doc_comment->u.constant.value.str.len;
- }
-#endif
-
if (CG(active_class_entry)->num_interfaces > 0) {
CG(active_class_entry)->interfaces = (zend_class_entry **) emalloc(sizeof(zend_class_entry *)*CG(active_class_entry)->num_interfaces);
}
@@ -3250,7 +3249,6 @@ void zend_do_ticks(TSRMLS_D)
}
}
-
void zend_auto_global_dtor(zend_auto_global *auto_global)
{
free(auto_global->name);
@@ -3403,6 +3401,18 @@ void zend_do_begin_namespace(znode *ns_token, znode *ns_name TSRMLS_DC)
ns_token->u.previously_active_namespace = CG(active_namespace);
CG(active_namespace) = ns;
+ if (CG(doc_comment)) {
+ /*
+ * Do not overwrite previously declared doc comment in case the namespace is
+ * split over several parts.
+ */
+ if (CG(active_namespace)->doc_comment == NULL) {
+ CG(active_namespace)->doc_comment = estrndup(CG(doc_comment), CG(doc_comment_len));
+ CG(active_namespace)->doc_comment_len = CG(doc_comment_len);
+ }
+ RESET_DOC_COMMENT();
+ }
+
/* new symbol tables */
CG(class_table) = &ns->class_table;
CG(function_table) = &ns->function_table;
@@ -3423,21 +3433,6 @@ void zend_do_end_namespace(znode *ns_token TSRMLS_DC)
CG(active_namespace)->line_end = zend_get_compiled_lineno(TSRMLS_C);
}
-#if 0
- if (doc_comment && doc_comment->op_type != IS_UNUSED) {
- /*
- * Do not overwrite previously declared doc comment in case the namespace is
- * split over several parts.
- */
- if (CG(active_namespace)->doc_comment == NULL) {
- CG(active_namespace)->doc_comment = doc_comment->u.constant.value.str.val;
- CG(active_namespace)->doc_comment_len = doc_comment->u.constant.value.str.len;
- } else {
- zval_dtor(&doc_comment->u.constant);
- }
- }
-#endif
-
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
opline->opcode = ZEND_START_NAMESPACE;
View
@@ -41,6 +41,12 @@
#define DEC_BPC(op_array) if (CG(interactive)) { ((op_array)->backpatch_count--); }
#define HANDLE_INTERACTIVE() if (CG(interactive)) { execute_new_code(TSRMLS_C); }
+#define RESET_DOC_COMMENT() \
+ do { \
+ CG(doc_comment) = NULL; \
+ CG(doc_comment_len) = 0; \
+ } while (0)
+
typedef struct _zend_op_array zend_op_array;
typedef struct _zend_op zend_op;
View
@@ -130,6 +130,9 @@ struct _zend_compiler_globals {
znode implementing_class;
zend_uint access_type;
+
+ char *doc_comment;
+ zend_uint doc_comment_len;
};
@@ -179,7 +179,7 @@ inner_statement:
statement:
- unticked_statement { zend_do_ticks(TSRMLS_C); }
+ unticked_statement { zend_do_ticks(TSRMLS_C); RESET_DOC_COMMENT(); }
;
unticked_statement:
@@ -124,6 +124,7 @@ void startup_scanner(TSRMLS_D)
{
CG(heredoc) = NULL;
CG(heredoc_len)=0;
+ RESET_DOC_COMMENT();
SCNG(yy_start_stack_ptr) = 0;
SCNG(yy_start_stack_depth) = 0;
}
@@ -135,6 +136,7 @@ void shutdown_scanner(TSRMLS_D)
efree(CG(heredoc));
CG(heredoc_len)=0;
}
+ RESET_DOC_COMMENT();
}
END_EXTERN_C()
@@ -1201,6 +1203,8 @@ NAMESPACE_NAME ({LABEL}":")+{LABEL}
}
<ST_DOC_COMMENT>"*/" {
+ CG(doc_comment) = yytext; /* no copying - intentional */
+ CG(doc_comment_len) = yyleng;
HANDLE_NEWLINES(yytext, yyleng);
BEGIN(ST_IN_SCRIPTING);
return T_DOC_COMMENT;

0 comments on commit bdd3b60

Please sign in to comment.