41 lines
991 B
C
41 lines
991 B
C
#pragma once
|
|
|
|
#include "report.h"
|
|
#include <stdint.h>
|
|
|
|
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);
|