]> granicus.if.org Git - php/commitdiff
Add pseudo constant __METHOD__ to easily report namespace::class::method.
authorMarcus Boerger <helly@php.net>
Mon, 26 May 2003 20:45:22 +0000 (20:45 +0000)
committerMarcus Boerger <helly@php.net>
Mon, 26 May 2003 20:45:22 +0000 (20:45 +0000)
# 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.

Zend/zend_language_scanner.l

index ee1060cb55305d4b74caaf826b6d6c0f4acd077d..436d9aa08cccb31979a95623d369f0396350e821 100644 (file)
@@ -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;