From 63645c15da4070dcc4a3c79822f6b365e8d0fc22 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 12 Jan 2021 15:06:23 -0600 Subject: [PATCH] updated io.stream to use multiple return values; small mrv bug fixes --- bin/onyx | Bin 326712 -> 326712 bytes core/io/reader.onyx | 45 ++++++----- core/io/stream.onyx | 141 ++++++++++++++++------------------ onyx.exe | Bin 417280 -> 417792 bytes src/onyxtypes.c | 4 + src/onyxwasm.c | 4 +- tests/string_stream_test | 6 ++ tests/string_stream_test.onyx | 24 ++++++ 8 files changed, 128 insertions(+), 96 deletions(-) create mode 100644 tests/string_stream_test create mode 100644 tests/string_stream_test.onyx diff --git a/bin/onyx b/bin/onyx index dddbe4b52469d33867956c997987a174d9096cc2..c7649f401ecd16b611485336879e01b5844687f1 100755 GIT binary patch delta 40455 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 H_`>sl@*l6K delta 40285 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¨Y0Z?nbKX88mQ!3?lTn5J(7{dL(DgK70xnFiQwk?dw7`FI{+z}}4#$tdV ztvlBSgHQn7U|cNM7+@jz0a)6Tz1Lv!d*KL}+?$HQOt2UXi(};*f+O+RgPGt8FdNJV zBm2>?q14kKxxxfiJr9gOkxjjN9(xG;EYLli)#xEA0@K0F5p)rlJd!09%pOh4-8eXw zmV()!4=e)3FhV|#wHvfe;F1uGOd<4O-ee*?obsj+QP4Jx-OD;*?kXbsq8D3v_7yfjKo3@V1*bxOc^ zmAY4EjS-L4|HcuTV;>rtXYU)D4;9)6hi2QIZ^^JE5$W0ytBUTQB>G0!dQ#)5N_{a^ zs6&mCyOE{IwMk;IClxmA%St^=-KFLTgVK?Olvb)cw8o)ii;yKDt5rpohioLW232I+ zkR{)uSBz`|G8$kUs=QOk=9N}@^k!9reuV2#Y*|?t^l_qxt5I))D+|Vnc0og6i!aC%GSglP8FWTK}0v52D|ZxO8s6NhcR4}jN#ga5&l>%|MCb8aQC&@KD#Xc4eu(1pCx-v z6w$8push^)6UE?~v2;UvB@gV%y`6dP_tHf1N>B}^`0Eb2Dp|B_&;>ru$#sMBnL`CK z0oi${Jen*91?RwL2u**$As-pXnKIyyVpY&c)&##xe)UJuH6j~6wT7lMcNvE|Z`UEq zlTnjIeOD3eHaT>X=;-jVo|WBcf7+a_2?wgoR1n^og^B#7Lk`EBT@*@ zDcE#5J%uKPGs`!UucwHZYs7D47My) z>8zzgcK}ql#Tjke^UjgsmCYwzWU0o&cLOwi2bPN*A_jw=4Wm812-~{+x zTv$92tQ>7BuT2r%g4DuLTq3(q6&+lq@crcDQ^nJFBoVt)x+cGwD*C(Dk#NhXX`*+K z4|b7LJ~K@Wa>cMDgvbx4i5|h}u)D%|?!K<-+~)Fu=_0!2DTFy}$(bLmA>?>SjiDI3 z%~nC)De{Kamc0gu=H5-yMQwXf7Xt5(l<&_FeQIXFhqF&}ZQUC;>rU^?XT+01_Hgg% z3^DOuF#aXcF~shcGuMlb4*x*;>UuH2o-NDPi)W+!DGsCi0^?v-O`FZZsau$8%0D%7 z8ON49TQ1F~l%lEf{e01ZcN|>G7xf)QGh}dq=n&zbVOrgZ+v?~YY?fw|!wN+Gnvs06 zO&uNO%mUHMo-A_{H z5uZ_3N1`ym*3y!fJ}=vDpv7Tw<_6J`7j&-$65SC_Lv4dq`gKdYaH=WaX%=Q{5Mq{| zT+fuBvE=cV+$JO5Bp{g&$U$$4#SV8HdE!kmV30rBRDaV_pIFN*CT)f(pJi1$$CBrD zH|4<(n9k=|a{r@p#zygmUC26{#IcC5HKv-&)UsuT+H7^{t~_bqOxxnTQJckmcDv0x z>@5*(cle{d3kpS$o!4eBeOnBynb*p6$16|2Eyge;x@{2y>4)dHV4N)9-a=m%J|_=t z5d$2h-DKUZ;t_{?k$h?^U7aV_ZWR+5H}-8}y`!{;+_23U0H1FY&)PHPuy;g#JJaqv zVvnP!yKK8%ERM+I>p<$bVg=#;drWV`` z(tF|&3g7#lSRdh6pHt#6PBYNOf@p^C`P~$jDQE5x1099K<-2>tVtb}Hv4}z)d3<+# zuQ7mf_Zo3JxK}K}?XmA;(?lljBZiUQrTfG;4oA^5^3VIxwR!jMrzaf#hvZiWa3D>_ z7ZaI6w{#p7Q}~Yi^n;?eqiDF?a1d=yql4lY-XA;!M0(f$LwMUeRt}WoDny5x;Z~=I R%cT|KfIZtg_KNt@@xPBTNEQG9 diff --git a/core/io/reader.onyx b/core/io/reader.onyx index 336c782a..14508eb5 100644 --- a/core/io/reader.onyx +++ b/core/io/reader.onyx @@ -15,15 +15,15 @@ read_u32 :: proc (use reader: ^Reader) -> u32 { skip_whitespace(reader); - curr := cast(u8) 0; - stream_peek_byte(stream, ^curr); + err, curr := stream_peek_byte(stream); while curr >= #char "0" && curr <= #char "9" { - stream_read_byte(stream, ^curr); + err, curr = stream_read_byte(stream); n *= 10; n += cast(u32) (curr - #char "0"); - if stream_peek_byte(stream, ^curr) == Error.EOF do break; + err, curr = stream_peek_byte(stream); + if err == Error.EOF do break; } return n; @@ -34,15 +34,15 @@ read_u64 :: proc (use reader: ^Reader) -> u64 { skip_whitespace(reader); - curr := cast(u8) 0; - stream_peek_byte(stream, ^curr); + err, curr := stream_peek_byte(stream); while curr >= #char "0" && curr <= #char "9" { - stream_read_byte(stream, ^curr); + err, curr = stream_read_byte(stream); n *= 10; n += cast(u64) (curr - #char "0"); - if stream_peek_byte(stream, ^curr) == Error.EOF do break; + err, curr = stream_peek_byte(stream); + if err == Error.EOF do break; } return n; @@ -53,11 +53,12 @@ read_line :: proc (use reader: ^Reader, allocator := context.allocator) -> str { stream_tell(stream, ^curr_pos); count := 0; - curr := cast(u8) 0; - stream_read_byte(stream, ^curr); + err, curr := stream_read_byte(stream); while curr != #char "\n" { count += 1; - if stream_read_byte(stream, ^curr) != Error.None do break; + + err, curr = stream_read_byte(stream); + if err != Error.None do break; } stream_seek(stream, curr_pos, SeekFrom.Start); @@ -78,8 +79,7 @@ read_word :: proc (use reader: ^Reader, allocator := context.allocator) -> str { stream_tell(stream, ^curr_pos); count := 0; - curr := cast(u8) 0; - stream_read_byte(stream, ^curr); + err, curr := stream_read_byte(stream); while true { if (curr >= #char "a" && curr <= #char "z") @@ -90,7 +90,8 @@ read_word :: proc (use reader: ^Reader, allocator := context.allocator) -> str { break; } - if stream_read_byte(stream, ^curr) != Error.None do break; + err, curr = stream_read_byte(stream); + if err != Error.None do break; } stream_seek(stream, curr_pos, SeekFrom.Start); @@ -105,23 +106,25 @@ read_word :: proc (use reader: ^Reader, allocator := context.allocator) -> str { } advance_line :: proc (use reader: ^Reader) { - curr := cast(u8) 0; - if stream_read_byte(stream, ^curr) != Error.None do return; + err, curr := stream_read_byte(stream); + if err != Error.None do return; + while curr != #char "\n" { - if stream_read_byte(stream, ^curr) != Error.None do return; + err, curr = stream_read_byte(stream); + if err != Error.None do return; } - stream_read_byte(stream, ^curr); + err, curr = stream_read_byte(stream); } skip_whitespace :: proc (use reader: ^Reader) { while true { - byte := cast(u8) 0; - if stream_peek_byte(stream, ^byte) == Error.EOF do break; + err, byte := stream_peek_byte(stream); + if err == Error.EOF do break; switch byte { case #char " ", #char "\t", #char "\n", #char "\r" { - stream_read_byte(stream, ^byte); + err, byte = stream_read_byte(stream); } case #default do return; diff --git a/core/io/stream.onyx b/core/io/stream.onyx index d76d09e5..2dc30240 100644 --- a/core/io/stream.onyx +++ b/core/io/stream.onyx @@ -11,13 +11,13 @@ 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; + read : proc (s: ^Stream, buffer: [] u8) -> (Error, u32); + read_at : proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32); + read_byte : proc (s: ^Stream) -> (Error, u8); 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 : proc (s: ^Stream, buffer: [] u8) -> (Error, u32); + write_at : proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32); write_byte : proc (s: ^Stream, byte: u8) -> Error; close : proc (s: ^Stream) -> Error; @@ -46,25 +46,25 @@ stream_tell :: proc (use s: ^Stream, out: ^i32) -> Error { 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; +stream_read :: proc (use s: ^Stream, buffer: [] u8) -> (Error, u32) { + if vtable == null do return Error.NoVtable, 0; + if vtable.read == null_proc do return Error.NotImplemented, 0; - return vtable.read(s, buffer, number_read); + return vtable.read(s, buffer); } -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; +stream_read_at :: proc (use s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { + if vtable == null do return Error.NoVtable, 0; + if vtable.read_at == null_proc do return Error.NotImplemented, 0; - return vtable.read_at(s, at, buffer, number_read); + return vtable.read_at(s, at, buffer); } -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; +stream_read_byte :: proc (use s: ^Stream) -> (Error, u8) { + if vtable == null do return Error.NoVtable, cast(u8) 0; + if vtable.read_byte == null_proc do return Error.NotImplemented, cast(u8) 0; - return vtable.read_byte(s, out); + return vtable.read_byte(s); } stream_unread_byte :: proc (use s: ^Stream) -> Error { @@ -74,18 +74,18 @@ stream_unread_byte :: proc (use s: ^Stream) -> Error { 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; +stream_write :: proc (use s: ^Stream, buffer: [] u8) -> (Error, u32) { + if vtable == null do return Error.NoVtable, 0; + if vtable.write == null_proc do return Error.NotImplemented, 0; - return vtable.write(s, buffer, number_written); + return vtable.write(s, buffer); } -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; +stream_write_at :: proc (use s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { + if vtable == null do return Error.NoVtable, 0; + if vtable.write_at == null_proc do return Error.NotImplemented, 0; - return vtable.write_at(s, at, buffer, number_written); + return vtable.write_at(s, at, buffer); } stream_write_byte :: proc (use s: ^Stream, byte: u8) -> Error { @@ -116,10 +116,17 @@ stream_size :: proc (use s: ^Stream) -> i32 { 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; +stream_peek_byte :: proc (use s: ^Stream) -> (Error, u8) { + out : u8; + err : io.Error; + + err, out = stream_read_byte(s); + if err != Error.None do return err, cast(u8) 0; + + err = stream_unread_byte(s); + if err != Error.None do return err, cast(u8) 0; + + return Error.None, out; } @@ -170,43 +177,39 @@ string_stream_vtable := Stream_Vtable.{ return Error.None; }, - read = proc (s: ^Stream, buffer: [] u8, number_read: ^u32) -> Error { + read = proc (s: ^Stream, buffer: [] u8) -> (Error, u32) { ss : ^StringStream = ~~s; use ss; - if curr_pos >= data.count do return Error.EOF; + if curr_pos >= data.count do return Error.EOF, 0; 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; + return Error.None, bytes_to_read; }, - read_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_read: ^u32) -> Error { + read_at = proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { ss : ^StringStream = ~~s; use ss; - if at >= data.count do return Error.EOF; + if at >= data.count do return Error.EOF, 0; bytes_to_read := math.min(buffer.count, data.count - at); memory.copy(buffer.data, ^data.data[at], bytes_to_read); - if number_read != null do *number_read = bytes_to_read; - return Error.None; + return Error.None, bytes_to_read; }, - read_byte = proc (s: ^Stream, out: ^u8) -> Error { + read_byte = proc (s: ^Stream) -> (Error, u8) #export "DEBUG ME" { ss : ^StringStream = ~~s; use ss; - if curr_pos >= data.count do return Error.EOF; - - if out != null do *out = data[curr_pos]; + if curr_pos >= data.count do return Error.EOF, cast(u8) 0; - curr_pos += 1; - return Error.None; + defer curr_pos += 1; + return Error.None, data[curr_pos]; }, unread_byte = proc (s: ^Stream) -> Error { @@ -219,31 +222,29 @@ string_stream_vtable := Stream_Vtable.{ return Error.None; }, - write = proc (s: ^Stream, buffer: [] u8, number_written: ^u32) -> Error { + write = proc (s: ^Stream, buffer: [] u8) -> (Error, u32) { ss : ^StringStream = ~~s; use ss; - if curr_pos >= data.count do return Error.EOF; + if curr_pos >= data.count do return Error.EOF, 0; 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; + return Error.None, bytes_to_write; }, - write_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_written: ^u32) -> Error { + write_at = proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { ss : ^StringStream = ~~s; use ss; - if at >= data.count do return Error.EOF; + if at >= data.count do return Error.EOF, 0; bytes_to_write := math.min(buffer.count, data.count - at); memory.copy(^data.data[at], buffer.data, bytes_to_write); - if number_written != null do *number_written = bytes_to_write; - return Error.None; + return Error.None, bytes_to_write; }, write_byte = proc (s: ^Stream, byte: u8) -> Error { @@ -332,43 +333,39 @@ dynamic_string_stream_vtable := Stream_Vtable.{ return Error.None; }, - read = proc (s: ^Stream, buffer: [] u8, number_read: ^u32) -> Error { + read = proc (s: ^Stream, buffer: [] u8) -> (Error, u32) { dss : ^DynamicStringStream = ~~s; use dss; - if curr_pos >= data.count do return Error.EOF; + if curr_pos >= data.count do return Error.EOF, 0; 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; + return Error.None, bytes_to_read; }, - read_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_read: ^u32) -> Error { + read_at = proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { dss : ^DynamicStringStream = ~~s; use dss; - if at >= data.count do return Error.EOF; + if at >= data.count do return Error.EOF, 0; bytes_to_read := math.min(buffer.count, data.count - at); memory.copy(buffer.data, ^data.data[at], bytes_to_read); - if number_read != null do *number_read = bytes_to_read; - return Error.None; + return Error.None, bytes_to_read; }, - read_byte = proc (s: ^Stream, out: ^u8) -> Error { + read_byte = proc (s: ^Stream) -> (Error, u8) { dss : ^DynamicStringStream = ~~s; use dss; - if curr_pos >= data.count do return Error.EOF; - - if out != null do *out = data[curr_pos]; + if curr_pos >= data.count do return Error.EOF, cast(u8) 0; - curr_pos += 1; - return Error.None; + defer curr_pos += 1; + return Error.None, data[curr_pos]; }, unread_byte = proc (s: ^Stream) -> Error { @@ -381,14 +378,14 @@ dynamic_string_stream_vtable := Stream_Vtable.{ return Error.None; }, - write = proc (s: ^Stream, buffer: [] u8, number_written: ^u32) -> Error { + write = proc (s: ^Stream, buffer: [] u8) -> (Error, u32) { dss : ^DynamicStringStream = ~~s; use dss; if curr_pos + buffer.count >= data.capacity { #context_scope { context.allocator = alloc; - if !array.ensure_capacity(^data, curr_pos + buffer.count) do return Error.EOF; + if !array.ensure_capacity(^data, curr_pos + buffer.count) do return Error.EOF, 0; } } @@ -396,26 +393,24 @@ dynamic_string_stream_vtable := Stream_Vtable.{ curr_pos += buffer.count; data.count += buffer.count; - if number_written != null do *number_written = buffer.count; - return Error.None; + return Error.None, buffer.count; }, - write_at = proc (s: ^Stream, at: u32, buffer: [] u8, number_written: ^u32) -> Error { + write_at = proc (s: ^Stream, at: u32, buffer: [] u8) -> (Error, u32) { dss : ^DynamicStringStream = ~~s; use dss; if at + buffer.count >= data.capacity { #context_scope { context.allocator = alloc; - if !array.ensure_capacity(^data, at + buffer.count) do return Error.EOF; + if !array.ensure_capacity(^data, at + buffer.count) do return Error.EOF, 0; } } memory.copy(^data.data[at], buffer.data, buffer.count); data.count = math.max(data.count, at + buffer.count); - if number_written != null do *number_written = buffer.count; - return Error.None; + return Error.None, buffer.count; }, write_byte = proc (s: ^Stream, byte: u8) -> Error { diff --git a/onyx.exe b/onyx.exe index 2e658aab068e6c9f72a5f94943a006748fc9c403..d2fe583915c0dc725b09cd180c3801b0dfa5d763 100644 GIT binary patch delta 32924 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 delta 32673 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.size += type_size_of(comp_type->Compound.types[i]); } + bh_align(comp_type->Compound.size, 8); + return comp_type; } @@ -590,6 +592,8 @@ Type* type_build_compound_type(bh_allocator alloc, AstCompound* compound) { comp_type->Compound.size += type_size_of(compound->exprs[i]->type); comp_type->Compound.types[i] = compound->exprs[i]->type; } + + bh_align(comp_type->Compound.size, 8); return comp_type; } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 8b7c6c47..7ae92870 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -512,7 +512,7 @@ EMIT_FUNC(store_instruction, Type* type, u32 offset) { u32 placement = offset + type_size_of(type); forir (i, type->Compound.count - 1, 0) { Type* curr_type = type->Compound.types[i]; - placement -= type_size_of(curr_type); + placement -= bh_max(type_size_of(curr_type), 4); if (type_is_compound(curr_type)) { if (bh_arr_last(code).type == WI_LOCAL_SET && (u64) bh_arr_last(code).data.l == loc_tmp) { @@ -606,7 +606,7 @@ EMIT_FUNC(load_instruction, Type* type, u32 offset) { if (i != 0) WIL(WI_LOCAL_GET, loc_tmp); emit_load_instruction(mod, &code, type->Compound.types[i], accum_offset); - accum_offset += type_size_of(type->Compound.types[i]); + accum_offset += bh_max(type_size_of(type->Compound.types[i]), 4); } local_raw_free(mod->local_alloc, WASM_TYPE_INT32); diff --git a/tests/string_stream_test b/tests/string_stream_test new file mode 100644 index 00000000..0d2d756b --- /dev/null +++ b/tests/string_stream_test @@ -0,0 +1,6 @@ +This +is + a test string that can be read. +1234 +4567 +5801 diff --git a/tests/string_stream_test.onyx b/tests/string_stream_test.onyx new file mode 100644 index 00000000..0da25100 --- /dev/null +++ b/tests/string_stream_test.onyx @@ -0,0 +1,24 @@ +#load "core/std/js" + +use package core + +main :: proc (args: [] cstr) { + some_string := "This is a test string that can be read.\n\n\n\n\n\n1234 4567"; + + sstream := io.string_stream_make(some_string); + sreader := io.reader_make(^sstream); + + for i: 0 .. 2 { + word := io.read_word(^sreader, context.temp_allocator); + println(word); + } + + println(io.read_line(^sreader, context.temp_allocator)); + + a := io.read_u32(^sreader); + b := io.read_u32(^sreader); + + println(a); + println(b); + println(a + b); +} \ No newline at end of file -- 2.25.1