Move obj_is_xml into interp since its not a primitive.

This commit is contained in:
Andreas Gal 2008-06-28 10:12:24 -07:00
parent 44e0963c4e
commit b6773c0340
3 changed files with 14 additions and 25 deletions

View File

@ -2537,6 +2537,16 @@ DoIncDec(JSContext *cx, JSFrameRegs& regs, const JSCodeSpec *cs, jsval *vp, jsva
return false;
}
inline bool
obj_is_xml(JSContext *cx, JSFrameRegs& regs, JSObject*& obj)
{
JSObjectMap *map;
JSObjectOps *ops;
prim_load_map_from_obj(cx, regs, obj, map);
prim_load_ops_from_map(cx, regs, map, ops);
return guard_ops_are_xml(cx, regs, ops);
}
#define PUSH_STACK(v) prim_push_stack(cx, regs, (v))
#define POP_STACK(v) prim_pop_stack(cx, regs, (v))
#define STORE_STACK(n,v) prim_store_stack(cx, regs, (n), (v))
@ -3770,11 +3780,11 @@ JS_INTERPRET(JSContext *cx, JSInterpreterState *state)
if ((JSVAL_IS_OBJECT(lval) && \
!guard_jsval_is_null(cx, regs, lval) && \
(prim_jsval_to_object(cx, lval, obj2), \
guard_obj_is_xml(cx, regs, obj2))) || \
obj_is_xml(cx, regs, obj2))) || \
(JSVAL_IS_OBJECT(rval) && \
!guard_jsval_is_null(cx, regs, rval) && \
(prim_jsval_to_object(cx, rval, obj2), \
guard_obj_is_xml(cx, regs, obj2)))) { \
obj_is_xml(cx, regs, obj2)))) { \
JSXMLObjectOps *ops; \
\
ABORT_TRACE("operations involving XML not traced"); \

View File

@ -227,18 +227,12 @@ PRIMITIVE(prim_load_ops_from_map)(JSContext *cx, JSFrameRegs& regs,
}
static inline bool
PRIMITIVE(prim_ops_are_xml)(JSContext *cx, JSFrameRegs& regs,
PRIMITIVE(guard_ops_are_xml)(JSContext *cx, JSFrameRegs& regs,
JSObjectOps*& ops)
{
return ops == &js_XMLObjectOps.base;
}
static inline bool
PRIMITIVE(guard_obj_is_xml)(JSContext *cx, JSFrameRegs& regs, JSObject*& obj)
{
return OBJECT_IS_XML(cx, obj);
}
static inline void
PRIMITIVE(call_ValueToNonNullObject)(JSContext* cx, jsval& v, JSObject*& obj)
{

View File

@ -528,24 +528,9 @@ prim_load_map_from_obj(JSContext *cx, JSFrameRegs& regs, JSObject*& obj,
static inline bool
guard_ops_are_xml(JSContext *cx, JSFrameRegs& regs, JSObjectOps*& ops)
{
bool ok = interp_prim_ops_are_xml(cx, regs, ops);
bool ok = interp_guard_ops_are_xml(cx, regs, ops);
recorder(cx)->guard_eqi(ok, &ops, (int)&js_XMLObjectOps.base, regs);
return ok;
}
/*
* XXX want to move to an interp helper, but guard_ops_are_xml isn't visible
* except in jstracer.cpp mode, so it breaks compilation.
*/
static inline bool
guard_obj_is_xml(JSContext* cx, JSFrameRegs& regs, JSObject*& obj)
{
JSObjectMap *map;
JSObjectOps *ops;
prim_load_map_from_obj(cx, regs, obj, map);
prim_load_ops_from_map(cx, regs, map, ops);
return guard_ops_are_xml(cx, regs, ops);
}
#endif /* jstracerinlines_h___ */