Skip to content

Commit

Permalink
feat(parser): implements ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
KFlash committed May 30, 2019
1 parent cb09a9c commit 73ede30
Show file tree
Hide file tree
Showing 41 changed files with 21,645 additions and 6,510 deletions.
17 changes: 17 additions & 0 deletions src/common.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Token, KeywordDescTable } from './token';
import { Errors, report } from './errors';
import { Node } from './estree';
import { nextToken } from './lexer/scan';

/**
Expand Down Expand Up @@ -121,6 +122,7 @@ export interface ParserState {
line: number;
column: number;
startIndex: number;
lastIndex: number;
length: number;
token: Token;
tokenValue: any;
Expand Down Expand Up @@ -358,3 +360,18 @@ export function validateAndDeclareLabel(parser: ParserState, labels: any, name:

labels['€' + name] = 1;
}


export function finishNode<T extends Node>(
parser: ParserState,
context: Context,
start: number,
node: T,
): T {
if (context & Context.OptionsRanges) {
node.start = start;
node.end = parser.lastIndex;
}

return node;
}
7 changes: 4 additions & 3 deletions src/lexer/scan.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,10 @@ export const OneCharToken = [
/* 127 - Delete */ Token.Illegal
];

export function nextToken(state: ParserState, context: Context): void {
state.flags &= ~Flags.NewLine;
state.token = scanSingleToken(state, context);
export function nextToken(parser: ParserState, context: Context): void {
parser.flags &= ~Flags.NewLine;
parser.lastIndex = parser.index;
parser.token = scanSingleToken(parser, context);
}

export function scanSingleToken(parser: ParserState, context: Context): Token {
Expand Down
1 change: 1 addition & 0 deletions src/lexer/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,5 +103,6 @@ function scanBadTemplate(parser: ParserState, ch: number): number {
export function scanTemplateTail(state: ParserState, context: Context): Token {
if (state.index >= state.length) return Token.Illegal;
state.index--;
state.column--;
return scanTemplate(state, context);
}

0 comments on commit 73ede30

Please sign in to comment.