diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-06-01 11:25:14 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-06-01 11:25:14 -0400 |
| commit | b4dc8587946d5300ae983c9c3cfc2d03f76ed746 (patch) | |
| tree | c5e159fc4fd65fb7f9b62b12379df48a7b2100c8 | |
| parent | 11efaa6f8f45aa4557a3a80dfc32f885ac455908 (diff) | |
Change how floats are serialized
| -rw-r--r-- | builtins/util.h | 2 | ||||
| -rw-r--r-- | compile.c | 5 |
2 files changed, 1 insertions, 6 deletions
diff --git a/builtins/util.h b/builtins/util.h index dc42d570..5b71fa2b 100644 --- a/builtins/util.h +++ b/builtins/util.h @@ -32,8 +32,6 @@ CORD CORD_asprintf(CORD fmt, ...); #define CORD_appendf(cord, fmt, ...) CORD_sprintf(cord, "%r" fmt, *(cord) __VA_OPT__(,) __VA_ARGS__) #define CORD_all(...) CORD_catn(sizeof((CORD[]){__VA_ARGS__})/sizeof(CORD), __VA_ARGS__) -#define asprintfa(...) ({ char *_buf = alloca(snprintf(0, 0, __VA_ARGS__)); sprintf(_buf, __VA_ARGS__); _buf; }) - #define REVERSE_LIST(list) do { \ __typeof(list) _prev = NULL; \ __typeof(list) _next = NULL; \ @@ -1025,10 +1025,7 @@ CORD compile(env_t *env, ast_t *ast) } case Int: return CORD_asprintf("I%ld(%ld)", Match(ast, Int)->bits, Match(ast, Int)->i); case Num: { - // HACK: since the cord library doesn't support the '%a' specifier, this workaround - // is necessary: - char *buf = asprintfa(Match(ast, Num)->bits == 64 ? "%a" : "%af", Match(ast, Num)->n); - return CORD_from_char_star(buf); + return CORD_asprintf(Match(ast, Num)->bits == 64 ? "%.9g" : "%.9gf", Match(ast, Num)->n); } case Length: { ast_t *expr = Match(ast, Length)->value; |
