aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
authorblob1807 <12388588+blob1807@users.noreply.github.com>2024-02-21 00:42:11 +1000
committerblob1807 <12388588+blob1807@users.noreply.github.com>2024-02-21 00:42:11 +1000
commit14ee2181cbf270863d0aa7e1be36814c1ded1354 (patch)
tree1b0f4e3bd03495a43e47f41cb0afe9b88802fe41 /core/encoding
parent4ca23499fa9bd59083b1beae6c44b5a5d890fcf2 (diff)
Fix bug https://github.com/odin-lang/Odin/issues/3173
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/json/marshal.odin9
1 files changed, 9 insertions, 0 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin
index e9285364b..da250dc01 100644
--- a/core/encoding/json/marshal.odin
+++ b/core/encoding/json/marshal.odin
@@ -377,6 +377,15 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
opt_write_end(w, opt, '}') or_return
case runtime.Type_Info_Union:
+ // check for empty unions
+ if len(info.variants) == 0 {
+ io.write_string(w, "null") or_return
+ return
+ }
+ if info.tag_type == nil {
+ panic("Union tag type is nil.")
+ }
+
tag_ptr := uintptr(v.data) + info.tag_offset
tag_any := any{rawptr(tag_ptr), info.tag_type.id}