Skip to content

Commit 3ea374b

Browse files
committed
Parse hex literals
1 parent 3d2937a commit 3ea374b

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

ml-proto/src/host/lexer.mll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ let escape = ['n''t''\\''\'''\"']
9797
let character = [^'"''\\''\n'] | '\\'escape | '\\'hexdigit hexdigit
9898

9999
let num = ('+' | '-')? digit+
100-
let int = num
100+
let hexnum = ('+' | '-')? "0x" hexdigit+
101+
let int = num | hexnum
101102
let float = (num '.' digit+) | num ('.' digit+)? ('e' | 'E') num
102103
let text = '"' character* '"'
103104
let name = '$' (letter | digit | '_' | tick | symbol)+

ml-proto/test/hexnum.wasm

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
(module
2+
(func $test32 (result i32)
3+
(return (i32.const 0x0bAdD00D))
4+
)
5+
6+
(func $max32 (result i32)
7+
(return (i32.const 0xffffffff))
8+
)
9+
10+
(func $neg32 (result i32)
11+
(return (i32.const -0x7fffffff))
12+
)
13+
14+
(func $test64 (result i64)
15+
(return (i64.const 0x0CABBA6E0ba66a6e))
16+
)
17+
18+
(func $max64 (result i64)
19+
(return (i64.const 0xffffffffffffffff))
20+
)
21+
22+
(func $neg64 (result i64)
23+
(return (i64.const -0x7fffffffffffffff))
24+
)
25+
26+
(export "test32" $test32)
27+
(export "max32" $max32)
28+
(export "neg32" $neg32)
29+
(export "test64" $test64)
30+
(export "max64" $max64)
31+
(export "neg64" $neg64)
32+
)
33+
34+
(assert_eq (invoke "test32") (i32.const 195940365))
35+
(assert_eq (invoke "max32") (i32.const -1))
36+
(assert_eq (invoke "neg32") (i32.const -2147483647))
37+
(assert_eq (invoke "test64") (i64.const 913028331277281902))
38+
(assert_eq (invoke "max64") (i64.const -1))
39+
(assert_eq (invoke "neg64") (i64.const -9223372036854775807))

0 commit comments

Comments
 (0)