Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade glimmer-vm to latest #15828

Merged
merged 148 commits into from
Jan 26, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
148 commits
Select commit Hold shift + click to select a range
32b7966
WIP: Upgrade glimmer-vm to 0.29.10
Nov 6, 2017
9155a4e
WIP Add skeleton resolvers, more upgrade work
Nov 17, 2017
a09f6bb
simple type fixes
krisselden Nov 17, 2017
9f61acd
bump glimmer-vm because Tom's done cleanup in the resolver area.
krisselden Nov 18, 2017
c3a8ba3
improve types
krisselden Nov 18, 2017
636f95b
more resolver stuff
krisselden Nov 18, 2017
32116ad
more fixes and todos
krisselden Nov 18, 2017
c825a4c
more WIP
krisselden Nov 18, 2017
2765f31
now to compiling root layout
krisselden Nov 18, 2017
aaada07
WIP: Start getDynamicLayout and compileTemplate
Nov 21, 2017
c85c982
hacks to get a little further
krisselden Nov 21, 2017
cd0a5e7
WIP Add getLayout to outlet manager
Nov 22, 2017
8911d3b
Cleanup curried stuff.
krisselden Nov 28, 2017
6498f4c
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Nov 28, 2017
5d1c1ab
more cleanup of Outlet manager
krisselden Nov 28, 2017
56cafa3
make compileOptions injected and populate macros
krisselden Nov 28, 2017
9226d72
update get more typing
krisselden Nov 28, 2017
4c2a910
Hello World outlet test passes.
krisselden Nov 28, 2017
fadb79a
WIP: Get curly components to render with class and id
Nov 28, 2017
29880cf
Workaround for qunit-fixture not having class=ember-application removed
krisselden Nov 28, 2017
a4d9579
compile-options should be a singleton across app and engines
krisselden Nov 28, 2017
5b159dc
don't leak handles across resolver instances
krisselden Nov 28, 2017
baa243b
fix issue that was from a merge with master
krisselden Nov 29, 2017
cf69ae9
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Nov 29, 2017
1d55411
fix AST plugins
krisselden Nov 29, 2017
9c3b095
Outlets should return render.controller as their self
krisselden Nov 29, 2017
eddbc87
outlets should update
krisselden Nov 29, 2017
96fb03e
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Nov 29, 2017
14c7a9d
Fix missing results from merge
Nov 30, 2017
8d9041c
WIP: Rendering the contents of components
Nov 30, 2017
37fefd1
Update refineBlockSyntax with new object shape
Dec 2, 2017
29f3f15
WIP Add CURLY_CAPABILITIES and update prepareArgs
Dec 6, 2017
8a8bbce
A tagName of empty string means no tag
Dec 7, 2017
ab2db9d
WIP ONly use dynamicLayout when the state has no layout
Dec 12, 2017
b738a10
WIP more work on non dynamicLayouts
Dec 13, 2017
d993059
Fix compiling layouts
krisselden Dec 14, 2017
cd19c14
fix wrapper in top level outlet
krisselden Dec 14, 2017
bb6f512
drop hack
krisselden Dec 14, 2017
1ce33af
fix tag in action modifier
krisselden Dec 14, 2017
e3bcaa2
curly components always have a view
krisselden Dec 14, 2017
814e3f8
Merge remote-tracking branch 'origin/master' into update-glimmer
krisselden Dec 15, 2017
47d7be5
static layout only seems to be able to be curried
krisselden Dec 16, 2017
f7c034f
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
rwjblue Dec 18, 2017
d6dc6aa
Fix computed layout test and falsy class test
Dec 18, 2017
bedbc21
A few more curly tests passing
Dec 19, 2017
0703c15
Fixes to tags
krisselden Dec 20, 2017
3aace9b
Use inner tag for dirtying
Dec 20, 2017
621eeca
Use resolver for input component lookup
Dec 20, 2017
41ac2a6
Update mountMacro, in-element, and a tag
Dec 21, 2017
db6ad51
attrs no longer has a `value`
Dec 21, 2017
07b9331
normalizeTextValue no longer seems to be necessary
Dec 22, 2017
2cbd6be
Fix WRAPPER check, I got it backward after the merge.
krisselden Jan 2, 2018
560a304
hack two way flushing tag stuff
krisselden Jan 3, 2018
63e19eb
Update getTag to actually get a useful tag
Jan 4, 2018
b7e77cc
Bring over referenceFromParts
Jan 4, 2018
30bb21f
Fix attribute bindings integration tests
Jan 4, 2018
a396b4e
Merge remote-tracking branch 'origin/master' into update-glimmer
krisselden Jan 4, 2018
69b95f5
Use primitive reference for static class names
Jan 5, 2018
21c4c13
fix some more tests
krisselden Jan 5, 2018
142b176
Fix get helper
krisselden Jan 5, 2018
197769e
Fix rendering of array and object proxies.
krisselden Jan 6, 2018
13e9505
Fix a few contextual component tests
Jan 6, 2018
006da25
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 7, 2018
44f5200
Fix textarea helper tests
Jan 8, 2018
4ca1571
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 8, 2018
4d9d2f6
Dasherize classes, more thorough readDOMAttr
Jan 8, 2018
f93ff47
Currently all outlets are rerendering
krisselden Jan 9, 2018
91185e5
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 9, 2018
a8bb87b
Fix template injection tests.
rwjblue Jan 9, 2018
bffc7e7
Fix bad merge
krisselden Jan 9, 2018
cb47ca0
Get some more input tests passing
krisselden Jan 9, 2018
ae93c14
Add @glimmer/debug if present when building in development.
krisselden Jan 9, 2018
c5d0f92
getComponentDefinition instrumentation
Jan 9, 2018
f69116d
Fix outlet manager getSelf()
krisselden Jan 9, 2018
c27f2cd
Fix style warning tests
Jan 9, 2018
3a93fc8
A better approach to the StyleAttributeManager
Jan 9, 2018
188631a
Remove duplicate isHTMLSafe and pass all params in attributeFor
krisselden Jan 9, 2018
38ae8fb
cleanup some type errors
krisselden Jan 9, 2018
d7d9540
Some small cleanup ahead of fixing outlet stability
krisselden Jan 9, 2018
660198c
Fix typing issues split old builder.dynamic.component into builder.dy…
krisselden Jan 10, 2018
d3c2b33
Fix let syntax
krisselden Jan 10, 2018
ecf32d2
This isn't used and built in
krisselden Jan 10, 2018
22cd04f
fix let macro signature
krisselden Jan 10, 2018
dd76e62
Fix custom helper tests
Jan 10, 2018
240dc67
there are checks in opcode if the handle is falsy so reserve index 0
krisselden Jan 10, 2018
2f135f9
Remove hasHelper method used only in assertion
Jan 10, 2018
75f76f8
normalizeTextValue is important
Jan 10, 2018
f3ed853
Add the rest of the tests from #15287
Jan 10, 2018
129ee64
Component not found assert in resolver
Jan 10, 2018
abf3db1
Simplify outlet and fix stability.
krisselden Jan 11, 2018
8d57c53
small cleanup of tslint and type errors
krisselden Jan 11, 2018
af75347
Assert that helper exists
Jan 11, 2018
63bcdeb
Fix application lifecycle test
Jan 11, 2018
7e29308
more type fixes
krisselden Jan 11, 2018
a65c874
More progress on mount and render
krisselden Jan 12, 2018
b18bee4
cleanup types on mount syntax
krisselden Jan 12, 2018
e6ba0d6
cleanup self and tag for outlet
krisselden Jan 12, 2018
e99b469
Update to glimmer-vm packages 0.30.4.
rwjblue Jan 12, 2018
edae558
Fix a couple contextual component tests.
rwjblue Jan 12, 2018
bfbd859
Skip (for now) two tests around `(component thingThatDoesnExist)`
rwjblue Jan 12, 2018
001b162
Get render working, cleanup typing
krisselden Jan 12, 2018
c7a7bc7
Fix remaining contextual component tests.
rwjblue Jan 12, 2018
9240931
Fix helper and part of render
krisselden Jan 12, 2018
221d6bb
Migrate curly test to expectDeprecation for currying conflicts.
rwjblue Jan 12, 2018
4110093
remove unused layoutFor and stub only in abstract base.
krisselden Jan 12, 2018
135d84b
Fix args for model
krisselden Jan 12, 2018
1e539db
remove unused thing
krisselden Jan 12, 2018
424bf82
more cleanup
krisselden Jan 12, 2018
0809d87
fix router render into outlet in render helper
krisselden Jan 13, 2018
abf7bd3
Fix model with model param
krisselden Jan 13, 2018
66f9dbe
fix module unification lookup
krisselden Jan 16, 2018
5c9c617
fix ! usage
krisselden Jan 16, 2018
08ca4e8
Fix template only component feature flag.
krisselden Jan 16, 2018
53a3865
Make sure there is no component for template only
Jan 16, 2018
9484c6e
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 16, 2018
21e2eae
fix experimental syntax
krisselden Jan 16, 2018
8e779f6
cleanup test case class
krisselden Jan 16, 2018
dd1fc5b
cleanup unused
krisselden Jan 16, 2018
ac0542b
root curlies (aka component.appendTo) don't have args.
krisselden Jan 16, 2018
9c0caae
cleanup commented out
krisselden Jan 16, 2018
6dfacd9
fix linting
krisselden Jan 16, 2018
670d490
Get everything that needs to be cached into place
krisselden Jan 17, 2018
ad88028
Begin fixing the custom component manager test
Jan 17, 2018
8d18ca0
Skip the custom component manager tests for now.
Jan 17, 2018
b20f825
Add tests for usage of null/undefined with contextual components.
rwjblue Jan 17, 2018
2890c7a
Fix caching instance for directly imported factories on Component lay…
krisselden Jan 17, 2018
5d01bb0
Add a resolver setter to local lookup test case
Jan 17, 2018
078d618
Implement layout wrapper caching
krisselden Jan 18, 2018
39be53c
fix build
krisselden Jan 18, 2018
2849626
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 18, 2018
5d2b06d
fix root getting factory
krisselden Jan 18, 2018
96265b1
fix Object.assign issues
krisselden Jan 18, 2018
b4037fa
avoid assign and optimize early common exits from prepareArgs
krisselden Jan 19, 2018
d84f498
still hacky but at least exists in prod too
krisselden Jan 19, 2018
cb47858
fix linting
krisselden Jan 19, 2018
8910a0d
Increase browser start and total run timeout times.
rwjblue Jan 19, 2018
09d9d3f
Move `@glimmer/*` deps to `devDependencies`.
rwjblue Jan 19, 2018
ac2c603
Fix imports
krisselden Jan 23, 2018
ab64750
Fix glimmer deps
krisselden Jan 23, 2018
77a8130
forget template compiler needs the compiler
krisselden Jan 23, 2018
6c6434d
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
krisselden Jan 24, 2018
17ec6c4
fix proxy issue
krisselden Jan 24, 2018
c8dd181
contentFor can now be called before init()
krisselden Jan 24, 2018
78e70fe
rollup ember-glimmer
krisselden Jan 24, 2018
c75e6f7
another hack
krisselden Jan 24, 2018
e6cbc39
fix tests
krisselden Jan 24, 2018
eeecb9b
Fix backwards compat shim for custom AST plugins.
rwjblue Jan 25, 2018
ffcf4f1
Merge remote-tracking branch 'origin/master' into upgrade-glimmer
rwjblue Jan 25, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 35 additions & 1 deletion broccoli/packages.js
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,41 @@ module.exports.emberGlimmerES = function _emberGlimmerES() {
}
});

