summaryrefslogtreecommitdiff
path: root/test/pending/pos/t3636.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2010-07-12 09:08:09 +0000
committerPhilipp Haller <hallerp@gmail.com>2010-07-12 09:08:09 +0000
commite036e2da98cd6160b7206df7fcf399aaf79d01e0 (patch)
tree8dacb16710f7b9d4a33380cccad6fb327148667e /test/pending/pos/t3636.scala
parenta02ff1ac0e7cac2dccaf7351a22876438eb84d66 (diff)
downloadscala-e036e2da98cd6160b7206df7fcf399aaf79d01e0.tar.gz
scala-e036e2da98cd6160b7206df7fcf399aaf79d01e0.tar.bz2
scala-e036e2da98cd6160b7206df7fcf399aaf79d01e0.zip
Added test case for see #3636.
Diffstat (limited to 'test/pending/pos/t3636.scala')
-rw-r--r--test/pending/pos/t3636.scala49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/pending/pos/t3636.scala b/test/pending/pos/t3636.scala
new file mode 100644
index 0000000000..24d18c653d
--- /dev/null
+++ b/test/pending/pos/t3636.scala
@@ -0,0 +1,49 @@
+class CTxnLocal[ T ] {
+ def set( x: T )( implicit t: Txn ) {}
+ def get( implicit t: Txn ) : T = null.asInstanceOf[ T ]
+ def initialValue( t: Txn ) : T = null.asInstanceOf[ T ]
+}
+
+trait Txn
+
+trait ProcTxn {
+ def ccstm: Txn
+}
+
+trait TxnLocal[ @specialized T ] {
+ def apply()( implicit tx: ProcTxn ) : T
+ def set( v: T )( implicit tx: ProcTxn ) : Unit
+ def swap( v: T )( implicit tx: ProcTxn ) : T
+ def transform( f: T => T )( implicit tx: ProcTxn ) : Unit
+}
+
+object TxnLocal {
+ def apply[ @specialized T ] : TxnLocal[ T ] = new Impl( new CTxnLocal[ T ])
+ def apply[ @specialized T ]( initValue: => T ) : TxnLocal[ T ] = new Impl( new CTxnLocal[ T ] {
+ override def initialValue( tx: Txn ): T = initValue
+ })
+
+ private class Impl[ T ]( c: CTxnLocal[ T ]) extends TxnLocal[ T ] {
+ def apply()( implicit tx: ProcTxn ) : T = c.get( tx.ccstm )
+ def set( v: T )( implicit tx: ProcTxn ) : Unit = c.set( v )( tx.ccstm )
+ def swap( v: T )( implicit tx: ProcTxn ) : T = {
+ // currently not implemented in CTxnLocal
+ val oldV = apply
+ set( v )
+ oldV
+ }
+ def transform( f: T => T )( implicit tx: ProcTxn ) {
+ set( f( apply ))
+ }
+ }
+}
+
+
+object Transition {
+ private val currentRef = TxnLocal[ Transition ]( Instant )
+ def current( implicit tx: ProcTxn ) : Transition = currentRef()
+}
+
+sealed abstract class Transition
+case object Instant extends Transition
+