From bb20f0dbc285f9645ebfc5e62d9444d522f0b6fa Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Mon, 27 Feb 2023 18:49:57 +0100 Subject: [PATCH] implements Unsafe.getObjectVolatile --- src/de/inetsoftware/jwebassembly/module/UnsafeManager.java | 5 +++++ src/de/inetsoftware/jwebassembly/watparser/WatParser.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/src/de/inetsoftware/jwebassembly/module/UnsafeManager.java b/src/de/inetsoftware/jwebassembly/module/UnsafeManager.java index 1d86522..ede5b7f 100644 --- a/src/de/inetsoftware/jwebassembly/module/UnsafeManager.java +++ b/src/de/inetsoftware/jwebassembly/module/UnsafeManager.java @@ -549,6 +549,11 @@ class UnsafeManager { return "local.get 1" // THIS + " local.get 3" // x + " struct.set " + state.typeName + ' ' + state.fieldName; + + case "getObjectVolatile": + return "local.get 1" // array + + " local.get 2" // the array index + + " array.get " + state.typeName; } throw new RuntimeException( name.signatureName ); diff --git a/src/de/inetsoftware/jwebassembly/watparser/WatParser.java b/src/de/inetsoftware/jwebassembly/watparser/WatParser.java index 57eaa1d..6a7d14e 100644 --- a/src/de/inetsoftware/jwebassembly/watparser/WatParser.java +++ b/src/de/inetsoftware/jwebassembly/watparser/WatParser.java @@ -337,6 +337,11 @@ public class WatParser extends WasmCodeBuilder { typeName = get( tokens, ++i ); addStructInstruction( StructOperator.NEW_WITH_RTT, typeName, null, javaCodePos, lineNumber ); break; + case "array.get": + typeName = get( tokens, ++i ); + type = ((ArrayType)getTypeManager().valueOf( typeName )).getArrayType(); + addArrayInstruction( ArrayOperator.GET, type, javaCodePos, lineNumber ); + break; default: throw new WasmException( "Unknown WASM token: " + tok, lineNumber ); }