From aa28a781022738ca45b4768771a25b2bcb52b4c0 Mon Sep 17 00:00:00 2001 From: overflowerror Date: Sat, 27 Apr 2024 18:30:40 +0200 Subject: [PATCH] feat: Add read() builtin to read to array/string --- compiler/src/builtins/builtins.c | 2 ++ compiler/src/builtins/io.c | 19 +++++++++++++++++++ .../test/cases/020b-print-read-empty-array.in | 2 ++ .../cases/020b-print-read-empty-array.out | 2 ++ 4 files changed, 25 insertions(+) create mode 100644 compiler/test/cases/020b-print-read-empty-array.in create mode 100644 compiler/test/cases/020b-print-read-empty-array.out diff --git a/compiler/src/builtins/builtins.c b/compiler/src/builtins/builtins.c index 7773c3c..7ec5c4d 100644 --- a/compiler/src/builtins/builtins.c +++ b/compiler/src/builtins/builtins.c @@ -6,6 +6,7 @@ decl(print); decl(read_char); +decl(read); decl(to_str); @@ -15,6 +16,7 @@ static struct builtin_list_item { } builtins[] = { {"print", print}, {"read_char", read_char}, + {"read", read}, {"to_str", to_str}, }; diff --git a/compiler/src/builtins/io.c b/compiler/src/builtins/io.c index fa9ccbf..cdf0ae0 100644 --- a/compiler/src/builtins/io.c +++ b/compiler/src/builtins/io.c @@ -47,3 +47,22 @@ extern region_t* read_char(FILE* out, scope_t* scope, size_t argc, region_t** ar return result; } + +extern region_t* read(FILE* out, scope_t* scope, size_t argc, region_t** argv) { + if (argc == 0) { + // default to read_char + return read_char(out, scope, argc, argv); + } + if (argc != 1) { + panic("read() has at most one argument"); + } + + region_t* region = argv[0]; + + for (size_t i = 0; i < region->size; i++) { + move_offset(region, i); input(); + } + + return region; +} + diff --git a/compiler/test/cases/020b-print-read-empty-array.in b/compiler/test/cases/020b-print-read-empty-array.in new file mode 100644 index 0000000..a7b9ac2 --- /dev/null +++ b/compiler/test/cases/020b-print-read-empty-array.in @@ -0,0 +1,2 @@ +print(read([3])); +print("\n"); \ No newline at end of file diff --git a/compiler/test/cases/020b-print-read-empty-array.out b/compiler/test/cases/020b-print-read-empty-array.out new file mode 100644 index 0000000..dca7f7f --- /dev/null +++ b/compiler/test/cases/020b-print-read-empty-array.out @@ -0,0 +1,2 @@ +>>>[-]>[-]<[-<<<+>>>>+<]>[-<+>]<[-]>[-]<[-<<+>>>+<]>[-<+>]<[-]>[-]<[-<+>>+<]>[-<+>]<<<<,>,>,<<.>.>. +<<[-]++++++++++.