import {
type BlockFunctionIRNode,
DynamicFlag,
- type IRDynamicChildren,
+ type IRDynamicInfo,
IRNodeTypes,
type OperationNode,
type RootIRNode,
}
}
-function genChildren(children: IRDynamicChildren) {
+function genChildren(children: IRDynamicInfo[]) {
let code = ''
let offset = 0
- for (const [index, child] of Object.entries(children)) {
- const childrenLength = Object.keys(child.children).length
+
+ for (const [index, child] of children.entries()) {
if (child.dynamicFlags & DynamicFlag.NON_TEMPLATE) {
offset--
- continue
}
const idx = Number(index) + offset
const id =
- child.dynamicFlags & DynamicFlag.INSERT ? child.placeholder : child.id
- const childrenString = childrenLength && genChildren(child.children)
+ child.dynamicFlags & DynamicFlag.REFERENCED
+ ? child.dynamicFlags & DynamicFlag.INSERT
+ ? child.anchor
+ : child.id
+ : null
+ const childrenString = genChildren(child.children)
if (id !== null || childrenString) {
code += ` ${idx}: [`
export interface IRDynamicInfo {
id: number | null
dynamicFlags: DynamicFlag
- placeholder: number | null
+ anchor: number | null
children: IRDynamicInfo[]
}
export const genDefaultDynamic = (): IRDynamicInfo => ({
id: null,
dynamicFlags: 0,
- placeholder: null,
+ anchor: null,
children: [],
})
if (prevChildren.length) {
if (hasStatic) {
ctx.childrenTemplate[index - prevChildren.length] = `<!>`
- const anchor = (prevChildren[0].placeholder = ctx.increaseId())
+
+ prevChildren[0].dynamicFlags -= DynamicFlag.NON_TEMPLATE
+ const anchor = (prevChildren[0].anchor = ctx.increaseId())
ctx.registerOperation({
type: IRNodeTypes.INSERT_NODE,