From 51a02b05dcecba9e7dee506c47f73e3eccd26b93 Mon Sep 17 00:00:00 2001 From: Folkert Date: Sat, 16 Apr 2022 20:36:25 +0200 Subject: [PATCH] don't cache builtins when the target is wasm (wasm declaration order is different from the cached version we make at compile time) --- compiler/load/src/lib.rs | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/load/src/lib.rs b/compiler/load/src/lib.rs index 065e263467..812f95edc9 100644 --- a/compiler/load/src/lib.rs +++ b/compiler/load/src/lib.rs @@ -173,14 +173,20 @@ fn deserialize_help(bytes: &[u8]) -> (Subs, Vec<(Symbol, Variable)>) { fn read_cached_subs() -> MutMap)> { let mut output = MutMap::default(); - output.insert(ModuleId::BOOL, deserialize_help(BOOL)); - output.insert(ModuleId::RESULT, deserialize_help(RESULT)); - output.insert(ModuleId::LIST, deserialize_help(LIST)); - output.insert(ModuleId::STR, deserialize_help(STR)); - output.insert(ModuleId::DICT, deserialize_help(DICT)); - output.insert(ModuleId::SET, deserialize_help(SET)); - output.insert(ModuleId::BOX, deserialize_help(BOX)); - output.insert(ModuleId::NUM, deserialize_help(NUM)); + // Wasm seems to re-order definitions between build time and runtime, but only in release mode. + // That is very strange, but we can solve it separately + if !cfg!(target_family = "wasm") { + output.insert(ModuleId::BOOL, deserialize_help(BOOL)); + output.insert(ModuleId::RESULT, deserialize_help(RESULT)); + output.insert(ModuleId::NUM, deserialize_help(NUM)); + + output.insert(ModuleId::LIST, deserialize_help(LIST)); + output.insert(ModuleId::STR, deserialize_help(STR)); + output.insert(ModuleId::DICT, deserialize_help(DICT)); + + output.insert(ModuleId::SET, deserialize_help(SET)); + output.insert(ModuleId::BOX, deserialize_help(BOX)); + } output }