@@ -43,6 +43,7 @@ class BuiltinTemplate:
4343 "length" : BuiltinTemplate ("len({0})" ),
4444 "unwrap_option_or" : BuiltinTemplate ("({0} if {0} is not None else {1})" ),
4545 "int64_to_int32" : BuiltinTemplate ("int({0})" ),
46+ "float64_to_float32" : BuiltinTemplate ("float({0})" ),
4647 "to_ptr_int64" : BuiltinTemplate ("{0}" ), # Python doesn't need pointers
4748 "to_ptr_string" : BuiltinTemplate ("{0}" ),
4849 "to_ptr_bool" : BuiltinTemplate ("{0}" ),
@@ -83,7 +84,8 @@ class BuiltinTemplate:
8384 "dedent_io" : BuiltinTemplate ("None" , ["self.dedent()" ]),
8485 "try_flat_io" : BuiltinTemplate ("self._try_flat({0}, {1})" ),
8586 "format_int64" : BuiltinTemplate ("str({0})" ),
86- "format_int32" : BuiltinTemplate ("str({0})" ),
87+ "format_int32" : BuiltinTemplate ("(str({0}) + 'i32')" ),
88+ "format_float32" : BuiltinTemplate ("(self.format_float32_value({0}) + 'f32')" ),
8789 "format_float64" : BuiltinTemplate ("str({0})" ),
8890 "format_string" : BuiltinTemplate ("self.format_string_value({0})" ),
8991 "format_symbol" : BuiltinTemplate ("{0}" ),
@@ -95,6 +97,7 @@ class BuiltinTemplate:
9597 "to_string" : BuiltinTemplate ("str({0})" ),
9698 # Type conversions used by pretty printer
9799 "int32_to_int64" : BuiltinTemplate ("int({0})" ),
100+ "float32_to_float64" : BuiltinTemplate ("float({0})" ),
98101 "is_empty" : BuiltinTemplate ("len({0}) == 0" ),
99102 "decode_string" : BuiltinTemplate ("{0}.decode('utf-8')" ),
100103 "fragment_id_to_string" : BuiltinTemplate ("self.fragment_id_to_string({0})" ),
@@ -137,6 +140,7 @@ class BuiltinTemplate:
137140 "length" : BuiltinTemplate ("length({0})" ),
138141 "unwrap_option_or" : BuiltinTemplate ("(!isnothing({0}) ? {0} : {1})" ),
139142 "int64_to_int32" : BuiltinTemplate ("Int32({0})" ),
143+ "float64_to_float32" : BuiltinTemplate ("Float32({0})" ),
140144 "to_ptr_int64" : BuiltinTemplate ("{0}" ), # Julia doesn't need pointers
141145 "to_ptr_string" : BuiltinTemplate ("{0}" ),
142146 "to_ptr_bool" : BuiltinTemplate ("{0}" ),
@@ -173,7 +177,8 @@ class BuiltinTemplate:
173177 "dedent_io" : BuiltinTemplate ("nothing" , ["dedent!(pp)" ]),
174178 "try_flat_io" : BuiltinTemplate ("try_flat(pp, {0}, {1})" ),
175179 "format_int64" : BuiltinTemplate ("format_int(pp, {0})" ),
176- "format_int32" : BuiltinTemplate ("format_int(pp, Int64({0}))" ),
180+ "format_int32" : BuiltinTemplate ('(string(Int64({0})) * "i32")' ),
181+ "format_float32" : BuiltinTemplate ('(lowercase(string({0})) * "f32")' ),
177182 "format_float64" : BuiltinTemplate ("format_float(pp, {0})" ),
178183 "format_string" : BuiltinTemplate ("format_string(pp, {0})" ),
179184 "format_symbol" : BuiltinTemplate ("{0}" ),
@@ -185,6 +190,7 @@ class BuiltinTemplate:
185190 "to_string" : BuiltinTemplate ("string({0})" ),
186191 # Type conversions used by pretty printer
187192 "int32_to_int64" : BuiltinTemplate ("Int64({0})" ),
193+ "float32_to_float64" : BuiltinTemplate ("Float64({0})" ),
188194 "is_empty" : BuiltinTemplate ("isempty({0})" ),
189195 "decode_string" : BuiltinTemplate ("String(copy({0}))" ),
190196 "fragment_id_to_string" : BuiltinTemplate ("fragment_id_to_string(pp, {0})" ),
@@ -230,6 +236,7 @@ class BuiltinTemplate:
230236 # unwrap_option_or is handled specially in codegen_go.py due to Go's lack of ternary
231237 "unwrap_option_or" : BuiltinTemplate ("{0}" ), # Placeholder - overridden in codegen
232238 "int64_to_int32" : BuiltinTemplate ("int32({0})" ),
239+ "float64_to_float32" : BuiltinTemplate ("float32({0})" ),
233240 "to_ptr_int64" : BuiltinTemplate ("ptrInt64({0})" ),
234241 "to_ptr_string" : BuiltinTemplate ("ptrString({0})" ),
235242 "to_ptr_bool" : BuiltinTemplate ("ptrBool({0})" ),
@@ -265,7 +272,10 @@ class BuiltinTemplate:
265272 "dedent_io" : BuiltinTemplate ("nil" , ["p.dedent()" ]),
266273 "try_flat_io" : BuiltinTemplate ("p.tryFlat({0}, func() {{ {1}({0}) }})" ),
267274 "format_int64" : BuiltinTemplate ('fmt.Sprintf("%d", {0})' ),
268- "format_int32" : BuiltinTemplate ('fmt.Sprintf("%d", {0})' ),
275+ "format_int32" : BuiltinTemplate ('fmt.Sprintf("%di32", {0})' ),
276+ "format_float32" : BuiltinTemplate (
277+ "fmt.Sprintf(\" %sf32\" , strconv.FormatFloat(float64({0}), 'g', -1, 32))"
278+ ),
269279 "format_float64" : BuiltinTemplate ("formatFloat64({0})" ),
270280 "format_string" : BuiltinTemplate ("p.formatStringValue({0})" ),
271281 "format_symbol" : BuiltinTemplate ("{0}" ),
@@ -277,6 +287,7 @@ class BuiltinTemplate:
277287 "to_string" : BuiltinTemplate ('fmt.Sprintf("%v", {0})' ),
278288 # Type conversions used by pretty printer
279289 "int32_to_int64" : BuiltinTemplate ("int64({0})" ),
290+ "float32_to_float64" : BuiltinTemplate ("float64({0})" ),
280291 "is_empty" : BuiltinTemplate ("len({0}) == 0" ),
281292 "decode_string" : BuiltinTemplate ("string({0})" ),
282293 "fragment_id_to_string" : BuiltinTemplate ("p.fragmentIdToString({0})" ),
0 commit comments