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

Side by Side Diff: pkg/compiler/lib/src/resolution/members.dart

Issue 2466353002: Revert "More functionality in kernel_impact." and "Compute NativeBehavior for foreign functions." (Closed)
Patch Set: Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.resolution.members; 5 library dart2js.resolution.members;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/names.dart' show Selectors; 8 import '../common/names.dart' show Selectors;
9 import '../common/resolution.dart' show Resolution; 9 import '../common/resolution.dart' show Resolution;
10 import '../compile_time_constants.dart'; 10 import '../compile_time_constants.dart';
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 addToScope(parameterElement); 449 addToScope(parameterElement);
450 } 450 }
451 parameterNodes = parameterNodes.tail; 451 parameterNodes = parameterNodes.tail;
452 }); 452 });
453 addDeferredAction(enclosingElement, () { 453 addDeferredAction(enclosingElement, () {
454 functionSignature.forEachOptionalParameter((ParameterElementX parameter) { 454 functionSignature.forEachOptionalParameter((ParameterElementX parameter) {
455 parameter.constant = 455 parameter.constant =
456 resolver.constantCompiler.compileConstant(parameter); 456 resolver.constantCompiler.compileConstant(parameter);
457 }); 457 });
458 }); 458 });
459 registry.registerCheckedModeCheck(functionSignature.returnType); 459 if (!functionSignature.returnType.isDynamic) {
460 registry.registerTypeUse(
461 new TypeUse.checkedModeCheck(functionSignature.returnType));
462 }
460 functionSignature.forEachParameter((ParameterElement element) { 463 functionSignature.forEachParameter((ParameterElement element) {
461 registry.registerCheckedModeCheck(element.type); 464 if (!element.type.isDynamic) {
465 registry.registerTypeUse(new TypeUse.checkedModeCheck(element.type));
466 }
462 }); 467 });
463 } 468 }
464 469
465 ResolutionResult visitAssert(Assert node) { 470 ResolutionResult visitAssert(Assert node) {
466 if (!options.enableAssertMessage) { 471 if (!options.enableAssertMessage) {
467 if (node.hasMessage) { 472 if (node.hasMessage) {
468 reporter.reportErrorMessage( 473 reporter.reportErrorMessage(
469 node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE); 474 node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE);
470 } 475 }
471 } 476 }
(...skipping 1871 matching lines...) Expand 10 before | Expand all | Expand 10 after
2343 } else { 2348 } else {
2344 // TODO(johnniwinther): Handle invalid this access as an 2349 // TODO(johnniwinther): Handle invalid this access as an
2345 // [AccessSemantics]. 2350 // [AccessSemantics].
2346 return handleErroneousAccess(node, name, semantics); 2351 return handleErroneousAccess(node, name, semantics);
2347 } 2352 }
2348 } 2353 }
2349 ResolutionResult result = visitExpressionPrefix(node.receiver); 2354 ResolutionResult result = visitExpressionPrefix(node.receiver);
2350 if (result.kind == ResultKind.PREFIX) { 2355 if (result.kind == ResultKind.PREFIX) {
2351 return handlePrefixSend(node, name, result); 2356 return handlePrefixSend(node, name, result);
2352 } else if (node.isConditional) { 2357 } else if (node.isConditional) {
2353 registry.registerConstantLiteral(new NullConstantExpression());
2354 registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
2355 return handleDynamicAccessSemantics( 2358 return handleDynamicAccessSemantics(
2356 node, name, new DynamicAccess.ifNotNullProperty(name)); 2359 node, name, new DynamicAccess.ifNotNullProperty(name));
2357 } else { 2360 } else {
2358 // Handle dynamic property access, like `a.b` or `a.b()` where `a` is not 2361 // Handle dynamic property access, like `a.b` or `a.b()` where `a` is not
2359 // a prefix or class. 2362 // a prefix or class.
2360 // TODO(johnniwinther): Use the `element` of [result]. 2363 // TODO(johnniwinther): Use the `element` of [result].
2361 return handleDynamicAccessSemantics( 2364 return handleDynamicAccessSemantics(
2362 node, name, new DynamicAccess.dynamicProperty(name)); 2365 node, name, new DynamicAccess.dynamicProperty(name));
2363 } 2366 }
2364 } 2367 }
(...skipping 13 matching lines...) Expand all
2378 } else { 2381 } else {
2379 // TODO(johnniwinther): Handle invalid this access as an 2382 // TODO(johnniwinther): Handle invalid this access as an
2380 // [AccessSemantics]. 2383 // [AccessSemantics].
2381 return handleUpdate(node, name, semantics); 2384 return handleUpdate(node, name, semantics);
2382 } 2385 }
2383 } 2386 }
2384 ResolutionResult result = visitExpressionPrefix(node.receiver); 2387 ResolutionResult result = visitExpressionPrefix(node.receiver);
2385 if (result.kind == ResultKind.PREFIX) { 2388 if (result.kind == ResultKind.PREFIX) {
2386 return handlePrefixSendSet(node, name, result); 2389 return handlePrefixSendSet(node, name, result);
2387 } else if (node.isConditional) { 2390 } else if (node.isConditional) {
2388 registry.registerConstantLiteral(new NullConstantExpression());
2389 registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
2390 return handleDynamicUpdateSemantics( 2391 return handleDynamicUpdateSemantics(
2391 node, name, null, new DynamicAccess.ifNotNullProperty(name)); 2392 node, name, null, new DynamicAccess.ifNotNullProperty(name));
2392 } else { 2393 } else {
2393 // Handle dynamic property access, like `a.b = c`, `a.b++` or `a.b += c` 2394 // Handle dynamic property access, like `a.b = c`, `a.b++` or `a.b += c`
2394 // where `a` is not a prefix or class. 2395 // where `a` is not a prefix or class.
2395 // TODO(johnniwinther): Use the `element` of [result]. 2396 // TODO(johnniwinther): Use the `element` of [result].
2396 return handleDynamicUpdateSemantics( 2397 return handleDynamicUpdateSemantics(
2397 node, name, null, new DynamicAccess.dynamicProperty(name)); 2398 node, name, null, new DynamicAccess.dynamicProperty(name));
2398 } 2399 }
2399 } 2400 }
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after
4072 inConstContext: inConstContext)); 4073 inConstContext: inConstContext));
4073 } 4074 }
4074 4075
4075 DartType resolveTypeAnnotation(TypeAnnotation node, 4076 DartType resolveTypeAnnotation(TypeAnnotation node,
4076 {bool malformedIsError: false, 4077 {bool malformedIsError: false,
4077 bool deferredIsMalformed: true, 4078 bool deferredIsMalformed: true,
4078 bool registerCheckedModeCheck: true}) { 4079 bool registerCheckedModeCheck: true}) {
4079 DartType type = typeResolver.resolveTypeAnnotation(this, node, 4080 DartType type = typeResolver.resolveTypeAnnotation(this, node,
4080 malformedIsError: malformedIsError, 4081 malformedIsError: malformedIsError,
4081 deferredIsMalformed: deferredIsMalformed); 4082 deferredIsMalformed: deferredIsMalformed);
4082 if (registerCheckedModeCheck) { 4083 if (registerCheckedModeCheck && !type.isDynamic) {
4083 registry.registerCheckedModeCheck(type); 4084 registry.registerTypeUse(new TypeUse.checkedModeCheck(type));
4084 } 4085 }
4085 return type; 4086 return type;
4086 } 4087 }
4087 4088
4088 ResolutionResult visitLiteralList(LiteralList node) { 4089 ResolutionResult visitLiteralList(LiteralList node) {
4089 bool isValidAsConstant = true; 4090 bool isValidAsConstant = true;
4090 sendIsMemberAccess = false; 4091 sendIsMemberAccess = false;
4091 4092
4092 NodeList arguments = node.typeArguments; 4093 NodeList arguments = node.typeArguments;
4093 DartType typeArgument; 4094 DartType typeArgument;
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
4599 continueLabels[labelName] = labelElement; 4600 continueLabels[labelName] = labelElement;
4600 } 4601 }
4601 cases = cases.tail; 4602 cases = cases.tail;
4602 // Test that only the last case, if any, is a default case. 4603 // Test that only the last case, if any, is a default case.
4603 if (switchCase.defaultKeyword != null && !cases.isEmpty) { 4604 if (switchCase.defaultKeyword != null && !cases.isEmpty) {
4604 reporter.reportErrorMessage( 4605 reporter.reportErrorMessage(
4605 switchCase, MessageKind.INVALID_CASE_DEFAULT); 4606 switchCase, MessageKind.INVALID_CASE_DEFAULT);
4606 } 4607 }
4607 if (cases.isNotEmpty && switchCase.statements.isNotEmpty) { 4608 if (cases.isNotEmpty && switchCase.statements.isNotEmpty) {
4608 Node last = switchCase.statements.last; 4609 Node last = switchCase.statements.last;
4609 if (last.asReturn() == null && 4610 if (last.asBreakStatement() == null &&
4610 last.asBreakStatement() == null &&
4611 last.asContinueStatement() == null && 4611 last.asContinueStatement() == null &&
4612 (last.asExpressionStatement() == null || 4612 last.asThrow() == null &&
4613 last.asExpressionStatement().expression.asThrow() == null)) { 4613 last.asReturn() == null) {
4614 registry.registerFeature(Feature.FALL_THROUGH_ERROR); 4614 registry.registerFeature(Feature.FALL_THROUGH_ERROR);
4615 } 4615 }
4616 } 4616 }
4617 } 4617 }
4618 4618
4619 addDeferredAction(enclosingElement, () { 4619 addDeferredAction(enclosingElement, () {
4620 checkCaseExpressions(node); 4620 checkCaseExpressions(node);
4621 }); 4621 });
4622 4622
4623 statementScope.enterSwitch(breakElement, continueLabels); 4623 statementScope.enterSwitch(breakElement, continueLabels);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
4743 } 4743 }
4744 return const NoneResult(); 4744 return const NoneResult();
4745 } 4745 }
4746 } 4746 }
4747 4747
4748 /// Looks up [name] in [scope] and unwraps the result. 4748 /// Looks up [name] in [scope] and unwraps the result.
4749 Element lookupInScope( 4749 Element lookupInScope(
4750 DiagnosticReporter reporter, Node node, Scope scope, String name) { 4750 DiagnosticReporter reporter, Node node, Scope scope, String name) {
4751 return Elements.unwrap(scope.lookup(name), reporter, node); 4751 return Elements.unwrap(scope.lookup(name), reporter, node);
4752 } 4752 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/enum_creator.dart ('k') | pkg/compiler/lib/src/resolution/registry.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698