Add tasks for all the new languages

This commit is contained in:
Tina Müller 2016-12-05 23:44:36 +01:00
parent 9dc3c2bb62
commit bba7bfd280
13208 changed files with 134745 additions and 0 deletions

View file

@ -0,0 +1 @@
local(copy) = #myobject->ascopydeep

View file

@ -0,0 +1,19 @@
-- 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

View file

@ -0,0 +1,8 @@
val = [#foo:42, "bar":[1,2,3, "Hello world!"]]
put deepcopy(val)
-- [#foo: 42, "bar": [1, 2, 3, "Hello world!"]]
val = script("MyClass").new()
val.foo = 42
val.bar = [1, 2, 3, "Hello world!"]]
copy = deepcopy(val)

View file

@ -0,0 +1 @@
deepCopy(newObj, obj)

View file

@ -0,0 +1,36 @@
import queues, sequtils
type
Node[T] = ref TNode[T]
TNode[T] = object
data: T
left, right: Node[T]
proc newNode[T](data: T; left, right: Node[T] = nil): Node[T] =
Node[T](data: data, left: left, right: right)
proc preorder[T](n: Node[T]): seq[T] =
if n == nil: @[]
else: @[n.data] & preorder(n.left) & preorder(n.right)
var tree = 1.newNode(
2.newNode(
4.newNode(
7.newNode),
5.newNode),
3.newNode(
6.newNode(
8.newNode,
9.newNode)))
var tree2: Node[int]
tree2.deepCopy tree
tree2.data = 10
tree2.left.data = 20
tree2.right.left.data = 90
echo "Tree2:"
echo preorder tree2
echo "Tree:"
echo preorder tree

View file

@ -0,0 +1,15 @@
var src = Hash(foo => 0, bar => [0,1])
# Add a cyclic reference
src{:baz} = src
# Make a deep clone
var dst = src.dclone
# The address of src
say src.object_id
say src{:baz}.object_id
# The address of dst
say dst.object_id
say dst{:baz}.object_id