#pragma once #include "report.h" #include typedef enum { IdentResolTy_None, IdentResolTy_Label, IdentResolTy_SubLabel, } IdentResolTy; typedef struct IdentResol IdentResol; struct IdentResol { char* ident; Loc loc; const IdentResol* parent; IdentResolTy ty; union { uint16_t ip; }; }; 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); const IdentResol* ident_resolver_resolve( const IdentResolver* resolver, const char* ident);