Compare commits

..

No commits in common. "fd16a12e7c142c5d7d5ad0af67c4e5f492e194bd" and "3d17813eb4acb73bf77d9175e315173446e2c68c" have entirely different histories.

7 changed files with 8 additions and 138 deletions

View File

@ -265,18 +265,23 @@ codegenStmt (TWhile cond body) = mdo
end <- block `named` "end"
return ()
codegenStmt (TAssign BaseAssign l e) = do
codegenStmt (TAssign BaseAssign l@(t, (TId name)) e) = do
op <- codegenExpr e
var <- codegenLVal l
store var 0 op
codegenStmt (TAssign AddAssign l e) = do
codegenStmt (TAssign BaseAssign l@((StructType tName), (LTMember ((_, TId sName)) field)) e) = do
op <- codegenExpr e
struct <- codegenLVal l
store struct 0 op
codegenStmt (TAssign AddAssign l@(t, (TId name)) e) = do
op <- codegenExpr e
var <- codegenLVal l
val <- load var 0
store var 0 =<< add val op
codegenStmt (TAssign SubAssign l e) = do
codegenStmt (TAssign SubAssign l@(t, (TId name)) e) = do
op <- codegenExpr e
var <- codegenLVal l
val <- load var 0

View File

@ -1,43 +0,0 @@
fn factorial(n: int) -> int {
var result: int;
if n == 0 {
result = 1;
} else {
result = n * factorial(n - 1);
}
return result;
}
fn is_positive(n: int) -> bool {
return n > 0;
}
fn main() -> int {
var a: int = 5;
printf("a = %d\n", a);
var b: int = 3;
printf("b = %d\n", b);
var c: int = (a + b) * 2 - 1;
c += factorial(5);
printf("c = %d\n", c);
while c > 0 {
printf("c = %d\n", c);
if c > 50 {
printf("c is greater than 50\n");
} else {
printf("c is less than or equal to 50\n");
}
c -= 16;
}
printf("End result: %d\n", c);
return 0;
}

View File

@ -1 +0,0 @@
function test() {}

View File

@ -1,21 +0,0 @@
struct Test {
a: int,
b: char,
}
fn main() -> int {
var t: Test;
t.a = 5;
t.b = 'a';
printf("t.a = %d\n", t.a);
printf("t.b = %c\n", t.b);
t.a += 3;
t.b = 'b';
printf("t.a = %d\n", t.a);
printf("t.b = %c\n", t.b);
return 0;
}

View File

View File

@ -1,38 +0,0 @@
fn rec_fib(n: int) -> int {
if n <= 1 {
return n;
}
return rec_fib(n - 1) + rec_fib(n - 2);
}
fn loop_fib(n: int) -> int {
var a: int = 0;
var b: int = 1;
var i: int = 0;
while i < n {
var c: int = a + b;
a = b;
b = c;
i += 1;
}
return a;
}
fn main() -> int {
var n: int = 20;
var rec_result: int = rec_fib(n);
var loop_result: int = loop_fib(n);
printf("Fibonacci of %d via recursion is %d\n", n, rec_result);
printf("Fibonacci of %d via loop is %d\n", n, loop_result);
if rec_result == loop_result {
printf("Results match\n");
} else {
printf("Results do not match\n");
}
return 0;
}

View File

@ -1,32 +0,0 @@
fn mult3(a: int, b: int, c: int) -> int {
return a * b * c;
}
fn loop_test() -> int {
var i: int = 0;
var result: int = 0;
while i < 10 {
printf("i = %d\n", i);
result += i;
i += 1;
}
return result;
}
fn main() -> int {
var a: int = 5;
var b: int = 3;
var c: int = 2;
var result: int = mult3(a, b, c);
printf("Result: %d\n", result);
result = loop_test();
printf("Result: %d\n", result);
return 0;
}