Polymorphic copy

Object.dclone() makes a deep clone of any mutable object and returns it to the caller.

class T(value) {
    method display {
        say value
    }
}

class S(value) < T {
    method display {
        say value
    }
}

var obj1 = T("T")
var obj2 = S("S")
var obj3 = obj2.dclone          # make a deep clone of obj2

obj1.value = "foo"              # change the value of obj1
obj2.value = "bar"              # change the value of obj2

obj1.display                    # prints "foo"
obj2.display                    # prints "bar"
obj3.display                    # prints "S"