From 1eff1ddf819a32ca06747d1f7b505556b21ca768 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sat, 9 Jan 2021 14:49:25 -0600 Subject: [PATCH] started working on abstract stream api --- bin/onyx | Bin 317632 -> 317632 bytes bin/onyx-js | 4 + core/builtin.onyx | 8 +- core/io/io.onyx | 17 ++ core/io/reader.onyx | 130 +++++++++ core/io/stream.onyx | 269 ++++++++++++++++++ core/std/js.onyx | 4 + core/std/wasi.onyx | 4 + core/sys/js.onyx | 14 + core/sys/wasi.onyx | 13 + include/onyxtypes.h | 1 + onyx.exe | Bin 399360 -> 399872 bytes src/onyxparser.c | 10 + src/onyxtypes.c | 12 +- tests/{general1.onyx => general1.onyx.notest} | 0 15 files changed, 484 insertions(+), 2 deletions(-) create mode 100644 core/io/io.onyx create mode 100644 core/io/reader.onyx create mode 100644 core/io/stream.onyx rename tests/{general1.onyx => general1.onyx.notest} (100%) diff --git a/bin/onyx b/bin/onyx index fa0aaae9b2e543003afd87b22715999dd7aec7b1..c3d9cd57d081302a2c6a7df8cfbb3a2718231e75 100755 GIT binary patch delta 48795 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 rawptr; +allocator_proc :: #type proc (data: rawptr, action: AllocationAction, size: u32, align: u32, old_ptr: rawptr) -> rawptr; Allocator :: struct { data: rawptr; diff --git a/core/io/io.onyx b/core/io/io.onyx new file mode 100644 index 00000000..718e5f52 --- /dev/null +++ b/core/io/io.onyx @@ -0,0 +1,17 @@ +package core.io + +Error :: enum { + None :: 0x00; + + // The procedure is not implemented for this kind of stream. + NotImplemented :: 0x01; + + // The stream reached the end. + EOF :: 0x02; + + // The vtable was not set for this stream. + NoVtable :: 0x03; + + // A seek was outside the bounds of the stream. + OutOfBounds :: 0x04; +} \ No newline at end of file diff --git a/core/io/reader.onyx b/core/io/reader.onyx new file mode 100644 index 00000000..336c782a --- /dev/null +++ b/core/io/reader.onyx @@ -0,0 +1,130 @@ +package core.io + +Reader :: struct { + stream : ^Stream; +} + +reader_make :: proc (s: ^Stream) -> Reader { + assert(s.vtable != null, "Stream vtable was not setup correctly."); + + return Reader.{ s }; +} + +read_u32 :: proc (use reader: ^Reader) -> u32 { + n: u32 = 0; + + skip_whitespace(reader); + + curr := cast(u8) 0; + stream_peek_byte(stream, ^curr); + while curr >= #char "0" && curr <= #char "9" { + stream_read_byte(stream, ^curr); + + n *= 10; + n += cast(u32) (curr - #char "0"); + + if stream_peek_byte(stream, ^curr) == Error.EOF do break; + } + + return n; +} + +read_u64 :: proc (use reader: ^Reader) -> u64 { + n: u64 = 0; + + skip_whitespace(reader); + + curr := cast(u8) 0; + stream_peek_byte(stream, ^curr); + while curr >= #char "0" && curr <= #char "9" { + stream_read_byte(stream, ^curr); + + n *= 10; + n += cast(u64) (curr - #char "0"); + + if stream_peek_byte(stream, ^curr) == Error.EOF do break; + } + + return n; +} + +read_line :: proc (use reader: ^Reader, allocator := context.allocator) -> str { + curr_pos : i32; + stream_tell(stream, ^curr_pos); + + count := 0; + curr := cast(u8) 0; + stream_read_byte(stream, ^curr); + while curr != #char "\n" { + count += 1; + if stream_read_byte(stream, ^curr) != Error.None do break; + } + + stream_seek(stream, curr_pos, SeekFrom.Start); + + out := str.{ + data = raw_alloc(allocator, count * sizeof(u8)), + count = count, + }; + + stream_read(stream, out); + return out; +} + +read_word :: proc (use reader: ^Reader, allocator := context.allocator) -> str { + skip_whitespace(reader); + + curr_pos : i32; + stream_tell(stream, ^curr_pos); + + count := 0; + curr := cast(u8) 0; + stream_read_byte(stream, ^curr); + + while true { + if (curr >= #char "a" && curr <= #char "z") + || (curr >= #char "A" && curr <= #char "Z") + || curr == #char "_" { + count += 1; + } else { + break; + } + + if stream_read_byte(stream, ^curr) != Error.None do break; + } + + stream_seek(stream, curr_pos, SeekFrom.Start); + + out := str.{ + data = raw_alloc(allocator, count * sizeof(u8)), + count = count, + }; + + stream_read(stream, out); + return out; +} + +advance_line :: proc (use reader: ^Reader) { + curr := cast(u8) 0; + if stream_read_byte(stream, ^curr) != Error.None do return; + while curr != #char "\n" { + if stream_read_byte(stream, ^curr) != Error.None do return; + } + + stream_read_byte(stream, ^curr); +} + +skip_whitespace :: proc (use reader: ^Reader) { + while true { + byte := cast(u8) 0; + if stream_peek_byte(stream, ^byte) == Error.EOF do break; + + switch byte { + case #char " ", #char "\t", #char "\n", #char "\r" { + stream_read_byte(stream, ^byte); + } + + case #default do return; + } + } +} \ No newline at end of file diff --git a/core/io/stream.onyx b/core/io/stream.onyx new file mode 100644 index 00000000..bd76c745 --- /dev/null +++ b/core/io/stream.onyx @@ -0,0 +1,269 @@ +package core.io + +use package core + +Stream :: struct { + vtable : ^Stream_Vtable; +} + +#private +Stream_Vtable :: struct { + seek : proc (s: ^Stream, to: i32, whence: SeekFrom) -> Error; + tell : proc (s: ^Stream, out: ^i32) -> Error; + + read : proc (s: ^Stream, buffer: [] u8, number_read: ^u32) -> Error; + read_at : proc (s: ^Stream, at: u32, buffer: [] u8, number_read: ^u32) -> Error; + read_byte : proc (s: ^Stream, out: ^u8) -> Error; + unread_byte : proc (s: ^Stream) -> Error; + + write : proc (s: ^Stream, buffer: [] u8, number_written: ^u32) -> Error; + write_at : proc (s: ^Stream, at: u32, buffer: [] u8, number_written: ^u32) -> Error; + write_byte : proc (s: ^Stream, byte: u8) -> Error; + + close : proc (s: ^Stream) -> Error; + flush : proc (s: ^Stream) -> Error; + + size : proc (s: ^Stream) -> i32; +} + +SeekFrom :: enum { + Start :: 0x00; + Current :: 0x01; + End :: 0x02; +} + +stream_seek :: proc (use s: ^Stream, to: i32, whence: SeekFrom) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.seek == null_proc do return Error.NotImplemented; + + return vtable.seek(s, to, whence); +} + +stream_tell :: proc (use s: ^Stream, out: ^i32) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.tell == null_proc do return Error.NotImplemented; + + return vtable.tell(s, out); +} + +stream_read :: proc (use s: ^Stream, buffer: [] u8, number_read: ^u32 = null) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.read == null_proc do return Error.NotImplemented; + + return vtable.read(s, buffer, number_read); +} + +stream_read_at :: proc (use s: ^Stream, at: u32, buffer: [] u8, number_read: ^u32 = null) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.read_at == null_proc do return Error.NotImplemented; + + return vtable.read_at(s, at, buffer, number_read); +} + +stream_read_byte :: proc (use s: ^Stream, out: ^u8) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.read_byte == null_proc do return Error.NotImplemented; + + return vtable.read_byte(s, out); +} + +stream_unread_byte :: proc (use s: ^Stream) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.unread_byte == null_proc do return Error.NotImplemented; + + return vtable.unread_byte(s); +} + +stream_write :: proc (use s: ^Stream, buffer: [] u8, number_written: ^u32 = null) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.write == null_proc do return Error.NotImplemented; + + return vtable.write(s, buffer, number_written); +} + +stream_write_at :: proc (use s: ^Stream, at: u32, buffer: [] u8, number_written: ^u32 = null) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.write_at == null_proc do return Error.NotImplemented; + + return vtable.write_at(s, at, buffer, number_written); +} + +stream_write_byte :: proc (use s: ^Stream, byte: u8) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.write_byte == null_proc do return Error.NotImplemented; + + return vtable.write_byte(s, byte); +} + +stream_close :: proc (use s: ^Stream) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.close == null_proc do return Error.NotImplemented; + + return vtable.close(s); +} + +stream_flush :: proc (use s: ^Stream) -> Error { + if vtable == null do return Error.NoVtable; + if vtable.flush == null_proc do return Error.NotImplemented; + + return vtable.flush(s); +} + +stream_size :: proc (use s: ^Stream) -> i32 { + if vtable == null do return 0; + if vtable.size == null_proc do return 0; + + return vtable.size(s); +} + +stream_peek_byte :: proc (use s: ^Stream, out: ^u8) -> Error { + if err := stream_read_byte(s, out); err != Error.None do return err; + if err := stream_unread_byte(s); err != Error.None do return err; + return Error.None; +} + + + +StringStream :: struct { + use stream : Stream; + + curr_pos : i32; + data : str; +} + +string_stream_make :: proc (s: str) -> StringStream { + return StringStream.{ + stream = Stream.{ + vtable = ^string_stream_vtable, + }, + data = s, + curr_pos = 0, + }; +} + + +#private +string_stream_vtable := Stream_Vtable.{ + seek = proc (s: ^Stream, to: i32, whence: SeekFrom) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if to >= data.count do return Error.OutOfBounds; + + switch whence { + case SeekFrom.Start do curr_pos = to; + case SeekFrom.Current do curr_pos += to; + case SeekFrom.End do curr_pos = data.count - to; // CHECK: Off by one? + } + + return Error.None; + }, + + tell = proc (s: ^Stream, out: ^i32) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if out != null do *out = curr_pos; + return Error.None; + }, + + read = proc (s: ^Stream, buffer: [] u8, number_read: ^u32) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + bytes_to_read := math.min(buffer.count, data.count - curr_pos); + memory.copy(buffer.data, ^data.data[curr_pos], bytes_to_read); + curr_pos += bytes_to_read; + + if number_read != null do *number_read = bytes_to_read; + return Error.None; + }, + + read_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_read: ^u32) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + bytes_to_read := math.min(buffer.count, data.count - at); + memory.copy(buffer.data, ^data.data[at], bytes_to_read); + curr_pos += bytes_to_read; + + if number_read != null do *number_read = bytes_to_read; + return Error.None; + }, + + read_byte = proc (s: ^Stream, out: ^u8) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + if out != null do *out = data[curr_pos]; + + curr_pos += 1; + return Error.None; + }, + + unread_byte = proc (s: ^Stream) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos <= 0 do return Error.OutOfBounds; + + curr_pos -= 1; + return Error.None; + }, + + write = proc (s: ^Stream, buffer: [] u8, number_written: ^u32) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + bytes_to_write := math.min(buffer.count, data.count - curr_pos); + memory.copy(^data.data[curr_pos], buffer.data, bytes_to_write); + curr_pos += bytes_to_write; + + if number_written != null do *number_written = bytes_to_write; + return Error.None; + }, + + write_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_written: ^u32) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + bytes_to_write := math.min(buffer.count, data.count - at); + memory.copy(^data.data[at], buffer.data, bytes_to_write); + curr_pos += bytes_to_write; + + if number_written != null do *number_written = bytes_to_write; + return Error.None; + }, + + write_byte = proc (s: ^Stream, byte: u8) -> Error { + ss : ^StringStream = ~~s; + use ss; + + if curr_pos >= data.count do return Error.EOF; + + data[curr_pos] = byte; + curr_pos += 1; + + return Error.None; + }, + + size = proc (s: ^Stream) -> i32 { + ss : ^StringStream = ~~s; + use ss; + + return data.count; + }, + + close = null_proc, + flush = null_proc, +} \ No newline at end of file diff --git a/core/std/js.onyx b/core/std/js.onyx index 2e9c9941..943027ed 100644 --- a/core/std/js.onyx +++ b/core/std/js.onyx @@ -15,6 +15,10 @@ package core #load "core/string/builder" #load "core/string/reader" +#load "core/io/io" +#load "core/io/stream" +#load "core/io/reader" + #load "core/sys/js" diff --git a/core/std/wasi.onyx b/core/std/wasi.onyx index 75fde689..6ff0eed6 100644 --- a/core/std/wasi.onyx +++ b/core/std/wasi.onyx @@ -17,6 +17,10 @@ package core #load "core/string/reader" #load "core/wasi" +#load "core/io/io" +#load "core/io/stream" +#load "core/io/reader" + #load "core/sys/wasi" diff --git a/core/sys/js.onyx b/core/sys/js.onyx index 4f502f91..25b2fb9b 100644 --- a/core/sys/js.onyx +++ b/core/sys/js.onyx @@ -5,6 +5,19 @@ use package main as main output_str :: proc (s: str) -> u32 #foreign "host" "print_str" --- +assert_handler :: proc (msg: str, file: str) { + output_str("Assert failed: "); + output_str(msg); + + if file.data != null { + output_str(" in "); + output_str(file); + } + + process_exit :: proc (status: i32) #foreign "host" "exit" --- + process_exit(1); +} + // The builtin _start proc. // Sets up everything needed for execution. proc () #export "_start" { @@ -12,6 +25,7 @@ proc () #export "_start" { context.allocator = alloc.heap_allocator; context.temp_allocator = alloc.temp_allocator; + context.assert_handler = assert_handler; args : [] cstr; args.data = null; diff --git a/core/sys/wasi.onyx b/core/sys/wasi.onyx index e2de1f69..a3aaf905 100644 --- a/core/sys/wasi.onyx +++ b/core/sys/wasi.onyx @@ -16,6 +16,18 @@ output_str :: proc (s: str) -> u32 { return tmp; } +assert_handler :: proc (msg: str, file: str) { + output_str("Assert failed: "); + output_str(msg); + + if file.data != null { + output_str(" in "); + output_str(file); + } + + proc_exit(1); +} + // The builtin _start proc. // Sets up everything needed for execution. proc () #export "_start" { @@ -23,6 +35,7 @@ proc () #export "_start" { context.allocator = alloc.heap_allocator; context.temp_allocator = alloc.heap_allocator; + context.assert_handler = assert_handler; argc : Size; argv_buf_size : Size; diff --git a/include/onyxtypes.h b/include/onyxtypes.h index 9d951021..0d071135 100644 --- a/include/onyxtypes.h +++ b/include/onyxtypes.h @@ -70,6 +70,7 @@ typedef struct StructMember { struct AstTyped** initial_value; b32 included_through_use : 1; + b32 used : 1; } StructMember; #define TYPE_KINDS \ diff --git a/onyx.exe b/onyx.exe index 5f9676c7f1794f9a4bce20b3d124c71b1026861a..249cd882ce72a784bd93ef7f5b08af307496b2c3 100644 GIT binary patch delta 37645 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 I70Sf_0Wi;0OaK4? delta 36934 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 diff --git a/src/onyxparser.c b/src/onyxparser.c index a70b4eba..9ac5151f 100644 --- a/src/onyxparser.c +++ b/src/onyxparser.c @@ -1575,6 +1575,16 @@ static AstType* parse_type(OnyxParser* parser) { } + case '(': { + expect_token(parser, '('); + + *next_insertion = parse_type(parser); + next_insertion = NULL; + + expect_token(parser, ')'); + break; + } + default: onyx_report_error(parser->curr->pos, "unexpected token '%b'.", parser->curr->text, parser->curr->length); consume_token(parser); diff --git a/src/onyxtypes.c b/src/onyxtypes.c index 5eaea925..7abaf166 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -151,7 +151,15 @@ b32 types_are_compatible(Type* t1, Type* t2) { case Type_Kind_Pointer: { if (t2->kind == Type_Kind_Pointer) { - return types_are_compatible(t1->Pointer.elem, t2->Pointer.elem); + if (types_are_compatible(t1->Pointer.elem, t2->Pointer.elem)) return 1; + + if (t1->Pointer.elem->kind == Type_Kind_Struct && t2->Pointer.elem->kind == Type_Kind_Struct) { + Type* t1_struct = t1->Pointer.elem; + Type* t2_struct = t2->Pointer.elem; + + if (t1_struct->Struct.memarr[0]->used) + return types_are_compatible(t2_struct, t1_struct->Struct.memarr[0]->type); + } } if (t2->kind == Type_Kind_Basic && t2->Basic.kind == Basic_Kind_Rawptr) return 1; @@ -370,6 +378,7 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { .name = bh_strdup(alloc, (*member)->token->text), .initial_value = &(*member)->initial_value, .included_through_use = 0, + .used = (((*member)->flags & Ast_Flag_Struct_Mem_Used) != 0), }; bh_table_put(StructMember, s_type->Struct.members, (*member)->token->text, smem); @@ -386,6 +395,7 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { .name = (*psmem)->name, .initial_value = (*psmem)->initial_value, .included_through_use = 1, + .used = 0, }; bh_table_put(StructMember, s_type->Struct.members, (*psmem)->name, new_smem); diff --git a/tests/general1.onyx b/tests/general1.onyx.notest similarity index 100% rename from tests/general1.onyx rename to tests/general1.onyx.notest -- 2.25.1