| Index: pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| index 07dc4f65c4e3c48fb953cc2124373149a4c6e76e..61bc31bf1be3c41c65f55ed370eb7f40854074ec 100644
|
| --- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| +++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
|
| @@ -141,6 +141,7 @@ class KernelToElementMapImpl extends KernelToElementMapMixin {
|
|
|
| @override
|
| ConstantValue getFieldConstantValue(ir.Field field) {
|
| + // TODO(johnniwinther): Cache the result in [_FieldData].
|
| return getConstantValue(field.initializer, requireConstant: field.isConst);
|
| }
|
|
|
| @@ -673,12 +674,23 @@ class KernelToElementMapImpl extends KernelToElementMapMixin {
|
| @override
|
| FieldEntity getField(ir.Field node) => _getField(node);
|
|
|
| + bool hasConstantFieldInitializer(KField field) {
|
| + _FieldData data = _memberList[field.memberIndex];
|
| + return getFieldConstantValue(data.node) != null;
|
| + }
|
| +
|
| TypeVariableEntity getTypeVariable(ir.TypeParameter node) =>
|
| _getTypeVariable(node);
|
|
|
| @override
|
| FunctionEntity getMethod(ir.Procedure node) => _getMethod(node);
|
|
|
| + void forEachParameter(KFunction function,
|
| + void f(DartType type, String name, ConstantValue defaultValue)) {
|
| + _FunctionData data = _memberList[function.memberIndex];
|
| + data.forEachParameter(this, f);
|
| + }
|
| +
|
| @override
|
| MemberEntity getMember(ir.Member node) {
|
| if (node is ir.Field) {
|
| @@ -1066,6 +1078,29 @@ class _FunctionData extends _MemberData {
|
| FunctionType getFunctionType(KernelToElementMapImpl elementMap) {
|
| return _type ??= elementMap.getFunctionType(functionNode);
|
| }
|
| +
|
| + void forEachParameter(KernelToElementMap elementMap,
|
| + void f(DartType type, String name, ConstantValue defaultValue)) {
|
| + void handleParameter(ir.VariableDeclaration node, {bool isOptional: true}) {
|
| + DartType type = elementMap.getDartType(node.type);
|
| + String name = node.name;
|
| + ConstantValue defaultValue;
|
| + if (isOptional) {
|
| + if (node.initializer != null) {
|
| + defaultValue = elementMap.getConstantValue(node.initializer);
|
| + } else {
|
| + defaultValue = new NullConstantValue();
|
| + }
|
| + }
|
| + f(type, name, defaultValue);
|
| + }
|
| +
|
| + for (int i = 0; i < functionNode.positionalParameters.length; i++) {
|
| + handleParameter(functionNode.positionalParameters[i],
|
| + isOptional: i < functionNode.requiredParameterCount);
|
| + }
|
| + functionNode.namedParameters.forEach(handleParameter);
|
| + }
|
| }
|
|
|
| class _ConstructorData extends _FunctionData {
|
|
|