Created
May 15, 2023 14:37
-
-
Save ArnaudValensi/38f048ed9444f3a0f7ca54013a52d78a to your computer and use it in GitHub Desktop.
Debug variables and types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Pretty print the values of a variable recursively. | |
debug_variable :: (t: $T, prefix: string = "") { | |
print("%0%0\n", prefix, formatStruct( | |
t, | |
use_newlines_if_long_form=true, | |
use_long_form_if_more_than_this_many_members=1 | |
)); | |
} | |
// Pretty print the type of a variable recursively like this: | |
// | |
// name: Source_Code_Location { | |
// fully_pathed_filename: int | |
// other_struct: MyStruct { | |
// var1: int | |
// var2: int | |
// } | |
// } | |
// | |
debug_variable_type :: (name: string, type: $T, indent_size := 4) { | |
ti := type_info(T); | |
debug_type(name, ti, indent=0, indent_size=indent_size); | |
} | |
// Like `debug_variable` but take a type instead of a variable. | |
debug_type :: (name: string, ti: *Type_Info, indent: int = 0, indent_size: int = 4) { | |
if ti.type == .STRUCT { | |
ti_struct: *Type_Info_Struct = cast(*Type_Info_Struct) ti; | |
for 1..indent print(" "); | |
print("%0: %0 {\n", name, ti_struct.name); | |
for member: ti_struct.members { | |
debug_type(member.name, member.type, indent + indent_size, indent_size); | |
} | |
for 1..indent print(" "); | |
print("}\n"); | |
} else { | |
type: string = ---; | |
if ti.type == .INTEGER { | |
tii : *Type_Info_Integer = xx ti; | |
if tii.runtime_size == 1 && tii.signed { | |
type = "s8"; | |
} else if tii.runtime_size == 2 && tii.signed { | |
type = "s16"; | |
} else if tii.runtime_size == 4 && tii.signed { | |
type = "s32"; | |
} else if tii.runtime_size == 8 && tii.signed { | |
type = "s64"; | |
} else if tii.runtime_size == 1 && !tii.signed { | |
type = "u8"; | |
} else if tii.runtime_size == 2 && !tii.signed { | |
type = "u16"; | |
} else if tii.runtime_size == 4 && !tii.signed { | |
type = "u32"; | |
} else if tii.runtime_size == 8 && !tii.signed { | |
type = "u64"; | |
} else { | |
panic("Unknown integer type"); | |
} | |
} else if ti.type == .FLOAT { | |
tif : *Type_Info_Float = xx ti; | |
if tif.runtime_size == 4 { | |
type = "float32"; | |
} else if tif.runtime_size == 8 { | |
type = "float64"; | |
} else { | |
panic("Unknown float type"); | |
} | |
} else { | |
type = tprint("%", ti.type); | |
} | |
for 1..indent print(" "); | |
print("%: %\n", name, type); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment