From 2a9e8b50f7f350f164b880809abd4fa97aeec7cd Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 15 Jun 2021 13:14:03 -0500 Subject: [PATCH] working on json module; bugfix with struct constructing --- bin/onyx | Bin 409664 -> 409664 bytes modules/json/decoder.onyx | 2 +- modules/json/example.onyx | 5 ++++- modules/json/types.onyx | 20 +++++++++++++------- src/onyxtypes.c | 8 ++++++++ 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/bin/onyx b/bin/onyx index 9c856b9f9d32fa1743467ca1b1db90735047a061..383ec51dbeb786693c081051b09a9d8a76a701a6 100755 GIT binary patch delta 35987 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

T=l!az{iE3Hn9TC5OxM@&b0urX5QA z6Ks})MuU#km*s=t;T=`l-07d^JdAM(_@~bQ=)wvrC&R$Lrz{7<$k;=c$AFlAa#xjK zYOnHa%WZGF9(LRSOFe(P@%D+0@qaN*?qM)EZNc6SJZW35Z0Kn)T-t#T%z}^EnJW)q zat1cI;D%qZ_XF<>{ti5Q5B8qD42C#MuG|y6FZdYnB=8jQH1HMRm%z7z8}?$~3+@Yk zt(PIu&=?OAfHB}X;A!Aay$yyP-~r%6W}|*Cxd7Io-1Dh&%y>dpg+RhK!(7Rz^8*7ZlWf^$AC-VPJbYtcw`hio&~-&5f6Q_wRRZ*1-98^z%M<(P8@vQBW(8vB14bS1mI(yB4Y5q&r$VEeu?vk zK`8k(G%OyRNMm%bun;7J@t4S1HlEcYFYrf`OT0#7O{ z%Z71?KLDd74i8R&a75tQRp6Mwli-GpmgTN^(;7Dh&dPlBe5wx?cO^i)_!L!M|`&KwFfFf@av& zwd;$=jx=46&a`V%q${4iyHNj` zb~QW~;@P8Xu8c9F{DWv%hd=mg#!S1miSO{3)-6|7IucY)Ap3R(!!uwGN&pq}1||V3 zTL23N_D*LP4eS-Lhyr$9fq8e&mHi7~BY=f>&rOuQ3V=xfqhVMOTM8@=Sa1Qm&A>(g zD^~zJ0BkZa=K|OzU@5@LZL4f!a#AXoZ3n>gi3wj5cSUDtU(j1_L zfcF3BqCtxX4fSCRaqT?NYCs!`I0Upb&@O;B#uPJ-)5NrAg3-cRIW(1y2wi+4hd!W? zMTncVT6V1nlRCe40*fzyw~CPmxp(n8Q_q+6;(4ndhUL{g+|hc*J&! z2}=O9ZT+vtupvszK?~Z-tG3g7)Ciow=eE-_8owN+!r?n;1C;=F^1dCEOznWHxoZba z4X~|1w7JLxr!J+j9I=;zc=k?&<`xWIvy)~~HQ;JKx|5Ove1KE%kPQ6R)KYqxC+?z; z$@{J(t>e;NaPk6R17F$&8)H{uA@GC(O4imH5X}&NiV=rbHfT=HEr9w412z@VA}s`M z({^xRP&eev73~DAfg=i`-srZxz7Xo`LCxUPpa%K?^S>Mzj8J&hN65T=Hyt3+P@i($ zZi>-F3vKvnU=R!67)~5TJAKNsmtG|&R(Cc>cqud>0kGrT-xqKuI%pctE=B?71J-guF(s>40UcMlwV19@4SMHs zt}CHAMY5ci>4S?TsQz^x$PXWj0@v~A&qy!X=i<8P=uN<(1 ztIFsT3PSH(&i1{arWw#9U=83Ft`o2y5P2)7IRWwLtC`>7dl-%?M6x{PG)~P1&0pud za@s_XfnD5N4z;4?I(g$hC=gwDCO7SaXVN;c9;pK9nFqLl7giuAHGod8tHAQO0QjMP zse)o;+-@ZnML;El7XTjDQ!9ysbl(xW^Mc}ErnlD6naKj|Z=o3@kTusUev%kN)%L}3Nm8(X`Pkl0bG3M<$-ZR>Nzwz0?c$B? z6pDWkFKCDET0V`ps9HSyQjDP@dq2q3CE;1GV$>Q(Ny5`+3>&qqbx@?%Zn0a)bi-lihCowZI8*Mwn)^w*YWnZc$`7kfH|TcUSnNhF z1zVBU^2ts#Ybntb`@!<;rX`laJwi+M3X{DA0g3VKxsmWLc-F|VU33h0QFnCFHBBlr zg)N7q;dV(Hg-qw*=TF3(>+%_=2j*>(o48<<_m+_{DbOxSA`Jlqh zNj@sp+tI3~bDX1TB@@>Jo@;9lnR@-U{;5uU* z#RnK+!L5fsp7EbCl7EV?#Jq&YLT8A!*b68sccW~fZ{Q&CU)dOwv#iO7W04Aw{$nmwdm!(_#(s+hAX6~qkgP}NYyc1`b7)rm5^ z(EK6PqWAbigJK)67Y3?vgqzaN2dfL^SbdC5O`eAP{ylMOWT3xQs+iOLaq3U-%QIX3 GP5BoRtCQsb delta 35963 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�KwAvnm@gaJ&bqY1|$u(``&WTDDoJY(*17;Oo2 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 ^Value { } decode :: (stream: ^io.Stream, allocator := context.allocator) -> ^Value { - + } \ No newline at end of file diff --git a/modules/json/example.onyx b/modules/json/example.onyx index 04468ece..57d10d1f 100644 --- a/modules/json/example.onyx +++ b/modules/json/example.onyx @@ -8,7 +8,10 @@ json :: package json json_string := "{ \"test\": \"Hello, World!\", \"array\": [1,2,3,4,5], }"; main :: (args: [] cstr) { - decoded_json := json.decode_string(json_string); + arena := alloc.arena.make(context.allocator, 4096); + defer alloc.arena.free(^arena); + + decoded_json := json.decode_string(json_string, alloc.arena.make_allocator(^arena)); defer json.free(decoded_json); test_str := decoded_json |> json.get("test") diff --git a/modules/json/types.onyx b/modules/json/types.onyx index b4c4c72e..1e9d2b7a 100644 --- a/modules/json/types.onyx +++ b/modules/json/types.onyx @@ -14,24 +14,25 @@ Value :: struct { Object; } - KeyValue :: struct { - key : str; - value : ^Value; - } - type : Type; allocator : Allocator; use value : struct #union { bool_ : bool; int_ : i64; float_ : f64; - str_ : str; + str_ : str; // This is allocated out of the allocator above. @CompilerBug @Cleanup // I don't want these to be pointers in the long run. In theory, they should be // able to be normal values, but there is a compiler bug that prevents the size and alignment of Value // being known. + // + // Thinking about it a little more, I think having these be pointers will be better from a performance + // point of view, because the overhead of copying the return/parameter values would be significant. array_ : [..] ^Value; - object_ : [..] KeyValue; + object_ : [..] struct { + key : str; // This is allocated out of the allocator on the Value. + value : ^Value; + }; }; } @@ -52,6 +53,10 @@ get :: (v: ^Value, key: str) -> ^Value { } free :: (v: ^Value) do switch v.type { + case .String { + raw_free(v.allocator, v.str_.data); + } + case .Array { for elem: v.array_ { free(elem); @@ -61,6 +66,7 @@ free :: (v: ^Value) do switch v.type { case .Object { for ^entry: v.object_ { + raw_free(v.allocator, entry.key.data); free(entry.value); } array.free(^v.object_); diff --git a/src/onyxtypes.c b/src/onyxtypes.c index ae2b26da..6bdb5c89 100644 --- a/src/onyxtypes.c +++ b/src/onyxtypes.c @@ -332,6 +332,14 @@ Type* type_build_from_ast(bh_allocator alloc, AstType* type_node) { mem_alignment = type_alignment_of((*member)->type); if (mem_alignment <= 0) { + if ((*member)->type->kind == Type_Kind_Struct) { + AstStructType* member_node = (AstStructType *) (*member)->type->ast_type; + if (member_node->stcache_is_valid) { + s_node->stcache_is_valid = 0; + return NULL; + } + } + onyx_report_error((*member)->token->pos, "Invalid member type: %s", type_get_name((*member)->type)); return NULL; } -- 2.25.1