From b87de9141b7c087f72fa5f9ff7319834481cf1cf Mon Sep 17 00:00:00 2001 From: Joseph Cloutier Date: Sun, 28 Jan 2024 18:03:46 -0500 Subject: [PATCH] Convert `lime.tools.Architecture` to `enum abstract`. This improves compatibility with `hxp.HostArchitecture` and provides a more user-friendly API than `try { Type.createEnum() }`. --- src/lime/tools/Architecture.hx | 69 +++++++++++++++++++++++++----- src/lime/tools/ProjectXMLParser.hx | 12 +++--- tools/CommandLineTools.hx | 13 ++---- 3 files changed, 69 insertions(+), 25 deletions(-) diff --git a/src/lime/tools/Architecture.hx b/src/lime/tools/Architecture.hx index 1fa98c6002..4fd2b1234e 100644 --- a/src/lime/tools/Architecture.hx +++ b/src/lime/tools/Architecture.hx @@ -1,14 +1,63 @@ package lime.tools; -enum Architecture +import hxp.HostArchitecture; + +#if (haxe_ver >= 4.0) enum #else @:enum #end abstract Architecture(String) to String { - ARMV5; - ARMV6; - ARMV7; - ARMV7S; - ARM64; - X86; - X64; - MIPS; - MIPSEL; + var ARMV5 = "ARMV5"; + var ARMV6 = "ARMV6"; + var ARMV7 = "ARMV7"; + var ARMV7S = "ARMV7S"; + var ARM64 = "ARM64"; + var X86 = "X86"; + var X64 = "X64"; + var MIPS = "MIPS"; + var MIPSEL = "MIPSEL"; + + public static function exists(architecture:String):Bool + { + switch (architecture) + { + case ARMV5, ARMV6, ARMV7, ARMV7S, ARM64, X86, X64, MIPS, MIPSEL: + return true; + default: + return false; + } + } + + @:from private static function fromHostArchitecture(hostArchitecture:HostArchitecture):Architecture + { + if (hostArchitecture == HostArchitecture.ARMV6) + { + return ARMV6; + } + else if (hostArchitecture == HostArchitecture.ARMV7) + { + return ARMV7; + } + else if (hostArchitecture == HostArchitecture.ARM64) + { + return ARM64; + } + else if (hostArchitecture == HostArchitecture.X86) + { + return X86; + } + else /* if (hostArchitecture == HostArchitecture.X64) */ + { + return X64; + } + } + + @:from private static function fromString(string:String):Architecture + { + if (exists(string)) + { + return cast string; + } + else + { + return null; + } + } } diff --git a/src/lime/tools/ProjectXMLParser.hx b/src/lime/tools/ProjectXMLParser.hx index 6f6bc7dc18..40180b3703 100644 --- a/src/lime/tools/ProjectXMLParser.hx +++ b/src/lime/tools/ProjectXMLParser.hx @@ -1330,21 +1330,21 @@ class ProjectXMLParser extends HXProject case "architecture": if (element.has.name) { - var name = substitute(element.att.name); + var name:Architecture = substitute(element.att.name).toUpperCase(); - if (Reflect.hasField(Architecture, name.toUpperCase())) + if (name != null) { - ArrayTools.addUnique(architectures, Reflect.field(Architecture, name.toUpperCase())); + ArrayTools.addUnique(architectures, name); } } if (element.has.exclude) { - var exclude = substitute(element.att.exclude); + var exclude:Architecture = substitute(element.att.exclude).toUpperCase(); - if (Reflect.hasField(Architecture, exclude.toUpperCase())) + if (exclude != null) { - ArrayTools.addUnique(excludeArchitectures, Reflect.field(Architecture, exclude.toUpperCase())); + ArrayTools.addUnique(excludeArchitectures, exclude); } } diff --git a/tools/CommandLineTools.hx b/tools/CommandLineTools.hx index d6248e174e..3101868d78 100644 --- a/tools/CommandLineTools.hx +++ b/tools/CommandLineTools.hx @@ -2221,17 +2221,12 @@ class CommandLineTools { if (argument.substr(0, 4) == "-arm") { - try - { - var name = argument.substr(1).toUpperCase(); - var value = Type.createEnum(Architecture, name); + var value:Architecture = argument.substr(1).toUpperCase(); - if (value != null) - { - overrides.architectures.push(value); - } + if (value != null) + { + overrides.architectures.push(value); } - catch (e:Dynamic) {} } else if (argument == "-64") {