vc3/asm/resolve.h
2025-04-02 20:46:35 +02:00

51 lines
1.2 KiB
C

#pragma once
#include "report.h"
#include <stdint.h>
typedef enum {
IdentResolTy_None,
IdentResolTy_Label,
IdentResolTy_SubLabel,
IdentResolTy_Const,
} IdentResolTy;
typedef struct IdentResol IdentResol;
struct IdentResol {
char* ident;
Loc loc;
const IdentResol* parent;
IdentResolTy ty;
union {
uint16_t ip;
struct {
uint16_t value;
char* src_filename;
};
};
};
void ident_resol_destroy(IdentResol* resol);
typedef struct IdentResolver IdentResolver;
struct IdentResolver {
IdentResol* resols;
size_t resols_capacity;
size_t resols_size;
const IdentResol* current_parent;
};
void ident_resolver_construct(IdentResolver* resolver);
void ident_resolver_destroy(IdentResolver* resolver);
void ident_resolver_define_label(
IdentResolver* resolver, char* ident, Loc loc, uint16_t asm_ip);
void ident_resolver_define_sublabel(
IdentResolver* resolver, char* ident, Loc loc, uint16_t asm_ip);
void ident_resolver_define_const(IdentResolver* resolver,
char* ident,
Loc loc,
uint16_t value,
char* src_filename);
const IdentResol* ident_resolver_resolve(
const IdentResolver* resolver, const char* ident);