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