initial checkin
authorClaus Gittinger <cg@exept.de>
Mon, 06 May 2002 08:23:54 +0200
changeset 1264 798e532a4c89
parent 1263 59adc52a4449
child 1265 13013cdf0bc8
initial checkin
Reference.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Reference.st	Mon May 06 08:23:54 2002 +0200
@@ -0,0 +1,100 @@
+"{ Package: 'stx:libcomp' }"
+
+Object variableSubclass:#Reference
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'Kernel-Methods'
+!
+
+Reference variableSubclass:#ContextVariableReference
+	instanceVariableNames:'context index'
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:Reference
+!
+
+Reference::ContextVariableReference variableSubclass:#ArgumentReference
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:Reference
+!
+
+Reference::ContextVariableReference variableSubclass:#LocalVariableReference
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	privateIn:Reference
+!
+
+!Reference class methodsFor:'documentation'!
+
+example1
+    |foo ref|
+
+    ref := Reference forLocal:1 in:thisContext.
+    ref inspect
+
+    "
+     self example1
+    "
+!
+
+example2
+"/    |foo ref|
+"/
+"/    foo := 123.
+"/    ref := &foo.
+"/    ref inspect
+
+    "
+     self example2
+    "
+! !
+
+!Reference class methodsFor:'instance creation'!
+
+forArgument:argIndex in:aContext
+    ^ ArgumentReference new
+        context:aContext index:argIndex
+!
+
+forLocal:varIndex in:aContext
+    ^ LocalVariableReference new
+        context:aContext index:varIndex
+! !
+
+!Reference::ContextVariableReference methodsFor:'accessing'!
+
+context:contextArg index:indexArg 
+    context := contextArg.
+    index := indexArg.
+! !
+
+!Reference::ArgumentReference methodsFor:'accessing'!
+
+value
+    ^ context argAt:index
+!
+
+value:newValue
+    self error:'write into argument ref'.
+    ^ newValue
+! !
+
+!Reference::LocalVariableReference methodsFor:'accessing'!
+
+value
+    ^ context varAt:index
+!
+
+value:newValue
+    ^ context varAt:index put:newValue
+! !
+
+!Reference class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libcomp/Reference.st,v 1.1 2002-05-06 06:23:54 cg Exp $'
+! !