| Index: pkg/compiler/lib/src/serialization/modelz.dart | 
| diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart | 
| index 5bcb4a604b25947b2b0c7745d96fd31dc33e6248..ce0fc988ecd307980f6efd0d32bda5e408ca48ce 100644 | 
| --- a/pkg/compiler/lib/src/serialization/modelz.dart | 
| +++ b/pkg/compiler/lib/src/serialization/modelz.dart | 
| @@ -80,9 +80,6 @@ abstract class ElementZ extends Element with ElementCommon { | 
| bool get isAbstract => false; | 
|  | 
| @override | 
| -  bool get isAssignable => _unsupported('isAssignable'); | 
| - | 
| -  @override | 
| bool get isClassMember => false; | 
|  | 
| @override | 
| @@ -124,11 +121,6 @@ abstract class ElementZ extends Element with ElementCommon { | 
| Iterable<MetadataAnnotation> get metadata => const <MetadataAnnotation>[]; | 
|  | 
| @override | 
| -  Element get outermostEnclosingMemberOrTopLevel { | 
| -    return _unsupported('outermostEnclosingMemberOrTopLevel'); | 
| -  } | 
| - | 
| -  @override | 
| Token get position => _unsupported('position'); | 
| } | 
|  | 
| @@ -670,30 +662,34 @@ abstract class ParametersMixin | 
| bool optionalParametersAreNamed = false; | 
| List<DartType> parameterTypes = <DartType>[]; | 
| List<DartType> optionalParameterTypes = <DartType>[]; | 
| -      List<String> namedParameters = <String>[]; | 
| -      List<DartType> namedParameterTypes = <DartType>[]; | 
| for (ParameterElement parameter in parameters) { | 
| if (parameter.isOptional) { | 
| optionalParameterCount++; | 
| -          requiredParameters.add(parameter); | 
| +          optionalParameters.add(parameter); | 
| orderedOptionalParameters.add(parameter); | 
| if (parameter.isNamed) { | 
| optionalParametersAreNamed = true; | 
| -            namedParameters.add(parameter.name); | 
| -            namedParameterTypes.add(parameter.type); | 
| } else { | 
| optionalParameterTypes.add(parameter.type); | 
| } | 
| } else { | 
| requiredParameterCount++; | 
| -          optionalParameters.add(parameter); | 
| +          requiredParameters.add(parameter); | 
| parameterTypes.add(parameter.type); | 
| } | 
| } | 
| +      List<String> namedParameters = const <String>[]; | 
| +      List<DartType> namedParameterTypes = const <DartType>[]; | 
| if (optionalParametersAreNamed) { | 
| +        namedParameters = <String>[]; | 
| +        namedParameterTypes = <DartType>[]; | 
| orderedOptionalParameters.sort((Element a, Element b) { | 
| return a.name.compareTo(b.name); | 
| }); | 
| +        for (ParameterElement parameter in orderedOptionalParameters) { | 
| +          namedParameters.add(parameter.name); | 
| +          namedParameterTypes.add(parameter.type); | 
| +        } | 
| } | 
|  | 
| FunctionType type = new FunctionType( | 
| @@ -1080,7 +1076,7 @@ abstract class ConstructorElementZ extends DeserializedElementZ | 
| } | 
|  | 
| @override | 
| -  AsyncMarker get asyncMarker => _unsupported('asyncMarker'); | 
| +  AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 
|  | 
| @override | 
| InterfaceType computeEffectiveTargetType(InterfaceType newType) { | 
| @@ -1344,6 +1340,11 @@ abstract class FunctionElementZ extends DeserializedElementZ | 
| } | 
|  | 
| @override | 
| +  AsyncMarker get asyncMarker { | 
| +    return _decoder.getEnum(Key.ASYNC_MARKER, AsyncMarker.values); | 
| +  } | 
| + | 
| +  @override | 
| bool get isOperator => _decoder.getBool(Key.IS_OPERATOR); | 
| } | 
|  | 
| @@ -1438,6 +1439,9 @@ abstract class GetterElementZ extends DeserializedElementZ | 
| accept(ElementVisitor visitor, arg) { | 
| return visitor.visitGetterElement(this, arg); | 
| } | 
| + | 
| +  @override | 
| +  AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 
| } | 
|  | 
| class TopLevelGetterElementZ extends GetterElementZ with LibraryMemberMixin { | 
| @@ -1475,6 +1479,9 @@ abstract class SetterElementZ extends DeserializedElementZ | 
| accept(ElementVisitor visitor, arg) { | 
| return visitor.visitSetterElement(this, arg); | 
| } | 
| + | 
| +  @override | 
| +  AsyncMarker get asyncMarker => AsyncMarker.SYNC; | 
| } | 
|  | 
| class TopLevelSetterElementZ extends SetterElementZ with LibraryMemberMixin { | 
| @@ -1706,7 +1713,7 @@ class SyntheticTypeVariableElementZ extends ElementZ | 
| SourceSpan get sourcePosition => typeDeclaration.sourcePosition; | 
| } | 
|  | 
| -class ParameterElementZ extends DeserializedElementZ | 
| +abstract class ParameterElementZ extends DeserializedElementZ | 
| with AnalyzableElementMixin, AstElementMixin, TypedElementMixin | 
| implements ParameterElement { | 
| FunctionElement _functionDeclaration; | 
| @@ -1716,9 +1723,10 @@ class ParameterElementZ extends DeserializedElementZ | 
| ParameterElementZ(ObjectDecoder decoder) : super(decoder); | 
|  | 
| @override | 
| -  accept(ElementVisitor visitor, arg) { | 
| -    return visitor.visitParameterElement(this, arg); | 
| -  } | 
| +  bool get isFinal => _decoder.getBool(Key.IS_FINAL); | 
| + | 
| +  @override | 
| +  bool get isConst => false; | 
|  | 
| @override | 
| ConstantExpression get constant { | 
| @@ -1763,15 +1771,25 @@ class ParameterElementZ extends DeserializedElementZ | 
| bool get isOptional => _decoder.getBool(Key.IS_OPTIONAL); | 
|  | 
| @override | 
| -  ElementKind get kind => ElementKind.PARAMETER; | 
| - | 
| -  @override | 
| LibraryElement get library => executableContext.library; | 
|  | 
| @override | 
| MemberElement get memberContext => executableContext.memberContext; | 
| } | 
|  | 
| +class LocalParameterElementZ extends ParameterElementZ | 
| +    implements LocalParameterElement { | 
| +  LocalParameterElementZ(ObjectDecoder decoder) : super(decoder); | 
| + | 
| +  @override | 
| +  accept(ElementVisitor visitor, arg) { | 
| +    return visitor.visitParameterElement(this, arg); | 
| +  } | 
| + | 
| +  @override | 
| +  ElementKind get kind => ElementKind.PARAMETER; | 
| +} | 
| + | 
| class InitializingFormalElementZ extends ParameterElementZ | 
| implements InitializingFormalElement { | 
| FieldElement _fieldElement; | 
| @@ -1816,9 +1834,12 @@ class LocalVariableElementZ extends DeserializedElementZ | 
| ElementKind get kind => ElementKind.VARIABLE; | 
|  | 
| @override | 
| +  bool get isFinal => _decoder.getBool(Key.IS_FINAL); | 
| + | 
| +  @override | 
| bool get isConst { | 
| if (_isConst == null) { | 
| -      _constant = _decoder.getConstant(Key.CONSTANT); | 
| +      _constant = _decoder.getConstant(Key.CONSTANT, isOptional: true); | 
| _isConst = _constant != null; | 
| } | 
| return _isConst; | 
|  |