Update Analyzer/CFE type resolution test to use AstBuildingForest

This updates the BodyBuilder to accept a Forest for either Kernel or Analyzer.
More work needs to be done to update the Forest type arguments specified in BodyBuilder.

Change-Id: I595535dc05572515a0b7cca5621de35146944ed3
Reviewed-on: https://dart-review.googlesource.com/54180
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
This commit is contained in:
danrubel 2018-05-08 16:08:52 +00:00 committed by commit-bot@chromium.org
parent 316b10216f
commit ebcf5bec30
6 changed files with 17 additions and 52 deletions

View file

@ -6,6 +6,7 @@ import 'dart:async';
import 'dart:io' show File;
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/src/fasta/ast_building_factory.dart';
import "package:front_end/src/api_prototype/front_end.dart";
import "package:front_end/src/api_prototype/memory_file_system.dart";
import "package:front_end/src/base/processed_options.dart";
@ -27,7 +28,6 @@ import 'package:front_end/src/fasta/type_inference/type_inferrer.dart';
import 'package:front_end/src/fasta/type_inference/type_schema_environment.dart';
import 'package:front_end/src/fasta/uri_translator_impl.dart';
import 'package:front_end/src/scanner/token.dart';
import 'package:kernel/ast.dart' as kernel;
import 'package:kernel/class_hierarchy.dart' as kernel;
import 'package:kernel/core_types.dart' as kernel;
import 'package:kernel/kernel.dart' as kernel;
@ -1220,7 +1220,7 @@ class FastaParserTestCase extends Object
false /* strong mode */,
));
AnalyzerBodyBuilder builder = new AnalyzerBodyBuilder(
BodyBuilder builder = new BodyBuilder(
library,
procedureBuilder,
library.scope,
@ -1231,6 +1231,7 @@ class FastaParserTestCase extends Object
false /* isInstanceMember */,
null /* uri */,
typeInferrer,
new AstBuildingForest(),
)..constantContext = ConstantContext.none; // .inferred ?
Parser parser = new Parser(builder);
@ -1288,46 +1289,3 @@ class FastaParserTestCase extends Object
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}
class AnalyzerBodyBuilder extends BodyBuilder {
// TODO(danrubel): Hopefully BodyBuilder can be modified in a way that makes
// this class unnecessary.
AnalyzerBodyBuilder(
KernelLibraryBuilder library,
ModifierBuilder member,
Scope scope,
Scope formalParameterScope,
kernel.ClassHierarchy hierarchy,
kernel.CoreTypes coreTypes,
KernelClassBuilder classBuilder,
bool isInstanceMember,
Uri uri,
TypeInferrer typeInferrer)
: super(library, member, scope, formalParameterScope, hierarchy,
coreTypes, classBuilder, isInstanceMember, uri, typeInferrer);
AnalyzerForest analyzerForest = new AnalyzerForest();
@override
Forest<kernel.Expression, kernel.Statement, Token, kernel.Arguments>
get forest => analyzerForest;
}
// TODO(danrubel): Replace this with AstBuildingForest.
class AnalyzerForest extends Forest<kernel.Expression, kernel.Statement, Token,
kernel.Arguments> {
@override
kernel.Arguments arguments(List<kernel.Expression> positional, Token token,
{List<kernel.DartType> types, List<kernel.NamedExpression> named}) {
return new kernel.Arguments(positional, types: types, named: named)
..fileOffset = token?.charOffset;
}
@override
kernel.Expression literalInt(int value, Token location) {
// TODO(danrubel): return an Analyzer AST node.
return new kernel.IntLiteral(value);
}
noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
}

View file

@ -42,6 +42,7 @@ import 'non_hint_code_kernel_test.dart' as non_hint_code_kernel_test;
import 'non_hint_code_test.dart' as non_hint_code_test;
import 'package_test.dart' as package_test;
import 'parser_fasta_test.dart' as parser_fasta_test;
import 'parser_forest_test.dart' as parser_forest_test;
import 'parser_test.dart' as parser_test;
import 'resolver_driver_test.dart' as resolver_driver_test;
import 'resolver_kernel_test.dart' as resolver_kernel_test;
@ -107,6 +108,7 @@ main() {
non_hint_code_test.main();
package_test.main();
parser_fasta_test.main();
parser_forest_test.main();
parser_test.main();
resolver_driver_test.main();
resolver_kernel_test.main();

View file

@ -85,8 +85,6 @@ import 'kernel_ast_api.dart';
import 'kernel_builder.dart';
final Forest _forest = new Fangorn();
// TODO(ahe): Remove this and ensure all nodes have a location.
const noLocation = null;
@ -184,6 +182,10 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
/// and where that was.
Map<String, int> initializedFields;
// TODO(ahe): Update type parameters.
@override
Forest<dynamic, dynamic, Token, dynamic> forest;
BodyBuilder(
KernelLibraryBuilder library,
this.member,
@ -194,7 +196,8 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
this.classBuilder,
this.isInstanceMember,
this.uri,
this._typeInferrer)
this._typeInferrer,
[this.forest = const Fangorn()])
: enclosingScope = scope,
library = library,
enableNative =
@ -208,9 +211,6 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
typePromoter = _typeInferrer.typePromoter,
super(scope);
@override
Forest<Expression, Statement, Token, Arguments> get forest => _forest;
bool get hasParserError => recoverableErrors.isNotEmpty;
bool get inConstructor {

View file

@ -53,6 +53,8 @@ import 'forest.dart' show Forest;
/// A shadow tree factory.
class Fangorn extends Forest<Expression, Statement, Token, Arguments> {
const Fangorn();
@override
ShadowArguments arguments(List<Expression> positional, Token token,
{List<DartType> types, List<NamedExpression> named}) {

View file

@ -84,7 +84,8 @@ abstract class BuilderHelper<Arguments> {
ConstantContext get constantContext;
Forest<Expression, Statement, Token, Arguments> get forest;
// TODO(ahe): Update type parameters.
Forest<dynamic, dynamic, Token, dynamic> get forest;
Constructor lookupConstructor(Name name, {bool isSuper});

View file

@ -12,6 +12,8 @@ import 'package:kernel/ast.dart';
///
/// For now, the [Location] is always a token.
abstract class Forest<Expression, Statement, Location, Arguments> {
const Forest();
Arguments arguments(List<Expression> positional, Location location,
{covariant List types, covariant List named});