From b677355c0fd8b71bd4586b2f7548d6b8ed68615b Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Fri, 18 Jan 2019 17:48:12 +0100 Subject: [PATCH] Convert ValueTypeParser to an Iterator --- .../jwebassembly/module/ModuleGenerator.java | 5 +++-- .../jwebassembly/module/WasmCallInstruction.java | 9 +++++---- .../jwebassembly/wasm/ValueTypeParser.java | 16 +++++++++++++--- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java b/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java index ceb1626..16b17fa 100644 --- a/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java +++ b/src/de/inetsoftware/jwebassembly/module/ModuleGenerator.java @@ -20,6 +20,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.function.Consumer; @@ -354,10 +355,10 @@ public class ModuleGenerator { if( !isStatic ) { writer.writeMethodParam( "param", ValueType.anyref, "this" ); } - ValueTypeParser parser = new ValueTypeParser( signature ); + Iterator parser = new ValueTypeParser( signature ); AnyType type; for( String kind : new String[] {"param","result"}) { - while( (type = parser.next()) != null ) { + while( parser.hasNext() && (type = parser.next()) != null ) { String paramName = null; if( kind == "param" ) { if( variables != null ) { diff --git a/src/de/inetsoftware/jwebassembly/module/WasmCallInstruction.java b/src/de/inetsoftware/jwebassembly/module/WasmCallInstruction.java index 0781c12..68d0db4 100644 --- a/src/de/inetsoftware/jwebassembly/module/WasmCallInstruction.java +++ b/src/de/inetsoftware/jwebassembly/module/WasmCallInstruction.java @@ -17,10 +17,12 @@ package de.inetsoftware.jwebassembly.module; import java.io.IOException; +import java.util.Iterator; import javax.annotation.Nonnull; import de.inetsoftware.classparser.Member; +import de.inetsoftware.jwebassembly.wasm.AnyType; import de.inetsoftware.jwebassembly.wasm.ValueType; import de.inetsoftware.jwebassembly.wasm.ValueTypeParser; @@ -103,15 +105,14 @@ class WasmCallInstruction extends WasmInstruction { if( paramCount >= 0 ) { return; } - ValueTypeParser parser = new ValueTypeParser( method.getType() ); + Iterator parser = new ValueTypeParser( method.getType() ); paramCount = 0; while( parser.next() != null ) { paramCount++; } valueType = (ValueType)parser.next(); - ValueType type; - while( (type = (ValueType)parser.next()) != null ) { - valueType = type; + while( parser.hasNext() ) { + valueType = (ValueType)parser.next(); paramCount--; } } diff --git a/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java b/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java index 178b4dd..e32c1d0 100644 --- a/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java +++ b/src/de/inetsoftware/jwebassembly/wasm/ValueTypeParser.java @@ -15,6 +15,9 @@ */ package de.inetsoftware.jwebassembly.wasm; +import java.util.Iterator; +import java.util.NoSuchElementException; + import de.inetsoftware.jwebassembly.WasmException; import de.inetsoftware.jwebassembly.module.TypeManager; @@ -23,7 +26,7 @@ import de.inetsoftware.jwebassembly.module.TypeManager; * * @author Volker Berlin */ -public class ValueTypeParser { +public class ValueTypeParser implements Iterator { private final String sig; private int idx; @@ -56,14 +59,21 @@ public class ValueTypeParser { } } + /** + * {@inheritDoc} + */ + public boolean hasNext() { + return idx < sig.length(); + } + /** * Get the next value in the signature or null if the parameter are end or the signature is end. * * @return next type or null */ public AnyType next() { - if( idx >= sig.length() ) { - return null; + if( !hasNext() ) { + throw new NoSuchElementException(); } switch( sig.charAt( idx++ ) ) { case ')':