26static FILE *genbind_parsetracef;
57 while (
end->l != NULL) {
108 fulllen = strlen(a) + strlen(b) + 1;
109 fullstr =
malloc(fulllen);
110 snprintf(fullstr, fulllen,
"%s%s", a, b);
161 if (
node->
l != NULL) {
168 return cb(
node, ctx);
189 genbind_enumerate_node,
203 if ((
node == NULL) || (
node == prev)) {
207 if (
node->
l != prev) {
214 if (cb(
node, ctx) != 0) {
249 while (found_node != NULL) {
256 while (ident_node != NULL) {
258 if (strcmp(ident_node->
r.
text, ident) == 0) {
288 while (res_node != NULL) {
297 if (*
type == methodtype) {
321 while (res_node != NULL) {
328 if ((ident != NULL) &&
329 (method_ident != NULL) &&
330 strcmp(ident, method_ident) == 0) {
465static int genbind_ast_dump(FILE *dfile,
struct genbind_node *
node,
int indent)
467 const char *SPACES=
" ";
471 while (
node != NULL) {
472 fprintf(dfile,
"%.*s%s", indent, SPACES,
473 genbind_node_type_to_str(
node->
type));
479 fprintf(dfile,
"\n");
480 genbind_ast_dump(dfile,
484 fprintf(dfile,
": %d\n", *val);
487 fprintf(dfile,
": \"%.*s\"\n", 75 - indent, txt);
510 genbind_ast_dump(dumpf,
node, 0);
522 static char *prevfilepath = NULL;
526 if (genfile != NULL) {
528 printf(
"Opened Genbind file %s\n",
filename);
530 if (prevfilepath == NULL) {
532 if (fullname == NULL) {
537 prevfilepath = strndup(
filename,fulllen);
543 if (prevfilepath != NULL) {
544 fulllen = strlen(prevfilepath) + strlen(
filename) + 2;
545 fullname =
malloc(fulllen);
546 snprintf(fullname, fulllen,
"%s/%s", prevfilepath,
filename);
548 printf(
"Attempting to open Genbind file %s\n", fullname);
550 genfile = fopen(fullname,
"r");
551 if (genfile != NULL) {
553 printf(
"Opened Genbind file %s\n", fullname);
564 fullname =
malloc(fulllen);
566 genfile = fopen(fullname,
"r");
568 printf(
"Opend Genbind file %s\n", fullname);
570 if (
options->depfilehandle != NULL) {
571 fprintf(
options->depfilehandle,
" \\\n\t%s",
592 fprintf(stderr,
"Error opening %s: %s\n",
602 genbind_parsetracef =
genb_fopen(
"binding-trace",
"w");
604 genbind_parsetracef = NULL;
614 if (genbind_parsetracef != NULL) {
615 fclose(genbind_parsetracef);
626 va_start(ap, format);
628 if (genbind_parsetracef == NULL) {
629 ret = vfprintf(stream, format, ap);
631 ret = vfprintf(genbind_parsetracef, format, ap);
struct genbind_node * genbind_node_prepend(struct genbind_node *list, struct genbind_node *inst)
int nsgenbind__flex_debug
struct genbind_node * genbind_node_find(struct genbind_node *node, struct genbind_node *prev, genbind_callback_t *cb, void *ctx)
int genbind_parsefile(char *infilename, struct genbind_node **ast)
void nsgenbind_restart(FILE *)
struct genbind_node * genbind_node_find_type(struct genbind_node *node, struct genbind_node *prev, enum genbind_node_type type)
int genbind_dump_ast(struct genbind_node *node)
struct genbind_node * genbind_node_find_method_ident(struct genbind_node *node, struct genbind_node *prev, enum genbind_method_type nodetype, const char *ident)
int * genbind_node_getint(struct genbind_node *node)
struct genbind_node * genbind_node_find_type_ident(struct genbind_node *node, struct genbind_node *prev, enum genbind_node_type type, const char *ident)
struct genbind_node * genbind_node_find_method(struct genbind_node *node, struct genbind_node *prev, enum genbind_method_type methodtype)
struct genbind_node * genbind_new_node(enum genbind_node_type type, struct genbind_node *l, void *r)
struct genbind_node * genbind_new_number_node(enum genbind_node_type type, struct genbind_node *l, int number)
struct genbind_node * genbind_node_getnode(struct genbind_node *node)
FILE * genbindopen(const char *filename)
char * genbind_node_gettext(struct genbind_node *node)
struct genbind_node * genbind_node_link(struct genbind_node *tgt, struct genbind_node *src)
int genbind_cmp_node_type(struct genbind_node *node, void *ctx)
struct genbind_node * genbind_node_add(struct genbind_node *node, struct genbind_node *list)
int genbind_node_enumerate_type(struct genbind_node *node, enum genbind_node_type type)
int genbind_node_foreach_type(struct genbind_node *node, enum genbind_node_type type, genbind_callback_t *cb, void *ctx)
int genbind_fprintf(FILE *stream, const char *format,...)
char * genbind_strapp(char *a, char *b)
int nsgenbind_parse(char *filename, struct genbind_node **genbind_ast)
@ GENBIND_NODE_TYPE_PARAMETER
@ GENBIND_NODE_TYPE_BINDING
@ GENBIND_NODE_TYPE_INTERNAL
@ GENBIND_NODE_TYPE_MODIFIER
@ GENBIND_NODE_TYPE_WEBIDL
@ GENBIND_NODE_TYPE_METHOD_TYPE
@ GENBIND_NODE_TYPE_STRING
@ GENBIND_NODE_TYPE_FLAGS
@ GENBIND_NODE_TYPE_CLASS
@ GENBIND_NODE_TYPE_METHOD
@ GENBIND_NODE_TYPE_PROPERTY
@ GENBIND_NODE_TYPE_IDENT
@ GENBIND_NODE_TYPE_PRIVATE
@ GENBIND_NODE_TYPE_CDATA
int() genbind_callback_t(struct genbind_node *node, void *ctx)
struct genbind_node * node
enum genbind_node_type type
FILE * genb_fopen(const char *fname, const char *mode)