Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ func foo()->[Int] {
String result = compileSrc(src);
Assert.assertEquals("""
L0:
%t0 = New([Int,Int])
%t0 = New([Int])
%t0.append(1)
%t0.append(2)
%t0.append(3)
Expand All @@ -235,7 +235,7 @@ func foo(n: Int) -> [Int] {
Assert.assertEquals("""
L0:
arg n
%t1 = New([Int,Int])
%t1 = New([Int])
%t1.append(n)
ret %t1
goto L1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -788,7 +788,7 @@ func bar(x: Int)->Int {
return x;
}

func foo() {
func foo()->Int {
return bar(10);
}
""";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func fib(n: Int)->Int {
return f2;
}

func foo() {
func foo()->Int {
return fib(10);
}
""";
Expand Down Expand Up @@ -229,7 +229,7 @@ func bar(data: [Int]) {
else
data[2] = 123 + j + 10
}
func foo() {
func foo()->Int {
var data = new [Int] {0,0,0}
bar(data)
return data[0]+data[1]+data[2];
Expand All @@ -253,7 +253,7 @@ func bar(data: [Int]) {
else
data[2] = 123 - j + 10
}
func foo() {
func foo()->Int {
var data = new [Int] {0,0,0}
bar(data)
return data[0]+data[1]+data[2];
Expand All @@ -277,7 +277,7 @@ func bar(data: [Int]) {
data[2] = 15
data[3] = j + 21
}
func foo() {
func foo()->Int {
var data = new [Int] {0,0,0,0}
bar(data)
return data[0]+data[1]+data[2]+data[3];
Expand All @@ -301,7 +301,7 @@ func bar(data: [Int]) {
data[2] = j * 15
data[3] = j * 21
}
func foo() {
func foo()->Int {
var data = new [Int] {0,0,0,0}
bar(data)
return data[0]+data[1]+data[2]+data[3];
Expand Down Expand Up @@ -329,7 +329,7 @@ func bar(data: [Int]) {
}
data[3] = j + 21
}
func foo() {
func foo()->Int {
var data = new [Int] {1,0,0,0}
bar(data)
return data[0]+data[1]+data[2]+data[3]
Expand Down Expand Up @@ -361,7 +361,7 @@ func bar(data: [Int]) {
}
data[3] = (j+k) * 21
}
func foo() {
func foo()->Int {
var data = new [Int] {1,0,0,0}
bar(data)
return data[0]+data[1]+data[2]+data[3]
Expand Down Expand Up @@ -389,7 +389,7 @@ func bar(data: [Int]) {
data[1] = j
data[2] = i
}
func foo() {
func foo()->Int {
var data = new [Int] {2,0,0}
bar(data)
return data[0]+data[1]+data[2];
Expand All @@ -411,7 +411,7 @@ func bar(data: [Int]) {
else j = data[0]
data[0] = j * 21 + data[1]
}
func foo() {
func foo()->Int {
var data = new [Int] {2,3}
bar(data)
return data[0]+data[1];
Expand All @@ -433,7 +433,7 @@ func bar(data: [Int]) {
j = j * 21 + 25 / j
data[1] = j
}
func foo() {
func foo()->Int {
var data = new [Int] {5,3}
bar(data)
return data[0]+data[1];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,12 @@ private AST.Expr parsePrimary(Lexer lexer) {
return x;
}
case IDENT -> {
if (isToken(currentToken, "new")) {
if (isToken(currentToken, "null")) {
var x = new AST.LiteralExpr(currentToken);
nextToken(lexer);
return x;
}
else if (isToken(currentToken, "new")) {
return parseNew(lexer);
}
else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public class CompiledFunction {

public BasicBlock entry;
public BasicBlock exit;
private int bid = 0;
private BasicBlock currentBlock;
private int BID = 0;
public BasicBlock currentBlock;
private BasicBlock currentBreakTarget;
private BasicBlock currentContinueTarget;
public int maxLocalReg;
Expand All @@ -33,7 +33,7 @@ public class CompiledFunction {
public CompiledFunction(Symbol.FunctionTypeSymbol functionSymbol) {
AST.FuncDecl funcDecl = (AST.FuncDecl) functionSymbol.functionDecl;
setVirtualRegisters(funcDecl.scope);
this.bid = 0;
this.BID = 0;
this.entry = this.currentBlock = createBlock();
this.exit = createBlock();
this.currentBreakTarget = null;
Expand Down Expand Up @@ -71,11 +71,11 @@ private void setVirtualRegisters(Scope scope) {
}

private BasicBlock createBlock() {
return new BasicBlock(bid++);
return new BasicBlock(BID++);
}

private BasicBlock createLoopHead() {
return new BasicBlock(bid++, true);
return new BasicBlock(BID++, true);
}

private void compileBlock(AST.BlockStmt block) {
Expand All @@ -90,7 +90,7 @@ private void compileReturn(AST.ReturnStmt returnStmt) {
if (isIndexed)
codeIndexedLoad();
if (virtualStack.size() == 1)
code(new Instruction.Return(pop()));
code(new Instruction.Ret(pop()));
else if (virtualStack.size() > 1)
throw new CompilerException("Virtual stack has more than one item at return");
}
Expand All @@ -109,6 +109,7 @@ private void compileStatement(AST.Stmt statement) {
case AST.VarStmt letStmt -> {
compileLet(letStmt);
}
case AST.VarDeclStmt varDeclStmt -> {}
case AST.IfElseStmt ifElseStmt -> {
compileIf(ifElseStmt);
}
Expand Down
Loading