Added conditional compilation and Const namespace with OS name
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user