@@ -553,6 +553,27 @@ unparen_expr :: proc(expr: ^Expr) -> (val: ^Expr) {
return
}
+strip_or_return_expr :: proc(expr: ^Expr) -> (val: ^Expr) {
+ val = expr
+ if expr == nil {
+ return
+ }
+ for {
+ inner: ^Expr
+ #partial switch e in val.derived {
+ case ^Or_Return_Expr:
+ inner = e.expr
+ case ^Paren_Expr:
+ if inner == nil {
+ break
+ val = inner
+}
+
Field_Flags :: distinct bit_set[Field_Flag]
Field_Flag :: enum {
@@ -2153,7 +2153,7 @@ parse_inlining_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^
- #partial switch e in ast.unparen_expr(expr).derived_expr {
+ #partial switch e in ast.strip_or_return_expr(expr).derived_expr {
case ^ast.Proc_Lit:
if e.inlining != .None && e.inlining != pi {
error(p, expr.pos, "both 'inline' and 'no_inline' cannot be applied to a procedure literal")