From 0b492047932f3bc8b2dae17ee5608cef6d00619a Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Thu, 14 Mar 2019 22:10:35 +0100 Subject: [PATCH] use declared local names for local.set/get --- .../jwebassembly/text/TextModuleWriter.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index b5a1af3..125f6e5 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -16,6 +16,7 @@ package de.inetsoftware.jwebassembly.text; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -49,6 +50,8 @@ public class TextModuleWriter extends ModuleWriter { private final boolean debugNames; + private final ArrayList methodParamNames = new ArrayList<>(); + private StringBuilder methodOutput = new StringBuilder(); private int inset; @@ -164,6 +167,7 @@ public class TextModuleWriter extends ModuleWriter { methodOutput.append( "(func $" ); methodOutput.append( name.fullName ); inset++; + methodParamNames.clear(); } /** @@ -172,8 +176,13 @@ public class TextModuleWriter extends ModuleWriter { @Override protected void writeMethodParam( String kind, AnyType valueType, @Nullable String name ) throws IOException { methodOutput.append( " (" ).append( kind ); - if( debugNames && name != null ) { - methodOutput.append( " $" ).append( name ); + if( debugNames ) { + if( name != null ) { + methodOutput.append( " $" ).append( name ); + } + if( kind != "result" ) { + methodParamNames.add( name ); + } } methodOutput.append( ' ' ).append( valueType.toString() ).append( ')' ); } @@ -214,7 +223,13 @@ public class TextModuleWriter extends ModuleWriter { @Override protected void writeLocal( VariableOperator op, int idx ) throws IOException { newline( methodOutput ); - methodOutput.append( "local." ).append( op ).append( ' ' ).append( Integer.toString( idx ) ); + methodOutput.append( "local." ).append( op ).append( ' ' ); + String name = idx < methodParamNames.size() ? methodParamNames.get( idx ) : null; + if( name == null ) { + methodOutput.append( Integer.toString( idx ) ); + } else { + methodOutput.append( '$' ).append( name ); + } } /**