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

Unified Diff: pkg/compiler/lib/src/native/behavior.dart

Issue 1383483006: Extract DiagnosticReporter implementation from Compiler. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fixes after rebase. Created 5 years, 2 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 | « pkg/compiler/lib/src/mirrors_used.dart ('k') | pkg/compiler/lib/src/native/enqueue.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/native/behavior.dart
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 26a57b76a915d0e87bc4850e68dd6bc0bfa74696..c742a7d1014b418d17711ca10e29263aaa638313 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -196,7 +196,7 @@ class NativeBehavior {
/// latter is used for the type strings of the form '' and 'var'.
/// [validTags] can be used to restrict which tags are accepted.
static void processSpecString(
- DiagnosticListener listener,
+ DiagnosticReporter reporter,
Spannable spannable,
String specString,
{Iterable<String> validTags,
@@ -214,7 +214,7 @@ class NativeBehavior {
void reportError(String message) {
seenError = true;
- listener.reportErrorMessage(
+ reporter.reportErrorMessage(
spannable, MessageKind.GENERIC, {'text': message});
}
@@ -424,7 +424,12 @@ class NativeBehavior {
return sideEffects;
}
- static NativeBehavior ofJsCall(Send jsCall, Compiler compiler, resolver) {
+ static NativeBehavior ofJsCall(
+ Send jsCall,
+ DiagnosticReporter reporter,
+ Parsing parsing,
+ CoreTypes coreTypes,
+ ForeignResolver resolver) {
// The first argument of a JS-call is a string encoding various attributes
// of the code.
//
@@ -435,7 +440,7 @@ class NativeBehavior {
var argNodes = jsCall.arguments;
if (argNodes.isEmpty || argNodes.tail.isEmpty) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
jsCall,
MessageKind.GENERIC,
{'text': "JS expression takes two or more arguments."});
@@ -444,7 +449,7 @@ class NativeBehavior {
var specArgument = argNodes.head;
if (specArgument is !StringNode || specArgument.isInterpolation) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
specArgument, MessageKind.GENERIC,
{'text': "JS first argument must be a string literal."});
return behavior;
@@ -452,7 +457,7 @@ class NativeBehavior {
var codeArgument = argNodes.tail.head;
if (codeArgument is !StringNode || codeArgument.isInterpolation) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
codeArgument, MessageKind.GENERIC,
{'text': "JS second argument must be a string literal."});
return behavior;
@@ -466,7 +471,7 @@ class NativeBehavior {
dynamic resolveType(String typeString) {
return _parseType(
typeString,
- compiler.resolution,
+ parsing,
(name) => resolver.resolveTypeFromString(specArgument, name),
specArgument);
}
@@ -492,7 +497,9 @@ class NativeBehavior {
behavior.useGvn = useGvn;
}
- processSpecString(compiler, specArgument,
+ processSpecString(
+ reporter,
+ specArgument,
specString,
setSideEffects: setSideEffects,
setThrows: setThrows,
@@ -501,8 +508,8 @@ class NativeBehavior {
resolveType: resolveType,
typesReturned: behavior.typesReturned,
typesInstantiated: behavior.typesInstantiated,
- objectType: compiler.coreTypes.objectType,
- nullType: compiler.coreTypes.nullType);
+ objectType: coreTypes.objectType,
+ nullType: coreTypes.nullType);
if (!sideEffectsAreEncodedInSpecString) {
new SideEffectsVisitor(behavior.sideEffects)
@@ -519,7 +526,9 @@ class NativeBehavior {
static void _fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
NativeBehavior behavior,
Send jsBuiltinOrEmbeddedGlobalCall,
- Compiler compiler,
+ DiagnosticReporter reporter,
+ Parsing parsing,
+ CoreTypes coreTypes,
ForeignResolver resolver,
{bool isBuiltin,
List<String> validTags}) {
@@ -533,7 +542,7 @@ class NativeBehavior {
Link<Node> argNodes = jsBuiltinOrEmbeddedGlobalCall.arguments;
if (argNodes.isEmpty) {
- compiler.internalError(jsBuiltinOrEmbeddedGlobalCall,
+ reporter.internalError(jsBuiltinOrEmbeddedGlobalCall,
"JS $builtinOrGlobal expression has no type.");
}
@@ -541,13 +550,13 @@ class NativeBehavior {
// This is, because we want to allow non-literals (like references to
// enums) as names.
if (argNodes.tail.isEmpty) {
- compiler.internalError(jsBuiltinOrEmbeddedGlobalCall,
+ reporter.internalError(jsBuiltinOrEmbeddedGlobalCall,
'JS $builtinOrGlobal is missing name.');
}
if (!isBuiltin) {
if (!argNodes.tail.tail.isEmpty) {
- compiler.internalError(argNodes.tail.tail.head,
+ reporter.internalError(argNodes.tail.tail.head,
'JS embedded global has more than 2 arguments');
}
}
@@ -556,7 +565,7 @@ class NativeBehavior {
if (specLiteral == null) {
// TODO(sra): We could accept a type identifier? e.g. JS(bool, '1<2'). It
// is not very satisfactory because it does not work for void, dynamic.
- compiler.internalError(argNodes.head, "Unexpected first argument.");
+ reporter.internalError(argNodes.head, "Unexpected first argument.");
}
String specString = specLiteral.dartString.slowToString();
@@ -564,7 +573,7 @@ class NativeBehavior {
dynamic resolveType(String typeString) {
return _parseType(
typeString,
- compiler.resolution,
+ parsing,
(name) => resolver.resolveTypeFromString(specLiteral, name),
jsBuiltinOrEmbeddedGlobalCall);
}
@@ -573,32 +582,46 @@ class NativeBehavior {
behavior.sideEffects.setTo(newEffects);
}
- processSpecString(compiler, jsBuiltinOrEmbeddedGlobalCall,
- specString,
- validTags: validTags,
- resolveType: resolveType,
- setSideEffects: setSideEffects,
- typesReturned: behavior.typesReturned,
- typesInstantiated: behavior.typesInstantiated,
- objectType: compiler.coreTypes.objectType,
- nullType: compiler.coreTypes.nullType);
+ processSpecString(
+ reporter,
+ jsBuiltinOrEmbeddedGlobalCall,
+ specString,
+ validTags: validTags,
+ resolveType: resolveType,
+ setSideEffects: setSideEffects,
+ typesReturned: behavior.typesReturned,
+ typesInstantiated: behavior.typesInstantiated,
+ objectType: coreTypes.objectType,
+ nullType: coreTypes.nullType);
}
- static NativeBehavior ofJsBuiltinCall(Send jsBuiltinCall,
- Compiler compiler,
- ForeignResolver resolver) {
+ static NativeBehavior ofJsBuiltinCall(
+ Send jsBuiltinCall,
+ DiagnosticReporter reporter,
+ Parsing parsing,
+ CoreTypes coreTypes,
+ ForeignResolver resolver) {
NativeBehavior behavior = new NativeBehavior();
behavior.sideEffects.setTo(new SideEffects());
_fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
- behavior, jsBuiltinCall, compiler, resolver, isBuiltin: true);
+ behavior,
+ jsBuiltinCall,
+ reporter,
+ parsing,
+ coreTypes,
+ resolver,
+ isBuiltin: true);
return behavior;
}
- static NativeBehavior ofJsEmbeddedGlobalCall(Send jsEmbeddedGlobalCall,
- Compiler compiler,
- ForeignResolver resolver) {
+ static NativeBehavior ofJsEmbeddedGlobalCall(
+ Send jsEmbeddedGlobalCall,
+ DiagnosticReporter reporter,
+ Parsing parsing,
+ CoreTypes coreTypes,
+ ForeignResolver resolver) {
NativeBehavior behavior = new NativeBehavior();
// TODO(sra): Allow the use site to override these defaults.
// Embedded globals are usually pre-computed data structures or JavaScript
@@ -607,7 +630,12 @@ class NativeBehavior {
behavior.throwBehavior = NativeThrowBehavior.NEVER;
_fillNativeBehaviorOfBuiltinOrEmbeddedGlobal(
- behavior, jsEmbeddedGlobalCall, compiler, resolver,
+ behavior,
+ jsEmbeddedGlobalCall,
+ reporter,
+ parsing,
+ coreTypes,
+ resolver,
isBuiltin: false,
validTags: const ['returns', 'creates']);
@@ -637,20 +665,22 @@ class NativeBehavior {
}
static NativeBehavior ofFieldLoad(MemberElement field, Compiler compiler) {
- DartType type = field.computeType(compiler.resolution);
+ Resolution resolution = compiler.resolution;
+ DartType type = field.computeType(resolution);
var behavior = new NativeBehavior();
behavior.typesReturned.add(type);
// Declared types are nullable.
- behavior.typesReturned.add(compiler.coreTypes.nullType);
- behavior._capture(type, compiler.resolution);
+ behavior.typesReturned.add(resolution.coreTypes.nullType);
+ behavior._capture(type, resolution);
behavior._overrideWithAnnotations(field, compiler);
return behavior;
}
static NativeBehavior ofFieldStore(MemberElement field, Compiler compiler) {
- DartType type = field.computeType(compiler.resolution);
+ Resolution resolution = compiler.resolution;
+ DartType type = field.computeType(resolution);
var behavior = new NativeBehavior();
- behavior._escape(type, compiler.resolution);
+ behavior._escape(type, resolution);
// We don't override the default behaviour - the annotations apply to
// loading the field.
return behavior;
@@ -689,6 +719,7 @@ class NativeBehavior {
*/
static _collect(Element element, Compiler compiler, Element annotationClass,
lookup(str)) {
+ DiagnosticReporter reporter = compiler.reporter;
var types = null;
for (MetadataAnnotation annotation in element.implementation.metadata) {
annotation.ensureResolved(compiler.resolution);
@@ -701,14 +732,13 @@ class NativeBehavior {
Iterable<ConstantValue> fields = constructedObject.fields.values;
// TODO(sra): Better validation of the constant.
if (fields.length != 1 || !fields.single.isString) {
- compiler.internalError(annotation,
+ reporter.internalError(annotation,
'Annotations needs one string: ${annotation.node}');
}
StringConstantValue specStringConstant = fields.single;
String specString = specStringConstant.toDartString().slowToString();
for (final typeString in specString.split('|')) {
- var type =
- _parseType(typeString, compiler.resolution, lookup, annotation);
+ var type = _parseType(typeString, compiler.parsing, lookup, annotation);
if (types == null) types = [];
types.add(type);
}
@@ -749,8 +779,9 @@ class NativeBehavior {
static dynamic _parseType(
String typeString,
- Resolution resolution,
+ Parsing parsing,
lookup(name), locationNodeOrElement) {
+ DiagnosticReporter reporter = parsing.reporter;
if (typeString == '=Object') return SpecialType.JsObject;
if (typeString == 'dynamic') {
return const DynamicType();
@@ -760,8 +791,8 @@ class NativeBehavior {
int index = typeString.indexOf('<');
if (index < 1) {
- resolution.listener.reportErrorMessage(
- _errorNode(locationNodeOrElement, resolution.parsing),
+ reporter.reportErrorMessage(
+ _errorNode(locationNodeOrElement, parsing),
MessageKind.GENERIC,
{'text': "Type '$typeString' not found."});
return const DynamicType();
@@ -771,8 +802,8 @@ class NativeBehavior {
// TODO(sra): Parse type parameters.
return type;
}
- resolution.listener.reportErrorMessage(
- _errorNode(locationNodeOrElement, resolution.parsing),
+ reporter.reportErrorMessage(
+ _errorNode(locationNodeOrElement, parsing),
MessageKind.GENERIC,
{'text': "Type '$typeString' not found."});
return const DynamicType();
« no previous file with comments | « pkg/compiler/lib/src/mirrors_used.dart ('k') | pkg/compiler/lib/src/native/enqueue.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698