+ if (!lisp_type)
+ return 1;
+ addr = ao_lisp_ref(p);
+ ret = ao_lisp_move(lisp_type, &addr);
+ if (addr != ao_lisp_ref(p)) {
+ ao_poly np = ao_lisp_poly(addr, p & AO_LISP_TYPE_MASK);
+ DBG("poly %d moved %04x -> %04x\n",
+ type, p, np);
+ *ref = np;
+ }
+ return ret;