From 249ae76c20ca2403a4f8f2679e04363f442ad9c0 Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Sun, 21 Feb 2021 16:37:13 -0600 Subject: [PATCH] bugfix with assigning to struct parameters --- bin/onyx | Bin 344096 -> 344096 bytes core/conv.onyx | 23 +++++++++++++++++++++++ core/string.onyx | 22 ++++++++++++++++++++++ src/onyxwasm.c | 9 ++++++++- 4 files changed, 53 insertions(+), 1 deletion(-) diff --git a/bin/onyx b/bin/onyx index 5e1cdfbdabef1ba7329d30c99de57b87c8a7a6f5..59479302495ca59672677e3844d068955436e761 100755 GIT binary patch delta 5524 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 delta 5359 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 i64 { + use package core + + value: i64 = 0; + mul := 1; + + if s[0] == #char "-" { + mul = -1; + s = string.advance(s, 1); + } + + for c: s do switch c { + case #char "0" .. #char "9" { + value *= 10; + value += ~~(c - #char "0"); + } + + case #default do break break; + } + + return value * ~~mul; +} + i64_to_str :: (n: i64, base: u64, buf: [] u8, min_length := 0) -> str { is_neg := false; if n < 0 && base == 10 { diff --git a/core/string.onyx b/core/string.onyx index d8976b83..ab8949d5 100644 --- a/core/string.onyx +++ b/core/string.onyx @@ -1,5 +1,7 @@ package core.string +use package core + make :: (s: cstr) -> str { len := length(s); @@ -143,6 +145,26 @@ strip_trailing_whitespace :: (s: ^str) { } } +advance :: proc { + // Inplace version + (s: ^str, chars := 1) { + chars = math.min(chars, s.count); + + s.data += chars; + s.count -= chars; + }, + + // Out of place version + (s: str, chars := 1) -> str { + chars = math.min(chars, s.count); + out := s; + + out.data += chars; + out.count -= chars; + + return out; + } +} read_u32 :: (s: ^str, out: ^u32) { n := 0; diff --git a/src/onyxwasm.c b/src/onyxwasm.c index a9742e80..7b533f83 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -402,7 +402,14 @@ EMIT_FUNC(assignment, AstBinaryOp* assign) { emit_expression(mod, &code, assign->right); u64 localidx = bh_imap_get(&mod->local_map, (u64) lval); - WIL(WI_LOCAL_SET, localidx); + + if (lval->kind == Ast_Kind_Param && type_is_structlike_strict(lval->type)) { + u32 mem_count = type_structlike_mem_count(lval->type); + fori (i, 0, mem_count) WIL(WI_LOCAL_SET, localidx + i); + + } else { + WIL(WI_LOCAL_SET, localidx); + } *pcode = code; return; -- 2.25.1