res->base.kind = kind;
res->base.parent = current_parent;
- res->base.source_position = token.base.source_position;
+ res->base.source_position = *HERE;
return res;
}
res->base.kind = kind;
res->base.type = type_error_type;
- res->base.source_position = token.base.source_position;
+ res->base.source_position = *HERE;
return res;
}
next_token();
while (token.kind == T_STRING_LITERAL) {
- warn_string_concat(&token.base.source_position);
+ warn_string_concat(HERE);
result = concat_strings(&result, &token.string.string);
next_token();
}
switch (token.kind) {
case '[':
designator = allocate_ast_zero(sizeof(designator[0]));
- designator->source_position = token.base.source_position;
+ designator->source_position = *HERE;
next_token();
add_anchor_token(']');
designator->array_index = parse_constant_expression();
break;
case '.':
designator = allocate_ast_zero(sizeof(designator[0]));
- designator->source_position = token.base.source_position;
+ designator->source_position = *HERE;
next_token();
designator->symbol = expect_identifier("while parsing designator", NULL);
if (!designator->symbol)
} else if (token.kind == T_IDENTIFIER && look_ahead(1)->kind == ':') {
/* GNU-style designator ("identifier: value") */
designator = allocate_ast_zero(sizeof(designator[0]));
- designator->source_position = token.base.source_position;
+ designator->source_position = *HERE;
designator->symbol = token.base.symbol;
eat(T_IDENTIFIER);
eat(':');
bool saw_error = false;
memset(specifiers, 0, sizeof(*specifiers));
- specifiers->source_position = token.base.source_position;
+ specifiers->source_position = *HERE;
while (true) {
specifiers->attributes = parse_attributes(specifiers->attributes);
errorf(HERE, "no identifier expected in typename");
} else {
env->symbol = token.base.symbol;
- env->source_position = token.base.source_position;
+ env->source_position = *HERE;
}
next_token();
break;
*/
static expression_t *parse_string_literal(void)
{
- source_position_t begin = token.base.source_position;
+ source_position_t begin = *HERE;
string_t res = token.string.string;
bool is_wide = (token.kind == T_WIDE_STRING_LITERAL);
next_token();
while (token.kind == T_STRING_LITERAL
|| token.kind == T_WIDE_STRING_LITERAL) {
- warn_string_concat(&token.base.source_position);
+ warn_string_concat(HERE);
res = concat_strings(&res, &token.string.string);
next_token();
is_wide |= token.kind == T_WIDE_STRING_LITERAL;
}
}
if (*c != '\0') {
- errorf(&token.base.source_position,
- "invalid suffix '%S' on integer constant", suffix);
+ errorf(HERE, "invalid suffix '%S' on integer constant", suffix);
} else if (not_traditional) {
warn_traditional_suffix();
}
type = type_long_double;
}
if (*c != '\0') {
- errorf(&token.base.source_position,
- "invalid suffix '%S' on floatingpoint constant", suffix);
+ errorf(HERE, "invalid suffix '%S' on floatingpoint constant", suffix);
} else if (not_traditional) {
warn_traditional_suffix();
}
static expression_t *parse_reference(void)
{
- source_position_t const pos = token.base.source_position;
+ source_position_t const pos = *HERE;
entity_t *const entity = parse_qualified_identifier();
type_t *orig_type;
*/
static expression_t *parse_label_address(void)
{
- source_position_t source_position = token.base.source_position;
+ source_position_t const source_position = *HERE;
eat(T_ANDAND);
if (token.kind != T_IDENTIFIER) {
parse_error_expected("while parsing label address", T_IDENTIFIER, NULL);
&& entity->kind != ENTITY_NAMESPACE
&& entity->base.parent_scope == current_scope) {
if (is_entity_valid(entity)) {
- error_redefined_as_different_kind(&token.base.source_position,
- entity, ENTITY_NAMESPACE);
+ error_redefined_as_different_kind(HERE, entity, ENTITY_NAMESPACE);
}
entity = NULL;
}