return identify_string(space, len);
}
-static void grow_symbol(utf32 const tc)
-{
- struct obstack *const o = &symbol_obstack;
- if (tc < 0x80U) {
- obstack_1grow(o, tc);
- } else if (tc < 0x800) {
- obstack_1grow(o, 0xC0 | (tc >> 6));
- obstack_1grow(o, 0x80 | (tc & 0x3F));
- } else if (tc < 0x10000) {
- obstack_1grow(o, 0xE0 | ( tc >> 12));
- obstack_1grow(o, 0x80 | ((tc >> 6) & 0x3F));
- obstack_1grow(o, 0x80 | ( tc & 0x3F));
- } else {
- obstack_1grow(o, 0xF0 | ( tc >> 18));
- obstack_1grow(o, 0x80 | ((tc >> 12) & 0x3F));
- obstack_1grow(o, 0x80 | ((tc >> 6) & 0x3F));
- obstack_1grow(o, 0x80 | ( tc & 0x3F));
- }
-}
-
/**
* Parse a string literal and set lexer_token.
*/
goto end_of_string;
default:
- grow_symbol(c);
+ obstack_grow_symbol(&symbol_obstack, c);
next_char();
break;
}
switch (c) {
case '\\': {
const utf32 tc = parse_escape_sequence();
- grow_symbol(tc);
+ obstack_grow_symbol(&symbol_obstack, tc);
break;
}
}
default:
- grow_symbol(c);
+ obstack_grow_symbol(&symbol_obstack, c);
next_char();
break;
}
}
default:
- grow_symbol(c);
+ obstack_grow_symbol(&symbol_obstack, c);
next_char();
break;
}
}
-static void grow_symbol(utf32 const tc)
-{
- struct obstack *const o = &symbol_obstack;
- if (tc < 0x80U) {
- obstack_1grow(o, tc);
- } else if (tc < 0x800) {
- obstack_1grow(o, 0xC0 | (tc >> 6));
- obstack_1grow(o, 0x80 | (tc & 0x3F));
- } else if (tc < 0x10000) {
- obstack_1grow(o, 0xE0 | ( tc >> 12));
- obstack_1grow(o, 0x80 | ((tc >> 6) & 0x3F));
- obstack_1grow(o, 0x80 | ( tc & 0x3F));
- } else {
- obstack_1grow(o, 0xF0 | ( tc >> 18));
- obstack_1grow(o, 0x80 | ((tc >> 12) & 0x3F));
- obstack_1grow(o, 0x80 | ((tc >> 6) & 0x3F));
- obstack_1grow(o, 0x80 | ( tc & 0x3F));
- }
-}
-
static const char *identify_string(char *string)
{
const char *result = strset_insert(&stringset, string);
goto end_of_string;
default:
- grow_symbol(input.c);
+ obstack_grow_symbol(&symbol_obstack, input.c);
next_char();
break;
}
switch (input.c) {
case '\\': {
const utf32 tc = parse_escape_sequence();
- grow_symbol(tc);
+ obstack_grow_symbol(&symbol_obstack, tc);
break;
}
return;
default:
- grow_symbol(input.c);
+ obstack_grow_symbol(&symbol_obstack, input.c);
next_char();
break;
}
#define UNICODE_H
#include <assert.h>
+#include "adt/obst.h"
typedef unsigned int utf32;
#define UTF32_PRINTF_FORMAT "%u"
return result;
}
+static inline void obstack_grow_symbol(struct obstack *obstack, utf32 const tc)
+{
+ if (tc < 0x80U) {
+ obstack_1grow(obstack, tc);
+ } else if (tc < 0x800) {
+ obstack_1grow(obstack, 0xC0 | (tc >> 6));
+ obstack_1grow(obstack, 0x80 | (tc & 0x3F));
+ } else if (tc < 0x10000) {
+ obstack_1grow(obstack, 0xE0 | ( tc >> 12));
+ obstack_1grow(obstack, 0x80 | ((tc >> 6) & 0x3F));
+ obstack_1grow(obstack, 0x80 | ( tc & 0x3F));
+ } else {
+ obstack_1grow(obstack, 0xF0 | ( tc >> 18));
+ obstack_1grow(obstack, 0x80 | ((tc >> 12) & 0x3F));
+ obstack_1grow(obstack, 0x80 | ((tc >> 6) & 0x3F));
+ obstack_1grow(obstack, 0x80 | ( tc & 0x3F));
+ }
+}
+
#endif