Add support for an InterpreterDirective AST node.

This commit is contained in:
Logan Smyth
2018-05-12 10:50:33 -07:00
parent c0013264b7
commit 2058e0686e
2113 changed files with 2281 additions and 162 deletions

View File

@@ -23,6 +23,8 @@ export default class StatementParser extends ExpressionParser {
parseTopLevel(file: N.File, program: N.Program): N.File {
program.sourceType = this.options.sourceType;
program.interpreter = this.parseInterpreterDirective();
this.parseBlockBody(program, true, true, tt.eof);
file.program = this.finishNode(program, "Program");
@@ -57,6 +59,17 @@ export default class StatementParser extends ExpressionParser {
return this.finishNodeAt(directive, "Directive", stmt.end, stmt.loc.end);
}
parseInterpreterDirective(): N.InterpreterDirective | null {
if (!this.match(tt.interpreterDirective)) {
return null;
}
const node = this.startNode();
node.value = this.state.value;
this.next();
return this.finishNode(node, "InterpreterDirective");
}
// Parse a single statement.
//
// If expecting a statement and finding a slash operator, parse a