Browse Source

Implement a different way to catch documentation comments.

migration/unlabaled-1.3.2
Andrei Zmievski 24 years ago
parent
commit
bdd3b6042c
  1. 53
      Zend/zend_compile.c
  2. 6
      Zend/zend_compile.h
  3. 3
      Zend/zend_globals.h
  4. 2
      Zend/zend_language_parser.y
  5. 4
      Zend/zend_language_scanner.l

53
Zend/zend_compile.c

@ -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;

6
Zend/zend_compile.h

@ -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;

3
Zend/zend_globals.h

@ -130,6 +130,9 @@ struct _zend_compiler_globals {
znode implementing_class;
zend_uint access_type;
char *doc_comment;
zend_uint doc_comment_len;
};

2
Zend/zend_language_parser.y

@ -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:

4
Zend/zend_language_scanner.l

@ -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;

Loading…
Cancel
Save