diff --git a/packages/@glimmer-workspace/integration-tests/test/debug-render-tree-test.ts b/packages/@glimmer-workspace/integration-tests/test/debug-render-tree-test.ts
index ad78b676e..62eb6ff24 100644
--- a/packages/@glimmer-workspace/integration-tests/test/debug-render-tree-test.ts
+++ b/packages/@glimmer-workspace/integration-tests/test/debug-render-tree-test.ts
@@ -138,19 +138,29 @@ class DebugRenderTreeTest extends RenderTest {
@test 'emberish curly components'() {
this.registerComponent('Curly', 'HelloWorld', 'Hello World');
+ let error: Error|null = null;
+ const obj = {
+ get getterWithError() {
+ error = new Error('error');
+ throw error;
+ }
+ }
this.render(
- `{{#if this.showSecond}}{{/if}}`,
+ `{{#if this.showSecond}}{{/if}}`,
{
showSecond: false,
+ obj,
}
);
+ this.assert.ok(error !== null, 'expecting an Error');
+
this.assertRenderTree([
{
type: 'component',
name: 'HelloWorld',
- args: { positional: [], named: { arg: 'first' } },
+ args: { positional: [], named: { arg: 'first', arg2: error } },
instance: (instance: EmberishCurlyComponent) => (instance as any).arg === 'first',
template: '(unknown template module)',
bounds: this.nodeBounds(this.delegate.getInitialElement().firstChild),
@@ -164,7 +174,7 @@ class DebugRenderTreeTest extends RenderTest {
{
type: 'component',
name: 'HelloWorld',
- args: { positional: [], named: { arg: 'first' } },
+ args: { positional: [], named: { arg: 'first', arg2: error } },
instance: (instance: EmberishCurlyComponent) => (instance as any).arg === 'first',
template: '(unknown template module)',
bounds: this.nodeBounds(this.element.firstChild),
@@ -187,7 +197,7 @@ class DebugRenderTreeTest extends RenderTest {
{
type: 'component',
name: 'HelloWorld',
- args: { positional: [], named: { arg: 'first' } },
+ args: { positional: [], named: { arg: 'first', arg2: error } },
instance: (instance: EmberishCurlyComponent) => (instance as any).arg === 'first',
template: '(unknown template module)',
bounds: this.nodeBounds(this.element.firstChild),
diff --git a/packages/@glimmer/runtime/lib/vm/arguments.ts b/packages/@glimmer/runtime/lib/vm/arguments.ts
index 2fb5eea71..683ab02ae 100644
--- a/packages/@glimmer/runtime/lib/vm/arguments.ts
+++ b/packages/@glimmer/runtime/lib/vm/arguments.ts
@@ -483,14 +483,24 @@ export function reifyNamed(named: CapturedNamedArguments) {
let reified = dict();
for (const [key, value] of Object.entries(named)) {
- reified[key] = valueForRef(value);
+ try {
+ reified[key] = valueForRef(value);
+ } catch(e) {
+ reified[key] = e;
+ }
}
return reified;
}
export function reifyPositional(positional: CapturedPositionalArguments) {
- return positional.map(valueForRef);
+ return positional.map((p) => {
+ try {
+ return valueForRef(p);
+ } catch(e) {
+ return e;
+ }
+ });
}
export function reifyArgs(args: CapturedArguments) {