From 7fec608417d47be97704ac605f9f125060679801 Mon Sep 17 00:00:00 2001 From: "Wolfgang (Blub) Bumiller" Date: Fri, 24 Aug 2012 18:08:28 +0200 Subject: [PATCH] better labelling in ast_function_labeling, this time the number is even printed forward rather than backward... ;) --- ast.c | 39 +++++++++++---------------------------- 1 file changed, 11 insertions(+), 28 deletions(-) diff --git a/ast.c b/ast.c index 0faaca1..c039679 100644 --- a/ast.c +++ b/ast.c @@ -718,37 +718,20 @@ void ast_function_delete(ast_function *self) mem_d(self); } -static void ast_util_hexitoa(char *buf, size_t size, unsigned int num) -{ - unsigned int base = 10; -#define checknul() do { if (size == 1) { *buf = 0; return; } } while (0) -#define addch(x) do { *buf++ = (x); --size; checknul(); } while (0) - if (size < 1) - return; - checknul(); - if (!num) - addch('0'); - else { - while (num) - { - int digit = num % base; - num /= base; - addch('0' + digit); - } - } - - *buf = 0; -#undef addch -#undef checknul -} - const char* ast_function_label(ast_function *self, const char *prefix) { - size_t id = (self->labelcount++); + size_t id = (self->labelcount++); size_t len = strlen(prefix); - strncpy(self->labelbuf, prefix, sizeof(self->labelbuf)); - ast_util_hexitoa(self->labelbuf + len, sizeof(self->labelbuf)-len, id); - return self->labelbuf; + + char *from = self->labelbuf + sizeof(self->labelbuf)-1; + *from-- = 0; + do { + unsigned int digit = id % 10; + *from = digit + '0'; + id /= 10; + } while (id); + memcpy(from - len, prefix, len); + return from - len; } /*********************************************************************/