code: func (mw *memoryWrapper) pushObject(vm *duktape.Context) {
  	obj := vm.PushObject()
  
  	// Generate the `slice` method which takes two ints and returns a buffer
  	vm.PushGoFunction(func(ctx *duktape.Context) int {
  		blob := mw.slice(int64(ctx.GetInt(-2)), int64(ctx.GetInt(-1)))
  		ctx.Pop2()
  
  		ptr := ctx.PushFixedBuffer(len(blob))
  		copy(makeSlice(ptr, uint(len(blob))), blob)
  		return 1
  	})
  	vm.PutPropString(obj, "slice")
  
  	// Generate the `getUint` method which takes an int and returns a bigint
  	vm.PushGoFunction(func(ctx *duktape.Context) int {
  		offset := int64(ctx.GetInt(-1))
  		ctx.Pop()
  
  		pushBigInt(mw.getUint(offset), ctx)
  		return 1
  	})
  	vm.PutPropString(obj, "getUint")
  }
docs: // pushObject assembles a JSVM object wrapping a swappable memory and pushes it
  // onto the VM stack.