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

Unified Diff: lib/unresolved.dart

Issue 2207473003: Avoid crashing on synthetic elements. (Closed) Base URL: git@github.com:dart-lang/rasta.git@dill
Patch Set: Merged with 47f575a073f4b28c3798e1b22098664ee737e6b8 Created 4 years, 4 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 | « lib/kernel.dart ('k') | test/kernel/regression/unresolved_recovery.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/unresolved.dart
diff --git a/lib/unresolved.dart b/lib/unresolved.dart
index f4842e3e239d42ce0f558b7ed6a8cfc421cb4a8c..48764e84a2ee3fa2e490b0622dff104f1f1767e3 100644
--- a/lib/unresolved.dart
+++ b/lib/unresolved.dart
@@ -54,6 +54,13 @@ abstract class RastaUnresolved {
// TODO(ahe): Delete this method.
ir.InvalidExpression handleUnresolved(Node node);
+ /// Similar to [Kernel.functionToIr] but returns null if [function] is a
+ /// synthetic function created for error recovery.
+ ir.Member possiblyErroneousFunctionToIr(FunctionElement function) {
+ return kernel.isSyntheticError(function)
+ ? null : kernel.functionToIr(function);
+ }
+
/// Throws a [NoSuchMethodError] corresponding to a call to
/// [receiver].[memberName] with the arguments [callArguments].
///
@@ -78,8 +85,14 @@ abstract class RastaUnresolved {
ir.Expression named = new ir.MapLiteral(callArguments.named.map((e) {
return new ir.MapEntry(new ir.SymbolLiteral(e.name), e.value);
}).toList());
+ if (candidateTarget is FunctionElement) {
+ // Ensure [candidateTarget] has been resolved.
+ possiblyErroneousFunctionToIr(candidateTarget);
+ }
ir.Expression existingArguments;
- if (candidateTarget is FunctionElement && !candidateTarget.isError) {
+ if (candidateTarget is FunctionElement &&
+ !kernel.isSyntheticError(candidateTarget) &&
+ candidateTarget.hasFunctionSignature) {
List<ir.Expression> existingArgumentsList = <ir.Expression>[];
candidateTarget.functionSignature.forEachParameter((param) {
existingArgumentsList.add(new ir.StringLiteral(param.name));
@@ -242,7 +255,7 @@ abstract class RastaUnresolved {
CallStructure callStructure,
_) {
// The body of the factory will throw an error.
- return new ir.StaticInvocation(kernel.functionToIr(constructor),
+ return new ir.StaticInvocation(possiblyErroneousFunctionToIr(constructor),
buildArguments(arguments));
}
@@ -322,7 +335,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new ClassStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPostfixIncrement(
new ir.Name(operator.selectorName),
voidContext: isVoidContext);
@@ -335,7 +348,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new ClassStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPrefixIncrement(
new ir.Name(operator.selectorName),
voidContext: isVoidContext);
@@ -348,7 +361,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new ClassStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildNullAwareAssignment(
visitForValue(rhs), voidContext: isVoidContext);
}
@@ -383,7 +396,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- kernel.functionToIr(element), null);
+ possiblyErroneousFunctionToIr(element), null);
return accessor.buildCompoundAssignment(new ir.Name(operator.selectorName),
visitForValue(rhs));
}
@@ -548,7 +561,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperPropertyAccessor(this, '${node.selector}',
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildCompoundAssignment(
new ir.Name(operator.selectorName),
visitForValue(rhs));
@@ -563,7 +576,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildCompoundAssignment(
new ir.Name(operator.selectorName),
visitForValue(rhs));
@@ -577,7 +590,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- kernel.functionToIr(indexFunction), null);
+ possiblyErroneousFunctionToIr(indexFunction), null);
return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName));
}
@@ -589,7 +602,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- kernel.functionToIr(indexFunction), null);
+ possiblyErroneousFunctionToIr(indexFunction), null);
return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName));
}
@@ -600,7 +613,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new SuperPropertyAccessor(this, '${node.selector}',
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPostfixIncrement(new ir.Name(operator.selectorName));
}
@@ -611,7 +624,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new SuperPropertyAccessor(this, '${node.selector}',
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPrefixIncrement(new ir.Name(operator.selectorName));
}
@@ -622,7 +635,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperPropertyAccessor(this, '${node.selector}',
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildNullAwareAssignment(visitForValue(rhs));
}
@@ -688,7 +701,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new TopLevelStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildCompoundAssignment(
new ir.Name(operator.selectorName),
visitForValue(rhs),
@@ -702,7 +715,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new TopLevelStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPostfixIncrement(
new ir.Name(operator.selectorName),
voidContext: isVoidContext);
@@ -715,7 +728,7 @@ abstract class RastaUnresolved {
IncDecOperator operator,
_) {
var accessor = new TopLevelStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildPrefixIncrement(
new ir.Name(operator.selectorName),
voidContext: isVoidContext);
@@ -728,7 +741,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new TopLevelStaticAccessor(this, getter.name,
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildNullAwareAssignment(
visitForValue(rhs),
voidContext: isVoidContext);
@@ -742,7 +755,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- null, kernel.functionToIr(setter));
+ null, possiblyErroneousFunctionToIr(setter));
return accessor.buildNullAwareAssignment(visitForValue(rhs));
}
@@ -754,7 +767,7 @@ abstract class RastaUnresolved {
Node rhs,
_) {
var accessor = new SuperIndexAccessor(this, visitForValue(index),
- kernel.functionToIr(getter), null);
+ possiblyErroneousFunctionToIr(getter), null);
return accessor.buildNullAwareAssignment(visitForValue(rhs));
}
« no previous file with comments | « lib/kernel.dart ('k') | test/kernel/regression/unresolved_recovery.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698