mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-14 18:43:27 +01:00
fix AtomicReferenceFieldUpdater.compareAndSet
This commit is contained in:
parent
810e40aeb1
commit
ef2720537d
@ -502,13 +502,14 @@ class UnsafeManager {
|
||||
if( type.isRefType() ) {
|
||||
type = ValueType.ref;
|
||||
}
|
||||
int paramOffset = "java/util/concurrent/atomic/AtomicReferenceFieldUpdater".equals( name.className ) ? -1 : 0;
|
||||
return "local.get 1" // THIS
|
||||
+ " struct.get " + state.typeName + ' ' + state.fieldName //
|
||||
+ " local.get 3 " // expected
|
||||
+ type + ".eq" //
|
||||
+ " local.get " + (3 + paramOffset) // expected
|
||||
+ " " + type + ".eq" //
|
||||
+ " if" //
|
||||
+ " local.get 1" // THIS
|
||||
+ " local.get 4" // update
|
||||
+ " local.get " + (4 + paramOffset) // update
|
||||
+ " struct.set " + state.typeName + ' ' + state.fieldName //
|
||||
+ " i32.const 1" //
|
||||
+ " return" //
|
||||
|
@ -15,6 +15,8 @@
|
||||
*/
|
||||
package de.inetsoftware.jwebassembly.runtime;
|
||||
|
||||
import java.io.BufferedInputStream;
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
@ -55,6 +57,7 @@ public class UnsafeTest extends AbstractBaseTest {
|
||||
addParam( list, script, "compareAndSwapReference" );
|
||||
addParam( list, script, "getAndSetReference" );
|
||||
addParam( list, script, "lazySetReference" );
|
||||
addParam( list, script, "atomicReferenceFieldUpdater" );
|
||||
}
|
||||
rule.setTestParameters( list );
|
||||
|
||||
@ -168,5 +171,13 @@ public class UnsafeTest extends AbstractBaseTest {
|
||||
obj.lazySet( 42 );
|
||||
return obj.get();
|
||||
}
|
||||
|
||||
@Export
|
||||
static int atomicReferenceFieldUpdater() throws Throwable {
|
||||
ByteArrayInputStream input = new ByteArrayInputStream( new byte[0] );
|
||||
BufferedInputStream stream = new BufferedInputStream( input );
|
||||
stream.close();
|
||||
return 42;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user