Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
index a5158c1c746bdc723659bc71e9b3594b2ea716ac..d76be36cf7f6805fe6a9ac11df78cc783505229a 100644 |
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
@@ -202,7 +202,7 @@ class SsaBuilderTask extends CompilerTask { |
new OptionalParameterTypes(signature.optionalParameterCount); |
int index = 0; |
signature.forEachOptionalParameter((Element parameter) { |
- Constant defaultValue = compiler.compileVariable(parameter); |
+ Constant defaultValue = builder.compileVariable(parameter); |
HType type = HGraph.mapConstantTypeToSsaType(defaultValue); |
defaultValueTypes.update(index, parameter.name, type); |
index++; |
@@ -988,6 +988,24 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
} |
/** |
+ * Compiles compile-time constants. Never returns [:null:]. If the |
+ * initial value is not a compile-time constants, it reports an |
+ * internal error. |
+ */ |
+ Constant compileConstant(VariableElement element) { |
+ return compiler.constantHandler.compileConstant(element); |
+ } |
+ |
+ Constant compileVariable(VariableElement element) { |
+ return compiler.constantHandler.compileVariable(element); |
+ } |
+ |
+ bool isLazilyInitialized(VariableElement element) { |
+ Constant initialValue = compileVariable(element); |
+ return initialValue == null; |
+ } |
+ |
+ /** |
* Documentation wanted -- johnniwinther |
* |
* Invariant: [functionElement] must be an implementation element. |
@@ -1524,8 +1542,7 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
// } |
// Fetch the original default value of [element]; |
- ConstantHandler handler = compiler.constantHandler; |
- Constant constant = handler.compileVariable(element); |
+ Constant constant = compileVariable(element); |
HConstant defaultValue = constant == null |
? graph.addConstantNull(constantSystem) |
: graph.addConstant(constant); |
@@ -2458,11 +2475,11 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
if (element.isField() && !element.isAssignable()) { |
// A static final or const. Get its constant value and inline it if |
// the value can be compiled eagerly. |
- value = compiler.compileVariable(element); |
+ value = compileVariable(element); |
} |
if (value != null) { |
stack.add(graph.addConstant(value)); |
- } else if (element.isField() && compiler.isLazilyInitialized(element)) { |
+ } else if (element.isField() && isLazilyInitialized(element)) { |
push(new HLazyStatic(element)); |
} else { |
// TODO(5346): Try to avoid the need for calling [declaration] before |
@@ -2741,14 +2758,14 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
return pop(); |
} |
- HInstruction compileConstant(Element parameter) { |
+ HInstruction handleConstant(Element parameter) { |
Constant constant; |
TreeElements calleeElements = |
compiler.enqueuer.resolution.getCachedElements(element); |
if (calleeElements.isParameterChecked(parameter)) { |
constant = SentinelConstant.SENTINEL; |
} else { |
- constant = compiler.compileConstant(parameter); |
+ constant = compileConstant(parameter); |
} |
return graph.addConstant(constant); |
} |
@@ -2757,7 +2774,7 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
list, |
element, |
compileArgument, |
- compileConstant, |
+ handleConstant, |
compiler); |
} |