| Index: pkg/dev_compiler/lib/js/common/dart_sdk.js
 | 
| diff --git a/pkg/dev_compiler/lib/js/common/dart_sdk.js b/pkg/dev_compiler/lib/js/common/dart_sdk.js
 | 
| index 2656bda466e5e92b2474cc4ef3971a9ce60d7e8a..f06ebfab2f130d5b4a44153fe1215a42989d8593 100644
 | 
| --- a/pkg/dev_compiler/lib/js/common/dart_sdk.js
 | 
| +++ b/pkg/dev_compiler/lib/js/common/dart_sdk.js
 | 
| @@ -616,11 +616,12 @@
 | 
|    let TypeToTypeMirror = () => (TypeToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [core.Type])))();
 | 
|    let dynamicAndListTodynamic = () => (dynamicAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.List])))();
 | 
|    let dynamicAndStringAndListTodynamic = () => (dynamicAndStringAndListTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, core.String, core.List])))();
 | 
| -  let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
 | 
| +  let SymbolTodynamic = () => (SymbolTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Symbol])))();
 | 
| +  let dynamicToSymbol = () => (dynamicToSymbol = dart.constFn(dart.definiteFunctionType(core.Symbol, [dart.dynamic])))();
 | 
| +  let dynamicToMapOfSymbol$dynamic = () => (dynamicToMapOfSymbol$dynamic = dart.constFn(dart.definiteFunctionType(MapOfSymbol$dynamic(), [dart.dynamic])))();
 | 
|    let TypeAndInvocationTodynamic = () => (TypeAndInvocationTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.Invocation])))();
 | 
|    let SymbolAnddynamicTovoid = () => (SymbolAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Symbol, dart.dynamic])))();
 | 
|    let MapOfSymbol$dynamicTodynamic = () => (MapOfSymbol$dynamicTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [MapOfSymbol$dynamic()])))();
 | 
| -  let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
 | 
|    let dynamicToTypeMirror = () => (dynamicToTypeMirror = dart.constFn(dart.definiteFunctionType(mirrors.TypeMirror, [dart.dynamic])))();
 | 
|    let dynamicAnddynamicAnddynamicTovoid = () => (dynamicAnddynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic, dart.dynamic])))();
 | 
|    let ListToList = () => (ListToList = dart.constFn(dart.definiteFunctionType(core.List, [core.List])))();
 | 
| @@ -678,6 +679,7 @@
 | 
|    let ObjectToint = () => (ObjectToint = dart.constFn(dart.definiteFunctionType(core.int, [core.Object])))();
 | 
|    let ObjectTovoid = () => (ObjectTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Object])))();
 | 
|    let StringAndStringTovoid$ = () => (StringAndStringTovoid$ = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, core.String])))();
 | 
| +  let StringAnddynamicTovoid = () => (StringAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String, dart.dynamic])))();
 | 
|    let MapOfString$StringAndStringToMapOfString$String = () => (MapOfString$StringAndStringToMapOfString$String = dart.constFn(dart.definiteFunctionType(MapOfString$String(), [MapOfString$String(), core.String])))();
 | 
|    let intAndintAndintTovoid = () => (intAndintAndintTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.int, core.int, core.int])))();
 | 
|    let String__Tovoid = () => (String__Tovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String], [dart.dynamic])))();
 | 
| @@ -749,6 +751,7 @@
 | 
|    let NodeAndNodeTovoid = () => (NodeAndNodeTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [html$.Node, html$.Node])))();
 | 
|    let dynamicToImageData = () => (dynamicToImageData = dart.constFn(dart.definiteFunctionType(html$.ImageData, [dart.dynamic])))();
 | 
|    let ImageDataTodynamic = () => (ImageDataTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [html$.ImageData])))();
 | 
| +  let dynamicToMap = () => (dynamicToMap = dart.constFn(dart.definiteFunctionType(core.Map, [dart.dynamic])))();
 | 
