hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/sema.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sema.c')
-rw-r--r--src/sema.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/src/sema.c b/src/sema.c
index 01fe644..342fe44 100644
--- a/src/sema.c
+++ b/src/sema.c
@@ -180,14 +180,14 @@ static void ref_error(struct RefCheck* check, struct Token token, const char* fo
static bool is_arch_register(struct Token token)
{
static const char* names[] = {
- "rax", "eax", "ax", "al", "ah",
- "rbx", "ebx", "bx", "bl", "bh",
- "rcx", "ecx", "cx", "cl", "ch",
- "rdx", "edx", "dx", "dl", "dh",
- "rsi", "esi", "si", "sil",
- "rdi", "edi", "di", "dil",
- "rbp", "ebp", "bp", "bpl",
- "rsp", "esp", "sp", "spl",
+ "rax", "eax", "ax", "al", "ah",
+ "rbx", "ebx", "bx", "bl", "bh",
+ "rcx", "ecx", "cx", "cl", "ch",
+ "rdx", "edx", "dx", "dl", "dh",
+ "rsi", "esi", "si", "sil",
+ "rdi", "edi", "di", "dil",
+ "rbp", "ebp", "bp", "bpl",
+ "rsp", "esp", "sp", "spl",
"r8", "r8d", "r8w", "r8b",
"r9", "r9d", "r9w", "r9b",
"r10", "r10d", "r10w", "r10b",
@@ -411,8 +411,6 @@ static void check_target(struct RefCheck* check, struct Token target)
ref_error(check, target, "cannot assign to '%.*s': not a register", (int)target.length, target.start);
}
-// a stack size must be a compile-time constant: integer/char literals, other
-// constants, enum values, struct sizes/offsets, and arithmetic over them
static void check_stack_size(struct RefCheck* check, struct Expr* expr)
{
switch (expr->kind)
@@ -427,9 +425,9 @@ static void check_stack_size(struct RefCheck* check, struct Expr* expr)
case EXPR_MEMBER:
{
const struct Expr* object = expr->member.object;
- if (object->kind == EXPR_PRIMARY
- && (find_enum(check, object->primary.token) != NULL
- || find_struct(check, object->primary.token) != NULL))
+ if (object->kind == EXPR_PRIMARY &&
+ (find_enum(check, object->primary.token) != NULL ||
+ find_struct(check, object->primary.token) != NULL))
check_expr(check, expr);
else
ref_error(check, first_token(expr), "stack size must be a constant");
@@ -500,9 +498,7 @@ static void check_statement(struct RefCheck* check, struct Statement* statement)
case STATEMENT_SYSCALL:
break;
case STATEMENT_INSTRUCTION:
- // a raw instruction is an escape hatch; its operands may name asm
- // symbols or registers hdass does not model, so leave them to the
- // assembler rather than flagging them as undefined
+ // escape hatch
break;
case STATEMENT_SELECT:
check_target(check, statement->select.target);
@@ -533,7 +529,6 @@ static bool check_references(struct Source source, struct Program* program)
bool analyze_program(struct Source source, struct Program* program)
{
bool ok = true;
-
if (!check_duplicate_names(source, program))
ok = false;
if (!check_entry_point(source, program))
@@ -542,6 +537,5 @@ bool analyze_program(struct Source source, struct Program* program)
ok = false;
if (!check_references(source, program))
ok = false;
-
return ok;
}