Skip to content

Commit aacc44d

Browse files
committed
PCode: repr builtin implemented in truffle
1 parent b00ddcc commit aacc44d

File tree

3 files changed

+36
-22
lines changed

3 files changed

+36
-22
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/CodeBuiltins.java

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
package com.oracle.graal.python.builtins.objects.code;
2828

29+
import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__;
30+
2931
import java.util.List;
3032

3133
import com.oracle.graal.python.builtins.Builtin;
@@ -34,7 +36,7 @@
3436
import com.oracle.graal.python.builtins.PythonBuiltins;
3537
import com.oracle.graal.python.builtins.objects.PNone;
3638
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
37-
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
39+
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
3840
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
3941
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
4042
import com.oracle.truffle.api.dsl.NodeFactory;
@@ -50,7 +52,7 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
5052

5153
@Builtin(name = "co_freevars", minNumOfPositionalArgs = 1, isGetter = true)
5254
@GenerateNodeFactory
53-
public abstract static class GetFreeVarsNode extends PythonBuiltinNode {
55+
public abstract static class GetFreeVarsNode extends PythonUnaryBuiltinNode {
5456
@Specialization
5557
protected Object get(PCode self) {
5658
Object[] freeVars = self.getFreeVars();
@@ -63,7 +65,7 @@ protected Object get(PCode self) {
6365

6466
@Builtin(name = "co_cellvars", minNumOfPositionalArgs = 1, isGetter = true)
6567
@GenerateNodeFactory
66-
public abstract static class GetCellVarsNode extends PythonBuiltinNode {
68+
public abstract static class GetCellVarsNode extends PythonUnaryBuiltinNode {
6769
@Specialization
6870
protected Object get(PCode self) {
6971
Object[] cellVars = self.getCellVars();
@@ -76,7 +78,7 @@ protected Object get(PCode self) {
7678

7779
@Builtin(name = "co_filename", minNumOfPositionalArgs = 1, isGetter = true)
7880
@GenerateNodeFactory
79-
public abstract static class GetFilenameNode extends PythonBuiltinNode {
81+
public abstract static class GetFilenameNode extends PythonUnaryBuiltinNode {
8082
@Specialization
8183
protected Object get(PCode self) {
8284
String filename = self.getFilename();
@@ -89,7 +91,7 @@ protected Object get(PCode self) {
8991

9092
@Builtin(name = "co_firstlineno", minNumOfPositionalArgs = 1, isGetter = true)
9193
@GenerateNodeFactory
92-
public abstract static class GetLinenoNode extends PythonBuiltinNode {
94+
public abstract static class GetLinenoNode extends PythonUnaryBuiltinNode {
9395
@Specialization
9496
protected Object get(PCode self) {
9597
return self.getFirstLineNo();
@@ -98,7 +100,7 @@ protected Object get(PCode self) {
98100

99101
@Builtin(name = "co_name", minNumOfPositionalArgs = 1, isGetter = true)
100102
@GenerateNodeFactory
101-
public abstract static class GetNameNode extends PythonBuiltinNode {
103+
public abstract static class GetNameNode extends PythonUnaryBuiltinNode {
102104
@Specialization
103105
@TruffleBoundary
104106
protected Object get(PCode self) {
@@ -112,7 +114,7 @@ protected Object get(PCode self) {
112114

113115
@Builtin(name = "co_argcount", minNumOfPositionalArgs = 1, isGetter = true)
114116
@GenerateNodeFactory
115-
public abstract static class GetArgCountNode extends PythonBuiltinNode {
117+
public abstract static class GetArgCountNode extends PythonUnaryBuiltinNode {
116118
@Specialization
117119
protected Object get(PCode self) {
118120
return self.getArgcount();
@@ -121,7 +123,7 @@ protected Object get(PCode self) {
121123

122124
@Builtin(name = "co_posonlyargcount", minNumOfPositionalArgs = 1, isGetter = true)
123125
@GenerateNodeFactory
124-
public abstract static class GetPosOnlyArgCountNode extends PythonBuiltinNode {
126+
public abstract static class GetPosOnlyArgCountNode extends PythonUnaryBuiltinNode {
125127
@Specialization
126128
protected Object get(PCode self) {
127129
return self.getPositionalOnlyArgCount();
@@ -130,7 +132,7 @@ protected Object get(PCode self) {
130132

131133
@Builtin(name = "co_kwonlyargcount", minNumOfPositionalArgs = 1, isGetter = true)
132134
@GenerateNodeFactory
133-
public abstract static class GetKnownlyArgCountNode extends PythonBuiltinNode {
135+
public abstract static class GetKnownlyArgCountNode extends PythonUnaryBuiltinNode {
134136
@Specialization
135137
protected Object get(PCode self) {
136138
return self.getKwonlyargcount();
@@ -139,7 +141,7 @@ protected Object get(PCode self) {
139141

140142
@Builtin(name = "co_nlocals", minNumOfPositionalArgs = 1, isGetter = true)
141143
@GenerateNodeFactory
142-
public abstract static class GetNLocalsNode extends PythonBuiltinNode {
144+
public abstract static class GetNLocalsNode extends PythonUnaryBuiltinNode {
143145
@Specialization
144146
protected Object get(PCode self) {
145147
return self.getNlocals();
@@ -148,7 +150,7 @@ protected Object get(PCode self) {
148150

149151
@Builtin(name = "co_stacksize", minNumOfPositionalArgs = 1, isGetter = true)
150152
@GenerateNodeFactory
151-
public abstract static class GetStackSizeNode extends PythonBuiltinNode {
153+
public abstract static class GetStackSizeNode extends PythonUnaryBuiltinNode {
152154
@Specialization
153155
protected Object get(PCode self) {
154156
return self.getStacksize();
@@ -157,7 +159,7 @@ protected Object get(PCode self) {
157159

158160
@Builtin(name = "co_flags", minNumOfPositionalArgs = 1, isGetter = true)
159161
@GenerateNodeFactory
160-
public abstract static class GetFlagsNode extends PythonBuiltinNode {
162+
public abstract static class GetFlagsNode extends PythonUnaryBuiltinNode {
161163
@Specialization
162164
protected Object get(PCode self) {
163165
return self.getFlags();
@@ -166,7 +168,7 @@ protected Object get(PCode self) {
166168

167169
@Builtin(name = "co_code", minNumOfPositionalArgs = 1, isGetter = true)
168170
@GenerateNodeFactory
169-
public abstract static class GetCodeNode extends PythonBuiltinNode {
171+
public abstract static class GetCodeNode extends PythonUnaryBuiltinNode {
170172
@Specialization
171173
protected Object get(PCode self) {
172174
byte[] codestring = self.getCodestring();
@@ -179,7 +181,7 @@ protected Object get(PCode self) {
179181

180182
@Builtin(name = "co_consts", minNumOfPositionalArgs = 1, isGetter = true)
181183
@GenerateNodeFactory
182-
public abstract static class GetConstsNode extends PythonBuiltinNode {
184+
public abstract static class GetConstsNode extends PythonUnaryBuiltinNode {
183185
@Specialization
184186
protected Object get(PCode self) {
185187
Object[] constants = self.getConstants();
@@ -192,7 +194,7 @@ protected Object get(PCode self) {
192194

193195
@Builtin(name = "co_names", minNumOfPositionalArgs = 1, isGetter = true)
194196
@GenerateNodeFactory
195-
public abstract static class GetNamesNode extends PythonBuiltinNode {
197+
public abstract static class GetNamesNode extends PythonUnaryBuiltinNode {
196198
@Specialization
197199
protected Object get(PCode self) {
198200
Object[] names = self.getNames();
@@ -205,7 +207,7 @@ protected Object get(PCode self) {
205207

206208
@Builtin(name = "co_varnames", minNumOfPositionalArgs = 1, isGetter = true)
207209
@GenerateNodeFactory
208-
public abstract static class GetVarNamesNode extends PythonBuiltinNode {
210+
public abstract static class GetVarNamesNode extends PythonUnaryBuiltinNode {
209211
@Specialization
210212
protected Object get(PCode self) {
211213
Object[] varNames = self.getVarnames();
@@ -218,7 +220,7 @@ protected Object get(PCode self) {
218220

219221
@Builtin(name = "co_lnotab", minNumOfPositionalArgs = 1, isGetter = true)
220222
@GenerateNodeFactory
221-
public abstract static class GetLNoTabNode extends PythonBuiltinNode {
223+
public abstract static class GetLNoTabNode extends PythonUnaryBuiltinNode {
222224
@Specialization
223225
protected Object get(PCode self) {
224226
byte[] lnotab = self.getLnotab();
@@ -229,4 +231,12 @@ protected Object get(PCode self) {
229231
return factory().createBytes(lnotab);
230232
}
231233
}
234+
235+
@Builtin(name = __REPR__, minNumOfPositionalArgs = 1)
236+
@GenerateNodeFactory
237+
public abstract static class CodeReprNode extends PythonUnaryBuiltinNode {
238+
Object repr(PCode self) {
239+
return self.toString();
240+
}
241+
}
232242
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/PCode.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,4 +487,13 @@ private SourceSection readSourceLocation() {
487487
public boolean hasSourceLocation() {
488488
return readSourceLocation() != null;
489489
}
490+
491+
@Override
492+
@TruffleBoundary
493+
public String toString() {
494+
String name = this.getName() == null ? "None" : this.getName();
495+
String filename = this.getFilename() == null ? "None" : this.getFilename();
496+
int firstLineNo = this.getFirstLineNo() == 0 ? -1 : this.getFirstLineNo();
497+
return String.format("<code object %s, file \"%s\", line %d>", name, filename, firstLineNo);
498+
}
490499
}

graalpython/lib-graalpython/code.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,6 @@ def a_function(): pass
4141
codetype = type(a_function.__code__)
4242

4343

44-
def co_repr(self):
45-
return '<code object %s, file "%s", line %d>' % (self.co_name, self.co_filename, self.co_firstlineno)
46-
47-
4844
def co_replace(self, **kwargs):
4945
import types
5046
return types.CodeType(
@@ -67,5 +63,4 @@ def co_replace(self, **kwargs):
6763
)
6864

6965

70-
codetype.__repr__ = co_repr
7166
codetype.replace = co_replace

0 commit comments

Comments
 (0)