Gitweb links:
...log
http://git.netsurf-browser.org/nsgenjsbind.git/shortlog/94259becfc4441d90...
...commit
http://git.netsurf-browser.org/nsgenjsbind.git/commit/94259becfc4441d9061...
...tree
http://git.netsurf-browser.org/nsgenjsbind.git/tree/94259becfc4441d9061c6...
The branch, master has been updated
via 94259becfc4441d9061c6f34f3e801dda834d01d (commit)
via 96054410e6e8e7d80dab0634d5369148e3062e7d (commit)
via 46cfe5f47ce0034bb8804d0bd04d573bc6213ab8 (commit)
from d5c2e8d0843abd94e4fed57f25186147f56a3976 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commitdiff
http://git.netsurf-browser.org/nsgenjsbind.git/commitdiff/94259becfc4441d...
commit 94259becfc4441d9061c6f34f3e801dda834d01d
Author: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
Commit: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
add comments on generating jsapi function output
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index 4dc2db8..1f5b6d4 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -108,6 +108,14 @@ output_function_spec(FILE *outfile,
struct genbind_node *genbind_ast,
struct binding *binding)
{
+/* find interface element with correct ident attached in webidl */
+/* for each function (WEBIDL_NODE_TYPE_OPERATION) emit a JSAPI_FS()*/
+/* static JSFunctionSpec jsfunctions_document[] = {
+ JSAPI_FS_DOCUMENT,
+ JSAPI_FS(write, 1, 0),
+ JSAPI_FS_END
+};
+*/
fprintf(outfile, "%s\n%s\n", binding->name, binding->interface);
return 0;
commitdiff
http://git.netsurf-browser.org/nsgenjsbind.git/commitdiff/96054410e6e8e7d...
commit 96054410e6e8e7d80dab0634d5369148e3062e7d
Author: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
Commit: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
improve binding debug tree dump output
diff --git a/src/genjsbind-ast.c b/src/genjsbind-ast.c
index 94f306c..32d5553 100644
--- a/src/genjsbind-ast.c
+++ b/src/genjsbind-ast.c
@@ -181,31 +181,33 @@ static const char *genbind_node_type_to_str(enum genbind_node_type
type)
return "Type";
case GENBIND_NODE_TYPE_TYPE_NODE:
- return "Type: Node";
+ return "Node";
case GENBIND_NODE_TYPE_TYPE_EXTRA:
- return "Type: Extra";
+ return "Extra";
case GENBIND_NODE_TYPE_TYPE_INTERFACE:
- return "Type: Interface";
+ return "Interface";
default:
return "Unknown";
}
}
-int genbind_ast_dump(struct genbind_node *node)
+int genbind_ast_dump(struct genbind_node *node, int indent)
{
+ const char *SPACES="
";
char *txt;
- while (node != NULL) {
- printf("%s\n", genbind_node_type_to_str(node->type));
+ while (node != NULL) {
+ printf("%.*s%s", indent, SPACES, genbind_node_type_to_str(node->type));
txt = genbind_node_gettext(node);
if (txt == NULL) {
- genbind_ast_dump(genbind_node_getnode(node));
+ printf("\n");
+ genbind_ast_dump(genbind_node_getnode(node), indent + 2);
} else {
- printf(" %s\n", txt);
+ printf(": \"%.*s\"\n", 75 - indent, txt);
}
node = node->l;
}
diff --git a/src/genjsbind-ast.h b/src/genjsbind-ast.h
index 66d66c2..9d25aad 100644
--- a/src/genjsbind-ast.h
+++ b/src/genjsbind-ast.h
@@ -38,7 +38,7 @@ char *genbind_strapp(char *a, char *b);
struct genbind_node *genbind_new_node(enum genbind_node_type type, struct genbind_node
*l, void *r);
struct genbind_node *genbind_node_link(struct genbind_node *tgt, struct genbind_node
*src);
-int genbind_ast_dump(struct genbind_node *ast);
+int genbind_ast_dump(struct genbind_node *ast, int indent);
/** Depth first left hand search using user provided comparison
*
diff --git a/src/genjsbind.c b/src/genjsbind.c
index 559602b..bcaf62f 100644
--- a/src/genjsbind.c
+++ b/src/genjsbind.c
@@ -94,7 +94,7 @@ int main(int argc, char **argv)
}
if (options->verbose) {
- genbind_ast_dump(genbind_root);
+ genbind_ast_dump(genbind_root, 0);
}
res = jsapi_libdom_output(options->outfilename, genbind_root);
commitdiff
http://git.netsurf-browser.org/nsgenjsbind.git/commitdiff/46cfe5f47ce0034...
commit 46cfe5f47ce0034bb8804d0bd04d573bc6213ab8
Author: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
Commit: Vincent Sanders <vincent.sanders(a)collabora.co.uk>
extract and output binding parameters
diff --git a/src/genjsbind-ast.c b/src/genjsbind-ast.c
index 28208e0..94f306c 100644
--- a/src/genjsbind-ast.c
+++ b/src/genjsbind-ast.c
@@ -129,8 +129,7 @@ char *genbind_node_gettext(struct genbind_node *node)
case GENBIND_NODE_TYPE_WEBIDLFILE:
case GENBIND_NODE_TYPE_STRING:
case GENBIND_NODE_TYPE_PREAMBLE:
- case GENBIND_NODE_TYPE_BINDING_IDENT:
- case GENBIND_NODE_TYPE_TYPE_IDENT:
+ case GENBIND_NODE_TYPE_IDENT:
case GENBIND_NODE_TYPE_TYPE_NODE:
case GENBIND_NODE_TYPE_TYPE_INTERFACE:
return node->r.text;
@@ -157,6 +156,9 @@ struct genbind_node *genbind_node_getnode(struct genbind_node *node)
static const char *genbind_node_type_to_str(enum genbind_node_type type)
{
switch(type) {
+ case GENBIND_NODE_TYPE_IDENT:
+ return "Ident";
+
case GENBIND_NODE_TYPE_ROOT:
return "Root";
@@ -175,15 +177,9 @@ static const char *genbind_node_type_to_str(enum genbind_node_type
type)
case GENBIND_NODE_TYPE_BINDING:
return "Binding";
- case GENBIND_NODE_TYPE_BINDING_IDENT:
- return "Binding: Ident";
-
case GENBIND_NODE_TYPE_TYPE:
return "Type";
- case GENBIND_NODE_TYPE_TYPE_IDENT:
- return "Type: Ident";
-
case GENBIND_NODE_TYPE_TYPE_NODE:
return "Type: Node";
diff --git a/src/genjsbind-ast.h b/src/genjsbind-ast.h
index eaa42f9..66d66c2 100644
--- a/src/genjsbind-ast.h
+++ b/src/genjsbind-ast.h
@@ -11,14 +11,13 @@
enum genbind_node_type {
GENBIND_NODE_TYPE_ROOT = 0,
+ GENBIND_NODE_TYPE_IDENT,
GENBIND_NODE_TYPE_WEBIDLFILE,
GENBIND_NODE_TYPE_HDRCOMMENT,
GENBIND_NODE_TYPE_STRING,
GENBIND_NODE_TYPE_PREAMBLE,
GENBIND_NODE_TYPE_BINDING,
- GENBIND_NODE_TYPE_BINDING_IDENT,
GENBIND_NODE_TYPE_TYPE,
- GENBIND_NODE_TYPE_TYPE_IDENT,
GENBIND_NODE_TYPE_TYPE_NODE,
GENBIND_NODE_TYPE_TYPE_EXTRA,
GENBIND_NODE_TYPE_TYPE_INTERFACE,
diff --git a/src/genjsbind-parser.y b/src/genjsbind-parser.y
index 98ae18a..de2bd10 100644
--- a/src/genjsbind-parser.y
+++ b/src/genjsbind-parser.y
@@ -162,7 +162,7 @@ Binding
{
$$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING,
NULL,
- genbind_new_node(GENBIND_NODE_TYPE_BINDING_IDENT, $4,
$2));
+ genbind_new_node(GENBIND_NODE_TYPE_IDENT, $4, $2));
}
;
@@ -191,7 +191,7 @@ Type
{
$$ = genbind_new_node(GENBIND_NODE_TYPE_TYPE,
NULL,
- genbind_new_node(GENBIND_NODE_TYPE_TYPE_IDENT, $4, $2));
+ genbind_new_node(GENBIND_NODE_TYPE_IDENT, $4, $2));
}
;
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index 505f115..4dc2db8 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -6,10 +6,11 @@
* Copyright 2012 Vincent Sanders <vince(a)netsurf-browser.org>
*/
+#include <stdbool.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
-#include <stdbool.h>
+#include <stdlib.h>
#include "options.h"
#include "genjsbind-ast.h"
@@ -19,6 +20,11 @@
#define HDR_COMMENT_SEP "\n * "
#define HDR_COMMENT_PREABLE "Generated by nsgenjsapi"
+struct binding {
+ const char *name; /* name of the binding */
+ const char *interface; /* webidl interface binding is for */
+};
+
static int webidl_preamble_cb(struct genbind_node *node, void *ctx)
{
FILE *outfile = ctx;
@@ -91,29 +97,62 @@ read_webidl(struct genbind_node *genbind_ast, struct webidl_node
**webidl_ast)
/* debug dump of web idl AST */
if (options->verbose) {
- webidl_ast_dump(webidl_ast, 0);
+ webidl_ast_dump(*webidl_ast, 0);
}
return res;
}
-struct binding {
- const char *name; /* name of the binding */
- const char *interface; /* webidl interface binding is for */
-};
+static int
+output_function_spec(FILE *outfile,
+ struct genbind_node *genbind_ast,
+ struct binding *binding)
+{
+ fprintf(outfile, "%s\n%s\n", binding->name, binding->interface);
+
+ return 0;
+}
static struct binding *binding_new(struct genbind_node *genbind_ast)
{
struct binding *nb;
- nb = calloc(1, sizeof(struct binding));
-
struct genbind_node *binding_node;
+ struct genbind_node *ident_node;
+ struct genbind_node *interface_node;
binding_node = genbind_node_find(genbind_ast,
- NULL,
- genbind_cmp_node_type,
- GENBIND_NODE_TYPE_BINDING);
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_BINDING);
+
+ if (binding_node == NULL) {
+ return NULL;
+ }
+
+ ident_node = genbind_node_find(genbind_node_getnode(binding_node),
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_IDENT);
+
+ if (ident_node == NULL) {
+ return NULL;
+ }
+
+ interface_node = genbind_node_find(genbind_node_getnode(binding_node),
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_TYPE_INTERFACE);
+
+ if (interface_node == NULL) {
+ return NULL;
+ }
+
+ nb = calloc(1, sizeof(struct binding));
+
+ nb->name = genbind_node_gettext(ident_node);
+ nb->interface = genbind_node_gettext(interface_node);
+ return nb;
}
int jsapi_libdom_output(char *outfilename, struct genbind_node *genbind_ast)
@@ -151,7 +190,7 @@ int jsapi_libdom_output(char *outfilename, struct genbind_node
*genbind_ast)
output_preamble(outfile, genbind_ast);
- //output_function_spec(outfile, genbind_ast);
+ output_function_spec(outfile, genbind_ast, binding);
//output_property_spec(outfile, genbind_ast);
-----------------------------------------------------------------------
Summary of changes:
src/genjsbind-ast.c | 30 +++++++++-----------
src/genjsbind-ast.h | 5 +--
src/genjsbind-parser.y | 4 +-
src/genjsbind.c | 2 +-
src/jsapi-libdom.c | 69 ++++++++++++++++++++++++++++++++++++++++-------
5 files changed, 77 insertions(+), 33 deletions(-)
diff --git a/src/genjsbind-ast.c b/src/genjsbind-ast.c
index 28208e0..32d5553 100644
--- a/src/genjsbind-ast.c
+++ b/src/genjsbind-ast.c
@@ -129,8 +129,7 @@ char *genbind_node_gettext(struct genbind_node *node)
case GENBIND_NODE_TYPE_WEBIDLFILE:
case GENBIND_NODE_TYPE_STRING:
case GENBIND_NODE_TYPE_PREAMBLE:
- case GENBIND_NODE_TYPE_BINDING_IDENT:
- case GENBIND_NODE_TYPE_TYPE_IDENT:
+ case GENBIND_NODE_TYPE_IDENT:
case GENBIND_NODE_TYPE_TYPE_NODE:
case GENBIND_NODE_TYPE_TYPE_INTERFACE:
return node->r.text;
@@ -157,6 +156,9 @@ struct genbind_node *genbind_node_getnode(struct genbind_node *node)
static const char *genbind_node_type_to_str(enum genbind_node_type type)
{
switch(type) {
+ case GENBIND_NODE_TYPE_IDENT:
+ return "Ident";
+
case GENBIND_NODE_TYPE_ROOT:
return "Root";
@@ -175,41 +177,37 @@ static const char *genbind_node_type_to_str(enum genbind_node_type
type)
case GENBIND_NODE_TYPE_BINDING:
return "Binding";
- case GENBIND_NODE_TYPE_BINDING_IDENT:
- return "Binding: Ident";
-
case GENBIND_NODE_TYPE_TYPE:
return "Type";
- case GENBIND_NODE_TYPE_TYPE_IDENT:
- return "Type: Ident";
-
case GENBIND_NODE_TYPE_TYPE_NODE:
- return "Type: Node";
+ return "Node";
case GENBIND_NODE_TYPE_TYPE_EXTRA:
- return "Type: Extra";
+ return "Extra";
case GENBIND_NODE_TYPE_TYPE_INTERFACE:
- return "Type: Interface";
+ return "Interface";
default:
return "Unknown";
}
}
-int genbind_ast_dump(struct genbind_node *node)
+int genbind_ast_dump(struct genbind_node *node, int indent)
{
+ const char *SPACES="
";
char *txt;
- while (node != NULL) {
- printf("%s\n", genbind_node_type_to_str(node->type));
+ while (node != NULL) {
+ printf("%.*s%s", indent, SPACES, genbind_node_type_to_str(node->type));
txt = genbind_node_gettext(node);
if (txt == NULL) {
- genbind_ast_dump(genbind_node_getnode(node));
+ printf("\n");
+ genbind_ast_dump(genbind_node_getnode(node), indent + 2);
} else {
- printf(" %s\n", txt);
+ printf(": \"%.*s\"\n", 75 - indent, txt);
}
node = node->l;
}
diff --git a/src/genjsbind-ast.h b/src/genjsbind-ast.h
index eaa42f9..9d25aad 100644
--- a/src/genjsbind-ast.h
+++ b/src/genjsbind-ast.h
@@ -11,14 +11,13 @@
enum genbind_node_type {
GENBIND_NODE_TYPE_ROOT = 0,
+ GENBIND_NODE_TYPE_IDENT,
GENBIND_NODE_TYPE_WEBIDLFILE,
GENBIND_NODE_TYPE_HDRCOMMENT,
GENBIND_NODE_TYPE_STRING,
GENBIND_NODE_TYPE_PREAMBLE,
GENBIND_NODE_TYPE_BINDING,
- GENBIND_NODE_TYPE_BINDING_IDENT,
GENBIND_NODE_TYPE_TYPE,
- GENBIND_NODE_TYPE_TYPE_IDENT,
GENBIND_NODE_TYPE_TYPE_NODE,
GENBIND_NODE_TYPE_TYPE_EXTRA,
GENBIND_NODE_TYPE_TYPE_INTERFACE,
@@ -39,7 +38,7 @@ char *genbind_strapp(char *a, char *b);
struct genbind_node *genbind_new_node(enum genbind_node_type type, struct genbind_node
*l, void *r);
struct genbind_node *genbind_node_link(struct genbind_node *tgt, struct genbind_node
*src);
-int genbind_ast_dump(struct genbind_node *ast);
+int genbind_ast_dump(struct genbind_node *ast, int indent);
/** Depth first left hand search using user provided comparison
*
diff --git a/src/genjsbind-parser.y b/src/genjsbind-parser.y
index 98ae18a..de2bd10 100644
--- a/src/genjsbind-parser.y
+++ b/src/genjsbind-parser.y
@@ -162,7 +162,7 @@ Binding
{
$$ = genbind_new_node(GENBIND_NODE_TYPE_BINDING,
NULL,
- genbind_new_node(GENBIND_NODE_TYPE_BINDING_IDENT, $4,
$2));
+ genbind_new_node(GENBIND_NODE_TYPE_IDENT, $4, $2));
}
;
@@ -191,7 +191,7 @@ Type
{
$$ = genbind_new_node(GENBIND_NODE_TYPE_TYPE,
NULL,
- genbind_new_node(GENBIND_NODE_TYPE_TYPE_IDENT, $4, $2));
+ genbind_new_node(GENBIND_NODE_TYPE_IDENT, $4, $2));
}
;
diff --git a/src/genjsbind.c b/src/genjsbind.c
index 559602b..bcaf62f 100644
--- a/src/genjsbind.c
+++ b/src/genjsbind.c
@@ -94,7 +94,7 @@ int main(int argc, char **argv)
}
if (options->verbose) {
- genbind_ast_dump(genbind_root);
+ genbind_ast_dump(genbind_root, 0);
}
res = jsapi_libdom_output(options->outfilename, genbind_root);
diff --git a/src/jsapi-libdom.c b/src/jsapi-libdom.c
index 505f115..1f5b6d4 100644
--- a/src/jsapi-libdom.c
+++ b/src/jsapi-libdom.c
@@ -6,10 +6,11 @@
* Copyright 2012 Vincent Sanders <vince(a)netsurf-browser.org>
*/
+#include <stdbool.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
-#include <stdbool.h>
+#include <stdlib.h>
#include "options.h"
#include "genjsbind-ast.h"
@@ -19,6 +20,11 @@
#define HDR_COMMENT_SEP "\n * "
#define HDR_COMMENT_PREABLE "Generated by nsgenjsapi"
+struct binding {
+ const char *name; /* name of the binding */
+ const char *interface; /* webidl interface binding is for */
+};
+
static int webidl_preamble_cb(struct genbind_node *node, void *ctx)
{
FILE *outfile = ctx;
@@ -91,29 +97,70 @@ read_webidl(struct genbind_node *genbind_ast, struct webidl_node
**webidl_ast)
/* debug dump of web idl AST */
if (options->verbose) {
- webidl_ast_dump(webidl_ast, 0);
+ webidl_ast_dump(*webidl_ast, 0);
}
return res;
}
-struct binding {
- const char *name; /* name of the binding */
- const char *interface; /* webidl interface binding is for */
+
+static int
+output_function_spec(FILE *outfile,
+ struct genbind_node *genbind_ast,
+ struct binding *binding)
+{
+/* find interface element with correct ident attached in webidl */
+/* for each function (WEBIDL_NODE_TYPE_OPERATION) emit a JSAPI_FS()*/
+/* static JSFunctionSpec jsfunctions_document[] = {
+ JSAPI_FS_DOCUMENT,
+ JSAPI_FS(write, 1, 0),
+ JSAPI_FS_END
};
+*/
+ fprintf(outfile, "%s\n%s\n", binding->name, binding->interface);
+ return 0;
+}
static struct binding *binding_new(struct genbind_node *genbind_ast)
{
struct binding *nb;
- nb = calloc(1, sizeof(struct binding));
-
struct genbind_node *binding_node;
+ struct genbind_node *ident_node;
+ struct genbind_node *interface_node;
binding_node = genbind_node_find(genbind_ast,
- NULL,
- genbind_cmp_node_type,
- GENBIND_NODE_TYPE_BINDING);
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_BINDING);
+
+ if (binding_node == NULL) {
+ return NULL;
+ }
+
+ ident_node = genbind_node_find(genbind_node_getnode(binding_node),
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_IDENT);
+
+ if (ident_node == NULL) {
+ return NULL;
+ }
+
+ interface_node = genbind_node_find(genbind_node_getnode(binding_node),
+ NULL,
+ genbind_cmp_node_type,
+ (void *)GENBIND_NODE_TYPE_TYPE_INTERFACE);
+
+ if (interface_node == NULL) {
+ return NULL;
+ }
+
+ nb = calloc(1, sizeof(struct binding));
+
+ nb->name = genbind_node_gettext(ident_node);
+ nb->interface = genbind_node_gettext(interface_node);
+ return nb;
}
int jsapi_libdom_output(char *outfilename, struct genbind_node *genbind_ast)
@@ -151,7 +198,7 @@ int jsapi_libdom_output(char *outfilename, struct genbind_node
*genbind_ast)
output_preamble(outfile, genbind_ast);
- //output_function_spec(outfile, genbind_ast);
+ output_function_spec(outfile, genbind_ast, binding);
//output_property_spec(outfile, genbind_ast);
--
NetSurf Generator for JavaScript bindings