alpha
Login
or
Join now
nandi.uk
/
gleam
Star
2
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Fork of daniellemaywood.uk/gleam — Wasm codegen work
Star
2
Fork
0
Atom
Configure Feed
Issues
Pull Requests
Commits
Tags
Feed URL
Select the types of activity you want to include in your feed.
Overview
Issues
Pulls
Pipelines
Add floats and more binary operations
author
Danielle Maywood
committer
nandi
date
14 hours ago
(Jul 26, 2026, 12:11 PM -0700)
commit
46c18ca2
46c18ca22cc3ac9758acbb0ce934ba0229ef1e6b
parent
5e69ae7b
5e69ae7b598c7f779eed02bb88bc0f6ad1e7d8c2
change-id
zzvszmtv
zzvszmtvtuvqxvryxrptwlpzxkqluwzv
+299
-36
2 changed files
Expand all
Collapse all
Unified
Split
compiler-core
src
cranelift
mir.rs
snapshots
gleam_core__cranelift__mir__tests__translates_samples-5.snap
+173
-36
compiler-core/src/cranelift/mir.rs
View file
Reviewed
···
58
58
value: BigInt,
59
59
},
60
60
61
61
+
Float {
62
62
+
value: EcoString,
63
63
+
},
64
64
+
61
65
Equals {
62
66
lhs: Box<Expression>,
63
67
rhs: Box<Expression>,
···
69
73
},
70
74
71
75
IntSub {
76
76
+
lhs: Box<Expression>,
77
77
+
rhs: Box<Expression>,
78
78
+
},
79
79
+
80
80
+
IntMul {
81
81
+
lhs: Box<Expression>,
82
82
+
rhs: Box<Expression>,
83
83
+
},
84
84
+
85
85
+
IntDiv {
86
86
+
lhs: Box<Expression>,
87
87
+
rhs: Box<Expression>,
88
88
+
},
89
89
+
90
90
+
FloatAdd {
91
91
+
lhs: Box<Expression>,
92
92
+
rhs: Box<Expression>,
93
93
+
},
94
94
+
95
95
+
FloatSub {
96
96
+
lhs: Box<Expression>,
97
97
+
rhs: Box<Expression>,
98
98
+
},
99
99
+
100
100
+
FloatMul {
101
101
+
lhs: Box<Expression>,
102
102
+
rhs: Box<Expression>,
103
103
+
},
104
104
+
105
105
+
FloatDiv {
72
106
lhs: Box<Expression>,
73
107
rhs: Box<Expression>,
74
108
},
···
182
216
Expression::Var { .. }
183
217
| Expression::FunctionRef { .. }
184
218
| Expression::Int { .. }
219
219
+
| Expression::Float { .. }
185
220
| Expression::Equals { .. }
186
221
| Expression::IntAdd { .. }
187
222
| Expression::IntSub { .. }
223
223
+
| Expression::IntMul { .. }
224
224
+
| Expression::IntDiv { .. }
225
225
+
| Expression::FloatAdd { .. }
226
226
+
| Expression::FloatSub { .. }
227
227
+
| Expression::FloatMul { .. }
228
228
+
| Expression::FloatDiv { .. }
188
229
| Expression::Set { .. }
189
230
| Expression::If { .. }
190
231
| Expression::Call { .. } => block.push(expression),
···
199
240
Expression::FunctionRef { module, name } => Expression::FunctionRef { module, name },
200
241
Expression::Var(var) => Expression::Var(var),
201
242
Expression::Int { value } => Expression::Int { value },
243
243
+
Expression::Float { value } => Expression::Float { value },
202
244
Expression::Equals { lhs, rhs } => Expression::Equals {
203
245
lhs: Box::new(Self::flatten_expression(*lhs)),
204
246
rhs: Box::new(Self::flatten_expression(*rhs)),
···
211
253
lhs: Box::new(Self::flatten_expression(*lhs)),
212
254
rhs: Box::new(Self::flatten_expression(*rhs)),
213
255
},
256
256
+
Expression::IntMul { lhs, rhs } => Expression::IntMul {
257
257
+
lhs: Box::new(Self::flatten_expression(*lhs)),
258
258
+
rhs: Box::new(Self::flatten_expression(*rhs)),
259
259
+
},
260
260
+
Expression::IntDiv { lhs, rhs } => Expression::IntDiv {
261
261
+
lhs: Box::new(Self::flatten_expression(*lhs)),
262
262
+
rhs: Box::new(Self::flatten_expression(*rhs)),
263
263
+
},
264
264
+
Expression::FloatAdd { lhs, rhs } => Expression::FloatAdd {
265
265
+
lhs: Box::new(Self::flatten_expression(*lhs)),
266
266
+
rhs: Box::new(Self::flatten_expression(*rhs)),
267
267
+
},
268
268
+
Expression::FloatSub { lhs, rhs } => Expression::FloatSub {
269
269
+
lhs: Box::new(Self::flatten_expression(*lhs)),
270
270
+
rhs: Box::new(Self::flatten_expression(*rhs)),
271
271
+
},
272
272
+
Expression::FloatMul { lhs, rhs } => Expression::FloatMul {
273
273
+
lhs: Box::new(Self::flatten_expression(*lhs)),
274
274
+
rhs: Box::new(Self::flatten_expression(*rhs)),
275
275
+
},
276
276
+
Expression::FloatDiv { lhs, rhs } => Expression::FloatDiv {
277
277
+
lhs: Box::new(Self::flatten_expression(*lhs)),
278
278
+
rhs: Box::new(Self::flatten_expression(*rhs)),
279
279
+
},
214
280
Expression::Set { name, value } => Expression::Set {
215
281
name,
216
282
value: Box::new(Self::flatten_expression(*value)),
···
245
311
| Expression::FunctionRef { .. }
246
312
| Expression::Var { .. }
247
313
| Expression::Int { .. }
314
314
+
| Expression::Float { .. }
248
315
| Expression::Equals { .. }
249
316
| Expression::IntAdd { .. }
250
317
| Expression::IntSub { .. }
318
318
+
| Expression::IntMul { .. }
319
319
+
| Expression::IntDiv { .. }
320
320
+
| Expression::FloatAdd { .. }
321
321
+
| Expression::FloatSub { .. }
322
322
+
| Expression::FloatMul { .. }
323
323
+
| Expression::FloatDiv { .. }
251
324
| Expression::Set { .. }
252
325
| Expression::If { .. }
253
326
| Expression::Call { .. } => block.push(expression),
···
262
335
Expression::FunctionRef { module, name } => Expression::FunctionRef { module, name },
263
336
Expression::Var(var) => Expression::Var(var),
264
337
Expression::Int { value } => Expression::Int { value },
338
338
+
Expression::Float { value } => Expression::Float { value },
265
339
Expression::Equals { lhs, rhs } => Expression::Equals {
266
340
lhs: Box::new(Self::remove_unused_code(*lhs)),
267
341
rhs: Box::new(Self::remove_unused_code(*rhs)),
···
274
348
lhs: Box::new(Self::remove_unused_code(*lhs)),
275
349
rhs: Box::new(Self::remove_unused_code(*rhs)),
276
350
},
351
351
+
Expression::IntMul { lhs, rhs } => Expression::IntMul {
352
352
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
353
353
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
354
354
+
},
355
355
+
Expression::IntDiv { lhs, rhs } => Expression::IntDiv {
356
356
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
357
357
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
358
358
+
},
359
359
+
Expression::FloatAdd { lhs, rhs } => Expression::FloatAdd {
360
360
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
361
361
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
362
362
+
},
363
363
+
Expression::FloatSub { lhs, rhs } => Expression::FloatSub {
364
364
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
365
365
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
366
366
+
},
367
367
+
Expression::FloatMul { lhs, rhs } => Expression::FloatMul {
368
368
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
369
369
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
370
370
+
},
371
371
+
Expression::FloatDiv { lhs, rhs } => Expression::FloatDiv {
372
372
+
lhs: Box::new(Self::remove_unused_code(*lhs)),
373
373
+
rhs: Box::new(Self::remove_unused_code(*rhs)),
374
374
+
},
277
375
Expression::Set { name, value } => Expression::Set {
278
376
name,
279
377
value: Box::new(Self::remove_unused_code(*value)),
···
366
464
ast::TypedExpr::Float {
367
465
location: _,
368
466
type_: _,
369
369
-
value: _,
370
370
-
} => todo!(),
467
467
+
value,
468
468
+
} => Expression::Float {
469
469
+
value: value.clone(),
470
470
+
},
371
471
ast::TypedExpr::String {
372
472
location: _,
373
473
type_: _,
···
486
586
ast::BinOp::GtEqFloat => todo!(),
487
587
ast::BinOp::GtFloat => todo!(),
488
588
ast::BinOp::AddInt => Expression::IntAdd { lhs, rhs },
489
489
-
ast::BinOp::AddFloat => todo!(),
589
589
+
ast::BinOp::AddFloat => Expression::FloatAdd { lhs, rhs },
490
590
ast::BinOp::SubInt => Expression::IntSub { lhs, rhs },
491
491
-
ast::BinOp::SubFloat => todo!(),
492
492
-
ast::BinOp::MultInt => todo!(),
493
493
-
ast::BinOp::MultFloat => todo!(),
494
494
-
ast::BinOp::DivInt => todo!(),
495
495
-
ast::BinOp::DivFloat => todo!(),
591
591
+
ast::BinOp::SubFloat => Expression::FloatSub { lhs, rhs },
592
592
+
ast::BinOp::MultInt => Expression::IntMul { lhs, rhs },
593
593
+
ast::BinOp::MultFloat => Expression::FloatMul { lhs, rhs },
594
594
+
ast::BinOp::DivInt => Expression::IntDiv { lhs, rhs },
595
595
+
ast::BinOp::DivFloat => Expression::FloatDiv { lhs, rhs },
496
596
ast::BinOp::RemainderInt => todo!(),
497
597
ast::BinOp::Concatenate => todo!(),
498
598
}
···
784
884
} => todo!(),
785
885
ast::ClauseGuard::AddInt {
786
886
location: _,
787
787
-
left: _,
788
788
-
right: _,
789
789
-
} => todo!(),
887
887
+
left,
888
888
+
right,
889
889
+
} => Expression::IntAdd {
890
890
+
lhs: Box::new(self.translate_guard(left)),
891
891
+
rhs: Box::new(self.translate_guard(right)),
892
892
+
},
790
893
ast::ClauseGuard::AddFloat {
791
894
location: _,
792
792
-
left: _,
793
793
-
right: _,
794
794
-
} => todo!(),
895
895
+
left,
896
896
+
right,
897
897
+
} => Expression::FloatAdd {
898
898
+
lhs: Box::new(self.translate_guard(left)),
899
899
+
rhs: Box::new(self.translate_guard(right)),
900
900
+
},
795
901
ast::ClauseGuard::SubInt {
796
902
location: _,
797
797
-
left: _,
798
798
-
right: _,
799
799
-
} => todo!(),
903
903
+
left,
904
904
+
right,
905
905
+
} => Expression::IntSub {
906
906
+
lhs: Box::new(self.translate_guard(left)),
907
907
+
rhs: Box::new(self.translate_guard(right)),
908
908
+
},
800
909
ast::ClauseGuard::SubFloat {
801
910
location: _,
802
802
-
left: _,
803
803
-
right: _,
804
804
-
} => todo!(),
911
911
+
left,
912
912
+
right,
913
913
+
} => Expression::FloatSub {
914
914
+
lhs: Box::new(self.translate_guard(left)),
915
915
+
rhs: Box::new(self.translate_guard(right)),
916
916
+
},
805
917
ast::ClauseGuard::MultInt {
806
918
location: _,
807
807
-
left: _,
808
808
-
right: _,
809
809
-
} => todo!(),
919
919
+
left,
920
920
+
right,
921
921
+
} => Expression::IntMul {
922
922
+
lhs: Box::new(self.translate_guard(left)),
923
923
+
rhs: Box::new(self.translate_guard(right)),
924
924
+
},
810
925
ast::ClauseGuard::MultFloat {
811
926
location: _,
812
812
-
left: _,
813
813
-
right: _,
814
814
-
} => todo!(),
927
927
+
left,
928
928
+
right,
929
929
+
} => Expression::FloatMul {
930
930
+
lhs: Box::new(self.translate_guard(left)),
931
931
+
rhs: Box::new(self.translate_guard(right)),
932
932
+
},
815
933
ast::ClauseGuard::DivInt {
816
934
location: _,
817
817
-
left: _,
818
818
-
right: _,
819
819
-
} => todo!(),
935
935
+
left,
936
936
+
right,
937
937
+
} => Expression::IntDiv {
938
938
+
lhs: Box::new(self.translate_guard(left)),
939
939
+
rhs: Box::new(self.translate_guard(right)),
940
940
+
},
820
941
ast::ClauseGuard::DivFloat {
821
942
location: _,
822
822
-
left: _,
823
823
-
right: _,
824
824
-
} => todo!(),
943
943
+
left,
944
944
+
right,
945
945
+
} => Expression::FloatDiv {
946
946
+
lhs: Box::new(self.translate_guard(left)),
947
947
+
rhs: Box::new(self.translate_guard(right)),
948
948
+
},
825
949
ast::ClauseGuard::RemainderInt {
826
950
location: _,
827
951
left: _,
···
881
1005
} => Expression::Int {
882
1006
value: int_value.clone(),
883
1007
},
884
884
-
ast::Constant::Float {
885
885
-
location: _,
886
886
-
value: _,
887
887
-
} => todo!(),
1008
1008
+
ast::Constant::Float { location: _, value } => Expression::Float {
1009
1009
+
value: value.clone(),
1010
1010
+
},
888
1011
ast::Constant::String {
889
1012
location: _,
890
1013
value: _,
···
1075
1198
1 -> 1
1076
1199
_ -> fib(n - 1) + fib(n - 2)
1077
1200
}
1201
1201
+
}"#
1202
1202
+
));
1203
1203
+
1204
1204
+
insta::assert_debug_snapshot!(translate(
1205
1205
+
r#"pub fn maths() {
1206
1206
+
let _ = 1 + 0
1207
1207
+
let _ = 2 - 1
1208
1208
+
let _ = 3 * 2
1209
1209
+
let _ = 4 / 3
1210
1210
+
1211
1211
+
let _ = 1.0 +. 0.0
1212
1212
+
let _ = 2.0 -. 1.0
1213
1213
+
let _ = 3.0 *. 2.0
1214
1214
+
let _ = 4.0 /. 3.0
1078
1215
}"#
1079
1216
));
1080
1217
}
+126
compiler-core/src/cranelift/snapshots/gleam_core__cranelift__mir__tests__translates_samples-5.snap
View file
Reviewed
···
1
1
+
---
2
2
+
source: compiler-core/src/cranelift/mir.rs
3
3
+
expression: "translate(r#\"pub fn maths() {\n let _ = 1 + 0\n let _ = 2 - 1\n let _ = 3 * 2\n let _ = 4 / 3\n\n let _ = 1.0 +. 0.0\n let _ = 2.0 -. 1.0\n let _ = 3.0 *. 2.0\n let _ = 4.0 /. 3.0\n }\"#)"
4
4
+
---
5
5
+
Module {
6
6
+
functions: [
7
7
+
Function {
8
8
+
name: "maths",
9
9
+
return_type: Float,
10
10
+
parameters: [],
11
11
+
body: Block(
12
12
+
[
13
13
+
Set {
14
14
+
name: Var {
15
15
+
name: "_tmp$1",
16
16
+
},
17
17
+
value: IntAdd {
18
18
+
lhs: Int {
19
19
+
value: 1,
20
20
+
},
21
21
+
rhs: Int {
22
22
+
value: 0,
23
23
+
},
24
24
+
},
25
25
+
},
26
26
+
Set {
27
27
+
name: Var {
28
28
+
name: "_tmp$2",
29
29
+
},
30
30
+
value: IntSub {
31
31
+
lhs: Int {
32
32
+
value: 2,
33
33
+
},
34
34
+
rhs: Int {
35
35
+
value: 1,
36
36
+
},
37
37
+
},
38
38
+
},
39
39
+
Set {
40
40
+
name: Var {
41
41
+
name: "_tmp$3",
42
42
+
},
43
43
+
value: IntMul {
44
44
+
lhs: Int {
45
45
+
value: 3,
46
46
+
},
47
47
+
rhs: Int {
48
48
+
value: 2,
49
49
+
},
50
50
+
},
51
51
+
},
52
52
+
Set {
53
53
+
name: Var {
54
54
+
name: "_tmp$4",
55
55
+
},
56
56
+
value: IntDiv {
57
57
+
lhs: Int {
58
58
+
value: 4,
59
59
+
},
60
60
+
rhs: Int {
61
61
+
value: 3,
62
62
+
},
63
63
+
},
64
64
+
},
65
65
+
Set {
66
66
+
name: Var {
67
67
+
name: "_tmp$5",
68
68
+
},
69
69
+
value: FloatAdd {
70
70
+
lhs: Float {
71
71
+
value: "1.0",
72
72
+
},
73
73
+
rhs: Float {
74
74
+
value: "0.0",
75
75
+
},
76
76
+
},
77
77
+
},
78
78
+
Set {
79
79
+
name: Var {
80
80
+
name: "_tmp$6",
81
81
+
},
82
82
+
value: FloatSub {
83
83
+
lhs: Float {
84
84
+
value: "2.0",
85
85
+
},
86
86
+
rhs: Float {
87
87
+
value: "1.0",
88
88
+
},
89
89
+
},
90
90
+
},
91
91
+
Set {
92
92
+
name: Var {
93
93
+
name: "_tmp$7",
94
94
+
},
95
95
+
value: FloatMul {
96
96
+
lhs: Float {
97
97
+
value: "3.0",
98
98
+
},
99
99
+
rhs: Float {
100
100
+
value: "2.0",
101
101
+
},
102
102
+
},
103
103
+
},
104
104
+
Set {
105
105
+
name: Var {
106
106
+
name: "_tmp$8",
107
107
+
},
108
108
+
value: FloatDiv {
109
109
+
lhs: Float {
110
110
+
value: "4.0",
111
111
+
},
112
112
+
rhs: Float {
113
113
+
value: "3.0",
114
114
+
},
115
115
+
},
116
116
+
},
117
117
+
Var(
118
118
+
Var {
119
119
+
name: "_tmp$8",
120
120
+
},
121
121
+
),
122
122
+
],
123
123
+
),
124
124
+
},
125
125
+
],
126
126
+
}