bool js::XDRScriptRegExpObject(XDRState<mode> *xdr, HeapPtrObject *objp) { /* NB: Keep this in sync with CloneScriptRegExpObject. */ RootedAtom source(xdr->cx()); uint32_t flagsword = 0; if (mode == XDR_ENCODE) { JS_ASSERT(objp); RegExpObject &reobj = (*objp)->asRegExp(); source = reobj.getSource(); flagsword = reobj.getFlags(); } if (!XDRAtom(xdr, source.address()) || !xdr->codeUint32(&flagsword)) return false; if (mode == XDR_DECODE) { RegExpFlag flags = RegExpFlag(flagsword); RegExpObject *reobj = RegExpObject::createNoStatics(xdr->cx(), source, flags, NULL); if (!reobj) return false; if (!reobj->clearParent(xdr->cx())) return false; if (!reobj->clearType(xdr->cx())) return false; objp->init(reobj); } return true; }
JSBool js_XDRRegExpObject(JSXDRState *xdr, JSObject **objp) { JSString *source = 0; uint32 flagsword = 0; if (xdr->mode == JSXDR_ENCODE) { JS_ASSERT(objp); RegExpObject *reobj = (*objp)->asRegExp(); source = reobj->getSource(); flagsword = reobj->getFlags(); } if (!JS_XDRString(xdr, &source) || !JS_XDRUint32(xdr, &flagsword)) return false; if (xdr->mode == JSXDR_DECODE) { JSAtom *atom = js_AtomizeString(xdr->cx, source); if (!atom) return false; RegExpObject *reobj = RegExpObject::createNoStatics(xdr->cx, atom, RegExpFlag(flagsword), NULL); if (!reobj) return false; if (!reobj->clearParent(xdr->cx)) return false; if (!reobj->clearType(xdr->cx)) return false; *objp = reobj; } return true; }
JSObject * js::CloneScriptRegExpObject(JSContext *cx, RegExpObject &reobj) { /* NB: Keep this in sync with XDRScriptRegExpObject. */ RootedAtom source(cx, reobj.getSource()); RegExpObject *clone = RegExpObject::createNoStatics(cx, source, reobj.getFlags(), NULL); if (!clone) return NULL; if (!clone->clearParent(cx)) return NULL; if (!clone->clearType(cx)) return NULL; return clone; }