Commit 050f75d5 authored by Boxiang Sun's avatar Boxiang Sun

add __call__ attribute to builtin functions and methods

parent 67973cf6
# expected: fail
from test import test_support as support from test import test_support as support
import unittest import unittest
import __builtin__ as builtins import __builtin__ as builtins
......
...@@ -1631,6 +1631,11 @@ extern "C" BoxedString* builtinFunctionOrMethodRepr(BoxedBuiltinFunctionOrMethod ...@@ -1631,6 +1631,11 @@ extern "C" BoxedString* builtinFunctionOrMethodRepr(BoxedBuiltinFunctionOrMethod
RELEASE_ASSERT(false, "builtinFunctionOrMethodRepr not properly implemented"); RELEASE_ASSERT(false, "builtinFunctionOrMethodRepr not properly implemented");
} }
static Box* builtinFunctionOrMethodCall(BoxedBuiltinFunctionOrMethod* self, Box* args, Box* kwargs) {
return runtimeCallInternal<CXX, NOT_REWRITABLE>(self, NULL, ArgPassSpec(0, 0, true, true), args, kwargs, NULL, NULL,
NULL);
}
extern "C" BoxedString* functionRepr(BoxedFunction* v) { extern "C" BoxedString* functionRepr(BoxedFunction* v) {
if (!v->name) if (!v->name)
return (BoxedString*)PyString_FromFormat("<function <name_missing?> at %p>", v); return (BoxedString*)PyString_FromFormat("<function <name_missing?> at %p>", v);
...@@ -3940,6 +3945,9 @@ void setupRuntime() { ...@@ -3940,6 +3945,9 @@ void setupRuntime() {
builtin_function_or_method_cls->giveAttr( builtin_function_or_method_cls->giveAttr(
"__module__", "__module__",
new BoxedMemberDescriptor(BoxedMemberDescriptor::OBJECT, offsetof(BoxedBuiltinFunctionOrMethod, modname))); new BoxedMemberDescriptor(BoxedMemberDescriptor::OBJECT, offsetof(BoxedBuiltinFunctionOrMethod, modname)));
builtin_function_or_method_cls->giveAttr(
"__call__", new BoxedFunction(boxRTFunction((void*)builtinFunctionOrMethodCall, UNKNOWN, 1, true, true)));
builtin_function_or_method_cls->giveAttr( builtin_function_or_method_cls->giveAttr(
"__repr__", new BoxedFunction(boxRTFunction((void*)builtinFunctionOrMethodRepr, STR, 1))); "__repr__", new BoxedFunction(boxRTFunction((void*)builtinFunctionOrMethodRepr, STR, 1)));
builtin_function_or_method_cls->giveAttr( builtin_function_or_method_cls->giveAttr(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment