--- a/VarNode.st Sat Nov 18 17:59:14 1995 +0100
+++ b/VarNode.st Thu Nov 23 03:15:59 1995 +0100
@@ -11,10 +11,10 @@
"
PrimaryNode subclass:#VariableNode
- instanceVariableNames:'name token selfValue selfClass index block'
- classVariableNames:''
- poolDictionaries:''
- category:'System-Compiler-Support'
+ instanceVariableNames:'name token selfValue selfClass index block'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'System-Compiler-Support'
!
!VariableNode class methodsFor:'documentation'!
@@ -33,26 +33,18 @@
"
!
-version
- ^ '$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.12 1995-11-11 15:31:46 cg Exp $'
-!
-
documentation
"
node for parse-trees, representing variables
"
+!
+
+version
+ ^ '$Header: /cvs/stx/stx/libcomp/Attic/VarNode.st,v 1.13 1995-11-23 02:15:59 cg Exp $'
! !
!VariableNode class methodsFor:'instance creation'!
-type:t token:tok
- ^ (self basicNew) type:t token:tok
-!
-
-type:t name:n
- ^ (self basicNew) type:t name:n
-!
-
type:t class:class name:n
^ (self basicNew) type:t class:class name:n
!
@@ -61,24 +53,32 @@
^ (self basicNew) type:t index:i selfValue:s
!
-type:t name:n value:val
- ^ (self basicNew) type:t name:n value:val
+type:t name:n
+ ^ (self basicNew) type:t name:n
+!
+
+type:t name:n index:i selfClass:s
+ ^ (self basicNew) type:t name:n index:i selfClass:s
+!
+
+type:t name:n index:i selfValue:s
+ ^ (self basicNew) type:t name:n index:i selfValue:s
!
type:t name:n token:tok index:i
^ (self basicNew) type:t name:n token:tok index:i
!
-type:t name:n index:i selfValue:s
- ^ (self basicNew) type:t name:n index:i selfValue:s
+type:t name:n token:tok index:i block:b
+ ^ (self basicNew) type:t name:n token:tok index:i block:b
!
-type:t name:n index:i selfClass:s
- ^ (self basicNew) type:t name:n index:i selfClass:s
+type:t name:n value:val
+ ^ (self basicNew) type:t name:n value:val
!
-type:t name:n token:tok index:i block:b
- ^ (self basicNew) type:t name:n token:tok index:i block:b
+type:t token:tok
+ ^ (self basicNew) type:t token:tok
!
type:t token:tok index:i
@@ -89,38 +89,21 @@
^ (self basicNew) type:t token:tok index:i block:b
! !
-!VariableNode methodsFor:'queries'!
-
-isGlobal
- "return true, if this is a node for a global variable"
-
- ^ (type == #GlobalVariable) and:[Smalltalk includesKey:name]
-! !
-
!VariableNode methodsFor:'accessing'!
-type:t token:tok
- type := t.
- token := tok
+index
+ ^ index
!
-type:t token:tok index:i
- type := t.
- index := i.
- token := tok
+name
+ ^ name
!
-type:t token:tok index:i block:b
- type := t.
- index := i.
- block := b.
- token := tok
-!
-
-type:t name:n
+type:t class:class name:n
type := t.
value := nil.
- name := n
+ name := n.
+ selfClass := class
!
type:t index:i selfValue:s
@@ -130,24 +113,9 @@
selfValue := s
!
-type:t class:class name:n
+type:t name:n
type := t.
value := nil.
- name := n.
- selfClass := class
-!
-
-type:t name:n value:val
- type := t.
- name := n.
- value := val
-!
-
-type:t name:n index:i selfValue:s
- type := t.
- value := nil.
- index := i.
- selfValue := s.
name := n
!
@@ -159,6 +127,14 @@
name := n
!
+type:t name:n index:i selfValue:s
+ type := t.
+ value := nil.
+ index := i.
+ selfValue := s.
+ name := n
+!
+
type:t name:n token:tok index:i
type := t.
index := i.
@@ -174,70 +150,28 @@
name := n
!
-name
- ^ name
+type:t name:n value:val
+ type := t.
+ name := n.
+ value := val
+!
+
+type:t token:tok
+ type := t.
+ token := tok
!
-index
- ^ index
-! !
-
-!VariableNode methodsFor:'evaluating'!
-
-evaluate
- (type == #MethodVariable
- or:[type == #BlockArg
- or:[type == #BlockVariable]]) ifTrue:[
- ^ token variableValue
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index
- ].
- (type == #GlobalVariable) ifTrue:[
- (Smalltalk includesKey:name) ifTrue:[
- ^ Smalltalk at:name
- ].
-"
- self error:('global ' , name , ' is undefined').
-"
-
- ^ UndefinedVariable name:name.
- ^ nil
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:(selfClass name , ':' , name) asSymbol
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfClass instVarAt:index
- ].
- (type == #ThisContext) ifTrue:[
- ^ thisContext
- ].
- "not reached"
- self halt:'bad type'.
- ^ value
+type:t token:tok index:i
+ type := t.
+ index := i.
+ token := tok
!
-store:aValue
- (type == #MethodVariable
- or:[type == #BlockVariable]) ifTrue:[
- token value:aValue. ^ aValue
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index put:aValue
- ].
- (type == #GlobalVariable) ifTrue:[
- ^ Smalltalk at:name put:aValue
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:(selfClass name , ':' , name) asSymbol put:aValue
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfClass instVarAt:index put:aValue
- ].
- "not reached"
- self halt:'bad type'.
- ^ aValue
+type:t token:tok index:i block:b
+ type := t.
+ index := i.
+ block := b.
+ token := tok
! !
!VariableNode methodsFor:'code generation'!
@@ -454,6 +388,64 @@
^ self error:'bad assignment'
! !
+!VariableNode methodsFor:'evaluating'!
+
+evaluate
+ (type == #MethodVariable
+ or:[type == #BlockArg
+ or:[type == #BlockVariable]]) ifTrue:[
+ ^ token variableValue
+ ].
+ (type == #InstanceVariable) ifTrue:[
+ ^ selfValue instVarAt:index
+ ].
+ (type == #GlobalVariable) ifTrue:[
+ (Smalltalk includesKey:name) ifTrue:[
+ ^ Smalltalk at:name
+ ].
+"
+ self error:('global ' , name , ' is undefined').
+"
+
+ ^ UndefinedVariable name:name.
+ ^ nil
+ ].
+ (type == #ClassVariable) ifTrue:[
+ ^ Smalltalk at:(selfClass name , ':' , name) asSymbol
+ ].
+ (type == #ClassInstanceVariable) ifTrue:[
+ ^ selfClass instVarAt:index
+ ].
+ (type == #ThisContext) ifTrue:[
+ ^ thisContext
+ ].
+ "not reached"
+ self halt:'bad type'.
+ ^ value
+!
+
+store:aValue
+ (type == #MethodVariable
+ or:[type == #BlockVariable]) ifTrue:[
+ token value:aValue. ^ aValue
+ ].
+ (type == #InstanceVariable) ifTrue:[
+ ^ selfValue instVarAt:index put:aValue
+ ].
+ (type == #GlobalVariable) ifTrue:[
+ ^ Smalltalk at:name put:aValue
+ ].
+ (type == #ClassVariable) ifTrue:[
+ ^ Smalltalk at:(selfClass name , ':' , name) asSymbol put:aValue
+ ].
+ (type == #ClassInstanceVariable) ifTrue:[
+ ^ selfClass instVarAt:index put:aValue
+ ].
+ "not reached"
+ self halt:'bad type'.
+ ^ aValue
+! !
+
!VariableNode methodsFor:'printing'!
displayString
@@ -478,3 +470,12 @@
"not reached"
self halt:'bad type'.
! !
+
+!VariableNode methodsFor:'queries'!
+
+isGlobal
+ "return true, if this is a node for a global variable"
+
+ ^ (type == #GlobalVariable) and:[Smalltalk includesKey:name]
+! !
+