mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 19:05:42 +00:00
[dart2js] Enable always_declare_return_types in pkg/compiler
Change-Id: Ia61e5d221ed74474b81e8f7188f4b947d17d9050 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/354421 Reviewed-by: Nate Biggs <natebiggs@google.com> Commit-Queue: Mayank Patke <fishythefish@google.com>
This commit is contained in:
parent
8887700df7
commit
b0556ba6cb
|
@ -14,6 +14,7 @@ analyzer:
|
|||
|
||||
linter:
|
||||
rules:
|
||||
- always_declare_return_types
|
||||
- annotate_overrides
|
||||
- avoid_dynamic_calls
|
||||
- prefer_final_fields
|
||||
|
|
|
@ -236,7 +236,7 @@ Future<api.CompilationResult> compile(List<String> argv,
|
|||
}
|
||||
}
|
||||
|
||||
setStrip(String argument) {
|
||||
Never setStrip(String argument) {
|
||||
_helpAndFail("Option '--force-strip' is not in use now that"
|
||||
"--output-type=dart is no longer supported.");
|
||||
}
|
||||
|
|
|
@ -446,7 +446,7 @@ class DeferredLoadTask extends CompilerTask {
|
|||
return _buildResult();
|
||||
}
|
||||
|
||||
work() {
|
||||
void work() {
|
||||
algorithmState = AlgorithmState.create(
|
||||
main, compiler, _elementMap, closedWorld, importSets!);
|
||||
}
|
||||
|
|
|
@ -1886,7 +1886,7 @@ class TreeShakingInfoVisitor extends InfoVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAll(AllInfo info) {
|
||||
void visitAll(AllInfo info) {
|
||||
info.libraries = filterDeadInfo<LibraryInfo>(info.libraries);
|
||||
info.constants = filterDeadInfo<ConstantInfo>(info.constants);
|
||||
|
||||
|
@ -1895,10 +1895,10 @@ class TreeShakingInfoVisitor extends InfoVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitProgram(ProgramInfo info) {}
|
||||
void visitProgram(ProgramInfo info) {}
|
||||
|
||||
@override
|
||||
visitLibrary(LibraryInfo info) {
|
||||
void visitLibrary(LibraryInfo info) {
|
||||
info.topLevelFunctions =
|
||||
filterDeadInfo<FunctionInfo>(info.topLevelFunctions);
|
||||
info.topLevelVariables = filterDeadInfo<FieldInfo>(info.topLevelVariables);
|
||||
|
@ -1914,7 +1914,7 @@ class TreeShakingInfoVisitor extends InfoVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClass(ClassInfo info) {
|
||||
void visitClass(ClassInfo info) {
|
||||
info.functions = filterDeadInfo<FunctionInfo>(info.functions);
|
||||
info.fields = filterDeadInfo<FieldInfo>(info.fields);
|
||||
info.supers = filterDeadInfo<ClassInfo>(info.supers);
|
||||
|
@ -1925,31 +1925,31 @@ class TreeShakingInfoVisitor extends InfoVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClassType(ClassTypeInfo info) {}
|
||||
void visitClassType(ClassTypeInfo info) {}
|
||||
|
||||
@override
|
||||
visitField(FieldInfo info) {
|
||||
void visitField(FieldInfo info) {
|
||||
info.closures = filterDeadInfo<ClosureInfo>(info.closures);
|
||||
|
||||
info.closures.forEach(visitClosure);
|
||||
}
|
||||
|
||||
@override
|
||||
visitConstant(ConstantInfo info) {}
|
||||
void visitConstant(ConstantInfo info) {}
|
||||
|
||||
@override
|
||||
visitFunction(FunctionInfo info) {
|
||||
void visitFunction(FunctionInfo info) {
|
||||
info.closures = filterDeadInfo<ClosureInfo>(info.closures);
|
||||
|
||||
info.closures.forEach(visitClosure);
|
||||
}
|
||||
|
||||
@override
|
||||
visitTypedef(TypedefInfo info) {}
|
||||
void visitTypedef(TypedefInfo info) {}
|
||||
@override
|
||||
visitOutput(OutputUnitInfo info) {}
|
||||
void visitOutput(OutputUnitInfo info) {}
|
||||
@override
|
||||
visitClosure(ClosureInfo info) {
|
||||
void visitClosure(ClosureInfo info) {
|
||||
visitFunction(info.function);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -335,7 +335,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitFieldInitializer(ir.FieldInitializer node) {
|
||||
Null visitFieldInitializer(ir.FieldInitializer node) {
|
||||
final rhsType = visit(node.value)!;
|
||||
FieldEntity field = _elementMap.getField(node.field);
|
||||
_state.updateField(field, rhsType);
|
||||
|
@ -344,7 +344,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitSuperInitializer(ir.SuperInitializer node) {
|
||||
Null visitSuperInitializer(ir.SuperInitializer node) {
|
||||
ConstructorEntity constructor = _elementMap.getConstructor(node.target);
|
||||
ArgumentsTypes arguments = analyzeArguments(node.arguments);
|
||||
Selector selector = Selector(SelectorKind.CALL, constructor.memberName,
|
||||
|
@ -360,7 +360,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitRedirectingInitializer(ir.RedirectingInitializer node) {
|
||||
Null visitRedirectingInitializer(ir.RedirectingInitializer node) {
|
||||
ConstructorEntity constructor = _elementMap.getConstructor(node.target);
|
||||
ArgumentsTypes arguments = analyzeArguments(node.arguments);
|
||||
Selector selector = Selector(SelectorKind.CALL, constructor.memberName,
|
||||
|
@ -376,7 +376,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitLocalInitializer(ir.LocalInitializer node) {
|
||||
Null visitLocalInitializer(ir.LocalInitializer node) {
|
||||
visit(node.variable);
|
||||
return null;
|
||||
}
|
||||
|
@ -461,7 +461,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
defaultStatement(ir.Statement node) {
|
||||
Never defaultStatement(ir.Statement node) {
|
||||
throw UnimplementedError(
|
||||
'Unhandled statement: ${node} (${node.runtimeType})');
|
||||
}
|
||||
|
@ -476,7 +476,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitBlock(ir.Block block) {
|
||||
Null visitBlock(ir.Block block) {
|
||||
for (ir.Statement statement in block.statements) {
|
||||
visit(statement);
|
||||
if (_state.aborts) break;
|
||||
|
@ -485,13 +485,13 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitExpressionStatement(ir.ExpressionStatement node) {
|
||||
Null visitExpressionStatement(ir.ExpressionStatement node) {
|
||||
visit(node.expression);
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
visitEmptyStatement(ir.EmptyStatement node) {
|
||||
Null visitEmptyStatement(ir.EmptyStatement node) {
|
||||
// Nothing to do.
|
||||
return null;
|
||||
}
|
||||
|
@ -516,19 +516,19 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitAssertInitializer(ir.AssertInitializer node) {
|
||||
Null visitAssertInitializer(ir.AssertInitializer node) {
|
||||
_handleAssertStatement(node.statement);
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
visitAssertStatement(ir.AssertStatement node) {
|
||||
Null visitAssertStatement(ir.AssertStatement node) {
|
||||
_handleAssertStatement(node);
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
visitBreakStatement(ir.BreakStatement node) {
|
||||
Null visitBreakStatement(ir.BreakStatement node) {
|
||||
JumpTarget target = _localsMap.getJumpTargetForBreak(node);
|
||||
_state.seenBreakOrContinue = true;
|
||||
// Do a deep-copy of the locals, because the code following the
|
||||
|
@ -542,7 +542,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitLabeledStatement(ir.LabeledStatement node) {
|
||||
Null visitLabeledStatement(ir.LabeledStatement node) {
|
||||
ir.Statement body = node.body;
|
||||
if (JumpVisitor.canBeBreakTarget(body)) {
|
||||
// Loops and switches handle their own labels.
|
||||
|
@ -561,7 +561,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitSwitchStatement(ir.SwitchStatement node) {
|
||||
Null visitSwitchStatement(ir.SwitchStatement node) {
|
||||
visit(node.expression);
|
||||
|
||||
final jumpTarget = _localsMap.getJumpTargetForSwitch(node);
|
||||
|
@ -628,13 +628,13 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitSwitchCase(ir.SwitchCase node) {
|
||||
Null visitSwitchCase(ir.SwitchCase node) {
|
||||
visit(node.body);
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {
|
||||
Null visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {
|
||||
JumpTarget target = _localsMap.getJumpTargetForContinueSwitch(node);
|
||||
_state.seenBreakOrContinue = true;
|
||||
// Do a deep-copy of the locals, because the code following the
|
||||
|
@ -1251,7 +1251,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
return list..addAll(_continuesFor[target]!);
|
||||
}
|
||||
|
||||
TypeInformation? handleLoop(ir.Node node, JumpTarget? target, void logic()) {
|
||||
Null handleLoop(ir.Node node, JumpTarget? target, void logic()) {
|
||||
_loopLevel++;
|
||||
bool changed = false;
|
||||
final stateBefore = _state;
|
||||
|
@ -1980,7 +1980,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitWhileStatement(ir.WhileStatement node) {
|
||||
Null visitWhileStatement(ir.WhileStatement node) {
|
||||
return handleLoop(node, _localsMap.getJumpTargetForWhile(node), () {
|
||||
handleCondition(node.condition);
|
||||
_state = LocalState.childPath(_stateAfterWhenTrue);
|
||||
|
@ -1989,7 +1989,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitDoStatement(ir.DoStatement node) {
|
||||
Null visitDoStatement(ir.DoStatement node) {
|
||||
return handleLoop(node, _localsMap.getJumpTargetForDo(node), () {
|
||||
visit(node.body);
|
||||
handleCondition(node.condition);
|
||||
|
@ -2002,7 +2002,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitForStatement(ir.ForStatement node) {
|
||||
Null visitForStatement(ir.ForStatement node) {
|
||||
for (ir.VariableDeclaration variable in node.variables) {
|
||||
visit(variable);
|
||||
}
|
||||
|
@ -2017,7 +2017,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitTryCatch(ir.TryCatch node) {
|
||||
Null visitTryCatch(ir.TryCatch node) {
|
||||
final stateBefore = _state;
|
||||
_state = LocalState.tryBlock(stateBefore, node);
|
||||
_state.markInitializationAsIndefinite();
|
||||
|
@ -2061,7 +2061,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitTryFinally(ir.TryFinally node) {
|
||||
Null visitTryFinally(ir.TryFinally node) {
|
||||
final stateBefore = _state;
|
||||
_state = LocalState.tryBlock(stateBefore, node);
|
||||
_state.markInitializationAsIndefinite();
|
||||
|
@ -2096,7 +2096,7 @@ class KernelTypeGraphBuilder extends ir.VisitorDefault<TypeInformation?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitCatch(ir.Catch node) {
|
||||
Null visitCatch(ir.Catch node) {
|
||||
final exception = node.exception;
|
||||
if (exception != null) {
|
||||
TypeInformation mask;
|
||||
|
|
|
@ -67,7 +67,8 @@ class ClosureTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
|
||||
void visitClosureCallSiteTypeInformation(
|
||||
ClosureCallSiteTypeInformation info) {
|
||||
super.visitClosureCallSiteTypeInformation(info);
|
||||
if (info.closure == currentUser) {
|
||||
_registerCallForLaterAnalysis(info);
|
||||
|
@ -77,7 +78,7 @@ class ClosureTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
super.visitStaticCallSiteTypeInformation(info);
|
||||
MemberEntity called = info.calledElement;
|
||||
if (inferrer.closedWorld.commonElements.isForeign(called)) {
|
||||
|
@ -112,7 +113,8 @@ class ClosureTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
|
||||
void visitDynamicCallSiteTypeInformation(
|
||||
DynamicCallSiteTypeInformation info) {
|
||||
super.visitDynamicCallSiteTypeInformation(info);
|
||||
final selector = info.selector!;
|
||||
final user = currentUser;
|
||||
|
@ -148,7 +150,7 @@ class StaticTearOffClosureTracerVisitor extends ClosureTracerVisitor {
|
|||
: super([tracedElement], tracedType, inferrer);
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
super.visitStaticCallSiteTypeInformation(info);
|
||||
|
||||
final selector = info.selector;
|
||||
|
|
|
@ -152,12 +152,13 @@ class ListTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
|
||||
void visitClosureCallSiteTypeInformation(
|
||||
ClosureCallSiteTypeInformation info) {
|
||||
bailout('Passed to a closure');
|
||||
}
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
super.visitStaticCallSiteTypeInformation(info);
|
||||
final commonElements = inferrer.closedWorld.commonElements;
|
||||
MemberEntity called = info.calledElement;
|
||||
|
@ -173,7 +174,8 @@ class ListTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
|
||||
void visitDynamicCallSiteTypeInformation(
|
||||
DynamicCallSiteTypeInformation info) {
|
||||
super.visitDynamicCallSiteTypeInformation(info);
|
||||
final selector = info.selector!;
|
||||
String selectorName = selector.name;
|
||||
|
|
|
@ -60,12 +60,13 @@ class MapTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
|
||||
void visitClosureCallSiteTypeInformation(
|
||||
ClosureCallSiteTypeInformation info) {
|
||||
bailout('Passed to a closure');
|
||||
}
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
super.visitStaticCallSiteTypeInformation(info);
|
||||
MemberEntity called = info.calledElement;
|
||||
if (inferrer.closedWorld.commonElements.isForeign(called) &&
|
||||
|
@ -75,7 +76,8 @@ class MapTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
|
||||
void visitDynamicCallSiteTypeInformation(
|
||||
DynamicCallSiteTypeInformation info) {
|
||||
super.visitDynamicCallSiteTypeInformation(info);
|
||||
final selector = info.selector!;
|
||||
final selectorName = selector.name;
|
||||
|
|
|
@ -281,7 +281,7 @@ abstract class TracerVisitor implements TypeInformationVisitor<void> {
|
|||
ClosureCallSiteTypeInformation info) {}
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
MemberEntity called = info.calledElement;
|
||||
TypeInformation inferred = inferrer.types.getInferredTypeOfMember(called);
|
||||
if (inferred == currentUser) {
|
||||
|
|
|
@ -83,12 +83,13 @@ class SetTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info) {
|
||||
void visitClosureCallSiteTypeInformation(
|
||||
ClosureCallSiteTypeInformation info) {
|
||||
bailout('Passed to a closure');
|
||||
}
|
||||
|
||||
@override
|
||||
visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
void visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info) {
|
||||
super.visitStaticCallSiteTypeInformation(info);
|
||||
MemberEntity called = info.calledElement;
|
||||
if (inferrer.closedWorld.commonElements.isForeign(called) &&
|
||||
|
@ -98,7 +99,8 @@ class SetTracerVisitor extends TracerVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) {
|
||||
void visitDynamicCallSiteTypeInformation(
|
||||
DynamicCallSiteTypeInformation info) {
|
||||
super.visitDynamicCallSiteTypeInformation(info);
|
||||
final selector = info.selector!;
|
||||
final selectorName = selector.name;
|
||||
|
|
|
@ -329,7 +329,7 @@ class PlaceholderTypeInformation extends TypeInformation {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => "Placeholder [$hashCode]";
|
||||
String toString() => "Placeholder [$hashCode]";
|
||||
}
|
||||
|
||||
abstract class ParameterInputs implements Iterable<TypeInformation> {
|
||||
|
@ -1682,7 +1682,7 @@ class NarrowTypeInformation extends TypeInformation {
|
|||
}
|
||||
|
||||
@override
|
||||
addInput(TypeInformation info) {
|
||||
void addInput(TypeInformation info) {
|
||||
super.addInput(info);
|
||||
assert(inputs.length == 1);
|
||||
}
|
||||
|
@ -1956,7 +1956,7 @@ class MapTypeInformation extends TypeInformation with TracedTypeInformation {
|
|||
}
|
||||
|
||||
@override
|
||||
addInput(TypeInformation other) {
|
||||
Never addInput(TypeInformation other) {
|
||||
throw "not supported";
|
||||
}
|
||||
|
||||
|
|
|
@ -1077,7 +1077,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitNode(js.Node node, _) {}
|
||||
void visitNode(js.Node node, _) {}
|
||||
|
||||
void _handleFunction(_PositionInfoNode node, js.Node body, int start) {
|
||||
_currentNode.active = _currentNode.active ||
|
||||
|
@ -1111,22 +1111,22 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitFunctionDeclaration(js.FunctionDeclaration node, int start) {
|
||||
void visitFunctionDeclaration(js.FunctionDeclaration node, int start) {
|
||||
visit(node.function);
|
||||
}
|
||||
|
||||
@override
|
||||
visitNamedFunction(js.NamedFunction node, int start) {
|
||||
void visitNamedFunction(js.NamedFunction node, int start) {
|
||||
visit(node.function);
|
||||
}
|
||||
|
||||
@override
|
||||
visitFun(js.Fun node, int start) {
|
||||
void visitFun(js.Fun node, int start) {
|
||||
_handleFunctionExpression(node, start);
|
||||
}
|
||||
|
||||
@override
|
||||
visitArrowFunction(js.ArrowFunction node, int start) {
|
||||
void visitArrowFunction(js.ArrowFunction node, int start) {
|
||||
_handleFunctionExpression(node, start);
|
||||
}
|
||||
|
||||
|
@ -1147,14 +1147,14 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitExpressionStatement(js.ExpressionStatement node, int start) {
|
||||
void visitExpressionStatement(js.ExpressionStatement node, int start) {
|
||||
visitSubexpression(node, node.expression, StepKind.EXPRESSION_STATEMENT,
|
||||
statementOffset: start,
|
||||
offsetPositionMode: OffsetPositionMode.subexpressionParentOffset);
|
||||
}
|
||||
|
||||
@override
|
||||
visitCall(js.Call node, _) {
|
||||
void visitCall(js.Call node, _) {
|
||||
visit(node.target, offsetPositionMode: OffsetPositionMode.invocationTarget);
|
||||
for (js.Node argument in node.arguments) {
|
||||
visit(argument, offsetPositionMode: OffsetPositionMode.resetBefore);
|
||||
|
@ -1179,7 +1179,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitNew(js.New node, _) {
|
||||
void visitNew(js.New node, _) {
|
||||
visit(node.target, offsetPositionMode: OffsetPositionMode.invocationTarget);
|
||||
for (js.Node node in node.arguments) {
|
||||
visit(node, offsetPositionMode: OffsetPositionMode.resetBefore);
|
||||
|
@ -1189,7 +1189,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitAccess(js.PropertyAccess node, _) {
|
||||
void visitAccess(js.PropertyAccess node, _) {
|
||||
final receiverNode = visit(node.receiver);
|
||||
// Technically we'd like to use the offset of the `.` in the property
|
||||
// access, but the js_ast doesn't expose it. Since this is only used to
|
||||
|
@ -1202,7 +1202,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitIf(js.If node, int start) {
|
||||
void visitIf(js.If node, int start) {
|
||||
visitSubexpression(node, node.condition, StepKind.IF_CONDITION,
|
||||
statementOffset: start,
|
||||
offsetPositionMode: OffsetPositionMode.subexpressionParentOffset);
|
||||
|
@ -1219,7 +1219,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitFor(js.For node, int start) {
|
||||
void visitFor(js.For node, int start) {
|
||||
final init = node.init;
|
||||
if (init != null) {
|
||||
visitSubexpression(node, init, StepKind.FOR_INITIALIZER,
|
||||
|
@ -1251,7 +1251,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitWhile(js.While node, int start) {
|
||||
void visitWhile(js.While node, int start) {
|
||||
visitSubexpression(node, node.condition, StepKind.WHILE_CONDITION,
|
||||
statementOffset: start,
|
||||
offsetPositionMode: OffsetPositionMode.subexpressionParentOffset);
|
||||
|
@ -1260,7 +1260,7 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitDo(js.Do node, int start) {
|
||||
void visitDo(js.Do node, int start) {
|
||||
visit(node.body, statementOffset: start);
|
||||
final condition = node.condition;
|
||||
visitSubexpression(node, condition, StepKind.DO_CONDITION,
|
||||
|
@ -1269,13 +1269,13 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitReturn(js.Return node, int start) {
|
||||
void visitReturn(js.Return node, int start) {
|
||||
visit(node.value, statementOffset: start);
|
||||
_currentNode.addNotifyStep(StepKind.RETURN);
|
||||
}
|
||||
|
||||
@override
|
||||
visitThrow(js.Throw node, int start) {
|
||||
void visitThrow(js.Throw node, int start) {
|
||||
// Do not use [offsetPosition] for the subexpression.
|
||||
visit(node.expression,
|
||||
statementOffset: start,
|
||||
|
@ -1284,31 +1284,31 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitContinue(js.Continue node, _) {
|
||||
void visitContinue(js.Continue node, _) {
|
||||
_currentNode.addNotifyStep(StepKind.CONTINUE);
|
||||
}
|
||||
|
||||
@override
|
||||
visitBreak(js.Break node, _) {
|
||||
void visitBreak(js.Break node, _) {
|
||||
_currentNode.addNotifyStep(StepKind.BREAK);
|
||||
}
|
||||
|
||||
@override
|
||||
visitTry(js.Try node, _) {
|
||||
void visitTry(js.Try node, _) {
|
||||
visit(node.body);
|
||||
visit(node.catchPart, branchKind: BranchKind.CATCH);
|
||||
visit(node.finallyPart, branchKind: BranchKind.FINALLY);
|
||||
}
|
||||
|
||||
@override
|
||||
visitConditional(js.Conditional node, _) {
|
||||
void visitConditional(js.Conditional node, _) {
|
||||
visit(node.condition);
|
||||
visit(node.then, branchKind: BranchKind.CONDITION, branchToken: 1);
|
||||
visit(node.otherwise, branchKind: BranchKind.CONDITION, branchToken: 0);
|
||||
}
|
||||
|
||||
@override
|
||||
visitSwitch(js.Switch node, int start) {
|
||||
void visitSwitch(js.Switch node, int start) {
|
||||
visitSubexpression(node, node.key, StepKind.SWITCH_EXPRESSION,
|
||||
statementOffset: start,
|
||||
offsetPositionMode: OffsetPositionMode.subexpressionParentOffset);
|
||||
|
@ -1318,12 +1318,12 @@ class OnlineJavaScriptTracer extends js.BaseVisitor1Void<int>
|
|||
}
|
||||
|
||||
@override
|
||||
visitLabeledStatement(js.LabeledStatement node, int start) {
|
||||
void visitLabeledStatement(js.LabeledStatement node, int start) {
|
||||
visit(node.body, statementOffset: start);
|
||||
}
|
||||
|
||||
@override
|
||||
visitDeferredExpression(js.DeferredExpression node, _) {
|
||||
void visitDeferredExpression(js.DeferredExpression node, _) {
|
||||
visit(node.value);
|
||||
}
|
||||
|
||||
|
|
|
@ -389,7 +389,7 @@ class TypeVariableTypeWithContext implements ir.Node {
|
|||
}
|
||||
|
||||
@override
|
||||
visitChildren(ir.Visitor<Object?> v) {
|
||||
Never visitChildren(ir.Visitor<Object?> v) {
|
||||
throw UnsupportedError('TypeVariableTypeWithContext.visitChildren');
|
||||
}
|
||||
|
||||
|
|
|
@ -62,12 +62,12 @@ class ConstantReference extends ir.TreeNode {
|
|||
}
|
||||
|
||||
@override
|
||||
transformChildren(ir.Transformer v) {
|
||||
Never transformChildren(ir.Transformer v) {
|
||||
throw UnsupportedError("ConstantReference.transformChildren");
|
||||
}
|
||||
|
||||
@override
|
||||
transformOrRemoveChildren(ir.RemovingTransformer v) {
|
||||
Never transformOrRemoveChildren(ir.RemovingTransformer v) {
|
||||
throw UnsupportedError("ConstantReference.transformOrRemoveChildren");
|
||||
}
|
||||
|
||||
|
|
|
@ -1202,32 +1202,32 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedExpression(js.InterpolatedExpression node) {
|
||||
Never visitInterpolatedExpression(js.InterpolatedExpression node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedDeclaration(js.InterpolatedDeclaration node) {
|
||||
Never visitInterpolatedDeclaration(js.InterpolatedDeclaration node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedLiteral(js.InterpolatedLiteral node) {
|
||||
Never visitInterpolatedLiteral(js.InterpolatedLiteral node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedParameter(js.InterpolatedParameter node) {
|
||||
Never visitInterpolatedParameter(js.InterpolatedParameter node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedSelector(js.InterpolatedSelector node) {
|
||||
Never visitInterpolatedSelector(js.InterpolatedSelector node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInterpolatedStatement(js.InterpolatedStatement node) {
|
||||
Never visitInterpolatedStatement(js.InterpolatedStatement node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
|
@ -1254,7 +1254,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
js.Expression visitLiteralBool(js.LiteralBool node) => node;
|
||||
|
||||
@override
|
||||
visitLiteralExpression(js.LiteralExpression node) => unsupported(node);
|
||||
Never visitLiteralExpression(js.LiteralExpression node) => unsupported(node);
|
||||
|
||||
@override
|
||||
js.Expression visitLiteralNull(js.LiteralNull node) => node;
|
||||
|
@ -1263,7 +1263,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
js.Expression visitLiteralNumber(js.LiteralNumber node) => node;
|
||||
|
||||
@override
|
||||
visitLiteralStatement(js.LiteralStatement node) => unsupported(node);
|
||||
Never visitLiteralStatement(js.LiteralStatement node) => unsupported(node);
|
||||
|
||||
@override
|
||||
js.Expression visitLiteralString(js.LiteralString node) => node;
|
||||
|
@ -1280,7 +1280,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitNamedFunction(js.NamedFunction node) {
|
||||
Never visitNamedFunction(js.NamedFunction node) {
|
||||
unsupported(node);
|
||||
}
|
||||
|
||||
|
@ -1288,7 +1288,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
js.Expression visitDeferredExpression(js.DeferredExpression node) => node;
|
||||
|
||||
@override
|
||||
visitDeferredStatement(js.DeferredStatement node) => unsupported(node);
|
||||
Never visitDeferredStatement(js.DeferredStatement node) => unsupported(node);
|
||||
|
||||
@override
|
||||
js.Expression visitDeferredNumber(js.DeferredNumber node) => node;
|
||||
|
@ -1323,7 +1323,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitParameter(js.Parameter node) => unreachable(node);
|
||||
Never visitParameter(js.Parameter node) => unreachable(node);
|
||||
|
||||
@override
|
||||
js.Expression visitPostfix(js.Postfix node) {
|
||||
|
@ -1368,7 +1368,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitProgram(js.Program node) => unsupported(node);
|
||||
Never visitProgram(js.Program node) => unsupported(node);
|
||||
|
||||
@override
|
||||
js.Property visitProperty(js.Property node) {
|
||||
|
@ -1667,7 +1667,7 @@ abstract class AsyncRewriterBase extends js.NodeVisitor<Object?> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitVariableDeclaration(js.VariableDeclaration node) {
|
||||
Never visitVariableDeclaration(js.VariableDeclaration node) {
|
||||
unreachable(node);
|
||||
}
|
||||
|
||||
|
|
|
@ -406,7 +406,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitFunctionDeclaration(FunctionDeclaration declaration) {
|
||||
void visitFunctionDeclaration(FunctionDeclaration declaration) {
|
||||
VarCollector vars = VarCollector();
|
||||
vars.visitFunctionDeclaration(declaration);
|
||||
functionOut(declaration.function, declaration.name, vars);
|
||||
|
@ -440,7 +440,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitVariableDeclarationList(VariableDeclarationList list) {
|
||||
void visitVariableDeclarationList(VariableDeclarationList list) {
|
||||
out('var '); // 'var '
|
||||
final nodes = list.declarations;
|
||||
if (inForInit) {
|
||||
|
@ -472,7 +472,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAssignment(Assignment assignment) {
|
||||
void visitAssignment(Assignment assignment) {
|
||||
/// To print assignments like `a = a + 1` and `a = a + b` compactly as
|
||||
/// `++a` and `a += b` in the face of [DeferredExpression]s we detect the
|
||||
/// pattern of the undeferred assignment.
|
||||
|
@ -529,7 +529,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitVariableInitialization(VariableInitialization initialization) {
|
||||
void visitVariableInitialization(VariableInitialization initialization) {
|
||||
visitNestedExpression(initialization.declaration, Precedence.call,
|
||||
newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
|
||||
if (initialization.value != null) {
|
||||
|
@ -540,7 +540,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitConditional(Conditional cond) {
|
||||
void visitConditional(Conditional cond) {
|
||||
visitNestedExpression(cond.condition, Precedence.logicalOr,
|
||||
newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
|
||||
out('?'); // '?'
|
||||
|
@ -553,7 +553,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitNew(New node) {
|
||||
void visitNew(New node) {
|
||||
out('new'); // 'new'
|
||||
visitNestedExpression(node.target, Precedence.leftHandSide,
|
||||
newInForInit: inForInit, newAtStatementBegin: false);
|
||||
|
@ -564,7 +564,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitCall(Call call) {
|
||||
void visitCall(Call call) {
|
||||
visitNestedExpression(call.target, Precedence.call,
|
||||
newInForInit: inForInit, newAtStatementBegin: atStatementBegin);
|
||||
out('('); // '('
|
||||
|
@ -844,7 +844,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDeferredExpression(DeferredExpression node) {
|
||||
void visitDeferredExpression(DeferredExpression node) {
|
||||
if (node.isFinalized) {
|
||||
// Continue printing with the expression value.
|
||||
assert(node.precedenceLevel == node.value.precedenceLevel);
|
||||
|
@ -855,7 +855,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDeferredStatement(DeferredStatement node) {
|
||||
void visitDeferredStatement(DeferredStatement node) {
|
||||
if (node.isFinalized) {
|
||||
// Continue printing with the statement value.
|
||||
node.statement.accept(this);
|
||||
|
@ -875,7 +875,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDeferredNumber(DeferredNumber node) {
|
||||
void visitDeferredNumber(DeferredNumber node) {
|
||||
if (node.isFinalized) {
|
||||
outputNumberWithRequiredWhitespace("${node.value}");
|
||||
} else {
|
||||
|
@ -884,7 +884,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDeferredString(DeferredString node) {
|
||||
void visitDeferredString(DeferredString node) {
|
||||
if (node.isFinalized) {
|
||||
out(node.value);
|
||||
} else {
|
||||
|
@ -893,7 +893,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLiteralBool(LiteralBool node) {
|
||||
void visitLiteralBool(LiteralBool node) {
|
||||
out(node.value ? '!0' : '!1');
|
||||
}
|
||||
|
||||
|
@ -905,18 +905,18 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitStringConcatenation(StringConcatenation node) {
|
||||
void visitStringConcatenation(StringConcatenation node) {
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
visitName(Name node) {
|
||||
void visitName(Name node) {
|
||||
// For simplicity and stability we use a constant name size estimate.
|
||||
out(sizeEstimate(node));
|
||||
}
|
||||
|
||||
@override
|
||||
visitParentheses(Parentheses node) {
|
||||
void visitParentheses(Parentheses node) {
|
||||
out('('); // '('
|
||||
visitNestedExpression(node.enclosed, Precedence.expression,
|
||||
newInForInit: false, newAtStatementBegin: false);
|
||||
|
@ -924,7 +924,7 @@ class SizeEstimator implements NodeVisitor<void> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLiteralNumber(LiteralNumber node) {
|
||||
void visitLiteralNumber(LiteralNumber node) {
|
||||
outputNumberWithRequiredWhitespace(node.value);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ class StringBackedName extends _NamerName {
|
|||
String get key => name;
|
||||
|
||||
@override
|
||||
operator ==(Object other) {
|
||||
bool operator ==(Object other) {
|
||||
if (other is _NameReference) return this == other._target;
|
||||
if (identical(this, other)) return true;
|
||||
return other is StringBackedName && name == other.name;
|
||||
|
|
|
@ -929,7 +929,8 @@ class _TypeVisitor extends DartTypeVisitor<void, TypeVisitorState> {
|
|||
}
|
||||
|
||||
@override
|
||||
visitFunctionTypeVariable(FunctionTypeVariable type, TypeVisitorState state) {
|
||||
void visitFunctionTypeVariable(
|
||||
FunctionTypeVariable type, TypeVisitorState state) {
|
||||
if (_visitedFunctionTypeVariables.add(type)) {
|
||||
visitType(type.bound, state);
|
||||
}
|
||||
|
|
|
@ -217,7 +217,7 @@ class Collector {
|
|||
}
|
||||
|
||||
void computeNeededStaticNonFinalFields() {
|
||||
addToOutputUnit(FieldEntity element) {
|
||||
void addToOutputUnit(FieldEntity element) {
|
||||
List<FieldEntity> list = outputStaticNonFinalFieldLists.putIfAbsent(
|
||||
_outputUnitData.outputUnitForMember(element), () => []);
|
||||
list.add(element);
|
||||
|
|
|
@ -311,7 +311,7 @@ class JumpVisitor extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
defaultNode(ir.Node node) => node.visitChildren(this);
|
||||
void defaultNode(ir.Node node) => node.visitChildren(this);
|
||||
|
||||
static bool canBeBreakTarget(ir.TreeNode node) {
|
||||
return node is ir.ForStatement ||
|
||||
|
@ -350,7 +350,7 @@ class JumpVisitor extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitBreakStatement(ir.BreakStatement node) {
|
||||
void visitBreakStatement(ir.BreakStatement node) {
|
||||
JJumpTarget target;
|
||||
ir.TreeNode body = node.target.body;
|
||||
ir.TreeNode parent = node.target.parent!;
|
||||
|
@ -442,7 +442,7 @@ class JumpVisitor extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {
|
||||
void visitContinueSwitchStatement(ir.ContinueSwitchStatement node) {
|
||||
JJumpTarget target = _getJumpTarget(node.target);
|
||||
target.isContinueTarget = true;
|
||||
jumpTargetMap[node] = target;
|
||||
|
@ -452,7 +452,7 @@ class JumpVisitor extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitSwitchStatement(ir.SwitchStatement node) {
|
||||
void visitSwitchStatement(ir.SwitchStatement node) {
|
||||
node.expression.accept(this);
|
||||
if (node.cases.isNotEmpty) {
|
||||
// Ensure that [node] has a corresponding target. We generate a break if:
|
||||
|
|
|
@ -297,7 +297,7 @@ class ListGenerateLoopBodyInliner extends CloneVisitorNotMembers {
|
|||
}
|
||||
|
||||
@override
|
||||
visitReturnStatement(ReturnStatement node) {
|
||||
TreeNode visitReturnStatement(ReturnStatement node) {
|
||||
// Do the default for return statements in nested functions.
|
||||
if (functionNestingLevel > 0) return super.visitReturnStatement(node);
|
||||
|
||||
|
@ -342,7 +342,7 @@ class ListGenerateLoopBodyInliner extends CloneVisitorNotMembers {
|
|||
|
||||
/// Nested functions.
|
||||
@override
|
||||
visitFunctionNode(FunctionNode node) {
|
||||
TreeNode visitFunctionNode(FunctionNode node) {
|
||||
functionNestingLevel++;
|
||||
final cloned = super.visitFunctionNode(node);
|
||||
functionNestingLevel--;
|
||||
|
|
|
@ -361,7 +361,7 @@ Output _createOutput(
|
|||
// that is reachable from `main`. Note that all internal libraries that
|
||||
// the compiler relies on are reachable from `dart:core`.
|
||||
var seen = Set<Library>();
|
||||
search(ir.Library current) {
|
||||
void search(ir.Library current) {
|
||||
if (!seen.add(current)) return;
|
||||
for (ir.LibraryDependency dep in current.dependencies) {
|
||||
search(dep.targetLibrary);
|
||||
|
|
|
@ -307,7 +307,7 @@ class _CompilationErrorError {
|
|||
final String message;
|
||||
_CompilationErrorError(this.message);
|
||||
@override
|
||||
toString() => 'Aborted due to --throw-on-error: $message';
|
||||
String toString() => 'Aborted due to --throw-on-error: $message';
|
||||
}
|
||||
|
||||
typedef OnInfo = void Function(String message);
|
||||
|
|
|
@ -7558,14 +7558,14 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
defaultNode(ir.Node node) {
|
||||
void defaultNode(ir.Node node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
visitConstantExpression(ir.ConstantExpression node) {
|
||||
void visitConstantExpression(ir.ConstantExpression node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
ir.Constant constant = node.constant;
|
||||
|
@ -7576,14 +7576,14 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitReturnStatement(ir.ReturnStatement node) {
|
||||
void visitReturnStatement(ir.ReturnStatement node) {
|
||||
registerRegularNode();
|
||||
node.visitChildren(this);
|
||||
seenReturn = true;
|
||||
}
|
||||
|
||||
@override
|
||||
visitThrow(ir.Throw node) {
|
||||
void visitThrow(ir.Throw node) {
|
||||
registerRegularNode();
|
||||
data.hasThrow = true;
|
||||
node.visitChildren(this);
|
||||
|
@ -7598,49 +7598,49 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitForStatement(ir.ForStatement node) {
|
||||
void visitForStatement(ir.ForStatement node) {
|
||||
_handleLoop(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitForInStatement(ir.ForInStatement node) {
|
||||
void visitForInStatement(ir.ForInStatement node) {
|
||||
_handleLoop(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitWhileStatement(ir.WhileStatement node) {
|
||||
void visitWhileStatement(ir.WhileStatement node) {
|
||||
_handleLoop(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitDoStatement(ir.DoStatement node) {
|
||||
void visitDoStatement(ir.DoStatement node) {
|
||||
_handleLoop(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitTryCatch(ir.TryCatch node) {
|
||||
void visitTryCatch(ir.TryCatch node) {
|
||||
data.hasTry = true;
|
||||
}
|
||||
|
||||
@override
|
||||
visitTryFinally(ir.TryFinally node) {
|
||||
void visitTryFinally(ir.TryFinally node) {
|
||||
data.hasTry = true;
|
||||
}
|
||||
|
||||
@override
|
||||
visitFunctionExpression(ir.FunctionExpression node) {
|
||||
void visitFunctionExpression(ir.FunctionExpression node) {
|
||||
registerRegularNode();
|
||||
data.hasClosure = true;
|
||||
}
|
||||
|
||||
@override
|
||||
visitFunctionDeclaration(ir.FunctionDeclaration node) {
|
||||
void visitFunctionDeclaration(ir.FunctionDeclaration node) {
|
||||
registerRegularNode();
|
||||
data.hasClosure = true;
|
||||
}
|
||||
|
||||
@override
|
||||
visitFunctionNode(ir.FunctionNode node) {
|
||||
void visitFunctionNode(ir.FunctionNode node) {
|
||||
if (node.asyncMarker != ir.AsyncMarker.Sync) {
|
||||
data.hasAsyncAwait = true;
|
||||
}
|
||||
|
@ -7655,7 +7655,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitConditionalExpression(ir.ConditionalExpression node) {
|
||||
void visitConditionalExpression(ir.ConditionalExpression node) {
|
||||
// Heuristic: In "parameter ? A : B" there is a high probability that
|
||||
// parameter is a constant. Assuming the parameter is constant, we can
|
||||
// compute a count that is bounded by the largest arm rather than the sum of
|
||||
|
@ -7684,13 +7684,13 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAssertInitializer(ir.AssertInitializer node) {
|
||||
void visitAssertInitializer(ir.AssertInitializer node) {
|
||||
if (!enableUserAssertions) return;
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
visitAssertStatement(ir.AssertStatement node) {
|
||||
void visitAssertStatement(ir.AssertStatement node) {
|
||||
if (!enableUserAssertions) return;
|
||||
defaultNode(node);
|
||||
}
|
||||
|
@ -7700,25 +7700,25 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitEmptyStatement(ir.EmptyStatement node) {
|
||||
void visitEmptyStatement(ir.EmptyStatement node) {
|
||||
registerRegularNode();
|
||||
}
|
||||
|
||||
@override
|
||||
visitExpressionStatement(ir.ExpressionStatement node) {
|
||||
void visitExpressionStatement(ir.ExpressionStatement node) {
|
||||
registerRegularNode();
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
visitLabeledStatement(ir.LabeledStatement node) {
|
||||
void visitLabeledStatement(ir.LabeledStatement node) {
|
||||
registerRegularNode();
|
||||
data.hasLabel = true;
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
||||
@override
|
||||
visitSwitchStatement(ir.SwitchStatement node) {
|
||||
void visitSwitchStatement(ir.SwitchStatement node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
// Don't visit 'SwitchStatement.expressionType'.
|
||||
|
@ -7727,7 +7727,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitBlock(ir.Block node) {
|
||||
void visitBlock(ir.Block node) {
|
||||
registerRegularNode();
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
@ -7737,7 +7737,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
bool isLongString(String value) => value.length > 14;
|
||||
|
||||
@override
|
||||
visitStringLiteral(ir.StringLiteral node) {
|
||||
void visitStringLiteral(ir.StringLiteral node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
// Avoid copying long strings into call site.
|
||||
|
@ -7747,7 +7747,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceGet(ir.InstanceGet node) {
|
||||
void visitInstanceGet(ir.InstanceGet node) {
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7756,7 +7756,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceTearOff(ir.InstanceTearOff node) {
|
||||
void visitInstanceTearOff(ir.InstanceTearOff node) {
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7765,7 +7765,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicGet(ir.DynamicGet node) {
|
||||
void visitDynamicGet(ir.DynamicGet node) {
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7774,7 +7774,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceSet(ir.InstanceSet node) {
|
||||
void visitInstanceSet(ir.InstanceSet node) {
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7784,7 +7784,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicSet(ir.DynamicSet node) {
|
||||
void visitDynamicSet(ir.DynamicSet node) {
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7794,7 +7794,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitVariableGet(ir.VariableGet node) {
|
||||
void visitVariableGet(ir.VariableGet node) {
|
||||
if (discountParameters && node.variable.parent is ir.FunctionNode) return;
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
|
@ -7802,13 +7802,13 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitThisExpression(ir.ThisExpression node) {
|
||||
void visitThisExpression(ir.ThisExpression node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
}
|
||||
|
||||
@override
|
||||
visitStaticGet(ir.StaticGet node) {
|
||||
void visitStaticGet(ir.StaticGet node) {
|
||||
// Assume lazy-init static, loaded via a call: `$.$get$foo()`.
|
||||
registerCall();
|
||||
registerRegularNode();
|
||||
|
@ -7816,7 +7816,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitConstructorInvocation(ir.ConstructorInvocation node) {
|
||||
void visitConstructorInvocation(ir.ConstructorInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
if (node.isConst) {
|
||||
|
@ -7829,7 +7829,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitStaticInvocation(ir.StaticInvocation node) {
|
||||
void visitStaticInvocation(ir.StaticInvocation node) {
|
||||
registerRegularNode();
|
||||
if (node.isConst) {
|
||||
data.hasExternalConstantConstructorCall = true;
|
||||
|
@ -7842,7 +7842,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceInvocation(ir.InstanceInvocation node) {
|
||||
void visitInstanceInvocation(ir.InstanceInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7852,7 +7852,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceGetterInvocation(ir.InstanceGetterInvocation node) {
|
||||
void visitInstanceGetterInvocation(ir.InstanceGetterInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7862,7 +7862,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitDynamicInvocation(ir.DynamicInvocation node) {
|
||||
void visitDynamicInvocation(ir.DynamicInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7872,7 +7872,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitFunctionInvocation(ir.FunctionInvocation node) {
|
||||
void visitFunctionInvocation(ir.FunctionInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7882,7 +7882,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLocalFunctionInvocation(ir.LocalFunctionInvocation node) {
|
||||
void visitLocalFunctionInvocation(ir.LocalFunctionInvocation node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7893,14 +7893,14 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitEqualsNull(ir.EqualsNull node) {
|
||||
void visitEqualsNull(ir.EqualsNull node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
visit(node.expression);
|
||||
}
|
||||
|
||||
@override
|
||||
visitEqualsCall(ir.EqualsCall node) {
|
||||
void visitEqualsCall(ir.EqualsCall node) {
|
||||
registerRegularNode();
|
||||
registerReductiveNode();
|
||||
registerCall();
|
||||
|
@ -7934,7 +7934,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAsExpression(ir.AsExpression node) {
|
||||
void visitAsExpression(ir.AsExpression node) {
|
||||
registerRegularNode();
|
||||
visit(node.operand);
|
||||
skipReductiveNodes(() => visit(node.type));
|
||||
|
@ -7944,7 +7944,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitVariableDeclaration(ir.VariableDeclaration node) {
|
||||
void visitVariableDeclaration(ir.VariableDeclaration node) {
|
||||
registerRegularNode();
|
||||
skipReductiveNodes(() {
|
||||
visitList(node.annotations);
|
||||
|
@ -7959,7 +7959,7 @@ class InlineWeeder extends ir.VisitorDefault<void> with ir.VisitorVoidMixin {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIfStatement(ir.IfStatement node) {
|
||||
void visitIfStatement(ir.IfStatement node) {
|
||||
registerRegularNode();
|
||||
node.visitChildren(this);
|
||||
data.hasIf = true;
|
||||
|
@ -8112,7 +8112,7 @@ class InlineWeederBodyClosure extends ir.VisitorDefault<void>
|
|||
InlineWeederBodyClosure();
|
||||
|
||||
@override
|
||||
defaultNode(ir.Node node) {
|
||||
void defaultNode(ir.Node node) {
|
||||
if (tooDifficult) return;
|
||||
node.visitChildren(this);
|
||||
}
|
||||
|
|
|
@ -1436,7 +1436,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLateValue(HLateValue node) {
|
||||
void visitLateValue(HLateValue node) {
|
||||
use(node.target);
|
||||
}
|
||||
|
||||
|
@ -1495,38 +1495,38 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIdentity(HIdentity node) {
|
||||
void visitIdentity(HIdentity node) {
|
||||
emitIdentityComparison(node, node.sourceInformation, inverse: false);
|
||||
}
|
||||
|
||||
@override
|
||||
visitAdd(HAdd node) => visitInvokeBinary(node, '+');
|
||||
void visitAdd(HAdd node) => visitInvokeBinary(node, '+');
|
||||
@override
|
||||
visitDivide(HDivide node) => visitInvokeBinary(node, '/');
|
||||
void visitDivide(HDivide node) => visitInvokeBinary(node, '/');
|
||||
@override
|
||||
visitMultiply(HMultiply node) => visitInvokeBinary(node, '*');
|
||||
void visitMultiply(HMultiply node) => visitInvokeBinary(node, '*');
|
||||
@override
|
||||
visitSubtract(HSubtract node) => visitInvokeBinary(node, '-');
|
||||
void visitSubtract(HSubtract node) => visitInvokeBinary(node, '-');
|
||||
@override
|
||||
visitBitAnd(HBitAnd node) => visitBitInvokeBinary(node, '&');
|
||||
void visitBitAnd(HBitAnd node) => visitBitInvokeBinary(node, '&');
|
||||
|
||||
@override
|
||||
visitBitOr(HBitOr node) => visitBitInvokeBinary(node, '|');
|
||||
void visitBitOr(HBitOr node) => visitBitInvokeBinary(node, '|');
|
||||
@override
|
||||
visitBitXor(HBitXor node) => visitBitInvokeBinary(node, '^');
|
||||
void visitBitXor(HBitXor node) => visitBitInvokeBinary(node, '^');
|
||||
@override
|
||||
visitShiftLeft(HShiftLeft node) => visitBitInvokeBinary(node, '<<');
|
||||
void visitShiftLeft(HShiftLeft node) => visitBitInvokeBinary(node, '<<');
|
||||
@override
|
||||
visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>>');
|
||||
void visitShiftRight(HShiftRight node) => visitBitInvokeBinary(node, '>>>');
|
||||
|
||||
@override
|
||||
visitBitNot(HBitNot node) {
|
||||
void visitBitNot(HBitNot node) {
|
||||
visitInvokeUnary(node, '~');
|
||||
if (node.requiresUintConversion) convertBitOpResultToUnsigned(node);
|
||||
}
|
||||
|
||||
@override
|
||||
visitTruncatingDivide(HTruncatingDivide node) {
|
||||
void visitTruncatingDivide(HTruncatingDivide node) {
|
||||
assert(node.isUInt31(_abstractValueDomain).isDefinitelyTrue);
|
||||
// TODO(karlklose): Enable this assertion again when type propagation is
|
||||
// fixed. Issue 23555.
|
||||
|
@ -1542,15 +1542,15 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitRemainder(HRemainder node) {
|
||||
void visitRemainder(HRemainder node) {
|
||||
return visitInvokeBinary(node, '%');
|
||||
}
|
||||
|
||||
@override
|
||||
visitNegate(HNegate node) => visitInvokeUnary(node, '-');
|
||||
void visitNegate(HNegate node) => visitInvokeUnary(node, '-');
|
||||
|
||||
@override
|
||||
visitAbs(HAbs node) {
|
||||
void visitAbs(HAbs node) {
|
||||
use(node.operand);
|
||||
push(js
|
||||
.js('Math.abs(#)', pop())
|
||||
|
@ -1558,21 +1558,21 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLess(HLess node) => visitRelational(node, '<');
|
||||
void visitLess(HLess node) => visitRelational(node, '<');
|
||||
@override
|
||||
visitLessEqual(HLessEqual node) => visitRelational(node, '<=');
|
||||
void visitLessEqual(HLessEqual node) => visitRelational(node, '<=');
|
||||
@override
|
||||
visitGreater(HGreater node) => visitRelational(node, '>');
|
||||
void visitGreater(HGreater node) => visitRelational(node, '>');
|
||||
@override
|
||||
visitGreaterEqual(HGreaterEqual node) => visitRelational(node, '>=');
|
||||
void visitGreaterEqual(HGreaterEqual node) => visitRelational(node, '>=');
|
||||
|
||||
@override
|
||||
visitExit(HExit node) {
|
||||
void visitExit(HExit node) {
|
||||
// Don't do anything.
|
||||
}
|
||||
|
||||
@override
|
||||
visitGoto(HGoto node) {
|
||||
void visitGoto(HGoto node) {
|
||||
HBasicBlock block = node.block!;
|
||||
assert(block.successors.length == 1);
|
||||
List<HBasicBlock> dominated = block.dominatedBlocks;
|
||||
|
@ -1593,7 +1593,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLoopBranch(HLoopBranch node) {
|
||||
void visitLoopBranch(HLoopBranch node) {
|
||||
assert(node.block == subGraph!.end);
|
||||
// We are generating code for a loop condition.
|
||||
// If we are generating the subgraph as an expression, the
|
||||
|
@ -1606,7 +1606,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitBreak(HBreak node) {
|
||||
void visitBreak(HBreak node) {
|
||||
assert(node.block!.successors.length == 1);
|
||||
if (node.label != null) {
|
||||
LabelDefinition label = node.label!;
|
||||
|
@ -1633,7 +1633,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitContinue(HContinue node) {
|
||||
void visitContinue(HContinue node) {
|
||||
assert(node.block!.successors.length == 1);
|
||||
if (node.label != null) {
|
||||
LabelDefinition label = node.label!;
|
||||
|
@ -1661,7 +1661,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitExitTry(HExitTry node) {
|
||||
void visitExitTry(HExitTry node) {
|
||||
// An [HExitTry] is used to represent the control flow graph of a
|
||||
// try/catch block, ie the try body is always a predecessor
|
||||
// of the catch and finally. Here, we continue visiting the try
|
||||
|
@ -1671,7 +1671,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitTry(HTry node) {
|
||||
void visitTry(HTry node) {
|
||||
// We should never get here. Try/catch/finally is always handled using block
|
||||
// information in [visitTryInfo].
|
||||
failedAt(node, 'visitTry should not be called.');
|
||||
|
@ -1770,7 +1770,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIf(HIf node) {
|
||||
void visitIf(HIf node) {
|
||||
_metrics.countHIf++;
|
||||
HInstruction condition = node.inputs[0];
|
||||
if (condition is HConstant) _metrics.countHIfConstant++;
|
||||
|
@ -1835,7 +1835,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
|
||||
void visitInvokeDynamicMethod(HInvokeDynamicMethod node) {
|
||||
_updateInvokeMetrics(node);
|
||||
use(node.receiver);
|
||||
js.Expression object = pop();
|
||||
|
@ -2037,7 +2037,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeDynamicSetter(HInvokeDynamicSetter node) {
|
||||
void visitInvokeDynamicSetter(HInvokeDynamicSetter node) {
|
||||
_updateInvokeMetrics(node);
|
||||
use(node.receiver);
|
||||
js.Name name = _namer.invocationName(node.selector);
|
||||
|
@ -2048,7 +2048,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
|
||||
void visitInvokeDynamicGetter(HInvokeDynamicGetter node) {
|
||||
_updateInvokeMetrics(node);
|
||||
use(node.receiver);
|
||||
js.Name name = _namer.invocationName(node.selector);
|
||||
|
@ -2059,7 +2059,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeClosure(HInvokeClosure node) {
|
||||
void visitInvokeClosure(HInvokeClosure node) {
|
||||
Selector call = Selector.callClosureFrom(node.selector);
|
||||
use(node.receiver);
|
||||
push(js
|
||||
|
@ -2073,7 +2073,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeStatic(HInvokeStatic node) {
|
||||
void visitInvokeStatic(HInvokeStatic node) {
|
||||
// TODO(48820): Refactor HInvokeStatic so that the element has static type
|
||||
// FunctionEntity (`element` can be a FieldEntity in subclass HInvokeSuper,
|
||||
// so possibly make HInvokeSuper and HInvokeStatic extend a common
|
||||
|
@ -2190,7 +2190,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInvokeSuper(HInvokeSuper node) {
|
||||
void visitInvokeSuper(HInvokeSuper node) {
|
||||
MemberEntity superElement = node.element;
|
||||
Selector selector = node.selector;
|
||||
bool useAliasedSuper = canUseAliasedSuperMember(superElement, selector);
|
||||
|
@ -2280,14 +2280,14 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitFieldGet(HFieldGet node) {
|
||||
void visitFieldGet(HFieldGet node) {
|
||||
_metrics.countHFieldGet++;
|
||||
use(node.receiver);
|
||||
push(_loadField(pop(), node.element, node.sourceInformation));
|
||||
}
|
||||
|
||||
@override
|
||||
visitFieldSet(HFieldSet node) {
|
||||
void visitFieldSet(HFieldSet node) {
|
||||
FieldEntity element = node.element;
|
||||
_registry.registerStaticUse(StaticUse.fieldSet(element));
|
||||
js.Name name = _namer.instanceFieldPropertyName(element);
|
||||
|
@ -2302,7 +2302,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitGetLength(HGetLength node) {
|
||||
void visitGetLength(HGetLength node) {
|
||||
_metrics.countHGetLength++;
|
||||
use(node.receiver);
|
||||
push(js.PropertyAccess.field(pop(), 'length')
|
||||
|
@ -2310,7 +2310,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitReadModifyWrite(HReadModifyWrite node) {
|
||||
void visitReadModifyWrite(HReadModifyWrite node) {
|
||||
FieldEntity element = node.element;
|
||||
_registry.registerStaticUse(StaticUse.fieldGet(element));
|
||||
_registry.registerStaticUse(StaticUse.fieldSet(element));
|
||||
|
@ -2332,26 +2332,26 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitFunctionReference(HFunctionReference node) {
|
||||
void visitFunctionReference(HFunctionReference node) {
|
||||
FunctionEntity element = node.element;
|
||||
_registry.registerStaticUse(StaticUse.implicitInvoke(element));
|
||||
push(_emitter.staticFunctionAccess(element));
|
||||
}
|
||||
|
||||
@override
|
||||
visitLocalGet(HLocalGet node) {
|
||||
void visitLocalGet(HLocalGet node) {
|
||||
use(node.receiver);
|
||||
}
|
||||
|
||||
@override
|
||||
visitLocalSet(HLocalSet node) {
|
||||
void visitLocalSet(HLocalSet node) {
|
||||
use(node.value);
|
||||
assignVariable(
|
||||
variableNames.getName(node.receiver)!, pop(), node.sourceInformation);
|
||||
}
|
||||
|
||||
@override
|
||||
visitInvokeExternal(HInvokeExternal node) {
|
||||
void visitInvokeExternal(HInvokeExternal node) {
|
||||
FunctionEntity target = node.element;
|
||||
List<HInstruction> inputs = node.inputs;
|
||||
|
||||
|
@ -2441,7 +2441,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitForeignCode(HForeignCode node) {
|
||||
void visitForeignCode(HForeignCode node) {
|
||||
List<HInstruction> inputs = node.inputs;
|
||||
if (node.isJsStatement()) {
|
||||
List<js.Expression> interpolatedExpressions = [];
|
||||
|
@ -2468,7 +2468,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitCreate(HCreate node) {
|
||||
void visitCreate(HCreate node) {
|
||||
js.Expression jsClassReference = _emitter.constructorAccess(node.element);
|
||||
List<js.Expression> arguments = visitArguments(node.inputs, start: 0);
|
||||
push(js.New(jsClassReference, arguments)
|
||||
|
@ -2495,7 +2495,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitCreateBox(HCreateBox node) {
|
||||
void visitCreateBox(HCreateBox node) {
|
||||
push(js.ObjectInitializer([]));
|
||||
}
|
||||
|
||||
|
@ -2521,7 +2521,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitConstant(HConstant node) {
|
||||
void visitConstant(HConstant node) {
|
||||
assert(isGenerateAtUseSite(node));
|
||||
generateConstant(node.constant, node.sourceInformation);
|
||||
|
||||
|
@ -2534,7 +2534,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitNot(HNot node) {
|
||||
void visitNot(HNot node) {
|
||||
assert(node.inputs.length == 1);
|
||||
generateNot(node.inputs[0], node.sourceInformation);
|
||||
}
|
||||
|
@ -2595,7 +2595,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitParameterValue(HParameterValue node) {
|
||||
void visitParameterValue(HParameterValue node) {
|
||||
assert(!isGenerateAtUseSite(node));
|
||||
String name = variableNames.getName(node)!;
|
||||
parameters.add(js.Parameter(name));
|
||||
|
@ -2603,14 +2603,14 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitLocalValue(HLocalValue node) {
|
||||
void visitLocalValue(HLocalValue node) {
|
||||
assert(!isGenerateAtUseSite(node));
|
||||
String name = variableNames.getName(node)!;
|
||||
collectedVariableDeclarations.add(name);
|
||||
}
|
||||
|
||||
@override
|
||||
visitPhi(HPhi node) {
|
||||
void visitPhi(HPhi node) {
|
||||
// This method is only called for phis that are generated at use
|
||||
// site. A phi can be generated at use site only if it is the
|
||||
// result of a control flow operation.
|
||||
|
@ -2642,7 +2642,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitReturn(HReturn node) {
|
||||
void visitReturn(HReturn node) {
|
||||
if (node.inputs.isEmpty) {
|
||||
pushStatement(js.Return().withSourceInformation(node.sourceInformation));
|
||||
} else {
|
||||
|
@ -2653,12 +2653,12 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitThis(HThis node) {
|
||||
void visitThis(HThis node) {
|
||||
push(js.This());
|
||||
}
|
||||
|
||||
@override
|
||||
visitThrow(HThrow node) {
|
||||
void visitThrow(HThrow node) {
|
||||
SourceInformation? sourceInformation = node.sourceInformation;
|
||||
if (node.isRethrow) {
|
||||
use(node.inputs[0]);
|
||||
|
@ -2672,27 +2672,27 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAwait(HAwait node) {
|
||||
void visitAwait(HAwait node) {
|
||||
use(node.inputs[0]);
|
||||
push(js.Await(pop()).withSourceInformation(node.sourceInformation));
|
||||
}
|
||||
|
||||
@override
|
||||
visitYield(HYield node) {
|
||||
void visitYield(HYield node) {
|
||||
use(node.inputs[0]);
|
||||
pushStatement(js.DartYield(pop(), node.hasStar)
|
||||
.withSourceInformation(node.sourceInformation));
|
||||
}
|
||||
|
||||
@override
|
||||
visitRangeConversion(HRangeConversion node) {
|
||||
void visitRangeConversion(HRangeConversion node) {
|
||||
// Range conversion instructions are removed by the value range
|
||||
// analyzer.
|
||||
assert(false);
|
||||
}
|
||||
|
||||
@override
|
||||
visitBoundsCheck(HBoundsCheck node) {
|
||||
void visitBoundsCheck(HBoundsCheck node) {
|
||||
// TODO(ngeoffray): Separate the two checks of the bounds check, so,
|
||||
// e.g., the zero checks can be shared if possible.
|
||||
|
||||
|
@ -2829,7 +2829,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitThrowExpression(HThrowExpression node) {
|
||||
void visitThrowExpression(HThrowExpression node) {
|
||||
use(node.inputs[0]);
|
||||
_pushCallStatic(
|
||||
_commonElements.throwExpressionHelper, [pop()], node.sourceInformation);
|
||||
|
@ -3159,7 +3159,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIsTest(HIsTest node) {
|
||||
void visitIsTest(HIsTest node) {
|
||||
_metrics.countHIsTest++;
|
||||
_registry.registerTypeUse(TypeUse.isCheck(node.dartType));
|
||||
|
||||
|
@ -3176,7 +3176,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIsTestSimple(HIsTestSimple node) {
|
||||
void visitIsTestSimple(HIsTestSimple node) {
|
||||
_metrics.countHIsTestSimple++;
|
||||
_emitIsTestSimple(node);
|
||||
}
|
||||
|
@ -3237,7 +3237,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAsCheck(HAsCheck node) {
|
||||
void visitAsCheck(HAsCheck node) {
|
||||
use(node.typeInput);
|
||||
js.Expression first = pop();
|
||||
use(node.checkedInput);
|
||||
|
@ -3253,7 +3253,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitAsCheckSimple(HAsCheckSimple node) {
|
||||
void visitAsCheckSimple(HAsCheckSimple node) {
|
||||
use(node.checkedInput);
|
||||
FunctionEntity method = node.method;
|
||||
_registry.registerStaticUse(
|
||||
|
@ -3264,12 +3264,12 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitSubtypeCheck(HSubtypeCheck node) {
|
||||
Never visitSubtypeCheck(HSubtypeCheck node) {
|
||||
throw UnimplementedError('SsaCodeGenerator.visitSubtypeCheck $node');
|
||||
}
|
||||
|
||||
@override
|
||||
visitLoadType(HLoadType node) {
|
||||
void visitLoadType(HLoadType node) {
|
||||
// 'findType' will be called somewhere to initialize the type reference.
|
||||
_registry.registerStaticUse(StaticUse.staticInvoke(
|
||||
_commonElements.findType, CallStructure.ONE_ARG));
|
||||
|
@ -3279,7 +3279,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitInstanceEnvironment(HInstanceEnvironment node) {
|
||||
void visitInstanceEnvironment(HInstanceEnvironment node) {
|
||||
HInstruction input = node.inputs.single;
|
||||
use(input);
|
||||
js.Expression receiver = pop();
|
||||
|
@ -3340,7 +3340,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitTypeEval(HTypeEval node) {
|
||||
void visitTypeEval(HTypeEval node) {
|
||||
// Call `env._eval("recipe")`.
|
||||
use(node.inputs[0]);
|
||||
js.Expression environment = pop();
|
||||
|
@ -3404,7 +3404,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitTypeBind(HTypeBind node) {
|
||||
void visitTypeBind(HTypeBind node) {
|
||||
// Call `env1._bind(env2)`.
|
||||
assert(node.inputs.length == 2);
|
||||
use(node.inputs[0]);
|
||||
|
@ -3437,7 +3437,7 @@ class SsaCodeGenerator implements HVisitor<void>, HBlockInformationVisitor {
|
|||
}
|
||||
|
||||
@override
|
||||
visitIsLateSentinel(HIsLateSentinel node) {
|
||||
void visitIsLateSentinel(HIsLateSentinel node) {
|
||||
_metrics.countHIsLateSentinel++;
|
||||
_emitIsLateSentinel(node.inputs.single, node.sourceInformation);
|
||||
}
|
||||
|
|
|
@ -228,20 +228,20 @@ class SsaInstructionSelection extends HBaseVisitor<HInstruction?>
|
|||
.isPotentiallyTrue;
|
||||
|
||||
@override
|
||||
visitBinaryBitOp(HBinaryBitOp node) {
|
||||
HBinaryBitOp visitBinaryBitOp(HBinaryBitOp node) {
|
||||
node.requiresUintConversion = _requiresUintConversion(node);
|
||||
return node;
|
||||
}
|
||||
|
||||
@override
|
||||
visitShiftRight(HShiftRight node) {
|
||||
HShiftRight visitShiftRight(HShiftRight node) {
|
||||
// HShiftRight is JavaScript's `>>>` operation so result is always unsigned.
|
||||
node.requiresUintConversion = false;
|
||||
return node;
|
||||
}
|
||||
|
||||
@override
|
||||
visitBitNot(HBitNot node) {
|
||||
HBitNot visitBitNot(HBitNot node) {
|
||||
node.requiresUintConversion = _requiresUintConversion(node);
|
||||
return node;
|
||||
}
|
||||
|
@ -450,7 +450,7 @@ class SsaInstructionSelection extends HBaseVisitor<HInstruction?>
|
|||
}
|
||||
|
||||
@override
|
||||
visitIf(HIf node) {
|
||||
HIf visitIf(HIf node) {
|
||||
if (!_options.experimentToBoolean) return node;
|
||||
HInstruction condition = node.inputs.single;
|
||||
// if (x != null) --> if (x)
|
||||
|
|
|
@ -370,7 +370,7 @@ class SsaSimplifyInterceptors extends HBaseVisitor<bool>
|
|||
// print(x.length); //
|
||||
// }
|
||||
|
||||
finishInvoke(HInvoke invoke, Selector selector) {
|
||||
void finishInvoke(HInvoke invoke, Selector selector) {
|
||||
HInstruction callReceiver = invoke.getDartReceiver(_closedWorld)!;
|
||||
if (receiver.nonCheck() == callReceiver.nonCheck()) {
|
||||
Set<ClassEntity> interceptedClasses = _interceptorData
|
||||
|
|
|
@ -709,5 +709,5 @@ class SyntheticLocal extends Local {
|
|||
SyntheticLocal(this.name, this.executableContext, this.memberContext);
|
||||
|
||||
@override
|
||||
toString() => 'SyntheticLocal($name)';
|
||||
String toString() => 'SyntheticLocal($name)';
|
||||
}
|
||||
|
|
|
@ -418,7 +418,7 @@ class HGraph {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'HGraph($element)';
|
||||
String toString() => 'HGraph($element)';
|
||||
}
|
||||
|
||||
class HBaseVisitor<R> extends HGraphVisitor implements HVisitor<R> {
|
||||
|
@ -1051,7 +1051,7 @@ class HBasicBlock extends HInstructionList {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'HBasicBlock($id)';
|
||||
String toString() => 'HBasicBlock($id)';
|
||||
}
|
||||
|
||||
enum _GvnType {
|
||||
|
@ -2027,7 +2027,7 @@ class HInvokeSuper extends HInvokeStatic {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'invoke super: $element';
|
||||
String toString() => 'invoke super: $element';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitInvokeSuper(this);
|
||||
|
||||
|
@ -2816,7 +2816,7 @@ class HBitNot extends HInvokeUnary {
|
|||
class HExit extends HControlFlow {
|
||||
HExit() : super(const []);
|
||||
@override
|
||||
toString() => 'exit';
|
||||
String toString() => 'exit';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitExit(this);
|
||||
}
|
||||
|
@ -2824,7 +2824,7 @@ class HExit extends HControlFlow {
|
|||
class HGoto extends HControlFlow {
|
||||
HGoto() : super(const []);
|
||||
@override
|
||||
toString() => 'goto';
|
||||
String toString() => 'goto';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitGoto(this);
|
||||
}
|
||||
|
@ -2887,7 +2887,7 @@ class HTry extends HControlFlow {
|
|||
HBasicBlock? finallyBlock;
|
||||
HTry() : super(const []);
|
||||
@override
|
||||
toString() => 'try';
|
||||
String toString() => 'try';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitTry(this);
|
||||
HBasicBlock get joinBlock => this.block!.successors.last;
|
||||
|
@ -2901,7 +2901,7 @@ class HTry extends HControlFlow {
|
|||
class HExitTry extends HControlFlow {
|
||||
HExitTry() : super(const []);
|
||||
@override
|
||||
toString() => 'exit try';
|
||||
String toString() => 'exit try';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitExitTry(this);
|
||||
HBasicBlock get bodyTrySuccessor => block!.successors[0];
|
||||
|
@ -2911,7 +2911,7 @@ class HIf extends HConditionalBranch {
|
|||
HBlockFlow? blockInformation = null;
|
||||
HIf(HInstruction condition) : super([condition]);
|
||||
@override
|
||||
toString() => 'if';
|
||||
String toString() => 'if';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitIf(this);
|
||||
|
||||
|
@ -2931,7 +2931,7 @@ class HIf extends HConditionalBranch {
|
|||
class HLoopBranch extends HConditionalBranch {
|
||||
HLoopBranch(HInstruction condition) : super([condition]);
|
||||
@override
|
||||
toString() => 'loop-branch';
|
||||
String toString() => 'loop-branch';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitLoopBranch(this);
|
||||
}
|
||||
|
@ -2942,7 +2942,7 @@ class HConstant extends HInstruction {
|
|||
: super([], constantType);
|
||||
|
||||
@override
|
||||
toString() => 'literal: ${constant.toStructuredText(null)}';
|
||||
String toString() => 'literal: ${constant.toStructuredText(null)}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitConstant(this);
|
||||
|
||||
|
@ -3003,7 +3003,7 @@ class HLocalValue extends HInstruction {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'local ${sourceElement!.name}';
|
||||
String toString() => 'local ${sourceElement!.name}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitLocalValue(this);
|
||||
}
|
||||
|
@ -3036,7 +3036,7 @@ class HParameterValue extends HLocalValue {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'parameter ${sourceElement!.name}';
|
||||
String toString() => 'parameter ${sourceElement!.name}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitParameterValue(this);
|
||||
}
|
||||
|
@ -3095,7 +3095,7 @@ class HPhi extends HInstruction {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'phi $id';
|
||||
String toString() => 'phi $id';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitPhi(this);
|
||||
}
|
||||
|
@ -3196,7 +3196,7 @@ class HReturn extends HControlFlow {
|
|||
this.sourceInformation = sourceInformation;
|
||||
}
|
||||
@override
|
||||
toString() => 'return';
|
||||
String toString() => 'return';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitReturn(this);
|
||||
}
|
||||
|
@ -3208,7 +3208,7 @@ class HThrowExpression extends HInstruction {
|
|||
this.sourceInformation = sourceInformation;
|
||||
}
|
||||
@override
|
||||
toString() => 'throw expression';
|
||||
String toString() => 'throw expression';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitThrowExpression(this);
|
||||
@override
|
||||
|
@ -3218,7 +3218,7 @@ class HThrowExpression extends HInstruction {
|
|||
class HAwait extends HInstruction {
|
||||
HAwait(HInstruction value, AbstractValue type) : super([value], type);
|
||||
@override
|
||||
toString() => 'await';
|
||||
String toString() => 'await';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitAwait(this);
|
||||
// An await will throw if its argument is not a real future.
|
||||
|
@ -3236,7 +3236,7 @@ class HYield extends HInstruction {
|
|||
}
|
||||
bool hasStar;
|
||||
@override
|
||||
toString() => 'yield';
|
||||
String toString() => 'yield';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitYield(this);
|
||||
@override
|
||||
|
@ -3253,7 +3253,7 @@ class HThrow extends HControlFlow {
|
|||
this.sourceInformation = sourceInformation;
|
||||
}
|
||||
@override
|
||||
toString() => 'throw';
|
||||
String toString() => 'throw';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitThrow(this);
|
||||
}
|
||||
|
@ -3276,7 +3276,7 @@ class HStatic extends HInstruction {
|
|||
this.sourceInformation = sourceInformation;
|
||||
}
|
||||
@override
|
||||
toString() => 'static ${element.name}';
|
||||
String toString() => 'static ${element.name}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitStatic(this);
|
||||
|
||||
|
@ -3390,7 +3390,7 @@ class HLazyStatic extends HInstruction {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'lazy static ${element.name}';
|
||||
String toString() => 'lazy static ${element.name}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitLazyStatic(this);
|
||||
|
||||
|
@ -3411,7 +3411,7 @@ class HStaticStore extends HInstruction {
|
|||
sideEffects.setChangesStaticProperty();
|
||||
}
|
||||
@override
|
||||
toString() => 'static store ${element.name}';
|
||||
String toString() => 'static store ${element.name}';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitStaticStore(this);
|
||||
|
||||
|
@ -3431,7 +3431,7 @@ class HLiteralList extends HInstruction {
|
|||
HLiteralList(List<HInstruction> inputs, AbstractValue type)
|
||||
: super(inputs, type);
|
||||
@override
|
||||
toString() => 'literal list';
|
||||
String toString() => 'literal list';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitLiteralList(this);
|
||||
|
||||
|
@ -3561,7 +3561,7 @@ class HLateValue extends HLateInstruction {
|
|||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitLateValue(this);
|
||||
@override
|
||||
toString() => 'HLateValue($target)';
|
||||
String toString() => 'HLateValue($target)';
|
||||
}
|
||||
|
||||
enum PrimitiveCheckKind {
|
||||
|
@ -3676,7 +3676,7 @@ class HBoolConversion extends HCheck {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() => 'HBoolConversion($checkedInput)';
|
||||
String toString() => 'HBoolConversion($checkedInput)';
|
||||
}
|
||||
|
||||
/// A check that the input is not null. This corresponds to the postfix
|
||||
|
@ -3720,7 +3720,7 @@ class HNullCheck extends HCheck {
|
|||
}
|
||||
|
||||
@override
|
||||
toString() {
|
||||
String toString() {
|
||||
String fieldString = field == null ? '' : ', $field';
|
||||
String selectorString = selector == null ? '' : ', $selector';
|
||||
return 'HNullCheck($checkedInput$fieldString$selectorString)';
|
||||
|
@ -3868,7 +3868,7 @@ class HTypeKnown extends HCheck {
|
|||
super([input, witness], knownType);
|
||||
|
||||
@override
|
||||
toString() => 'TypeKnown $knownType';
|
||||
String toString() => 'TypeKnown $knownType';
|
||||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitTypeKnown(this);
|
||||
|
||||
|
@ -3933,7 +3933,7 @@ class HStringConcat extends HInstruction {
|
|||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitStringConcat(this);
|
||||
@override
|
||||
toString() => "string concat";
|
||||
String toString() => "string concat";
|
||||
|
||||
@override
|
||||
_GvnType get _gvnType => _GvnType.stringConcat;
|
||||
|
@ -3966,7 +3966,7 @@ class HStringify extends HInstruction {
|
|||
@override
|
||||
R accept<R>(HVisitor<R> visitor) => visitor.visitStringify(this);
|
||||
@override
|
||||
toString() => "stringify";
|
||||
String toString() => "stringify";
|
||||
|
||||
@override
|
||||
_GvnType get _gvnType => _GvnType.stringify;
|
||||
|
|
|
@ -3719,7 +3719,7 @@ class SsaLoadElimination extends HBaseVisitor<void>
|
|||
}
|
||||
|
||||
@override
|
||||
visitTry(HTry instruction) {
|
||||
void visitTry(HTry instruction) {
|
||||
final impreciseBlocks = _blocksWithImprecisePredecessors ??= {};
|
||||
if (instruction.catchBlock != null) {
|
||||
impreciseBlocks[instruction.catchBlock!] = instruction;
|
||||
|
|
|
@ -265,7 +265,7 @@ class Setlet<E> extends SetBase<E> {
|
|||
}
|
||||
|
||||
@override
|
||||
clear() {
|
||||
void clear() {
|
||||
_contents = _MARKER;
|
||||
_extra = null;
|
||||
}
|
||||
|
@ -300,7 +300,7 @@ class Setlet<E> extends SetBase<E> {
|
|||
class _SetletMarker {
|
||||
const _SetletMarker();
|
||||
@override
|
||||
toString() => "-";
|
||||
String toString() => "-";
|
||||
}
|
||||
|
||||
class _SetletSingleIterator<E> implements Iterator<E> {
|
||||
|
|
|
@ -27,7 +27,7 @@ class C extends B {
|
|||
C();
|
||||
|
||||
@override
|
||||
getValue() {
|
||||
String getValue() {
|
||||
return "Value";
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue