diff --git a/src/de/inetsoftware/jwebassembly/text/Function.java b/src/de/inetsoftware/jwebassembly/text/Function.java index b88fc65..7e2b1cd 100644 --- a/src/de/inetsoftware/jwebassembly/text/Function.java +++ b/src/de/inetsoftware/jwebassembly/text/Function.java @@ -27,4 +27,6 @@ class Function { int typeId = -1; // -1 not init, use an invalid value to fail hard if it used without init final StringBuilder output = new StringBuilder(); + + String name; } diff --git a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java index 9641b9e..70250ca 100644 --- a/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java +++ b/src/de/inetsoftware/jwebassembly/text/TextModuleWriter.java @@ -22,6 +22,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -70,6 +71,8 @@ public class TextModuleWriter extends ModuleWriter { private Map functions = new LinkedHashMap<>(); + private final Set functionNames = new HashSet<>(); + private int inset; private boolean isImport; @@ -234,7 +237,17 @@ public class TextModuleWriter extends ModuleWriter { */ @Nonnull private String normalizeName( FunctionName name ) { - return normalizeName( name.fullName ); + Function function = getFunction( name ); + if( function.name == null ) { + String base; + String str = base = normalizeName( name.fullName ); + for( int i = 1; functionNames.contains( str ); i++ ) { + str = base + '.' + i; + } + functionNames.add( str ); + function.name = str; + } + return function.name; } /** @@ -417,7 +430,7 @@ public class TextModuleWriter extends ModuleWriter { */ @Override protected void writeGlobalAccess( boolean load, FunctionName name, AnyType type ) throws IOException { - String fullName = normalizeName( name ); + String fullName = normalizeName( name.fullName ); if( !globals.contains( fullName ) ) { // declare global variable if not already declared. output.append( "\n " );