aboutsummaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/github.com/obscuren/otto/clone.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/github.com/obscuren/otto/clone.go')
-rw-r--r--Godeps/_workspace/src/github.com/obscuren/otto/clone.go144
1 files changed, 144 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/github.com/obscuren/otto/clone.go b/Godeps/_workspace/src/github.com/obscuren/otto/clone.go
new file mode 100644
index 000000000..fbdde81c2
--- /dev/null
+++ b/Godeps/_workspace/src/github.com/obscuren/otto/clone.go
@@ -0,0 +1,144 @@
+package otto
+
+import (
+ "fmt"
+)
+
+type _clone struct {
+ runtime *_runtime
+ stash struct {
+ object map[*_object]*_object
+ objectEnvironment map[*_objectEnvironment]*_objectEnvironment
+ declarativeEnvironment map[*_declarativeEnvironment]*_declarativeEnvironment
+ }
+}
+
+func (runtime *_runtime) clone() *_runtime {
+
+ self := &_runtime{}
+ clone := &_clone{
+ runtime: self,
+ }
+ clone.stash.object = make(map[*_object]*_object)
+ clone.stash.objectEnvironment = make(map[*_objectEnvironment]*_objectEnvironment)
+ clone.stash.declarativeEnvironment = make(map[*_declarativeEnvironment]*_declarativeEnvironment)
+
+ globalObject := clone.object(runtime.GlobalObject)
+ self.GlobalEnvironment = self.newObjectEnvironment(globalObject, nil)
+ self.GlobalObject = globalObject
+ self.Global = _global{
+ clone.object(runtime.Global.Object),
+ clone.object(runtime.Global.Function),
+ clone.object(runtime.Global.Array),
+ clone.object(runtime.Global.String),
+ clone.object(runtime.Global.Boolean),
+ clone.object(runtime.Global.Number),
+ clone.object(runtime.Global.Math),
+ clone.object(runtime.Global.Date),
+ clone.object(runtime.Global.RegExp),
+ clone.object(runtime.Global.Error),
+ clone.object(runtime.Global.EvalError),
+ clone.object(runtime.Global.TypeError),
+ clone.object(runtime.Global.RangeError),
+ clone.object(runtime.Global.ReferenceError),
+ clone.object(runtime.Global.SyntaxError),
+ clone.object(runtime.Global.URIError),
+ clone.object(runtime.Global.JSON),
+
+ clone.object(runtime.Global.ObjectPrototype),
+ clone.object(runtime.Global.FunctionPrototype),
+ clone.object(runtime.Global.ArrayPrototype),
+ clone.object(runtime.Global.StringPrototype),
+ clone.object(runtime.Global.BooleanPrototype),
+ clone.object(runtime.Global.NumberPrototype),
+ clone.object(runtime.Global.DatePrototype),
+ clone.object(runtime.Global.RegExpPrototype),
+ clone.object(runtime.Global.ErrorPrototype),
+ clone.object(runtime.Global.EvalErrorPrototype),
+ clone.object(runtime.Global.TypeErrorPrototype),
+ clone.object(runtime.Global.RangeErrorPrototype),
+ clone.object(runtime.Global.ReferenceErrorPrototype),
+ clone.object(runtime.Global.SyntaxErrorPrototype),
+ clone.object(runtime.Global.URIErrorPrototype),
+ }
+
+ self.EnterGlobalExecutionContext()
+
+ self.eval = self.GlobalObject.property["eval"].value.(Value).value.(*_object)
+ self.GlobalObject.prototype = self.Global.ObjectPrototype
+
+ return self
+}
+func (clone *_clone) object(self0 *_object) *_object {
+ if self1, exists := clone.stash.object[self0]; exists {
+ return self1
+ }
+ self1 := &_object{}
+ clone.stash.object[self0] = self1
+ return self0.objectClass.clone(self0, self1, clone)
+}
+
+func (clone *_clone) declarativeEnvironment(self0 *_declarativeEnvironment) (*_declarativeEnvironment, bool) {
+ if self1, exists := clone.stash.declarativeEnvironment[self0]; exists {
+ return self1, true
+ }
+ self1 := &_declarativeEnvironment{}
+ clone.stash.declarativeEnvironment[self0] = self1
+ return self1, false
+}
+
+func (clone *_clone) objectEnvironment(self0 *_objectEnvironment) (*_objectEnvironment, bool) {
+ if self1, exists := clone.stash.objectEnvironment[self0]; exists {
+ return self1, true
+ }
+ self1 := &_objectEnvironment{}
+ clone.stash.objectEnvironment[self0] = self1
+ return self1, false
+}
+
+func (clone *_clone) value(self0 Value) Value {
+ self1 := self0
+ switch value := self0.value.(type) {
+ case *_object:
+ self1.value = clone.object(value)
+ }
+ return self1
+}
+
+func (clone *_clone) valueArray(self0 []Value) []Value {
+ self1 := make([]Value, len(self0))
+ for index, value := range self0 {
+ self1[index] = clone.value(value)
+ }
+ return self1
+}
+
+func (clone *_clone) environment(self0 _environment) _environment {
+ if self0 == nil {
+ return nil
+ }
+ return self0.clone(clone)
+}
+
+func (clone *_clone) property(self0 _property) _property {
+ self1 := self0
+ if value, valid := self0.value.(Value); valid {
+ self1.value = clone.value(value)
+ } else {
+ panic(fmt.Errorf("self0.value.(Value) != true"))
+ }
+ return self1
+}
+
+func (clone *_clone) declarativeProperty(self0 _declarativeProperty) _declarativeProperty {
+ self1 := self0
+ self1.value = clone.value(self0.value)
+ return self1
+}
+
+func (clone *_clone) callFunction(self0 _callFunction) _callFunction {
+ if self0 == nil {
+ return nil
+ }
+ return self0.clone(clone)
+}