#include "type_t.h"
#include "entity_t.h"
#include "type.h"
+#include "printer.h"
#include "adt/error.h"
#include <libfirm/adt/pset_new.h>
static bool is_system_header(const char *fname)
{
- return strncmp(fname, "/usr/include", 12) == 0;
+ if (strncmp(fname, "/usr/include", 12) == 0)
+ return true;
+ if (fname == builtin_source_position.input_name)
+ return true;
+ return false;
}
static const char *fix_builtin_names(const char *name)
}
if (is_type_pointer(points_to)) {
/* hack... */
- fputs("Pointer[]", out);
+ fputs("java.nio.Buffer", out);
return;
}
fputs("Pointer", out);
static void write_expression(const expression_t *expression)
{
- const const_expression_t *constant;
/* TODO */
switch(expression->kind) {
- case EXPR_CONST:
- constant = &expression->conste;
- if(is_type_integer(expression->base.type)) {
- fprintf(out, "%lld", constant->v.int_value);
- } else {
- fprintf(out, "%Lf", constant->v.float_value);
- }
+ 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: {
/* UHOH... hacking */
const function_type_t *function_type
= (const function_type_t*) entity->declaration.type;
- fputc('\t', out);
+ fprintf(out, "\tpublic static native ");
type_t *return_type = skip_typeref(function_type->return_type);
write_type(return_type);
fprintf(out, " %s(", entity->base.symbol->string);
pset_new_init(&avoid_symbols);
- ast_set_output(out);
- type_set_output(out);
+ print_to_file(out);
fprintf(out, "/* WARNING: Automatically generated file */\n");
- fputs("import com.sun.jna.Library;\n", out);
+ fputs("import com.sun.jna.Native;\n", out);
fputs("import com.sun.jna.Pointer;\n", out);
fputs("\n\n", out);
/* TODO: where to get the name from? */
- fputs("public interface binding extends Library {\n", out);
+ fputs("public class binding {\n", out);
+ fputs("\tstatic { Native.register(\"firm\"); }\n", out);
/* read the avoid list */
FILE *avoid = fopen("avoid.config", "r");
if (avoid != NULL) {
while (!feof(avoid)) {
char buf[1024];
- fgets(buf, sizeof(buf), avoid);
+ char *res = fgets(buf, sizeof(buf), avoid);
+ if (res == NULL)
+ break;
+ if (buf[0] == 0)
+ continue;
+
size_t len = strlen(buf);
if (buf[len-1] == '\n')
buf[len-1] = 0;
- if (buf[0] == 0)
- continue;
char *str = malloc(len+1);
memcpy(str, buf, len+1);