Skip to content

Commit fa80142

Browse files
committed
Renamed eager generator scope
1 parent d6ce577 commit fa80142

2 files changed

Lines changed: 11 additions & 19 deletions

File tree

pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1287,7 +1287,7 @@ public GeneratorMemberNode visitObjectMethod(ObjectMethod memberNode) {
12871287
@Override
12881288
public GeneratorMemberNode visitMemberPredicate(MemberPredicate ctx) {
12891289
var keyNode =
1290-
symbolTable.enterForEager(
1290+
symbolTable.enterEagerGenerator(
12911291
(scp) -> symbolTable.enterCustomThisScope(scope -> visitExpr(ctx.getPred())));
12921292
var member =
12931293
doVisitObjectEntryBody(createSourceSection(ctx), keyNode, ctx.getExpr(), ctx.getBodyList());
@@ -1336,7 +1336,8 @@ public GeneratorMemberNode visitWhenGenerator(WhenGenerator member) {
13361336
// when predicates cannot see their direct scope
13371337
var prev = isLevelUpUnreliable;
13381338
isLevelUpUnreliable = true;
1339-
var predicateNode = symbolTable.enterForEager((scope) -> visitExpr(member.getPredicate()));
1339+
var predicateNode =
1340+
symbolTable.enterEagerGenerator((scope) -> visitExpr(member.getPredicate()));
13401341
isLevelUpUnreliable = prev;
13411342
return new GeneratorWhenNode(sourceSection, predicateNode, thenNodes, elseNodes);
13421343
}
@@ -1389,15 +1390,12 @@ public GeneratorMemberNode visitForGenerator(ForGenerator ctx) {
13891390
var memberDescriptorBuilder = currentScope.newForGeneratorMemberDescriptorBuilder();
13901391
var keySlot = -1;
13911392
var valueSlot = -1;
1392-
var nestLevel = -1;
13931393
if (keyIdentifier != null) {
13941394
keySlot = generatorDescriptorBuilder.addSlot(FrameSlotKind.Illegal, keyIdentifier, null);
1395-
nestLevel = keySlot;
13961395
memberDescriptorBuilder.addSlot(FrameSlotKind.Illegal, keyIdentifier, null);
13971396
}
13981397
if (valueIdentifier != null) {
13991398
valueSlot = generatorDescriptorBuilder.addSlot(FrameSlotKind.Illegal, valueIdentifier, null);
1400-
if (nestLevel == -1) nestLevel = valueSlot;
14011399
memberDescriptorBuilder.addSlot(FrameSlotKind.Illegal, valueIdentifier, null);
14021400
}
14031401
var unresolvedKeyTypeNode =
@@ -1422,12 +1420,11 @@ public GeneratorMemberNode visitForGenerator(ForGenerator ctx) {
14221420
: null;
14231421
var prev = isLevelUpUnreliable;
14241422
isLevelUpUnreliable = true;
1425-
var iterableNode = symbolTable.enterForEager(scope -> visitExpr(ctx.getExpr()));
1423+
var iterableNode = symbolTable.enterEagerGenerator(scope -> visitExpr(ctx.getExpr()));
14261424
isLevelUpUnreliable = prev;
14271425
var memberNodes =
14281426
symbolTable.enterForGenerator(
14291427
params,
1430-
nestLevel,
14311428
generatorDescriptorBuilder,
14321429
memberDescriptorBuilder,
14331430
scope -> doVisitForWhenBody(ctx.getBody()));
@@ -2460,7 +2457,7 @@ private ObjectMember doVisitObjectProperty(
24602457
}
24612458

24622459
private Pair<ExpressionNode, ObjectMember> doVisitObjectEntry(ObjectEntry entry) {
2463-
var keyNode = symbolTable.enterForEager((scp) -> visitExpr(entry.getKey()));
2460+
var keyNode = symbolTable.enterEagerGenerator((scp) -> visitExpr(entry.getKey()));
24642461
// var keyNode = visitExpr(entry.getKey());
24652462

24662463
var member =

pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -123,13 +123,12 @@ public <T> T enterMethod(
123123
nodeFactory);
124124
}
125125

126-
public <T> T enterForEager(Function<ForEagerScope, T> nodeFactory) {
127-
return doEnter(new ForEagerScope(currentScope, currentScope.qualifiedName), nodeFactory);
126+
public <T> T enterEagerGenerator(Function<EagerGeneratorScope, T> nodeFactory) {
127+
return doEnter(new EagerGeneratorScope(currentScope, currentScope.qualifiedName), nodeFactory);
128128
}
129129

130130
public <T> T enterForGenerator(
131131
List<String> params,
132-
int nestLevel,
133132
FrameDescriptor.Builder frameDescriptorBuilder,
134133
FrameDescriptor.Builder memberDescriptorBuilder,
135134
Function<ForGeneratorScope, T> nodeFactory) {
@@ -138,7 +137,6 @@ public <T> T enterForGenerator(
138137
currentScope,
139138
currentScope.qualifiedName,
140139
params,
141-
nestLevel,
142140
frameDescriptorBuilder,
143141
memberDescriptorBuilder),
144142
nodeFactory);
@@ -419,7 +417,7 @@ private interface ResolutionFunction<T> {
419417
var shouldSkip = false;
420418
for (var scope = this; scope != null; scope = scope.getParent()) {
421419
// for headers resolve variables one scope up
422-
if (scope instanceof ForEagerScope) {
420+
if (scope instanceof EagerGeneratorScope) {
423421
shouldSkip = true;
424422
continue;
425423
}
@@ -767,29 +765,26 @@ public LambdaScope(
767765
}
768766
}
769767

770-
// A scope used only for variable resolution
771-
public static final class ForEagerScope extends Scope {
772-
private ForEagerScope(@Nullable Scope parent, String qualifiedName) {
768+
// A generator scope that is resolved eagerly and one level above
769+
public static final class EagerGeneratorScope extends Scope {
770+
private EagerGeneratorScope(@Nullable Scope parent, String qualifiedName) {
773771
super(parent, null, qualifiedName, ConstLevel.NONE, FrameDescriptor.newBuilder());
774772
}
775773
}
776774

777775
public static final class ForGeneratorScope extends Scope implements LexicalScope {
778776
private final FrameDescriptor.Builder memberDescriptorBuilder;
779777
final List<String> params;
780-
private final int nestLevel;
781778

782779
public ForGeneratorScope(
783780
Scope parent,
784781
String qualifiedName,
785782
List<String> params,
786-
int nestLevel,
787783
FrameDescriptor.Builder frameDescriptorBuilder,
788784
FrameDescriptor.Builder memberDescriptorBuilder) {
789785
super(parent, null, qualifiedName, ConstLevel.NONE, frameDescriptorBuilder);
790786
this.memberDescriptorBuilder = memberDescriptorBuilder;
791787
this.params = params;
792-
this.nestLevel = nestLevel;
793788
}
794789

795790
public FrameDescriptor buildMemberDescriptor() {

0 commit comments

Comments
 (0)