From 8cd9d16a33a34af4bcd62375d8d892b2dc7fbe15 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Mon, 26 Aug 2019 20:10:49 +0200 Subject: [PATCH] fix parsing of i8 and i16 arrays --- .../jwebassembly/wasm/ValueTypeParser.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java b/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java index 9d727ed..3ab5baf 100644 --- a/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java +++ b/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java @@ -62,6 +62,17 @@ public class ValueTypeParser implements Iterator { * @return next type or null */ public AnyType next() { + return next( false ); + } + + /** + * Get the next value in the signature or null if the parameter are end or the signature is end. + * + * @param isArray + * true, if this is an element type of an array + * @return next type or null + */ + private AnyType next( boolean isArray ) { if( !hasNext() ) { throw new NoSuchElementException(); } @@ -69,7 +80,7 @@ public class ValueTypeParser implements Iterator { case ')': return null; case '[': // array - return types.arrayType( next() ); + return types.arrayType( next( true ) ); case 'L': int idx2 = sig.indexOf( ';', idx ); String name = sig.substring( idx, idx2 ); @@ -77,8 +88,10 @@ public class ValueTypeParser implements Iterator { return "java/lang/Object".equals( name ) ? ValueType.anyref : types.valueOf( name ); case 'Z': // boolean case 'B': // byte + return isArray ? ValueType.i8 : ValueType.i32; case 'C': // char case 'S': // short + return isArray ? ValueType.i16 : ValueType.i32; case 'I': // int return ValueType.i32; case 'D': // double