|
43 | 43 | Class ==K class String2Id("java.lang.Thread") andBool Id2String(MethodName) ==String "startImpl"
|
44 | 44 |
|
45 | 45 | //@ \subsection{Synchronized statement}
|
46 |
| -// 'Synchronized(objectRef(...)::_,, Block) |
47 |
| -//syntax KLabel ::= "'Synchronized" |
48 |
| -//evaluate the expression |
49 |
| -//context 'Synchronized(HOLE,, _) |
50 | 46 |
|
51 | 47 | rule [Synchronized-first-time]:
|
52 | 48 | <k>
|
53 |
| - 'Synchronized(objectRef(OId:Int,_)::_,, Block:K) |
54 |
| - => 'Try(Block,, [.KList],, releaseLock(OId)) |
55 |
| - ... |
| 49 | + synchronized (objectRef(OId:Int,_)::_) Block:Block |
| 50 | + => try Block [.KList] finally releaseLock(OId) |
| 51 | + ... |
56 | 52 | </k>
|
57 |
| -// <k> |
58 |
| -// synchronized (objectRef(OId:Int,_)::_) Block:Block |
59 |
| -// => 'Try(Block,, [.KList],, releaseLock(OId)) |
60 |
| -// ... |
61 |
| -// </k> |
62 | 53 | <holds>... (. => OId |-> 1) ...</holds>
|
63 | 54 | <busy> Busy:Set (. => SetItem(OId)) </busy>
|
64 | 55 | when
|
|
67 | 58 |
|
68 | 59 | rule [Synchronized-nested]:
|
69 | 60 | <k>
|
70 |
| - 'Synchronized(objectRef(OId:Int,_)::_,, Block:K) |
71 |
| - => 'Try(Block,, [.KList],, releaseLock(OId)) |
| 61 | + synchronized (objectRef(OId:Int,_)::_) Block:Block |
| 62 | + => try Block [.KList] finally releaseLock(OId) |
72 | 63 | ...
|
73 | 64 | </k>
|
74 | 65 | <holds>... OId |-> (Level:Int => Level +Int 1) ...</holds>
|
75 | 66 | [transition-threading, transition-sync]
|
76 | 67 |
|
77 | 68 | rule [Synchronized-on-null]:
|
78 |
| - 'Synchronized(null::_,,_) => throw new classNullPointerException(null::classString); |
| 69 | + synchronized (null::_) _ => throw new classNullPointerException(null::classString); |
79 | 70 |
|
80 | 71 | /*@Release one level of lock for the given object.*/
|
81 | 72 | syntax KItem ::= releaseLock ( Int )
|
|
0 commit comments