summaryrefslogtreecommitdiff
path: root/patches/fix-nsgenbind-be.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/fix-nsgenbind-be.patch')
-rw-r--r--patches/fix-nsgenbind-be.patch489
1 files changed, 489 insertions, 0 deletions
diff --git a/patches/fix-nsgenbind-be.patch b/patches/fix-nsgenbind-be.patch
new file mode 100644
index 0000000..d583bf6
--- /dev/null
+++ b/patches/fix-nsgenbind-be.patch
@@ -0,0 +1,489 @@
+--- a/nsgenbind/src/nsgenbind-ast.c
++++ b/nsgenbind/src/nsgenbind-ast.c
+@@ -132,6 +132,19 @@
+ return nn;
+ }
+
++struct genbind_node *
++genbind_new_number_node(enum genbind_node_type type,
++ struct genbind_node *l,
++ int number)
++{
++ struct genbind_node *nn;
++ nn = calloc(1, sizeof(struct genbind_node));
++ nn->type = type;
++ nn->l = l;
++ nn->r.number = number;
++ return nn;
++}
++
+
+ /* exported interface defined in nsgenbind-ast.h */
+ int
+--- a/nsgenbind/src/nsgenbind-ast.h
++++ b/nsgenbind/src/nsgenbind-ast.h
+@@ -71,7 +71,18 @@
+
+ char *genbind_strapp(char *a, char *b);
+
++/**
++ * create a new node with value from pointer
++ */
+ struct genbind_node *genbind_new_node(enum genbind_node_type type, struct genbind_node *l, void *r);
++
++/**
++ * create a new number node
++ *
++ * Create a node with of number type
++ */
++struct genbind_node *genbind_new_number_node(enum genbind_node_type type, struct genbind_node *l, int number);
++
+ struct genbind_node *genbind_node_link(struct genbind_node *tgt, struct genbind_node *src);
+
+ struct genbind_node *genbind_node_prepend(struct genbind_node *list, struct genbind_node *inst);
+--- a/nsgenbind/src/nsgenbind-parser.y
++++ b/nsgenbind/src/nsgenbind-parser.y
+@@ -138,17 +138,17 @@
+ }
+
+ location_node = genbind_new_node(GENBIND_NODE_TYPE_FILE,
+- genbind_new_node(GENBIND_NODE_TYPE_LINE,
+- cdata_node,
+- (void *)lineno),
++ genbind_new_number_node(GENBIND_NODE_TYPE_LINE,
++ cdata_node,
++ lineno),
+ strdup(filename));
+
+ /* generate method node */
+ method_node = genbind_new_node(GENBIND_NODE_TYPE_METHOD,
+ NULL,
+- genbind_new_node(GENBIND_NODE_TYPE_METHOD_TYPE,
++ genbind_new_number_node(GENBIND_NODE_TYPE_METHOD_TYPE,
+ location_node,
+- (void *)methodtype));
++ methodtype));
+
+ class_node = genbind_node_find_type_ident(*genbind_ast,
+ NULL,
+@@ -304,11 +304,11 @@
+ {
+ $$ = genbind_new_node(GENBIND_NODE_TYPE_METHOD,
+ NULL,
+- genbind_new_node(GENBIND_NODE_TYPE_METHOD_TYPE,
++ genbind_new_number_node(GENBIND_NODE_TYPE_METHOD_TYPE,
+ genbind_new_node(GENBIND_NODE_TYPE_CDATA,
+ NULL,
+ $2),
+- (void *)$1));
++ $1));
+ }
+ ;
+
+@@ -568,11 +568,11 @@
+ TOK_PROPERTY Modifiers TOK_IDENTIFIER ';'
+ {
+ $$ = genbind_new_node(GENBIND_NODE_TYPE_PROPERTY, NULL,
+- genbind_new_node(GENBIND_NODE_TYPE_MODIFIER,
++ genbind_new_number_node(GENBIND_NODE_TYPE_MODIFIER,
+ genbind_new_node(GENBIND_NODE_TYPE_IDENT,
+ NULL,
+ $3),
+- (void *)$2));
++ $2));
+ }
+ |
+ TOK_FLAGS ClassFlags ';'
+@@ -584,11 +584,11 @@
+ {
+ $$ = genbind_new_node(GENBIND_NODE_TYPE_METHOD,
+ NULL,
+- genbind_new_node(GENBIND_NODE_TYPE_METHOD_TYPE,
++ genbind_new_number_node(GENBIND_NODE_TYPE_METHOD_TYPE,
+ genbind_new_node(GENBIND_NODE_TYPE_CDATA,
+ NULL,
+ $2),
+- (void *)$1));
++ $1));
+ }
+ ;
+
+--- a/nsgenbind/src/webidl-ast.c
++++ b/nsgenbind/src/webidl-ast.c
+@@ -120,6 +120,7 @@
+
+
+ struct webidl_node *
++/* exported interface documented in webidl-ast.h */
+ webidl_node_new(enum webidl_node_type type,
+ struct webidl_node *l,
+ void *r)
+@@ -128,7 +129,21 @@
+ nn = calloc(1, sizeof(struct webidl_node));
+ nn->type = type;
+ nn->l = l;
+- nn->r.text = r;
++ nn->r.value = r;
++ return nn;
++}
++
++/* exported interface documented in webidl-ast.h */
++struct webidl_node *
++webidl_new_number_node(enum webidl_node_type type,
++ struct webidl_node *l,
++ int number)
++{
++ struct webidl_node *nn;
++ nn = calloc(1, sizeof(struct webidl_node));
++ nn->type = type;
++ nn->l = l;
++ nn->r.number = number;
+ return nn;
+ }
+
+--- a/nsgenbind/src/webidl-ast.h
++++ b/nsgenbind/src/webidl-ast.h
+@@ -92,8 +92,17 @@
+
+ int webidl_cmp_node_type(struct webidl_node *node, void *ctx);
+
++/**
++ * create a new node with a pointer value
++ */
+ struct webidl_node *webidl_node_new(enum webidl_node_type, struct webidl_node *l, void *r);
+
++/**
++ * create a new node with an integer value
++ */
++struct webidl_node *webidl_new_number_node(enum webidl_node_type type, struct webidl_node *l, int number);
++
++
+ void webidl_node_set(struct webidl_node *node, enum webidl_node_type type, void *r);
+
+ struct webidl_node *webidl_node_prepend(struct webidl_node *list, struct webidl_node *node);
+--- a/nsgenbind/src/webidl-parser.y
++++ b/nsgenbind/src/webidl-parser.y
+@@ -735,9 +735,9 @@
+ |
+ TOK_INT_LITERAL
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_LITERAL_INT,
+- NULL,
+- (void *)$1);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_LITERAL_INT,
++ NULL,
++ $1);
+ }
+ |
+ TOK_NULL_LITERAL
+@@ -750,16 +750,16 @@
+ BooleanLiteral:
+ TOK_TRUE
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_LITERAL_BOOL,
+- NULL,
+- (void *)true);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_LITERAL_BOOL,
++ NULL,
++ (int)true);
+ }
+ |
+ TOK_FALSE
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_LITERAL_BOOL,
+- NULL,
+- (void *)false);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_LITERAL_BOOL,
++ NULL,
++ (int)false);
+ }
+ ;
+
+@@ -846,16 +846,18 @@
+
+ /* deal with inherit modifier */
+ if ($1) {
+- attribute = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
++ attribute = webidl_new_number_node(
++ WEBIDL_NODE_TYPE_MODIFIER,
+ attribute,
+- (void *)WEBIDL_TYPE_MODIFIER_INHERIT);
++ WEBIDL_TYPE_MODIFIER_INHERIT);
+ }
+
+ /* deal with readonly modifier */
+ if ($2) {
+- attribute = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
++ attribute = webidl_new_number_node(
++ WEBIDL_NODE_TYPE_MODIFIER,
+ attribute,
+- (void *)WEBIDL_TYPE_MODIFIER_READONLY);
++ WEBIDL_TYPE_MODIFIER_READONLY);
+ }
+
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_ATTRIBUTE,
+@@ -880,14 +882,16 @@
+ {
+ struct webidl_node *attribute;
+
+- attribute = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
+- $2, (void *)WEBIDL_TYPE_MODIFIER_STATIC);
++ attribute = webidl_new_number_node(WEBIDL_NODE_TYPE_MODIFIER,
++ $2,
++ WEBIDL_TYPE_MODIFIER_STATIC);
+
+ /* deal with readonly modifier */
+ if ($1) {
+- attribute = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
++ attribute = webidl_new_number_node(
++ WEBIDL_NODE_TYPE_MODIFIER,
+ attribute,
+- (void *)WEBIDL_TYPE_MODIFIER_READONLY);
++ WEBIDL_TYPE_MODIFIER_READONLY);
+ }
+
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_ATTRIBUTE,
+@@ -900,8 +904,9 @@
+ struct webidl_node *operation;
+
+ /* add static modifier */
+- operation = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
+- $2, (void *)WEBIDL_TYPE_MODIFIER_STATIC);
++ operation = webidl_new_number_node(WEBIDL_NODE_TYPE_MODIFIER,
++ $2,
++ WEBIDL_TYPE_MODIFIER_STATIC);
+
+ /* put return type on the operation */
+ operation = webidl_node_prepend($1, operation);
+@@ -1015,16 +1020,16 @@
+ Special:
+ TOK_GETTER
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_SPECIAL,
+- NULL,
+- (void *)WEBIDL_TYPE_SPECIAL_GETTER);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_SPECIAL,
++ NULL,
++ WEBIDL_TYPE_SPECIAL_GETTER);
+ }
+ |
+ TOK_SETTER
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_SPECIAL,
+- NULL,
+- (void *)WEBIDL_TYPE_SPECIAL_SETTER);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_SPECIAL,
++ NULL,
++ WEBIDL_TYPE_SPECIAL_SETTER);
+ }
+ |
+ TOK_CREATOR
+@@ -1032,23 +1037,23 @@
+ /* second edition removed this special but the
+ * specifications still use it!
+ */
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_SPECIAL,
+- NULL,
+- (void *)WEBIDL_TYPE_SPECIAL_CREATOR);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_SPECIAL,
++ NULL,
++ WEBIDL_TYPE_SPECIAL_CREATOR);
+ }
+ |
+ TOK_DELETER
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_SPECIAL,
+- NULL,
+- (void *)WEBIDL_TYPE_SPECIAL_DELETER);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_SPECIAL,
++ NULL,
++ WEBIDL_TYPE_SPECIAL_DELETER);
+ }
+ |
+ TOK_LEGACYCALLER
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_SPECIAL,
+- NULL,
+- (void *)WEBIDL_TYPE_SPECIAL_LEGACYCALLER);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_SPECIAL,
++ NULL,
++ WEBIDL_TYPE_SPECIAL_LEGACYCALLER);
+ }
+ ;
+
+@@ -1679,8 +1684,9 @@
+ TOK_ANY TypeSuffixStartingWithArray
+ {
+ /* todo deal with TypeSuffixStartingWithArray */
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE,
+- NULL, (void *)WEBIDL_TYPE_ANY);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_ANY);
+ }
+ ;
+
+@@ -1742,29 +1748,39 @@
+ |
+ TOK_STRING TypeSuffix
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_STRING);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ $2,
++ WEBIDL_TYPE_STRING);
+ }
+ |
+ TOK_IDENTIFIER TypeSuffix
+ {
+ struct webidl_node *type;
+- type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_USER);
++ type = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ $2,
++ WEBIDL_TYPE_USER);
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_IDENT, type, $1);
+ }
+ |
+ TOK_SEQUENCE '<' Type '>' Null
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $3, (void *)WEBIDL_TYPE_SEQUENCE);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ $3,
++ WEBIDL_TYPE_SEQUENCE);
+ }
+ |
+ TOK_OBJECT TypeSuffix
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_OBJECT);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ $2,
++ WEBIDL_TYPE_OBJECT);
+ }
+ |
+ TOK_DATE TypeSuffix
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, $2, (void *)WEBIDL_TYPE_DATE);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ $2,
++ WEBIDL_TYPE_DATE);
+ }
+ ;
+
+@@ -1778,7 +1794,9 @@
+ TOK_IDENTIFIER Null
+ {
+ struct webidl_node *type;
+- type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_USER);
++ type = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_USER);
+ type = webidl_node_new(WEBIDL_NODE_TYPE_IDENT, type, $1);
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, type);
+ }
+@@ -1793,17 +1811,23 @@
+ |
+ TOK_BOOLEAN
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_BOOL);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_BOOL);
+ }
+ |
+ TOK_BYTE
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_BYTE);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_BYTE);
+ }
+ |
+ TOK_OCTET
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_OCTET);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_OCTET);
+ }
+ ;
+
+@@ -1811,9 +1835,9 @@
+ UnrestrictedFloatType:
+ TOK_UNRESTRICTED FloatType
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
+- $2,
+- (void *)WEBIDL_TYPE_MODIFIER_UNRESTRICTED);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_MODIFIER,
++ $2,
++ WEBIDL_TYPE_MODIFIER_UNRESTRICTED);
+ }
+ |
+ FloatType
+@@ -1823,12 +1847,16 @@
+ FloatType:
+ TOK_FLOAT
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_FLOAT);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_FLOAT);
+ }
+ |
+ TOK_DOUBLE
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_DOUBLE);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_DOUBLE);
+ }
+ ;
+
+@@ -1836,9 +1864,9 @@
+ UnsignedIntegerType:
+ TOK_UNSIGNED IntegerType
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_MODIFIER,
+- $2,
+- (void *)WEBIDL_TYPE_MODIFIER_UNSIGNED);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_MODIFIER,
++ $2,
++ WEBIDL_TYPE_MODIFIER_UNSIGNED);
+ }
+ |
+ IntegerType
+@@ -1848,15 +1876,21 @@
+ IntegerType:
+ TOK_SHORT
+ {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_SHORT);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_SHORT);
+ }
+ |
+ TOK_LONG OptionalLong
+ {
+ if ($2) {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_LONGLONG);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_LONGLONG);
+ } else {
+- $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_LONG);
++ $$ = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_LONG);
+ }
+ }
+ ;
+@@ -1927,7 +1961,9 @@
+ TOK_VOID
+ {
+ struct webidl_node *type;
+- type = webidl_node_new(WEBIDL_NODE_TYPE_TYPE_BASE, NULL, (void *)WEBIDL_TYPE_VOID);
++ type = webidl_new_number_node(WEBIDL_NODE_TYPE_TYPE_BASE,
++ NULL,
++ WEBIDL_TYPE_VOID);
+ $$ = webidl_node_new(WEBIDL_NODE_TYPE_TYPE, NULL, type);
+ }
+