object_lazy.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. package goja
  2. import "reflect"
  3. type lazyObject struct {
  4. val *Object
  5. create func(*Object) objectImpl
  6. }
  7. func (o *lazyObject) className() string {
  8. obj := o.create(o.val)
  9. o.val.self = obj
  10. return obj.className()
  11. }
  12. func (o *lazyObject) get(n Value) Value {
  13. obj := o.create(o.val)
  14. o.val.self = obj
  15. return obj.get(n)
  16. }
  17. func (o *lazyObject) getProp(n Value) Value {
  18. obj := o.create(o.val)
  19. o.val.self = obj
  20. return obj.getProp(n)
  21. }
  22. func (o *lazyObject) getPropStr(name string) Value {
  23. obj := o.create(o.val)
  24. o.val.self = obj
  25. return obj.getPropStr(name)
  26. }
  27. func (o *lazyObject) getStr(name string) Value {
  28. obj := o.create(o.val)
  29. o.val.self = obj
  30. return obj.getStr(name)
  31. }
  32. func (o *lazyObject) getOwnProp(name string) Value {
  33. obj := o.create(o.val)
  34. o.val.self = obj
  35. return obj.getOwnProp(name)
  36. }
  37. func (o *lazyObject) put(n Value, val Value, throw bool) {
  38. obj := o.create(o.val)
  39. o.val.self = obj
  40. obj.put(n, val, throw)
  41. }
  42. func (o *lazyObject) putStr(name string, val Value, throw bool) {
  43. obj := o.create(o.val)
  44. o.val.self = obj
  45. obj.putStr(name, val, throw)
  46. }
  47. func (o *lazyObject) hasProperty(n Value) bool {
  48. obj := o.create(o.val)
  49. o.val.self = obj
  50. return obj.hasProperty(n)
  51. }
  52. func (o *lazyObject) hasPropertyStr(name string) bool {
  53. obj := o.create(o.val)
  54. o.val.self = obj
  55. return obj.hasPropertyStr(name)
  56. }
  57. func (o *lazyObject) hasOwnProperty(n Value) bool {
  58. obj := o.create(o.val)
  59. o.val.self = obj
  60. return obj.hasOwnProperty(n)
  61. }
  62. func (o *lazyObject) hasOwnPropertyStr(name string) bool {
  63. obj := o.create(o.val)
  64. o.val.self = obj
  65. return obj.hasOwnPropertyStr(name)
  66. }
  67. func (o *lazyObject) _putProp(name string, value Value, writable, enumerable, configurable bool) Value {
  68. obj := o.create(o.val)
  69. o.val.self = obj
  70. return obj._putProp(name, value, writable, enumerable, configurable)
  71. }
  72. func (o *lazyObject) defineOwnProperty(name Value, descr propertyDescr, throw bool) bool {
  73. obj := o.create(o.val)
  74. o.val.self = obj
  75. return obj.defineOwnProperty(name, descr, throw)
  76. }
  77. func (o *lazyObject) toPrimitiveNumber() Value {
  78. obj := o.create(o.val)
  79. o.val.self = obj
  80. return obj.toPrimitiveNumber()
  81. }
  82. func (o *lazyObject) toPrimitiveString() Value {
  83. obj := o.create(o.val)
  84. o.val.self = obj
  85. return obj.toPrimitiveString()
  86. }
  87. func (o *lazyObject) toPrimitive() Value {
  88. obj := o.create(o.val)
  89. o.val.self = obj
  90. return obj.toPrimitive()
  91. }
  92. func (o *lazyObject) assertCallable() (call func(FunctionCall) Value, ok bool) {
  93. obj := o.create(o.val)
  94. o.val.self = obj
  95. return obj.assertCallable()
  96. }
  97. func (o *lazyObject) deleteStr(name string, throw bool) bool {
  98. obj := o.create(o.val)
  99. o.val.self = obj
  100. return obj.deleteStr(name, throw)
  101. }
  102. func (o *lazyObject) delete(name Value, throw bool) bool {
  103. obj := o.create(o.val)
  104. o.val.self = obj
  105. return obj.delete(name, throw)
  106. }
  107. func (o *lazyObject) proto() *Object {
  108. obj := o.create(o.val)
  109. o.val.self = obj
  110. return obj.proto()
  111. }
  112. func (o *lazyObject) hasInstance(v Value) bool {
  113. obj := o.create(o.val)
  114. o.val.self = obj
  115. return obj.hasInstance(v)
  116. }
  117. func (o *lazyObject) isExtensible() bool {
  118. obj := o.create(o.val)
  119. o.val.self = obj
  120. return obj.isExtensible()
  121. }
  122. func (o *lazyObject) preventExtensions() {
  123. obj := o.create(o.val)
  124. o.val.self = obj
  125. obj.preventExtensions()
  126. }
  127. func (o *lazyObject) enumerate(all, recusrive bool) iterNextFunc {
  128. obj := o.create(o.val)
  129. o.val.self = obj
  130. return obj.enumerate(all, recusrive)
  131. }
  132. func (o *lazyObject) _enumerate(recursive bool) iterNextFunc {
  133. obj := o.create(o.val)
  134. o.val.self = obj
  135. return obj._enumerate(recursive)
  136. }
  137. func (o *lazyObject) export() interface{} {
  138. obj := o.create(o.val)
  139. o.val.self = obj
  140. return obj.export()
  141. }
  142. func (o *lazyObject) exportType() reflect.Type {
  143. obj := o.create(o.val)
  144. o.val.self = obj
  145. return obj.exportType()
  146. }
  147. func (o *lazyObject) equal(other objectImpl) bool {
  148. obj := o.create(o.val)
  149. o.val.self = obj
  150. return obj.equal(other)
  151. }
  152. func (o *lazyObject) sortLen() int64 {
  153. obj := o.create(o.val)
  154. o.val.self = obj
  155. return obj.sortLen()
  156. }
  157. func (o *lazyObject) sortGet(i int64) Value {
  158. obj := o.create(o.val)
  159. o.val.self = obj
  160. return obj.sortGet(i)
  161. }
  162. func (o *lazyObject) swap(i, j int64) {
  163. obj := o.create(o.val)
  164. o.val.self = obj
  165. obj.swap(i, j)
  166. }