summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorDaniel Silverstone <dsilvers@digital-scurf.org>2012-11-03 19:12:10 +0000
committerDaniel Silverstone <dsilvers@digital-scurf.org>2012-11-03 19:12:10 +0000
commit45048d167c9f1e9ca31317ce19a3e9ca23968d07 (patch)
tree43327263ed97ffd148c8cb74c13ef661102ad877 /src/core
parent9874c9759fc95f12f3b0246a4f4ef7bce6e5fcf9 (diff)
downloadlibdom-45048d167c9f1e9ca31317ce19a3e9ca23968d07.tar.gz
libdom-45048d167c9f1e9ca31317ce19a3e9ca23968d07.tar.bz2
Ensure we memoise all the strings used in the core event dispatch
Diffstat (limited to 'src/core')
-rw-r--r--src/core/document.c98
-rw-r--r--src/core/document.h9
2 files changed, 107 insertions, 0 deletions
diff --git a/src/core/document.c b/src/core/document.c
index d668c0e..97d93a6 100644
--- a/src/core/document.c
+++ b/src/core/document.c
@@ -156,6 +156,97 @@ dom_exception _dom_document_initialise(dom_document *doc,
return err;
}
+ err = dom_string_create_interned((const uint8_t *) "DOMNodeInserted",
+ SLEN("DOMNodeInserted"),
+ &doc->_memo_domnodeinserted);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMNodeRemoved",
+ SLEN("DOMNodeRemoved"),
+ &doc->_memo_domnoderemoved);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMNodeInsertedIntoDocument",
+ SLEN("DOMNodeInsertedIntoDocument"),
+ &doc->_memo_domnodeinsertedintodocument);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMNodeRemovedFromDocument",
+ SLEN("DOMNodeRemovedFromDocument"),
+ &doc->_memo_domnoderemovedfromdocument);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domnodeinsertedintodocument);
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMAttrModified",
+ SLEN("DOMAttrModified"),
+ &doc->_memo_domattrmodified);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domnoderemovedfromdocument);
+ dom_string_unref(doc->_memo_domnodeinsertedintodocument);
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMCharacterDataModified",
+ SLEN("DOMCharacterDataModified"),
+ &doc->_memo_domcharacterdatamodified);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domattrmodified);
+ dom_string_unref(doc->_memo_domnoderemovedfromdocument);
+ dom_string_unref(doc->_memo_domnodeinsertedintodocument);
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
+ err = dom_string_create_interned((const uint8_t *) "DOMSubtreeModified",
+ SLEN("DOMSubtreeModified"),
+ &doc->_memo_domsubtreemodified);
+ if (err != DOM_NO_ERR) {
+ dom_string_unref(doc->_memo_domcharacterdatamodified);
+ dom_string_unref(doc->_memo_domattrmodified);
+ dom_string_unref(doc->_memo_domnoderemovedfromdocument);
+ dom_string_unref(doc->_memo_domnodeinsertedintodocument);
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->id_name);
+ dom_string_unref(doc->class_string);
+ return err;
+ }
+
/* We should not pass a NULL when all things hook up */
return _dom_document_event_internal_initialise(doc, &doc->dei, daf);
}
@@ -191,6 +282,13 @@ bool _dom_document_finalise(dom_document *doc)
dom_string_unref(doc->class_string);
dom_string_unref(doc->_memo_empty);
+ dom_string_unref(doc->_memo_domnodeinserted);
+ dom_string_unref(doc->_memo_domnoderemoved);
+ dom_string_unref(doc->_memo_domnodeinsertedintodocument);
+ dom_string_unref(doc->_memo_domnoderemovedfromdocument);
+ dom_string_unref(doc->_memo_domattrmodified);
+ dom_string_unref(doc->_memo_domcharacterdatamodified);
+ dom_string_unref(doc->_memo_domsubtreemodified);
_dom_document_event_internal_finalise(doc, &doc->dei);
diff --git a/src/core/document.h b/src/core/document.h
index 6cf1f91..89635ff 100644
--- a/src/core/document.h
+++ b/src/core/document.h
@@ -59,6 +59,15 @@ struct dom_document {
dom_document_quirks_mode quirks;
/**< Document is in quirks mode */
dom_string *_memo_empty; /**< The string ''. */
+
+ /* Memoised event strings */
+ dom_string *_memo_domnodeinserted; /**< DOMNodeInserted */
+ dom_string *_memo_domnoderemoved; /**< DOMNodeRemoved */
+ dom_string *_memo_domnodeinsertedintodocument; /**< DOMNodeInsertedIntoDocument */
+ dom_string *_memo_domnoderemovedfromdocument; /**< DOMNodeRemovedFromDocument */
+ dom_string *_memo_domattrmodified; /**< DOMAttrModified */
+ dom_string *_memo_domcharacterdatamodified; /**< DOMCharacterDataModified */
+ dom_string *_memo_domsubtreemodified; /**< DOMSubtreeModified */
};
/* Create a DOM document */