summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-19 19:22:07 +0100
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-09-19 19:22:07 +0100
commit46cfe5f47ce0034bb8804d0bd04d573bc6213ab8 (patch)
treec8d48ee534040cf4f36e238970a99dbee63b2d9b /src
parentd5c2e8d0843abd94e4fed57f25186147f56a3976 (diff)
downloadnsgenbind-46cfe5f47ce0034bb8804d0bd04d573bc6213ab8.tar.gz
nsgenbind-46cfe5f47ce0034bb8804d0bd04d573bc6213ab8.tar.bz2
extract and output binding parameters
Diffstat (limited to 'src')
-rw-r--r--src/genjsbind-ast.c12
-rw-r--r--src/genjsbind-ast.h3
-rw-r--r--src/genjsbind-parser.y4
-rw-r--r--src/jsapi-libdom.c63
4 files changed, 58 insertions, 24 deletions
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@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);