| OLD | NEW | 
|---|
| 1 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 import 'package:kernel/ast.dart' show DartType, TreeNode; | 5 import 'package:kernel/ast.dart'; | 
| 6 |  | 
| 7 import 'shadow_ast.dart'; |  | 
| 8 | 6 | 
| 9 /// An abstract class containing factory methods that create AST objects. | 7 /// An abstract class containing factory methods that create AST objects. | 
| 10 /// | 8 /// | 
| 11 /// Itended for use by [BodyBuilder] so that it can create either analyzer or | 9 /// Itended for use by [BodyBuilder] so that it can create either analyzer or | 
| 12 /// kernel ASTs depending on which concrete factory it is connected to. | 10 /// kernel ASTs depending on which concrete factory it is connected to. | 
| 13 /// | 11 /// | 
| 14 /// This class is defined in terms of the builder's shadow AST mixins (which are | 12 /// This class is defined in terms of the builder's shadow AST mixins (which are | 
| 15 /// shared between kernel and analyzer shadow AST representations). | 13 /// shared between kernel and analyzer shadow AST representations). | 
| 16 /// | 14 /// | 
| 17 /// Note that the analyzer AST representation closely parallels Dart syntax, | 15 /// Note that the analyzer AST representation closely parallels Dart syntax, | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 29 /// for many AST constructs, not just one.  Note also that for kernel codegen | 27 /// for many AST constructs, not just one.  Note also that for kernel codegen | 
| 30 /// we want to be very careful not to keep tokens around too long, so consider | 28 /// we want to be very careful not to keep tokens around too long, so consider | 
| 31 /// having a `toLocation` method on AstFactory that changes tokens to an | 29 /// having a `toLocation` method on AstFactory that changes tokens to an | 
| 32 /// abstract type (`int` for kernel, `Token` for analyzer). | 30 /// abstract type (`int` for kernel, `Token` for analyzer). | 
| 33 /// | 31 /// | 
| 34 /// TODO(paulberry): in order to interface with analyzer, we'll need to | 32 /// TODO(paulberry): in order to interface with analyzer, we'll need to | 
| 35 /// shadow-ify [DartType], since analyzer ASTs need to be able to record the | 33 /// shadow-ify [DartType], since analyzer ASTs need to be able to record the | 
| 36 /// exact tokens that were used to specify a type. | 34 /// exact tokens that were used to specify a type. | 
| 37 abstract class AstFactory { | 35 abstract class AstFactory { | 
| 38   /// Creates a statement block. | 36   /// Creates a statement block. | 
| 39   ShadowBlock block(List<ShadowStatement> statements, int charOffset); | 37   Block block(List<Statement> statements, int charOffset); | 
| 40 | 38 | 
| 41   /// Creates an integer literal. | 39   /// Creates an integer literal. | 
| 42   ShadowIntLiteral intLiteral(value, int charOffset); | 40   IntLiteral intLiteral(value, int charOffset); | 
| 43 | 41 | 
| 44   /// Creates a list literal expression. | 42   /// Creates a list literal expression. | 
| 45   /// | 43   /// | 
| 46   /// If the list literal did not have an explicitly declared type argument, | 44   /// If the list literal did not have an explicitly declared type argument, | 
| 47   /// [typeArgument] should be `null`. | 45   /// [typeArgument] should be `null`. | 
| 48   ShadowListLiteral listLiteral(List<ShadowExpression> expressions, | 46   ListLiteral listLiteral(List<Expression> expressions, DartType typeArgument, | 
| 49       DartType typeArgument, bool isConst, int charOffset); | 47       bool isConst, int charOffset); | 
| 50 | 48 | 
| 51   /// Creates a null literal expression. | 49   /// Creates a null literal expression. | 
| 52   ShadowNullLiteral nullLiteral(int charOffset); | 50   NullLiteral nullLiteral(int charOffset); | 
| 53 | 51 | 
| 54   /// Creates a return statement. | 52   /// Creates a return statement. | 
| 55   ShadowStatement returnStatement(ShadowExpression expression, int charOffset); | 53   Statement returnStatement(Expression expression, int charOffset); | 
| 56 | 54 | 
| 57   /// Creates a variable declaration statement declaring one variable. | 55   /// Creates a variable declaration statement declaring one variable. | 
| 58   /// | 56   /// | 
| 59   /// TODO(paulberry): analyzer makes a distinction between a single variable | 57   /// TODO(paulberry): analyzer makes a distinction between a single variable | 
| 60   /// declaration and a variable declaration statement (which can contain | 58   /// declaration and a variable declaration statement (which can contain | 
| 61   /// multiple variable declarations).  Currently this API only makes sense for | 59   /// multiple variable declarations).  Currently this API only makes sense for | 
| 62   /// kernel, which desugars each variable declaration to its own statement. | 60   /// kernel, which desugars each variable declaration to its own statement. | 
| 63   /// | 61   /// | 
| 64   /// If the variable declaration did not have an explicitly declared type, | 62   /// If the variable declaration did not have an explicitly declared type, | 
| 65   /// [type] should be `null`. | 63   /// [type] should be `null`. | 
| 66   ShadowVariableDeclaration variableDeclaration(String name, | 64   VariableDeclaration variableDeclaration(String name, | 
| 67       {DartType type, | 65       {DartType type, | 
| 68       ShadowExpression initializer, | 66       Expression initializer, | 
| 69       int charOffset: TreeNode.noOffset, | 67       int charOffset: TreeNode.noOffset, | 
| 70       bool isFinal: false, | 68       bool isFinal: false, | 
| 71       bool isConst: false}); | 69       bool isConst: false}); | 
| 72 } | 70 } | 
| OLD | NEW | 
|---|