#include <errno.h>
#include <string.h>
+#include "adt/strutil.h"
#include "write_jna.h"
#include "symbol_t.h"
#include "ast_t.h"
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;
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 */
case ATOMIC_TYPE_CHAR: return "byte";
case ATOMIC_TYPE_SCHAR: return "byte";
case ATOMIC_TYPE_UCHAR: return "byte";
- case ATOMIC_TYPE_SHORT: return "short";
+ case ATOMIC_TYPE_SHORT: return "short";
case ATOMIC_TYPE_USHORT: return "short";
case ATOMIC_TYPE_INT: return "int";
case ATOMIC_TYPE_UINT: return "int";
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:
case EXPR_UNARY_NOT:
fputc('!', out);
break;
- case EXPR_UNARY_CAST_IMPLICIT:
+ case EXPR_UNARY_CAST:
write_expression(expression->value);
return;
default:
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:
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;
}