aboutsummaryrefslogtreecommitdiff
path: root/src/js_lexer.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/js_lexer.zig')
-rw-r--r--src/js_lexer.zig39
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);
}