diff options
author | 2021-05-27 14:56:53 -0700 | |
---|---|---|
committer | 2021-05-27 14:56:53 -0700 | |
commit | ebefe97073ad878550eec42a37b3bbb1dc5deaa5 (patch) | |
tree | 22baf1843ab9c049b723053cfd04f02a49dd1c31 | |
parent | 84ea80b813c8b3dffe7ccc112b10fb034f21ea30 (diff) | |
download | bun-ebefe97073ad878550eec42a37b3bbb1dc5deaa5.tar.gz bun-ebefe97073ad878550eec42a37b3bbb1dc5deaa5.tar.zst bun-ebefe97073ad878550eec42a37b3bbb1dc5deaa5.zip |
Fix yield*
-rw-r--r-- | src/js_parser/js_parser.zig | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index f1855c1a7..109cbdf3d 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -6690,7 +6690,7 @@ pub const P = struct { } } - pub fn parseYieldExpr(p: *P, loc: logger.Loc) Expr { + pub fn parseYieldExpr(p: *P, loc: logger.Loc) !ExprNodeIndex { // Parse a yield-from expression, which yields from an iterator const isStar = p.lexer.token == T.t_asterisk; @@ -8211,21 +8211,15 @@ pub const P = struct { if (AsyncPrefixExpression.find(raw) != .is_yield) { p.log.addRangeError(p.source, name_range, "The keyword \"yield\" cannot be escaped") catch unreachable; } else { - if (level.gte(.assign)) { + if (level.gt(.assign)) { p.log.addRangeError(p.source, name_range, "Cannot use a \"yield\" here without parentheses") catch unreachable; } - const value = try p.parseExpr(.prefix); if (p.fn_or_arrow_data_parse.track_arrow_arg_errors) { p.fn_or_arrow_data_parse.arrow_arg_errors.invalid_expr_yield = name_range; } - if (p.lexer.token == T.t_asterisk_asterisk) { - try p.lexer.unexpected(); - return error.SyntaxError; - } - - return p.e(E.Yield{ .value = value }, loc); + return p.parseYieldExpr(loc); } }, // .allow_ident => { |