From 9692b3b98f29a024b00a63cd0fd83aead1be0cba Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Sun, 27 Oct 2019 19:37:55 +0100 Subject: [PATCH] Accept also new functions in the cache after prepare finish to simplify the handling with unknown functions. --- .../jwebassembly/module/FunctionManager.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/module/FunctionManager.java b/src/de/inetsoftware/jwebassembly/module/FunctionManager.java index e3d6c19..fb8fabe 100644 --- a/src/de/inetsoftware/jwebassembly/module/FunctionManager.java +++ b/src/de/inetsoftware/jwebassembly/module/FunctionManager.java @@ -15,7 +15,6 @@ */ package de.inetsoftware.jwebassembly.module; -import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; @@ -26,7 +25,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import de.inetsoftware.classparser.MethodInfo; -import de.inetsoftware.jwebassembly.JWebAssembly; +import de.inetsoftware.jwebassembly.WasmException; /** * Manage the required function/methods @@ -35,13 +34,15 @@ import de.inetsoftware.jwebassembly.JWebAssembly; */ public class FunctionManager { - private Map states = new LinkedHashMap<>(); + private final Map states = new LinkedHashMap<>(); + + private boolean isFinish; /** * Finish the prepare. Now no new function should be added. */ void prepareFinish() { - states = Collections.unmodifiableMap( states ); + isFinish = true; } /** @@ -118,6 +119,9 @@ public class FunctionManager { FunctionName markAsNeeded( FunctionName name, boolean isStatic ) { FunctionState state = getOrCreate( name ); if( state.state == State.None ) { + if( isFinish ) { + throw new WasmException( "Prepare was already finish: " + name.signatureName, -1 ); + } state.state = State.Needed; } state.isStatic = isStatic;