Added conditional compilation and Const namespace with OS name

This commit is contained in:
Krzosa Karol
2022-10-08 10:02:50 +02:00
parent ed98572547
commit 15e4ebd682
13 changed files with 201 additions and 129 deletions

View File

@@ -112,7 +112,7 @@ destroy_compiler(){
}
function void
insert_builtin_into_scope(Ast_Scope *p, String name, Ast_Type *type){
insert_builtin_type_into_scope(Ast_Scope *p, String name, Ast_Type *type){
Intern_String string = pctx->intern(name);
Ast_Decl *decl = ast_type(0, string, type);
type->type_id = pctx->type_ids++;
@@ -122,27 +122,6 @@ insert_builtin_into_scope(Ast_Scope *p, String name, Ast_Type *type){
add(pctx->perm, &pctx->all_types, type);
}
function void
insert_builtin_types_into_scope(Ast_Scope *p){
insert_builtin_into_scope(p, "S64"_s, type_s64);
insert_builtin_into_scope(p, "S32"_s, type_s32);
insert_builtin_into_scope(p, "S16"_s, type_s16);
insert_builtin_into_scope(p, "S8"_s, type_s8);
insert_builtin_into_scope(p, "int"_s, type_int);
insert_builtin_into_scope(p, "char"_s, type_char);
insert_builtin_into_scope(p, "U64"_s, type_u64);
insert_builtin_into_scope(p, "U32"_s, type_u32);
insert_builtin_into_scope(p, "U16"_s, type_u16);
insert_builtin_into_scope(p, "U8"_s, type_u8);
insert_builtin_into_scope(p, "F64"_s, type_f64);
insert_builtin_into_scope(p, "F32"_s, type_f32);
insert_builtin_into_scope(p, "void"_s , type_void);
insert_builtin_into_scope(p, "Bool"_s , type_bool);
insert_builtin_into_scope(p, "String"_s, type_string);
insert_builtin_into_scope(p, "Type"_s, type_type);
}
global F64 parsing_time_begin;
global F64 parsing_time_end;
function void
@@ -249,7 +228,48 @@ compile_file_to_string(String filename){
begin_compilation();
{
Ast_Module *module = add_module(0, pctx->intern("Language.core"_s));
insert_builtin_types_into_scope(module);
{
insert_builtin_type_into_scope(module, "S64"_s, type_s64);
insert_builtin_type_into_scope(module, "S32"_s, type_s32);
insert_builtin_type_into_scope(module, "S16"_s, type_s16);
insert_builtin_type_into_scope(module, "S8"_s, type_s8);
insert_builtin_type_into_scope(module, "int"_s, type_int);
insert_builtin_type_into_scope(module, "char"_s, type_char);
insert_builtin_type_into_scope(module, "U64"_s, type_u64);
insert_builtin_type_into_scope(module, "U32"_s, type_u32);
insert_builtin_type_into_scope(module, "U16"_s, type_u16);
insert_builtin_type_into_scope(module, "U8"_s, type_u8);
insert_builtin_type_into_scope(module, "F64"_s, type_f64);
insert_builtin_type_into_scope(module, "F32"_s, type_f32);
insert_builtin_type_into_scope(module, "void"_s , type_void);
insert_builtin_type_into_scope(module, "Bool"_s , type_bool);
insert_builtin_type_into_scope(module, "String"_s, type_string);
insert_builtin_type_into_scope(module, "Type"_s, type_type);
}
{
Ast_Scope *scope = ast_decl_scope(&null_token, pctx->perm, get(&module->all_loaded_files, 0));
Ast_Decl *decl = ast_namespace(&null_token, scope, pctx->intern("Const"_s));
decl->state = DECL_RESOLVED;
Value v1 = {};
v1.type = untyped_string;
v1.intern_val = pctx->intern(OS_NAME);
Ast_Decl *const_os1 = ast_const(&null_token, pctx->intern("OSName"_s), v1);
const_os1->state = DECL_RESOLVED;
insert_into_scope(scope, const_os1);
Value v2 = {};
v1.type = untyped_string;
v1.intern_val = pctx->intern(OS_NAME_LOWER);
Ast_Decl *const_os2 = ast_const(&null_token, pctx->intern("OSNameLower"_s), v2);
const_os2->state = DECL_RESOLVED;
insert_into_scope(scope, const_os2);
insert_into_scope(module, decl);
}
pctx->language_base_module = module;
parse_all_modules();
@@ -260,6 +280,8 @@ compile_file_to_string(String filename){
Ast_Decl *any_decl = search_for_single_decl(module, pctx->intern("Any"_s));
assert(any_decl->type == type_type);
type_any = any_decl->type_val;
}