OLD | NEW |
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 import 'dart:collection'; | 5 import 'dart:collection'; |
6 | 6 |
7 import 'package:js_runtime/shared/embedded_names.dart'; | 7 import 'package:js_runtime/shared/embedded_names.dart'; |
8 | 8 |
9 import '../closure.dart'; | 9 import '../closure.dart'; |
10 import '../common.dart'; | 10 import '../common.dart'; |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 HGraph graph = builder.build(); | 116 HGraph graph = builder.build(); |
117 | 117 |
118 // Default arguments are handled elsewhere, but we must ensure | 118 // Default arguments are handled elsewhere, but we must ensure |
119 // that the default values are computed during codegen. | 119 // that the default values are computed during codegen. |
120 if (!identical(element.kind, ElementKind.FIELD)) { | 120 if (!identical(element.kind, ElementKind.FIELD)) { |
121 FunctionElement function = element; | 121 FunctionElement function = element; |
122 FunctionSignature signature = function.functionSignature; | 122 FunctionSignature signature = function.functionSignature; |
123 signature.forEachOptionalParameter((ParameterElement parameter) { | 123 signature.forEachOptionalParameter((ParameterElement parameter) { |
124 // This ensures the default value will be computed. | 124 // This ensures the default value will be computed. |
125 ConstantValue constant = | 125 ConstantValue constant = |
126 backend.constants.getConstantValueForVariable(parameter); | 126 backend.constants.getConstantValue(parameter.constant); |
127 work.registry.registerCompileTimeConstant(constant); | 127 work.registry.registerCompileTimeConstant(constant); |
128 }); | 128 }); |
129 } | 129 } |
130 if (compiler.tracer.isEnabled) { | 130 if (compiler.tracer.isEnabled) { |
131 String name; | 131 String name; |
132 if (element.isClassMember) { | 132 if (element.isClassMember) { |
133 String className = element.enclosingClass.name; | 133 String className = element.enclosingClass.name; |
134 String memberName = element.name; | 134 String memberName = element.name; |
135 name = "$className.$memberName"; | 135 name = "$className.$memberName"; |
136 if (element.isGenerativeConstructorBody) { | 136 if (element.isGenerativeConstructorBody) { |
(...skipping 1451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1588 }); | 1588 }); |
1589 } | 1589 } |
1590 | 1590 |
1591 /** | 1591 /** |
1592 * Return null so it is simple to remove the optional parameters completely | 1592 * Return null so it is simple to remove the optional parameters completely |
1593 * from interop methods to match JavaScript semantics for ommitted arguments. | 1593 * from interop methods to match JavaScript semantics for ommitted arguments. |
1594 */ | 1594 */ |
1595 HInstruction handleConstantForOptionalParameterJsInterop(Element parameter) => | 1595 HInstruction handleConstantForOptionalParameterJsInterop(Element parameter) => |
1596 null; | 1596 null; |
1597 | 1597 |
1598 HInstruction handleConstantForOptionalParameter(Element parameter) { | 1598 HInstruction handleConstantForOptionalParameter(ParameterElement parameter) { |
1599 ConstantValue constantValue = | 1599 ConstantValue constantValue = |
1600 backend.constants.getConstantValueForVariable(parameter); | 1600 backend.constants.getConstantValue(parameter.constant); |
1601 assert(invariant(parameter, constantValue != null, | 1601 assert(invariant(parameter, constantValue != null, |
1602 message: 'No constant computed for $parameter')); | 1602 message: 'No constant computed for $parameter')); |
1603 return graph.addConstant(constantValue, compiler); | 1603 return graph.addConstant(constantValue, compiler); |
1604 } | 1604 } |
1605 | 1605 |
1606 Element get currentNonClosureClass { | 1606 Element get currentNonClosureClass { |
1607 ClassElement cls = sourceElement.enclosingClass; | 1607 ClassElement cls = sourceElement.enclosingClass; |
1608 if (cls != null && cls.isClosure) { | 1608 if (cls != null && cls.isClosure) { |
1609 var closureClass = cls; | 1609 var closureClass = cls; |
1610 return closureClass.methodElement.enclosingClass; | 1610 return closureClass.methodElement.enclosingClass; |
(...skipping 1887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3498 } | 3498 } |
3499 } | 3499 } |
3500 | 3500 |
3501 @override | 3501 @override |
3502 void previsitDeferredAccess(ast.Send node, PrefixElement prefix, _) { | 3502 void previsitDeferredAccess(ast.Send node, PrefixElement prefix, _) { |
3503 generateIsDeferredLoadedCheckIfNeeded(prefix, node); | 3503 generateIsDeferredLoadedCheckIfNeeded(prefix, node); |
3504 } | 3504 } |
3505 | 3505 |
3506 /// Read a static or top level [field]. | 3506 /// Read a static or top level [field]. |
3507 void generateStaticFieldGet(ast.Send node, FieldElement field) { | 3507 void generateStaticFieldGet(ast.Send node, FieldElement field) { |
3508 ConstantExpression constant = | 3508 ConstantExpression constant = field.constant; |
3509 backend.constants.getConstantForVariable(field); | |
3510 SourceInformation sourceInformation = | 3509 SourceInformation sourceInformation = |
3511 sourceInformationBuilder.buildGet(node); | 3510 sourceInformationBuilder.buildGet(node); |
3512 if (constant != null) { | 3511 if (constant != null) { |
3513 if (!field.isAssignable) { | 3512 if (!field.isAssignable) { |
3514 // A static final or const. Get its constant value and inline it if | 3513 // A static final or const. Get its constant value and inline it if |
3515 // the value can be compiled eagerly. | 3514 // the value can be compiled eagerly. |
3516 generateStaticConstGet(node, field, constant, sourceInformation); | 3515 generateStaticConstGet(node, field, constant, sourceInformation); |
3517 } else { | 3516 } else { |
3518 // TODO(5346): Try to avoid the need for calling [declaration] before | 3517 // TODO(5346): Try to avoid the need for calling [declaration] before |
3519 // creating an [HStatic]. | 3518 // creating an [HStatic]. |
(...skipping 5056 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8576 const _LoopTypeVisitor(); | 8575 const _LoopTypeVisitor(); |
8577 int visitNode(ast.Node node) => HLoopBlockInformation.NOT_A_LOOP; | 8576 int visitNode(ast.Node node) => HLoopBlockInformation.NOT_A_LOOP; |
8578 int visitWhile(ast.While node) => HLoopBlockInformation.WHILE_LOOP; | 8577 int visitWhile(ast.While node) => HLoopBlockInformation.WHILE_LOOP; |
8579 int visitFor(ast.For node) => HLoopBlockInformation.FOR_LOOP; | 8578 int visitFor(ast.For node) => HLoopBlockInformation.FOR_LOOP; |
8580 int visitDoWhile(ast.DoWhile node) => HLoopBlockInformation.DO_WHILE_LOOP; | 8579 int visitDoWhile(ast.DoWhile node) => HLoopBlockInformation.DO_WHILE_LOOP; |
8581 int visitAsyncForIn(ast.AsyncForIn node) => HLoopBlockInformation.FOR_IN_LOOP; | 8580 int visitAsyncForIn(ast.AsyncForIn node) => HLoopBlockInformation.FOR_IN_LOOP; |
8582 int visitSyncForIn(ast.SyncForIn node) => HLoopBlockInformation.FOR_IN_LOOP; | 8581 int visitSyncForIn(ast.SyncForIn node) => HLoopBlockInformation.FOR_IN_LOOP; |
8583 int visitSwitchStatement(ast.SwitchStatement node) => | 8582 int visitSwitchStatement(ast.SwitchStatement node) => |
8584 HLoopBlockInformation.SWITCH_CONTINUE_LOOP; | 8583 HLoopBlockInformation.SWITCH_CONTINUE_LOOP; |
8585 } | 8584 } |
OLD | NEW |