|    let Map__Todynamic = () => (Map__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Map], [dynamicTovoid()])))();
 | 
|    let ListOfStringToList = () => (ListOfStringToList = dart.constFn(dart.definiteFunctionType(core.List, [ListOfString()])))();
 | 
|    let dynamicToDateTime = () => (dynamicToDateTime = dart.constFn(dart.definiteFunctionType(core.DateTime, [dart.dynamic])))();
 | 
| @@ -780,10 +783,10 @@
 | 
|      return Mixin;
 | 
|    };
 | 
|    dart.getMixins = function(clazz) {
 | 
| -    return clazz[dart._mixins];
 | 
| +    return Object.hasOwnProperty.call(clazz, dart._mixins) ? clazz[dart._mixins] : null;
 | 
|    };
 | 
|    dart.getImplements = function(clazz) {
 | 
| -    return clazz[dart.implements];
 | 
| +    return Object.hasOwnProperty.call(clazz, dart.implements) ? clazz[dart.implements] : null;
 | 
|    };
 | 
|    dart.flattenFutures = function(builder) {
 | 
|      function flatten(T) {
 | 
| @@ -8657,18 +8660,26 @@
 | 
|    });
 | 
|    _internal.Sort._INSERTION_SORT_THRESHOLD = 32;
 | 
|    const _name = Symbol('_name');
 | 
| +  const _nativeSymbol = Symbol('_nativeSymbol');
 | 
|    _internal.Symbol = class Symbol extends core.Object {
 | 
|      new(name) {
 | 
|        this[_name] = name;
 | 
| +      this[_nativeSymbol] = null;
 | 
| +    }
 | 
| +    es6(name, nativeSymbol) {
 | 
| +      this[_name] = name;
 | 
| +      this[_nativeSymbol] = nativeSymbol;
 | 
|      }
 | 
|      unvalidated(name) {
 | 
|        this[_name] = name;
 | 
| +      this[_nativeSymbol] = null;
 | 
|      }
 | 
|      validated(name) {
 | 
|        this[_name] = _internal.Symbol.validatePublicSymbol(name);
 | 
| +      this[_nativeSymbol] = null;
 | 
|      }
 | 
|      ['=='](other) {
 | 
| -      return _internal.Symbol.is(other) && this[_name] == other[_name];
 | 
| +      return _internal.Symbol.is(other) && this[_name] == other[_name] && dart.equals(this[_nativeSymbol], other[_nativeSymbol]);
 | 
|      }
 | 
|      get hashCode() {
 | 
|        let hash = this._hashCode;
 | 
| @@ -8684,6 +8695,9 @@
 | 
|      static getName(symbol) {
 | 
|        return symbol[_name];
 | 
|      }
 | 
| +    static getNativeSymbol(symbol) {
 | 
| +      return symbol[_nativeSymbol];
 | 
| +    }
 | 
|      static validatePublicSymbol(name) {
 | 
|        if (dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.publicSymbolPattern.hasMatch(name))) return name;
 | 
|        if (dart.test(name[dartx.startsWith]('_'))) {
 | 
| @@ -8695,16 +8709,21 @@
 | 
|        return dart.test(name[dartx.isEmpty]) || dart.test(_internal.Symbol.symbolPattern.hasMatch(name));
 | 
|      }
 | 
|    };
 | 
| +  dart.defineNamedConstructor(_internal.Symbol, 'es6');
 | 
|    dart.defineNamedConstructor(_internal.Symbol, 'unvalidated');
 | 
|    dart.defineNamedConstructor(_internal.Symbol, 'validated');
 | 
|    _internal.Symbol[dart.implements] = () => [core.Symbol];
 | 
|    dart.setSignature(_internal.Symbol, {
 | 
|      constructors: () => ({
 | 
|        new: dart.definiteFunctionType(_internal.Symbol, [core.String]),
 | 
| +      es6: dart.definiteFunctionType(_internal.Symbol, [core.String, dart.dynamic]),
 | 
|        unvalidated: dart.definiteFunctionType(_internal.Symbol, [core.String]),
 | 
|        validated: dart.definiteFunctionType(_internal.Symbol, [core.String])
 | 
|      }),
 | 
| -    fields: () => ({[_name]: core.String}),
 | 
| +    fields: () => ({
 | 
| +      [_name]: core.String,
 | 
| +      [_nativeSymbol]: dart.dynamic
 | 
| +    }),
 | 
|      methods: () => ({'==': dart.definiteFunctionType(core.bool, [core.Object])}),
 | 
|      sfields: () => ({
 | 
|        reservedWordRE: core.String,
 | 
| @@ -8716,10 +8735,11 @@
 | 
|      }),
 | 
|      statics: () => ({
 | 
|        getName: dart.definiteFunctionType(core.String, [_internal.Symbol]),
 | 
| +      getNativeSymbol: dart.definiteFunctionType(dart.dynamic, [_internal.Symbol]),
 | 
|        validatePublicSymbol: dart.definiteFunctionType(core.String, [core.String]),
 | 
|        isValidSymbol: dart.definiteFunctionType(core.bool, [core.String])
 | 
|      }),
 | 
| -    names: ['getName', 'validatePublicSymbol', 'isValidSymbol']
 | 
| +    names: ['getName', 'getNativeSymbol', 'validatePublicSymbol', 'isValidSymbol']
 | 
|    });
 | 
|    _internal.Symbol.reservedWordRE = '(?:assert|break|c(?:a(?:se|tch)|lass|on(?:st|tinue))|d(?:efault|o)|' + 'e(?:lse|num|xtends)|f(?:alse|inal(?:ly)?|or)|i[fns]|n(?:ew|ull)|' + 'ret(?:hrow|urn)|s(?:uper|witch)|t(?:h(?:is|row)|r(?:ue|y))|' + 'v(?:ar|oid)|w(?:hile|ith))';
 | 
|    _internal.Symbol.operatorRE = '(?:[\\-+*/%&|^]|\\[\\]=?|==|~/?|<[<=]?|>[>=]?|unary-)';
 | 
| @@ -13230,73 +13250,109 @@
 | 
|      return _js_mirrors._dart.definiteFunctionType(type, []);
 | 
|    };
 | 
