add __setattr__

This commit is contained in:
William Bell
2025-09-17 22:56:44 +01:00
parent 042c278b8d
commit 50ff9fbefc
10 changed files with 96 additions and 34 deletions

View File

@@ -21,6 +21,7 @@ ParsedValueReturn parse_access(char *file, DArray *tokens, size_t *index,
if (first_token->type == TOKEN_DOT) {
ParsedAccess *parsedAccess = checked_malloc(sizeof(ParsedAccess));
parsedAccess->to_access = to_access;
parsedAccess->access = NULL;
parsedValue->type = AST_ACCESS;
parsedValue->data = parsedAccess;
ArErr err = error_if_finished(file, tokens, index);
@@ -30,6 +31,14 @@ ParsedValueReturn parse_access(char *file, DArray *tokens, size_t *index,
return (ParsedValueReturn){err, NULL};
}
Token *token = darray_get(tokens, *index);
if (token->type != TOKEN_IDENTIFIER) {
free_parsed(parsedValue);
free(parsedValue);
return (ParsedValueReturn){create_err(token->line, token->column,
token->length, file, "Syntax Error",
"expected identifier after dot"),
NULL};
}
parsedAccess->line = token->line;
parsedAccess->column = token->column;
parsedAccess->length = token->length;
@@ -50,7 +59,9 @@ void free_parse_access(void *ptr) {
ParsedAccess *parsedAccess = parsedValue->data;
free_parsed(parsedAccess->to_access);
free(parsedAccess->to_access);
free_parsed(parsedAccess->access);
free(parsedAccess->access);
if (parsedAccess->access) {
free_parsed(parsedAccess->access);
free(parsedAccess->access);
}
free(parsedAccess);
}

View File

@@ -47,6 +47,7 @@ ParsedValueReturn parse_assign(char *file, DArray *tokens,
ParsedAssign *assign = checked_malloc(sizeof(ParsedAssign));
assign->to = assign_to;
assign->type = token->type;
assign->from = NULL;
ParsedValue *parsedValue = checked_malloc(sizeof(ParsedValue));
parsedValue->type = AST_ASSIGN;
parsedValue->data = assign;