| 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 cdc14c1c37a9279066a7ac4831f04da8572ddd81..5d9b9034b9b7122f621a16218d2de372d15da0c3 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
|
| @@ -82,6 +82,35 @@ mixin(base, @rest mixins) => JS(
|
| return Mixin;
|
| })()''');
|
|
|
| +///
|
| +/// Support for virtualizing fields on-demand.
|
| +///
|
| +final _virtualNames = JS('', '{}');
|
| +
|
| +virtualName(key) => JS(
|
| + '',
|
| + '''(() => {
|
| + return #[key] || (#[key] = Symbol(key));
|
| +})()''',
|
| + _virtualNames,
|
| + _virtualNames);
|
| +
|
| +virtualize(object, keys) => JS(
|
| + '',
|
| + '''(() => {
|
| + for (var i = 0; i < keys.length; i += 2) {
|
| + let name = keys[i];
|
| + let symbol = keys[i + 1];
|
| + Object.defineProperty(object, name, {
|
| + configurable: true,
|
| + set: function(value) {
|
| + object[symbol] = value;
|
| + delete object[name];
|
| + }
|
| + });
|
| + }
|
| +})()''');
|
| +
|
| /// The Symbol for storing type arguments on a specialized generic type.
|
| final _mixins = JS('', 'Symbol("mixins")');
|
|
|
|
|