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

Unified Diff: pkg/compiler/lib/src/ssa/builder.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/scanner/scanner_task.dart ('k') | pkg/compiler/lib/src/ssa/codegen.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/builder.dart
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index 40ed4ccd2ffd8b9e48af788ef03b2e50e4984a38..bcf70e244520b49af7084ecfaf1cee6dcd485032 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -60,10 +60,12 @@ class SsaBuilderTask extends CompilerTask {
backend = backend,
super(backend.compiler);
+ DiagnosticReporter get reporter => compiler.reporter;
+
HGraph build(CodegenWorkItem work) {
return measure(() {
Element element = work.element.implementation;
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
HInstruction.idCounter = 0;
SsaBuilder builder =
new SsaBuilder(
@@ -86,7 +88,7 @@ class SsaBuilderTask extends CompilerTask {
graph = builder.buildLazyInitializer(element);
}
} else {
- compiler.internalError(element, 'Unexpected element kind $kind.');
+ reporter.internalError(element, 'Unexpected element kind $kind.');
}
assert(graph.isValid());
if (!identical(kind, ElementKind.FIELD)) {
@@ -439,10 +441,10 @@ class LocalsHandler {
if (isAccessedDirectly(local)) {
if (directLocals[local] == null) {
if (local is TypeVariableElement) {
- builder.compiler.internalError(builder.compiler.currentElement,
+ builder.reporter.internalError(builder.compiler.currentElement,
"Runtime type information not available for $local.");
} else {
- builder.compiler.internalError(local,
+ builder.reporter.internalError(local,
"Cannot find value $local.");
}
}
@@ -792,17 +794,17 @@ abstract class JumpHandler {
// used as the target of a break, and therefore doesn't need a break
// handler associated with it.
class NullJumpHandler implements JumpHandler {
- final Compiler compiler;
+ final DiagnosticReporter reporter;
- NullJumpHandler(this.compiler);
+ NullJumpHandler(this.reporter);
void generateBreak([LabelDefinition label]) {
- compiler.internalError(CURRENT_ELEMENT_SPANNABLE,
+ reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
'NullJumpHandler.generateBreak should not be called.');
}
void generateContinue([LabelDefinition label]) {
- compiler.internalError(CURRENT_ELEMENT_SPANNABLE,
+ reporter.internalError(CURRENT_ELEMENT_SPANNABLE,
'NullJumpHandler.generateContinue should not be called.');
}
@@ -1105,6 +1107,9 @@ class SsaBuilder extends ast.Visitor
work.element.implementation);
}
+
+ DiagnosticReporter get reporter => compiler.reporter;
+
// TODO(johnniwinther): Avoid the need for this.
Resolution get resolution => compiler.resolution;
@@ -1496,7 +1501,7 @@ class SsaBuilder extends ast.Visitor
inlinedFrom(Element element, f()) {
assert(element is FunctionElement || element is VariableElement);
- return compiler.withCurrentElement(element, () {
+ return reporter.withCurrentElement(element, () {
// The [sourceElementStack] contains declaration elements.
SourceInformationBuilder oldSourceInformationBuilder =
sourceInformationBuilder;
@@ -1868,7 +1873,7 @@ class SsaBuilder extends ast.Visitor
Map<Element, HInstruction> fieldValues,
FunctionElement caller) {
callee = callee.implementation;
- compiler.withCurrentElement(callee, () {
+ reporter.withCurrentElement(callee, () {
constructors.add(callee);
ClassElement enclosingClass = callee.enclosingClass;
if (backend.classNeedsRti(enclosingClass)) {
@@ -1983,7 +1988,7 @@ class SsaBuilder extends ast.Visitor
// forwarding constructor in a mixin application did not match the
// constructor (which, for example, may happen when the libraries are
// not compatible for private names, see issue 20394).
- compiler.internalError(constructor,
+ reporter.internalError(constructor,
'forwarding constructor call does not match');
}
inlineSuperOrRedirect(
@@ -2045,7 +2050,7 @@ class SsaBuilder extends ast.Visitor
// TODO(johnniwinther): Should we find injected constructors as well?
FunctionElement target = superClass.lookupDefaultConstructor();
if (target == null) {
- compiler.internalError(superClass,
+ reporter.internalError(superClass,
"No default constructor available.");
}
List<HInstruction> arguments =
@@ -2075,7 +2080,7 @@ class SsaBuilder extends ast.Visitor
classElement.forEachInstanceField(
(ClassElement enclosingClass, VariableElement member) {
if (compiler.elementHasCompileTimeError(member)) return;
- compiler.withCurrentElement(member, () {
+ reporter.withCurrentElement(member, () {
TreeElements definitions = member.treeElements;
ast.Node node = member.node;
ast.Expression initializer = member.initializer;
@@ -2663,19 +2668,19 @@ class SsaBuilder extends ast.Visitor
if (!isReachable) {
// The block has been aborted by a return or a throw.
if (!stack.isEmpty) {
- compiler.internalError(node, 'Non-empty instruction stack.');
+ reporter.internalError(node, 'Non-empty instruction stack.');
}
return;
}
}
assert(!current.isClosed());
if (!stack.isEmpty) {
- compiler.internalError(node, 'Non-empty instruction stack.');
+ reporter.internalError(node, 'Non-empty instruction stack.');
}
}
visitClassNode(ast.ClassNode node) {
- compiler.internalError(node,
+ reporter.internalError(node,
'SsaBuilder.visitClassNode should not be called.');
}
@@ -3215,7 +3220,7 @@ class SsaBuilder extends ast.Visitor
if (node.isThis()) {
visitThisGet(node);
} else {
- compiler.internalError(node,
+ reporter.internalError(node,
"SsaFromAstMixin.visitIdentifier on non-this.");
}
}
@@ -4078,7 +4083,7 @@ class SsaBuilder extends ast.Visitor
// argument, which is the foreign code.
if (link.isEmpty || link.tail.isEmpty) {
// We should not get here because the call should be compiled to NSM.
- compiler.internalError(node.argumentsNode,
+ reporter.internalError(node.argumentsNode,
'At least two arguments expected.');
}
native.NativeBehavior nativeBehavior =
@@ -4088,7 +4093,7 @@ class SsaBuilder extends ast.Visitor
addGenericSendArgumentsToList(link.tail.tail, inputs);
if (nativeBehavior.codeTemplate.positionalArgumentCount != inputs.length) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text':
'Mismatch between number of placeholders'
@@ -4122,14 +4127,14 @@ class SsaBuilder extends ast.Visitor
List<HInstruction> inputs = <HInstruction>[];
addGenericSendArgumentsToList(node.arguments, inputs);
if (inputs.length != 2) {
- compiler.internalError(node.argumentsNode, 'Two arguments expected.');
+ reporter.internalError(node.argumentsNode, 'Two arguments expected.');
}
push(new HStringConcat(inputs[0], inputs[1], node, backend.stringType));
}
void handleForeignJsCurrentIsolateContext(ast.Send node) {
if (!node.arguments.isEmpty) {
- compiler.internalError(node,
+ reporter.internalError(node,
'Too many arguments to JS_CURRENT_ISOLATE_CONTEXT.');
}
@@ -4146,7 +4151,7 @@ class SsaBuilder extends ast.Visitor
// Leg's isolate.
Element element = backend.isolateHelperLibrary.find('_currentIsolate');
if (element == null) {
- compiler.internalError(node,
+ reporter.internalError(node,
'Isolate library and compiler mismatch.');
}
pushInvokeStatic(null, element, [], typeMask: backend.dynamicType);
@@ -4158,7 +4163,7 @@ class SsaBuilder extends ast.Visitor
ast.Node argument;
switch (arguments.length) {
case 0:
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text': 'Error: Expected one argument to JS_GET_FLAG.'});
return;
@@ -4167,7 +4172,7 @@ class SsaBuilder extends ast.Visitor
break;
default:
for (int i = 1; i < arguments.length; i++) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
arguments[i], MessageKind.GENERIC,
{'text': 'Error: Extra argument to JS_GET_FLAG.'});
}
@@ -4175,7 +4180,7 @@ class SsaBuilder extends ast.Visitor
}
ast.LiteralString string = argument.asLiteralString();
if (string == null) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
argument, MessageKind.GENERIC,
{'text': 'Error: Expected a literal string.'});
}
@@ -4189,7 +4194,7 @@ class SsaBuilder extends ast.Visitor
value = compiler.useContentSecurityPolicy;
break;
default:
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text': 'Error: Unknown internal flag "$name".'});
}
@@ -4201,7 +4206,7 @@ class SsaBuilder extends ast.Visitor
ast.Node argument;
switch (arguments.length) {
case 0:
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text': 'Error: Expected one argument to JS_GET_NAME.'});
return;
@@ -4210,7 +4215,7 @@ class SsaBuilder extends ast.Visitor
break;
default:
for (int i = 1; i < arguments.length; i++) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
arguments[i], MessageKind.GENERIC,
{'text': 'Error: Extra argument to JS_GET_NAME.'});
}
@@ -4220,7 +4225,7 @@ class SsaBuilder extends ast.Visitor
if (element == null ||
element is! FieldElement ||
element.enclosingClass != backend.jsGetNameEnum) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
argument, MessageKind.GENERIC,
{'text': 'Error: Expected a JsGetName enum value.'});
}
@@ -4236,7 +4241,7 @@ class SsaBuilder extends ast.Visitor
List<ast.Node> arguments = node.arguments.toList();
ast.Node argument;
if (arguments.length < 2) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text': 'Error: Expected at least two arguments to JS_BUILTIN.'});
}
@@ -4245,7 +4250,7 @@ class SsaBuilder extends ast.Visitor
if (builtinElement == null ||
(builtinElement is! FieldElement) ||
builtinElement.enclosingClass != backend.jsBuiltinEnum) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
argument, MessageKind.GENERIC,
{'text': 'Error: Expected a JsBuiltin enum value.'});
}
@@ -4279,7 +4284,7 @@ class SsaBuilder extends ast.Visitor
switch (arguments.length) {
case 0:
case 1:
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node, MessageKind.GENERIC,
{'text': 'Error: Expected two arguments to JS_EMBEDDED_GLOBAL.'});
return;
@@ -4290,7 +4295,7 @@ class SsaBuilder extends ast.Visitor
break;
default:
for (int i = 2; i < arguments.length; i++) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
arguments[i], MessageKind.GENERIC,
{'text': 'Error: Extra argument to JS_EMBEDDED_GLOBAL.'});
}
@@ -4299,7 +4304,7 @@ class SsaBuilder extends ast.Visitor
visit(globalNameNode);
HInstruction globalNameHNode = pop();
if (!globalNameHNode.isConstantString()) {
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
arguments[1], MessageKind.GENERIC,
{'text': 'Error: Expected String as second argument '
'to JS_EMBEDDED_GLOBAL.'});
@@ -4336,7 +4341,7 @@ class SsaBuilder extends ast.Visitor
}
}
}
- compiler.reportErrorMessage(
+ reporter.reportErrorMessage(
node,
MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
stack.add(graph.addConstantNull(compiler));
@@ -4355,7 +4360,7 @@ class SsaBuilder extends ast.Visitor
// Call a helper method from the isolate library.
Element element = backend.isolateHelperLibrary.find('_callInIsolate');
if (element == null) {
- compiler.internalError(node,
+ reporter.internalError(node,
'Isolate library and compiler mismatch.');
}
List<HInstruction> inputs = <HInstruction>[];
@@ -4366,13 +4371,13 @@ class SsaBuilder extends ast.Visitor
FunctionSignature handleForeignRawFunctionRef(ast.Send node, String name) {
if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
- compiler.internalError(node.argumentsNode,
+ reporter.internalError(node.argumentsNode,
'"$name" requires exactly one argument.');
}
ast.Node closure = node.arguments.head;
Element element = elements[closure];
if (!Elements.isStaticOrTopLevelFunction(element)) {
- compiler.internalError(closure,
+ reporter.internalError(closure,
'"$name" requires a static or top-level method.');
}
FunctionElement function = element;
@@ -4382,7 +4387,7 @@ class SsaBuilder extends ast.Visitor
FunctionElement implementation = function.implementation;
FunctionSignature params = implementation.functionSignature;
if (params.optionalParameterCount != 0) {
- compiler.internalError(closure,
+ reporter.internalError(closure,
'"$name" does not handle closure with optional parameters.');
}
@@ -4405,7 +4410,7 @@ class SsaBuilder extends ast.Visitor
void handleForeignJsSetStaticState(ast.Send node) {
if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
- compiler.internalError(node.argumentsNode,
+ reporter.internalError(node.argumentsNode,
'Exactly one argument required.');
}
visit(node.arguments.head);
@@ -4422,7 +4427,7 @@ class SsaBuilder extends ast.Visitor
void handleForeignJsGetStaticState(ast.Send node) {
if (!node.arguments.isEmpty) {
- compiler.internalError(node.argumentsNode, 'Too many arguments.');
+ reporter.internalError(node.argumentsNode, 'Too many arguments.');
}
push(new HForeignCode(js.js.parseForeignJS(backend.namer.staticStateHolder),
backend.dynamicType,
@@ -4460,7 +4465,7 @@ class SsaBuilder extends ast.Visitor
} else if (name == 'JS_STRING_CONCAT') {
handleJsStringConcat(node);
} else {
- compiler.internalError(node, "Unknown foreign: ${element}");
+ reporter.internalError(node, "Unknown foreign: ${element}");
}
}
@@ -4887,7 +4892,7 @@ class SsaBuilder extends ast.Visitor
type.element,
sourceInformation: sourceInformation);
} else {
- compiler.internalError(type.element,
+ reporter.internalError(type.element,
'Unexpected type variable in static context.');
return null;
}
@@ -5574,7 +5579,7 @@ class SsaBuilder extends ast.Visitor
// TODO(antonm): migrate rest of SsaFromAstMixin to internalError.
internalError(Spannable node, String reason) {
- compiler.internalError(node, reason);
+ reporter.internalError(node, reason);
}
void generateError(ast.Node node, String message, Element helper) {
@@ -6894,7 +6899,7 @@ class SsaBuilder extends ast.Visitor
visitNodeList(ast.NodeList node) {
for (Link<ast.Node> link = node.nodes; !link.isEmpty; link = link.tail) {
if (isAborted()) {
- compiler.reportHintMessage(
+ reporter.reportHintMessage(
link.head,
MessageKind.GENERIC,
{'text': 'dead code'});
@@ -6910,7 +6915,7 @@ class SsaBuilder extends ast.Visitor
visitOperator(ast.Operator node) {
// Operators are intercepted in their surrounding Send nodes.
- compiler.internalError(node,
+ reporter.internalError(node,
'SsaBuilder.visitOperator should not be called.');
}
@@ -6937,7 +6942,7 @@ class SsaBuilder extends ast.Visitor
HInstruction exception = rethrowableException;
if (exception == null) {
exception = graph.addConstantNull(compiler);
- compiler.internalError(node,
+ reporter.internalError(node,
'rethrowableException should not be null.');
}
handleInTryStatement();
@@ -7062,7 +7067,7 @@ class SsaBuilder extends ast.Visitor
}
visitTypeAnnotation(ast.TypeAnnotation node) {
- compiler.internalError(node,
+ reporter.internalError(node,
'Visiting type annotation in SSA builder.');
}
@@ -7138,7 +7143,7 @@ class SsaBuilder extends ast.Visitor
visitStringInterpolationPart(ast.StringInterpolationPart node) {
// The parts are iterated in visitStringInterpolation.
- compiler.internalError(node,
+ reporter.internalError(node,
'SsaBuilder.visitStringInterpolation should not be called.');
}
@@ -7193,7 +7198,7 @@ class SsaBuilder extends ast.Visitor
JumpTarget element = elements.getTargetDefinition(node);
if (element == null || !identical(element.statement, node)) {
// No breaks or continues to this node.
- return new NullJumpHandler(compiler);
+ return new NullJumpHandler(reporter);
}
if (isLoopJump && node is ast.SwitchStatement) {
// Create a special jump handler for loops created for switch statements
@@ -7460,7 +7465,7 @@ class SsaBuilder extends ast.Visitor
}
visitLabel(ast.Label node) {
- compiler.internalError(node, 'SsaFromAstMixin.visitLabel.');
+ reporter.internalError(node, 'SsaFromAstMixin.visitLabel.');
}
visitLabeledStatement(ast.LabeledStatement node) {
@@ -7790,7 +7795,7 @@ class SsaBuilder extends ast.Visitor
// is not the generated switch statement but instead the loop generated
// in the call to [handleLoop] below.
handleSwitch(node,
- new NullJumpHandler(compiler),
+ new NullJumpHandler(reporter),
buildExpression, node.cases, getConstants,
(_) => false, // No case is default.
buildSwitchCase);
@@ -7957,11 +7962,11 @@ class SsaBuilder extends ast.Visitor
}
visitSwitchCase(ast.SwitchCase node) {
- compiler.internalError(node, 'SsaFromAstMixin.visitSwitchCase.');
+ reporter.internalError(node, 'SsaFromAstMixin.visitSwitchCase.');
}
visitCaseMatch(ast.CaseMatch node) {
- compiler.internalError(node, 'SsaFromAstMixin.visitCaseMatch.');
+ reporter.internalError(node, 'SsaFromAstMixin.visitCaseMatch.');
}
/// Calls [buildTry] inside a synthetic try block with [buildFinally] in the
@@ -8112,7 +8117,7 @@ class SsaBuilder extends ast.Visitor
if (catchBlock.onKeyword != null) {
DartType type = elements.getType(catchBlock.type);
if (type == null) {
- compiler.internalError(catchBlock.type, 'On with no type.');
+ reporter.internalError(catchBlock.type, 'On with no type.');
}
HInstruction condition =
buildIsNode(catchBlock.type, type, unwrappedException);
@@ -8130,7 +8135,7 @@ class SsaBuilder extends ast.Visitor
// condition.
DartType type = elements.getType(declaration.type);
if (type == null) {
- compiler.internalError(catchBlock, 'Catch with unresolved type.');
+ reporter.internalError(catchBlock, 'Catch with unresolved type.');
}
condition = buildIsNode(declaration.type, type, unwrappedException);
push(condition);
@@ -8269,7 +8274,7 @@ class SsaBuilder extends ast.Visitor
}
visitTypeVariable(ast.TypeVariable node) {
- compiler.internalError(node, 'SsaFromAstMixin.visitTypeVariable.');
+ reporter.internalError(node, 'SsaFromAstMixin.visitTypeVariable.');
}
/**
@@ -8406,7 +8411,7 @@ class StringBuilderVisitor extends ast.Visitor {
}
visitNode(ast.Node node) {
- builder.compiler.internalError(node, 'Unexpected node.');
+ builder.reporter.internalError(node, 'Unexpected node.');
}
void visitExpression(ast.Node node) {
« no previous file with comments | « pkg/compiler/lib/src/scanner/scanner_task.dart ('k') | pkg/compiler/lib/src/ssa/codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698