--- /dev/null
+typedef union jsval_layout {
+long int asBits;
+} jsval_layout;
+static jsval_layout STRING_TO_JSVAL_IMPL(void *str)
+{}
+
+typedef __attribute__ ((aligned(8))) unsigned long int jsval;
+ class Value {
+ public:void setString()
+{
+ data = STRING_TO_JSVAL_IMPL(0);
+} jsval_layout data;
+ } __attribute__ ((aligned(8)));
+
+ static Value StringValue() {
+ Value v;
+ v.setString();
+ return v;
+ }
+ static const jsval & Jsvalify(const Value & v) {
+ return (const jsval &)v;
+ }
+ static Value *Valueify(jsval * v) {
+ return (Value *) v;
+ }
+
+ struct JSObject {
+ void getQNameLocalName();
+ };
+ static Value IdToValue(int id) {
+ if (id)
+ return StringValue();
+ }
+ static jsval IdToJsval(int id) {
+ return Jsvalify(IdToValue(id));
+ }
+
+class AutoGCRooter;
+struct JSContext {
+ AutoGCRooter *autoGCRooters;
+};
+
+ class AutoGCRooter {
+ public:
+AutoGCRooter(JSContext * cx
+):down(cx->autoGCRooters),
+ context(cx) {
+ cx->autoGCRooters = this;
+ }
+protected:
+AutoGCRooter * const down;
+ JSContext *const context;
+ };
+ class AutoArrayRooter:
+private AutoGCRooter {
+ public:
+AutoArrayRooter(JSContext *cx,
+ Value *vec): AutoGCRooter(cx),
+ array(vec) {
+ } Value *array;
+};
+
+static void PutProperty(JSContext *cx, int id, jsval *vp)
+{
+ JSObject *nameobj;
+ jsval roots[3];
+ roots[1] = IdToJsval(id);
+ roots[2] = *vp;
+ AutoArrayRooter tvr(cx, Valueify(roots));
+ nameobj->getQNameLocalName();
+}
+
+void xml_defineProperty(JSContext *cx, int id, const Value *v)
+{
+ jsval tmp = Jsvalify(*v);
+ PutProperty(cx, id, &tmp);
+}