From a85a6601e5a401952b81a2da727c2f110459e6a4 Mon Sep 17 00:00:00 2001 From: Vincent Sanders Date: Mon, 15 Oct 2012 00:31:22 +0100 Subject: initial input parameter generation --- src/jsapi-libdom-operator.c | 93 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 86 insertions(+), 7 deletions(-) (limited to 'src/jsapi-libdom-operator.c') 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); -- cgit v1.2.3