#ifndef L_LANG_H #define L_LANG_H #include #include #include // === 类型系统 === typedef enum { TYPE_I64, TYPE_F64, TYPE_BOOL, TYPE_STR, TYPE_VOID, TYPE_STRUCT, // 结构体类型 TYPE_UNKNOWN, // 尚未推断 TYPE_ERROR, // 类型错误 } TypeKind; static inline const char* type_name(TypeKind kind) { switch (kind) { case TYPE_I64: return "i64"; case TYPE_F64: return "f64"; case TYPE_BOOL: return "bool"; case TYPE_STR: return "str"; case TYPE_VOID: return "void"; case TYPE_STRUCT: return "struct"; default: return ""; } } // === 源码位置(替代分散的 line/col 参数)=== typedef struct { int line; int col; } SourceLoc; // 手动创建 SourceLoc static inline SourceLoc loc_at(int line, int col) { return (SourceLoc){ .line = line, .col = col }; } // === 向前声明 === typedef struct Token Token; typedef struct AstNode AstNode; typedef struct Scope Scope; typedef struct Arena Arena; // === 跨模块分配器接口(避免循环依赖,各模块通过 void* 使用 arena)=== void* arena_alloc_impl(void* alloc, size_t size); char* arena_strdup_impl(void* alloc, const char* src, size_t len); #endif