diff options
Diffstat (limited to 'src/js_lexer.zig')
-rw-r--r-- | src/js_lexer.zig | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index 5aeecba9e..56b824ffa 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -263,17 +263,17 @@ pub const Lexer = struct { pub fn expect(self: *Lexer, token: T) void { if (self.token != token) { - lexer.expected(token); + self.expected(token); } - lexer.next(); + self.next(); } pub fn expectOrInsertSemicolon(lexer: *Lexer) void { - if (lexer.token == T.semicolon || (!lexer.has_newline_before and - lexer.token != T.close_brace and lexer.token != T.t_end_of_file)) + if (lexer.token == T.t_semicolon or (!lexer.has_newline_before and + lexer.token != T.t_close_brace and lexer.token != T.t_end_of_file)) { - lexer.expect(T.semicolon); + lexer.expect(T.t_semicolon); } } @@ -299,6 +299,13 @@ pub const Lexer = struct { } } + pub fn expectContextualKeyword(self: *Lexer, keyword: string) void { + if (!self.isContextualKeyword(keyword)) { + self.addError(self.start, "\"{s}\"", .{keyword}, true); + } + self.next(); + } + pub fn next(lexer: *Lexer) void { lexer.has_newline_before = lexer.end == 0; @@ -1168,6 +1175,28 @@ fn isWhitespace(codepoint: CodePoint) bool { } } +// TODO: implement this to actually work right +// this fn is a stub! +pub fn rangeOfIdentifier(source: *Source, loc: logger.Loc) logger.Range { + var r = logger.Range{ .loc = loc, .len = 0 }; + var i: usize = 0; + for (source.contents[loc..]) |c| { + if (isIdentifierStart(@as(c, CodePoint))) { + for (source.contents[loc + i ..]) |c_| { + if (!isIdentifierContinue(c_)) { + r.len = i; + return r; + } + i += 1; + } + } + + i += 1; + } + + return r; +} + fn float64(num: anytype) callconv(.Inline) f64 { return @intToFloat(f64, num); } |