diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 7ae4568f7a..00f145d308 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -2284,8 +2284,18 @@ fn (mut g Gen) string_inter_literal(node ast.StringInterLiteral) { g.write('%g') } else if sym.kind == .struct_ && !sym.has_method('str') { g.write('%.*s') + } else if node.expr_types[i] == table.i16_type { + g.write('%"PRId16"') + } else if node.expr_types[i] == table.u16_type { + g.write('%"PRIu16"') + } else if node.expr_types[i] == table.u32_type { + g.write('%"PRIu32"') + } else if node.expr_types[i] == table.i64_type { + g.write('%"PRId64"') + } else if node.expr_types[i] == table.u64_type { + g.write('%"PRIu64"') } else { - g.write('%d') + g.write('%"PRId32"') } } g.write('", ') diff --git a/vlib/v/tests/string_interpolation_test.v b/vlib/v/tests/string_interpolation_test.v index 01a9552b7f..6f07c9eada 100644 --- a/vlib/v/tests/string_interpolation_test.v +++ b/vlib/v/tests/string_interpolation_test.v @@ -75,3 +75,15 @@ fn test_string_interpolation_string_prefix() { jsjs := '$js$js' assert jsjs == 'jsjs' } + +fn test_inttypes_string_interpolation() { + s := i16(-23456) + us := u16(54321) + i := -1622999040 + ui := u32(3421958087) + l := i64(-7694555558525237396) + ul := u64(17234006112912956370) + assert '$s $us' == '-23456 54321' + assert '$ui $i' == '3421958087 -1622999040' + assert '$l $ul' == '-7694555558525237396 17234006112912956370' +}