Skip to content

Commit

Permalink
Nagini Conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
alex28sh committed Jul 12, 2024
1 parent 0860638 commit 2fe1c55
Show file tree
Hide file tree
Showing 13 changed files with 468 additions and 79 deletions.
10 changes: 8 additions & 2 deletions Source/DafnyCore/AST/Statements/Assignment/LocalVariable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,14 @@ public string AssignUniqueName(FreshIdGenerator generator) {
sanitizedName ??= $"_{IVariable.CompileNameIdGenerator.FreshNumericId()}_{SanitizedNameShadowable}";

string compileName;
public string CompileName =>
compileName ??= SanitizedName;
public string CompileName {
get {
return compileName ??= SanitizedName;
}
set {
compileName = value;
}
}

// TODO rename and update comment? Or make it nullable?
public readonly Type SyntacticType; // this is the type mentioned in the declaration, if any
Expand Down
2 changes: 1 addition & 1 deletion Source/DafnyCore/AST/Types/UserDefinedType.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ void ObjectInvariant() {
}

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

public string FullName {
Expand Down
3 changes: 2 additions & 1 deletion Source/DafnyCore/Backends/CSharp/CsharpCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2046,7 +2046,7 @@ protected override void EmitHalt(IToken tok, Expression/*?*/ messageExpr, Concre
}

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

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

return startWr;
Expand Down
2 changes: 1 addition & 1 deletion Source/DafnyCore/Backends/Cplusplus/CppCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1324,7 +1324,7 @@ protected override void EmitHalt(IToken tok, Expression messageExpr, ConcreteSyn
}

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

Expand Down
6 changes: 4 additions & 2 deletions Source/DafnyCore/Backends/Dafny/DafnyCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1170,15 +1170,17 @@ protected override ConcreteSyntaxTree EmitBlock(ConcreteSyntaxTree wr) {
}

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

protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, ConcreteSyntaxTree wr) {
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
if (wr is BuilderSyntaxTree<StatementContainer> statementContainer) {
var whileBuilder = statementContainer.Builder.While();
guardWriter = new BuilderSyntaxTree<ExprContainer>(whileBuilder, this);
annotWriter = guardWriter.Fork();
return new BuilderSyntaxTree<StatementContainer>(whileBuilder, this);
} else {
throw new InvalidOperationException();
Expand Down
6 changes: 4 additions & 2 deletions Source/DafnyCore/Backends/GoLang/GoCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2065,15 +2065,16 @@ protected override void EmitHalt(IToken tok, Expression messageExpr, ConcreteSyn
}
}

protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, ConcreteSyntaxTree wr) {
protected override ConcreteSyntaxTree CreateWhileLoop(out ConcreteSyntaxTree guardWriter, out ConcreteSyntaxTree annotWriter, ConcreteSyntaxTree wr) {
wr.Write("for ");
guardWriter = wr.Fork();
var wBody = wr.NewBlock("");
annotWriter = wr.Fork();
return wBody;
}

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

wr.Write($"for {loopIndex.CompileName} := ");
var startWr = wr.Fork();
Expand Down Expand Up @@ -2109,6 +2110,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
}
}
bodyWr = EmitContinueLabel(labels, bodyWr);
annotWriter = bodyWr.Fork();
TrStmtList(body, bodyWr);

return startWr;
Expand Down
3 changes: 2 additions & 1 deletion Source/DafnyCore/Backends/Java/JavaCodeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3823,7 +3823,7 @@ protected override ConcreteSyntaxTree CreateForLoop(string indexVar, Action<Conc
}

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

var nativeType = AsNativeType(loopIndex.Type);

Expand Down Expand Up @@ -3865,6 +3865,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
}
}
bodyWr = EmitContinueLabel(labels, bodyWr);
annotWriter = bodyWr.Fork();
TrStmtList(body, bodyWr);

return startWr;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1242,7 +1242,7 @@ protected override void EmitHalt(IToken tok, Expression/*?*/ messageExpr, Concre
}

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

var nativeType = AsNativeType(loopIndex.Type);

Expand Down Expand Up @@ -1280,6 +1280,7 @@ protected override ConcreteSyntaxTree EmitForStmt(IToken tok, IVariable loopInde
}
}
bodyWr = EmitContinueLabel(labels, bodyWr);
annotWriter = bodyWr.Fork();
TrStmtList(body, bodyWr);

return startWr;
Expand Down
Loading

0 comments on commit 2fe1c55

Please sign in to comment.