;; ===================================================== ;; Script: clone.r ;; downloaded from: www.REBOL.org ;; on: 29-Mar-2024 ;; at: 8:43:15.822563 UTC ;; owner: ajmartin [script library member who can update ;; this script] ;; ===================================================== ;; =================================================== ;; email address(es) have been munged to protect them ;; from spam harvesters. ;; If you were logged on the email addresses would not ;; be munged ;; =================================================== REBOL [ Title: "Clone" Date: 20-Dec-2002 Name: 'Clone Version: 1.0.1 File: %clone.r Author: "Andrew Martin" Purpose: "Clone objects by copying objects inside." eMail: %Al--Bri--xtra--co--nz Web: http://valley.150m.com Acknowledgements: "Erin A. Thomas" Example: [ New_object: Clone Original_Object [] ] Bug!: { ^-^-Clone destroys 'bind information during copy/deep of block!s!!!! ^-^-} library: [ level: 'advanced platform: none type: 'tool domain: none tested-under: none support: none license: none see-also: none ] ] Clone: function [ {Clones all sub-objects and hashes, so there are no multiple references.} [catch] Object [object!] "The object to clone." Block [block!] "Extra code for this object." ] [ Cloned Member ] [ throw-on-error [ Cloned: make Object Block foreach Word next first Object [ Member: get in Cloned :Word if same? :Member get in Object :Word [ set in Cloned :Word either object? :Member [ Clone :Member [] ][ either any [ series? :Member port? :Member bitset? :Member ][ copy/deep :Member ][ :Member ] ] ] ] Cloned ] ]