return debugTree(funneled, 'ember-glimmer:output');
let rollup = new Rollup(funneled, {
annotation: 'ember-glimmer',
rollup: {
external: [
'@glimmer/reference',
'@glimmer/runtime',
'@glimmer/node',
'@glimmer/opcode-compiler',
'@glimmer/program',
'@glimmer/wire-format',
'@glimmer/util',
'ember-console',
'ember-debug',
'ember-env-flags',
'ember/features',
'ember-environment',
'ember-utils',
'ember-metal',
'ember-runtime',
'ember-views',
'ember-routing',
'node-module',
'rsvp',
'container'
],
input: 'ember-glimmer/index.js',
output: {
file: 'ember-glimmer.js',
format: 'es',
exports: 'named'
},
},
});

return debugTree(rollup, 'ember-glimmer:output');
};

module.exports.handlebarsES = function _handlebars() {
Expand Down
1 change: 1 addition & 0 deletions broccoli/to-es5.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ module.exports = function toES5(tree, _options) {
}
}],
['transform-es2015-template-literals', {loose: true}],
['transform-es2015-literals'],
['transform-es2015-arrow-functions'],
['transform-es2015-destructuring', {loose: true}],
['transform-es2015-spread', {loose: true}],
Expand Down
17 changes: 14 additions & 3 deletions ember-cli-build.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ const {
rollupEmberMetal
} = require('./broccoli/packages');
const SHOULD_ROLLUP = true;
const ENV = process.env.EMBER_ENV || 'development';

