summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2012-10-15 00:31:22 +0100
committerVincent Sanders <vince@kyllikki.org>2012-10-15 00:31:22 +0100
commita85a6601e5a401952b81a2da727c2f110459e6a4 (patch)
tree73fd5ab9fa2410f289a5d99ffea35b697c482f58
parent6ec7a2853b5d339fa086fe5dadb4605fb0f392c3 (diff)
downloadnsgenbind-a85a6601e5a401952b81a2da727c2f110459e6a4.tar.gz
nsgenbind-a85a6601e5a401952b81a2da727c2f110459e6a4.tar.bz2
initial input parameter generation
-rw-r--r--src/jsapi-libdom-operator.c93
1 files changed, 86 insertions, 7 deletions
diff --git a/src/jsapi-libdom-operator.c b/src/jsapi-libdom-operator.c
index 001bb39..20d4170 100644
--- a/src/jsapi-libdom-operator.c
+++ b/src/jsapi-libdom-operator.c
@@ -23,20 +23,24 @@
* values as appropriate
*/
static void
-output_variable_definitions(struct binding *binding, struct webidl_node *operation_list)
+output_variable_definitions(struct binding *binding,
+ struct webidl_node *operation_list)
{
struct webidl_node *arglist_node;
struct webidl_node *arglist; /* argument list */
struct webidl_node *arg_node = NULL;
+ struct webidl_node *arg_ident = NULL;
+ struct webidl_node *arg_type = NULL;
+ struct webidl_node *arg_type_base = NULL;
+ enum webidl_type webidl_arg_type;
/* return value */
fprintf(binding->outfile, "\tjsval jsretval = JSVAL_VOID;\n");
/* input variables */
- arglist_node = webidl_node_find(operation_list,
- NULL,
- webidl_cmp_node_type,
- (void *)WEBIDL_NODE_TYPE_LIST);
+ arglist_node = webidl_node_find_type(operation_list,
+ NULL,
+ WEBIDL_NODE_TYPE_LIST);
if (arglist_node == NULL) {
return; /* @todo check if this is broken AST */
@@ -45,11 +49,86 @@ output_variable_definitions(struct binding *binding, struct webidl_node *operati
arglist = webidl_node_getnode(arglist_node);
arg_node = webidl_node_find_type(arglist,
- arg_node,
- WEBIDL_NODE_TYPE_ARGUMENT);
+ arg_node,
+ WEBIDL_NODE_TYPE_ARGUMENT);
while (arg_node != NULL) {
/* generate variable to hold the argument */
+ arg_ident = webidl_node_find_type(webidl_node_getnode(arg_node),
+ NULL,
+ WEBIDL_NODE_TYPE_IDENT);
+
+ arg_type = webidl_node_find_type(webidl_node_getnode(arg_node),
+ NULL,
+ WEBIDL_NODE_TYPE_TYPE);
+
+ arg_type_base = webidl_node_find_type(webidl_node_getnode(arg_type),
+ NULL,
+ WEBIDL_NODE_TYPE_TYPE_BASE);
+
+ webidl_arg_type = webidl_node_getint(arg_type_base);
+
+ switch (webidl_arg_type) {
+ case WEBIDL_TYPE_USER:
+ break;
+
+ case WEBIDL_TYPE_BOOL:
+ /* JSBool */
+ fprintf(binding->outfile,
+ "\tjsBool %s = JS_FALSE;\n",
+ webidl_node_gettext(arg_ident));
+
+ break;
+
+ case WEBIDL_TYPE_BYTE:
+ case WEBIDL_TYPE_OCTET:
+ break;
+
+ case WEBIDL_TYPE_FLOAT:
+ case WEBIDL_TYPE_DOUBLE:
+ /* double */
+ fprintf(binding->outfile,
+ "\tdouble %s = 0;\n",
+ webidl_node_gettext(arg_ident));
+ break;
+
+ case WEBIDL_TYPE_SHORT:
+ case WEBIDL_TYPE_LONGLONG:
+ break;
+
+ case WEBIDL_TYPE_LONG:
+ /* int32_t */
+ fprintf(binding->outfile,
+ "\tint32_t %s = 0;\n",
+ webidl_node_gettext(arg_ident));
+ break;
+
+ case WEBIDL_TYPE_STRING:
+ /* JSString * */
+ fprintf(binding->outfile,
+ "\tJSString *%s = NULL;\n",
+ webidl_node_gettext(arg_ident));
+ break;
+
+ case WEBIDL_TYPE_SEQUENCE:
+ break;
+
+ case WEBIDL_TYPE_OBJECT:
+ /* JSObject * */
+ fprintf(binding->outfile,
+ "\tJSObject *%s = NULL;\n",
+ webidl_node_gettext(arg_ident));
+ break;
+
+ case WEBIDL_TYPE_DATE:
+ case WEBIDL_TYPE_VOID:
+ break;
+
+ default:
+ break;
+ }
+
+ /* next argument */
arg_node = webidl_node_find_type(arglist,
arg_node,
WEBIDL_NODE_TYPE_ARGUMENT);