#ifdef HAVE_STRING_H
#include <string.h>
#endif
+#ifdef HAVE_INTTYPES_H
+#include <inttypes.h>
+#endif
#include <stdlib.h>
#include <stdio.h>
#include "irmode_t.h"
#include "irnode_t.h"
#include "entity_t.h"
+#include "type_t.h"
#include "tv.h"
#include "irprintf.h"
+#include "obst.h"
#include "pset.h"
#include "iterator.h"
#include "bitset.h"
fputs(str, object);
}
+/**
+ * Init the obstack. i.e. do nothing.
+ */
+static void obst_init(void *object, size_t n)
+{
+}
+
+/**
+ * append a char to a obstack.
+ */
+static void obst_append_char(void *object, size_t n, char ch)
+{
+ struct obstack *obst = object;
+ obstack_1grow(obst, ch);
+}
+
+/**
+ * append a string to a obstack.
+ */
+static void obst_append_str(void *object, size_t n, const char *str)
+{
+ struct obstack *obst = object;
+ obstack_grow(obst, str, strlen(str));
+}
+
+
/**
* the file appender
*/
str_append_str
};
+/**
+ * the obstack appender.
+ */
+static const appender_t obst_appender = {
+ obst_init,
+ obst_append_char,
+ obst_append_str
+};
+
static void ir_common_vprintf(const appender_t *app, void *object,
size_t limit, const char *fmt, va_list args);
if(settings->width >= 0) {
int i;
size_t n = strlen(str);
- int lim = MIN(settings->width, limit);
- int to_print = MIN(lim, n);
+ int lim = MIN(settings->width, (int)limit);
+ int to_print = MIN(lim, (int)n);
int to_pad = to_print - lim;
if(!settings->left_just)
case len_long_long:
{
- long long arg = va_arg(args, long long);
+ int64_t arg = va_arg(args, int64_t);
snprintf(buf, sizeof(buf), fmt_str, arg);
}
break;
str = get_id_str(va_arg(args, ident *));
break;
+ case 't':
+ str = get_type_name(va_arg(args, type *));
+ break;
+
case 'e':
str = get_entity_name(va_arg(args, entity *));
break;
str = get_entity_ld_name(va_arg(args, entity *));
break;
- case 't':
+ case 'T':
tarval_snprintf(buf, sizeof(buf), va_arg(args, tarval *));
break;
ir_common_vprintf(&str_appender, buf, len, fmt, args);
va_end(args);
}
+
+/**
+ * Convencience for string dumping.
+ */
+void ir_obst_printf(struct obstack *obst, const char *fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ ir_common_vprintf(&obst_appender, obst, 0, fmt, args);
+ va_end(args);
+}
+
+void ir_vprintf(const char *fmt, va_list args)
+{
+ ir_common_vprintf(&file_appender, stdout, 0, fmt, args);
+}
+
+void ir_vfprintf(FILE *f, const char *fmt, va_list args)
+{
+ ir_common_vprintf(&file_appender, f, 0, fmt, args);
+}
+
+void ir_vsnprintf(char *buf, size_t len, const char *fmt, va_list args)
+{
+ ir_common_vprintf(&str_appender, buf, len, fmt, args);
+}
+
+void ir_obst_vprintf(struct obstack *obst, const char *fmt, va_list args)
+{
+ ir_common_vprintf(&obst_appender, obst, 0, fmt, args);
+}