diff options
Diffstat (limited to 'script/vm/node.lua')
-rw-r--r-- | script/vm/node.lua | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/script/vm/node.lua b/script/vm/node.lua index 99bc3340..a4e22b68 100644 --- a/script/vm/node.lua +++ b/script/vm/node.lua @@ -93,8 +93,34 @@ function mt:isFalsy() return false end -function mt:removeFalsy() - +---@return vm.node +function mt:copyTruly() + local newNode = vm.createNode() + newNode.optional = false + local hasBoolean, hasTrue + for _, c in ipairs(self) do + if c.type == 'nil' + or (c.type == 'boolean' and c[1] == false) + or (c.type == 'doc.type.boolean' and c[1] == false) then + goto CONTINUE + end + if c.type == 'global' and c.cate == 'type' and c.name == 'boolean' then + hasBoolean = true + goto CONTINUE + end + if c.type == 'boolean' or c.type == 'doc.type.boolean' then + hasTrue = true + end + newNode:merge(c) + ::CONTINUE:: + end + if hasBoolean and not hasTrue then + newNode:merge { + type = 'doc.type.boolean', + [1] = true, + } + end + return newNode end ---@return fun():vm.object @@ -130,7 +156,7 @@ function vm.setNode(source, node, cover) me:merge(node) else if node.type == 'vm.node' then - vm.nodeCache[source] = node + vm.nodeCache[source] = node:copy() else vm.nodeCache[source] = vm.createNode(node) end |