summaryrefslogtreecommitdiff
path: root/Zend/zend_language_scanner.l
diff options
context:
space:
mode:
authorMarcus Boerger <helly@php.net>2003-05-26 20:45:22 +0000
committerMarcus Boerger <helly@php.net>2003-05-26 20:45:22 +0000
commit955460a3190352341a598103dcfa5591c8a4cb6a (patch)
tree3913c6a5cf932511367c96f36d738905eb51efa7 /Zend/zend_language_scanner.l
parent87a85db670c1f858a3a902710c6f349db3ddfaf2 (diff)
downloadphp-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.l29
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;