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

Unified Diff: lib/src/checker/checker.dart

Issue 1055923002: Don't call dinvoke on Object methods (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: modify test Created 5 years, 9 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
Index: lib/src/checker/checker.dart
diff --git a/lib/src/checker/checker.dart b/lib/src/checker/checker.dart
index 024a066ca63de43dfab84015068e927b21c4657c..ef030ec7c7c2fef6a1671d4594fb5f12694cd8a3 100644
--- a/lib/src/checker/checker.dart
+++ b/lib/src/checker/checker.dart
@@ -456,19 +456,21 @@ class CodeChecker extends RecursiveAstVisitor {
}
// Check invocations
- bool checkArgumentList(ArgumentList node, FunctionType type) {
+ bool checkArgumentList(ArgumentList node, DartType type) {
NodeList<Expression> list = node.arguments;
int len = list.length;
+ if (len == 0) return true;
+ FunctionType ft = type;
for (int i = 0; i < len; ++i) {
Expression arg = list[i];
ParameterElement element = node.getStaticParameterElementFor(arg);
if (element == null) {
- if (type.parameters.length < len) {
+ if (ft.parameters.length < len) {
// We found an argument mismatch, the analyzer will report this too,
// so no need to insert an error for this here.
continue;
}
- element = type.parameters[i];
+ element = ft.parameters[i];
// TODO(vsm): When can this happen?
assert(element != null);
}
@@ -566,7 +568,7 @@ class CodeChecker extends RecursiveAstVisitor {
}
visitPropertyAccess(PropertyAccess node) {
- if (_rules.isDynamicGet(node.realTarget)) {
+ if (_rules.isDynamicGet(node.realTarget, node.propertyName.name)) {
_recordDynamicInvoke(node);
}
node.visitChildren(this);
@@ -576,7 +578,8 @@ class CodeChecker extends RecursiveAstVisitor {
final target = node.prefix;
// Check if the prefix is a library - PrefixElement denotes a library
// access.
- if (target.staticElement is! PrefixElement && _rules.isDynamicGet(target)) {
+ if (target.staticElement is! PrefixElement &&
+ _rules.isDynamicGet(target, node.identifier.name)) {
_recordDynamicInvoke(node);
}
node.visitChildren(this);

Powered by Google App Engine
This is Rietveld 408576698