From 44a303e5778fb8564964d53523634f34f8589489 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 1 Nov 2019 19:00:23 +0000 Subject: [PATCH] Add dummy packages purely for documentation of `builtin` and `intrinsics` --- core/builtin/builtin.odin | 105 ++++++++++++++++++++++++++ core/intrinsics/intrinsics.odin | 126 ++++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 core/builtin/builtin.odin create mode 100644 core/intrinsics/intrinsics.odin diff --git a/core/builtin/builtin.odin b/core/builtin/builtin.odin new file mode 100644 index 000000000..74ade0260 --- /dev/null +++ b/core/builtin/builtin.odin @@ -0,0 +1,105 @@ +// This is purely for documentation +package builtin + +nil :: nil; +false :: 0!==0; +true :: 0==0; + +ODIN_OS :: ODIN_OS; +ODIN_ARCH :: ODIN_ARCH; +ODIN_ENDIAN :: ODIN_ENDIAN; +ODIN_VENDOR :: ODIN_VENDOR; +ODIN_VERSION :: ODIN_VERSION; +ODIN_ROOT :: ODIN_ROOT; +ODIN_DEBUG :: ODIN_DEBUG; + +byte :: u8; // alias + +bool :: bool; +b8 :: b8; +b16 :: b16; +b32 :: b32; +b64 :: b64; + +i8 :: i8; +u8 :: u8; +i16 :: i16; +u16 :: u16; +i32 :: i32; +u32 :: u32; +i64 :: i64; +u64 :: u64; + +i128 :: i128; +u128 :: u128; + +rune :: rune; + +f16 :: f16; +f32 :: f32; +f64 :: f64; + +complex32 :: complex32; +complex64 :: complex64; +complex128 :: complex128; + +quaternion128 :: quaternion128; +quaternion256 :: quaternion256; + +int :: int; +uint :: uint; +uintptr :: uintptr; + +rawptr :: rawptr; +string :: string; +cstring :: cstring; +any :: any; + +typeid :: typeid; + +// Endian Specific Types +i16le :: i16le; +u16le :: u16le; +i32le :: i32le; +u32le :: u32le; +i64le :: i64le; +u64le :: u64le; +i128le :: i128le; +u128le :: u128le; + +i16be :: i16be; +u16be :: u16be; +i32be :: i32be; +u32be :: u32be; +i64be :: i64be; +u64be :: u64be; +i128be :: i128be; +u128be :: u128be; + +// Procedures +len :: proc(array: Array_Type) -> int --- +cap :: proc(array: Array_Type) -> int --- + +size_of :: proc($T: typeid) -> int --- +align_of :: proc($T: typeid) -> int --- +offset_of :: proc($T: typeid) -> uintptr --- +type_of :: proc(x: expr) -> type --- +type_info_of :: proc($T: typeid) -> ^runtime.Type_Info --- +typeid_of :: proc($T: typeid) -> typeid --- + +swizzle :: proc(x: [N]T, indices: ..int) -> [len(indices)]T --- + +complex :: proc(real, imag: Float) -> Complex_Type --- +quaternion :: proc(real, imag, jmag, kmag: Float) -> Quaternion_Type --- +real :: proc(value: Complex_Or_Quaternion) -> Float --- +imag :: proc(value: Complex_Or_Quaternion) -> Float --- +jmag :: proc(value: Quaternion) -> Float --- +kmag :: proc(value: Quaternion) -> Float --- +conj :: proc(value: Complex_Or_Quaternion) -> Complex_Or_Quaternion --- + +expand_to_tuple :: proc(value: Struct_Or_Array) -> (A, B, C, ...) --- + +min :: proc(values: ..T) -> T --- +max :: proc(values: ..T) -> T --- +abs :: proc(value: T) -> T --- +clamp :: proc(value, minimum, maximum: T) -> T --- diff --git a/core/intrinsics/intrinsics.odin b/core/intrinsics/intrinsics.odin new file mode 100644 index 000000000..8ee12554c --- /dev/null +++ b/core/intrinsics/intrinsics.odin @@ -0,0 +1,126 @@ +// This is purely for documentation +package intrinsics + + +vector :: proc() --- + +atomic_fence :: proc() --- +atomic_fence_acq :: proc() --- +atomic_fence_rel :: proc() --- +atomic_fence_acqrel :: proc() --- + +atomic_store :: proc(dst: ^$T, val: $T) --- +atomic_store_rel :: proc(dst: ^$T, val: $T) --- +atomic_store_relaxed :: proc(dst: ^$T, val: $T) --- +atomic_store_unordered :: proc(dst: ^$T, val: $T) --- + +atomic_load :: proc(dst: ^$T) -> T --- +atomic_load_acq :: proc(dst: ^$T) -> T --- +atomic_load_relaxed :: proc(dst: ^$T) -> T --- +atomic_load_unordered :: proc(dst: ^$T) -> T --- + +atomic_add :: proc(dst; ^$T, val: $T) -> T --- +atomic_add_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_add_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_add_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_add_relaxed :: proc(dst; ^$T, val: $T) -> T --- +atomic_sub :: proc(dst; ^$T, val: $T) -> T --- +atomic_sub_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_sub_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_sub_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_sub_relaxed :: proc(dst; ^$T, val: $T) -> T --- +atomic_and :: proc(dst; ^$T, val: $T) -> T --- +atomic_and_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_and_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_and_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_and_relaxed :: proc(dst; ^$T, val: $T) -> T --- +atomic_nand :: proc(dst; ^$T, val: $T) -> T --- +atomic_nand_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_nand_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_nand_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_nand_relaxed :: proc(dst; ^$T, val: $T) -> T --- +atomic_or :: proc(dst; ^$T, val: $T) -> T --- +atomic_or_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_or_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_or_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_or_relaxed :: proc(dst; ^$T, val: $T) -> T --- +atomic_xor :: proc(dst; ^$T, val: $T) -> T --- +atomic_xor_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_xor_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_xor_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_xor_relaxed :: proc(dst; ^$T, val: $T) -> T --- + +atomic_xchg :: proc(dst; ^$T, val: $T) -> T --- +atomic_xchg_acq :: proc(dst; ^$T, val: $T) -> T --- +atomic_xchg_rel :: proc(dst; ^$T, val: $T) -> T --- +atomic_xchg_acqrel :: proc(dst; ^$T, val: $T) -> T --- +atomic_xchg_relaxed :: proc(dst; ^$T, val: $T) -> T --- + +atomic_cxchg :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_acq :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_rel :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_acqrel :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_relaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_failacq :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_acq_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchg_acqrel_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- + +atomic_cxchgweak :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_acq :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_rel :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_acqrel :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_relaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_failacq :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_acq_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- +atomic_cxchgweak_acqrel_failrelaxed :: proc(dst: ^$T, old, new: T) -> (T, /*option*/bool) --- + + +// Constant type tests + +type_base_type :: proc($T: typeid) -> type --- +type_core_type :: proc($T: typeid) -> type --- +type_elem_type :: proc($T: typeid) -> type --- + +type_is_boolean :: proc($T: typeid) -> bool --- +type_is_integer :: proc($T: typeid) -> bool --- +type_is_rune :: proc($T: typeid) -> bool --- +type_is_float :: proc($T: typeid) -> bool --- +type_is_complex :: proc($T: typeid) -> bool --- +type_is_quaternion :: proc($T: typeid) -> bool --- +type_is_string :: proc($T: typeid) -> bool --- +type_is_typeid :: proc($T: typeid) -> bool --- +type_is_any :: proc($T: typeid) -> bool --- + +type_is_endian_little :: proc($T: typeid) -> bool --- +type_is_endian_big :: proc($T: typeid) -> bool --- +type_is_numeric :: proc($T: typeid) -> bool --- +type_is_ordered :: proc($T: typeid) -> bool --- +type_is_ordered_numeric :: proc($T: typeid) -> bool --- +type_is_indexable :: proc($T: typeid) -> bool --- +type_is_sliceable :: proc($T: typeid) -> bool --- +type_is_simple_compare :: proc($T: typeid) -> bool --- // easily compared using memcmp +type_is_dereferenceable :: proc($T: typeid) -> bool --- +type_is_valid_map_key :: proc($T: typeid) -> bool --- + +type_is_named :: proc($T: typeid) -> bool --- +type_is_pointer :: proc($T: typeid) -> bool --- +type_is_opaque :: proc($T: typeid) -> bool --- +type_is_array :: proc($T: typeid) -> bool --- +type_is_slice :: proc($T: typeid) -> bool --- +type_is_dynamic_array :: proc($T: typeid) -> bool --- +type_is_map :: proc($T: typeid) -> bool --- +type_is_struct :: proc($T: typeid) -> bool --- +type_is_union :: proc($T: typeid) -> bool --- +type_is_enum :: proc($T: typeid) -> bool --- +type_is_proc :: proc($T: typeid) -> bool --- +type_is_bit_field :: proc($T: typeid) -> bool --- +type_is_bit_field_value :: proc($T: typeid) -> bool --- +type_is_bit_set :: proc($T: typeid) -> bool --- +type_is_simd_vector :: proc($T: typeid) -> bool --- + +type_has_nil :: proc($T: typeid) -> bool --- + +type_proc_parameter_count :: proc($T: typeid) -> int where type_is_proc(T) --- +type_proc_return_count :: proc($T: typeid) -> int where type_is_proc(T) ---