Skip to content

Commit 618d260

Browse files
committed
add __name__ getsetdescriptor to type
1 parent f3cedfc commit 618d260

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/function/FunctionBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
4040
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
4141
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
42-
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
42+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
4343
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
4444
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
4545
import com.oracle.graal.python.runtime.exception.PythonErrorType;
@@ -79,7 +79,7 @@ Object reprClassFunction(PFunction self) {
7979

8080
@Builtin(name = __NAME__, minNumOfArguments = 1, maxNumOfArguments = 2, isGetter = true, isSetter = true)
8181
@GenerateNodeFactory
82-
abstract static class NameNode extends PythonBuiltinNode {
82+
abstract static class NameNode extends PythonBinaryBuiltinNode {
8383
@Child WriteAttributeToObjectNode writeNode;
8484

8585
@Specialization(guards = "isNoValue(noValue)")

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeBuiltins.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CLASS__;
3131
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
3232
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MRO__;
33+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
3334
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CALL__;
3435
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELETE__;
3536
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
@@ -64,6 +65,8 @@
6465
import com.oracle.graal.python.nodes.argument.positional.PositionalArgumentsNode;
6566
import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
6667
import com.oracle.graal.python.nodes.attributes.LookupInheritedAttributeNode;
68+
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
69+
import com.oracle.graal.python.nodes.attributes.WriteAttributeToObjectNode;
6770
import com.oracle.graal.python.nodes.call.special.CallTernaryMethodNode;
6871
import com.oracle.graal.python.nodes.call.special.CallVarargsMethodNode;
6972
import com.oracle.graal.python.nodes.call.special.LookupAndCallBinaryNode;
@@ -76,6 +79,7 @@
7679
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
7780
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
7881
import com.oracle.graal.python.nodes.object.GetClassNode;
82+
import com.oracle.graal.python.runtime.exception.PythonErrorType;
7983
import com.oracle.truffle.api.CompilerAsserts;
8084
import com.oracle.truffle.api.CompilerDirectives;
8185
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -457,4 +461,30 @@ PList getSubclasses(PythonClass cls) {
457461
return factory().createList(cls.getSubClasses().toArray());
458462
}
459463
}
464+
465+
@Builtin(name = __NAME__, minNumOfArguments = 1, maxNumOfArguments = 2, isGetter = true, isSetter = true)
466+
@GenerateNodeFactory
467+
static abstract class NameNode extends PythonBinaryBuiltinNode {
468+
@Specialization(guards = "isNoValue(value)")
469+
String getName(PythonBuiltinClass cls, @SuppressWarnings("unused") PNone value) {
470+
return cls.getName();
471+
}
472+
473+
@Specialization(guards = {"isNoValue(value)", "!isPythonBuiltinClass(cls)"})
474+
Object getName(PythonClass cls, @SuppressWarnings("unused") PNone value,
475+
@Cached("create()") ReadAttributeFromObjectNode getName) {
476+
return getName.execute(cls, __NAME__);
477+
}
478+
479+
@Specialization(guards = "!isNoValue(value)")
480+
Object setName(@SuppressWarnings("unused") PythonBuiltinClass cls, @SuppressWarnings("unused") Object value) {
481+
throw raise(PythonErrorType.RuntimeError, "can't set attributes of built-in/extension 'type'");
482+
}
483+
484+
@Specialization(guards = {"!isNoValue(value)", "!isPythonBuiltinClass(cls)"})
485+
Object setName(PythonClass cls, Object value,
486+
@Cached("create()") WriteAttributeToObjectNode setName) {
487+
return setName.execute(cls, __NAME__, value);
488+
}
489+
}
460490
}

0 commit comments

Comments
 (0)