|    dart.fn(_js_mirrors._defaultConstructorType, dynamicTodynamic$());
 | 
| +  _js_mirrors._getMixins = function(type) {
 | 
| +    return _js_mirrors._dart.getMixins(type, []);
 | 
| +  };
 | 
| +  dart.fn(_js_mirrors._getMixins, dynamicTodynamic$());
 | 
|    _js_mirrors._Lazy$ = dart.generic(T => {
 | 
|      const _Lazy = dart.typedef('_Lazy', () => dart.functionType(T, []));
 | 
|      return _Lazy;
 | 
|    });
 | 
|    _js_mirrors._Lazy = _Lazy();
 | 
| +  _js_mirrors._getESSymbol = function(symbol) {
 | 
| +    return _internal.Symbol.getNativeSymbol(_internal.Symbol.as(symbol));
 | 
| +  };
 | 
| +  dart.lazyFn(_js_mirrors._getESSymbol, () => SymbolTodynamic());
 | 
| +  _js_mirrors._getMember = function(symbol) {
 | 
| +    let privateSymbol = _js_mirrors._getESSymbol(symbol);
 | 
| +    if (privateSymbol != null) {
 | 
| +      return privateSymbol;
 | 
| +    }
 | 
| +    return _js_mirrors.getName(symbol);
 | 
| +  };
 | 
| +  dart.lazyFn(_js_mirrors._getMember, () => SymbolTodynamic());
 | 
