From 85ae695db10555d4890556c2abac6c18eb4c2182 Mon Sep 17 00:00:00 2001 From: Julian Hurst Date: Sat, 28 Mar 2026 22:54:01 +0100 Subject: Handle EOF better --- cmd/hs/hs.ha | 73 ++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 47 insertions(+), 26 deletions(-) (limited to 'cmd') diff --git a/cmd/hs/hs.ha b/cmd/hs/hs.ha index c0ad72f..233c54f 100644 --- a/cmd/hs/hs.ha +++ b/cmd/hs/hs.ha @@ -12,42 +12,63 @@ export fn main() void = { state = parser::tokentype::START, unreadbuf = ['0'...], unreadcount = 0z, + currentline = 1z, + end = false, }; - let ast = parser::parse(&p); - let ast = match (ast) { - case let a: parser::ast => - yield a; - case let e: parser::error => - fmt::fatal(parser::strerror(e)); - }; - walkast(ast); + let it = interpreter::interpreter { vars = [], }; - interpreter::interpret(&it, ast); - - let ast = parser::parse(&p); - let ast = match (ast) { - case let a: parser::ast => - yield a; - case let e: parser::error => - fmt::fatal(parser::strerror(e)); + for (let ast => parser::parse(&p)) { + let ast = match (ast) { + case let a: parser::ast => + yield a; + case let e: parser::error => + fmt::println("poopies")!; + fmt::fatal(parser::strerror(e)); + }; + interpreter::interpret(&it, ast); }; - interpreter::interpret(&it, ast); - for (let var .. it.vars) { fmt::printfln("{}: {}", var.0, var.1)!; }; - let ast = parser::parse(&p); - let ast = match (ast) { - case let a: parser::ast => - yield a; - case let e: parser::error => - fmt::fatal(parser::strerror(e)); - }; - interpreter::interpret(&it, ast); +// let ast = parser::parse(&p); +// let ast = match (ast) { +// case let a: parser::ast => +// yield a; +// case let e: parser::error => +// fmt::fatal(parser::strerror(e)); +// }; +// walkast(ast); +// let it = interpreter::interpreter { +// vars = [], +// }; +// +// interpreter::interpret(&it, ast); +// +// let ast = parser::parse(&p); +// let ast = match (ast) { +// case let a: parser::ast => +// yield a; +// case let e: parser::error => +// fmt::fatal(parser::strerror(e)); +// }; +// interpreter::interpret(&it, ast); +// +// for (let var .. it.vars) { +// fmt::printfln("{}: {}", var.0, var.1)!; +// }; +// +// let ast = parser::parse(&p); +// let ast = match (ast) { +// case let a: parser::ast => +// yield a; +// case let e: parser::error => +// fmt::fatal(parser::strerror(e)); +// }; + //interpreter::interpret(&it, ast); //let tk = parsetoken(&p); //fmt::printfln("tk value: {}\ntk type: {}", tk.value, parser::strtktype(tk.tktype))!; -- cgit v1.2.3