return NJS_DECLINED;
}
- return njs_vm_external_create(vm, retval, njs_xml_attr_proto_id,
- current->properties, 0);
+ return njs_vm_external_create(vm, retval, njs_xml_attr_proto_id, current,
+ 0);
}
static njs_int_t
njs_xml_attr_ext_prop_keys(njs_vm_t *vm, njs_value_t *value, njs_value_t *keys)
{
- xmlAttr *node, *current;
+ xmlAttr *node;
+ xmlNode *current;
njs_int_t ret;
njs_value_t *push;
return NJS_ERROR;
}
- for (node = current; node != NULL; node = node->next) {
+ for (node = current->properties; node != NULL; node = node->next) {
if (node->type != XML_ATTRIBUTE_NODE) {
continue;
}
njs_value_t *retval)
{
size_t size;
- xmlAttr *node, *current;
+ xmlAttr *node;
+ xmlNode *current;
njs_int_t ret;
njs_str_t name;
return NJS_DECLINED;
}
- for (node = current; node != NULL; node = node->next) {
+ for (node = current->properties; node != NULL; node = node->next) {
if (node->type != XML_ATTRIBUTE_NODE) {
continue;
}
njs_strlen(node->children->content));
}
+ njs_value_undefined_set(retval);
+
return NJS_OK;
}
typedef struct {
- xmlAttr *attr;
+ xmlNode *node;
qjs_xml_doc_t *doc;
} qjs_xml_attr_t;
static xmlNode *qjs_xml_node(JSContext *cx, JSValueConst val, xmlDoc **doc);
static JSValue qjs_xml_attr_make(JSContext *cx, qjs_xml_doc_t *doc,
- xmlAttr *attr);
+ xmlNode *node);
static int qjs_xml_attr_get_own_property(JSContext *cx,
JSPropertyDescriptor *pdesc, JSValueConst obj, JSAtom prop);
static int qjs_xml_attr_get_own_property_names(JSContext *cx,
pdesc->flags = JS_PROP_ENUMERABLE;
pdesc->getter = JS_UNDEFINED;
pdesc->setter = JS_UNDEFINED;
- pdesc->value = qjs_xml_attr_make(cx, current->doc,
- node->properties);
+ pdesc->value = qjs_xml_attr_make(cx, current->doc, node);
if (JS_IsException(pdesc->value)) {
return -1;
}
static JSValue
-qjs_xml_attr_make(JSContext *cx, qjs_xml_doc_t *doc, xmlAttr *attr)
+qjs_xml_attr_make(JSContext *cx, qjs_xml_doc_t *doc, xmlNode *node)
{
JSValue ret;
qjs_xml_attr_t *current;
return JS_EXCEPTION;
}
- current->attr = attr;
+ current->node = node;
current->doc = doc;
doc->ref_count++;
name.length = njs_strlen(name.start);
- for (attr = current->attr; attr != NULL; attr = attr->next) {
+ for (attr = current->node->properties; attr != NULL; attr = attr->next) {
if (attr->type != XML_ATTRIBUTE_NODE) {
continue;
}
return -1;
}
- for (attr = current->attr; attr != NULL; attr = attr->next) {
+ for (attr = current->node->properties; attr != NULL; attr = attr->next) {
if (attr->type != XML_ATTRIBUTE_NODE) {
continue;
}
return xml.serializeToString(doc.note.to);
},
expected: `<to>Tove</to>` },
+ { get: (doc) => {
+ let attrs = doc.note.to.$attrs;
+ doc.note.to.removeAllAttributes();
+ return attrs.a;
+ },
+ expected: undefined },
+ { get: (doc) => {
+ let to = doc.note.to;
+ let attrs = doc.note.to.$attrs;
+ to.removeAllAttributes();
+ return attrs.a;
+ },
+ expected: undefined },
{ get: (doc) => {
delete doc.note.to.$attr$a;
return xml.serializeToString(doc.note.to);