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

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

Issue 2456643006: More functionality in kernel_impact. (Closed)
Patch Set: Fix errors. 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 if (!functionSignature.returnType.isDynamic) { 459 registry.registerCheckedModeCheck(functionSignature.returnType);
460 registry.registerTypeUse(
461 new TypeUse.checkedModeCheck(functionSignature.returnType));
462 }
463 functionSignature.forEachParameter((ParameterElement element) { 460 functionSignature.forEachParameter((ParameterElement element) {
464 if (!element.type.isDynamic) { 461 registry.registerCheckedModeCheck(element.type);
465 registry.registerTypeUse(new TypeUse.checkedModeCheck(element.type));
466 }
467 }); 462 });
468 } 463 }
469 464
470 ResolutionResult visitAssert(Assert node) { 465 ResolutionResult visitAssert(Assert node) {
471 if (!options.enableAssertMessage) { 466 if (!options.enableAssertMessage) {
472 if (node.hasMessage) { 467 if (node.hasMessage) {
473 reporter.reportErrorMessage( 468 reporter.reportErrorMessage(
474 node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE); 469 node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE);
475 } 470 }
476 } 471 }
(...skipping 1871 matching lines...) Expand 10 before | Expand all | Expand 10 after
2348 } else { 2343 } else {
2349 // TODO(johnniwinther): Handle invalid this access as an 2344 // TODO(johnniwinther): Handle invalid this access as an
2350 // [AccessSemantics]. 2345 // [AccessSemantics].
2351 return handleErroneousAccess(node, name, semantics); 2346 return handleErroneousAccess(node, name, semantics);
2352 } 2347 }
2353 } 2348 }
2354 ResolutionResult result = visitExpressionPrefix(node.receiver); 2349 ResolutionResult result = visitExpressionPrefix(node.receiver);
2355 if (result.kind == ResultKind.PREFIX) { 2350 if (result.kind == ResultKind.PREFIX) {
2356 return handlePrefixSend(node, name, result); 2351 return handlePrefixSend(node, name, result);
2357 } else if (node.isConditional) { 2352 } else if (node.isConditional) {
2353 registry.registerConstantLiteral(new NullConstantExpression());
2354 registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
2358 return handleDynamicAccessSemantics( 2355 return handleDynamicAccessSemantics(
2359 node, name, new DynamicAccess.ifNotNullProperty(name)); 2356 node, name, new DynamicAccess.ifNotNullProperty(name));
2360 } else { 2357 } else {
2361 // Handle dynamic property access, like `a.b` or `a.b()` where `a` is not 2358 // Handle dynamic property access, like `a.b` or `a.b()` where `a` is not
2362 // a prefix or class. 2359 // a prefix or class.
2363 // TODO(johnniwinther): Use the `element` of [result]. 2360 // TODO(johnniwinther): Use the `element` of [result].
2364 return handleDynamicAccessSemantics( 2361 return handleDynamicAccessSemantics(
2365 node, name, new DynamicAccess.dynamicProperty(name)); 2362 node, name, new DynamicAccess.dynamicProperty(name));
2366 } 2363 }
2367 } 2364 }
(...skipping 13 matching lines...) Expand all
2381 } else { 2378 } else {
2382 // TODO(johnniwinther): Handle invalid this access as an 2379 // TODO(johnniwinther): Handle invalid this access as an
2383 // [AccessSemantics]. 2380 // [AccessSemantics].
2384 return handleUpdate(node, name, semantics); 2381 return handleUpdate(node, name, semantics);
2385 } 2382 }
2386 } 2383 }
2387 ResolutionResult result = visitExpressionPrefix(node.receiver); 2384 ResolutionResult result = visitExpressionPrefix(node.receiver);
2388 if (result.kind == ResultKind.PREFIX) { 2385 if (result.kind == ResultKind.PREFIX) {
2389 return handlePrefixSendSet(node, name, result); 2386 return handlePrefixSendSet(node, name, result);
2390 } else if (node.isConditional) { 2387 } else if (node.isConditional) {
2388 registry.registerConstantLiteral(new NullConstantExpression());
2389 registry.registerDynamicUse(new DynamicUse(Selectors.equals, null));
2391 return handleDynamicUpdateSemantics( 2390 return handleDynamicUpdateSemantics(
2392 node, name, null, new DynamicAccess.ifNotNullProperty(name)); 2391 node, name, null, new DynamicAccess.ifNotNullProperty(name));
2393 } else { 2392 } else {
2394 // Handle dynamic property access, like `a.b = c`, `a.b++` or `a.b += c` 2393 // Handle dynamic property access, like `a.b = c`, `a.b++` or `a.b += c`
2395 // where `a` is not a prefix or class. 2394 // where `a` is not a prefix or class.
2396 // TODO(johnniwinther): Use the `element` of [result]. 2395 // TODO(johnniwinther): Use the `element` of [result].
2397 return handleDynamicUpdateSemantics( 2396 return handleDynamicUpdateSemantics(
2398 node, name, null, new DynamicAccess.dynamicProperty(name)); 2397 node, name, null, new DynamicAccess.dynamicProperty(name));
2399 } 2398 }
2400 } 2399 }
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after
4073 inConstContext: inConstContext)); 4072 inConstContext: inConstContext));
4074 } 4073 }
4075 4074
4076 DartType resolveTypeAnnotation(TypeAnnotation node, 4075 DartType resolveTypeAnnotation(TypeAnnotation node,
4077 {bool malformedIsError: false, 4076 {bool malformedIsError: false,
4078 bool deferredIsMalformed: true, 4077 bool deferredIsMalformed: true,
4079 bool registerCheckedModeCheck: true}) { 4078 bool registerCheckedModeCheck: true}) {
4080 DartType type = typeResolver.resolveTypeAnnotation(this, node, 4079 DartType type = typeResolver.resolveTypeAnnotation(this, node,
4081 malformedIsError: malformedIsError, 4080 malformedIsError: malformedIsError,
4082 deferredIsMalformed: deferredIsMalformed); 4081 deferredIsMalformed: deferredIsMalformed);
4083 if (registerCheckedModeCheck && !type.isDynamic) { 4082 if (registerCheckedModeCheck) {
4084 registry.registerTypeUse(new TypeUse.checkedModeCheck(type)); 4083 registry.registerCheckedModeCheck(type);
4085 } 4084 }
4086 return type; 4085 return type;
4087 } 4086 }
4088 4087
4089 ResolutionResult visitLiteralList(LiteralList node) { 4088 ResolutionResult visitLiteralList(LiteralList node) {
4090 bool isValidAsConstant = true; 4089 bool isValidAsConstant = true;
4091 sendIsMemberAccess = false; 4090 sendIsMemberAccess = false;
4092 4091
4093 NodeList arguments = node.typeArguments; 4092 NodeList arguments = node.typeArguments;
4094 DartType typeArgument; 4093 DartType typeArgument;
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
4600 continueLabels[labelName] = labelElement; 4599 continueLabels[labelName] = labelElement;
4601 } 4600 }
4602 cases = cases.tail; 4601 cases = cases.tail;
4603 // Test that only the last case, if any, is a default case. 4602 // Test that only the last case, if any, is a default case.
4604 if (switchCase.defaultKeyword != null && !cases.isEmpty) { 4603 if (switchCase.defaultKeyword != null && !cases.isEmpty) {
4605 reporter.reportErrorMessage( 4604 reporter.reportErrorMessage(
4606 switchCase, MessageKind.INVALID_CASE_DEFAULT); 4605 switchCase, MessageKind.INVALID_CASE_DEFAULT);
4607 } 4606 }
4608 if (cases.isNotEmpty && switchCase.statements.isNotEmpty) { 4607 if (cases.isNotEmpty && switchCase.statements.isNotEmpty) {
4609 Node last = switchCase.statements.last; 4608 Node last = switchCase.statements.last;
4610 if (last.asBreakStatement() == null && 4609 if (last.asReturn() == null &&
4610 last.asBreakStatement() == null &&
4611 last.asContinueStatement() == null && 4611 last.asContinueStatement() == null &&
4612 last.asThrow() == null && 4612 (last.asExpressionStatement() == null ||
4613 last.asReturn() == null) { 4613 last.asExpressionStatement().expression.asThrow() == 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