--- /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 $'
+! !