mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Add intrinsics.is_package_imported(<string>)
This commit is contained in:
@@ -2,6 +2,9 @@
|
|||||||
//+ignore
|
//+ignore
|
||||||
package intrinsics
|
package intrinsics
|
||||||
|
|
||||||
|
// Package-Related
|
||||||
|
is_package_imported :: proc(package_name: string) -> bool ---
|
||||||
|
|
||||||
// Types
|
// Types
|
||||||
simd_vector :: proc($N: int, $T: typeid) -> type/#simd[N]T
|
simd_vector :: proc($N: int, $T: typeid) -> type/#simd[N]T
|
||||||
soa_struct :: proc($N: int, $T: typeid) -> type/#soa[N]T
|
soa_struct :: proc($N: int, $T: typeid) -> type/#soa[N]T
|
||||||
|
|||||||
@@ -1871,6 +1871,29 @@ bool check_builtin_procedure(CheckerContext *c, Operand *operand, Ast *call, i32
|
|||||||
operand->type = alloc_type_simd_vector(count, elem);
|
operand->type = alloc_type_simd_vector(count, elem);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case BuiltinProc_is_package_imported: {
|
||||||
|
bool value = false;
|
||||||
|
|
||||||
|
if (!is_type_string(operand->type) && (operand->mode != Addressing_Constant)) {
|
||||||
|
error(ce->args[0], "Expected a constant string for '%.*s'", LIT(builtin_name));
|
||||||
|
} else if (operand->value.kind == ExactValue_String) {
|
||||||
|
String pkg_name = operand->value.value_string;
|
||||||
|
// TODO(bill): probably should have this be a `StringMap` eventually
|
||||||
|
for_array(i, c->info->packages.entries) {
|
||||||
|
AstPackage *pkg = c->info->packages.entries[i].value;
|
||||||
|
if (pkg->name == pkg_name) {
|
||||||
|
value = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
operand->mode = Addressing_Constant;
|
||||||
|
operand->type = t_untyped_bool;
|
||||||
|
operand->value = exact_value_bool(value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case BuiltinProc_soa_struct: {
|
case BuiltinProc_soa_struct: {
|
||||||
Operand x = {};
|
Operand x = {};
|
||||||
|
|||||||
@@ -36,6 +36,8 @@ enum BuiltinProcId {
|
|||||||
BuiltinProc_DIRECTIVE, // NOTE(bill): This is used for specialized hash-prefixed procedures
|
BuiltinProc_DIRECTIVE, // NOTE(bill): This is used for specialized hash-prefixed procedures
|
||||||
|
|
||||||
// "Intrinsics"
|
// "Intrinsics"
|
||||||
|
BuiltinProc_is_package_imported,
|
||||||
|
|
||||||
BuiltinProc_simd_vector,
|
BuiltinProc_simd_vector,
|
||||||
BuiltinProc_soa_struct,
|
BuiltinProc_soa_struct,
|
||||||
|
|
||||||
@@ -230,7 +232,6 @@ BuiltinProc__type_simple_boolean_end,
|
|||||||
|
|
||||||
BuiltinProc__type_end,
|
BuiltinProc__type_end,
|
||||||
|
|
||||||
|
|
||||||
BuiltinProc_COUNT,
|
BuiltinProc_COUNT,
|
||||||
};
|
};
|
||||||
gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
||||||
@@ -270,6 +271,8 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
|||||||
|
|
||||||
|
|
||||||
// "Intrinsics"
|
// "Intrinsics"
|
||||||
|
{STR_LIT("is_package_imported"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
||||||
|
|
||||||
{STR_LIT("simd_vector"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics}, // Type
|
{STR_LIT("simd_vector"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics}, // Type
|
||||||
{STR_LIT("soa_struct"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics}, // Type
|
{STR_LIT("soa_struct"), 2, false, Expr_Expr, BuiltinProcPkg_intrinsics}, // Type
|
||||||
|
|
||||||
@@ -459,6 +462,6 @@ gb_global BuiltinProc builtin_procs[BuiltinProc_COUNT] = {
|
|||||||
|
|
||||||
{STR_LIT("type_equal_proc"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
{STR_LIT("type_equal_proc"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
||||||
{STR_LIT("type_hasher_proc"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
{STR_LIT("type_hasher_proc"), 1, false, Expr_Expr, BuiltinProcPkg_intrinsics},
|
||||||
|
|
||||||
{STR_LIT(""), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
{STR_LIT(""), 0, false, Expr_Stmt, BuiltinProcPkg_intrinsics},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user