Reference.st
author Claus Gittinger <cg@exept.de>
Tue, 06 May 2003 19:45:51 +0200
changeset 1410 e93635fe8c40
parent 1265 13013cdf0bc8
child 1450 8c466a8a125a
permissions -rw-r--r--
pragma & ffi stuff

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