From f65bdf5733e43ab5a5c849af4664a58b707272b0 Mon Sep 17 00:00:00 2001 From: Michael Kutowski Date: Fri, 30 Sep 2022 19:40:41 +0200 Subject: [PATCH] else statement to allow skipping unused struct fields --- core/encoding/json/unmarshal.odin | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 062649b58..19288a294 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -380,20 +380,18 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm field := any{field_ptr, type.id} unmarshal_value(p, field) or_return + if parse_comma(p) { + break struct_loop + } + continue struct_loop + } else { + // allows skipping unused struct fields + parse_value(p) or_return if parse_comma(p) { break struct_loop } continue struct_loop } - - // NOTE(bill, 2022-09-14): Previously this would not be allowed - // {"foo": 123, "bar": 456} - // T :: struct{foo: int} - // `T` is missing the `bar` field - // The line below is commented out to ignore fields in an object which - // do not have a corresponding target field - // - // return Unsupported_Type_Error{v.id, p.curr_token} } case reflect.Type_Info_Map: