Skip to content

Commit 3186155

Browse files
authored
feat(compiler)!: Disallow whitespace for negative literals + allow infix operators on new line (#2136)
1 parent 218ff78 commit 3186155

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1559
-1457
lines changed

compiler/src/formatting/fmt.re

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1653,19 +1653,18 @@ let print_expression = (fmt, ~infix_wrap=d => group(indent(d)), expr) => {
16531653
)
16541654
++ fmt.print_comment_range(
16551655
fmt,
1656-
~none=space,
1656+
~none=breakable_space,
16571657
~lead=space,
1658-
~trail=space,
1659-
~allow_breaks=false,
1658+
~trail=breakable_space,
16601659
lhs.paa_loc,
16611660
fn.pexp_loc,
16621661
)
16631662
++ fmt.print_infix_prefix_op(fmt, fn)
16641663
++ fmt.print_comment_range(
16651664
fmt,
1666-
~none=breakable_space,
1665+
~none=space,
16671666
~lead=space,
1668-
~trail=breakable_space,
1667+
~trail=space,
16691668
fn.pexp_loc,
16701669
rhs.paa_loc,
16711670
)

compiler/src/parsing/lexer.re

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -211,44 +211,49 @@ let rec token = lexbuf => {
211211
read_doc_comment(start_p, buf, lexbuf);
212212
| blank => token(lexbuf)
213213
| newlines => positioned(EOL)
214-
| (unsigned_float, 'f') =>
214+
| (Opt('-'), unsigned_float, 'f') =>
215215
positioned(FLOAT32(Sedlexing.Utf8.lexeme(lexbuf)))
216-
| (unsigned_float, 'd') =>
216+
| (Opt('-'), unsigned_float, 'd') =>
217217
positioned(FLOAT64(Sedlexing.Utf8.lexeme(lexbuf)))
218-
| unsigned_float =>
218+
| (Opt('-'), unsigned_float) =>
219219
positioned(NUMBER_FLOAT(Sedlexing.Utf8.lexeme(lexbuf)))
220-
| (invalid_float, Opt('f' | 'd' | 'w' | 'W')) =>
220+
| (Opt('-'), invalid_float, Opt('f' | 'd' | 'w' | 'W')) =>
221221
raise(
222222
Error(
223223
lexbuf_loc(lexbuf),
224224
FloatWithoutLeadingZero(Sedlexing.Utf8.lexeme(lexbuf)),
225225
),
226226
)
227-
| (unsigned_int, 's') => positioned(INT8(Sedlexing.Utf8.lexeme(lexbuf)))
228-
| (unsigned_int, 'S') => positioned(INT16(Sedlexing.Utf8.lexeme(lexbuf)))
229-
| (unsigned_int, 'l') => positioned(INT32(Sedlexing.Utf8.lexeme(lexbuf)))
230-
| (unsigned_int, 'L') => positioned(INT64(Sedlexing.Utf8.lexeme(lexbuf)))
231-
| (unsigned_int, "us") =>
227+
| (Opt('-'), unsigned_int, 's') =>
228+
positioned(INT8(Sedlexing.Utf8.lexeme(lexbuf)))
229+
| (Opt('-'), unsigned_int, 'S') =>
230+
positioned(INT16(Sedlexing.Utf8.lexeme(lexbuf)))
231+
| (Opt('-'), unsigned_int, 'l') =>
232+
positioned(INT32(Sedlexing.Utf8.lexeme(lexbuf)))
233+
| (Opt('-'), unsigned_int, 'L') =>
234+
positioned(INT64(Sedlexing.Utf8.lexeme(lexbuf)))
235+
| (Opt('-'), unsigned_int, "us") =>
232236
positioned(UINT8(Sedlexing.Utf8.lexeme(lexbuf)))
233-
| (unsigned_int, "uS") =>
237+
| (Opt('-'), unsigned_int, "uS") =>
234238
positioned(UINT16(Sedlexing.Utf8.lexeme(lexbuf)))
235-
| (unsigned_int, "ul") =>
239+
| (Opt('-'), unsigned_int, "ul") =>
236240
positioned(UINT32(Sedlexing.Utf8.lexeme(lexbuf)))
237-
| (unsigned_int, "uL") =>
241+
| (Opt('-'), unsigned_int, "uL") =>
238242
positioned(UINT64(Sedlexing.Utf8.lexeme(lexbuf)))
239-
| (unsigned_int, 'n') =>
243+
| (Opt('-'), unsigned_int, 'n') =>
240244
positioned(WASMI32(Sedlexing.Utf8.lexeme(lexbuf)))
241-
| (unsigned_int, 'N') =>
245+
| (Opt('-'), unsigned_int, 'N') =>
242246
positioned(WASMI64(Sedlexing.Utf8.lexeme(lexbuf)))
243-
| (unsigned_float, 'w') =>
247+
| (Opt('-'), unsigned_float, 'w') =>
244248
positioned(WASMF32(Sedlexing.Utf8.lexeme(lexbuf)))
245-
| (unsigned_float, 'W') =>
249+
| (Opt('-'), unsigned_float, 'W') =>
246250
positioned(WASMF64(Sedlexing.Utf8.lexeme(lexbuf)))
247-
| (unsigned_int, 't') =>
251+
| (Opt('-'), unsigned_int, 't') =>
248252
positioned(BIGINT(Sedlexing.Utf8.lexeme(lexbuf)))
249-
| (unsigned_int, '/', Opt('-'), unsigned_int, 'r') =>
253+
| (Opt('-'), unsigned_int, '/', Opt('-'), unsigned_int, 'r') =>
250254
positioned(RATIONAL(Sedlexing.Utf8.lexeme(lexbuf)))
251-
| unsigned_int => positioned(NUMBER_INT(Sedlexing.Utf8.lexeme(lexbuf)))
255+
| (Opt('-'), unsigned_int) =>
256+
positioned(NUMBER_INT(Sedlexing.Utf8.lexeme(lexbuf)))
252257
| "primitive" => positioned(PRIMITIVE)
253258
| "foreign" => positioned(FOREIGN)
254259
| "wasm" => positioned(WASM)

compiler/src/parsing/parser.messages

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -800,28 +800,6 @@ program: MODULE UIDENT EOL AT LIDENT LPAREN STRING WHILE
800800

801801
Expected a comma followed by more attribute parameters or `)` to complete the attribute.
802802

803-
program: MODULE UIDENT EOL DASH WHILE
804-
##
805-
## Ends in an error in state: 50.
806-
##
807-
## const -> option(DASH) . NUMBER_INT [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
808-
## const -> option(DASH) . NUMBER_FLOAT [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
809-
## const -> option(DASH) . INT32 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
810-
## const -> option(DASH) . INT64 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
811-
## const -> option(DASH) . FLOAT32 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
812-
## const -> option(DASH) . FLOAT64 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
813-
## const -> option(DASH) . WASMI32 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
814-
## const -> option(DASH) . WASMI64 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
815-
## const -> option(DASH) . WASMF32 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
816-
## const -> option(DASH) . WASMF64 [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
817-
## const -> option(DASH) . BIGINT [ ARROW STAR SLASH SEMI RPAREN RCARET RBRACK RBRACE PIPE LPAREN LCARET LBRACK INFIX_90 INFIX_80 INFIX_70 INFIX_60 INFIX_50 INFIX_40 INFIX_30 INFIX_120 INFIX_110 INFIX_100 GETS EOL EOF ELSE DOT DASH COMMA COLON ]
818-
##
819-
## The known suffix of the stack is as follows:
820-
## option(DASH)
821-
##
822-
823-
Expected a number to follow the minus sign.
824-
825803
program: MODULE UIDENT EOL ENUM UIDENT LBRACE UIDENT COMMA EOL WHILE
826804
##
827805
## Ends in an error in state: 956.
@@ -4247,84 +4225,6 @@ program: MODULE UIDENT EOL LBRACKRCARET WASMI64 ARROW
42474225

42484226
Expected a comma followed by an expression or `]` to complete the array expression.
42494227

4250-
program: MODULE UIDENT EOL LET DASH WHILE
4251-
##
4252-
## Ends in an error in state: 370.
4253-
##
4254-
## const -> option(DASH) . NUMBER_INT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4255-
## const -> option(DASH) . NUMBER_FLOAT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4256-
## const -> option(DASH) . INT32 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4257-
## const -> option(DASH) . INT64 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4258-
## const -> option(DASH) . FLOAT32 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4259-
## const -> option(DASH) . FLOAT64 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4260-
## const -> option(DASH) . WASMI32 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4261-
## const -> option(DASH) . WASMI64 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4262-
## const -> option(DASH) . WASMF32 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4263-
## const -> option(DASH) . WASMF64 [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4264-
## const -> option(DASH) . BIGINT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4265-
## pattern -> option(DASH) . NUMBER_INT SLASH option(DASH) NUMBER_INT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4266-
##
4267-
## The known suffix of the stack is as follows:
4268-
## option(DASH)
4269-
##
4270-
program: MODULE UIDENT EOL LET NUMBER_INT SLASH DASH WHILE
4271-
##
4272-
## Ends in an error in state: 373.
4273-
##
4274-
## pattern -> option(DASH) NUMBER_INT SLASH option(DASH) . NUMBER_INT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4275-
##
4276-
## The known suffix of the stack is as follows:
4277-
## option(DASH) NUMBER_INT SLASH option(DASH)
4278-
##
4279-
program: MODULE UIDENT EOL LET DASH NUMBER_INT SLASH YIELD
4280-
##
4281-
## Ends in an error in state: 372.
4282-
##
4283-
## pattern -> DASH NUMBER_INT SLASH . option(DASH) NUMBER_INT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4284-
##
4285-
## The known suffix of the stack is as follows:
4286-
## DASH NUMBER_INT SLASH
4287-
##
4288-
program: MODULE UIDENT EOL LET DASH NUMBER_INT SLASH DASH YIELD
4289-
##
4290-
## Ends in an error in state: 373.
4291-
##
4292-
## pattern -> DASH NUMBER_INT SLASH option(DASH) . NUMBER_INT [ WHEN ARROW RPAREN RBRACK RBRACE PIPE EQUAL EOL COMMA COLON AS ]
4293-
##
4294-
## The known suffix of the stack is as follows:
4295-
## DASH NUMBER_INT SLASH option(DASH)
4296-
##
4297-
program: MODULE UIDENT EOL LET LPAREN DASH YIELD
4298-
##
4299-
## Ends in an error in state: 391.
4300-
##
4301-
## const -> DASH . NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ]
4302-
## const -> DASH . NUMBER_FLOAT [ RPAREN PIPE EOL COMMA COLON AS ]
4303-
## const -> DASH . INT8 [ RPAREN PIPE EOL COMMA COLON AS ]
4304-
## const -> DASH . INT16 [ RPAREN PIPE EOL COMMA COLON AS ]
4305-
## const -> DASH . INT32 [ RPAREN PIPE EOL COMMA COLON AS ]
4306-
## const -> DASH . INT64 [ RPAREN PIPE EOL COMMA COLON AS ]
4307-
## const -> DASH . UINT8 [ RPAREN PIPE EOL COMMA COLON AS ]
4308-
## const -> DASH . UINT16 [ RPAREN PIPE EOL COMMA COLON AS ]
4309-
## const -> DASH . UINT32 [ RPAREN PIPE EOL COMMA COLON AS ]
4310-
## const -> DASH . UINT64 [ RPAREN PIPE EOL COMMA COLON AS ]
4311-
## const -> DASH . FLOAT32 [ RPAREN PIPE EOL COMMA COLON AS ]
4312-
## const -> DASH . FLOAT64 [ RPAREN PIPE EOL COMMA COLON AS ]
4313-
## const -> DASH . WASMI32 [ RPAREN PIPE EOL COMMA COLON AS ]
4314-
## const -> DASH . WASMI64 [ RPAREN PIPE EOL COMMA COLON AS ]
4315-
## const -> DASH . WASMF32 [ RPAREN PIPE EOL COMMA COLON AS ]
4316-
## const -> DASH . WASMF64 [ RPAREN PIPE EOL COMMA COLON AS ]
4317-
## const -> DASH . BIGINT [ RPAREN PIPE EOL COMMA COLON AS ]
4318-
## const -> DASH . RATIONAL [ RPAREN PIPE EOL COMMA COLON AS ]
4319-
## pattern -> DASH . NUMBER_INT SLASH option(DASH) NUMBER_INT [ RPAREN PIPE EOL COMMA COLON AS ]
4320-
## special_op -> DASH . [ RPAREN EOL ]
4321-
##
4322-
## The known suffix of the stack is as follows:
4323-
## DASH
4324-
##
4325-
4326-
Expected a number.
4327-
43284228
program: MODULE UIDENT EOL LET LBRACE LIDENT COLON EOL WASMI64 WHILE
43294229
##
43304230
## Ends in an error in state: 413.
@@ -4912,19 +4812,6 @@ program: MODULE UIDENT EOL LET NUMBER_INT EQUAL UIDENT AND YIELD
49124812

49134813
Expected a binding, e.g. `foo = 5`.
49144814

4915-
program: MODULE UIDENT EOL LPAREN DASH WHILE
4916-
##
4917-
## Ends in an error in state: 376.
4918-
##
4919-
## option(DASH) -> DASH . [ WASMI64 WASMI32 WASMF64 WASMF32 NUMBER_INT NUMBER_FLOAT INT64 INT32 FLOAT64 FLOAT32 BIGINT ]
4920-
## special_op -> DASH . [ RPAREN EOL ]
4921-
##
4922-
## The known suffix of the stack is as follows:
4923-
## DASH
4924-
##
4925-
4926-
Expected a number to create a negative number or `)` to reference the minus function.
4927-
49284815
program: MODULE UIDENT EOL LPAREN PREFIX_150 WHEN
49294816
##
49304817
## Ends in an error in state: 158.

compiler/src/parsing/parser.mly

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -214,26 +214,6 @@ const:
214214
| WASMF64 { Constant.wasmf64 (mkstr $loc $1) }
215215
| BIGINT { Constant.bigint (mkstr $loc $1) }
216216
| RATIONAL { Constant.rational (mkstr $loc $1) }
217-
// The minus sign is not an optional non-terminal or inlined to allow propagation
218-
// of correct locations, as $sloc only applies to the current rule.
219-
| DASH NUMBER_INT { Constant.number (PConstNumberInt (mkstr $loc ("-" ^ $2))) }
220-
| DASH NUMBER_FLOAT { Constant.number (PConstNumberFloat (mkstr $loc ("-" ^ $2))) }
221-
| DASH INT8 { Constant.int8 (mkstr $loc ("-" ^ $2)) }
222-
| DASH INT16 { Constant.int16 (mkstr $loc ("-" ^ $2)) }
223-
| DASH INT32 { Constant.int32 (mkstr $loc ("-" ^ $2)) }
224-
| DASH INT64 { Constant.int64 (mkstr $loc ("-" ^ $2)) }
225-
| DASH UINT8 { Constant.uint8 (mkstr $loc ("-" ^ $2)) }
226-
| DASH UINT16 { Constant.uint16 (mkstr $loc ("-" ^ $2)) }
227-
| DASH UINT32 { Constant.uint32 (mkstr $loc ("-" ^ $2)) }
228-
| DASH UINT64 { Constant.uint64 (mkstr $loc ("-" ^ $2)) }
229-
| DASH FLOAT32 { Constant.float32 (mkstr $loc ("-" ^ $2)) }
230-
| DASH FLOAT64 { Constant.float64 (mkstr $loc ("-" ^ $2)) }
231-
| DASH WASMI32 { Constant.wasmi32 (mkstr $loc ("-" ^ $2)) }
232-
| DASH WASMI64 { Constant.wasmi64 (mkstr $loc ("-" ^ $2)) }
233-
| DASH WASMF32 { Constant.wasmf32 (mkstr $loc ("-" ^ $2)) }
234-
| DASH WASMF64 { Constant.wasmf64 (mkstr $loc ("-" ^ $2)) }
235-
| DASH BIGINT { Constant.bigint (mkstr $loc ("-" ^ $2)) }
236-
| DASH RATIONAL { Constant.rational (mkstr $loc ("-" ^ $2)) }
237217
| TRUE { Constant.bool true }
238218
| FALSE { Constant.bool false }
239219
| VOID { Constant.void }
@@ -271,8 +251,7 @@ pattern:
271251
| UNDERSCORE { Pattern.any ~loc:(to_loc $loc) () }
272252
| const { Pattern.constant ~loc:(to_loc $loc) $1 }
273253
// Allow rational numbers in patterns
274-
| NUMBER_INT SLASH DASH? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr $loc($1) $1) (to_loc($loc($2))) (if Option.is_some $3 then (mkstr (fst $loc($3), snd $loc($4)) ("-" ^ $4)) else mkstr $loc($4) $4)) }
275-
| DASH NUMBER_INT SLASH DASH? NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr (fst $loc($1), snd $loc($2)) ("-" ^ $2)) (to_loc($loc($3))) (if Option.is_some $4 then (mkstr (fst $loc($4), snd $loc($5)) ("-" ^ $5)) else mkstr $loc($5) $5)) }
254+
| NUMBER_INT SLASH NUMBER_INT { Pattern.constant ~loc:(to_loc $sloc) @@ Constant.number (Number.rational (mkstr $loc($1) $1) (to_loc($loc($2))) (mkstr $loc($3) $3)) }
276255
| LIDENT { Pattern.var ~loc:(to_loc $loc) (mkstr $loc $1) }
277256
| special_id { Pattern.var ~loc:(to_loc $loc) $1 }
278257
| primitive_ { Pattern.var ~loc:(to_loc $loc) (mkstr $loc $1) }
@@ -600,7 +579,7 @@ stmt_expr:
600579
| ASSERT expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) "assert"]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] }
601580
| FAIL expr { Expression.apply ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) (mkid_expr $loc($1) [mkstr $loc($1) "fail"]) [{paa_label=Unlabeled; paa_expr=$2; paa_loc=(to_loc $loc($2))}] }
602581
// allow DASH to cause a shift instead of the usual reduction of the left side for subtraction
603-
| RETURN ioption(expr) %prec _below_infix { Expression.return ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) $2 }
582+
| RETURN ioption(expr) { Expression.return ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) $2 }
604583
| CONTINUE { Expression.continue ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) () }
605584
| BREAK { Expression.break ~loc:(to_loc $loc) ~core_loc:(to_loc $loc) () }
606585
| use_stmt { $1 }

compiler/src/parsing/wrapped_lexer.re

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,28 @@ let ignore_fns = state => {
113113
};
114114
};
115115

116+
let is_wrappable_infix_op = token => {
117+
switch (token) {
118+
| INFIX_30(_)
119+
| INFIX_40(_)
120+
| INFIX_50(_)
121+
| INFIX_60(_)
122+
| INFIX_70(_)
123+
| INFIX_80(_)
124+
| INFIX_90(_)
125+
| INFIX_100(_)
126+
| INFIX_110(_)
127+
| INFIX_120(_)
128+
| STAR
129+
| SLASH
130+
| DASH
131+
| PIPE
132+
| LCARET
133+
| RCARET => true
134+
| _ => false
135+
};
136+
};
137+
116138
let rec check_lparen_fn = (state, closing, acc) => {
117139
let rparen =
118140
try(lex_balanced(~push=DiscoverFunctions, state, RPAREN, [])) {
@@ -398,6 +420,7 @@ let token = state => {
398420
| AND
399421
| ELSE
400422
| PIPE => next_triple^
423+
| x when is_wrappable_infix_op(x) => next_triple^
401424
| _ =>
402425
state.queued_tokens =
403426
List.tl(
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
basic functionality › binop2.6
2+
((mash_code
3+
((functions ())
4+
(imports
5+
(((mimp_id ((name -))) (mimp_mod pervasives.gr) (mimp_name -)
6+
(mimp_type
7+
(MFuncImport (Managed (Unmanaged WasmI32) (Unmanaged WasmI32))
8+
((Unmanaged WasmI32))))
9+
(mimp_kind MImportGrain) (mimp_setup MSetupNone) (mimp_used true))
10+
((mimp_id ((name -))) (mimp_mod pervasives.gr) (mimp_name -)
11+
(mimp_type (MGlobalImport Managed true)) (mimp_kind MImportGrain)
12+
(mimp_setup MCallGetter) (mimp_used true))))
13+
(exports ())
14+
(main_body
15+
(((instr_desc
16+
(MReturnCallKnown (func -_1113)
17+
(closure
18+
((immediate_desc
19+
(MIncRef
20+
((immediate_desc (MImmBinding (MGlobalBind -_1113 Managed)))
21+
(immediate_analyses ((last_usage Last))))))
22+
(immediate_analyses ((last_usage Unknown)))))
23+
(func_type ((Managed Managed) (Managed)))
24+
(args
25+
(((immediate_desc (MImmConst (MConstI32 2)))
26+
(immediate_analyses ((last_usage Unknown))))
27+
((immediate_desc (MImmConst (MConstI32 2)))
28+
(immediate_analyses ((last_usage Unknown)))))))))))
29+
(main_body_stack_size
30+
((stack_size_ptr 0) (stack_size_i32 0) (stack_size_i64 0)
31+
(stack_size_f32 0) (stack_size_f64 0)))
32+
(globals ()) (function_table_elements ())
33+
(global_function_table_offset ((name function_table_global)))
34+
(compilation_mode Normal) (type_metadata <opaque>)))
35+
(signature <opaque>))
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
basic functionality › binop2.5
2+
((mash_code
3+
((functions ())
4+
(imports
5+
(((mimp_id ((name -))) (mimp_mod pervasives.gr) (mimp_name -)
6+
(mimp_type
7+
(MFuncImport (Managed (Unmanaged WasmI32) (Unmanaged WasmI32))
8+
((Unmanaged WasmI32))))
9+
(mimp_kind MImportGrain) (mimp_setup MSetupNone) (mimp_used true))
10+
((mimp_id ((name -))) (mimp_mod pervasives.gr) (mimp_name -)
11+
(mimp_type (MGlobalImport Managed true)) (mimp_kind MImportGrain)
12+
(mimp_setup MCallGetter) (mimp_used true))))
13+
(exports ())
14+
(main_body
15+
(((instr_desc
16+
(MReturnCallKnown (func -_1113)
17+
(closure
18+
((immediate_desc
19+
(MIncRef
20+
((immediate_desc (MImmBinding (MGlobalBind -_1113 Managed)))
21+
(immediate_analyses ((last_usage Last))))))
22+
(immediate_analyses ((last_usage Unknown)))))
23+
(func_type ((Managed Managed) (Managed)))
24+
(args
25+
(((immediate_desc (MImmConst (MConstI32 2)))
26+
(immediate_analyses ((last_usage Unknown))))
27+
((immediate_desc (MImmConst (MConstI32 2)))
28+
(immediate_analyses ((last_usage Unknown)))))))))))
29+
(main_body_stack_size
30+
((stack_size_ptr 0) (stack_size_i32 0) (stack_size_i64 0)
31+
(stack_size_f32 0) (stack_size_f64 0)))
32+
(globals ()) (function_table_elements ())
33+
(global_function_table_offset ((name function_table_global)))
34+
(compilation_mode Normal) (type_metadata <opaque>)))
35+
(signature <opaque>))

0 commit comments

Comments
 (0)