diff options
-rw-r--r-- | src/duk-libdom-generated.c | 17 | ||||
-rw-r--r-- | src/ir.c | 4 | ||||
-rw-r--r-- | src/ir.h | 1 |
3 files changed, 20 insertions, 2 deletions
diff --git a/src/duk-libdom-generated.c b/src/duk-libdom-generated.c index 0790e00..9305dcf 100644 --- a/src/duk-libdom-generated.c +++ b/src/duk-libdom-generated.c @@ -262,8 +262,21 @@ output_generated_attribute_setter(FILE* outf, "\tdom_exception exc;\n" "\tdom_string *str;\n" "\tduk_size_t slen;\n" - "\tconst char *s;\n" - "\ts = duk_safe_to_lstring(ctx, 0, &slen);\n" + "\tconst char *s;\n"); + if ((atributee->treatnullas != NULL) && + (strcmp(atributee->treatnullas, "EmptyString") == 0)) { + fprintf(outf, + "\tif (duk_is_null(ctx, 0)) {\n" + "\t\ts = \"\";\n" + "\t\tslen = 0;\n" + "\t} else {\n" + "\t\ts = duk_safe_to_lstring(ctx, 0, &slen);\n" + "\t}\n"); + } else { + fprintf(outf, + "\ts = duk_safe_to_lstring(ctx, 0, &slen);\n"); + } + fprintf(outf, "\n" "\texc = dom_string_create((const uint8_t *)s, slen, &str);\n" "\tif (exc != DOM_NO_ERR) {\n" @@ -607,6 +607,10 @@ attribute_map_new(struct webidl_node *interface, cure->name); } + /* check for treatnullas extended attribute */ + cure->treatnullas = get_extended_value(at_node, + "TreatNullAs"); + /* move to next attribute */ cure++; @@ -69,6 +69,7 @@ struct ir_attribute_entry { enum webidl_type_modifier modifier; /**< modifier for the attribute intself */ const char *putforwards; /**< putforwards attribute */ + const char *treatnullas; /**< treatnullas attribute */ struct genbind_node *getter; /**< getter from binding */ struct genbind_node *setter; /**< getter from binding */ |