mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Move some types to runtime, use reflection instead of lut
This commit is contained in:
@@ -546,10 +546,23 @@ Odin_OS_Type :: type_of(ODIN_OS)
|
|||||||
arm64,
|
arm64,
|
||||||
wasm32,
|
wasm32,
|
||||||
wasm64p32,
|
wasm64p32,
|
||||||
|
riscv64,
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
Odin_Arch_Type :: type_of(ODIN_ARCH)
|
Odin_Arch_Type :: type_of(ODIN_ARCH)
|
||||||
|
|
||||||
|
Odin_Arch_Types :: bit_set[Odin_Arch_Type]
|
||||||
|
|
||||||
|
ALL_ODIN_ARCH_TYPES :: Odin_Arch_Types{
|
||||||
|
.amd64,
|
||||||
|
.i386,
|
||||||
|
.arm32,
|
||||||
|
.arm64,
|
||||||
|
.wasm32,
|
||||||
|
.wasm64p32,
|
||||||
|
.riscv64,
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Defined internally by the compiler
|
// Defined internally by the compiler
|
||||||
Odin_Build_Mode_Type :: enum int {
|
Odin_Build_Mode_Type :: enum int {
|
||||||
@@ -573,6 +586,22 @@ Odin_Build_Mode_Type :: type_of(ODIN_BUILD_MODE)
|
|||||||
*/
|
*/
|
||||||
Odin_Endian_Type :: type_of(ODIN_ENDIAN)
|
Odin_Endian_Type :: type_of(ODIN_ENDIAN)
|
||||||
|
|
||||||
|
Odin_OS_Types :: bit_set[Odin_OS_Type]
|
||||||
|
|
||||||
|
ALL_ODIN_OS_TYPES :: Odin_OS_Types{
|
||||||
|
.Windows,
|
||||||
|
.Darwin,
|
||||||
|
.Linux,
|
||||||
|
.Essence,
|
||||||
|
.FreeBSD,
|
||||||
|
.OpenBSD,
|
||||||
|
.NetBSD,
|
||||||
|
.Haiku,
|
||||||
|
.WASI,
|
||||||
|
.JS,
|
||||||
|
.Orca,
|
||||||
|
.Freestanding,
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Defined internally by the compiler
|
// Defined internally by the compiler
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package odin_parser
|
|||||||
|
|
||||||
import "base:runtime"
|
import "base:runtime"
|
||||||
import "core:strings"
|
import "core:strings"
|
||||||
|
import "core:reflect"
|
||||||
|
|
||||||
import "../ast"
|
import "../ast"
|
||||||
|
|
||||||
@@ -11,15 +12,9 @@ Private_Flag :: enum {
|
|||||||
File,
|
File,
|
||||||
}
|
}
|
||||||
|
|
||||||
Odin_OS_Type :: runtime.Odin_OS_Type
|
|
||||||
Odin_Arch_Type :: runtime.Odin_Arch_Type
|
|
||||||
|
|
||||||
Odin_OS_Types :: bit_set[Odin_OS_Type]
|
|
||||||
Odin_Arch_Types :: bit_set[Odin_Arch_Type]
|
|
||||||
|
|
||||||
Build_Kind :: struct {
|
Build_Kind :: struct {
|
||||||
os: Odin_OS_Types,
|
os: runtime.Odin_OS_Types,
|
||||||
arch: Odin_Arch_Types,
|
arch: runtime.Odin_Arch_Types,
|
||||||
}
|
}
|
||||||
|
|
||||||
File_Tags :: struct {
|
File_Tags :: struct {
|
||||||
@@ -31,69 +26,22 @@ File_Tags :: struct {
|
|||||||
no_instrumentation: bool,
|
no_instrumentation: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
ALL_ODIN_OS_TYPES :: Odin_OS_Types{
|
|
||||||
.Windows,
|
|
||||||
.Darwin,
|
|
||||||
.Linux,
|
|
||||||
.Essence,
|
|
||||||
.FreeBSD,
|
|
||||||
.OpenBSD,
|
|
||||||
.NetBSD,
|
|
||||||
.Haiku,
|
|
||||||
.WASI,
|
|
||||||
.JS,
|
|
||||||
.Orca,
|
|
||||||
.Freestanding,
|
|
||||||
}
|
|
||||||
ALL_ODIN_ARCH_TYPES :: Odin_Arch_Types{
|
|
||||||
.amd64,
|
|
||||||
.i386,
|
|
||||||
.arm32,
|
|
||||||
.arm64,
|
|
||||||
.wasm32,
|
|
||||||
.wasm64p32,
|
|
||||||
}
|
|
||||||
|
|
||||||
ODIN_OS_NAMES :: [Odin_OS_Type]string{
|
|
||||||
.Unknown = "",
|
|
||||||
.Windows = "windows",
|
|
||||||
.Darwin = "darwin",
|
|
||||||
.Linux = "linux",
|
|
||||||
.Essence = "essence",
|
|
||||||
.FreeBSD = "freebsd",
|
|
||||||
.OpenBSD = "openbsd",
|
|
||||||
.NetBSD = "netbsd",
|
|
||||||
.Haiku = "haiku",
|
|
||||||
.WASI = "wasi",
|
|
||||||
.JS = "js",
|
|
||||||
.Orca = "orca",
|
|
||||||
.Freestanding = "freestanding",
|
|
||||||
}
|
|
||||||
|
|
||||||
ODIN_ARCH_NAMES :: [Odin_Arch_Type]string{
|
|
||||||
.Unknown = "",
|
|
||||||
.amd64 = "amd64",
|
|
||||||
.i386 = "i386",
|
|
||||||
.arm32 = "arm32",
|
|
||||||
.arm64 = "arm64",
|
|
||||||
.wasm32 = "wasm32",
|
|
||||||
.wasm64p32 = "wasm64p32",
|
|
||||||
}
|
|
||||||
|
|
||||||
@require_results
|
@require_results
|
||||||
get_build_os_from_string :: proc(str: string) -> Odin_OS_Type {
|
get_build_os_from_string :: proc(str: string) -> runtime.Odin_OS_Type {
|
||||||
for os_name, os in ODIN_OS_NAMES {
|
fields := reflect.enum_fields_zipped(runtime.Odin_OS_Type)
|
||||||
if strings.equal_fold(os_name, str) {
|
for os in fields {
|
||||||
return os
|
if strings.equal_fold(os.name, str) {
|
||||||
|
return runtime.Odin_OS_Type(os.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return .Unknown
|
return .Unknown
|
||||||
}
|
}
|
||||||
@require_results
|
@require_results
|
||||||
get_build_arch_from_string :: proc(str: string) -> Odin_Arch_Type {
|
get_build_arch_from_string :: proc(str: string) -> runtime.Odin_Arch_Type {
|
||||||
for arch_name, arch in ODIN_ARCH_NAMES {
|
fields := reflect.enum_fields_zipped(runtime.Odin_Arch_Type)
|
||||||
if strings.equal_fold(arch_name, str) {
|
for os in fields {
|
||||||
return arch
|
if strings.equal_fold(os.name, str) {
|
||||||
|
return runtime.Odin_Arch_Type(os.value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return .Unknown
|
return .Unknown
|
||||||
@@ -188,15 +136,15 @@ parse_file_tags :: proc(file: ast.File) -> (tags: File_Tags) {
|
|||||||
}
|
}
|
||||||
case "build":
|
case "build":
|
||||||
kinds_loop: for {
|
kinds_loop: for {
|
||||||
os_positive: Odin_OS_Types
|
os_positive: runtime.Odin_OS_Types
|
||||||
os_negative: Odin_OS_Types
|
os_negative: runtime.Odin_OS_Types
|
||||||
|
|
||||||
arch_positive: Odin_Arch_Types
|
arch_positive: runtime.Odin_Arch_Types
|
||||||
arch_negative: Odin_Arch_Types
|
arch_negative: runtime.Odin_Arch_Types
|
||||||
|
|
||||||
defer append(&build_kinds, Build_Kind{
|
defer append(&build_kinds, Build_Kind{
|
||||||
os = (os_positive == {} ? ALL_ODIN_OS_TYPES : os_positive) -os_negative,
|
os = (os_positive == {} ? runtime.ALL_ODIN_OS_TYPES : os_positive) -os_negative,
|
||||||
arch = (arch_positive == {} ? ALL_ODIN_ARCH_TYPES : arch_positive)-arch_negative,
|
arch = (arch_positive == {} ? runtime.ALL_ODIN_ARCH_TYPES : arch_positive)-arch_negative,
|
||||||
})
|
})
|
||||||
|
|
||||||
for {
|
for {
|
||||||
|
|||||||
@@ -33,14 +33,14 @@ package main
|
|||||||
`,
|
`,
|
||||||
tags = {
|
tags = {
|
||||||
build = {
|
build = {
|
||||||
{os = {.Linux}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.Linux}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = {.Darwin}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.Darwin}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = {.FreeBSD}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.FreeBSD}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = {.OpenBSD}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.OpenBSD}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = {.NetBSD}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.NetBSD}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = {.Haiku}, arch = parser.ALL_ODIN_ARCH_TYPES},
|
{os = {.Haiku}, arch = runtime.ALL_ODIN_ARCH_TYPES},
|
||||||
{os = parser.ALL_ODIN_OS_TYPES, arch = {.arm32}},
|
{os = runtime.ALL_ODIN_OS_TYPES, arch = {.arm32}},
|
||||||
{os = parser.ALL_ODIN_OS_TYPES, arch = {.arm64}},
|
{os = runtime.ALL_ODIN_OS_TYPES, arch = {.arm64}},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, {// [3]
|
}, {// [3]
|
||||||
|
|||||||
Reference in New Issue
Block a user