X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=wrappergen%2Fwrite_jna.c;h=d681f4768936d50854c2a747738f017d5d473129;hb=2fb66fd8bd2a5956ab2cad26978ccfb7e105d45f;hp=189425cefefce3b40d4b14229852edfdbe3530f4;hpb=fbbb2b6932bdd8455b850b750d93b4d5584402a7;p=cparser diff --git a/wrappergen/write_jna.c b/wrappergen/write_jna.c index 189425c..d681f47 100644 --- a/wrappergen/write_jna.c +++ b/wrappergen/write_jna.c @@ -22,6 +22,7 @@ #include #include +#include "adt/strutil.h" #include "write_jna.h" #include "symbol_t.h" #include "ast_t.h" @@ -44,11 +45,9 @@ static pset_new_t avoid_symbols; static output_limit *output_limits; static const char *libname; -static void write_type(type_t *type); - static bool is_system_header(const char *fname) { - if (strncmp(fname, "/usr/include", 12) == 0) + if (strstart(fname, "/usr/include")) return true; if (fname == builtin_source_position.input_name) return true; @@ -57,17 +56,17 @@ static bool is_system_header(const char *fname) static const char *fix_builtin_names(const char *name) { - if (strcmp(name, "class") == 0) { + if (streq(name, "class")) { return "_class"; - } else if(strcmp(name, "this") == 0) { + } else if (streq(name, "this")) { return "_this"; - } else if(strcmp(name, "public") == 0) { + } else if (streq(name, "public")) { return "_public"; - } else if(strcmp(name, "protected") == 0) { + } else if (streq(name, "protected")) { return "_protected"; - } else if(strcmp(name, "private") == 0) { + } else if (streq(name, "private")) { return "_private"; - } else if(strcmp(name, "final") == 0) { + } else if (streq(name, "final")) { return "_final"; } /* TODO put all reserved names here */ @@ -224,16 +223,11 @@ static void write_type(type_t *type) case TYPE_ENUM: write_enum_type(&type->enumt); return; - case TYPE_BUILTIN: - write_type(type->builtin.real_type); - return; case TYPE_ERROR: - case TYPE_INVALID: case TYPE_TYPEOF: case TYPE_TYPEDEF: panic("invalid type found"); case TYPE_ARRAY: - case TYPE_BITFIELD: case TYPE_REFERENCE: case TYPE_FUNCTION: case TYPE_COMPLEX: @@ -277,7 +271,7 @@ static void write_unary_expression(const unary_expression_t *expression) case EXPR_UNARY_NOT: fputc('!', out); break; - case EXPR_UNARY_CAST_IMPLICIT: + case EXPR_UNARY_CAST: write_expression(expression->value); return; default: @@ -314,23 +308,20 @@ static void write_expression(const expression_t *expression) /* TODO */ switch(expression->kind) { case EXPR_LITERAL_INTEGER: - case EXPR_LITERAL_INTEGER_OCTAL: fprintf(out, "%s", expression->literal.value.begin); break; - case EXPR_LITERAL_INTEGER_HEXADECIMAL: - fprintf(out, "0x%s", expression->literal.value.begin); - break; - case EXPR_REFERENCE_ENUM_VALUE: { + + case EXPR_ENUM_CONSTANT: { /* UHOH... hacking */ entity_t *entity = expression->reference.entity; write_enum_name(& entity->enum_value.enum_type->enumt); fprintf(out, ".%s.val", entity->base.symbol->string); break; } - EXPR_UNARY_CASES + case EXPR_UNARY_CASES: write_unary_expression(&expression->unary); break; - EXPR_BINARY_CASES + case EXPR_BINARY_CASES: write_binary_expression(&expression->binary); break; default: @@ -526,8 +517,7 @@ void write_jna_decls(FILE *output, const translation_unit_t *unit) } #if 0 - if(type->kind == TYPE_COMPOUND_STRUCT - || type->kind == TYPE_COMPOUND_UNION) { + if (is_type_compound(type)) { write_compound(entity->base.symbol, &type->compound); } #endif @@ -541,11 +531,13 @@ void write_jna_decls(FILE *output, const translation_unit_t *unit) const char *input_name = entity->base.source_position.input_name; if (is_system_header(input_name)) continue; + if (entity->function.elf_visibility != ELF_VISIBILITY_DEFAULT) + continue; if (output_limits != NULL) { bool in_limits = false; for (output_limit *limit = output_limits; limit != NULL; limit = limit->next) { - if (strcmp(limit->filename, input_name) == 0) { + if (streq(limit->filename, input_name)) { in_limits = true; break; }