mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
- Add ReflectionProperty::getDocComment()
This commit is contained in:
parent
b8ac8eeca6
commit
67a226d910
6 changed files with 60 additions and 3 deletions
|
@ -1890,6 +1890,11 @@ ZEND_API char *zend_get_module_version(char *module_name)
|
|||
|
||||
|
||||
ZEND_API int zend_declare_property(zend_class_entry *ce, char *name, int name_length, zval *property, int access_type TSRMLS_DC)
|
||||
{
|
||||
return zend_declare_property_ex(ce, name, name_length, property, access_type, NULL, 0 TSRMLS_CC);
|
||||
}
|
||||
|
||||
ZEND_API int zend_declare_property_ex(zend_class_entry *ce, char *name, int name_length, zval *property, int access_type, char *doc_comment, int doc_comment_len TSRMLS_DC)
|
||||
{
|
||||
zend_property_info property_info;
|
||||
HashTable *target_symbol_table;
|
||||
|
@ -1952,6 +1957,9 @@ ZEND_API int zend_declare_property(zend_class_entry *ce, char *name, int name_le
|
|||
property_info.flags = access_type;
|
||||
property_info.h = zend_get_hash_value(property_info.name, property_info.name_length+1);
|
||||
|
||||
property_info.doc_comment = doc_comment;
|
||||
property_info.doc_comment_len = doc_comment_len;
|
||||
|
||||
zend_hash_update(&ce->properties_info, name, name_length + 1, &property_info, sizeof(zend_property_info), NULL);
|
||||
|
||||
return SUCCESS;
|
||||
|
|
|
@ -189,6 +189,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, char **callable_name TSRML
|
|||
ZEND_API char *zend_get_module_version(char *module_name);
|
||||
ZEND_API int zend_get_module_started(char *module_name);
|
||||
ZEND_API int zend_declare_property(zend_class_entry *ce, char *name, int name_length, zval *property, int access_type TSRMLS_DC);
|
||||
ZEND_API int zend_declare_property_ex(zend_class_entry *ce, char *name, int name_length, zval *property, int access_type, char *doc_comment, int doc_comment_len TSRMLS_DC);
|
||||
ZEND_API int zend_declare_property_null(zend_class_entry *ce, char *name, int name_length, int access_type TSRMLS_DC);
|
||||
ZEND_API int zend_declare_property_bool(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC);
|
||||
ZEND_API int zend_declare_property_long(zend_class_entry *ce, char *name, int name_length, long value, int access_type TSRMLS_DC);
|
||||
|
|
|
@ -54,6 +54,9 @@ static void zend_duplicate_property_info_internal(zend_property_info *property_i
|
|||
static void zend_destroy_property_info(zend_property_info *property_info)
|
||||
{
|
||||
efree(property_info->name);
|
||||
if (property_info->doc_comment) {
|
||||
efree(property_info->doc_comment);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1818,8 +1821,11 @@ static zend_bool zend_do_perform_implementation_check(zend_function *fe, zend_fu
|
|||
}
|
||||
|
||||
if (proto->common.return_reference != ZEND_RETURN_REFERENCE_AGNOSTIC
|
||||
&& fe->common.return_reference != proto->common.return_reference) {
|
||||
return 0;
|
||||
&& fe->common.return_reference != proto->common.return_reference) {
|
||||
/* atm we cannot let internal function return by ref */
|
||||
if (fe->type != ZEND_INTERNAL_FUNCTION && proto->type == ZEND_INTERNAL_FUNCTION) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i < proto->common.num_args; i++) {
|
||||
|
@ -2687,6 +2693,8 @@ void zend_do_declare_property(znode *var_name, znode *value, zend_uint access_ty
|
|||
{
|
||||
zval *property;
|
||||
zend_property_info *existing_property_info;
|
||||
char *comment = NULL;
|
||||
int comment_len = 0;
|
||||
|
||||
if (CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE) {
|
||||
zend_error(E_COMPILE_ERROR, "Interfaces may not include member variables");
|
||||
|
@ -2715,7 +2723,13 @@ void zend_do_declare_property(znode *var_name, znode *value, zend_uint access_ty
|
|||
property->type = IS_NULL;
|
||||
}
|
||||
|
||||
zend_declare_property(CG(active_class_entry), var_name->u.constant.value.str.val, var_name->u.constant.value.str.len, property, access_type TSRMLS_CC);
|
||||
if (CG(doc_comment)) {
|
||||
comment = estrndup(CG(doc_comment), CG(doc_comment_len));
|
||||
comment_len = CG(doc_comment_len);
|
||||
RESET_DOC_COMMENT();
|
||||
}
|
||||
|
||||
zend_declare_property_ex(CG(active_class_entry), var_name->u.constant.value.str.val, var_name->u.constant.value.str.len, property, access_type, comment, comment_len TSRMLS_CC);
|
||||
efree(var_name->u.constant.value.str.val);
|
||||
}
|
||||
|
||||
|
|
|
@ -138,6 +138,8 @@ typedef struct _zend_property_info {
|
|||
char *name;
|
||||
int name_length;
|
||||
ulong h;
|
||||
char *doc_comment;
|
||||
int doc_comment_len;
|
||||
} zend_property_info;
|
||||
|
||||
|
||||
|
|
|
@ -3455,6 +3455,21 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
|
|||
zend_reflection_class_factory(ref->ce, return_value TSRMLS_CC);
|
||||
}
|
||||
|
||||
/* {{{ proto public string ReflectionProperty::getDocComment()
|
||||
Returns the doc comment for this property */
|
||||
ZEND_METHOD(reflection_property, getDocComment)
|
||||
{
|
||||
reflection_object *intern;
|
||||
property_reference *ref;
|
||||
|
||||
METHOD_NOTSTATIC_NUMPARAMS(0);
|
||||
GET_REFLECTION_OBJECT_PTR(ref);
|
||||
if (ref->prop->doc_comment) {
|
||||
RETURN_STRINGL(ref->prop->doc_comment, ref->prop->doc_comment_len, 1);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto public static mixed ReflectionExtension::export(string name [, bool return]) throws ReflectionException
|
||||
Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */
|
||||
ZEND_METHOD(reflection_extension, export)
|
||||
|
@ -3814,6 +3829,7 @@ static zend_function_entry reflection_property_functions[] = {
|
|||
ZEND_ME(reflection_property, isDefault, NULL, 0)
|
||||
ZEND_ME(reflection_property, getModifiers, NULL, 0)
|
||||
ZEND_ME(reflection_property, getDeclaringClass, NULL, 0)
|
||||
ZEND_ME(reflection_property, getDocComment, NULL, 0)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
|
@ -3455,6 +3455,21 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
|
|||
zend_reflection_class_factory(ref->ce, return_value TSRMLS_CC);
|
||||
}
|
||||
|
||||
/* {{{ proto public string ReflectionProperty::getDocComment()
|
||||
Returns the doc comment for this property */
|
||||
ZEND_METHOD(reflection_property, getDocComment)
|
||||
{
|
||||
reflection_object *intern;
|
||||
property_reference *ref;
|
||||
|
||||
METHOD_NOTSTATIC_NUMPARAMS(0);
|
||||
GET_REFLECTION_OBJECT_PTR(ref);
|
||||
if (ref->prop->doc_comment) {
|
||||
RETURN_STRINGL(ref->prop->doc_comment, ref->prop->doc_comment_len, 1);
|
||||
}
|
||||
RETURN_FALSE;
|
||||
}
|
||||
/* }}} */
|
||||
/* {{{ proto public static mixed ReflectionExtension::export(string name [, bool return]) throws ReflectionException
|
||||
Exports a reflection object. Returns the output if TRUE is specified for return, printing it otherwise. */
|
||||
ZEND_METHOD(reflection_extension, export)
|
||||
|
@ -3814,6 +3829,7 @@ static zend_function_entry reflection_property_functions[] = {
|
|||
ZEND_ME(reflection_property, isDefault, NULL, 0)
|
||||
ZEND_ME(reflection_property, getModifiers, NULL, 0)
|
||||
ZEND_ME(reflection_property, getDeclaringClass, NULL, 0)
|
||||
ZEND_ME(reflection_property, getDocComment, NULL, 0)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue