projects
/
cparser
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rename source_position_t to position_t, rename members to pos
[cparser]
/
wrappergen
/
write_jna.c
diff --git
a/wrappergen/write_jna.c
b/wrappergen/write_jna.c
index
f73d8fd
..
0960578
100644
(file)
--- a/
wrappergen/write_jna.c
+++ b/
wrappergen/write_jna.c
@@
-32,7
+32,8
@@
#include "printer.h"
#include "adt/error.h"
#include "adt/xmalloc.h"
#include "printer.h"
#include "adt/error.h"
#include "adt/xmalloc.h"
-#include <libfirm/adt/pset_new.h>
+#include "adt/pset_new.h"
+#include "separator_t.h"
typedef struct output_limit {
const char *filename;
typedef struct output_limit {
const char *filename;
@@
-49,7
+50,7
@@
static bool is_system_header(const char *fname)
{
if (strstart(fname, "/usr/include"))
return true;
{
if (strstart(fname, "/usr/include"))
return true;
- if (fname == builtin_
source_
position.input_name)
+ if (fname == builtin_position.input_name)
return true;
return false;
}
return true;
return false;
}
@@
-226,7
+227,7
@@
static void write_type(type_t *type)
case TYPE_ERROR:
case TYPE_TYPEOF:
case TYPE_TYPEDEF:
case TYPE_ERROR:
case TYPE_TYPEOF:
case TYPE_TYPEDEF:
- panic("invalid type
found
");
+ panic("invalid type");
case TYPE_ARRAY:
case TYPE_REFERENCE:
case TYPE_FUNCTION:
case TYPE_ARRAY:
case TYPE_REFERENCE:
case TYPE_FUNCTION:
@@
-275,7
+276,7
@@
static void write_unary_expression(const unary_expression_t *expression)
write_expression(expression->value);
return;
default:
write_expression(expression->value);
return;
default:
- panic("unim
eplemented unary expression found
");
+ panic("unim
plemented unary expression
");
}
write_expression(expression->value);
}
}
write_expression(expression->value);
}
@@
-303,28
+304,32
@@
static void write_binary_expression(const binary_expression_t *expression)
fputs(")", out);
}
fputs(")", out);
}
+static void write_integer(const literal_expression_t *literal)
+{
+ for (const char *c = literal->value.begin; c != literal->suffix; ++c) {
+ fputc(*c, out);
+ }
+}
+
static void write_expression(const expression_t *expression)
{
/* TODO */
switch(expression->kind) {
case EXPR_LITERAL_INTEGER:
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);
+ write_integer(&expression->literal);
break;
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;
}
/* 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;
write_unary_expression(&expression->unary);
break;
- EXPR_BINARY_CASES
+ case EXPR_BINARY_CASES:
write_binary_expression(&expression->binary);
break;
default:
write_binary_expression(&expression->binary);
break;
default:
@@
-400,7
+405,7
@@
static void write_variable(const entity_t *entity)
static void write_function(const entity_t *entity)
{
static void write_function(const entity_t *entity)
{
- if (entity->function.
statement
!= NULL) {
+ if (entity->function.
body
!= NULL) {
fprintf(stderr, "Warning: can't convert function bodies (at %s)\n",
entity->base.symbol->string);
return;
fprintf(stderr, "Warning: can't convert function bodies (at %s)\n",
entity->base.symbol->string);
return;
@@
-416,16
+421,12
@@
static void write_function(const entity_t *entity)
write_type(return_type);
fprintf(out, " %s(", entity->base.symbol->string);
write_type(return_type);
fprintf(out, " %s(", entity->base.symbol->string);
- entity_t *parameter = entity->function.parameters.entities;
-
int first = 1
;
- int n = 0;
+ entity_t
*parameter = entity->function.parameters.entities;
+
separator_t sep = { "", ", " }
;
+ int
n = 0;
for ( ; parameter != NULL; parameter = parameter->base.next) {
assert(parameter->kind == ENTITY_PARAMETER);
for ( ; parameter != NULL; parameter = parameter->base.next) {
assert(parameter->kind == ENTITY_PARAMETER);
- if(!first) {
- fprintf(out, ", ");
- } else {
- first = 0;
- }
+ fputs(sep_next(&sep), out);
write_type(parameter->declaration.type);
if(parameter->base.symbol != NULL) {
fprintf(out, " %s", fix_builtin_names(parameter->base.symbol->string));
write_type(parameter->declaration.type);
if(parameter->base.symbol != NULL) {
fprintf(out, " %s", fix_builtin_names(parameter->base.symbol->string));
@@
-434,11
+435,7
@@
static void write_function(const entity_t *entity)
}
}
if(function_type->variadic) {
}
}
if(function_type->variadic) {
- if(!first) {
- fprintf(out, ", ");
- } else {
- first = 0;
- }
+ fputs(sep_next(&sep), out);
fputs("Object ... args", out);
}
fprintf(out, ");\n");
fputs("Object ... args", out);
}
fprintf(out, ");\n");
@@
-520,8
+517,7
@@
void write_jna_decls(FILE *output, const translation_unit_t *unit)
}
#if 0
}
#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
write_compound(entity->base.symbol, &type->compound);
}
#endif
@@
-532,7
+528,7
@@
void write_jna_decls(FILE *output, const translation_unit_t *unit)
for ( ; entity != NULL; entity = entity->base.next) {
if (entity->kind != ENTITY_FUNCTION)
continue;
for ( ; entity != NULL; entity = entity->base.next) {
if (entity->kind != ENTITY_FUNCTION)
continue;
- const char *input_name = entity->base.
source_position
.input_name;
+ const char *input_name = entity->base.
pos
.input_name;
if (is_system_header(input_name))
continue;
if (entity->function.elf_visibility != ELF_VISIBILITY_DEFAULT)
if (is_system_header(input_name))
continue;
if (entity->function.elf_visibility != ELF_VISIBILITY_DEFAULT)