|    _js_mirrors._getNameForESSymbol = function(member) {
 | 
| +    dart.assert(typeof member == "symbol");
 | 
|      let str = dart.toString(member);
 | 
|      dart.assert(dart.test(str[dartx.startsWith]('Symbol(')) && dart.test(str[dartx.endsWith](')')));
 | 
|      return str[dartx.substring](7, dart.notNull(str[dartx.length]) - 1);
 | 
|    };
 | 
|    dart.lazyFn(_js_mirrors._getNameForESSymbol, () => dynamicToString());
 | 
| +  _js_mirrors._getSymbolForESSymbol = function(member) {
 | 
| +    let name = _js_mirrors._getNameForESSymbol(member);
 | 
| +    return new _internal.Symbol.es6(name, member);
 | 
| +  };
 | 
| +  dart.lazyFn(_js_mirrors._getSymbolForESSymbol, () => dynamicToSymbol());
 | 
| +  _js_mirrors._getSymbolForMember = function(member) {
 | 
| +    if (typeof member == 'string') {
 | 
| +      return core.Symbol.new(member);
 | 
| +    } else {
 | 
| +      let name = _js_mirrors._getNameForESSymbol(member);
 | 
| +      return new _internal.Symbol.es6(name, member);
 | 
| +    }
 | 
| +  };
 | 
| +  dart.lazyFn(_js_mirrors._getSymbolForMember, () => dynamicToSymbol());
 | 
|    _js_mirrors._toDartMap = function(data) {
 | 
| -    if (data == null) return dart.map();
 | 
| -    let map = _js_mirrors._dart.map(data);
 | 
| +    if (data == null) return dart.map({}, core.Symbol, dart.dynamic);
 | 
| +    let map = MapOfSymbol$dynamic().new();
 | 
| +    let publicMembers = Object.getOwnPropertyNames(data);
 | 
| +    for (let member of core.Iterable._check(publicMembers)) {
 | 
| +      let symbol = core.Symbol.new(core.String._check(member));
 | 
| +      map[dartx._set](symbol, data[member]);
 | 
| +    }
 | 
|      let privateMembers = Object.getOwnPropertySymbols(data);
 | 
|      for (let member of core.Iterable._check(privateMembers)) {
 | 
| -      let name = _js_mirrors._getNameForESSymbol(member);
 | 
| -      map[dartx._set](name, data[member]);
 | 
| +      let symbol = _js_mirrors._getSymbolForESSymbol(member);
 | 
| +      map[dartx._set](symbol, data[member]);
 | 
|      }
 | 
|      return map;
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._toDartMap, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getConstructors = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getConstructorSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getConstructors, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getFields = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getFieldSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getFields, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getFields, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getMethods = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getMethodSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getMethods, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getGetters = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getGetterSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getGetters, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getSetters = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getSetterSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getSetters, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getStaticFields = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getStaticFieldSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getStaticFields, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getStatics = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getStaticSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getStatics, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getStaticGetters = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getStaticGetterSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getStaticGetters, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._getStaticSetters = function(obj) {
 | 
|      let sig = _js_mirrors._dart.getStaticSetterSig(obj);
 | 
|      return _js_mirrors._toDartMap(sig);
 | 
|    };
 | 
| -  dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMap());
 | 
| +  dart.lazyFn(_js_mirrors._getStaticSetters, () => dynamicToMapOfSymbol$dynamic());
 | 
|    _js_mirrors._unwrap = function(obj) {
 | 
|      return _js_mirrors._dart.unwrapType(obj);
 | 
|    };
 | 
| @@ -13435,15 +13491,7 @@
 | 
