@@ -19,7 +19,7 @@ import {
19
19
CheckOption ,
20
20
CheckString ,
21
21
} from '@glimmer/debug' ;
22
- import { associateDestroyableChild , destroy } from '@glimmer/destroyable' ;
22
+ import { associateDestroyableChild , destroy , registerDestructor } from '@glimmer/destroyable' ;
23
23
import { getInternalModifierManager } from '@glimmer/manager' ;
24
24
import { createComputeRef , isConstRef , valueForRef } from '@glimmer/reference' ;
25
25
import { debugToString , expect , isObject } from '@glimmer/util' ;
@@ -32,6 +32,7 @@ import type { DynamicAttribute } from '../../vm/attributes/dynamic';
32
32
import { isCurriedType , resolveCurriedValue } from '../../curried-value' ;
33
33
import { APPEND_OPCODES } from '../../opcodes' ;
34
34
import { CONSTANTS } from '../../symbols' ;
35
+ import { createCapturedArgs } from '../../vm/arguments' ;
35
36
import { CheckArguments , CheckOperations , CheckReference } from './-debug-strip' ;
36
37
import { Assert } from './vm' ;
37
38
@@ -71,10 +72,36 @@ APPEND_OPCODES.add(Op.PushRemoteElement, (vm) => {
71
72
72
73
let block = vm . elements ( ) . pushRemoteElement ( element , guid , insertBefore ) ;
73
74
if ( block ) vm . associateDestroyable ( block ) ;
75
+
76
+ if ( vm . env . debugRenderTree !== undefined ) {
77
+ // Note that there is nothing to update – when the args for an
78
+ // {{#in-element}} changes it gets torn down and a new one is
79
+ // re-created/rendered in its place (see the `Assert`s above)
80
+ let args = createCapturedArgs (
81
+ insertBefore === undefined ? { } : { insertBefore : insertBeforeRef } ,
82
+ [ elementRef ]
83
+ ) ;
84
+
85
+ vm . env . debugRenderTree . create ( block , {
86
+ type : 'keyword' ,
87
+ name : 'in-element' ,
88
+ args,
89
+ instance : null ,
90
+ } ) ;
91
+
92
+ registerDestructor ( block , ( ) => {
93
+ vm . env . debugRenderTree ?. willDestroy ( block ) ;
94
+ } ) ;
95
+ }
74
96
} ) ;
75
97
76
98
APPEND_OPCODES . add ( Op . PopRemoteElement , ( vm ) => {
77
- vm . elements ( ) . popRemoteElement ( ) ;
99
+ let bounds = vm . elements ( ) . popRemoteElement ( ) ;
100
+
101
+ if ( vm . env . debugRenderTree !== undefined ) {
102
+ // The RemoteLiveBlock is also its bounds
103
+ vm . env . debugRenderTree . didRender ( bounds , bounds ) ;
104
+ }
78
105
} ) ;
79
106
80
107
APPEND_OPCODES . add ( Op . FlushElement , ( vm ) => {
0 commit comments