mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 22:58:46 +00:00
Merge pull request #4196 from jakubtomsu/unmarshal-json-bit-sets
Support unmarshalling bit_sets in `core:encoding/json`
This commit is contained in:
@@ -116,7 +116,30 @@ assign_int :: proc(val: any, i: $T) -> bool {
|
|||||||
case int: dst = int (i)
|
case int: dst = int (i)
|
||||||
case uint: dst = uint (i)
|
case uint: dst = uint (i)
|
||||||
case uintptr: dst = uintptr(i)
|
case uintptr: dst = uintptr(i)
|
||||||
case: return false
|
case:
|
||||||
|
ti := type_info_of(v.id)
|
||||||
|
if _, ok := ti.variant.(runtime.Type_Info_Bit_Set); ok {
|
||||||
|
do_byte_swap := !reflect.bit_set_is_big_endian(v)
|
||||||
|
switch ti.size * 8 {
|
||||||
|
case 0: // no-op.
|
||||||
|
case 8:
|
||||||
|
x := (^u8)(v.data)
|
||||||
|
x^ = u8(i)
|
||||||
|
case 16:
|
||||||
|
x := (^u16)(v.data)
|
||||||
|
x^ = do_byte_swap ? intrinsics.byte_swap(u16(i)) : u16(i)
|
||||||
|
case 32:
|
||||||
|
x := (^u32)(v.data)
|
||||||
|
x^ = do_byte_swap ? intrinsics.byte_swap(u32(i)) : u32(i)
|
||||||
|
case 64:
|
||||||
|
x := (^u64)(v.data)
|
||||||
|
x^ = do_byte_swap ? intrinsics.byte_swap(u64(i)) : u64(i)
|
||||||
|
case:
|
||||||
|
panic("unknown bit_size size")
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user