summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-05 20:56:31 +0100
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-05 20:56:31 +0100
commitda234bc3e4e44693a6464140d2dee91a948a6145 (patch)
tree2a2d02e1619f351049e2c76221bb75c97950f6d0
parent26dc8906aeb0783cf36bde31e9051b29a193eb23 (diff)
downloadnsgenbind-da234bc3e4e44693a6464140d2dee91a948a6145.tar.gz
nsgenbind-da234bc3e4e44693a6464140d2dee91a948a6145.tar.bz2
set lexers input properly
add node idl file
-rw-r--r--src/Makefile2
-rw-r--r--src/genjsbind-parser.y17
-rw-r--r--src/genjsbind.c17
-rw-r--r--test/data/bindings/htmldocument.bnd5
-rw-r--r--test/data/idl/node.idl53
5 files changed, 78 insertions, 16 deletions
diff --git a/src/Makefile b/src/Makefile
index 6740140..e2eb873 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,4 +1,4 @@
-CFLAGS := $(CFLAGS) -I$(BUILDDIR) -Isrc/
+CFLAGS := $(CFLAGS) -I$(BUILDDIR) -Isrc/ -g
# Sources in this directory
DIR_SOURCES := genjsbind.c
diff --git a/src/genjsbind-parser.y b/src/genjsbind-parser.y
index 08b8926..5c5bed5 100644
--- a/src/genjsbind-parser.y
+++ b/src/genjsbind-parser.y
@@ -41,15 +41,18 @@ int genjsbind_wrap()
%%
/* [1] start with Statements */
-Statements:
- /* empty */
- |
- IdlFile
+Statements
+ : Statement
+ | Statement Statements
;
- /* [2] load a web IDL file */
-IdlFile:
- TOK_IDLFILE TOK_STRING_LITERAL ';'
+Statement
+ : IdlFile
+ ;
+
+ /* [3] load a web IDL file */
+IdlFile
+ : TOK_IDLFILE TOK_STRING_LITERAL ';'
{
if (loadwebidl($2) != 0) {
YYABORT;
diff --git a/src/genjsbind.c b/src/genjsbind.c
index 145c16e..89d2fb0 100644
--- a/src/genjsbind.c
+++ b/src/genjsbind.c
@@ -13,12 +13,12 @@
extern int webidl_debug;
extern int webidl__flex_debug;
-extern FILE* webidl_in;
+extern void webidl_restart(FILE*);
extern int webidl_parse(void);
extern int genjsbind_debug;
extern int genjsbind__flex_debug;
-extern FILE* genjsbind_in;
+extern void genjsbind_restart(FILE*);
extern int genjsbind_parse(void);
struct options {
@@ -57,8 +57,9 @@ static FILE *idlopen(const char *filename)
int loadwebidl(char *filename)
{
/* set flex to read from file */
- webidl_in = idlopen(filename);
- if (!webidl_in) {
+ FILE *idlfile;
+ idlfile = idlopen(filename);
+ if (!idlfile) {
fprintf(stderr, "Error opening %s: %s\n",
filename,
strerror(errno));
@@ -69,6 +70,8 @@ int loadwebidl(char *filename)
webidl_debug = 1;
webidl__flex_debug = 1;
}
+
+ webidl_restart(idlfile);
/* parse the file */
return webidl_parse();
@@ -160,13 +163,13 @@ int main(int argc, char **argv)
return 3;
}
- /* set flex to read from file */
- genjsbind_in = infile;
-
if (options->debug) {
genjsbind_debug = 1;
genjsbind__flex_debug = 1;
}
+
+ /* set flex to read from file */
+ genjsbind_restart(infile);
parse_res = genjsbind_parse();
if (parse_res) {
diff --git a/test/data/bindings/htmldocument.bnd b/test/data/bindings/htmldocument.bnd
index 4f3095f..e531d05 100644
--- a/test/data/bindings/htmldocument.bnd
+++ b/test/data/bindings/htmldocument.bnd
@@ -1,4 +1,7 @@
-/* test binding docuemnt */
+/* test binding to generate htmldocument */
+webidlfile "eventtarget.idl";
+webidlfile "node.idl";
+webidlfile "document.idl";
webidlfile "htmldocument.idl";
diff --git a/test/data/idl/node.idl b/test/data/idl/node.idl
new file mode 100644
index 0000000..674d08d
--- /dev/null
+++ b/test/data/idl/node.idl
@@ -0,0 +1,53 @@
+interface Node : EventTarget {
+ const unsigned short ELEMENT_NODE = 1;
+ const unsigned short ATTRIBUTE_NODE = 2; // historical
+ const unsigned short TEXT_NODE = 3;
+ const unsigned short CDATA_SECTION_NODE = 4; // historical
+ const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
+ const unsigned short ENTITY_NODE = 6; // historical
+ const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
+ const unsigned short COMMENT_NODE = 8;
+ const unsigned short DOCUMENT_NODE = 9;
+ const unsigned short DOCUMENT_TYPE_NODE = 10;
+ const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
+ const unsigned short NOTATION_NODE = 12; // historical
+ readonly attribute unsigned short nodeType;
+ readonly attribute DOMString nodeName;
+
+ readonly attribute DOMString? baseURI;
+
+ readonly attribute Document? ownerDocument;
+ readonly attribute Node? parentNode;
+ readonly attribute Element? parentElement;
+ boolean hasChildNodes();
+ readonly attribute NodeList childNodes;
+ readonly attribute Node? firstChild;
+ readonly attribute Node? lastChild;
+ readonly attribute Node? previousSibling;
+ readonly attribute Node? nextSibling;
+
+ const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
+ const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
+ const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
+ const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
+ const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+ const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20; // historical
+ unsigned short compareDocumentPosition(Node other);
+ boolean contains(Node? other);
+
+ attribute DOMString? nodeValue;
+ attribute DOMString? textContent;
+ Node insertBefore(Node node, Node? child);
+ Node appendChild(Node node);
+ Node replaceChild(Node node, Node child);
+ Node removeChild(Node child);
+ void normalize();
+
+
+ Node cloneNode(optional boolean deep = true);
+ boolean isEqualNode(Node? node);
+
+ DOMString lookupPrefix(DOMString? namespace);
+ DOMString lookupNamespaceURI(DOMString? prefix);
+ boolean isDefaultNamespace(DOMString? namespace);
+};