object_lazy.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292
  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) getIdx(p valueInt, receiver Value) Value {
  13. obj := o.create(o.val)
  14. o.val.self = obj
  15. return obj.getIdx(p, receiver)
  16. }
  17. func (o *lazyObject) getSym(p *valueSymbol, receiver Value) Value {
  18. obj := o.create(o.val)
  19. o.val.self = obj
  20. return obj.getSym(p, receiver)
  21. }
  22. func (o *lazyObject) getOwnPropIdx(idx valueInt) Value {
  23. obj := o.create(o.val)
  24. o.val.self = obj
  25. return obj.getOwnPropIdx(idx)
  26. }
  27. func (o *lazyObject) getOwnPropSym(s *valueSymbol) Value {
  28. obj := o.create(o.val)
  29. o.val.self = obj
  30. return obj.getOwnPropSym(s)
  31. }
  32. func (o *lazyObject) hasPropertyIdx(idx valueInt) bool {
  33. obj := o.create(o.val)
  34. o.val.self = obj
  35. return obj.hasPropertyIdx(idx)
  36. }
  37. func (o *lazyObject) hasPropertySym(s *valueSymbol) bool {
  38. obj := o.create(o.val)
  39. o.val.self = obj
  40. return obj.hasPropertySym(s)
  41. }
  42. func (o *lazyObject) hasOwnPropertyIdx(idx valueInt) bool {
  43. obj := o.create(o.val)
  44. o.val.self = obj
  45. return obj.hasOwnPropertyIdx(idx)
  46. }
  47. func (o *lazyObject) hasOwnPropertySym(s *valueSymbol) bool {
  48. obj := o.create(o.val)
  49. o.val.self = obj
  50. return obj.hasOwnPropertySym(s)
  51. }
  52. func (o *lazyObject) defineOwnPropertyStr(name string, desc PropertyDescriptor, throw bool) bool {
  53. obj := o.create(o.val)
  54. o.val.self = obj
  55. return obj.defineOwnPropertyStr(name, desc, throw)
  56. }
  57. func (o *lazyObject) defineOwnPropertyIdx(name valueInt, desc PropertyDescriptor, throw bool) bool {
  58. obj := o.create(o.val)
  59. o.val.self = obj
  60. return obj.defineOwnPropertyIdx(name, desc, throw)
  61. }
  62. func (o *lazyObject) defineOwnPropertySym(name *valueSymbol, desc PropertyDescriptor, throw bool) bool {
  63. obj := o.create(o.val)
  64. o.val.self = obj
  65. return obj.defineOwnPropertySym(name, desc, throw)
  66. }
  67. func (o *lazyObject) deleteIdx(idx valueInt, throw bool) bool {
  68. obj := o.create(o.val)
  69. o.val.self = obj
  70. return obj.deleteIdx(idx, throw)
  71. }
  72. func (o *lazyObject) deleteSym(s *valueSymbol, throw bool) bool {
  73. obj := o.create(o.val)
  74. o.val.self = obj
  75. return obj.deleteSym(s, throw)
  76. }
  77. func (o *lazyObject) getStr(name string, receiver Value) Value {
  78. obj := o.create(o.val)
  79. o.val.self = obj
  80. return obj.getStr(name, receiver)
  81. }
  82. func (o *lazyObject) getOwnPropStr(name string) Value {
  83. obj := o.create(o.val)
  84. o.val.self = obj
  85. return obj.getOwnPropStr(name)
  86. }
  87. func (o *lazyObject) setOwnStr(p string, v Value, throw bool) bool {
  88. obj := o.create(o.val)
  89. o.val.self = obj
  90. return obj.setOwnStr(p, v, throw)
  91. }
  92. func (o *lazyObject) setOwnIdx(p valueInt, v Value, throw bool) bool {
  93. obj := o.create(o.val)
  94. o.val.self = obj
  95. return obj.setOwnIdx(p, v, throw)
  96. }
  97. func (o *lazyObject) setOwnSym(p *valueSymbol, v Value, throw bool) bool {
  98. obj := o.create(o.val)
  99. o.val.self = obj
  100. return obj.setOwnSym(p, v, throw)
  101. }
  102. func (o *lazyObject) setForeignStr(p string, v, receiver Value, throw bool) (bool, bool) {
  103. obj := o.create(o.val)
  104. o.val.self = obj
  105. return obj.setForeignStr(p, v, receiver, throw)
  106. }
  107. func (o *lazyObject) setForeignIdx(p valueInt, v, receiver Value, throw bool) (bool, bool) {
  108. obj := o.create(o.val)
  109. o.val.self = obj
  110. return obj.setForeignIdx(p, v, receiver, throw)
  111. }
  112. func (o *lazyObject) setForeignSym(p *valueSymbol, v, receiver Value, throw bool) (bool, bool) {
  113. obj := o.create(o.val)
  114. o.val.self = obj
  115. return obj.setForeignSym(p, v, receiver, throw)
  116. }
  117. func (o *lazyObject) hasPropertyStr(name string) bool {
  118. obj := o.create(o.val)
  119. o.val.self = obj
  120. return obj.hasPropertyStr(name)
  121. }
  122. func (o *lazyObject) hasOwnPropertyStr(name string) bool {
  123. obj := o.create(o.val)
  124. o.val.self = obj
  125. return obj.hasOwnPropertyStr(name)
  126. }
  127. func (o *lazyObject) _putProp(string, Value, bool, bool, bool) Value {
  128. panic("cannot use _putProp() in lazy object")
  129. }
  130. func (o *lazyObject) _putSym(*valueSymbol, Value) {
  131. panic("cannot use _putSym() in lazy object")
  132. }
  133. func (o *lazyObject) toPrimitiveNumber() Value {
  134. obj := o.create(o.val)
  135. o.val.self = obj
  136. return obj.toPrimitiveNumber()
  137. }
  138. func (o *lazyObject) toPrimitiveString() Value {
  139. obj := o.create(o.val)
  140. o.val.self = obj
  141. return obj.toPrimitiveString()
  142. }
  143. func (o *lazyObject) toPrimitive() Value {
  144. obj := o.create(o.val)
  145. o.val.self = obj
  146. return obj.toPrimitive()
  147. }
  148. func (o *lazyObject) assertCallable() (call func(FunctionCall) Value, ok bool) {
  149. obj := o.create(o.val)
  150. o.val.self = obj
  151. return obj.assertCallable()
  152. }
  153. func (o *lazyObject) assertConstructor() func(args []Value, newTarget *Object) *Object {
  154. obj := o.create(o.val)
  155. o.val.self = obj
  156. return obj.assertConstructor()
  157. }
  158. func (o *lazyObject) deleteStr(name string, throw bool) bool {
  159. obj := o.create(o.val)
  160. o.val.self = obj
  161. return obj.deleteStr(name, throw)
  162. }
  163. func (o *lazyObject) proto() *Object {
  164. obj := o.create(o.val)
  165. o.val.self = obj
  166. return obj.proto()
  167. }
  168. func (o *lazyObject) hasInstance(v Value) bool {
  169. obj := o.create(o.val)
  170. o.val.self = obj
  171. return obj.hasInstance(v)
  172. }
  173. func (o *lazyObject) isExtensible() bool {
  174. obj := o.create(o.val)
  175. o.val.self = obj
  176. return obj.isExtensible()
  177. }
  178. func (o *lazyObject) preventExtensions(throw bool) bool {
  179. obj := o.create(o.val)
  180. o.val.self = obj
  181. return obj.preventExtensions(throw)
  182. }
  183. func (o *lazyObject) enumerateUnfiltered() iterNextFunc {
  184. obj := o.create(o.val)
  185. o.val.self = obj
  186. return obj.enumerateUnfiltered()
  187. }
  188. func (o *lazyObject) enumerate() iterNextFunc {
  189. obj := o.create(o.val)
  190. o.val.self = obj
  191. return obj.enumerate()
  192. }
  193. func (o *lazyObject) export() interface{} {
  194. obj := o.create(o.val)
  195. o.val.self = obj
  196. return obj.export()
  197. }
  198. func (o *lazyObject) exportType() reflect.Type {
  199. obj := o.create(o.val)
  200. o.val.self = obj
  201. return obj.exportType()
  202. }
  203. func (o *lazyObject) equal(other objectImpl) bool {
  204. obj := o.create(o.val)
  205. o.val.self = obj
  206. return obj.equal(other)
  207. }
  208. func (o *lazyObject) ownKeys(all bool, accum []Value) []Value {
  209. obj := o.create(o.val)
  210. o.val.self = obj
  211. return obj.ownKeys(all, accum)
  212. }
  213. func (o *lazyObject) ownSymbols() []Value {
  214. obj := o.create(o.val)
  215. o.val.self = obj
  216. return obj.ownSymbols()
  217. }
  218. func (o *lazyObject) ownPropertyKeys(all bool, accum []Value) []Value {
  219. obj := o.create(o.val)
  220. o.val.self = obj
  221. return obj.ownPropertyKeys(all, accum)
  222. }
  223. func (o *lazyObject) setProto(proto *Object, throw bool) bool {
  224. obj := o.create(o.val)
  225. o.val.self = obj
  226. return obj.setProto(proto, throw)
  227. }
  228. func (o *lazyObject) sortLen() int64 {
  229. obj := o.create(o.val)
  230. o.val.self = obj
  231. return obj.sortLen()
  232. }
  233. func (o *lazyObject) sortGet(i int64) Value {
  234. obj := o.create(o.val)
  235. o.val.self = obj
  236. return obj.sortGet(i)
  237. }
  238. func (o *lazyObject) swap(i, j int64) {
  239. obj := o.create(o.val)
  240. o.val.self = obj
  241. obj.swap(i, j)
  242. }