module.exports = function() {
let loader = internalLoader();
let license = emberLicense();
let nodeModule = nodeModuleUtils();
let ENV = process.env.EMBER_ENV || 'development';
let debugFeatures = toES5(emberFeaturesES());
let version = toES5(emberVersionES());
let emberTesting = emberPkgES('ember-testing');
Expand All @@ -49,7 +49,6 @@ module.exports = function() {
let emberDebugES5 = toES5(emberDebug, { annotation: 'ember-debug' });
let emberTemplateCompiler = emberPkgES('ember-template-compiler');
let emberTemplateCompilerES5 = toES5(emberTemplateCompiler, { annotation: 'ember-template-compiler' });

let babelDebugHelpersES5 = toES5(babelHelpers('debug'), { annotation: 'babel helpers debug' });
let inlineParser = toES5(handlebarsES(), { annotation: 'handlebars' });
let tokenizer = toES5(simpleHTMLTokenizerES(), { annotation: 'tokenizer' });
Expand Down Expand Up @@ -309,11 +308,23 @@ module.exports = function() {
};

function dependenciesES6() {
let glimmerEntries = ['@glimmer/node', '@glimmer/runtime'];
if (ENV === 'development') {
let hasGlimmerDebug = true;
try {
require('@glimmer/debug');
} catch (e) {
hasGlimmerDebug = false;
}
if (hasGlimmerDebug) {
glimmerEntries.push('@glimmer/debug', '@glimmer/local-debug-flags');
}
}
return [
dagES(),
routerES(),
routeRecognizerES(),
...glimmerTrees(['@glimmer/node', '@glimmer/runtime']),
...glimmerTrees(glimmerEntries),
];
}

Expand Down
12 changes: 8 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,13 @@
"resolve": "^1.5.0"
},
"devDependencies": {
"@glimmer/compiler": "^0.25.6",
"@glimmer/node": "^0.25.6",
"@glimmer/reference": "^0.25.6",
"@glimmer/runtime": "^0.25.6",
"@glimmer/compiler": "^0.30.5",
"@glimmer/runtime": "^0.30.5",
"@glimmer/node": "^0.30.5",
"@glimmer/interfaces": "^0.30.5",
"@glimmer/reference": "^0.30.5",
"@glimmer/opcode-compiler": "^0.30.5",
"@glimmer/program": "^0.30.5",
"@types/rsvp": "^4.0.1",
"auto-dist-tag": "^0.1.5",
"aws-sdk": "^2.46.0",
Expand All @@ -74,6 +77,7 @@
"babel-plugin-transform-es2015-classes": "^6.24.1",
"babel-plugin-transform-es2015-computed-properties": "^6.24.1",
"babel-plugin-transform-es2015-destructuring": "^6.23.0",
"babel-plugin-transform-es2015-literals": "^6.22.0",
"babel-plugin-transform-es2015-modules-amd": "^6.24.1",
"babel-plugin-transform-es2015-parameters": "^6.24.1",
"babel-plugin-transform-es2015-shorthand-properties": "^6.24.1",
Expand Down
6 changes: 4 additions & 2 deletions packages/container/lib/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { Owner } from 'ember-utils';
interface Container {
registry: any;
owner: any | null;
owner: Owner | null;
cache: any | null;
factoryManagerCache: any | null;
isDestroyed: boolean;
Expand All @@ -14,4 +15,5 @@ interface Container {
}
export const privatize: any;
export const Registry: any;
export const Container: (registry: any, options?: any) => Container;
export const Container: (registry: any, options?: any) => Container;
export const FACTORY_FOR: WeakMap<any, any>;
1 change: 1 addition & 0 deletions packages/ember-application/lib/system/engine-instance.js
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ const EngineInstance = EmberObject.extend(RegistryProxyMixin, ContainerProxyMixi
'-view-registry:main',
`renderer:-${env.isInteractive ? 'dom' : 'inert'}`,
'service:-document',
P`template-options:main`,
];

if (env.isInteractive) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ moduleFor('Ember.Application', class extends ApplicationTestCase {
verifyRegistration(assert, application, P`template:components/-default`);
verifyRegistration(assert, application, 'template:-outlet');
verifyInjection(assert, application, 'view:-outlet', 'template', 'template:-outlet');
verifyInjection(assert, application, 'template', 'env', 'service:-glimmer-environment');
verifyInjection(assert, application, 'template', 'options', P`template-options:main`);

assert.deepEqual(application.registeredOptionsForType('helper'), { instantiate: false }, `optionsForType 'helper'`);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/ember-application/tests/system/engine_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ moduleFor('Ember.Engine', class extends TestCase {
verifyRegistration(assert, engine, P`template:components/-default`);
verifyRegistration(assert, engine, 'template:-outlet');
verifyInjection(assert, engine, 'view:-outlet', 'template', 'template:-outlet');
verifyInjection(assert, engine, 'template', 'env', 'service:-glimmer-environment');
verifyInjection(assert, engine, 'template', 'options', P`template-options:main`);
assert.deepEqual(engine.registeredOptionsForType('helper'), { instantiate: false }, `optionsForType 'helper'`);
}
});
51 changes: 51 additions & 0 deletions packages/ember-glimmer/lib/compile-time-lookup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { ComponentCapabilities, Option, ProgramSymbolTable } from '@glimmer/interfaces';
import { CompileTimeLookup as ICompileTimeLookup } from '@glimmer/opcode-compiler';
import { CompilableTemplate, ComponentDefinition, ComponentManager, WithStaticLayout } from '@glimmer/runtime';
import { OwnedTemplateMeta } from 'ember-views';
import RuntimeResolver from './resolver';

interface StaticComponentManager<DefinitionState> extends WithStaticLayout<any, DefinitionState, OwnedTemplateMeta, RuntimeResolver>,
ComponentManager<any, DefinitionState> {
}

export default class CompileTimeLookup implements ICompileTimeLookup<OwnedTemplateMeta> {
constructor(private resolver: RuntimeResolver) {}

getCapabilities(handle: number): ComponentCapabilities {
let definition = this.resolver.resolve<Option<ComponentDefinition>>(handle);
let { manager, state } = definition!;
return manager.getCapabilities(state);
}

getLayout<DefinitionState>(handle: number): Option<CompilableTemplate<ProgramSymbolTable>> {
const { manager, state } = this.resolver.resolve<ComponentDefinition<DefinitionState, StaticComponentManager<DefinitionState>>>(handle);
const capabilities = manager.getCapabilities(state);

if (capabilities.dynamicLayout) {
return null;
}

const invocation = manager.getLayout(state, this.resolver);
return {
// TODO: this seems weird, it already is compiled
compile() { return invocation.handle; },
symbolTable: invocation.symbolTable
};
}

lookupHelper(name: string, referrer: OwnedTemplateMeta): Option<number> {
return this.resolver.lookupHelper(name, referrer);
}

lookupModifier(name: string, referrer: OwnedTemplateMeta): Option<number> {
return this.resolver.lookupModifier(name, referrer);
}

lookupComponentDefinition(name: string, referrer: OwnedTemplateMeta): Option<number> {
return this.resolver.lookupComponentDefinition(name, referrer);
}

lookupPartial(name: string, referrer: OwnedTemplateMeta): Option<number> {
return this.resolver.lookupPartial(name, referrer);
}
}
27 changes: 13 additions & 14 deletions packages/ember-glimmer/lib/component-managers/abstract.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { ProgramSymbolTable } from '@glimmer/interfaces';
import {
ComponentCapabilities,
Simple,
} from '@glimmer/interfaces';
import { Tag, VersionedPathReference } from '@glimmer/reference';
import {
Arguments,
Bounds,
CompiledDynamicTemplate,
ComponentDefinition,
ComponentManager,
DynamicScope,
ElementOperations,
Environment,
PreparedArguments,
} from '@glimmer/runtime';
import { IArguments } from '@glimmer/runtime/dist/types/lib/vm/arguments';
import {
Destroyable,
Opaque,
Expand All @@ -23,7 +24,7 @@ import DebugStack from '../utils/debug-stack';
// tslint:disable-next-line:max-line-length
// https://github.com/glimmerjs/glimmer-vm/blob/v0.24.0-beta.4/packages/%40glimmer/runtime/lib/component/interfaces.ts#L21

export default abstract class AbstractManager<T> implements ComponentManager<T> {
export default abstract class AbstractManager<T, U> implements ComponentManager<T, U> {
public debugStack: typeof DebugStack;
public _pushToDebugStack: (name: string, environment: any) => void;
public _pushEngineToDebugStack: (name: string, environment: any) => void;
Expand All @@ -32,7 +33,7 @@ export default abstract class AbstractManager<T> implements ComponentManager<T>
this.debugStack = undefined;
}

prepareArgs(_definition: ComponentDefinition<T>, _args: IArguments): Option<PreparedArguments> {
prepareArgs(_state: U, _args: Arguments): Option<PreparedArguments> {
return null;
}

Expand All @@ -42,18 +43,16 @@ export default abstract class AbstractManager<T> implements ComponentManager<T>

abstract create(
env: Environment,
definition: ComponentDefinition<T>,
args: IArguments,
definition: U,
args: Arguments,
dynamicScope: DynamicScope,
caller: VersionedPathReference<void | {}>,
hasDefaultBlock: boolean): T;
abstract layoutFor(
definition: ComponentDefinition<T>,
component: T,
env: Environment): CompiledDynamicTemplate<ProgramSymbolTable>;

abstract getSelf(component: T): VersionedPathReference<Opaque>;
abstract getCapabilities(state: U): ComponentCapabilities;

didCreateElement(_component: T, _element: Element, _operations: ElementOperations): void {
didCreateElement(_component: T, _element: Simple.Element, _operations: ElementOperations): void {
// noop
}

Expand All @@ -68,7 +67,7 @@ export default abstract class AbstractManager<T> implements ComponentManager<T>
// noop
}

getTag(_bucket: T): Option<Tag> { return null; }
abstract getTag(_bucket: T): Tag;

// inheritors should also call `this._pushToDebugStack`
// to ensure the rerendering assertion messages are
Expand Down
Loading