ObjectMemory: jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Sat, 01 Oct 2011 20:05:39 +0100
branchjv
changeset 17873 20a63a9a38d8
parent 17872 55a6f54e36ff
child 17874 e922ff01c6f8
ObjectMemory: added: #lookupMethodForSelectorUnwindProtect: #unwindHandlerInContext:aContext
ObjectMemory.st
--- a/ObjectMemory.st	Sat Oct 01 19:43:30 2011 +0100
+++ b/ObjectMemory.st	Sat Oct 01 20:05:39 2011 +0100
@@ -916,6 +916,32 @@
 %}
 ! !
 
+!ObjectMemory class methodsFor:'VM unwind protect support'!
+
+unwindHandlerInContext:aContext
+
+    "
+    Return an unwind handler block for given context.
+    Selector of that context denotes which unwind handler
+    to use.
+
+    Occasionally, the VM needs to unwind-protect some C code.
+    If so, it creates and artificial context on the stack and
+    marks it for unwind, so stack unwinding logic finds it
+    and handles it. 
+
+    Now, only #lookupMethodForSelectorUnwindProtect is supported
+    (ensures the lookup is popped out from the lookupActications)
+    "
+    aContext selector == #lookupMethodForSelectorUnwindProtect: ifTrue:[
+        ^[Transcript showCR:'externalMethodLookupPop!!!!!!']
+    ].
+
+    self internalError:'Unknown VM unwind protect action'
+
+    "Created: / 01-10-2011 / 19:15:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
 !ObjectMemory class methodsFor:'access debugging'!
 
 setTrapOnAccessFor:anObject
@@ -5528,7 +5554,7 @@
 !
 
 version_SVN
-    ^ '$Id: ObjectMemory.st 10700 2011-09-29 15:44:37Z vranyj1 $'
+    ^ '$Id: ObjectMemory.st 10705 2011-10-01 19:05:39Z vranyj1 $'
 ! !
 
 ObjectMemory initialize!