summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-01-13 13:34:08 +0000
committerpaltherr <paltherr@epfl.ch>2004-01-13 13:34:08 +0000
commit6024fffaf85a96d60b3588a13661b69578da8bb7 (patch)
treeb3ab1937cb8b1d81001632b47bab92312007743c /sources
parentad1e0f4cc35d6a39dbb04d862d0b3cd40fafa92b (diff)
downloadscala-6024fffaf85a96d60b3588a13661b69578da8bb7.tar.gz
scala-6024fffaf85a96d60b3588a13661b69578da8bb7.tar.bz2
scala-6024fffaf85a96d60b3588a13661b69578da8bb7.zip
- Added Code.Synchronized and detection of ANYR...
- Added Code.Synchronized and detection of ANYREF_SYNCHRONIZED
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalai/Code.java1
-rw-r--r--sources/scala/tools/scalai/Evaluator.java4
-rw-r--r--sources/scala/tools/scalai/ExpressionCompiler.java3
3 files changed, 8 insertions, 0 deletions
diff --git a/sources/scala/tools/scalai/Code.java b/sources/scala/tools/scalai/Code.java
index dcd3ec3d3e..141efdfd4b 100644
--- a/sources/scala/tools/scalai/Code.java
+++ b/sources/scala/tools/scalai/Code.java
@@ -26,6 +26,7 @@ public class Code {
public case Load(Code target, Variable variable);
public case Store(Code target, Variable variable, Code expression);
+ public case Synchronized(Code object, Code expression);
public case If(Code cond, Code thenp, Code elsep);
public case Or(Code lf, Code rg);
public case And(Code lf, Code rg);
diff --git a/sources/scala/tools/scalai/Evaluator.java b/sources/scala/tools/scalai/Evaluator.java
index 30c27053a6..8b5958e252 100644
--- a/sources/scala/tools/scalai/Evaluator.java
+++ b/sources/scala/tools/scalai/Evaluator.java
@@ -153,6 +153,10 @@ public class Evaluator {
}
}
+ case Synchronized(Code object, Code expression):
+ Object value = evaluate(object);
+ synchronized (value) { return evaluate(expression); }
+
case If(Code cond, Code thenp, Code elsep):
Object value = evaluate(cond);
assert value instanceof Boolean : value.getClass();
diff --git a/sources/scala/tools/scalai/ExpressionCompiler.java b/sources/scala/tools/scalai/ExpressionCompiler.java
index 0edc0a525e..8f76849ccd 100644
--- a/sources/scala/tools/scalai/ExpressionCompiler.java
+++ b/sources/scala/tools/scalai/ExpressionCompiler.java
@@ -237,6 +237,9 @@ public class ExpressionCompiler {
if (symbol == definitions.BOOLEAN_AND()) {
return Code.And(object, compute(trees[0]));
}
+ if (symbol == definitions.ANYREF_SYNCHRONIZED) {
+ return Code.Synchronized(object, compute(trees[0]));
+ }
// !!! System.out.println("!!! method: " + Debug.show(symbol));
// !!! System.out.println("!!! -owner: " + Debug.show(symbol.owner()));
Function function = context.lookupFunction(symbol);