Skip to content

Commit 8a69eb3

Browse files
authored
feat(compiler): Add hex float syntax (#1743)
feat: Add Hex Exponent Decimals
1 parent 28a38ac commit 8a69eb3

9 files changed

+404
-7
lines changed

compiler/src/parsing/lexer.re

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ let unsigned_int = [%sedlex.regexp? dec_int | hex_int | oct_int | bin_int];
126126
let dec_float_exp = [%sedlex.regexp?
127127
('e' | 'E', Opt('+' | '-'), dec_digit, Star(dec_digit | '_'))
128128
];
129+
let hex_float_exp = [%sedlex.regexp?
130+
('p' | 'P', Opt('+' | '-'), dec_digit, Star(dec_digit | '_'))
131+
];
132+
133+
let hex_float_decimal = [%sedlex.regexp? ('.', hex_digit, Star(hex_digit))];
134+
135+
let hex_float_integral = [%sedlex.regexp? hex_int];
136+
129137
let dec_float_decimal = [%sedlex.regexp?
130138
('.', dec_digit, Star(dec_digit | '_'))
131139
];
@@ -135,6 +143,8 @@ let dec_float_integral = [%sedlex.regexp?
135143
let dec_float_alphabetic = [%sedlex.regexp? "Infinity" | "NaN"];
136144

137145
let dec_float = [%sedlex.regexp?
146+
(hex_float_integral, hex_float_decimal, hex_float_exp) |
147+
(hex_int, hex_float_exp) |
138148
(dec_float_integral, dec_float_decimal, Opt(dec_float_exp)) |
139149
(dec_float_integral, dec_float_exp) |
140150
dec_float_alphabetic
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
basic functionality › hex_dec_exp5
2+
(module
3+
(type $none_=>_none (func))
4+
(type $none_=>_i32 (func (result i32)))
5+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
6+
(import \"_genv\" \"mem\" (memory $0 0))
7+
(import \"_genv\" \"tbl\" (table $tbl 0 funcref))
8+
(import \"_genv\" \"relocBase\" (global $relocBase_0 i32))
9+
(import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32))
10+
(import \"GRAIN$MODULE$runtime/gc\" \"GRAIN$EXPORT$malloc\" (global $GRAIN$EXPORT$malloc_0 (mut i32)))
11+
(import \"GRAIN$MODULE$runtime/gc\" \"malloc\" (func $malloc_0 (param i32 i32) (result i32)))
12+
(global $GRAIN$TABLE_SIZE i32 (i32.const 0))
13+
(elem $elem (global.get $relocBase_0))
14+
(export \"memory\" (memory $0))
15+
(export \"_gmain\" (func $_gmain))
16+
(export \"_gtype_metadata\" (func $_gtype_metadata))
17+
(export \"_start\" (func $_start))
18+
(export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE))
19+
(func $_gtype_metadata
20+
(local $0 i32)
21+
(local $1 i32)
22+
(local $2 i32)
23+
(local $3 i64)
24+
(local $4 f32)
25+
(local $5 f64)
26+
(nop)
27+
)
28+
(func $_gmain (result i32)
29+
(local $0 i32)
30+
(local $1 i32)
31+
(local $2 i32)
32+
(local $3 i64)
33+
(local $4 f32)
34+
(local $5 f64)
35+
(block $compile_block.2 (result i32)
36+
(block $allocate_number.1 (result i32)
37+
(i32.store
38+
(local.tee $0
39+
(call $malloc_0
40+
(global.get $GRAIN$EXPORT$malloc_0)
41+
(i32.const 16)
42+
)
43+
)
44+
(i32.const 5)
45+
)
46+
(i32.store offset=4
47+
(local.get $0)
48+
(i32.const 1)
49+
)
50+
(f64.store offset=8
51+
(local.get $0)
52+
(f64.const 841.25)
53+
)
54+
(local.get $0)
55+
)
56+
)
57+
)
58+
(func $_start
59+
(drop
60+
(call $_gmain)
61+
)
62+
)
63+
;; custom section \"cmi\", size 236
64+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
basic functionality › hex_dec_exp3
2+
(module
3+
(type $none_=>_none (func))
4+
(type $none_=>_i32 (func (result i32)))
5+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
6+
(import \"_genv\" \"mem\" (memory $0 0))
7+
(import \"_genv\" \"tbl\" (table $tbl 0 funcref))
8+
(import \"_genv\" \"relocBase\" (global $relocBase_0 i32))
9+
(import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32))
10+
(import \"GRAIN$MODULE$runtime/gc\" \"GRAIN$EXPORT$malloc\" (global $GRAIN$EXPORT$malloc_0 (mut i32)))
11+
(import \"GRAIN$MODULE$runtime/gc\" \"malloc\" (func $malloc_0 (param i32 i32) (result i32)))
12+
(global $GRAIN$TABLE_SIZE i32 (i32.const 0))
13+
(elem $elem (global.get $relocBase_0))
14+
(export \"memory\" (memory $0))
15+
(export \"_gmain\" (func $_gmain))
16+
(export \"_gtype_metadata\" (func $_gtype_metadata))
17+
(export \"_start\" (func $_start))
18+
(export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE))
19+
(func $_gtype_metadata
20+
(local $0 i32)
21+
(local $1 i32)
22+
(local $2 i32)
23+
(local $3 i64)
24+
(local $4 f32)
25+
(local $5 f64)
26+
(nop)
27+
)
28+
(func $_gmain (result i32)
29+
(local $0 i32)
30+
(local $1 i32)
31+
(local $2 i32)
32+
(local $3 i64)
33+
(local $4 f32)
34+
(local $5 f64)
35+
(block $compile_block.2 (result i32)
36+
(block $allocate_number.1 (result i32)
37+
(i32.store
38+
(local.tee $0
39+
(call $malloc_0
40+
(global.get $GRAIN$EXPORT$malloc_0)
41+
(i32.const 16)
42+
)
43+
)
44+
(i32.const 5)
45+
)
46+
(i32.store offset=4
47+
(local.get $0)
48+
(i32.const 1)
49+
)
50+
(f64.store offset=8
51+
(local.get $0)
52+
(f64.const 0.03125)
53+
)
54+
(local.get $0)
55+
)
56+
)
57+
)
58+
(func $_start
59+
(drop
60+
(call $_gmain)
61+
)
62+
)
63+
;; custom section \"cmi\", size 236
64+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
basic functionality › hex_dec_exp2
2+
(module
3+
(type $none_=>_none (func))
4+
(type $none_=>_i32 (func (result i32)))
5+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
6+
(import \"_genv\" \"mem\" (memory $0 0))
7+
(import \"_genv\" \"tbl\" (table $tbl 0 funcref))
8+
(import \"_genv\" \"relocBase\" (global $relocBase_0 i32))
9+
(import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32))
10+
(import \"GRAIN$MODULE$runtime/gc\" \"GRAIN$EXPORT$malloc\" (global $GRAIN$EXPORT$malloc_0 (mut i32)))
11+
(import \"GRAIN$MODULE$runtime/gc\" \"malloc\" (func $malloc_0 (param i32 i32) (result i32)))
12+
(global $GRAIN$TABLE_SIZE i32 (i32.const 0))
13+
(elem $elem (global.get $relocBase_0))
14+
(export \"memory\" (memory $0))
15+
(export \"_gmain\" (func $_gmain))
16+
(export \"_gtype_metadata\" (func $_gtype_metadata))
17+
(export \"_start\" (func $_start))
18+
(export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE))
19+
(func $_gtype_metadata
20+
(local $0 i32)
21+
(local $1 i32)
22+
(local $2 i32)
23+
(local $3 i64)
24+
(local $4 f32)
25+
(local $5 f64)
26+
(nop)
27+
)
28+
(func $_gmain (result i32)
29+
(local $0 i32)
30+
(local $1 i32)
31+
(local $2 i32)
32+
(local $3 i64)
33+
(local $4 f32)
34+
(local $5 f64)
35+
(block $compile_block.2 (result i32)
36+
(block $allocate_number.1 (result i32)
37+
(i32.store
38+
(local.tee $0
39+
(call $malloc_0
40+
(global.get $GRAIN$EXPORT$malloc_0)
41+
(i32.const 16)
42+
)
43+
)
44+
(i32.const 5)
45+
)
46+
(i32.store offset=4
47+
(local.get $0)
48+
(i32.const 1)
49+
)
50+
(f64.store offset=8
51+
(local.get $0)
52+
(f64.const 40)
53+
)
54+
(local.get $0)
55+
)
56+
)
57+
)
58+
(func $_start
59+
(drop
60+
(call $_gmain)
61+
)
62+
)
63+
;; custom section \"cmi\", size 236
64+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
basic functionality › hex_dec_exp4
2+
(module
3+
(type $none_=>_none (func))
4+
(type $none_=>_i32 (func (result i32)))
5+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
6+
(import \"_genv\" \"mem\" (memory $0 0))
7+
(import \"_genv\" \"tbl\" (table $tbl 0 funcref))
8+
(import \"_genv\" \"relocBase\" (global $relocBase_0 i32))
9+
(import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32))
10+
(import \"GRAIN$MODULE$runtime/gc\" \"GRAIN$EXPORT$malloc\" (global $GRAIN$EXPORT$malloc_0 (mut i32)))
11+
(import \"GRAIN$MODULE$runtime/gc\" \"malloc\" (func $malloc_0 (param i32 i32) (result i32)))
12+
(global $GRAIN$TABLE_SIZE i32 (i32.const 0))
13+
(elem $elem (global.get $relocBase_0))
14+
(export \"memory\" (memory $0))
15+
(export \"_gmain\" (func $_gmain))
16+
(export \"_gtype_metadata\" (func $_gtype_metadata))
17+
(export \"_start\" (func $_start))
18+
(export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE))
19+
(func $_gtype_metadata
20+
(local $0 i32)
21+
(local $1 i32)
22+
(local $2 i32)
23+
(local $3 i64)
24+
(local $4 f32)
25+
(local $5 f64)
26+
(nop)
27+
)
28+
(func $_gmain (result i32)
29+
(local $0 i32)
30+
(local $1 i32)
31+
(local $2 i32)
32+
(local $3 i64)
33+
(local $4 f32)
34+
(local $5 f64)
35+
(block $compile_block.2 (result i32)
36+
(block $allocate_number.1 (result i32)
37+
(i32.store
38+
(local.tee $0
39+
(call $malloc_0
40+
(global.get $GRAIN$EXPORT$malloc_0)
41+
(i32.const 16)
42+
)
43+
)
44+
(i32.const 5)
45+
)
46+
(i32.store offset=4
47+
(local.get $0)
48+
(i32.const 1)
49+
)
50+
(f64.store offset=8
51+
(local.get $0)
52+
(f64.const 832)
53+
)
54+
(local.get $0)
55+
)
56+
)
57+
)
58+
(func $_start
59+
(drop
60+
(call $_gmain)
61+
)
62+
)
63+
;; custom section \"cmi\", size 236
64+
)
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
basic functionality › hex_dec_exp1
2+
(module
3+
(type $none_=>_none (func))
4+
(type $none_=>_i32 (func (result i32)))
5+
(type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
6+
(import \"_genv\" \"mem\" (memory $0 0))
7+
(import \"_genv\" \"tbl\" (table $tbl 0 funcref))
8+
(import \"_genv\" \"relocBase\" (global $relocBase_0 i32))
9+
(import \"_genv\" \"moduleRuntimeId\" (global $moduleRuntimeId_0 i32))
10+
(import \"GRAIN$MODULE$runtime/gc\" \"GRAIN$EXPORT$malloc\" (global $GRAIN$EXPORT$malloc_0 (mut i32)))
11+
(import \"GRAIN$MODULE$runtime/gc\" \"malloc\" (func $malloc_0 (param i32 i32) (result i32)))
12+
(global $GRAIN$TABLE_SIZE i32 (i32.const 0))
13+
(elem $elem (global.get $relocBase_0))
14+
(export \"memory\" (memory $0))
15+
(export \"_gmain\" (func $_gmain))
16+
(export \"_gtype_metadata\" (func $_gtype_metadata))
17+
(export \"_start\" (func $_start))
18+
(export \"GRAIN$TABLE_SIZE\" (global $GRAIN$TABLE_SIZE))
19+
(func $_gtype_metadata
20+
(local $0 i32)
21+
(local $1 i32)
22+
(local $2 i32)
23+
(local $3 i64)
24+
(local $4 f32)
25+
(local $5 f64)
26+
(nop)
27+
)
28+
(func $_gmain (result i32)
29+
(local $0 i32)
30+
(local $1 i32)
31+
(local $2 i32)
32+
(local $3 i64)
33+
(local $4 f32)
34+
(local $5 f64)
35+
(block $compile_block.2 (result i32)
36+
(block $allocate_number.1 (result i32)
37+
(i32.store
38+
(local.tee $0
39+
(call $malloc_0
40+
(global.get $GRAIN$EXPORT$malloc_0)
41+
(i32.const 16)
42+
)
43+
)
44+
(i32.const 5)
45+
)
46+
(i32.store offset=4
47+
(local.get $0)
48+
(i32.const 1)
49+
)
50+
(f64.store offset=8
51+
(local.get $0)
52+
(f64.const 32)
53+
)
54+
(local.get $0)
55+
)
56+
)
57+
)
58+
(func $_start
59+
(drop
60+
(call $_gmain)
61+
)
62+
)
63+
;; custom section \"cmi\", size 236
64+
)

0 commit comments

Comments
 (0)