}
case '-': {
- consume_token(parser);
+ OnyxToken* negate_token = expect_token(parser, '-');
AstTyped* factor = parse_factor(parser);
AstUnaryOp* negate_node = make_node(AstUnaryOp, Ast_Kind_Unary_Op);
negate_node->operation = Unary_Op_Negate;
negate_node->expr = factor;
+ negate_node->token = negate_token;
retval = (AstTyped *) negate_node;
break;
static void symres_struct_literal(AstStructLiteral* sl) {
if (sl->stnode != NULL) symres_expression(&sl->stnode);
- if (sl->stnode == NULL) return;
+ if (sl->stnode == NULL || sl->stnode->kind == Ast_Kind_Error) return;
sl->type_node = (AstType *) sl->stnode;
sl->type = type_build_from_ast(semstate.allocator, sl->type_node);
assert(type->kind == Type_Kind_Struct);
if (type->Struct.mem_count == 1) {
- compile_load_instruction(mod, &code, type->Struct.memarr[0]->type, 0);
+ compile_load_instruction(mod, &code, type->Struct.memarr[0]->type, offset);
*pcode = code;
return;
}