mirror of
https://github.com/dart-lang/sdk
synced 2024-10-03 06:21:30 +00:00
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:
parent
316b10216f
commit
ebcf5bec30
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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}) {
|
||||
|
|
|
@ -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});
|
||||
|
||||
|
|
|
@ -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});
|
||||
|
||||
|
|
Loading…
Reference in a new issue