Skip to content

Commit 06469bd

Browse files
author
Ray Hu
committed
Continued.
1 parent b8fa350 commit 06469bd

23 files changed

Lines changed: 78 additions & 57 deletions

modules/core/src/main/java/org/scribble/ast/local/LRecursion.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ public LInteractionNode merge(LInteractionNode ln) throws ScribbleException
7676
{
7777
throw new ScribbleException("Cannot merge recursions for " + this.recvar + " and " + them.recvar + ": " + this + ", " + ln);
7878
}
79-
return AstFactoryImpl.FACTORY.LRecursion(null, this.recvar.clone(), getBlock().merge(them.getBlock())); // Not reconstruct: leave context building to post-projection passes
79+
return AstFactoryImpl.FACTORY.LRecursion(this.source, this.recvar.clone(), getBlock().merge(them.getBlock())); // Not reconstruct: leave context building to post-projection passes
80+
// HACK: this source
8081
}
8182

8283
@Override

modules/core/src/main/java/org/scribble/del/DoDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public ScribNode leaveDisambiguation(ScribNode parent, ScribNode child, NameDisa
5151
ModuleContext mc = disamb.getModuleContext();
5252
ProtocolName<K> fullname = mc.getVisibleProtocolDeclFullName(doo.proto.toName());
5353
ProtocolNameNode<K> pnn = (ProtocolNameNode<K>)
54-
AstFactoryImpl.FACTORY.QualifiedNameNode(fullname.getKind(), fullname.getElements());
54+
AstFactoryImpl.FACTORY.QualifiedNameNode(doo.proto.getSource(), fullname.getKind(), fullname.getElements());
5555
// Didn't keep original namenode del
5656
return doo.reconstruct(doo.roles, doo.args, pnn);
5757
}

modules/core/src/main/java/org/scribble/del/ModuleDel.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.scribble.ast.ProtocolDecl;
1818
import org.scribble.ast.ScribNode;
1919
import org.scribble.ast.context.ModuleContext;
20+
import org.scribble.ast.global.GProtocolDecl;
2021
import org.scribble.ast.local.LProtocolDecl;
2122
import org.scribble.ast.name.qualified.ModuleNameNode;
2223
import org.scribble.main.ScribbleException;
@@ -103,10 +104,10 @@ public Module leaveProjection(ScribNode parent, ScribNode child, Projector proj,
103104
}
104105

105106
// lpd is the projected local protocol
106-
public Module createModuleForProjection(Projector proj, Module root, LProtocolDecl lpd, Map<GProtocolName, Set<Role>> deps)
107+
public Module createModuleForProjection(Projector proj, Module root, GProtocolDecl gpd, LProtocolDecl lpd, Map<GProtocolName, Set<Role>> deps)
107108
{
108109
ModuleNameNode modname = Projector.makeProjectedModuleNameNode(root.moddecl.getFullModuleName(), lpd.getHeader().getDeclName());
109-
ModuleDecl moddecl = AstFactoryImpl.FACTORY.ModuleDecl(modname);
110+
ModuleDecl moddecl = AstFactoryImpl.FACTORY.ModuleDecl(null, modname); // FIXME? source? root.moddecl.getSource()? Or ignore as purely generated
110111
List<ImportDecl<?>> imports = new LinkedList<>();
111112
for (GProtocolName gpn : deps.keySet())
112113
{
@@ -116,14 +117,14 @@ public Module createModuleForProjection(Projector proj, Module root, LProtocolDe
116117
ModuleNameNode targetmodname = Projector.makeProjectedModuleNameNode(gpn.getPrefix(), targetsimpname);
117118
if (!targetmodname.toName().equals(modname.toName())) // Self dependency -- each projected local is in its own module now, so can compare module names
118119
{
119-
imports.add(AstFactoryImpl.FACTORY.ImportModule(targetmodname, null));
120+
imports.add(AstFactoryImpl.FACTORY.ImportModule(null, targetmodname, null)); // FIXME? source?
120121
}
121122
}
122123
}
123124

124125
List<NonProtocolDecl<?>> data = new LinkedList<>(root.getNonProtocolDecls()); // FIXME: copy? // FIXME: only project the dependencies
125126
List<ProtocolDecl<?>> protos = Arrays.asList(lpd);
126-
return AstFactoryImpl.FACTORY.Module(moddecl, imports, data, protos);
127+
return AstFactoryImpl.FACTORY.Module(gpd.header.getSource(), moddecl, imports, data, protos);
127128
}
128129

