Reference.st
author Claus Gittinger <cg@exept.de>
Wed, 18 Jun 2003 17:41:57 +0200
changeset 1435 be9680c6145c
parent 1265 13013cdf0bc8
child 1450 8c466a8a125a
permissions -rw-r--r--
factored out some common code (block-code and value-sending)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1264
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:libcomp' }"
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object variableSubclass:#Reference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Kernel-Methods'
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
Reference variableSubclass:#ContextVariableReference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
	instanceVariableNames:'context index'
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
	classVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
	poolDictionaries:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	privateIn:Reference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
Reference::ContextVariableReference variableSubclass:#ArgumentReference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	instanceVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	classVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	poolDictionaries:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
	privateIn:Reference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
Reference::ContextVariableReference variableSubclass:#LocalVariableReference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
	instanceVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
	classVariableNames:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
	poolDictionaries:''
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
	privateIn:Reference
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
!Reference class methodsFor:'documentation'!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
example1
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
    |foo ref|
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
    ref := Reference forLocal:1 in:thisContext.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
    ref inspect
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    "
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
     self example1
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    "
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
example2
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
"/    |foo ref|
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
"/
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
"/    foo := 123.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
"/    ref := &foo.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
"/    ref inspect
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    "
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
     self example2
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
    "
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
! !
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!Reference class methodsFor:'instance creation'!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
forArgument:argIndex in:aContext
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
    ^ ArgumentReference new
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        context:aContext index:argIndex
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
forLocal:varIndex in:aContext
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
    ^ LocalVariableReference new
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        context:aContext index:varIndex
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
! !
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
!Reference::ContextVariableReference methodsFor:'accessing'!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
context:contextArg index:indexArg 
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    context := contextArg.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    index := indexArg.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
! !
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
!Reference::ArgumentReference methodsFor:'accessing'!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
value
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    ^ context argAt:index
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
value:newValue
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
    self error:'write into argument ref'.
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    ^ newValue
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
! !
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!Reference::LocalVariableReference methodsFor:'accessing'!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
value
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
    ^ context varAt:index
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
value:newValue
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
    ^ context varAt:index put:newValue
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
! !
798e532a4c89 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95