static struct SYMBOL *abc_new(int type, char *text)
{
	struct SYMBOL *s;

	s = getarena(sizeof(struct SYMBOL));
	memset(s, 0, sizeof(struct SYMBOL));
	if (text) {
		s->text = getarena(strlen(text) + 1);
		strcpy(s->text, text);
	}
	if (!parse.last_sym) {
		parse.first_sym = s;
	} else {
		if ((s->abc_next = parse.last_sym->abc_next) != NULL)
			s->abc_next->abc_prev = s;
		parse.last_sym->abc_next = s;
		s->abc_prev = parse.last_sym;
	}
	last_sym = parse.last_sym = s;
	s->abc_type = type;
	s->state = parse.abc_state;
	s->fn = abc_fn;
	s->linenum = linenum;
	s->colnum = colnum;
	return s;
}
static struct SYMBOL *abc_new(int type, char *text)
{
	struct SYMBOL *s;

	s = getarena(sizeof(struct SYMBOL));
	memset(s, 0, sizeof(struct SYMBOL));
	if (text) {
		s->text = getarena(strlen(text) + 1);
		strcpy(s->text, text);
	}
	if (!parse.last_sym) {
		parse.first_sym = s;
	} else {
		if ((s->abc_next = parse.last_sym->abc_next) != NULL)
			s->abc_next->abc_prev = s;
		parse.last_sym->abc_next = s;
		s->abc_prev = parse.last_sym;
	}
	last_sym = parse.last_sym = s;
	s->abc_type = type;
	s->state = parse.abc_state;
	s->fn = abc_fn;
	s->linenum = linenum;
	s->colnum = colnum;
	return s;
}