diff options
| author | Marcus Boerger <helly@php.net> | 2003-05-26 20:45:22 +0000 |
|---|---|---|
| committer | Marcus Boerger <helly@php.net> | 2003-05-26 20:45:22 +0000 |
| commit | 955460a3190352341a598103dcfa5591c8a4cb6a (patch) | |
| tree | 3913c6a5cf932511367c96f36d738905eb51efa7 /Zend/zend_language_scanner.l | |
| parent | 87a85db670c1f858a3a902710c6f349db3ddfaf2 (diff) | |
| download | php-git-955460a3190352341a598103dcfa5591c8a4cb6a.tar.gz | |
Add pseudo constant __METHOD__ to easily report namespace::class::method.
# This is especially good for tests. Since it does not draw away from the
# real issues and nicely reports what is needed to identify a method.
Diffstat (limited to 'Zend/zend_language_scanner.l')
| -rw-r--r-- | Zend/zend_language_scanner.l | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index ee1060cb55..436d9aa08c 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -998,6 +998,35 @@ NAMESPACE_NAME ({LABEL}":")+{LABEL} return T_FUNC_C; } +<ST_IN_SCRIPTING>"__METHOD__" { + char *namespace_name = CG(active_namespace)->name; + char *class_name = CG(active_class_entry) ? CG(active_class_entry)->name : NULL; + char *func_name = CG(active_op_array)->function_name; + size_t len = 1; + + if (namespace_name) { + len += strlen(namespace_name) + 2; + } + if (class_name) { + len += strlen(class_name) + 2; + } + if (func_name) { + len += strlen(func_name); + } + + zendlval->value.str.val = emalloc(len); + zendlval->value.str.len = sprintf(zendlval->value.str.val, "%s%s%s%s%s", + namespace_name ? namespace_name : "", + namespace_name && (class_name || func_name) ? "::" : "", + class_name ? class_name : "", + class_name && func_name ? "::" : "", + func_name ? func_name : "" + ); + zendlval->value.str.len = strlen(zendlval->value.str.val); + zendlval->type = IS_STRING; + return T_CLASS_C; +} + <ST_IN_SCRIPTING>"__LINE__" { zendlval->value.lval = CG(zend_lineno); zendlval->type = IS_LONG; |
