From 0f0928f4a802f6237b55aa9258b314779e760526 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Mon, 15 Jul 2019 21:16:47 +0200 Subject: [PATCH] handle duplicate function names/overloaded methods --- .../jwebassembly/text/Function.java | 2 ++ .../jwebassembly/text/TextModuleWriter.java | 17 +++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) 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 " );