From 52f12c6c2c946d8d3c0a7845d48e11ff8b8fb597 Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Sun, 12 Nov 2023 03:01:49 -0600 Subject: fuck it we ball --- examples/cgol.sloth | 50 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 20 deletions(-) (limited to 'examples') diff --git a/examples/cgol.sloth b/examples/cgol.sloth index a0e1878..fafe440 100644 --- a/examples/cgol.sloth +++ b/examples/cgol.sloth @@ -1,7 +1,7 @@ fn populate() [Int] { # Initialize life vector - var life: [Int] = [0]; + var life: [Int] = [1]; vpopi(life); # Fill the vector with random values @@ -28,26 +28,28 @@ fn coord(x: Int, y: Int) Int return res; } -fn cval(x: Int, y: Int, life: [Int]) Int +fn cval(x: Int, y: Int, life: [Int]) Int { # Check to make sure index exists before returning var res: Int = 0; var c: Int = coord(x, y); - if c >= 0 { + if c >= 0 + { res = vgeti(life, c); } return res; } -fn gol(total: Int, alive: Bool) Int -{ +#fn gol(total: Int, alive: Bool) Int +#{ - if !alive && total == 3 { - return 1; - } - if alive && () - return 0; -} + #if !alive && total == 3 + #{ + #return 1; + #} + #if alive && () + #return 0; + #} fn update(life: [Int], new: [Int]) { @@ -97,32 +99,40 @@ fn update(life: [Int], new: [Int]) } } -fn display(life: [Int]) { +fn display(life: [Int]) +{ # Iterate through life - for x in 3..62 { - for y in 0..240 { + for x in 3..62 + { + for y in 0..240 + { termpos(x-3, y); - if cval(x-3, y, life) == 1 { + if cval(x-3, y, life) == 1 + { print("█"); - } else { + } + else + { print(" "); } } } } -fn main() Int { +fn main() Int +{ # Populate var life: [Int] = populate(); display(life); - curshide(); + curshide(); # Play forever - while true { + while true + { var new: [Int] = populate(); update(life, new); display(new); life = new; - wait(100); + # wait(100); } return 0; } -- cgit v1.2.3 From d767828cee67bae17b811062949653234aa14b28 Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Fri, 1 Dec 2023 22:20:07 -0600 Subject: shitty ptrs --- build.sh | 2 +- examples/cgol.sloth | 2 +- examples/mem.sloth | 9 +++++++++ sloth/src/codegen/mod.rs | 1 + std/extern.sloth | 5 +++++ std/stdmem.c | 20 ++++++++++++++++++++ std/stdmem.sloth | 0 7 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 examples/mem.sloth create mode 100644 std/stdmem.c create mode 100644 std/stdmem.sloth (limited to 'examples') diff --git a/build.sh b/build.sh index a53fb29..760f2ab 100755 --- a/build.sh +++ b/build.sh @@ -5,7 +5,7 @@ FILENAME="$1" ./target/release/sloth std/extern.sloth std/stdmath.sloth std/stdio.sloth $FILENAME # Generate binary -clang -lm output.o std/stdsocket.c std/stdio.c std/stdlib.c std/stdmath.c -o "${FILENAME%.sloth}" +clang -lm output.o std/stdsocket.c std/stdio.c std/stdlib.c std/stdmath.c std/stdmem.c -o "${FILENAME%.sloth}" # Move file mv "${FILENAME%.sloth}" out/ diff --git a/examples/cgol.sloth b/examples/cgol.sloth index fafe440..db578f9 100644 --- a/examples/cgol.sloth +++ b/examples/cgol.sloth @@ -1,7 +1,7 @@ fn populate() [Int] { # Initialize life vector - var life: [Int] = [1]; + var life: [Int] = ["Hello World"]; vpopi(life); # Fill the vector with random values diff --git a/examples/mem.sloth b/examples/mem.sloth new file mode 100644 index 0000000..cb52191 --- /dev/null +++ b/examples/mem.sloth @@ -0,0 +1,9 @@ +fn main() { + var intpointer: Int = memalloc(64); + println("We vibin"); + assignrefi(intpointer, 10); + println("Still vibin"); + var derefd: Int = drefi(intpointer); + print("Val of drefd: "); + println(istr(derefd)); +} diff --git a/sloth/src/codegen/mod.rs b/sloth/src/codegen/mod.rs index 7ac1011..abad70d 100644 --- a/sloth/src/codegen/mod.rs +++ b/sloth/src/codegen/mod.rs @@ -556,6 +556,7 @@ impl<'ctx> Codegen<'ctx> { "", ) }; + self.builder.build_store(value_ptr, value); } diff --git a/std/extern.sloth b/std/extern.sloth index c970541..e99a6cc 100644 --- a/std/extern.sloth +++ b/std/extern.sloth @@ -26,3 +26,8 @@ foreign fn clientsock(port: Int, addr: String) Int; foreign fn closesock(soc: Int, server:Bool); foreign fn sendsock(msg: String, soc: Int); foreign fn recvsock(soc: Int) String; + +#stdmem +foreign fn memalloc(size: Int) Int; +foreign fn drefi(loc: Int) Int; +foreign fn assignrefi(loc: Int, num: Int); diff --git a/std/stdmem.c b/std/stdmem.c new file mode 100644 index 0000000..c3d0300 --- /dev/null +++ b/std/stdmem.c @@ -0,0 +1,20 @@ +#include +#include +#include +char *heap[100000]; +int heaploc = 0; + +int memalloc(int size) { + const int chunk = heaploc; + heap[heaploc++] = malloc(size); + printf("MEMALLOC: heap[%d]\n", chunk); + return chunk; +} +int drefi(int loc) { + printf("DREF: *heap[%d] = %d\n", loc, *heap[loc]); + return *heap[loc]; +} +void assignrefi(int loc, int num) { + *heap[loc] = num; + printf("ASSREF: *heap[%d] = %d\n", loc, *heap[loc]); +} diff --git a/std/stdmem.sloth b/std/stdmem.sloth new file mode 100644 index 0000000..e69de29 -- cgit v1.2.3