129130
@Override

modules/core/src/main/java/org/scribble/del/global/GChoiceDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public ScribNode leaveProtocolInlining(ScribNode parent, ScribNode child, Protoc
3333
List<GProtocolBlock> blocks =
3434
gc.getBlocks().stream().map((b) -> (GProtocolBlock) ((InlineProtocolEnv) b.del().env()).getTranslation()).collect(Collectors.toList());
3535
RoleNode subj = gc.subj.clone();
36-
GChoice inlined = AstFactoryImpl.FACTORY.GChoice(subj, blocks);
36+
GChoice inlined = AstFactoryImpl.FACTORY.GChoice(gc.getSource(), subj, blocks);
3737
inl.pushEnv(inl.popEnv().setTranslation(inlined));
3838
return (GChoice) super.leaveProtocolInlining(parent, child, inl, gc);
3939
}

modules/core/src/main/java/org/scribble/del/global/GContinueDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public GContinue leaveProtocolInlining(ScribNode parent, ScribNode child, Protoc
2020
{
2121
GContinue gc = (GContinue) visited;
2222
RecVarNode recvar = (RecVarNode) ((InlineProtocolEnv) gc.recvar.del().env()).getTranslation();
23-
GContinue inlined = AstFactoryImpl.FACTORY.GContinue(recvar);
23+
GContinue inlined = AstFactoryImpl.FACTORY.GContinue(gc.getSource(), recvar);
2424
inl.pushEnv(inl.popEnv().setTranslation(inlined));
2525
return (GContinue) super.leaveProtocolInlining(parent, child, inl, gc);
2626
}

modules/core/src/main/java/org/scribble/del/global/GDelegationElemDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public GDelegationElem visitForNameDisambiguation(NameDisambiguator disamb, GDel
5959
throw new ScribbleException("Invalid delegation role: " + de);
6060
}
6161

62-
GProtocolNameNode pnn = (GProtocolNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(fullname.getKind(), fullname.getElements()); // Not keeping original namenode del
62+
GProtocolNameNode pnn = (GProtocolNameNode) AstFactoryImpl.FACTORY.QualifiedNameNode(de.proto.getSource(), fullname.getKind(), fullname.getElements()); // Not keeping original namenode del
6363
return de.reconstruct(pnn, de.role);
6464
}
6565

modules/core/src/main/java/org/scribble/del/global/GDoDel.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.scribble.del.global;
22

3+
import org.antlr.runtime.tree.CommonTree;
34
import org.scribble.ast.AstFactoryImpl;
45
import org.scribble.ast.ScribNode;
56
import org.scribble.ast.context.ModuleContext;
@@ -35,23 +36,27 @@ protected void addProtocolDependency(ProtocolDeclContextBuilder builder, Role se
3536
// Only called if cycle
3637
public GDo visitForSubprotocolInlining(ProtocolDefInliner builder, GDo child)
3738
{
39+
CommonTree blame = child.getSource();
3840
SubprotocolSig subsig = builder.peekStack();
39-
RecVarNode recvar = (RecVarNode) AstFactoryImpl.FACTORY.SimpleNameNode(RecVarKind.KIND, builder.getSubprotocolRecVar(subsig).toString());
40-
GContinue inlined = AstFactoryImpl.FACTORY.GContinue(recvar);
41+
RecVarNode recvar = (RecVarNode) AstFactoryImpl.FACTORY.SimpleNameNode(blame,
42+
RecVarKind.KIND, builder.getSubprotocolRecVar(subsig).toString());
43+
GContinue inlined = AstFactoryImpl.FACTORY.GContinue(blame, recvar);
4144
builder.pushEnv(builder.popEnv().setTranslation(inlined));
4245
return child;
4346
}
4447

4548
@Override
4649
public GDo leaveProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl, ScribNode visited) throws ScribbleException
4750
{
51+
CommonTree blame = visited.getSource();
4852
SubprotocolSig subsig = inl.peekStack();
4953
if (!inl.isCycle())
5054
{
51-
RecVarNode recvar = (RecVarNode) AstFactoryImpl.FACTORY.SimpleNameNode(RecVarKind.KIND, inl.getSubprotocolRecVar(subsig).toString());
55+
RecVarNode recvar = (RecVarNode) AstFactoryImpl.FACTORY.SimpleNameNode(blame,
56+
RecVarKind.KIND, inl.getSubprotocolRecVar(subsig).toString());
5257
GInteractionSeq gis = (GInteractionSeq) (((InlineProtocolEnv) inl.peekEnv()).getTranslation());
53-
GProtocolBlock gb = AstFactoryImpl.FACTORY.GProtocolBlock(gis);
54-
GRecursion inlined = AstFactoryImpl.FACTORY.GRecursion(recvar, gb);
58+
GProtocolBlock gb = AstFactoryImpl.FACTORY.GProtocolBlock(blame, gis);
59+
GRecursion inlined = AstFactoryImpl.FACTORY.GRecursion(blame, recvar, gb);
5560
inl.pushEnv(inl.popEnv().setTranslation(inlined));
5661
inl.removeSubprotocolRecVar(subsig);
5762
}

modules/core/src/main/java/org/scribble/del/global/GInteractionSeqDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public ScribNode leaveProtocolInlining(ScribNode parent, ScribNode child, Protoc
3838
gins.add((GInteractionNode) inlined);
3939
}
4040
}
41-
GInteractionSeq inlined = AstFactoryImpl.FACTORY.GInteractionSeq(gins);
41+
GInteractionSeq inlined = AstFactoryImpl.FACTORY.GInteractionSeq(gis.getSource(), gins);
4242
inl.pushEnv(inl.popEnv().setTranslation(inlined));
4343
return (GInteractionSeq) ScribDelBase.popAndSetVisitorEnv(this, inl, gis);
4444
}

