Skip to content

Commit f24bf29

Browse files
committed
[GR-11996] Remove FrameSlot#getIndex usage
PullRequest: graalpython/216
2 parents 99cfb32 + dc9a795 commit f24bf29

File tree

3 files changed

+30
-17
lines changed

3 files changed

+30
-17
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1809,7 +1809,7 @@ Object method(PythonClass cls, Object self, PFunction func) {
18091809
}
18101810

18111811
@Specialization(guards = "isPythonBuiltinClass(cls)")
1812-
Object method(@SuppressWarnings("unused") PythonClass cls, Object self, PBuiltinFunction func) {
1812+
Object builtinMethod(@SuppressWarnings("unused") PythonClass cls, Object self, PBuiltinFunction func) {
18131813
return factory().createBuiltinMethod(self, func);
18141814
}
18151815
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/parser/ScopeInfo.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626
package com.oracle.graal.python.parser;
2727

28+
import java.util.ArrayList;
2829
import java.util.Collection;
2930
import java.util.HashSet;
3031
import java.util.LinkedHashSet;
@@ -51,6 +52,7 @@ public enum ScopeKind {
5152

5253
private final String scopeId;
5354
private final FrameDescriptor frameDescriptor;
55+
private final ArrayList<String> identifierToIndex;
5456
private ScopeKind scopeKind;
5557
private final ScopeInfo parent;
5658

@@ -86,6 +88,7 @@ public ScopeInfo(String scopeId, ScopeKind kind, FrameDescriptor frameDescriptor
8688
this.scopeKind = kind;
8789
this.frameDescriptor = frameDescriptor == null ? new FrameDescriptor() : frameDescriptor;
8890
this.parent = parent;
91+
this.identifierToIndex = new ArrayList<>();
8992
// register current scope as child to parent scope
9093
if (this.parent != null) {
9194
this.nextChildScope = this.parent.firstChildScope;
@@ -139,11 +142,14 @@ public FrameSlot findFrameSlot(String identifier) {
139142
return this.getFrameDescriptor().findFrameSlot(identifier);
140143
}
141144

142-
private void createSlotIfNotPresent(String identifier) {
145+
FrameSlot createSlotIfNotPresent(String identifier) {
143146
assert identifier != null : "identifier is null!";
144147
FrameSlot frameSlot = this.getFrameDescriptor().findFrameSlot(identifier);
145148
if (frameSlot == null) {
146-
this.getFrameDescriptor().addFrameSlot(identifier);
149+
identifierToIndex.add(identifier);
150+
return getFrameDescriptor().addFrameSlot(identifier);
151+
} else {
152+
return frameSlot;
147153
}
148154
}
149155

@@ -267,4 +273,13 @@ public String toString() {
267273
CompilerAsserts.neverPartOfCompilation();
268274
return scopeKind.toString() + " " + scopeId;
269275
}
276+
277+
public Integer getVariableIndex(String name) {
278+
for (int i = 0; i < identifierToIndex.size(); i++) {
279+
if (identifierToIndex.get(i).equals(name)) {
280+
return i;
281+
}
282+
}
283+
throw new IllegalStateException("Cannot find argument for name " + name + " in scope " + getScopeId());
284+
}
270285
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/parser/TranslationEnvironment.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public void createLocal(String name) {
180180
}
181181

182182
private FrameSlot createAndReturnLocal(String name) {
183-
return currentScope.getFrameDescriptor().findOrAddFrameSlot(name);
183+
return currentScope.createSlotIfNotPresent(name);
184184
}
185185

186186
private boolean isCellInCurrentScope(String name) {
@@ -224,35 +224,33 @@ private StatementNode getWriteNode(String name, FrameSlot slot, ExpressionNode r
224224
return factory.createWriteLocal(right, slot);
225225
}
226226

227-
private StatementNode getWriteNode(String name, Function<FrameSlot, ReadArgumentNode> getReadNode) {
228-
FrameSlot slot = currentScope.findFrameSlot(name);
229-
ExpressionNode right = getReadNode.apply(slot).asExpression();
230-
231-
return getWriteNode(name, slot, right);
227+
private StatementNode getWriteNode(String name, Function<Integer, ReadArgumentNode> getReadNode) {
228+
ExpressionNode right = getReadNode.apply(currentScope.getVariableIndex(name)).asExpression();
229+
return getWriteNode(name, currentScope.findFrameSlot(name), right);
232230
}
233231

234232
public StatementNode getWriteArgumentToLocal(String name) {
235-
return getWriteNode(name, slot -> ReadIndexedArgumentNode.create(slot.getIndex()));
233+
return getWriteNode(name, index -> ReadIndexedArgumentNode.create(index));
236234
}
237235

238236
public StatementNode getWriteKeywordArgumentToLocal(String name, ReadDefaultArgumentNode readDefaultArgumentNode) {
239-
return getWriteNode(name, slot -> ReadKeywordNode.create(name, slot.getIndex(), readDefaultArgumentNode));
237+
return getWriteNode(name, index -> ReadKeywordNode.create(name, index, readDefaultArgumentNode));
240238
}
241239

242240
public StatementNode getWriteRequiredKeywordArgumentToLocal(String name) {
243-
return getWriteNode(name, slot -> ReadKeywordNode.create(name));
241+
return getWriteNode(name, index -> ReadKeywordNode.create(name));
244242
}
245243

246244
public StatementNode getWriteRequiredKeywordArgumentToLocal(String name, ReadDefaultArgumentNode readDefaultArgumentNode) {
247-
return getWriteNode(name, slot -> ReadKeywordNode.create(name, readDefaultArgumentNode));
245+
return getWriteNode(name, index -> ReadKeywordNode.create(name, readDefaultArgumentNode));
248246
}
249247

250248
public StatementNode getWriteVarArgsToLocal(String name) {
251-
return getWriteNode(name, slot -> ReadVarArgsNode.create(slot.getIndex()));
249+
return getWriteNode(name, index -> ReadVarArgsNode.create(index));
252250
}
253251

254252
public StatementNode getWriteKwArgsToLocal(String name, String[] names) {
255-
return getWriteNode(name, slot -> ReadVarKeywordsNode.createForUserFunction(names));
253+
return getWriteNode(name, index -> ReadVarKeywordsNode.createForUserFunction(names));
256254
}
257255

258256
static ScopeInfo findVariableScope(ScopeInfo enclosingScope, String identifier) {
@@ -351,7 +349,7 @@ public static FrameSlot makeTempLocalVariable(FrameDescriptor frameDescriptor) {
351349

352350
private void createGlobal(String name) {
353351
assert name != null : "name is null!";
354-
globalScope.getFrameDescriptor().findOrAddFrameSlot(name);
352+
globalScope.createSlotIfNotPresent(name);
355353
}
356354

357355
public void addLocalGlobals(String name) {
@@ -401,7 +399,7 @@ protected ReadDefaultArgumentNode[] getDefaultArgumentReads() {
401399
}
402400

403401
public FrameSlot getReturnSlot() {
404-
return currentScope.getFrameDescriptor().findOrAddFrameSlot(RETURN_SLOT_ID);
402+
return currentScope.createSlotIfNotPresent(RETURN_SLOT_ID);
405403
}
406404

407405
private ScopeInfo findEnclosingClassScope() {

0 commit comments

Comments
 (0)