From b24bfc02415d263fa4e8f4e3268df53a6aebbbae Mon Sep 17 00:00:00 2001 From: Toni Date: Sat, 22 Nov 2025 21:06:00 +0100 Subject: [PATCH] sqlite3, fizzbuzz examples --- README.md | 2 +- examples/fizzbuzz.zr | 10 ++++++++++ examples/sqlite_todo.zr | 33 +++++++++++++++++++++++++++++++++ src/std.zr | 2 +- 4 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 examples/fizzbuzz.zr create mode 100644 examples/sqlite_todo.zr diff --git a/README.md b/README.md index 4d0c4b0..f624b78 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A very cool language * Clean indentation-based syntax * Compiles to x86_64 Assembly * ~~No libc required~~ (SOON; still used for memory allocation and DNS resolution) -* Produces tiny static executables (~50KB with musl) +* Produces tiny static executables (~30KB with musl) * Sometimes works * Has the pipe operator diff --git a/examples/fizzbuzz.zr b/examples/fizzbuzz.zr new file mode 100644 index 0000000..a14b190 --- /dev/null +++ b/examples/fizzbuzz.zr @@ -0,0 +1,10 @@ +func main[] : I64 + for i in 1..40 + if i % 15 == 0 + io.println("FizzBuzz") + else if i % 5 == 0 + io.println("Buzz") + else if i %3 == 0 + io.println("Fizz") + else + io.println_i64(i) \ No newline at end of file diff --git a/examples/sqlite_todo.zr b/examples/sqlite_todo.zr new file mode 100644 index 0000000..ec8a67f --- /dev/null +++ b/examples/sqlite_todo.zr @@ -0,0 +1,33 @@ +// needs to be compiled with -m -C="-lsqlite3" + +func main[] : I64 + extern sqlite3_open + extern sqlite3_exec + extern sqlite3_prepare_v2 + extern sqlite3_bind_text + extern sqlite3_step + extern sqlite3_errmsg + extern sqlite3_finalize + + let rc: I64 = 0 + let db: Ptr = mem.alloc(8) + let stmt: Ptr = mem.alloc(8) + + rc = sqlite3_open("todo.db", db) + if rc + dbg.panic("failed to open db") + + rc = sqlite3_exec(mem.read64(db), "CREATE TABLE IF NOT EXISTS todo(id INTEGER PRIMARY KEY AUTOINCREMENT, task TEXT NOT NULL);", 0, 0, 0) + if rc + dbg.panic(sqlite3_errmsg(mem.read64(db))) + + sqlite3_prepare_v2(mem.read64(db), "INSERT INTO todo(task) VALUES(?);", -1, stmt, 0) + + sqlite3_bind_text(mem.read64(stmt), 1, "World domination", -1, 0) + + if sqlite3_step(mem.read64(stmt)) != 101 + dbg.panic(sqlite3_errmsg(mem.read64(db))) + + io.println("Task added!") + + sqlite3_finalize(mem.read64(stmt)) diff --git a/src/std.zr b/src/std.zr index 156bdf9..62afb46 100644 --- a/src/std.zr +++ b/src/std.zr @@ -1,5 +1,5 @@ func dbg.panic[msg: String] : Void - io.print("PANIC:") + io.print("PANIC: ") io.println(msg) os.exit(1)