20 lines
670 B
Plaintext
20 lines
670 B
Plaintext
-- Supports lists, property lists, images, script instances and scalar values (integer, float, string, symbol).
|
|
on deepcopy (var, cycleCheck)
|
|
case ilk(var) of
|
|
#list, #propList, #image:
|
|
return var.duplicate()
|
|
#instance:
|
|
if string(var) starts "<Xtra " then return var -- deep copy makes no sense for Xtra instances
|
|
if voidP(cycleCheck) then cycleCheck = [:]
|
|
if not voidP(cycleCheck[var]) then return cycleCheck[var]
|
|
copy = var.script.rawNew()
|
|
cycleCheck[var] = copy
|
|
repeat with i = 1 to var.count
|
|
copy.setProp(var.getPropAt(i), deepcopy(var[i], cycleCheck))
|
|
end repeat
|
|
return copy
|
|
otherwise:
|
|
return var
|
|
end case
|
|
end
|