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

Unified Diff: pkg/compiler/lib/src/universe/codegen_world_builder.dart

Issue 2939033002: Towards compiling Hello World! (Closed)
Patch Set: Fix parameter ordering Created 3 years, 6 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: pkg/compiler/lib/src/universe/codegen_world_builder.dart
diff --git a/pkg/compiler/lib/src/universe/codegen_world_builder.dart b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
index 409624961d863a400324b2f93936a657a3a90bd9..7df0e20de6ec1083905453b37d35fb6e1673f625 100644
--- a/pkg/compiler/lib/src/universe/codegen_world_builder.dart
+++ b/pkg/compiler/lib/src/universe/codegen_world_builder.dart
@@ -14,9 +14,9 @@ abstract class CodegenWorldBuilder implements WorldBuilder {
ClassEntity cls, void f(ClassEntity declarer, FieldEntity field));
/// Calls [f] for each parameter of [function] providing the type and name of
- /// the parameter.
- void forEachParameter(
- FunctionEntity function, void f(DartType type, String name));
+ /// the parameter and the [defaultValue] if the parameter is optional.
+ void forEachParameter(FunctionEntity function,
+ void f(DartType type, String name, ConstantValue defaultValue));
void forEachInvokedName(
f(String name, Map<Selector, SelectorConstraints> selectors));
@@ -27,6 +27,9 @@ abstract class CodegenWorldBuilder implements WorldBuilder {
void forEachInvokedSetter(
f(String name, Map<Selector, SelectorConstraints> selectors));
+ /// Returns `true` if [field] constant or final with a constant initializer.
+ bool hasConstantFieldInitializer(FieldEntity field);
+
/// Returns `true` if [member] is invoked as a setter.
bool hasInvokedSetter(MemberEntity member, ClosedWorld world);
@@ -542,7 +545,10 @@ abstract class CodegenWorldBuilderImpl implements CodegenWorldBuilder {
}
class ElementCodegenWorldBuilderImpl extends CodegenWorldBuilderImpl {
+ final JavaScriptConstantCompiler _constants;
+
ElementCodegenWorldBuilderImpl(
+ this._constants,
ElementEnvironment elementEnvironment,
NativeBasicData nativeBasicData,
ClosedWorld world,
@@ -550,6 +556,11 @@ class ElementCodegenWorldBuilderImpl extends CodegenWorldBuilderImpl {
: super(elementEnvironment, nativeBasicData, world,
selectorConstraintsStrategy);
+ @override
+ bool hasConstantFieldInitializer(FieldElement field) {
+ return field.constant != null;
+ }
+
/// Calls [f] with every instance field, together with its declarer, in an
/// instance of [cls].
void forEachInstanceField(
@@ -559,12 +570,18 @@ class ElementCodegenWorldBuilderImpl extends CodegenWorldBuilderImpl {
}
@override
- void forEachParameter(
- MethodElement function, void f(DartType type, String name)) {
+ void forEachParameter(MethodElement function,
+ void f(DartType type, String name, ConstantValue defaultValue)) {
FunctionSignature parameters = function.functionSignature;
- parameters.forEachParameter((_parameter) {
+ parameters.orderedForEachParameter((_parameter) {
ParameterElement parameter = _parameter;
- f(parameter.type, parameter.name);
+ ConstantValue value;
+ if (parameter.constant != null) {
+ value = _constants.getConstantValue(parameter.constant);
+ } else {
+ value = new NullConstantValue();
+ }
+ f(parameter.type, parameter.name, value);
});
}
@@ -600,7 +617,10 @@ class ElementCodegenWorldBuilderImpl extends CodegenWorldBuilderImpl {
}
class KernelCodegenWorldBuilder extends CodegenWorldBuilderImpl {
+ KernelToElementMapImpl _elementMap;
+
KernelCodegenWorldBuilder(
+ this._elementMap,
ElementEnvironment elementEnvironment,
NativeBasicData nativeBasicData,
ClosedWorld world,
@@ -609,9 +629,14 @@ class KernelCodegenWorldBuilder extends CodegenWorldBuilderImpl {
selectorConstraintsStrategy);
@override
- void forEachParameter(
- FunctionEntity function, void f(DartType type, String name)) {
- throw new UnimplementedError('KernelCodegenWorldBuilder.forEachParameter');
+ bool hasConstantFieldInitializer(FieldEntity field) {
+ return _elementMap.hasConstantFieldInitializer(field);
+ }
+
+ @override
+ void forEachParameter(FunctionEntity function,
+ void f(DartType type, String name, ConstantValue defaultValue)) {
+ _elementMap.forEachParameter(function, f);
}
@override

Powered by Google App Engine
This is Rietveld 408576698