REBOL [
Title: "Object Cloner"
File: %cloneobj.r
Email: timewarp@sirius.com
Author: "Erin A. Thomas"
Date: 30-Jun-2000
Purpose: {
Clone objects recursively. This way the objects inside
are copies instead of references.
}
Example: {
new-object clone make existing-object []
}
Category: [util 3]
]
clone: func [
"Clones all sub objects so there are no multiple references"
o [object!] "The object to clone"
/local wrd so
] [
foreach wrd next first o [
if object? so: get in o :wrd [(set in o :wrd make so []) (clone so)]
]
return o
]