Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(110)

Unified Diff: lib/src/codegen/ast_builder.dart

Issue 1879373004: Implement modular compilation (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/src/closure/closure_annotator.dart ('k') | lib/src/codegen/html_codegen.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/codegen/ast_builder.dart
diff --git a/lib/src/codegen/ast_builder.dart b/lib/src/codegen/ast_builder.dart
deleted file mode 100644
index f2d448e7a225ce783301d5470e76ebea4d78d6d0..0000000000000000000000000000000000000000
--- a/lib/src/codegen/ast_builder.dart
+++ /dev/null
@@ -1,599 +0,0 @@
-// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/ast/token.dart';
-import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:logging/logging.dart' as logger;
-
-final _log = new logger.Logger('dev_compiler.ast_builder');
-
-// Wrappers around constructors for the dart ast. The AstBuilder class
-// provides a higher-level interface, abstracting both from the lexical
-// details and some of helper classes. The RawAstBuilder class provides
-// a low-level wrapper class (below) abstracts from the lexical details
-// but otherwise faithfully mirrors the construction API.
-class AstBuilder {
- static SimpleIdentifier identifierFromString(String name) {
- return RawAstBuilder.identifierFromString(name);
- }
-
- static PrefixedIdentifier prefixedIdentifier(
- SimpleIdentifier pre, SimpleIdentifier id) {
- return RawAstBuilder.prefixedIdentifier(pre, id);
- }
-
- static TypeParameter typeParameter(SimpleIdentifier name,
- [TypeName bound = null]) {
- return RawAstBuilder.typeParameter(name, bound);
- }
-
- static TypeParameterList typeParameterList(List<TypeParameter> params) {
- return RawAstBuilder.typeParameterList(params);
- }
-
- static TypeArgumentList typeArgumentList(List<TypeName> args) {
- return RawAstBuilder.typeArgumentList(args);
- }
-
- static ArgumentList argumentList(List<Expression> args) {
- return RawAstBuilder.argumentList(args);
- }
-
- static TypeName typeName(Identifier id, List<TypeName> args) {
- TypeArgumentList argList = null;
- if (args != null && args.length > 0) argList = typeArgumentList(args);
- return RawAstBuilder.typeName(id, argList);
- }
-
- static FunctionTypeAlias functionTypeAlias(
- TypeName ret,
- SimpleIdentifier name,
- List<TypeParameter> tParams,
- List<FormalParameter> params) {
- TypeParameterList tps =
- (tParams.length == 0) ? null : typeParameterList(tParams);
- FormalParameterList fps = formalParameterList(params);
- return RawAstBuilder.functionTypeAlias(ret, name, tps, fps);
- }
-
- static BooleanLiteral booleanLiteral(bool b) {
- return RawAstBuilder.booleanLiteral(b);
- }
-
- static NullLiteral nullLiteral() {
- return RawAstBuilder.nullLiteral();
- }
-
- static IntegerLiteral integerLiteral(int i) {
- return RawAstBuilder.integerLiteral(i);
- }
-
- static StringLiteral stringLiteral(String s) {
- return RawAstBuilder.simpleStringLiteral(s);
- }
-
- static StringLiteral multiLineStringLiteral(String s) {
- return RawAstBuilder.tripleQuotedStringLiteral(s);
- }
-
- static AsExpression asExpression(Expression exp, TypeName type) {
- return RawAstBuilder.asExpression(exp, type);
- }
-
- static IsExpression isExpression(Expression exp, TypeName type) {
- return RawAstBuilder.isExpression(exp, type);
- }
-
- static ParenthesizedExpression parenthesizedExpression(Expression exp) {
- return RawAstBuilder.parenthesizedExpression(exp);
- }
-
- static Expression parenthesize(Expression exp) {
- if (exp is Identifier ||
- exp is ParenthesizedExpression ||
- exp is FunctionExpressionInvocation ||
- exp is MethodInvocation) return exp;
- return parenthesizedExpression(exp);
- }
-
- static PropertyAccess propertyAccess(
- Expression target, SimpleIdentifier name) {
- var p = new Token(TokenType.PERIOD, 0);
- return new PropertyAccess(target, p, name);
- }
-
- static MethodInvocation methodInvoke(
- Expression target, SimpleIdentifier name, NodeList<Expression> args) {
- var p = new Token(TokenType.PERIOD, 0);
- return new MethodInvocation(target, p, name, null, argumentList(args));
- }
-
- static TokenType getTokenType(String lexeme) {
- switch (lexeme) {
- case "&":
- return TokenType.AMPERSAND;
- case "&&":
- return TokenType.AMPERSAND_AMPERSAND;
- case "&=":
- return TokenType.AMPERSAND_EQ;
- case "@":
- return TokenType.AT;
- case "!":
- return TokenType.BANG;
- case "!=":
- return TokenType.BANG_EQ;
- case "|":
- return TokenType.BAR;
- case "||":
- return TokenType.BAR_BAR;
- case "|=":
- return TokenType.BAR_EQ;
- case ":":
- return TokenType.COLON;
- case ",":
- return TokenType.COMMA;
- case "^":
- return TokenType.CARET;
- case "^=":
- return TokenType.CARET_EQ;
- case "}":
- return TokenType.CLOSE_CURLY_BRACKET;
- case ")":
- return TokenType.CLOSE_PAREN;
- case "]":
- return TokenType.CLOSE_SQUARE_BRACKET;
- case "=":
- return TokenType.EQ;
- case "==":
- return TokenType.EQ_EQ;
- case "=>":
- return TokenType.FUNCTION;
- case ">":
- return TokenType.GT;
- case ">=":
- return TokenType.GT_EQ;
- case ">>":
- return TokenType.GT_GT;
- case ">>=":
- return TokenType.GT_GT_EQ;
- case "#":
- return TokenType.HASH;
- case "[]":
- return TokenType.INDEX;
- case "[]=":
- return TokenType.INDEX_EQ;
- case "is":
- return TokenType.IS;
- case "<":
- return TokenType.LT;
- case "<=":
- return TokenType.LT_EQ;
- case "<<":
- return TokenType.LT_LT;
- case "<<=":
- return TokenType.LT_LT_EQ;
- case "-":
- return TokenType.MINUS;
- case "-=":
- return TokenType.MINUS_EQ;
- case "--":
- return TokenType.MINUS_MINUS;
- case "{":
- return TokenType.OPEN_CURLY_BRACKET;
- case "(":
- return TokenType.OPEN_PAREN;
- case "[":
- return TokenType.OPEN_SQUARE_BRACKET;
- case "%":
- return TokenType.PERCENT;
- case "%=":
- return TokenType.PERCENT_EQ;
- case ".":
- return TokenType.PERIOD;
- case "..":
- return TokenType.PERIOD_PERIOD;
- case "+":
- return TokenType.PLUS;
- case "+=":
- return TokenType.PLUS_EQ;
- case "++":
- return TokenType.PLUS_PLUS;
- case "?":
- return TokenType.QUESTION;
- case ";":
- return TokenType.SEMICOLON;
- case "/":
- return TokenType.SLASH;
- case "/=":
- return TokenType.SLASH_EQ;
- case "*":
- return TokenType.STAR;
- case "*=":
- return TokenType.STAR_EQ;
- case "\${":
- return TokenType.STRING_INTERPOLATION_EXPRESSION;
- case "\$":
- return TokenType.STRING_INTERPOLATION_IDENTIFIER;
- case "~":
- return TokenType.TILDE;
- case "~/":
- return TokenType.TILDE_SLASH;
- case "~/=":
- return TokenType.TILDE_SLASH_EQ;
- case "`":
- return TokenType.BACKPING;
- case "\\":
- return TokenType.BACKSLASH;
- case "...":
- return TokenType.PERIOD_PERIOD_PERIOD;
- case "??":
- return TokenType.QUESTION_QUESTION;
- case "??=":
- return TokenType.QUESTION_QUESTION_EQ;
- default:
- return null;
- }
- }
-
- static Token _binaryOperation(String oper) {
- var type = getTokenType(oper);
- assert(type != null);
- return new Token(type, 0);
- }
-
- static BinaryExpression binaryExpression(
- Expression l, String oper, Expression r) {
- Token token = _binaryOperation(oper);
- return RawAstBuilder.binaryExpression(l, token, r);
- }
-
- static ConditionalExpression conditionalExpression(
- Expression cond, Expression tExp, Expression fExp) {
- return RawAstBuilder.conditionalExpression(cond, tExp, fExp);
- }
-
- static Expression application(Expression function, List<Expression> es) {
- ArgumentList args = argumentList(es);
- return RawAstBuilder.functionExpressionInvocation(function, args);
- }
-
- static FormalParameterList formalParameterList(List<FormalParameter> params) {
- return RawAstBuilder.formalParameterList(params);
- }
-
- static Block block(List<Statement> statements) {
- return RawAstBuilder.block(statements);
- }
-
- static MethodDeclaration blockMethodDeclaration(
- TypeName rt,
- SimpleIdentifier m,
- List<FormalParameter> params,
- List<Statement> statements,
- {bool isStatic: false}) {
- FormalParameterList fl = formalParameterList(params);
- Block b = block(statements);
- BlockFunctionBody body = RawAstBuilder.blockFunctionBody(b);
- return RawAstBuilder.methodDeclaration(rt, m, fl, body, isStatic: isStatic);
- }
-
- static FunctionDeclaration blockFunctionDeclaration(
- TypeName rt,
- SimpleIdentifier f,
- List<FormalParameter> params,
- List<Statement> statements) {
- FunctionExpression fexp = blockFunction(params, statements);
- return RawAstBuilder.functionDeclaration(rt, f, fexp);
- }
-
- static FunctionExpression blockFunction(
- List<FormalParameter> params, List<Statement> statements) {
- FormalParameterList fl = formalParameterList(params);
- Block b = block(statements);
- BlockFunctionBody body = RawAstBuilder.blockFunctionBody(b);
- return RawAstBuilder.functionExpression(fl, body);
- }
-
- static FunctionExpression expressionFunction(
- List<FormalParameter> params, Expression body,
- [bool decl = false]) {
- FormalParameterList fl = formalParameterList(params);
- ExpressionFunctionBody b = RawAstBuilder.expressionFunctionBody(body, decl);
- return RawAstBuilder.functionExpression(fl, b);
- }
-
- static FunctionDeclarationStatement functionDeclarationStatement(
- TypeName rType, SimpleIdentifier name, FunctionExpression fe) {
- var fd = RawAstBuilder.functionDeclaration(rType, name, fe);
- return RawAstBuilder.functionDeclarationStatement(fd);
- }
-
- static Statement returnExpression([Expression e]) {
- return RawAstBuilder.returnExpression(e);
- }
-
- // let b = e1 in e2 == (\b.e2)(e1)
- static Expression letExpression(
- FormalParameter b, Expression e1, Expression e2) {
- FunctionExpression l = expressionFunction(<FormalParameter>[b], e2);
- return application(parenthesize(l), <Expression>[e1]);
- }
-
- static SimpleFormalParameter simpleFormal(SimpleIdentifier v, TypeName t) {
- return RawAstBuilder.simpleFormalParameter(v, t);
- }
-
- static FunctionTypedFormalParameter functionTypedFormal(
- TypeName ret, SimpleIdentifier v, List<FormalParameter> params) {
- FormalParameterList ps = formalParameterList(params);
- return RawAstBuilder.functionTypedFormalParameter(ret, v, ps);
- }
-
- static FormalParameter requiredFormal(NormalFormalParameter fp) {
- return RawAstBuilder.requiredFormalParameter(fp);
- }
-
- static FormalParameter optionalFormal(NormalFormalParameter fp) {
- return RawAstBuilder.optionalFormalParameter(fp);
- }
-
- static FormalParameter namedFormal(NormalFormalParameter fp) {
- return RawAstBuilder.namedFormalParameter(fp);
- }
-
- static NamedExpression namedParameter(String s, Expression e) {
- return namedExpression(s, e);
- }
-
- static NamedExpression namedExpression(String s, Expression e) {
- return RawAstBuilder.namedExpression(identifierFromString(s), e);
- }
-
- /// Declares a single variable `var <name> = <init>` with the type and name
- /// specified by the VariableElement. See also [variableStatement].
- static VariableDeclarationList declareVariable(SimpleIdentifier name,
- [Expression init]) {
- var eqToken = init != null ? new Token(TokenType.EQ, 0) : null;
- var varToken = new KeywordToken(Keyword.VAR, 0);
- return new VariableDeclarationList(null, null, varToken, null,
- [new VariableDeclaration(name, eqToken, init)]);
- }
-
- static VariableDeclarationStatement variableStatement(SimpleIdentifier name,
- [Expression init]) {
- return RawAstBuilder
- .variableDeclarationStatement(declareVariable(name, init));
- }
-
- static InstanceCreationExpression instanceCreation(
- ConstructorName ctor, List<Expression> args) {
- var newToken = new KeywordToken(Keyword.NEW, 0);
- return new InstanceCreationExpression(
- newToken, ctor, RawAstBuilder.argumentList(args));
- }
-}
-
-// This class provides a low-level wrapper around the constructors for
-// the AST. It mostly simply abstracts from the lexical tokens.
-class RawAstBuilder {
- static ConstructorName constructorName(TypeName type,
- [SimpleIdentifier name]) {
- Token period = name != null ? new Token(TokenType.PERIOD, 0) : null;
- return new ConstructorName(type, period, name);
- }
-
- static SimpleIdentifier identifierFromString(String name) {
- StringToken token = new SyntheticStringToken(TokenType.IDENTIFIER, name, 0);
- return new SimpleIdentifier(token);
- }
-
- static PrefixedIdentifier prefixedIdentifier(
- SimpleIdentifier pre, SimpleIdentifier id) {
- Token period = new Token(TokenType.PERIOD, 0);
- return new PrefixedIdentifier(pre, period, id);
- }
-
- static TypeParameter typeParameter(SimpleIdentifier name,
- [TypeName bound = null]) {
- Token keyword =
- (bound == null) ? null : new KeywordToken(Keyword.EXTENDS, 0);
- return new TypeParameter(null, null, name, keyword, bound);
- }
-
- static TypeParameterList typeParameterList(List<TypeParameter> params) {
- Token lb = new Token(TokenType.LT, 0);
- Token rb = new Token(TokenType.GT, 0);
- return new TypeParameterList(lb, params, rb);
- }
-
- static TypeArgumentList typeArgumentList(List<TypeName> args) {
- Token lb = new Token(TokenType.LT, 0);
- Token rb = new Token(TokenType.GT, 0);
- return new TypeArgumentList(lb, args, rb);
- }
-
- static ArgumentList argumentList(List<Expression> args) {
- Token lp = new BeginToken(TokenType.OPEN_PAREN, 0);
- Token rp = new Token(TokenType.CLOSE_PAREN, 0);
- return new ArgumentList(lp, args, rp);
- }
-
- static TypeName typeName(Identifier id, TypeArgumentList l) {
- return new TypeName(id, l);
- }
-
- static FunctionTypeAlias functionTypeAlias(TypeName ret,
- SimpleIdentifier name, TypeParameterList tps, FormalParameterList fps) {
- Token semi = new Token(TokenType.SEMICOLON, 0);
- Token td = new KeywordToken(Keyword.TYPEDEF, 0);
- return new FunctionTypeAlias(null, null, td, ret, name, tps, fps, semi);
- }
-
- static BooleanLiteral booleanLiteral(bool b) {
- var k = new KeywordToken(b ? Keyword.TRUE : Keyword.FALSE, 0);
- return new BooleanLiteral(k, b);
- }
-
- static NullLiteral nullLiteral() {
- var n = new KeywordToken(Keyword.NULL, 0);
- return new NullLiteral(n);
- }
-
- static IntegerLiteral integerLiteral(int i) {
- StringToken token = new StringToken(TokenType.INT, '$i', 0);
- return new IntegerLiteral(token, i);
- }
-
- static SimpleStringLiteral simpleStringLiteral(String s) {
- StringToken token = new StringToken(TokenType.STRING, "\"" + s + "\"", 0);
- return new SimpleStringLiteral(token, s);
- }
-
- static SimpleStringLiteral tripleQuotedStringLiteral(String s) {
- StringToken token = new StringToken(TokenType.STRING, '"""' + s + '"""', 0);
- return new SimpleStringLiteral(token, s);
- }
-
- static AsExpression asExpression(Expression exp, TypeName type) {
- Token token = new KeywordToken(Keyword.AS, 0);
- return new AsExpression(exp, token, type);
- }
-
- static IsExpression isExpression(Expression exp, TypeName type) {
- Token token = new KeywordToken(Keyword.IS, 0);
- return new IsExpression(exp, token, null, type);
- }
-
- static ParenthesizedExpression parenthesizedExpression(Expression exp) {
- Token lp = new BeginToken(TokenType.OPEN_PAREN, exp.offset);
- Token rp = new Token(TokenType.CLOSE_PAREN, exp.end);
- return new ParenthesizedExpression(lp, exp, rp);
- }
-
- static BinaryExpression binaryExpression(
- Expression l, Token op, Expression r) {
- return new BinaryExpression(l, op, r);
- }
-
- static ConditionalExpression conditionalExpression(
- Expression cond, Expression tExp, Expression fExp) {
- var q = new Token(TokenType.QUESTION, 0);
- var c = new Token(TokenType.COLON, 0);
- return new ConditionalExpression(cond, q, tExp, c, fExp);
- }
-
- static Expression functionExpressionInvocation(
- Expression function, ArgumentList es) {
- return new FunctionExpressionInvocation(function, null, es);
- }
-
- static FormalParameterList formalParameterList(List<FormalParameter> params) {
- Token lp = new BeginToken(TokenType.OPEN_PAREN, 0);
- Token rp = new Token(TokenType.CLOSE_PAREN, 0);
- bool hasOptional = params.any((p) => p.kind == ParameterKind.POSITIONAL);
- bool hasNamed = params.any((p) => p.kind == ParameterKind.NAMED);
- assert(!(hasOptional && hasNamed));
- Token ld = null;
- Token rd = null;
- if (hasOptional) {
- ld = new BeginToken(TokenType.OPEN_SQUARE_BRACKET, 0);
- rd = new Token(TokenType.CLOSE_SQUARE_BRACKET, 0);
- }
- if (hasNamed) {
- ld = new BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
- rd = new Token(TokenType.CLOSE_CURLY_BRACKET, 0);
- }
- return new FormalParameterList(lp, params, ld, rd, rp);
- }
-
- static Block block(List<Statement> statements) {
- Token ld = new BeginToken(TokenType.OPEN_CURLY_BRACKET, 0);
- Token rd = new Token(TokenType.CLOSE_CURLY_BRACKET, 0);
- return new Block(ld, statements, rd);
- }
-
- static BlockFunctionBody blockFunctionBody(Block b) {
- return new BlockFunctionBody(null, null, b);
- }
-
- static ExpressionFunctionBody expressionFunctionBody(Expression body,
- [bool decl = false]) {
- Token semi = (decl) ? new Token(TokenType.SEMICOLON, 0) : null;
- return new ExpressionFunctionBody(null, null, body, semi);
- }
-
- static ExpressionStatement expressionStatement(Expression expression) {
- Token semi = new Token(TokenType.SEMICOLON, 0);
- return new ExpressionStatement(expression, semi);
- }
-
- static FunctionDeclaration functionDeclaration(
- TypeName rt, SimpleIdentifier f, FunctionExpression fexp) {
- return new FunctionDeclaration(null, null, null, rt, null, f, fexp);
- }
-
- static MethodDeclaration methodDeclaration(TypeName rt, SimpleIdentifier m,
- FormalParameterList fl, FunctionBody body,
- {bool isStatic: false}) {
- Token st = isStatic ? new KeywordToken(Keyword.STATIC, 0) : null;
- return new MethodDeclaration(
- null, null, null, st, rt, null, null, m, null, fl, body);
- }
-
- static FunctionExpression functionExpression(
- FormalParameterList fl, FunctionBody body) {
- return new FunctionExpression(null, fl, body);
- }
-
- static FunctionDeclarationStatement functionDeclarationStatement(
- FunctionDeclaration fd) {
- return new FunctionDeclarationStatement(fd);
- }
-
- static Statement returnExpression([Expression e]) {
- Token ret = new KeywordToken(Keyword.RETURN, 0);
- Token semi = new Token(TokenType.SEMICOLON, 0);
- return new ReturnStatement(ret, e, semi);
- }
-
- static SimpleFormalParameter simpleFormalParameter(
- SimpleIdentifier v, TypeName t) {
- return new SimpleFormalParameter(null, <Annotation>[], null, t, v);
- }
-
- static FunctionTypedFormalParameter functionTypedFormalParameter(
- TypeName ret, SimpleIdentifier v, FormalParameterList ps) {
- return new FunctionTypedFormalParameter(
- null, <Annotation>[], ret, v, null, ps);
- }
-
- static FormalParameter requiredFormalParameter(NormalFormalParameter fp) {
- return fp;
- }
-
- static FormalParameter optionalFormalParameter(NormalFormalParameter fp) {
- return new DefaultFormalParameter(fp, ParameterKind.POSITIONAL, null, null);
- }
-
- static FormalParameter namedFormalParameter(NormalFormalParameter fp) {
- return new DefaultFormalParameter(fp, ParameterKind.NAMED, null, null);
- }
-
- static NamedExpression namedParameter(SimpleIdentifier s, Expression e) {
- return namedExpression(s, e);
- }
-
- static NamedExpression namedExpression(SimpleIdentifier s, Expression e) {
- Label l = new Label(s, new Token(TokenType.COLON, 0));
- return new NamedExpression(l, e);
- }
-
- static VariableDeclarationStatement variableDeclarationStatement(
- VariableDeclarationList varDecl) {
- var semi = new Token(TokenType.SEMICOLON, 0);
- return new VariableDeclarationStatement(varDecl, semi);
- }
-}
« no previous file with comments | « lib/src/closure/closure_annotator.dart ('k') | lib/src/codegen/html_codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698