|      [_getAccessor](reflectee, symbol, args, namedArgs) {
 | 
|        if (args === void 0) args = null;
 | 
|        if (namedArgs === void 0) namedArgs = null;
 | 
| -      let name = _js_mirrors.getName(symbol);
 | 
| -      if (!dart.test(name[dartx.startsWith]('_'))) return name;
 | 
| -      let privateMembers = Object.getOwnPropertySymbols(reflectee);
 | 
| -      dart.dsend(privateMembers, 'addAll', Object.getOwnPropertySymbols(reflectee.__proto__));
 | 
| -      for (let member of core.Iterable._check(privateMembers)) {
 | 
| -        let privateName = _js_mirrors._getNameForESSymbol(member);
 | 
| -        if (name == privateName) return member;
 | 
| -      }
 | 
| -      return new core.NoSuchMethodError(reflectee, symbol, args, namedArgs);
 | 
| +      return _js_mirrors._getMember(symbol);
 | 
|      }
 | 
|      getField(symbol) {
 | 
|        let name = this[_getAccessor](this.reflectee, symbol);
 | 
| @@ -13520,6 +13568,7 @@
 | 
|    let const$0;
 | 
|    const _declarations = Symbol('_declarations');
 | 
|    const _raw = Symbol('_raw');
 | 
| +  const _mixin = Symbol('_mixin');
 | 
|    const _typeArguments = Symbol('_typeArguments');
 | 
|    let const$1;
 | 
|    _js_mirrors.JsClassMirror = class JsClassMirror extends _js_mirrors.JsMirror {
 | 
| @@ -13536,67 +13585,66 @@
 | 
|          this[_declarations] = MapOfSymbol$DeclarationMirror().new();
 | 
|          let unwrapped = _js_mirrors._unwrap(this[_cls]);
 | 
|          let constructors = _js_mirrors._getConstructors(unwrapped);
 | 
| -        constructors[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        constructors[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          if (dart.test(constructors[dartx.isEmpty])) {
 | 
|            let name = 'new';
 | 
|            let ft = _js_mirrors._defaultConstructorType(_js_mirrors._unwrap(this[_cls]));
 | 
|            let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, name, ft));
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._constructor(this, symbol, ft));
 | 
|          }
 | 
|          let fields = _js_mirrors._getFields(unwrapped);
 | 
| -        fields[dartx.forEach](dart.fn((name, t) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| +        fields[dartx.forEach](dart.fn((symbol, t) => {
 | 
|            let metadata = [];
 | 
|            if (core.List.is(t)) {
 | 
|              metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
 | 
|              t = dart.dindex(t, 0);
 | 
|            }
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let methods = _js_mirrors._getMethods(unwrapped);
 | 
| -        methods[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        methods[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let getters = _js_mirrors._getGetters(unwrapped);
 | 
| -        getters[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        getters[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let setters = _js_mirrors._getSetters(unwrapped);
 | 
| -        setters[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          name = dart.notNull(name) + '=';
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        setters[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = dart.notNull(_js_mirrors.getName(symbol)) + '=';
 | 
| +          symbol = new _internal.Symbol.es6(name, _js_mirrors._getESSymbol(symbol));
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._instanceMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let staticFields = _js_mirrors._getStaticFields(unwrapped);
 | 
| -        staticFields[dartx.forEach](dart.fn((name, t) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| +        staticFields[dartx.forEach](dart.fn((symbol, t) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
|            let metadata = [];
 | 
|            if (core.List.is(t)) {
 | 
|              metadata = core.List._check(dart.dsend(dart.dsend(t, 'skip', 1), 'toList'));
 | 
|              t = dart.dindex(t, 0);
 | 
|            }
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(name, core.Type._check(_js_mirrors._wrap(t)), metadata));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsVariableMirror._(symbol, core.Type._check(_js_mirrors._wrap(t)), metadata));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let statics = _js_mirrors._getStatics(unwrapped);
 | 
| -        statics[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        statics[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let staticGetters = _js_mirrors._getStaticGetters(unwrapped);
 | 
| -        staticGetters[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        staticGetters[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          let staticSetters = _js_mirrors._getStaticSetters(unwrapped);
 | 
| -        staticSetters[dartx.forEach](dart.fn((name, ft) => {
 | 
| -          let symbol = core.Symbol.new(name);
 | 
| -          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, name, ft));
 | 
| -        }, StringAnddynamicTovoid()));
 | 
| +        staticSetters[dartx.forEach](dart.fn((symbol, ft) => {
 | 
| +          let name = _js_mirrors.getName(symbol);
 | 
| +          this[_declarations][dartx._set](symbol, new _js_mirrors.JsMethodMirror._staticMethod(this, symbol, ft));
 | 
| +        }, SymbolAnddynamicTovoid()));
 | 
|          this[_declarations] = MapOfSymbol$DeclarationMirror().unmodifiable(this[_declarations]);
 | 
|        }
 | 
|        return this[_declarations];
 | 
| @@ -13605,7 +13653,7 @@
 | 
|        this[_cls] = cls;
 | 
|        this[_raw] = _js_mirrors._getGenericClass(_js_mirrors._unwrap(cls));
 | 
|        this.simpleName = core.Symbol.new(_js_mirrors._unwrap(cls).name);
 | 
| -      this.mixin = null;
 | 
| +      this[_mixin] = null;
 | 
|        this[_typeArguments] = null;
 | 
|        this[_metadata$] = null;
 | 
|        this[_declarations] = null;
 | 
| @@ -13676,6 +13724,21 @@
 | 
|          return mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(_js_mirrors._unwrap(this[_cls]).__proto__))));
 | 
|        }
 | 
|      }
 | 
| +    get mixin() {
 | 
| +      if (this[_mixin] != null) {
 | 
| +        return this[_mixin];
 | 
| +      }
 | 
| +      let mixins = _js_mirrors._getMixins(_js_mirrors._unwrap(this[_cls]));
 | 
| +      if (mixins == null || dart.test(dart.dload(mixins, 'isEmpty'))) {
 | 
| +        this[_mixin] = this;
 | 
| +        return this[_mixin];
 | 
| +      }
 | 
| +      if (dart.test(dart.dsend(dart.dload(mixins, 'length'), '>', 1))) {
 | 
| +        dart.throw(new core.UnsupportedError("ClassMirror.mixin not yet supported for " + dart.str`classes (${this[_cls]}) with multiple mixins`));
 | 
| +      }
 | 
| +      this[_mixin] = mirrors.ClassMirror._check(_js_mirrors.reflectType(core.Type._check(_js_mirrors._wrap(dart.dindex(mixins, 0)))));
 | 
| +      return this[_mixin];
 | 
| +    }
 | 
|      toString() {
 | 
|        return dart.str`ClassMirror on '${this[_cls]}'`;
 | 
|      }
 | 
| @@ -13724,7 +13787,7 @@
 | 
|        [_cls]: core.Type,
 | 
|        simpleName: core.Symbol,
 | 
|        [_raw]: dart.dynamic,
 | 
| -      mixin: mirrors.ClassMirror,
 | 
| +      [_mixin]: mirrors.ClassMirror,
 | 
|        [_typeArguments]: ListOfTypeMirror(),
 | 
|        [_metadata$]: ListOfInstanceMirror(),
 | 
|        [_declarations]: MapOfSymbol$DeclarationMirror()
 | 
| @@ -13738,7 +13801,8 @@
 | 
|        isOriginalDeclaration: dart.definiteFunctionType(core.bool, []),
 | 
|        typeArguments: dart.definiteFunctionType(core.List$(mirrors.TypeMirror), []),
 | 
|        originalDeclaration: dart.definiteFunctionType(mirrors.TypeMirror, []),
 | 
| -      superclass: dart.definiteFunctionType(mirrors.ClassMirror, [])
 | 
| +      superclass: dart.definiteFunctionType(mirrors.ClassMirror, []),
 | 
| +      mixin: dart.definiteFunctionType(mirrors.ClassMirror, [])
 | 
|      }),
 | 
|      methods: () => ({
 | 
|        newInstance: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()]),
 | 
| @@ -13747,13 +13811,15 @@
 | 
|        invoke: dart.definiteFunctionType(mirrors.InstanceMirror, [core.Symbol, core.List], [MapOfSymbol$dynamic()])
 | 
|      })
 | 
|    });
 | 
| +  const _symbol = Symbol('_symbol');
 | 
|    const _name$ = Symbol('_name');
 | 
|    _js_mirrors.JsVariableMirror = class JsVariableMirror extends _js_mirrors.JsMirror {
 | 
|      get simpleName() {
 | 
| -      return core.Symbol.new(this[_name$]);
 | 
| +      return this[_symbol];
 | 
|      }
 | 
| -    _(name, t, annotations) {
 | 
| -      this[_name$] = name;
 | 
| +    _(symbol, t, annotations) {
 | 
| +      this[_symbol] = symbol;
 | 
| +      this[_name$] = _js_mirrors.getName(symbol);
 | 
|        this.type = _js_mirrors.reflectType(t);
 | 
|        this.metadata = ListOfInstanceMirror().unmodifiable(annotations[dartx.map](mirrors.InstanceMirror)(dart.fn(a => _js_mirrors.reflect(a), dynamicToInstanceMirror())));
 | 
|        this.isStatic = false;
 | 
| @@ -13784,8 +13850,9 @@
 | 
|    dart.defineNamedConstructor(_js_mirrors.JsVariableMirror, '_');
 | 
|    _js_mirrors.JsVariableMirror[dart.implements] = () => [mirrors.VariableMirror];
 | 
|    dart.setSignature(_js_mirrors.JsVariableMirror, {
 | 
| -    constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.String, core.Type, core.List])}),
 | 
| +    constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsVariableMirror, [core.Symbol, core.Type, core.List])}),
 | 
|      fields: () => ({
 | 
| +      [_symbol]: core.Symbol,
 | 
|        [_name$]: core.String,
 | 
|        type: mirrors.TypeMirror,
 | 
|        metadata: ListOfInstanceMirror(),
 | 
| @@ -13795,8 +13862,8 @@
 | 
|      getters: () => ({simpleName: dart.definiteFunctionType(core.Symbol, [])})
 | 
|    });
 | 
|    _js_mirrors.JsParameterMirror = class JsParameterMirror extends _js_mirrors.JsVariableMirror {
 | 
| -    _(name, t, annotations) {
 | 
| -      super._(name, t, annotations);
 | 
| +    _(member, t, annotations) {
 | 
| +      super._(member, t, annotations);
 | 
|      }
 | 
|      toString() {
 | 
|        return dart.str`ParameterMirror on '${this[_name$]}'`;
 | 
| @@ -13835,7 +13902,7 @@
 | 
|    dart.defineNamedConstructor(_js_mirrors.JsParameterMirror, '_');
 | 
|    _js_mirrors.JsParameterMirror[dart.implements] = () => [mirrors.ParameterMirror];
 | 
|    dart.setSignature(_js_mirrors.JsParameterMirror, {
 | 
| -    constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.String, core.Type, core.List])})
 | 
| +    constructors: () => ({_: dart.definiteFunctionType(_js_mirrors.JsParameterMirror, [core.Symbol, core.Type, core.List])})
 | 
|    });
 | 
|    const _params = Symbol('_params');
 | 
|    const _createParameterMirrorList = Symbol('_createParameterMirrorList');
 | 
| @@ -13850,10 +13917,11 @@
 | 
|        return this[_name$][dartx.startsWith]('_');
 | 
|      }
 | 
