#pragma once #include "report.h" #include 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; uint16_t value; }; }; 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); const IdentResol* ident_resolver_resolve( const IdentResolver* resolver, const char* ident);