move assign to return errors

This commit is contained in:
2025-07-09 05:09:12 +01:00
parent c4731597f3
commit 0cb55fc563

View File

@@ -18,20 +18,26 @@ ParsedValueReturn parse_assign(char *file, DArray *tokens,
ParsedCall *call = assign_to->data; ParsedCall *call = assign_to->data;
for (size_t i = 0; i < call->args.size; i++) { for (size_t i = 0; i < call->args.size; i++) {
if (((ParsedValue *)darray_get(&call->args, i))->type != AST_IDENTIFIER) { if (((ParsedValue *)darray_get(&call->args, i))->type != AST_IDENTIFIER) {
fprintf(stderr, free_parsed(assign_to);
"%s:%zu:%zu error: parameter names need to start with a letter " free(assign_to);
return (ParsedValueReturn){
create_err(
token->line, token->column, token->length, file, "Syntax Error",
"parameter names need to start with a letter "
"or _, " "or _, "
"only use letters, digits, or _, and can't be keywords.\n", "only use letters, digits, or _, and can't be keywords."),
file, token->line, token->column); NULL};
exit(EXIT_FAILURE);
} }
} }
break; break;
default: default:
fprintf(stderr, "%s:%zu:%zu error: can't assign to %s\n", file, token->line, free_parsed(assign_to);
token->column, ValueTypeNames[assign_to->type]); free(assign_to);
exit(EXIT_FAILURE); return (ParsedValueReturn){create_err(token->line, token->column,
token->length, file, "Syntax Error",
"can't assign to %s",
ValueTypeNames[assign_to->type]),
NULL};
} }
ParsedAssign *assign = checked_malloc(sizeof(ParsedAssign)); ParsedAssign *assign = checked_malloc(sizeof(ParsedAssign));
assign->to = assign_to; assign->to = assign_to;
@@ -50,9 +56,12 @@ ParsedValueReturn parse_assign(char *file, DArray *tokens,
} }
assign->from = from.value; assign->from = from.value;
if (!assign->from) { if (!assign->from) {
fprintf(stderr, "%s:%zu:%zu error: syntax error\n", file, token->line, free_parsed(parsedValue);
token->column); free(parsedValue);
exit(EXIT_FAILURE); return (ParsedValueReturn){create_err(token->line, token->column,
token->length, file, "Syntax Error",
"expected body"),
NULL};
} }
return (ParsedValueReturn){no_err, parsedValue}; return (ParsedValueReturn){no_err, parsedValue};
} }
@@ -62,7 +71,9 @@ void free_parse_assign(void *ptr) {
ParsedAssign *parsedAssign = parsedValue->data; ParsedAssign *parsedAssign = parsedValue->data;
free_parsed(parsedAssign->to); free_parsed(parsedAssign->to);
free(parsedAssign->to); free(parsedAssign->to);
free_parsed(parsedAssign->from); if (parsedAssign->from) {
free(parsedAssign->from); free_parsed(parsedAssign->from);
free(parsedAssign->from);
}
free(parsedAssign); free(parsedAssign);
} }