diff --git a/.efrocachemap b/.efrocachemap index f72b248c..ebc2c63c 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -3932,24 +3932,24 @@ "assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/b5/85/f8b6d0558ddb87267f34254b1450", "assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e", "assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f", - "build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/45/dc/e839d976e8de4f76d3b54de5d797", - "build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/39/a5/b43c4782cc1b4029cc37f3fdbdad", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4a/a6/9b997730074eff9d6777710c501c", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/00/2c/2c9d82ff6c3962392f38f82ef306", - "build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/22/f6/ffbb34a757725377ff0ee50b7d54", - "build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/5d/7e/3569e77c80b0a38a3cc890961fd8", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/e6/ed/96b82e2fc1e13dc278f959339939", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/27/8b/f9685e24a250fc4621bd4a54f2fe", - "build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/ce/c9/91f4c6d5ae4c24e6b8a1abe101e7", - "build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a3/c5/90f0dce06938303187a1c0e553d1", - "build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/61/d3/57b9f6d3aa937e2b6946e8c04a95", - "build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/cb/d6/6c57d5c6c62ba62b689bcb0ec2d2", + "build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/cd/51/3d1c5e13f0cb6035a3d4a8106231", + "build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/05/b4/d527fcc8fe53c60a0bbc76083eef", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/92/d17f56c69c7aa80a47b55a44df8b", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/09/4f/73ac4884969f83fcc18c88d34675", + "build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a3/18/a7b638e474a248a08bfecf1b151a", + "build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/20/15/82b7b054396d70f3ef51d8bf525a", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/f3/e1/4545a85cc86be1b5049a8ac51102", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/1f/ab/40bffe1f994caf1e0b19d45f2784", + "build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/cc/f8/0c1587462b04588fba9f2f9b7f76", + "build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9b/9f/60617e5848ffae2742db7d1a288e", + "build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/a7/c0/b6e232e2192f2ea9e5b9b57e67c1", + "build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/0d/f0/5ef106a9d14b267b91f6e1c4bc2d", "build/prefab/lib/linux_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/c3/d7/627d518a92951cf7fe9fc0b9b3a0", "build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/de/49/2cfc34ac856737d903954db5571b", "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e8/9a/67cf9ece361ca2f5d338009bdbfc", "build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/86/de/7d9c9a2b7bba34c630130ed759c9", - "build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e9/a4/5810e89715c82ca695bc274fd10a", - "build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/4b/335f5a189ae793aff0f3da439804", - "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9a/87/5e76ab68086ea0c2a15b53da11c0", - "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/77/f2/35f10f6ad8349e3fe9817de342f0" + "build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1b/cc/995e13831e0a99cfe04b45a58e4e", + "build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3e/67/c6d0cd2428d94243e0f8954d0f71", + "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b2/bc/fc4d9ccae2fe3199375481a9a3d6", + "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/9e/33/70f3dd7b087627cc69520cc31402" } \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 122eaa0c..69fb7e19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +### 1.5.28 (20239) +- Simplified ba.enum_by_value() + ### 1.5.27 (20238) - Language functionality has been consolidated into a LanguageSubsystem object at ba.app.lang - ba.get_valid_languages() is now an attr: ba.app.lang.available_languages diff --git a/assets/src/ba_data/python/ba/_general.py b/assets/src/ba_data/python/ba/_general.py index 979b7f29..a0bdfeec 100644 --- a/assets/src/ba_data/python/ba/_general.py +++ b/assets/src/ba_data/python/ba/_general.py @@ -418,16 +418,19 @@ def enum_by_value(cls: Type[ET], value: Any) -> ET: that it works around an issue where a reference loop is created if an exception is thrown due to an invalid value. Since we disable the cyclic garbage collector for most of the time, such loops can lead - to our objects sticking around longer than we want. This workaround is - not perfect in that the destruction happens in the next cycle, but it is - better than never. + to our objects sticking around longer than we want. This issue has been submitted to Python as a bug so hopefully we can remove this eventually if it gets fixed: https://bugs.python.org/issue42248 """ + + # Note: we don't recreate *ALL* the functionality of the Enum constructor + # such as the _missing_ hook; but this should cover our basic needs. + value2member_map = getattr(cls, '_value2member_map_') + assert value2member_map is not None try: - return cls(value) - except Exception as exc: - # Blow away all stack frames in the exception which will break the - # cycle and allow it to be destroyed. - _ba.pushcall(_Call(_gut_exception, exc)) - raise + out = value2member_map[value] + assert isinstance(out, cls) + return out + except KeyError: + raise ValueError('%r is not a valid %s' % + (value, cls.__name__)) from None diff --git a/docs/ba_module.md b/docs/ba_module.md index 81872ed3..75b83f4a 100644 --- a/docs/ba_module.md +++ b/docs/ba_module.md @@ -1,5 +1,5 @@ -

last updated on 2020-11-06 for Ballistica version 1.5.27 build 20238

+

last updated on 2020-11-06 for Ballistica version 1.5.28 build 20239

This page documents the Python classes and functions in the 'ba' module, which are the ones most relevant to modding in Ballistica. If you come across something you feel should be included here or could be better explained, please let me know. Happy modding!


@@ -6591,9 +6591,7 @@ settings, exiting element counts, or other factors.

that it works around an issue where a reference loop is created if an exception is thrown due to an invalid value. Since we disable the cyclic garbage collector for most of the time, such loops can lead -to our objects sticking around longer than we want. This workaround is -not perfect in that the destruction happens in the next cycle, but it is -better than never. +to our objects sticking around longer than we want. This issue has been submitted to Python as a bug so hopefully we can remove this eventually if it gets fixed: https://bugs.python.org/issue42248

diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc index 4158665b..e6c7b029 100644 --- a/src/ballistica/ballistica.cc +++ b/src/ballistica/ballistica.cc @@ -21,8 +21,8 @@ namespace ballistica { // These are set automatically via script; don't change here. -const int kAppBuildNumber = 20239; -const char* kAppVersion = "1.5.27"; +const int kAppBuildNumber = 20240; +const char* kAppVersion = "1.5.28"; // Our standalone globals. // These are separated out for easy access.