add if statement and declaration
This commit is contained in:
@@ -19,7 +19,12 @@ ParsedValueReturn parse_access(char *file, DArray *tokens, size_t *index,
|
||||
free(to_access);
|
||||
darray_init(&parsedAccess->access, sizeof(ParsedValue));
|
||||
if (first_token->type == TOKEN_DOT) {
|
||||
error_if_finished(file, tokens, index);
|
||||
ArErr err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
Token *token = darray_get(tokens, *index);
|
||||
ParsedValueReturn parsedString = parse_string(token, false);
|
||||
if (parsedString.err.exists) {
|
||||
@@ -35,7 +40,12 @@ ParsedValueReturn parse_access(char *file, DArray *tokens, size_t *index,
|
||||
Token *token = first_token;
|
||||
while (true) {
|
||||
skip_newlines_and_indents(tokens, index);
|
||||
error_if_finished(file, tokens, index);
|
||||
ArErr err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
ParsedValueReturn parsedAccessValue =
|
||||
parse_token(file, tokens, index, true);
|
||||
if (parsedAccessValue.err.exists) {
|
||||
@@ -45,22 +55,30 @@ ParsedValueReturn parse_access(char *file, DArray *tokens, size_t *index,
|
||||
} else if (!parsedAccessValue.value) {
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){
|
||||
create_err(token->line, token->column, token->length, file,
|
||||
"Syntax Error", "expected value"),
|
||||
NULL};
|
||||
return (ParsedValueReturn){create_err(token->line, token->column,
|
||||
token->length, file,
|
||||
"Syntax Error", "expected value"),
|
||||
NULL};
|
||||
}
|
||||
darray_push(&parsedAccess->access, parsedAccessValue.value);
|
||||
free(parsedAccessValue.value);
|
||||
skip_newlines_and_indents(tokens, index);
|
||||
error_if_finished(file, tokens, index);
|
||||
err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
token = darray_get(tokens, *index);
|
||||
if (token->type == TOKEN_RBRACKET) {
|
||||
break;
|
||||
} else if (token->type != TOKEN_COLON) {
|
||||
fprintf(stderr, "%s:%zu:%zu error: syntax error\n", file, token->line,
|
||||
token->column);
|
||||
exit(EXIT_FAILURE);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){create_err(token->line, token->column,
|
||||
token->length, file,
|
||||
"Syntax Error", "expected colon"),
|
||||
NULL};
|
||||
}
|
||||
(*index)++;
|
||||
}
|
||||
|
||||
@@ -31,14 +31,12 @@ ParsedValueReturn parse_assign(char *file, DArray *tokens,
|
||||
}
|
||||
break;
|
||||
default:;
|
||||
ArErr err = create_err(token->line, token->column,
|
||||
token->length, file, "Syntax Error",
|
||||
"can't assign to %s",
|
||||
ValueTypeNames[assign_to->type]);
|
||||
ArErr err = create_err(token->line, token->column, token->length, file,
|
||||
"Syntax Error", "can't assign to %s",
|
||||
ValueTypeNames[assign_to->type]);
|
||||
free_parsed(assign_to);
|
||||
free(assign_to);
|
||||
return (ParsedValueReturn){err,
|
||||
NULL};
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
ParsedAssign *assign = checked_malloc(sizeof(ParsedAssign));
|
||||
assign->to = assign_to;
|
||||
@@ -47,7 +45,12 @@ ParsedValueReturn parse_assign(char *file, DArray *tokens,
|
||||
parsedValue->type = AST_ASSIGN;
|
||||
parsedValue->data = assign;
|
||||
(*index)++;
|
||||
error_if_finished(file, tokens, index);
|
||||
ArErr err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
token = darray_get(tokens, *index);
|
||||
ParsedValueReturn from = parse_token(file, tokens, index, true);
|
||||
if (from.err.exists) {
|
||||
|
||||
@@ -15,12 +15,26 @@ ParsedValueReturn parse_call(char *file, DArray *tokens, size_t *index,
|
||||
parsedValue->type = AST_CALL;
|
||||
darray_init(&call->args, sizeof(ParsedValue));
|
||||
(*index)++;
|
||||
error_if_finished(file, tokens, index);
|
||||
ArErr err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
Token *token = darray_get(tokens, *index);
|
||||
if (token->type != TOKEN_RPAREN) {
|
||||
while ((*index) < tokens->size) {
|
||||
skip_newlines_and_indents(tokens, index);
|
||||
error_if_finished(file, tokens, index);
|
||||
ArErr err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
ParsedValueReturn parsedArg = parse_token(file, tokens, index, true);
|
||||
if (parsedArg.err.exists) {
|
||||
free_parsed(to_call);
|
||||
@@ -41,19 +55,46 @@ ParsedValueReturn parse_call(char *file, DArray *tokens, size_t *index,
|
||||
}
|
||||
darray_push(&call->args, parsedArg.value);
|
||||
free(parsedArg.value);
|
||||
error_if_finished(file, tokens, index);
|
||||
err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
skip_newlines_and_indents(tokens, index);
|
||||
error_if_finished(file, tokens, index);
|
||||
err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
token = darray_get(tokens, *index);
|
||||
if (token->type == TOKEN_RPAREN) {
|
||||
break;
|
||||
} else if (token->type != TOKEN_COMMA) {
|
||||
fprintf(stderr, "%s:%zu:%zu error: expected comma\n", file, token->line,
|
||||
token->column);
|
||||
exit(EXIT_FAILURE);
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
|
||||
return (ParsedValueReturn){create_err(token->line, token->column,
|
||||
token->length, file,
|
||||
"Syntax Error", "expected comma"),
|
||||
NULL};
|
||||
}
|
||||
(*index)++;
|
||||
error_if_finished(file, tokens, index);
|
||||
err = error_if_finished(file, tokens, index);
|
||||
if (err.exists) {
|
||||
free_parsed(to_call);
|
||||
free(to_call);
|
||||
free_parsed(parsedValue);
|
||||
free(parsedValue);
|
||||
return (ParsedValueReturn){err, NULL};
|
||||
}
|
||||
}
|
||||
}
|
||||
(*index)++;
|
||||
|
||||
Reference in New Issue
Block a user