diff --git a/src/de/inetsoftware/jwebassembly/module/JavaMethodWasmCodeBuilder.java b/src/de/inetsoftware/jwebassembly/module/JavaMethodWasmCodeBuilder.java index 3400fa9..5378d5d 100644 --- a/src/de/inetsoftware/jwebassembly/module/JavaMethodWasmCodeBuilder.java +++ b/src/de/inetsoftware/jwebassembly/module/JavaMethodWasmCodeBuilder.java @@ -50,6 +50,16 @@ class JavaMethodWasmCodeBuilder extends WasmCodeBuilder { private BranchManager branchManager; + /** + * Create an instance + * + * @param codeBuilder + * other code builder for shred references + */ + JavaMethodWasmCodeBuilder( @Nonnull WasmCodeBuilder codeBuilder ) { + super( codeBuilder ); + } + /** * {@inheritDoc} */ diff --git a/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java b/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java index b8874fb..1ec7092 100644 --- a/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java +++ b/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java @@ -91,8 +91,8 @@ public class ModuleGenerator { * libraries */ public ModuleGenerator( @Nonnull ModuleWriter writer, WasmTarget target, @Nonnull List libraries ) { - this.javaCodeBuilder = new JavaMethodWasmCodeBuilder(); this.watParser = new WatParser(); + this.javaCodeBuilder = new JavaMethodWasmCodeBuilder( watParser ); this.writer = writer; this.javaScript = new JavaScriptWriter( target ); this.classFileLoader = new ClassFileLoader( new URLClassLoader( libraries.toArray( new URL[libraries.size()] ) ) ); diff --git a/src/de/inetsoftware/jwebassembly/module/WasmCodeBuilder.java b/src/de/inetsoftware/jwebassembly/module/WasmCodeBuilder.java index d75e0c9..2d13aeb 100644 --- a/src/de/inetsoftware/jwebassembly/module/WasmCodeBuilder.java +++ b/src/de/inetsoftware/jwebassembly/module/WasmCodeBuilder.java @@ -57,9 +57,9 @@ import de.inetsoftware.jwebassembly.wasm.WasmBlockOperator; */ public abstract class WasmCodeBuilder { - private final LocaleVariableManager localVariables = new LocaleVariableManager(); + private final LocaleVariableManager localVariables; - private final List instructions = new ArrayList<>(); + private final List instructions; private TypeManager types; @@ -71,6 +71,25 @@ public abstract class WasmCodeBuilder { private ClassFileLoader classFileLoader; + /** + * Create a new instance of CodeBuilder + */ + protected WasmCodeBuilder() { + localVariables = new LocaleVariableManager(); + instructions = new ArrayList<>(); + } + + /** + * Create a new instance with shared resources + * + * @param codeBuilder + * other instance of CodeBuilder + */ + WasmCodeBuilder( @Nonnull WasmCodeBuilder codeBuilder ) { + localVariables = codeBuilder.localVariables; + instructions = codeBuilder.instructions; + } + /** * Initialize the code builder; *