diff --git a/core/fmt.odin b/core/fmt.odin index e5fdafd5c..086716496 100644 --- a/core/fmt.odin +++ b/core/fmt.odin @@ -604,7 +604,7 @@ fmt_int :: proc(fi: ^Fmt_Info, u: u64, is_signed: bool, bit_size: int, verb: run } _pad :: proc(fi: ^Fmt_Info, s: string) { - if !fi.width_set || fi.width == 0 { + if !fi.width_set { write_string(fi.buf, s); return; } @@ -818,11 +818,6 @@ fmt_value :: proc(fi: ^Fmt_Info, v: any, verb: rune) { fmt_arg(fi, any{v.data, info.elem}, verb); case Array: - if verb != 'v' { - fmt_bad_verb(fi, verb); - return; - } - write_byte(fi.buf, '['); defer write_byte(fi.buf, ']'); for i in 0.. 0 { + write_string(fi.buf, ", "); + } + data := &slice[0] + i*info.elem_size; + fmt_arg(fi, any{rawptr(data), info.elem}, verb); + } + + case Vector: + write_byte(fi.buf, '<'); + defer write_byte(fi.buf, '>'); + + for i in 0.. 0 { + write_string(fi.buf, ", "); + } + + data := ^byte(v.data) + i*info.elem_size; + fmt_value(fi, any{rawptr(data), info.elem}, verb); } case Map: @@ -884,35 +899,7 @@ fmt_value :: proc(fi: ^Fmt_Info, v: any, verb: rune) { fmt_arg(fi, any{rawptr(value), info.value}, 'v'); } - case Slice: - if verb != 'v' { - fmt_bad_verb(fi, verb); - return; - } - write_byte(fi.buf, '['); - defer write_byte(fi.buf, ']'); - slice := (^[]byte)(v.data); - for _, i in slice { - if i > 0 { - write_string(fi.buf, ", "); - } - data := &slice[0] + i*info.elem_size; - fmt_arg(fi, any{rawptr(data), info.elem}, 'v'); - } - - case Vector: - write_byte(fi.buf, '<'); - defer write_byte(fi.buf, '>'); - - for i in 0.. 0 { - write_string(fi.buf, ", "); - } - - data := ^byte(v.data) + i*info.elem_size; - fmt_value(fi, any{rawptr(data), info.elem}, 'v'); - } case Struct: write_byte(fi.buf, '{'); diff --git a/src/ir.c b/src/ir.c index 0caf597bc..4f8e31bae 100644 --- a/src/ir.c +++ b/src/ir.c @@ -2710,8 +2710,8 @@ irValue *ir_emit_conv(irProcedure *proc, irValue *value, Type *t) { if (is_type_integer(src) && is_type_integer(dst)) { GB_ASSERT(src->kind == Type_Basic && dst->kind == Type_Basic); - i64 sz = type_size_of(proc->module->allocator, src); - i64 dz = type_size_of(proc->module->allocator, dst); + i64 sz = type_size_of(proc->module->allocator, default_type(src)); + i64 dz = type_size_of(proc->module->allocator, default_type(dst)); irConvKind kind = irConv_trunc; if (dz < sz) { diff --git a/src/types.c b/src/types.c index e363c6b2c..c67dc11ef 100644 --- a/src/types.c +++ b/src/types.c @@ -1763,7 +1763,7 @@ i64 type_size_of_internal(gbAllocator allocator, Type *t, TypePath *path) { } break; case Type_Basic: { - GB_ASSERT(is_type_typed(t)); + GB_ASSERT_MSG(is_type_typed(t), "%s", type_to_string(t)); BasicKind kind = t->Basic.kind; i64 size = t->Basic.size; if (size > 0) {