modules/core/src/main/java/org/scribble/del/global/GProtocolBlockDel.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ public void enterProjection(ScribNode parent, ScribNode child, Projector proj) t
2525
@Override
2626
public ScribNode leaveProtocolInlining(ScribNode parent, ScribNode child, ProtocolDefInliner inl, ScribNode visited) throws ScribbleException
2727
{
28-
GProtocolBlock gpd = (GProtocolBlock) visited;
29-
GInteractionSeq seq = (GInteractionSeq) ((InlineProtocolEnv) gpd.seq.del().env()).getTranslation();
30-
GProtocolBlock inlined = AstFactoryImpl.FACTORY.GProtocolBlock(seq);
28+
GProtocolBlock gpb = (GProtocolBlock) visited;
29+
GInteractionSeq seq = (GInteractionSeq) ((InlineProtocolEnv) gpb.seq.del().env()).getTranslation();
30+
GProtocolBlock inlined = AstFactoryImpl.FACTORY.GProtocolBlock(gpb.getSource(), seq);
3131
inl.pushEnv(inl.popEnv().setTranslation(inlined));
32-
return (GProtocolBlock) ScribDelBase.popAndSetVisitorEnv(this, inl, gpd);
32+
return (GProtocolBlock) ScribDelBase.popAndSetVisitorEnv(this, inl, gpb);
3333
}
3434

3535
@Override

modules/core/src/main/java/org/scribble/del/global/GProtocolDeclDel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public ScribNode leaveRoleCollection(ScribNode parent, ScribNode child, RoleColl
9393
LProtocolDecl lpd = gpd.project(root, self, def); // FIXME: is root (always) the correct module? (wrt. LProjectionDeclDel?)
9494

9595
Map<GProtocolName, Set<Role>> deps = ((GProtocolDeclDel) gpd.del()).getGlobalProtocolDependencies(self);
96-
Module projected = ((ModuleDel) root.del()).createModuleForProjection(proj, root, lpd, deps);
96+
Module projected = ((ModuleDel) root.del()).createModuleForProjection(proj, root, gpd, lpd, deps);
9797
proj.addProjection(gpd.getFullMemberName(root), self, projected);
9898
return gpd;
9999
}

0 commit comments

Comments
 (0)