Reference.st
author Claus Gittinger <cg@exept.de>
Mon, 06 May 2002 08:24:57 +0200
changeset 1265 13013cdf0bc8
parent 1264 798e532a4c89
child 1450 8c466a8a125a
permissions -rw-r--r--
experimental

"{ 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
! !