diff options
| -rw-r--r-- | examples/cgol.sloth | 75 | ||||
| -rw-r--r-- | examples/hello.sloth | 19 | ||||
| -rw-r--r-- | sloth/src/codegen/mod.rs | 8 | ||||
| -rw-r--r-- | std/stdio.c | 4 | ||||
| -rw-r--r-- | std/stdlib.c | 8 | ||||
| -rw-r--r-- | std/stdlib.sloth | 6 | ||||
| -rw-r--r-- | test.c | 2 |
7 files changed, 79 insertions, 43 deletions
diff --git a/examples/cgol.sloth b/examples/cgol.sloth index b1a6998..a5b761f 100644 --- a/examples/cgol.sloth +++ b/examples/cgol.sloth @@ -5,9 +5,8 @@ fn populate() [Int] { # Fill the vector with random values var i: Int = 0; - while i < 100 { + while i < 2500 { var n: Int = randGen(0,1); - println(istr(n)); vpushi(life, n); i = i+1; } @@ -16,69 +15,79 @@ fn populate() [Int] { } fn coord(x: Int, y: Int) Int { - println("COORD"); var res: Int = -1; # Calculate index based on coordinates if x >= 0 && y >= 0 { - println("COORD1"); - res = y*10 + x; + res = y*50 + x; } # if coordinate is invalid, return -1 return res; } fn cval(x: Int, y: Int, life: [Int]) Int { - println("CVAL"); # Check to make sure index exists before returning var res: Int = 0; var c: Int = coord(x, y); - println("CVAL1"); if c >= 0 { - println("CVAL2"); res = vgeti(life, c); } - println("CVAL3"); return res; } -fn update(life: [Int]) [Int] { +fn update(life: [Int], new: [Int]) { # Iterate through life var x: Int = 0; - while x < 10 { + while x < 50 { var y: Int = 0; - while y < 10 { + while y < 50 { # Calculate total score around selected cell - var total: Int = cval(x-1, y-1) + cval(x-1, y) + cval(x-1, y+1) + cval(x, y-1) + cval(x, y+1) + cval(x+1, y-1) + cval(x+1, y) + cval(x+1, y+1); + var total: Int = + cval(x-1, y-1, life) + # Top Left + cval(x-1, y , life) + + cval(x-1, y+1, life) + + cval(x , y-1, life) + + cval(x , y+1, life) + + cval(x+1, y-1, life) + + cval(x+1, y , life) + + cval(x+1, y+1, life); # Apply game of life rules - if cval(x, y) == 1 && total < 2 || total > 3 { - vseti(life, 0); - } else if total == 3 { - vseti(life, 1); - } + var idx: Int = coord(x, y); + + if cval(x, y, life) == 1 { + if total < 2 || total > 3 { + vseti(new, idx, 0); + } else { + vseti(new, idx, 1); + } + } else { + if total == 3 { + vseti(new, idx, 1); + } else { + vseti(new, idx, 0); + } + } + y = y+1; } x = x+1; } - - return life; } fn display(life: [Int]) { - println("DISPLAY"); # Iterate through life + #termclear(); var x: Int = 0; - while x < 10 { - println("DISPLAY1"); + while x < 50 { var y: Int = 0; - while y < 10 { - println("DISPLAY2"); + while y < 50 { # if the cell is alive, print - if cval(x, y) == 1{ - println("DISPLAY3"); - termpos(x, y); + termpos(x, y); + if cval(x, y, life) == 1{ print("#"); - } + } else { + print(" "); + } y = y+1; } x = x+1; @@ -91,9 +100,11 @@ fn main() Int { display(life); # Play forever while true { - life = update(life); - display(life); - wait(0.5); + var new: [Int] = populate(); + update(life, new); + display(new); + life = new; + wait(1.0); } return 0; } diff --git a/examples/hello.sloth b/examples/hello.sloth index 8abb65c..75071c3 100644 --- a/examples/hello.sloth +++ b/examples/hello.sloth @@ -1,4 +1,23 @@ +foreign fn printdeez(nutz: Int); +foreign fn print(str: String); +foreign fn randGen(min: Int, max: Int) Int; + fn main() Int { + var x: [Int] = [5]; + vpopi(x); + var i: Int = 0; + while i < 100 { + vpushi(x, randGen(0, 100)); + i = i + 1; + } + + var y: Int = vgeti(x, 42); + var y: Int = vgeti(x, 45); + var y: Int = vgeti(x, 41); + var y: Int = vgeti(x, 49); + printdeez(y); + + print("Hello World\n"); return 0; } diff --git a/sloth/src/codegen/mod.rs b/sloth/src/codegen/mod.rs index 3120d11..debc151 100644 --- a/sloth/src/codegen/mod.rs +++ b/sloth/src/codegen/mod.rs @@ -433,7 +433,11 @@ impl<'ctx> Codegen<'ctx> { let inner_ptr = self .builder - .build_array_malloc(element_type, i32_type.const_int(100, false), "vecinnerptr") + .build_array_malloc( + element_type, + i32_type.const_int(5000, false), + "vecinnerptr", + ) .unwrap(); for (idx, value) in values.iter().enumerate() { @@ -479,7 +483,7 @@ impl<'ctx> Codegen<'ctx> { .build_store(size_ptr, i32_type.const_int(values.len() as u64, false)); self.builder - .build_store(cap_ptr, i32_type.const_int(100, false)); + .build_store(cap_ptr, i32_type.const_int(2500, false)); self.builder.build_store(inner, inner_ptr); diff --git a/std/stdio.c b/std/stdio.c index a257f67..d3ff5a0 100644 --- a/std/stdio.c +++ b/std/stdio.c @@ -14,3 +14,7 @@ void print(char *str) { void termpos(int x, int y) { printf("\x1b[%d;%dH", x, y); } + +void termclear() { + printf("\x1b[2J\x1b[H"); +} diff --git a/std/stdlib.c b/std/stdlib.c index 9510866..b70f5b7 100644 --- a/std/stdlib.c +++ b/std/stdlib.c @@ -22,7 +22,7 @@ int as_int(float x) { return (int) x; } -char* istr(int x) { - char snum[100]; - return (char* )itoa(x, snum, 10); -} +// char* istr(int x) { +// char snum[100]; +// return (char* )itoa(x, snum, 10); +// } diff --git a/std/stdlib.sloth b/std/stdlib.sloth index 913fd0b..eb6000d 100644 --- a/std/stdlib.sloth +++ b/std/stdlib.sloth @@ -5,8 +5,6 @@ foreign fn slen(str: String) Int; foreign fn parse_int(str: String) Int; foreign fn termpos(x: Int, y: Int); foreign fn as_int(x: Float) Int; -foreign fn istr(x: Int) Int; +#foreign fn istr(x: Int) Int; -fn termclear() Void { - print("\x1b[2J\x1b[H"); -} +foreign fn termclear() Void; @@ -6,7 +6,7 @@ void print(char* x) { void printfl(float x) { printf("%f", x); } -void printint(int x) { +void printdeez(int x) { printf("%d", x); } |
