/* binding generator output * * This file is part of nsgenbind. * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * Copyright 2012 Vincent Sanders */ #ifndef nsgenbind_jsapi_libdom_h #define nsgenbind_jsapi_libdom_h struct options; struct binding_interface { const char *name; /* name of interface */ struct genbind_node *node; /* node of interface in binding */ struct webidl_node *widl_node; /* node of interface in webidl */ const char *inherit_name; /* name of interface this inherits from */ int inherit_idx; /* index into binding map of inherited interface or -1 for not in map */ int refcount; /* number of entries in map that refer to this interface */ int own_properties; /* the number of properties the interface has */ int own_functions; /* the number of functions the interface has */ }; struct binding { struct genbind_node *gb_ast; /* root node of binding AST */ struct webidl_node *wi_ast; /* root node of webidl AST */ const char *name; /* Name of binding (first interface name by default) */ int interfacec; /* numer of interfaces in the interface map */ struct binding_interface *interfaces; /* binding interface map */ const char *interface; /* webidl interface binding is for */ bool has_private; /* true if the binding requires a private structure */ struct genbind_node *binding_list; /* node list of the binding */ struct genbind_node *addproperty; /* binding api add property node or NULL */ struct genbind_node *delproperty; /* binding api delete property node or NULL */ struct genbind_node *getproperty; /* binding api get property node or NULL */ struct genbind_node *setproperty; /* binding api set property node or NULL */ struct genbind_node *enumerate; /* binding api enumerate node or NULL */ struct genbind_node *resolve; /* binding api resolve node or NULL */ struct genbind_node *finalise; /* binding api finalise node or NULL */ struct genbind_node *mark; /* binding api mark node or NULL */ const char *hdrguard; /* header file guard name */ FILE *outfile ; /* file handle output should be written to, * allows reuse of callback routines to output * to headers and source files */ FILE *srcfile ; /* output source file */ FILE *hdrfile ; /* output header file */ }; /** Generate binding between jsapi and netsurf libdom */ int jsapi_libdom_output(struct options *options, struct genbind_node *genbind_ast, struct genbind_node *binding_node); /** output code block from a node */ void output_code_block(struct binding *binding, struct genbind_node *codelist); /* Generate jsapi native function specifiers */ int output_function_spec(struct binding *binding); /* Generate jsapi native function bodys * * web IDL describes methods as operators * http://www.w3.org/TR/WebIDL/#idl-operations * * This walks the web IDL AST to find all operator interface members * and construct appropriate jsapi native function body to implement * them. * * Function body contents can be overriden with an operator code * block in the binding definition. * * @param binding The binding information * @param interface The interface to generate operator bodys for */ int output_function_body(struct binding *binding, const char *interface); /** generate property tinyid enum */ int output_property_tinyid(struct binding *binding); /** generate property specifier structure */ int output_property_spec(struct binding *binding); /** generate property function bodies */ int output_property_body(struct binding *binding); /** generate binding initialisation */ int output_class_init(struct binding *binding); /** generate binding class constructors */ int output_class_new(struct binding *binding); #endif