| 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:front_end/src/fasta/kernel/utils.dart'; |
| 6 import 'package:front_end/src/fasta/scanner/token.dart' show Token; |
| 5 import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; | 7 import 'package:front_end/src/fasta/type_inference/type_promotion.dart'; |
| 6 import 'package:kernel/ast.dart'; | 8 import 'package:kernel/ast.dart'; |
| 7 | 9 |
| 8 import '../builder/ast_factory.dart'; | 10 import '../builder/ast_factory.dart'; |
| 9 import 'kernel_shadow_ast.dart'; | 11 import 'kernel_shadow_ast.dart'; |
| 10 | 12 |
| 11 /// Concrete implementation of [builder.AstFactory] for building a kernel AST. | 13 /// Concrete implementation of [builder.AstFactory] for building a kernel AST. |
| 12 class KernelAstFactory implements AstFactory<VariableDeclaration> { | 14 class KernelAstFactory implements AstFactory<VariableDeclaration> { |
| 13 @override | 15 @override |
| 14 KernelBlock block(List<Statement> statements, int charOffset) { | 16 KernelBlock block(List<Statement> statements, Token beginToken) { |
| 15 return new KernelBlock(statements)..fileOffset = charOffset; | 17 return new KernelBlock(statements)..fileOffset = offsetForToken(beginToken); |
| 16 } | 18 } |
| 17 | 19 |
| 18 @override | 20 @override |
| 19 ExpressionStatement expressionStatement(Expression expression) { | 21 ExpressionStatement expressionStatement(Expression expression) { |
| 20 return new KernelExpressionStatement(expression); | 22 return new KernelExpressionStatement(expression); |
| 21 } | 23 } |
| 22 | 24 |
| 23 @override | 25 @override |
| 24 Field field(Name name, int charOffset, {String fileUri}) { | 26 Field field(Name name, int charOffset, {String fileUri}) { |
| 25 return new KernelField(name, fileUri: fileUri)..fileOffset = charOffset; | 27 return new KernelField(name, fileUri: fileUri)..fileOffset = charOffset; |
| 26 } | 28 } |
| 27 | 29 |
| 28 @override | 30 @override |
| 29 FunctionExpression functionExpression(FunctionNode function, int charOffset) { | 31 FunctionExpression functionExpression(FunctionNode function, Token token) { |
| 30 return new KernelFunctionExpression(function)..fileOffset = charOffset; | 32 return new KernelFunctionExpression(function) |
| 33 ..fileOffset = offsetForToken(token); |
| 31 } | 34 } |
| 32 | 35 |
| 33 @override | 36 @override |
| 34 Statement ifStatement( | 37 Statement ifStatement( |
| 35 Expression condition, Statement thenPart, Statement elsePart) { | 38 Expression condition, Statement thenPart, Statement elsePart) { |
| 36 return new KernelIfStatement(condition, thenPart, elsePart); | 39 return new KernelIfStatement(condition, thenPart, elsePart); |
| 37 } | 40 } |
| 38 | 41 |
| 39 @override | 42 @override |
| 40 KernelIntLiteral intLiteral(value, int charOffset) { | 43 KernelIntLiteral intLiteral(value, Token token) { |
| 41 return new KernelIntLiteral(value)..fileOffset = charOffset; | 44 return new KernelIntLiteral(value)..fileOffset = offsetForToken(token); |
| 42 } | 45 } |
| 43 | 46 |
| 44 @override | 47 @override |
| 45 Expression isExpression( | 48 Expression isExpression( |
| 46 Expression expression, DartType type, int charOffset, bool isInverted) { | 49 Expression expression, DartType type, Token token, bool isInverted) { |
| 47 if (isInverted) { | 50 if (isInverted) { |
| 48 return new KernelIsNotExpression(expression, type, charOffset); | 51 return new KernelIsNotExpression(expression, type, offsetForToken(token)); |
| 49 } else { | 52 } else { |
| 50 return new KernelIsExpression(expression, type)..fileOffset = charOffset; | 53 return new KernelIsExpression(expression, type) |
| 54 ..fileOffset = offsetForToken(token); |
| 51 } | 55 } |
| 52 } | 56 } |
| 53 | 57 |
| 54 @override | 58 @override |
| 55 KernelListLiteral listLiteral(List<Expression> expressions, | 59 KernelListLiteral listLiteral(List<Expression> expressions, |
| 56 DartType typeArgument, bool isConst, int charOffset) { | 60 DartType typeArgument, bool isConst, Token token) { |
| 57 return new KernelListLiteral(expressions, | 61 return new KernelListLiteral(expressions, |
| 58 typeArgument: typeArgument, isConst: isConst) | 62 typeArgument: typeArgument, isConst: isConst) |
| 59 ..fileOffset = charOffset; | 63 ..fileOffset = offsetForToken(token); |
| 60 } | 64 } |
| 61 | 65 |
| 62 @override | 66 @override |
| 63 KernelNullLiteral nullLiteral(int charOffset) { | 67 KernelNullLiteral nullLiteral(Token token) { |
| 64 return new KernelNullLiteral()..fileOffset = charOffset; | 68 return new KernelNullLiteral()..fileOffset = offsetForToken(token); |
| 65 } | 69 } |
| 66 | 70 |
| 67 @override | 71 @override |
| 68 KernelReturnStatement returnStatement(Expression expression, int charOffset) { | 72 KernelReturnStatement returnStatement(Expression expression, Token token) { |
| 69 return new KernelReturnStatement(expression)..fileOffset = charOffset; | 73 return new KernelReturnStatement(expression) |
| 74 ..fileOffset = offsetForToken(token); |
| 70 } | 75 } |
| 71 | 76 |
| 72 @override | 77 @override |
| 73 StaticGet staticGet(Member readTarget, int offset) { | 78 StaticGet staticGet(Member readTarget, Token token) { |
| 74 return new KernelStaticGet(readTarget)..fileOffset = offset; | 79 return new KernelStaticGet(readTarget)..fileOffset = offsetForToken(token); |
| 75 } | 80 } |
| 76 | 81 |
| 77 @override | 82 @override |
| 78 VariableDeclaration variableDeclaration( | 83 VariableDeclaration variableDeclaration( |
| 79 String name, int charOffset, int functionNestingLevel, | 84 String name, Token token, int functionNestingLevel, |
| 80 {DartType type, | 85 {DartType type, |
| 81 Expression initializer, | 86 Expression initializer, |
| 82 int equalsCharOffset = TreeNode.noOffset, | 87 Token equalsToken, |
| 83 bool isFinal: false, | 88 bool isFinal: false, |
| 84 bool isConst: false}) { | 89 bool isConst: false}) { |
| 85 return new KernelVariableDeclaration(name, functionNestingLevel, | 90 return new KernelVariableDeclaration(name, functionNestingLevel, |
| 86 type: type, | 91 type: type, |
| 87 initializer: initializer, | 92 initializer: initializer, |
| 88 isFinal: isFinal, | 93 isFinal: isFinal, |
| 89 isConst: isConst) | 94 isConst: isConst) |
| 90 ..fileOffset = charOffset | 95 ..fileOffset = offsetForToken(token) |
| 91 ..fileEqualsOffset = equalsCharOffset; | 96 ..fileEqualsOffset = offsetForToken(equalsToken); |
| 92 } | 97 } |
| 93 | 98 |
| 94 @override | 99 @override |
| 95 VariableGet variableGet( | 100 VariableGet variableGet( |
| 96 VariableDeclaration variable, | 101 VariableDeclaration variable, |
| 97 TypePromotionFact<VariableDeclaration> fact, | 102 TypePromotionFact<VariableDeclaration> fact, |
| 98 TypePromotionScope scope, | 103 TypePromotionScope scope, |
| 99 int charOffset) { | 104 Token token) { |
| 100 return new KernelVariableGet(variable, fact, scope) | 105 return new KernelVariableGet(variable, fact, scope) |
| 101 ..fileOffset = charOffset; | 106 ..fileOffset = offsetForToken(token); |
| 102 } | 107 } |
| 103 } | 108 } |
| OLD | NEW |