| Index: pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart | 
| diff --git a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart | 
| index 6bef0d699f3413ba4194c93dc0746f471b210e65..51a703efdab460c4e319eecf19905c70a70b809c 100644 | 
| --- a/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart | 
| +++ b/pkg/dev_compiler/tool/input_sdk/private/ddc_runtime/classes.dart | 
| @@ -145,12 +145,30 @@ getGenericClass(type) => | 
|  | 
| getGenericArgs(type) => JS('', '$safeGetOwnProperty($type, $_typeArguments)'); | 
|  | 
| +// TODO(vsm): Collapse into one expando. | 
| final _constructorSig = JS('', 'Symbol("sigCtor")'); | 
| -final _methodSig = JS('', 'Symbol("sig")'); | 
| -final _staticSig = JS('', 'Symbol("sigStatic")'); | 
| +final _methodSig = JS('', 'Symbol("sigMethod")'); | 
| +final _fieldSig = JS('', 'Symbol("sigField")'); | 
| +final _getterSig= JS('', 'Symbol("sigGetter")'); | 
| +final _setterSig= JS('', 'Symbol("sigSetter")'); | 
| +final _staticSig = JS('', 'Symbol("sigStaticMethod")'); | 
| +final _staticFieldSig = JS('', 'Symbol("sigStaticField")'); | 
| +final _staticGetterSig= JS('', 'Symbol("sigStaticGetter")'); | 
| +final _staticSetterSig= JS('', 'Symbol("sigStaticSetter")'); | 
| final _genericTypeCtor = JS('', 'Symbol("genericType")'); | 
|  | 
| +// TODO(vsm): Collapse this as well - just provide a dart map to mirrors code. | 
| +// These are queried by mirrors code. | 
| +getConstructorSig(value) => JS('', '#[#]', value, _constructorSig); | 
| getMethodSig(value) => JS('', '#[#]', value, _methodSig); | 
| +getFieldSig(value) => JS('', '#[#]', value, _fieldSig); | 
| +getGetterSig(value) => JS('', '#[#]', value, _getterSig); | 
| +getSetterSig(value) => JS('', '#[#]', value, _setterSig); | 
| +getStaticSig(value) => JS('', '#[#]', value, _staticSig); | 
| +getStaticFieldSig(value) => JS('', '#[#]', value, _staticFieldSig); | 
| +getStaticGetterSig(value) => JS('', '#[#]', value, _staticGetterSig); | 
| +getStaticSetterSig(value) => JS('', '#[#]', value, _staticSetterSig); | 
| + | 
| getGenericTypeCtor(value) => JS('', '#[#]', value, _genericTypeCtor); | 
|  | 
| /// Get the type of a method from an object using the stored signature | 
| @@ -176,7 +194,7 @@ getMethodTypeFromType(type, name) => JS( | 
| classGetConstructorType(cls, name) => JS( | 
| '', | 
| '''(() => { | 
| -  if(!$name) $name = $cls.name; | 
| +  if(!$name) $name = 'new'; | 
| if ($cls === void 0) return void 0; | 
| if ($cls == null) return void 0; | 
| let sigCtor = $cls[$_constructorSig]; | 
| @@ -217,16 +235,21 @@ gbind(f, @rest typeArgs) { | 
| } | 
|  | 
| // Set up the method signature field on the constructor | 
| -_setMethodSignature(f, sigF) => JS( | 
| +_setInstanceSignature(f, sigF, kind) => JS( | 
| '', | 
| '''(() => { | 
| -  $defineMemoizedGetter($f, $_methodSig, () => { | 
| +  $defineMemoizedGetter($f, $kind, () => { | 
| let sigObj = $sigF(); | 
| -    sigObj.__proto__ = $f.__proto__[$_methodSig]; | 
| +    sigObj.__proto__ = $f.__proto__[$kind]; | 
| return sigObj; | 
| }); | 
| })()'''); | 
|  | 
| +_setMethodSignature(f, sigF) => _setInstanceSignature(f, sigF, _methodSig); | 
| +_setFieldSignature(f, sigF) => _setInstanceSignature(f, sigF, _fieldSig); | 
| +_setGetterSignature(f, sigF) => _setInstanceSignature(f, sigF, _getterSig); | 
| +_setSetterSignature(f, sigF) => _setInstanceSignature(f, sigF, _setterSig); | 
| + | 
| // Set up the constructor signature field on the constructor | 
| _setConstructorSignature(f, sigF) => | 
| JS('', '$defineMemoizedGetter($f, $_constructorSig, $sigF)'); | 
| @@ -235,6 +258,15 @@ _setConstructorSignature(f, sigF) => | 
| _setStaticSignature(f, sigF) => | 
| JS('', '$defineMemoizedGetter($f, $_staticSig, $sigF)'); | 
|  | 
| +_setStaticFieldSignature(f, sigF) => | 
| +    JS('', '$defineMemoizedGetter($f, $_staticFieldSig, $sigF)'); | 
| + | 
| +_setStaticGetterSignature(f, sigF) => | 
| +    JS('', '$defineMemoizedGetter($f, $_staticGetterSig, $sigF)'); | 
| + | 
| +_setStaticSetterSignature(f, sigF) => | 
| +    JS('', '$defineMemoizedGetter($f, $_staticSetterSig, $sigF)'); | 
| + | 
| // Set the lazily computed runtime type field on static methods | 
| _setStaticTypes(f, names) => JS( | 
| '', | 
| @@ -258,6 +290,8 @@ _setStaticTypes(f, names) => JS( | 
| ///  names: An array of the names of the static methods.  Used to | 
| ///   permit eagerly setting the runtimeType field on the methods | 
| ///   while still lazily computing the type descriptor object. | 
| +///  fields: A function returning an object mapping instance field | 
| +///    names to types. | 
| setSignature(f, signature) => JS( | 
| '', | 
| '''(() => { | 
| @@ -266,13 +300,31 @@ setSignature(f, signature) => JS( | 
| ('constructors' in signature) ? signature.constructors : () => ({}); | 
| let methods = | 
| ('methods' in signature) ? signature.methods : () => ({}); | 
| +  let fields = | 
| +    ('fields' in signature) ? signature.fields : () => ({}); | 
| +  let getters = | 
| +    ('getters' in signature) ? signature.getters : () => ({}); | 
| +  let setters = | 
| +    ('setters' in signature) ? signature.setters : () => ({}); | 
| let statics = | 
| ('statics' in signature) ? signature.statics : () => ({}); | 
| +  let staticFields = | 
| +    ('sfields' in signature) ? signature.sfields : () => ({}); | 
| +  let staticGetters = | 
| +    ('sgetters' in signature) ? signature.sgetters : () => ({}); | 
| +  let staticSetters = | 
| +    ('ssetters' in signature) ? signature.ssetters : () => ({}); | 
| let names = | 
| ('names' in signature) ? signature.names : []; | 
| $_setConstructorSignature($f, constructors); | 
| $_setMethodSignature($f, methods); | 
| +  $_setFieldSignature($f, fields); | 
| +  $_setGetterSignature($f, getters); | 
| +  $_setSetterSignature($f, setters); | 
| $_setStaticSignature($f, statics); | 
| +  $_setStaticFieldSignature($f, staticFields); | 
| +  $_setStaticGetterSignature($f, staticGetters); | 
| +  $_setStaticSetterSignature($f, staticSetters); | 
| $_setStaticTypes($f, names); | 
| })()'''); | 
|  | 
|  |