Skip to content

Commit 2fe1c55

Browse files
committed
Nagini Conversion
1 parent 0860638 commit 2fe1c55

13 files changed

+468
-79
lines changed

Source/DafnyCore/AST/Statements/Assignment/LocalVariable.cs

+8-2
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,14 @@ public string AssignUniqueName(FreshIdGenerator generator) {
8080
sanitizedName ??= $"_{IVariable.CompileNameIdGenerator.FreshNumericId()}_{SanitizedNameShadowable}";
8181

8282
string compileName;
83-
public string CompileName =>
84-
compileName ??= SanitizedName;
83+
public string CompileName {
84+
get {
85+
return compileName ??= SanitizedName;
86+
}
87+
set {
88+
compileName = value;
89+
}
90+
}
8591

8692
// TODO rename and update comment? Or make it nullable?
8793
public readonly Type SyntacticType; // this is the type mentioned in the declaration, if any

Source/DafnyCore/AST/Types/UserDefinedType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ void ObjectInvariant() {
1717
}
1818

1919
public readonly Expression NamePath; // either NameSegment or ExprDotName (with the inner expression satisfying this same constraint)
20-
public readonly string Name;
20+
public string Name;
2121
[Rep]
2222

2323
public string FullName {

Source/DafnyCore/Backends/CSharp/CsharpCodeGenerator.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2046,7 +2046,7 @@ protected override void EmitHalt(IToken tok, Expression/*?*/ messageExpr, Concre
20462046
}
20472047

20482048
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string /*?*/ endVarName,
2049-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
2049+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
20502050

20512051
wr.Write($"for ({TypeName(loopIndex.Type, wr, tok)} {loopIndex.CompileName} = ");
20522052
var startWr = wr.Fork();
@@ -2062,6 +2062,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
20622062
bodyWr.WriteLine($"{loopIndex.CompileName}--;");
20632063
}
20642064
bodyWr = EmitContinueLabel(labels, bodyWr);
2065+
annotWriter = bodyWr.Fork();
20652066
TrStmtList(body, bodyWr);
20662067

20672068
return startWr;

Source/DafnyCore/Backends/Cplusplus/CppCodeGenerator.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1324,7 +1324,7 @@ protected override void EmitHalt(IToken tok, Expression messageExpr, ConcreteSyn
13241324
}
13251325

13261326
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string /*?*/ endVarName,
1327-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
1327+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
13281328
throw new UnsupportedFeatureException(tok, Feature.ForLoops, "for loops have not yet been implemented");
13291329
}
13301330

Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -1170,15 +1170,17 @@ protected override ConcreteSyntaxTree EmitBlock(ConcreteSyntaxTree wr) {
11701170
}
11711171

11721172
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string endVarName,
1173-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
1173+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
11741174
AddUnsupportedFeature(tok, Feature.ForLoops);
1175+
annotWriter = null;
11751176
return wr;
11761177
}
11771178

1178-
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, ConcreteSyntaxTree wr) {
1179+
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
11791180
if (wr is BuilderSyntaxTree<StatementContainer> statementContainer) {
11801181
var whileBuilder = statementContainer.Builder.While();
11811182
guardWriter = new BuilderSyntaxTree<ExprContainer>(whileBuilder, this);
1183+
annotWriter = guardWriter.Fork();
11821184
return new BuilderSyntaxTree<StatementContainer>(whileBuilder, this);
11831185
} else {
11841186
throw new InvalidOperationException();

Source/DafnyCore/Backends/GoLang/GoCodeGenerator.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -2065,15 +2065,16 @@ protected override void EmitHalt(IToken tok, Expression messageExpr, ConcreteSyn
20652065
}
20662066
}
20672067

2068-
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, ConcreteSyntaxTree wr) {
2068+
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
20692069
wr.Write("for ");
20702070
guardWriter = wr.Fork();
20712071
var wBody = wr.NewBlock("");
2072+
annotWriter = wr.Fork();
20722073
return wBody;
20732074
}
20742075

20752076
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string /*?*/ endVarName,
2076-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
2077+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
20772078

20782079
wr.Write($"for {loopIndex.CompileName} := ");
20792080
var startWr = wr.Fork();
@@ -2109,6 +2110,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
21092110
}
21102111
}
21112112
bodyWr = EmitContinueLabel(labels, bodyWr);
2113+
annotWriter = bodyWr.Fork();
21122114
TrStmtList(body, bodyWr);
21132115

21142116
return startWr;

Source/DafnyCore/Backends/Java/JavaCodeGenerator.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3823,7 +3823,7 @@ protected override ConcreteSyntaxTree CreateForLoop(string indexVar, Action<Conc
38233823
}
38243824

38253825
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string /*?*/ endVarName,
3826-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
3826+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
38273827

38283828
var nativeType = AsNativeType(loopIndex.Type);
38293829

@@ -3865,6 +3865,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
38653865
}
38663866
}
38673867
bodyWr = EmitContinueLabel(labels, bodyWr);
3868+
annotWriter = bodyWr.Fork();
38683869
TrStmtList(body, bodyWr);
38693870

38703871
return startWr;

Source/DafnyCore/Backends/JavaScript/JavaScriptCodeGenerator.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,7 @@ protected override void EmitHalt(IToken tok, Expression/*?*/ messageExpr, Concre
12421242
}
12431243

12441244
protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopIndex, bool goingUp, string /*?*/ endVarName,
1245-
List<Statement> body, LList<Label> labels, ConcreteSyntaxTree wr) {
1245+
List<Statement> body, LList<Label> labels, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
12461246

12471247
var nativeType = AsNativeType(loopIndex.Type);
12481248

@@ -1280,6 +1280,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
12801280
}
12811281
}
12821282
bodyWr = EmitContinueLabel(labels, bodyWr);
1283+
annotWriter = bodyWr.Fork();
12831284
TrStmtList(body, bodyWr);
12841285

12851286
return startWr;

0 commit comments

Comments
 (0)