123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355 |
- // This is purely for documentation
- package builtin
- import "base:runtime"
- nil :: nil
- false :: 0!=0
- true :: 0==0
- // The following constants are added in `checker.cpp`'s `init_universal` procedure.
- /*
- An `enum` value indicating the target's CPU architecture.
- Possible values are: `.amd64`, `.i386`, `.arm32`, `.arm64`, `.wasm32`, `.wasm64p32`, and `.riscv64`.
- */
- ODIN_ARCH :: ODIN_ARCH
- /*
- A `string` indicating the target's CPU architecture.
- Possible values are: "amd64", "i386", "arm32", "arm64", "wasm32", "wasm64p32", "riscv64".
- */
- ODIN_ARCH_STRING :: ODIN_ARCH_STRING
- /*
- An `enum` value indicating the type of compiled output, chosen using `-build-mode`.
- Possible values are: `.Executable`, `.Dynamic`, `.Static`, `.Object`, `.Assembly`, and `.LLVM_IR`.
- */
- ODIN_BUILD_MODE :: ODIN_BUILD_MODE
- /*
- A `string` containing the name of the folder that contains the entry point,
- e.g. for `%ODIN_ROOT%/examples/demo`, this would contain `demo`.
- */
- ODIN_BUILD_PROJECT_NAME :: ODIN_BUILD_PROJECT_NAME
- /*
- An `i64` containing the time at which the executable was compiled, in nanoseconds.
- This is compatible with the `time.Time` type, i.e. `time.Time{_nsec=ODIN_COMPILE_TIMESTAMP}`
- */
- ODIN_COMPILE_TIMESTAMP :: ODIN_COMPILE_TIMESTAMP
- /*
- `true` if the `-debug` command line switch is passed, which enables debug info generation.
- */
- ODIN_DEBUG :: ODIN_DEBUG
- /*
- `true` if the `-default-to-nil-allocator` command line switch is passed,
- which sets the initial `context.allocator` to an allocator that does nothing.
- */
- ODIN_DEFAULT_TO_NIL_ALLOCATOR :: ODIN_DEFAULT_TO_NIL_ALLOCATOR
- /*
- `true` if the `-default-to-panic-allocator` command line switch is passed,
- which sets the initial `context.allocator` to an allocator that panics if allocated from.
- */
- ODIN_DEFAULT_TO_PANIC_ALLOCATOR :: ODIN_DEFAULT_TO_PANIC_ALLOCATOR
- /*
- `true` if the `-disable-assert` command line switch is passed,
- which removes all calls to `assert` from the program.
- */
- ODIN_DISABLE_ASSERT :: ODIN_DISABLE_ASSERT
- /*
- An `enum` value indicating the endianness of the target.
- Possible values are: `.Little` and `.Big`.
- */
- ODIN_ENDIAN :: ODIN_ENDIAN
- /*
- An `string` indicating the endianness of the target.
- Possible values are: "little" and "big".
- */
- ODIN_ENDIAN_STRING :: ODIN_ENDIAN_STRING
- /*
- An `enum` value set using the `-error-pos-style` switch, indicating the source location style used for compile errors and warnings.
- Possible values are: `.Default` (Odin-style) and `.Unix`.
- */
- ODIN_ERROR_POS_STYLE :: ODIN_ERROR_POS_STYLE
- /*
- `true` if the `-foreign-error-procedures` command line switch is passed,
- which inhibits generation of runtime error procedures, so that they can be in a separate compilation unit.
- */
- ODIN_FOREIGN_ERROR_PROCEDURES :: ODIN_FOREIGN_ERROR_PROCEDURES
- /*
- A `string` describing the microarchitecture used for code generation.
- If not set using the `-microarch` command line switch, the compiler will pick a default.
- Possible values include, but are not limited to: "sandybridge", "x86-64-v2".
- */
- ODIN_MICROARCH_STRING :: ODIN_MICROARCH_STRING
- /*
- An `int` value representing the minimum OS version given to the linker, calculated as `major * 10_000 + minor * 100 + revision`.
- If not set using the `-minimum-os-version` command line switch, it defaults to `0`, except on Darwin, where it's `11_00_00`.
- */
- ODIN_MINIMUM_OS_VERSION :: ODIN_MINIMUM_OS_VERSION
- /*
- `true` if the `-no-bounds-check` command line switch is passed, which disables bounds checking at runtime.
- */
- ODIN_NO_BOUNDS_CHECK :: ODIN_NO_BOUNDS_CHECK
- /*
- `true` if the `-no-crt` command line switch is passed, which inhibits linking with the C Runtime Library, a.k.a. LibC.
- */
- ODIN_NO_CRT :: ODIN_NO_CRT
- /*
- `true` if the `-no-entry-point` command line switch is passed, which makes the declaration of a `main` procedure optional.
- */
- ODIN_NO_ENTRY_POINT :: ODIN_NO_ENTRY_POINT
- /*
- `true` if the `-no-rtti` command line switch is passed, which inhibits generation of full Runtime Type Information.
- */
- ODIN_NO_RTTI :: ODIN_NO_RTTI
- /*
- `true` if the `-no-type-assert` command line switch is passed, which disables type assertion checking program wide.
- */
- ODIN_NO_TYPE_ASSERT :: ODIN_NO_TYPE_ASSERT
- /*
- An `enum` value indicating the optimization level selected using the `-o` command line switch.
- Possible values are: `.None`, `.Minimal`, `.Size`, `.Speed`, and `.Aggressive`.
- If `ODIN_OPTIMIZATION_MODE` is anything other than `.None` or `.Minimal`, the compiler will also perform a unity build,
- and `ODIN_USE_SEPARATE_MODULES` will be set to `false` as a result.
- */
- ODIN_OPTIMIZATION_MODE :: ODIN_OPTIMIZATION_MODE
- /*
- An `enum` value indicating what the target operating system is.
- */
- ODIN_OS :: ODIN_OS
- /*
- A `string` indicating what the target operating system is.
- */
- ODIN_OS_STRING :: ODIN_OS_STRING
- /*
- An `enum` value indicating the platform subtarget, chosen using the `-subtarget` switch.
- Possible values are: `.Default` `.iPhone`, .iPhoneSimulator, and `.Android`.
- */
- ODIN_PLATFORM_SUBTARGET :: ODIN_PLATFORM_SUBTARGET
- /*
- A `string` representing the path of the folder containing the Odin compiler,
- relative to which we expect to find the `base` and `core` package collections.
- */
- ODIN_ROOT :: ODIN_ROOT
- /*
- A `bit_set` indicating the sanitizer flags set using the `-sanitize` command line switch.
- Supported flags are `.Address`, `.Memory`, and `.Thread`.
- */
- ODIN_SANITIZER_FLAGS :: ODIN_SANITIZER_FLAGS
- /*
- `true` if the code is being compiled via an invocation of `odin test`.
- */
- ODIN_TEST :: ODIN_TEST
- /*
- `true` if built using the experimental Tilde backend.
- */
- ODIN_TILDE :: ODIN_TILDE
- /*
- `true` by default, meaning each each package is built into its own object file, and then linked together.
- `false` if the `-use-single-module` command line switch to force a unity build is provided.
- If `ODIN_OPTIMIZATION_MODE` is anything other than `.None` or `.Minimal`, the compiler will also perform a unity build,
- and this constant will also be set to `false`.
- */
- ODIN_USE_SEPARATE_MODULES :: ODIN_USE_SEPARATE_MODULES
- /*
- `true` if Valgrind integration is supported on the target.
- */
- ODIN_VALGRIND_SUPPORT :: ODIN_VALGRIND_SUPPORT
- /*
- A `string` which identifies the compiler being used. The official compiler sets this to `"odin"`.
- */
- ODIN_VENDOR :: ODIN_VENDOR
- /*
- A `string` containing the version of the Odin compiler, typically in the format `dev-YYYY-MM`.
- */
- ODIN_VERSION :: ODIN_VERSION
- /*
- A `string` containing the Git hash part of the Odin version.
- Empty if `.git` could not be detected at the time the compiler was built.
- */
- ODIN_VERSION_HASH :: ODIN_VERSION_HASH
- /*
- An `enum` set by the `-subsystem` flag, specifying which Windows subsystem the PE file was created for.
- Possible values are:
- `.Unknown` - Default and only value on non-Windows platforms
- `.Console` - Default on Windows
- `.Windows` - Can be used by graphical applications so Windows doesn't open an empty console
- There are some other possible values for e.g. EFI applications, but only Console and Windows are supported.
- See also: https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header64
- */
- ODIN_WINDOWS_SUBSYSTEM :: ODIN_WINDOWS_SUBSYSTEM
- /*
- An `string` set by the `-subsystem` flag, specifying which Windows subsystem the PE file was created for.
- Possible values are:
- "UNKNOWN" - Default and only value on non-Windows platforms
- "CONSOLE" - Default on Windows
- "WINDOWS" - Can be used by graphical applications so Windows doesn't open an empty console
- There are some other possible values for e.g. EFI applications, but only Console and Windows are supported.
- See also: https://learn.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header64
- */
- ODIN_WINDOWS_SUBSYSTEM_STRING :: ODIN_WINDOWS_SUBSYSTEM_STRING
- /*
- `true` if LLVM supports the f16 type.
- */
- __ODIN_LLVM_F16_SUPPORTED :: __ODIN_LLVM_F16_SUPPORTED
- 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
- quaternion64 :: quaternion64
- 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
- f16le :: f16le
- f32le :: f32le
- f64le :: f64le
- f16be :: f16be
- f32be :: f32be
- f64be :: f64be
- // 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 ---
- // e.g. offset_of(t.f), where t is an instance of the type T
- offset_of_selector :: proc(selector: $T) -> uintptr ---
- // e.g. offset_of(T, f), where T can be the type instead of a variable
- offset_of_member :: proc($T: typeid, member: $M) -> uintptr ---
- offset_of :: proc{offset_of_selector, offset_of_member}
- // e.g. offset_of(T, "f"), where T can be the type instead of a variable
- offset_of_by_string :: proc($T: typeid, member: string) -> 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(imag, jmag, kmag, real: Float) -> Quaternion_Type --- // fields must be named
- 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_values :: proc(value: Struct_Or_Array) -> (A, B, C, ...) ---
- compress_values :: proc(values: ...) -> Struct_Or_Array_Like_Type ---
- min :: proc(values: ..T) -> T ---
- max :: proc(values: ..T) -> T ---
- abs :: proc(value: T) -> T ---
- clamp :: proc(value, minimum, maximum: T) -> T ---
- soa_zip :: proc(slices: ...) -> #soa[]Struct ---
- soa_unzip :: proc(value: $S/#soa[]$E) -> (slices: ...) ---
- unreachable :: proc() -> ! ---
- // Where T is a string, slice, dynamic array, or pointer to an array type
- raw_data :: proc(t: $T) -> rawptr
|