mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Fix ir bug; allow formatting options for arrays & et al.
This commit is contained in:
+28
-41
@@ -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) {
|
_pad :: proc(fi: ^Fmt_Info, s: string) {
|
||||||
if !fi.width_set || fi.width == 0 {
|
if !fi.width_set {
|
||||||
write_string(fi.buf, s);
|
write_string(fi.buf, s);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -818,11 +818,6 @@ fmt_value :: proc(fi: ^Fmt_Info, v: any, verb: rune) {
|
|||||||
fmt_arg(fi, any{v.data, info.elem}, verb);
|
fmt_arg(fi, any{v.data, info.elem}, verb);
|
||||||
|
|
||||||
case Array:
|
case Array:
|
||||||
if verb != 'v' {
|
|
||||||
fmt_bad_verb(fi, verb);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
write_byte(fi.buf, '[');
|
write_byte(fi.buf, '[');
|
||||||
defer write_byte(fi.buf, ']');
|
defer write_byte(fi.buf, ']');
|
||||||
for i in 0..<info.count {
|
for i in 0..<info.count {
|
||||||
@@ -830,15 +825,10 @@ fmt_value :: proc(fi: ^Fmt_Info, v: any, verb: rune) {
|
|||||||
write_string(fi.buf, ", ");
|
write_string(fi.buf, ", ");
|
||||||
}
|
}
|
||||||
data := ^byte(v.data) + i*info.elem_size;
|
data := ^byte(v.data) + i*info.elem_size;
|
||||||
fmt_arg(fi, any{rawptr(data), info.elem}, 'v');
|
fmt_arg(fi, any{rawptr(data), info.elem}, verb);
|
||||||
}
|
}
|
||||||
|
|
||||||
case Dynamic_Array:
|
case Dynamic_Array:
|
||||||
if verb != 'v' {
|
|
||||||
fmt_bad_verb(fi, verb);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
write_byte(fi.buf, '[');
|
write_byte(fi.buf, '[');
|
||||||
defer write_byte(fi.buf, ']');
|
defer write_byte(fi.buf, ']');
|
||||||
array := (^raw.Dynamic_Array)(v.data);
|
array := (^raw.Dynamic_Array)(v.data);
|
||||||
@@ -847,7 +837,32 @@ fmt_value :: proc(fi: ^Fmt_Info, v: any, verb: rune) {
|
|||||||
write_string(fi.buf, ", ");
|
write_string(fi.buf, ", ");
|
||||||
}
|
}
|
||||||
data := ^byte(array.data) + i*info.elem_size;
|
data := ^byte(array.data) + i*info.elem_size;
|
||||||
fmt_arg(fi, any{rawptr(data), info.elem}, 'v');
|
fmt_arg(fi, any{rawptr(data), info.elem}, verb);
|
||||||
|
}
|
||||||
|
|
||||||
|
case Slice:
|
||||||
|
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}, verb);
|
||||||
|
}
|
||||||
|
|
||||||
|
case Vector:
|
||||||
|
write_byte(fi.buf, '<');
|
||||||
|
defer write_byte(fi.buf, '>');
|
||||||
|
|
||||||
|
for i in 0..<info.count {
|
||||||
|
if i > 0 {
|
||||||
|
write_string(fi.buf, ", ");
|
||||||
|
}
|
||||||
|
|
||||||
|
data := ^byte(v.data) + i*info.elem_size;
|
||||||
|
fmt_value(fi, any{rawptr(data), info.elem}, verb);
|
||||||
}
|
}
|
||||||
|
|
||||||
case Map:
|
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');
|
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..<info.count {
|
|
||||||
if i > 0 {
|
|
||||||
write_string(fi.buf, ", ");
|
|
||||||
}
|
|
||||||
|
|
||||||
data := ^byte(v.data) + i*info.elem_size;
|
|
||||||
fmt_value(fi, any{rawptr(data), info.elem}, 'v');
|
|
||||||
}
|
|
||||||
|
|
||||||
case Struct:
|
case Struct:
|
||||||
write_byte(fi.buf, '{');
|
write_byte(fi.buf, '{');
|
||||||
|
|||||||
@@ -2710,8 +2710,8 @@ irValue *ir_emit_conv(irProcedure *proc, irValue *value, Type *t) {
|
|||||||
if (is_type_integer(src) && is_type_integer(dst)) {
|
if (is_type_integer(src) && is_type_integer(dst)) {
|
||||||
GB_ASSERT(src->kind == Type_Basic &&
|
GB_ASSERT(src->kind == Type_Basic &&
|
||||||
dst->kind == Type_Basic);
|
dst->kind == Type_Basic);
|
||||||
i64 sz = type_size_of(proc->module->allocator, src);
|
i64 sz = type_size_of(proc->module->allocator, default_type(src));
|
||||||
i64 dz = type_size_of(proc->module->allocator, dst);
|
i64 dz = type_size_of(proc->module->allocator, default_type(dst));
|
||||||
irConvKind kind = irConv_trunc;
|
irConvKind kind = irConv_trunc;
|
||||||
|
|
||||||
if (dz < sz) {
|
if (dz < sz) {
|
||||||
|
|||||||
+1
-1
@@ -1763,7 +1763,7 @@ i64 type_size_of_internal(gbAllocator allocator, Type *t, TypePath *path) {
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Type_Basic: {
|
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;
|
BasicKind kind = t->Basic.kind;
|
||||||
i64 size = t->Basic.size;
|
i64 size = t->Basic.size;
|
||||||
if (size > 0) {
|
if (size > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user