summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-08 17:17:52 +0000
committerVincent Sanders <vincent.sanders@collabora.co.uk>2012-11-08 17:17:52 +0000
commita3bf3977d82f6dcd54c2a38bffe63858fd4da24c (patch)
treee824881251aa3d82ff25307dba8620176292cc0d
parent6893fcf829e928881c1bd05a541b33443078ea9c (diff)
downloadnsgenbind-a3bf3977d82f6dcd54c2a38bffe63858fd4da24c.tar.gz
nsgenbind-a3bf3977d82f6dcd54c2a38bffe63858fd4da24c.tar.bz2
add warning switch to control warning output at generation time
-rw-r--r--src/jsapi-libdom-operator.c67
-rw-r--r--src/jsapi-libdom-property.c51
-rw-r--r--src/nsgenbind.c6
-rw-r--r--src/options.h17
4 files changed, 98 insertions, 43 deletions
diff --git a/src/jsapi-libdom-operator.c b/src/jsapi-libdom-operator.c
index fccf4d1..2bb64d4 100644
--- a/src/jsapi-libdom-operator.c
+++ b/src/jsapi-libdom-operator.c
@@ -17,9 +17,6 @@
#include "webidl-ast.h"
#include "jsapi-libdom.h"
-#define WARN(msg, args...) fprintf(stderr, "%s: warning:"msg"\n", __func__, ## args);
-
-
static int webidl_func_spec_cb(struct webidl_node *node, void *ctx)
{
struct binding *binding = ctx;
@@ -173,11 +170,11 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_BYTE:
- WARN("Unhandled type WEBIDL_TYPE_BYTE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_BYTE");
break;
case WEBIDL_TYPE_OCTET:
- WARN("Unhandled type WEBIDL_TYPE_OCTET");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_OCTET");
break;
case WEBIDL_TYPE_FLOAT:
@@ -189,11 +186,12 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_SHORT:
- WARN("Unhandled type WEBIDL_TYPE_SHORT");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SHORT");
break;
case WEBIDL_TYPE_LONGLONG:
- WARN("Unhandled type WEBIDL_TYPE_LONGLONG");
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled type WEBIDL_TYPE_LONGLONG");
break;
case WEBIDL_TYPE_LONG:
@@ -211,7 +209,8 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_SEQUENCE:
- WARN("Unhandled type WEBIDL_TYPE_SEQUENCE");
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled type WEBIDL_TYPE_SEQUENCE");
break;
case WEBIDL_TYPE_OBJECT:
@@ -222,7 +221,8 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_DATE:
- WARN("Unhandled type WEBIDL_TYPE_DATE");
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled type WEBIDL_TYPE_DATE");
break;
case WEBIDL_TYPE_VOID:
@@ -288,11 +288,11 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_BYTE:
- WARN("Unhandled type WEBIDL_TYPE_BYTE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_BYTE");
break;
case WEBIDL_TYPE_OCTET:
- WARN("Unhandled type WEBIDL_TYPE_OCTET");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_OCTET");
break;
case WEBIDL_TYPE_FLOAT:
@@ -302,11 +302,12 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_SHORT:
- WARN("Unhandled type WEBIDL_TYPE_SHORT");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SHORT");
break;
case WEBIDL_TYPE_LONGLONG:
- WARN("Unhandled type WEBIDL_TYPE_LONGLONG");
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled type WEBIDL_TYPE_LONGLONG");
break;
case WEBIDL_TYPE_LONG:
@@ -330,7 +331,8 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_SEQUENCE:
- WARN("Unhandled type WEBIDL_TYPE_SEQUENCE");
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled type WEBIDL_TYPE_SEQUENCE");
break;
case WEBIDL_TYPE_OBJECT:
@@ -339,7 +341,7 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_DATE:
- WARN("Unhandled type WEBIDL_TYPE_DATE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_DATE");
break;
case WEBIDL_TYPE_VOID:
@@ -576,8 +578,10 @@ output_operation_input(struct binding *binding,
switch (webidl_arg_type) {
case WEBIDL_TYPE_USER:
fprintf(binding->outfile,
- "\tif ((!JSVAL_IS_NULL(argv[%d])) ||\n"
- "\t\t(JSVAL_IS_PRIMITIVE(argv[%d]))) {\n"
+ "\tif (!JSAPI_JSVAL_IS_OBJECT(argv[%d])) {\n"
+ "\t\tJSType argtype;\n"
+ "\t\targtype = JS_TypeOfValue(cx, argv[%d]);\n"
+ "\t\tJSLOG(\"User argument is type %%s not an object\", JS_GetTypeName(cx, argtype));\n"
"\t\treturn JS_FALSE;\n"
"\t}\n"
"\t%s = JSVAL_TO_OBJECT(argv[%d]);\n",
@@ -680,6 +684,26 @@ output_operation_input(struct binding *binding,
}
+static int
+output_operator_placeholder(struct binding *binding,
+ struct webidl_node *oplist,
+ struct webidl_node *ident_node)
+{
+ oplist = oplist;
+
+ WARN(WARNING_UNIMPLEMENTED,
+ "operation %s.%s has no implementation\n",
+ binding->interface,
+ webidl_node_gettext(ident_node));
+
+ fprintf(binding->outfile,
+ "\tJSLOG(\"operation %s.%s has no implementation\");\n",
+ binding->interface,
+ webidl_node_gettext(ident_node));
+
+ return 0;
+}
+
static int webidl_operator_body_cb(struct webidl_node *node, void *ctx)
{
struct binding *binding = ctx;
@@ -695,6 +719,10 @@ static int webidl_operator_body_cb(struct webidl_node *node, void *ctx)
/* operation without identifier - must have special keyword
* http://www.w3.org/TR/WebIDL/#idl-operations
*/
+ WARN(WARNING_UNIMPLEMENTED,
+ "Unhandled operation with no name on %s\n",
+ binding->interface);
+
} else {
/* normal operation with identifier */
@@ -734,10 +762,7 @@ static int webidl_operator_body_cb(struct webidl_node *node, void *ctx)
genbind_node_getnode(operation_node));
} else {
- fprintf(stderr,
- "warning: operation %s.%s has no implementation\n",
- binding->interface,
- webidl_node_gettext(ident_node));
+ output_operator_placeholder(binding, webidl_node_getnode(node), ident_node);
}
output_return(binding, "jsret", webidl_node_getnode(node));
diff --git a/src/jsapi-libdom-property.c b/src/jsapi-libdom-property.c
index 6bd698d..2bc3a79 100644
--- a/src/jsapi-libdom-property.c
+++ b/src/jsapi-libdom-property.c
@@ -17,9 +17,6 @@
#include "webidl-ast.h"
#include "jsapi-libdom.h"
-#define WARN(msg, args...) fprintf(stderr, "%s: warning:"msg"\n", __func__, ## args);
-
-
static int webidl_property_spec_cb(struct webidl_node *node, void *ctx)
{
struct binding *binding = ctx;
@@ -179,11 +176,11 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_BYTE:
- WARN("Unhandled type WEBIDL_TYPE_BYTE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_BYTE");
break;
case WEBIDL_TYPE_OCTET:
- WARN("Unhandled type WEBIDL_TYPE_OCTET");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_OCTET");
break;
case WEBIDL_TYPE_FLOAT:
@@ -195,11 +192,11 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_SHORT:
- WARN("Unhandled type WEBIDL_TYPE_SHORT");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SHORT");
break;
case WEBIDL_TYPE_LONGLONG:
- WARN("Unhandled type WEBIDL_TYPE_LONGLONG");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_LONGLONG");
break;
case WEBIDL_TYPE_LONG:
@@ -217,7 +214,7 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_SEQUENCE:
- WARN("Unhandled type WEBIDL_TYPE_SEQUENCE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SEQUENCE");
break;
case WEBIDL_TYPE_OBJECT:
@@ -228,7 +225,7 @@ static int output_return(struct binding *binding,
break;
case WEBIDL_TYPE_DATE:
- WARN("Unhandled type WEBIDL_TYPE_DATE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_DATE");
break;
case WEBIDL_TYPE_VOID:
@@ -284,11 +281,11 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_BYTE:
- WARN("Unhandled type WEBIDL_TYPE_BYTE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_BYTE");
break;
case WEBIDL_TYPE_OCTET:
- WARN("Unhandled type WEBIDL_TYPE_OCTET");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_OCTET");
break;
case WEBIDL_TYPE_FLOAT:
@@ -298,11 +295,11 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_SHORT:
- WARN("Unhandled type WEBIDL_TYPE_SHORT");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SHORT");
break;
case WEBIDL_TYPE_LONGLONG:
- WARN("Unhandled type WEBIDL_TYPE_LONGLONG");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_LONGLONG");
break;
case WEBIDL_TYPE_LONG:
@@ -331,7 +328,7 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_SEQUENCE:
- WARN("Unhandled type WEBIDL_TYPE_SEQUENCE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_SEQUENCE");
break;
case WEBIDL_TYPE_OBJECT:
@@ -340,7 +337,7 @@ static int output_return_declaration(struct binding *binding,
break;
case WEBIDL_TYPE_DATE:
- WARN("Unhandled type WEBIDL_TYPE_DATE");
+ WARN(WARNING_UNIMPLEMENTED, "Unhandled type WEBIDL_TYPE_DATE");
break;
case WEBIDL_TYPE_VOID:
@@ -353,6 +350,25 @@ static int output_return_declaration(struct binding *binding,
return 0;
}
+static int
+output_property_placeholder(struct binding *binding,
+ struct webidl_node* oplist,
+ const char *ident)
+{
+ oplist=oplist;
+
+ WARN(WARNING_UNIMPLEMENTED,
+ "property %s.%s has no implementation\n",
+ binding->interface,
+ ident);
+
+ fprintf(binding->outfile,
+ "\tJSLOG(\"property %s.%s has no implementation\");\n",
+ binding->interface,
+ ident);
+ return 0;
+}
+
static int output_property_getter(struct binding *binding,
struct webidl_node *node,
const char *ident)
@@ -412,10 +428,7 @@ static int output_property_getter(struct binding *binding,
"\tjsret = private->%s;\n",
ident);
} else {
- fprintf(stderr,
- "warning: attribute getter %s.%s has no implementation\n",
- binding->interface,
- ident);
+ output_property_placeholder(binding, node, ident);
}
}
diff --git a/src/nsgenbind.c b/src/nsgenbind.c
index 66292a9..0f549f9 100644
--- a/src/nsgenbind.c
+++ b/src/nsgenbind.c
@@ -30,7 +30,7 @@ static struct options* process_cmdline(int argc, char **argv)
return NULL;
}
- while ((opt = getopt(argc, argv, "vDd:I:o:")) != -1) {
+ while ((opt = getopt(argc, argv, "vDW::d:I:o:")) != -1) {
switch (opt) {
case 'I':
options->idlpath = strdup(optarg);
@@ -52,6 +52,10 @@ static struct options* process_cmdline(int argc, char **argv)
options->debug = true;
break;
+ case 'W':
+ options->warnings = 1; /* warning flags */
+ break;
+
default: /* '?' */
fprintf(stderr,
"Usage: %s [-d depfilename] [-I idlpath] [-o filename] inputfile\n",
diff --git a/src/options.h b/src/options.h
index ba43084..5ded73a 100644
--- a/src/options.h
+++ b/src/options.h
@@ -15,10 +15,23 @@ struct options {
char *depfilename;
FILE *depfilehandle;
char *idlpath;
- bool verbose;
- bool debug;
+ bool verbose; /* verbose processing */
+ bool debug; /* debug enabled */
+ unsigned int warnings; /* warning flags */
};
extern struct options *options;
+enum opt_warnings {
+ WARNING_UNIMPLEMENTED = 1,
+};
+
+#define WARNING_ALL (WARNING_UNIMPLEMENTED)
+
+#define WARN(flags, msg, args...) do { \
+ if ((options->warnings & flags) != 0) { \
+ fprintf(stderr, "%s: warning:"msg"\n", __func__, ## args); \
+ } \
+ } while(0)
+
#endif