|      get simpleName() {
 | 
| -      return core.Symbol.new(this[_name$]);
 | 
| +      return this[_symbol];
 | 
|      }
 | 
| -    _constructor(cls, name, ftype) {
 | 
| -      this[_name$] = name;
 | 
| +    _constructor(cls, symbol, ftype) {
 | 
| +      this[_symbol] = symbol;
 | 
| +      this[_name$] = _js_mirrors.getName(symbol);
 | 
|        this.isConstructor = true;
 | 
|        this.isStatic = false;
 | 
|        this[_params] = null;
 | 
| @@ -13861,8 +13929,9 @@
 | 
|        this.isFinal = false;
 | 
|        this[_createParameterMirrorList](ftype);
 | 
|      }
 | 
| -    _instanceMethod(cls, name, ftype) {
 | 
| -      this[_name$] = name;
 | 
| +    _instanceMethod(cls, symbol, ftype) {
 | 
| +      this[_symbol] = symbol;
 | 
| +      this[_name$] = _js_mirrors.getName(symbol);
 | 
|        this.isConstructor = false;
 | 
|        this.isStatic = false;
 | 
|        this[_params] = null;
 | 
| @@ -13870,8 +13939,9 @@
 | 
|        this.isFinal = false;
 | 
|        this[_createParameterMirrorList](ftype);
 | 
|      }
 | 
| -    _staticMethod(cls, name, ftype) {
 | 
| -      this[_name$] = name;
 | 
| +    _staticMethod(cls, symbol, ftype) {
 | 
| +      this[_symbol] = symbol;
 | 
| +      this[_name$] = _js_mirrors.getName(symbol);
 | 
|        this.isConstructor = false;
 | 
|        this.isStatic = true;
 | 
|        this[_params] = null;
 | 
| @@ -13880,7 +13950,7 @@
 | 
|        this[_createParameterMirrorList](ftype);
 | 
|      }
 | 
|      get constructorName() {
 | 
| -      return dart.test(this.isConstructor) ? core.Symbol.new(this[_name$]) : null;
 | 
| +      return dart.test(this.isConstructor) ? this[_symbol] : null;
 | 
|      }
 | 
|      get parameters() {
 | 
|        return this[_params];
 | 
| @@ -13909,13 +13979,13 @@
 | 
|        for (let i = 0; i < dart.notNull(args[dartx.length]); ++i) {
 | 
|          let type = args[dartx._get](i);
 | 
|          let metadata = dart.dindex(dart.dload(ftype, 'metadata'), i);
 | 
| -        let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
 | 
| +        let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
 | 
|          params[dartx._set](i, param);
 | 
|        }
 | 
|        for (let i = 0; i < dart.notNull(opts[dartx.length]); ++i) {
 | 
|          let type = opts[dartx._get](i);
 | 
|          let metadata = dart.dindex(dart.dload(ftype, 'metadata'), dart.notNull(args[dartx.length]) + i);
 | 
| -        let param = new _js_mirrors.JsParameterMirror._('', core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
 | 
| +        let param = new _js_mirrors.JsParameterMirror._(core.Symbol.new(''), core.Type._check(_js_mirrors._wrap(type)), core.List._check(metadata));
 | 
|          params[dartx._set](i + dart.notNull(args[dartx.length]), param);
 | 
|        }
 | 
|        this[_params] = ListOfParameterMirror().unmodifiable(params);
 | 
| @@ -13975,11 +14045,12 @@
 | 
|    _js_mirrors.JsMethodMirror[dart.implements] = () => [mirrors.MethodMirror];
 | 
|    dart.setSignature(_js_mirrors.JsMethodMirror, {
 | 
|      constructors: () => ({
 | 
| -      _constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
 | 
| -      _instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic]),
 | 
| -      _staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.String, dart.dynamic])
 | 
| +      _constructor: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
 | 
| +      _instanceMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic]),
 | 
| +      _staticMethod: dart.definiteFunctionType(_js_mirrors.JsMethodMirror, [_js_mirrors.JsClassMirror, core.Symbol, dart.dynamic])
 | 
|      }),
 | 
|      fields: () => ({
 | 
| +      [_symbol]: core.Symbol,
 | 
|        [_name$]: core.String,
 | 
|        [_params]: ListOfParameterMirror(),
 | 
|        [_metadata$]: ListOfInstanceMirror(),
 | 
| 
 |