--- a/BCompiler.st Wed Jan 12 21:20:41 1994 +0100
+++ b/BCompiler.st Sun Jan 16 04:51:45 1994 +0100
@@ -26,7 +26,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.7 1994-01-12 20:20:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BCompiler.st,v 1.8 1994-01-16 03:51:28 claus Exp $
'!
!ByteCodeCompiler class methodsFor:'documentation'!
@@ -235,6 +235,7 @@
newMethod source:aString.
newMethod category:cat.
newMethod numberOfMethodVars:(compiler numberOfMethodVars).
+ newMethod numberOfMethodArgs:(compiler numberOfMethodArgs).
newMethod stackSize:(compiler maxStackDepth).
install ifTrue:[
--- a/BinaryNd.st Wed Jan 12 21:20:41 1994 +0100
+++ b/BinaryNd.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.4 1993-12-11 01:06:12 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/BinaryNd.st,v 1.5 1994-01-16 03:51:32 claus Exp $
'!
!BinaryNode methodsFor:'queries'!
@@ -39,6 +39,9 @@
!BinaryNode methodsFor:'evaluating'!
evaluate
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
^ (receiver evaluate) perform:selector with:(argArray at:1) evaluate
! !
@@ -70,7 +73,7 @@
] ifFalse:[
aStream nextPut:#minus1
].
- aStream nextPut:lineNr.
+ aStream nextPut:lineNr.
^ self
]
]
@@ -78,9 +81,9 @@
].
arg1 codeOn:aStream inBlock:b.
aStream nextPut:selector.
- (self class hasLineNumber:selector) ifTrue:[
- aStream nextPut:lineNr.
- ].
+ (self class hasLineNumber:selector) ifTrue:[
+ aStream nextPut:lineNr.
+ ].
^ self
]
].
--- a/BinaryNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/BinaryNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.4 1993-12-11 01:06:12 claus Exp $
+$Header: /cvs/stx/stx/libcomp/BinaryNode.st,v 1.5 1994-01-16 03:51:32 claus Exp $
'!
!BinaryNode methodsFor:'queries'!
@@ -39,6 +39,9 @@
!BinaryNode methodsFor:'evaluating'!
evaluate
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
^ (receiver evaluate) perform:selector with:(argArray at:1) evaluate
! !
@@ -70,7 +73,7 @@
] ifFalse:[
aStream nextPut:#minus1
].
- aStream nextPut:lineNr.
+ aStream nextPut:lineNr.
^ self
]
]
@@ -78,9 +81,9 @@
].
arg1 codeOn:aStream inBlock:b.
aStream nextPut:selector.
- (self class hasLineNumber:selector) ifTrue:[
- aStream nextPut:lineNr.
- ].
+ (self class hasLineNumber:selector) ifTrue:[
+ aStream nextPut:lineNr.
+ ].
^ self
]
].
--- a/ByteCodeCompiler.st Wed Jan 12 21:20:41 1994 +0100
+++ b/ByteCodeCompiler.st Sun Jan 16 04:51:45 1994 +0100
@@ -26,7 +26,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.7 1994-01-12 20:20:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ByteCodeCompiler.st,v 1.8 1994-01-16 03:51:28 claus Exp $
'!
!ByteCodeCompiler class methodsFor:'documentation'!
@@ -235,6 +235,7 @@
newMethod source:aString.
newMethod category:cat.
newMethod numberOfMethodVars:(compiler numberOfMethodVars).
+ newMethod numberOfMethodArgs:(compiler numberOfMethodArgs).
newMethod stackSize:(compiler maxStackDepth).
install ifTrue:[
--- a/CascadeNd.st Wed Jan 12 21:20:41 1994 +0100
+++ b/CascadeNd.st Sun Jan 16 04:51:45 1994 +0100
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.3 1993-10-13 02:41:15 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/CascadeNd.st,v 1.4 1994-01-16 03:51:33 claus Exp $
'!
!CascadeNode methodsFor: 'code generation'!
@@ -43,6 +43,10 @@
evaluate
|t argValueArray|
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
+
t := receiver evaluateForCascade.
argArray isNil ifTrue:[
t perform:selector.
@@ -55,6 +59,10 @@
evaluateForCascade
|t argValueArray|
+ receiver isSuper ifTrue:[
+ ^ super evaluateForCascade
+ ].
+
t := receiver evaluateForCascade.
argArray isNil ifTrue:[
t perform:selector.
--- a/CascadeNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/CascadeNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.3 1993-10-13 02:41:15 claus Exp $
+$Header: /cvs/stx/stx/libcomp/CascadeNode.st,v 1.4 1994-01-16 03:51:33 claus Exp $
'!
!CascadeNode methodsFor: 'code generation'!
@@ -43,6 +43,10 @@
evaluate
|t argValueArray|
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
+
t := receiver evaluateForCascade.
argArray isNil ifTrue:[
t perform:selector.
@@ -55,6 +59,10 @@
evaluateForCascade
|t argValueArray|
+ receiver isSuper ifTrue:[
+ ^ super evaluateForCascade
+ ].
+
t := receiver evaluateForCascade.
argArray isNil ifTrue:[
t perform:selector.
--- a/ConstNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/ConstNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.5 1994-01-08 17:05:08 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/ConstNode.st,v 1.6 1994-01-16 03:51:34 claus Exp $
'!
!ConstantNode class methodsFor:'queries'!
@@ -52,35 +52,35 @@
!ConstantNode class methodsFor:'instance creation'!
type:t value:val
- "some constant nodes are use so often, its worth caching them"
+ "some constant nodes are used so often, its worth caching them"
(t == #True) ifTrue:[
TrueNode isNil ifTrue:[
- TrueNode := super type:t value:val
+ TrueNode := (self basicNew) type:t value:val
].
^ TrueNode
].
(t == #False) ifTrue:[
FalseNode isNil ifTrue:[
- FalseNode := super type:t value:val
+ FalseNode := (self basicNew) type:t value:val
].
^ FalseNode
].
(t == #Nil) ifTrue:[
NilNode isNil ifTrue:[
- NilNode := super type:t value:val
+ NilNode := (self basicNew) type:t value:val
].
^ NilNode
].
(t == #Integer) ifTrue:[
(val == 0) ifTrue:[
Const0Node isNil ifTrue:[
- Const0Node := super type:t value:val
+ Const0Node := (self basicNew) type:t value:val
].
^ Const0Node
].
(val == 1) ifTrue:[
Const1Node isNil ifTrue:[
- Const1Node := super type:t value:val
+ Const1Node := (self basicNew) type:t value:val
].
^ Const1Node
]
@@ -88,7 +88,7 @@
(t == #Float) ifTrue:[
(val = 0.0) ifTrue:[
Float0Node isNil ifTrue:[
- Float0Node := super type:t value:val
+ Float0Node := (self basicNew) type:t value:val
].
^ Float0Node
]
@@ -96,6 +96,13 @@
^ (self basicNew) type:t value:val
! !
+!ConstantNode methodsFor:'accessing'!
+
+type:t value:val
+ type := t.
+ value := val
+! !
+
!ConstantNode methodsFor:'queries'!
isConstant
@@ -109,6 +116,8 @@
!
store:aValue
+ "not reached - parser checks for this"
+
self error:'store not allowed'.
^ aValue
! !
@@ -150,14 +159,18 @@
aStream nextPut:value
!
-codeStoreOn:aStream
- "should never be sent"
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+ "not sent - parser checks for this"
^ self error:'assignment to literals not allowed'
! !
!ConstantNode methodsFor:'printing'!
+displayString
+ ^ value displayString
+!
+
printOn:aStream indent:i
value storeOn:aStream
! !
--- a/ConstantNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/ConstantNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -23,7 +23,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.5 1994-01-08 17:05:08 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ConstantNode.st,v 1.6 1994-01-16 03:51:34 claus Exp $
'!
!ConstantNode class methodsFor:'queries'!
@@ -52,35 +52,35 @@
!ConstantNode class methodsFor:'instance creation'!
type:t value:val
- "some constant nodes are use so often, its worth caching them"
+ "some constant nodes are used so often, its worth caching them"
(t == #True) ifTrue:[
TrueNode isNil ifTrue:[
- TrueNode := super type:t value:val
+ TrueNode := (self basicNew) type:t value:val
].
^ TrueNode
].
(t == #False) ifTrue:[
FalseNode isNil ifTrue:[
- FalseNode := super type:t value:val
+ FalseNode := (self basicNew) type:t value:val
].
^ FalseNode
].
(t == #Nil) ifTrue:[
NilNode isNil ifTrue:[
- NilNode := super type:t value:val
+ NilNode := (self basicNew) type:t value:val
].
^ NilNode
].
(t == #Integer) ifTrue:[
(val == 0) ifTrue:[
Const0Node isNil ifTrue:[
- Const0Node := super type:t value:val
+ Const0Node := (self basicNew) type:t value:val
].
^ Const0Node
].
(val == 1) ifTrue:[
Const1Node isNil ifTrue:[
- Const1Node := super type:t value:val
+ Const1Node := (self basicNew) type:t value:val
].
^ Const1Node
]
@@ -88,7 +88,7 @@
(t == #Float) ifTrue:[
(val = 0.0) ifTrue:[
Float0Node isNil ifTrue:[
- Float0Node := super type:t value:val
+ Float0Node := (self basicNew) type:t value:val
].
^ Float0Node
]
@@ -96,6 +96,13 @@
^ (self basicNew) type:t value:val
! !
+!ConstantNode methodsFor:'accessing'!
+
+type:t value:val
+ type := t.
+ value := val
+! !
+
!ConstantNode methodsFor:'queries'!
isConstant
@@ -109,6 +116,8 @@
!
store:aValue
+ "not reached - parser checks for this"
+
self error:'store not allowed'.
^ aValue
! !
@@ -150,14 +159,18 @@
aStream nextPut:value
!
-codeStoreOn:aStream
- "should never be sent"
+codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
+ "not sent - parser checks for this"
^ self error:'assignment to literals not allowed'
! !
!ConstantNode methodsFor:'printing'!
+displayString
+ ^ value displayString
+!
+
printOn:aStream indent:i
value storeOn:aStream
! !
--- a/Make.proto Wed Jan 12 21:20:41 1994 +0100
+++ b/Make.proto Sun Jan 16 04:51:45 1994 +0100
@@ -14,7 +14,7 @@
STCFLAGS= -H../include -warnGlobalAssign $(STCOPT)
OBJS= Scanner.$(O) Variable.$(O) ParseNode.$(O) Parser.$(O) \
- PrimaryNd.$(O) \
+ PrimaryNd.$(O) VarNode.$(O) SelfNode.$(O) SuperNode.$(O) \
StatNode.$(O) AssignNd.$(O) BlockNode.$(O) MessageNd.$(O) \
BCompiler.$(O) RetNode.$(O) UnaryNd.$(O) BinaryNd.$(O) \
PrimNd.$(O) CascadeNd.$(O) ConstNode.$(O) \
@@ -28,6 +28,7 @@
objs:: level0 \
level1 \
level2 \
+ level3 \
$(EXTRA_LIBCOMP)
#
@@ -56,8 +57,13 @@
BinaryNd.o \
CascadeNd.o \
PrimNd.o \
+ VarNode.o \
+ SelfNode.o \
ConstNode.o
+level3:$(P) \
+ SuperNode.o
+
install::
-mkdir $(DESTLIBDIR)
-$(INSTALL) $(LIBNAME)$(OBJNAME) $(DESTLIBDIR)
@@ -111,7 +117,10 @@
AssignNd.o: AssignNd.st $(PARSENODE)
BlockNode.o: BlockNode.st $(PARSENODE)
PrimaryNd.o: PrimaryNd.st $(PARSENODE)
+SelfNode.o: SelfNode.st $(PRIMARYNODE)
ConstNode.o: ConstNode.st $(PRIMARYNODE)
+VariableNode.o: VariableNode.st $(PRIMARYNODE)
+SuperNode.o: SuperNode.st $(I)/SelfNode.H $(PRIMARYNODE)
MessageNd.o: MessageNd.st $(PARSENODE)
CascadeNd.o: CascadeNd.st $(MESSAGENODE)
PrimNd.o: PrimNd.st $(MESSAGENODE)
--- a/MessageNd.st Wed Jan 12 21:20:41 1994 +0100
+++ b/MessageNd.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.5 1994-01-12 20:20:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/MessageNd.st,v 1.6 1994-01-16 03:51:36 claus Exp $
'!
!MessageNode class methodsFor:'instance creation'!
@@ -351,7 +351,19 @@
!MessageNode methodsFor:'evaluating'!
evaluate
- |r nargs argValueArray index|
+ |r nargs argValueArray class|
+
+ receiver isSuper ifTrue:[
+ r := receiver value.
+ class := receiver definingClass superclass.
+ argArray notNil ifTrue:[
+ argValueArray := argArray collect:[:arg | arg evaluate].
+ ] ifFalse:[
+ argValueArray := #()
+ ].
+ ^ r perform:selector inClass:class withArguments:argValueArray
+ ].
+
argArray isNil ifTrue:[
^ (receiver evaluate) perform:selector
@@ -372,17 +384,24 @@
with:(argArray at:3) evaluate
].
r := receiver evaluate.
- argValueArray := Array new:nargs.
- index := 1.
- [index <= nargs] whileTrue:[
- argValueArray at:index put:((argArray at:index) evaluate).
- index := index + 1
- ].
+ argValueArray := argArray collect:[:arg | arg evaluate].
^ r perform:selector withArguments:argValueArray
!
evaluateForCascade
- |r nargs argValueArray index|
+ |r nargs argValueArray class|
+
+ receiver isSuper ifTrue:[
+ r := receiver value.
+ class := receiver definingClass superclass.
+ argArray notNil ifTrue:[
+ argValueArray := argArray collect:[:arg | arg evaluate].
+ ] ifFalse:[
+ argValueArray := #()
+ ].
+ r perform:selector inClass:class withArguments:argValueArray.
+ ^ r
+ ].
r := receiver evaluate.
argArray isNil ifTrue:[
@@ -405,12 +424,7 @@
with:(argArray at:3) evaluate.
^ r
].
- argValueArray := Array new:nargs.
- index := 1.
- [index <= nargs] whileTrue:[
- argValueArray at:index put:((argArray at:index) evaluate).
- index := index + 1
- ].
+ argValueArray := argArray collect:[:arg | arg evaluate].
r perform:selector withArguments:argValueArray.
^ r
! !
--- a/MessageNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/MessageNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.5 1994-01-12 20:20:41 claus Exp $
+$Header: /cvs/stx/stx/libcomp/MessageNode.st,v 1.6 1994-01-16 03:51:36 claus Exp $
'!
!MessageNode class methodsFor:'instance creation'!
@@ -351,7 +351,19 @@
!MessageNode methodsFor:'evaluating'!
evaluate
- |r nargs argValueArray index|
+ |r nargs argValueArray class|
+
+ receiver isSuper ifTrue:[
+ r := receiver value.
+ class := receiver definingClass superclass.
+ argArray notNil ifTrue:[
+ argValueArray := argArray collect:[:arg | arg evaluate].
+ ] ifFalse:[
+ argValueArray := #()
+ ].
+ ^ r perform:selector inClass:class withArguments:argValueArray
+ ].
+
argArray isNil ifTrue:[
^ (receiver evaluate) perform:selector
@@ -372,17 +384,24 @@
with:(argArray at:3) evaluate
].
r := receiver evaluate.
- argValueArray := Array new:nargs.
- index := 1.
- [index <= nargs] whileTrue:[
- argValueArray at:index put:((argArray at:index) evaluate).
- index := index + 1
- ].
+ argValueArray := argArray collect:[:arg | arg evaluate].
^ r perform:selector withArguments:argValueArray
!
evaluateForCascade
- |r nargs argValueArray index|
+ |r nargs argValueArray class|
+
+ receiver isSuper ifTrue:[
+ r := receiver value.
+ class := receiver definingClass superclass.
+ argArray notNil ifTrue:[
+ argValueArray := argArray collect:[:arg | arg evaluate].
+ ] ifFalse:[
+ argValueArray := #()
+ ].
+ r perform:selector inClass:class withArguments:argValueArray.
+ ^ r
+ ].
r := receiver evaluate.
argArray isNil ifTrue:[
@@ -405,12 +424,7 @@
with:(argArray at:3) evaluate.
^ r
].
- argValueArray := Array new:nargs.
- index := 1.
- [index <= nargs] whileTrue:[
- argValueArray at:index put:((argArray at:index) evaluate).
- index := index + 1
- ].
+ argValueArray := argArray collect:[:arg | arg evaluate].
r perform:selector withArguments:argValueArray.
^ r
! !
--- a/ParseNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/ParseNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.3 1993-10-13 02:41:34 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ParseNode.st,v 1.4 1994-01-16 03:51:38 claus Exp $
'!
!ParseNode class methodsFor:'instance creation'!
@@ -34,29 +34,51 @@
!ParseNode methodsFor:'queries'!
isConstant
+ "return true, if this is a node for a constant"
+
+ ^ false
+!
+
+isSuper
+ "return true, if this is a super-node"
+
+ ^ false
+!
+
+isReturnNode
+ "return true, if this is a node for a return expression"
+
^ false
!
isMessage
+ "return true, if this is a node for a message expression"
+
^ false
!
isBinaryMessage
+ "return true, if this is a node for a binary send"
+
^ false
!
isUnaryMessage
+ "return true, if this is a node for a unary send"
+
^ false
! !
!ParseNode methodsFor:'accessing'!
type
+ "return the nodes type"
+
^ type
!
lineNumber:dummy
- "ignored here"
+ "set linenumber - ignored here"
^ self
! !
@@ -64,6 +86,8 @@
!ParseNode methodsFor:'private'!
type:t
+ "set the nodes type"
+
type := t
! !
--- a/Parser.st Wed Jan 12 21:20:41 1994 +0100
+++ b/Parser.st Sun Jan 16 04:51:45 1994 +0100
@@ -43,7 +43,7 @@
a method - this is done by sending parseXXX message to a parser and asking
the parser for referencedXVars or modifiedXVars (see SystemBrowser).
-$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.7 1994-01-09 21:30:19 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Parser.st,v 1.8 1994-01-16 03:51:39 claus Exp $
'!
!Parser class methodsFor:'evaluating expressions'!
@@ -793,6 +793,7 @@
^ #Error
].
expr := self expression.
+ (expr == #Error) ifTrue:[^ #Error].
"
classToCompileFor notNil ifTrue:[
currentBlock isNil ifTrue:[
@@ -802,7 +803,6 @@
]
].
"
- (expr == #Error) ifTrue:[^ #Error].
^ StatementNode expression:expr
!
@@ -890,8 +890,7 @@
try := MessageNode receiver:receiver selector:sel args:args.
(try isMemberOf:String) ifTrue:[
self parseError:try position:pos1 to:pos2.
- receiver := MessageNode receiver:receiver selector:sel args:args
- fold:false
+ receiver := MessageNode receiver:receiver selector:sel args:args fold:false
] ifFalse:[
receiver := try
].
@@ -963,8 +962,7 @@
try := BinaryNode receiver:receiver selector:sel arg:arg.
(try isMemberOf:String) ifTrue:[
self parseError:try position:pos to:tokenPosition.
- receiver := BinaryNode receiver:receiver selector:sel arg:arg
- fold:false
+ receiver := BinaryNode receiver:receiver selector:sel arg:arg fold:false
] ifFalse:[
receiver := try
].
@@ -1072,7 +1070,7 @@
^ #Error
].
selfNode isNil ifTrue:[
- selfNode := PrimaryNode type:#Self value:selfValue
+ selfNode := SelfNode value:selfValue
].
^ selfNode
].
@@ -1125,7 +1123,7 @@
^ #Error
].
superNode isNil ifTrue:[
- superNode := PrimaryNode type:#Super value:selfValue
+ superNode := SuperNode value:selfValue inClass:classToCompileFor
].
^ superNode
].
@@ -1135,7 +1133,7 @@
self parseError:'assignment to thisContext' position:pos to:tokenPosition.
^ #Error
].
- ^ PrimaryNode type:#ThisContext value:nil
+ ^ VariableNode type:#ThisContext
].
(tokenType == #HashLeftParen) ifTrue:[
self nextToken.
@@ -1206,11 +1204,11 @@
runIndex := runIndex + 1
].
tokenFound notNil ifTrue:[
- ^ PrimaryNode type:#BlockArg
- name:varName
- token:tokenFound
- index:instIndex
- block:theBlock
+ ^ VariableNode type:#BlockArg
+ name:varName
+ token:tokenFound
+ index:instIndex
+ block:theBlock
]
].
@@ -1226,11 +1224,11 @@
runIndex := runIndex + 1
].
tokenFound notNil ifTrue:[
- ^ PrimaryNode type:#BlockVariable
- name:varName
- token:tokenFound
- index:instIndex
- block:theBlock
+ ^ VariableNode type:#BlockVariable
+ name:varName
+ token:tokenFound
+ index:instIndex
+ block:theBlock
]
].
searchBlock := searchBlock home
@@ -1242,10 +1240,10 @@
instIndex ~~ 0 ifTrue:[
var := methodVars at:instIndex.
var used:true.
- ^ PrimaryNode type:#MethodVariable
- name:varName
- token:var
- index:instIndex
+ ^ VariableNode type:#MethodVariable
+ name:varName
+ token:var
+ index:instIndex
]
].
@@ -1253,10 +1251,10 @@
methodArgs notNil ifTrue:[
instIndex := methodArgNames indexOf:varName.
instIndex ~~ 0 ifTrue:[
- ^ PrimaryNode type:#MethodArg
- name:varName
- token:(methodArgs at:instIndex)
- index:instIndex
+ ^ VariableNode type:#MethodArg
+ name:varName
+ token:(methodArgs at:instIndex)
+ index:instIndex
]
].
@@ -1289,10 +1287,10 @@
(usedVars includes:varName) ifFalse:[
usedVars add:varName
].
- ^ PrimaryNode type:#InstanceVariable
- name:varName
- index:instIndex
- selfValue:selfValue
+ ^ VariableNode type:#InstanceVariable
+ name:varName
+ index:instIndex
+ selfValue:selfValue
]
].
@@ -1312,10 +1310,10 @@
(usedVars includes:varName) ifFalse:[
usedVars add:varName
].
- ^ PrimaryNode type:#ClassInstanceVariable
- name:varName
- index:instIndex
- selfValue:selfValue
+ ^ VariableNode type:#ClassInstanceVariable
+ name:varName
+ index:instIndex
+ selfClass:aClass
]
]
].
@@ -1351,8 +1349,8 @@
(usedVars includes:varName) ifFalse:[
usedVars add:varName
].
- ^ PrimaryNode type:#ClassVariable
- name:(aClass name , ':' , varName) asSymbol
+ ^ VariableNode type:#ClassVariable
+ name:(aClass name , ':' , varName) asSymbol
]
]
].
@@ -1366,8 +1364,7 @@
(usedVars includes:varName) ifFalse:[
usedVars add:varName
].
- ^ PrimaryNode type:#GlobalVariable
- name:tokenSymbol
+ ^ VariableNode type:#GlobalVariable name:tokenSymbol
].
^ #Error
!
@@ -1381,8 +1378,7 @@
(v == #Error) ifFalse:[^ v].
v := self correctVariable.
(v == #Error) ifFalse:[^ v].
- ^ PrimaryNode type:#GlobalVariable
- name:tokenName asSymbol
+ ^ VariableNode type:#GlobalVariable name:tokenName asSymbol
!
inWhichClassIsClassVar:aString
@@ -1781,8 +1777,7 @@
] ifFalse:[
correctIt := self warning:(varName , ' is undefined') position:pos1 to:pos2.
correctIt ifFalse:[
- ^ PrimaryNode type:#GlobalVariable
- name:(varName asSymbol)
+ ^ VariableNode type:#GlobalVariable name:(varName asSymbol)
]
].
--- a/PrimaryNd.st Wed Jan 12 21:20:41 1994 +0100
+++ b/PrimaryNd.st Sun Jan 16 04:51:45 1994 +0100
@@ -11,7 +11,7 @@
"
ParseNode subclass:#PrimaryNode
- instanceVariableNames:'value name selfValue token index block'
+ instanceVariableNames:'value'
classVariableNames:''
poolDictionaries:''
category:'System-Compiler-Support'
@@ -22,127 +22,12 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.4 1993-12-11 01:09:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/PrimaryNd.st,v 1.5 1994-01-16 03:51:42 claus Exp $
written 88 by claus
'!
-!PrimaryNode 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 index:i selfValue:s
- ^ (self basicNew) type:t index:i selfValue:s
-!
-
-type:t value:val
- ^ (self basicNew) type:t value:val
-!
-
-type:t name:n value:val
- ^ (self basicNew) type:t name:n value:val
-!
-
-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 token:tok index:i
- ^ (self basicNew) type:t token:tok index:i
-!
-
-type:t token:tok index:i block:b
- ^ (self basicNew) type:t token:tok index:i block:b
-! !
-
!PrimaryNode methodsFor:'accessing'!
-type:t token:tok
- type := t.
- token := tok
-!
-
-type:t token:tok index:i
- type := t.
- index := i.
- token := tok
-!
-
-type:t token:tok index:i block:b
- type := t.
- index := i.
- block := b.
- token := tok
-!
-
-type:t name:n
- type := t.
- value := nil.
- name := n
-!
-
-type:t index:i selfValue:s
- type := t.
- value := nil.
- index := i.
- selfValue := s
-!
-
-type:t value:val
- type := t.
- value := val
-!
-
-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
-!
-
-type:t name:n token:tok index:i
- type := t.
- index := i.
- token := tok.
- name := n
-!
-
-type:t name:n token:tok index:i block:b
- type := t.
- index := i.
- block := b.
- token := tok.
- name := n
-!
-
-name
- ^ name
-!
-
-index
- ^ index
-!
-
value
^ value
! !
@@ -150,61 +35,11 @@
!PrimaryNode methodsFor:'evaluating'!
evaluate
- (type == #MethodVariable) ifTrue:[
- ^ token value
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index
- ].
- (type == #BlockArg) ifTrue:[
- ^ token value
- ].
- (type == #GlobalVariable) ifTrue:[
- (Smalltalk includesKey:name) ifTrue:[
- ^ Smalltalk at:name
- ].
-"
- self error:('global ' , name , ' is undefined').
-"
-
- ^ UndefinedVariable name:name.
- ^ nil
- ].
- (type == #BlockVariable) ifTrue:[
- ^ token value
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:name
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfValue class instVarAt:index
- ].
- (type == #ThisContext) ifTrue:[
- ^ thisContext
- ].
- ^ value
+ self subclassResponsibility
!
store:aValue
- (type == #MethodVariable) ifTrue:[
- token value:aValue
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index put:aValue
- ].
- (type == #GlobalVariable) ifTrue:[
- ^ Smalltalk at:name put:aValue
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:name put:aValue
- ].
- (type == #BlockVariable) ifTrue:[
- token value:aValue
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfValue class instVarAt:index put:aValue
- ].
- ^ aValue
+ self subclassResponsibility
! !
!PrimaryNode methodsFor:'code generation'!
@@ -215,264 +50,19 @@
!
codeOn:aStream inBlock:codeBlock
- |theCode b deltaLevel|
-
- (type == #Self) ifTrue:[
- aStream nextPut:#pushSelf. ^ self
- ].
- (type == #MethodArg) ifTrue:[
- (index <= 4) ifTrue:[
- aStream nextPut:(#(pushMethodArg1
- pushMethodArg2
- pushMethodArg3
- pushMethodArg4) at:index).
- ^ self
- ].
- aStream nextPut:#pushMethodArg.
- aStream nextPut:index.
- ^ self
- ].
- (type == #MethodVariable) ifTrue:[
- (index <= 6) ifTrue:[
- aStream nextPut:(#(pushMethodVar1
- pushMethodVar2
- pushMethodVar3
- pushMethodVar4
- pushMethodVar5
- pushMethodVar6) at:index).
- ^ self
- ].
- aStream nextPut:#pushMethodVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- (index <= 10) ifTrue:[
- theCode := #(pushInstVar1 pushInstVar2 pushInstVar3
- pushInstVar4 pushInstVar5 pushInstVar6
- pushInstVar7 pushInstVar8 pushInstVar9
- pushInstVar10) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#pushInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #BlockArg) ifTrue:[
- "find deltaLevel to block, where argument was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
- (deltaLevel == 0) ifTrue:[
- (index <= 4) ifTrue:[
- theCode := #(pushBlockArg1 pushBlockArg2 pushBlockArg3
- pushBlockArg4) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#pushBlockArg.
- aStream nextPut:index
- ] ifFalse:[
- (deltaLevel == 1) ifTrue:[
- aStream nextPut:#pushOuter1BlockArg
- ] ifFalse:[
- (deltaLevel == 2) ifTrue:[
- aStream nextPut:#pushOuter2BlockArg
- ] ifFalse:[
- aStream nextPut:#pushOuterBlockArg.
- aStream nextPut:deltaLevel
- ]
- ].
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #Super) ifTrue:[
- aStream nextPut:#pushSelf. ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPut:#pushGlobal.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPut:#pushClassVar.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- "find deltaLevel to block, where variable was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
-
- (deltaLevel == 0) ifTrue:[
- aStream nextPut:#pushBlockVar.
- aStream nextPut:index
- ] ifFalse:[
- aStream nextPut:#pushOuterBlockVar.
- aStream nextPut:deltaLevel.
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPut:#pushClassInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #ThisContext) ifTrue:[
- aStream nextPut:#pushThisContext. ^ self
- ].
-
- "can this be reached ?"
-
- aStream nextPut:#pushLit.
- aStream nextPut:value
+ self subclassResponsibility
!
codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
- |theCode b deltaLevel|
-
- valueNeeded ifTrue:[
- aStream nextPut:#dup
- ].
- (type == #MethodVariable) ifTrue:[
- (index <= 6) ifTrue:[
- theCode := #(storeMethodVar1 storeMethodVar2
- storeMethodVar3 storeMethodVar4
- storeMethodVar5 storeMethodVar6) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#storeMethodVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- (index <= 10) ifTrue:[
- theCode := #(storeInstVar1 storeInstVar2
- storeInstVar3 storeInstVar4
- storeInstVar5 storeInstVar6
- storeInstVar7 storeInstVar8
- storeInstVar9 storeInstVar10) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#storeInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPut:#storeGlobal.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- "find deltaLevel to block, where variable was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
-
- (deltaLevel == 0) ifTrue:[
- aStream nextPut:#storeBlockVar.
- aStream nextPut:index
- ] ifFalse:[
- aStream nextPut:#storeOuterBlockVar.
- aStream nextPut:deltaLevel.
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPut:#storeClassVar.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPut:#storeClassInstVar.
- aStream nextPut:index.
- ^ self
- ].
- "cannot be reached"
- ^ self error:'bad assignment'
+ self subclassResponsibility
! !
!PrimaryNode methodsFor:'printing'!
displayString
- ^ 'InterpreterVariable(' , self printString , ')'
+ self subclassResponsibility
!
printOn:aStream indent:i
- (type == #Self) ifTrue:[
- aStream nextPutAll:'self'. ^ self
- ].
- (type == #MethodArg) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #MethodVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #BlockArg) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #Super) ifTrue:[
- aStream nextPutAll:'super'. ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPutAll:name.^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #ThisContext) ifTrue:[
- aStream nextPutAll:'thisContext'. ^ self
- ].
- self halt
+ self subclassResponsibility
! !
--- a/PrimaryNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/PrimaryNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -11,7 +11,7 @@
"
ParseNode subclass:#PrimaryNode
- instanceVariableNames:'value name selfValue token index block'
+ instanceVariableNames:'value'
classVariableNames:''
poolDictionaries:''
category:'System-Compiler-Support'
@@ -22,127 +22,12 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.4 1993-12-11 01:09:30 claus Exp $
+$Header: /cvs/stx/stx/libcomp/PrimaryNode.st,v 1.5 1994-01-16 03:51:42 claus Exp $
written 88 by claus
'!
-!PrimaryNode 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 index:i selfValue:s
- ^ (self basicNew) type:t index:i selfValue:s
-!
-
-type:t value:val
- ^ (self basicNew) type:t value:val
-!
-
-type:t name:n value:val
- ^ (self basicNew) type:t name:n value:val
-!
-
-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 token:tok index:i
- ^ (self basicNew) type:t token:tok index:i
-!
-
-type:t token:tok index:i block:b
- ^ (self basicNew) type:t token:tok index:i block:b
-! !
-
!PrimaryNode methodsFor:'accessing'!
-type:t token:tok
- type := t.
- token := tok
-!
-
-type:t token:tok index:i
- type := t.
- index := i.
- token := tok
-!
-
-type:t token:tok index:i block:b
- type := t.
- index := i.
- block := b.
- token := tok
-!
-
-type:t name:n
- type := t.
- value := nil.
- name := n
-!
-
-type:t index:i selfValue:s
- type := t.
- value := nil.
- index := i.
- selfValue := s
-!
-
-type:t value:val
- type := t.
- value := val
-!
-
-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
-!
-
-type:t name:n token:tok index:i
- type := t.
- index := i.
- token := tok.
- name := n
-!
-
-type:t name:n token:tok index:i block:b
- type := t.
- index := i.
- block := b.
- token := tok.
- name := n
-!
-
-name
- ^ name
-!
-
-index
- ^ index
-!
-
value
^ value
! !
@@ -150,61 +35,11 @@
!PrimaryNode methodsFor:'evaluating'!
evaluate
- (type == #MethodVariable) ifTrue:[
- ^ token value
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index
- ].
- (type == #BlockArg) ifTrue:[
- ^ token value
- ].
- (type == #GlobalVariable) ifTrue:[
- (Smalltalk includesKey:name) ifTrue:[
- ^ Smalltalk at:name
- ].
-"
- self error:('global ' , name , ' is undefined').
-"
-
- ^ UndefinedVariable name:name.
- ^ nil
- ].
- (type == #BlockVariable) ifTrue:[
- ^ token value
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:name
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfValue class instVarAt:index
- ].
- (type == #ThisContext) ifTrue:[
- ^ thisContext
- ].
- ^ value
+ self subclassResponsibility
!
store:aValue
- (type == #MethodVariable) ifTrue:[
- token value:aValue
- ].
- (type == #InstanceVariable) ifTrue:[
- ^ selfValue instVarAt:index put:aValue
- ].
- (type == #GlobalVariable) ifTrue:[
- ^ Smalltalk at:name put:aValue
- ].
- (type == #ClassVariable) ifTrue:[
- ^ Smalltalk at:name put:aValue
- ].
- (type == #BlockVariable) ifTrue:[
- token value:aValue
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- ^ selfValue class instVarAt:index put:aValue
- ].
- ^ aValue
+ self subclassResponsibility
! !
!PrimaryNode methodsFor:'code generation'!
@@ -215,264 +50,19 @@
!
codeOn:aStream inBlock:codeBlock
- |theCode b deltaLevel|
-
- (type == #Self) ifTrue:[
- aStream nextPut:#pushSelf. ^ self
- ].
- (type == #MethodArg) ifTrue:[
- (index <= 4) ifTrue:[
- aStream nextPut:(#(pushMethodArg1
- pushMethodArg2
- pushMethodArg3
- pushMethodArg4) at:index).
- ^ self
- ].
- aStream nextPut:#pushMethodArg.
- aStream nextPut:index.
- ^ self
- ].
- (type == #MethodVariable) ifTrue:[
- (index <= 6) ifTrue:[
- aStream nextPut:(#(pushMethodVar1
- pushMethodVar2
- pushMethodVar3
- pushMethodVar4
- pushMethodVar5
- pushMethodVar6) at:index).
- ^ self
- ].
- aStream nextPut:#pushMethodVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- (index <= 10) ifTrue:[
- theCode := #(pushInstVar1 pushInstVar2 pushInstVar3
- pushInstVar4 pushInstVar5 pushInstVar6
- pushInstVar7 pushInstVar8 pushInstVar9
- pushInstVar10) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#pushInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #BlockArg) ifTrue:[
- "find deltaLevel to block, where argument was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
- (deltaLevel == 0) ifTrue:[
- (index <= 4) ifTrue:[
- theCode := #(pushBlockArg1 pushBlockArg2 pushBlockArg3
- pushBlockArg4) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#pushBlockArg.
- aStream nextPut:index
- ] ifFalse:[
- (deltaLevel == 1) ifTrue:[
- aStream nextPut:#pushOuter1BlockArg
- ] ifFalse:[
- (deltaLevel == 2) ifTrue:[
- aStream nextPut:#pushOuter2BlockArg
- ] ifFalse:[
- aStream nextPut:#pushOuterBlockArg.
- aStream nextPut:deltaLevel
- ]
- ].
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #Super) ifTrue:[
- aStream nextPut:#pushSelf. ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPut:#pushGlobal.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPut:#pushClassVar.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- "find deltaLevel to block, where variable was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
-
- (deltaLevel == 0) ifTrue:[
- aStream nextPut:#pushBlockVar.
- aStream nextPut:index
- ] ifFalse:[
- aStream nextPut:#pushOuterBlockVar.
- aStream nextPut:deltaLevel.
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPut:#pushClassInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #ThisContext) ifTrue:[
- aStream nextPut:#pushThisContext. ^ self
- ].
-
- "can this be reached ?"
-
- aStream nextPut:#pushLit.
- aStream nextPut:value
+ self subclassResponsibility
!
codeStoreOn:aStream inBlock:codeBlock valueNeeded:valueNeeded
- |theCode b deltaLevel|
-
- valueNeeded ifTrue:[
- aStream nextPut:#dup
- ].
- (type == #MethodVariable) ifTrue:[
- (index <= 6) ifTrue:[
- theCode := #(storeMethodVar1 storeMethodVar2
- storeMethodVar3 storeMethodVar4
- storeMethodVar5 storeMethodVar6) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#storeMethodVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- (index <= 10) ifTrue:[
- theCode := #(storeInstVar1 storeInstVar2
- storeInstVar3 storeInstVar4
- storeInstVar5 storeInstVar6
- storeInstVar7 storeInstVar8
- storeInstVar9 storeInstVar10) at:index.
- aStream nextPut:theCode.
- ^ self
- ].
- aStream nextPut:#storeInstVar.
- aStream nextPut:index.
- ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPut:#storeGlobal.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- "find deltaLevel to block, where variable was defined"
- b := codeBlock.
- deltaLevel := 0.
- [b notNil and:[b ~~ block]] whileTrue:[
- b inlineBlock ifFalse:[
- deltaLevel := deltaLevel + 1
- ].
- b := b home
- ].
-
- (deltaLevel == 0) ifTrue:[
- aStream nextPut:#storeBlockVar.
- aStream nextPut:index
- ] ifFalse:[
- aStream nextPut:#storeOuterBlockVar.
- aStream nextPut:deltaLevel.
- aStream nextPut:index
- ].
- ^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPut:#storeClassVar.
- aStream nextPut:name.
- aStream nextPut:0. "slot for generation "
- aStream nextPut:0. "slot for cell address (4 byte) "
- aStream nextPut:0.
- aStream nextPut:0.
- aStream nextPut:0.
- ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPut:#storeClassInstVar.
- aStream nextPut:index.
- ^ self
- ].
- "cannot be reached"
- ^ self error:'bad assignment'
+ self subclassResponsibility
! !
!PrimaryNode methodsFor:'printing'!
displayString
- ^ 'InterpreterVariable(' , self printString , ')'
+ self subclassResponsibility
!
printOn:aStream indent:i
- (type == #Self) ifTrue:[
- aStream nextPutAll:'self'. ^ self
- ].
- (type == #MethodArg) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #MethodVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #InstanceVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #BlockArg) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #Super) ifTrue:[
- aStream nextPutAll:'super'. ^ self
- ].
- (type == #GlobalVariable) ifTrue:[
- aStream nextPutAll:name.^ self
- ].
- (type == #ClassVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #BlockVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #ClassInstanceVariable) ifTrue:[
- aStream nextPutAll:name. ^ self
- ].
- (type == #ThisContext) ifTrue:[
- aStream nextPutAll:'thisContext'. ^ self
- ].
- self halt
+ self subclassResponsibility
! !
--- a/RetNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/RetNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.3 1993-10-13 02:41:43 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/RetNode.st,v 1.4 1994-01-16 03:51:44 claus Exp $
'!
!ReturnNode methodsFor:'accessing'!
@@ -31,6 +31,12 @@
blockHome := aBlockNode
! !
+!ReturnNode methodsFor:'queries'!
+
+isReturnNode
+ ^ true
+! !
+
!ReturnNode methodsFor:'evaluating'!
evaluateExpression
--- a/ReturnNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/ReturnNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -21,7 +21,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.3 1993-10-13 02:41:43 claus Exp $
+$Header: /cvs/stx/stx/libcomp/ReturnNode.st,v 1.4 1994-01-16 03:51:44 claus Exp $
'!
!ReturnNode methodsFor:'accessing'!
@@ -31,6 +31,12 @@
blockHome := aBlockNode
! !
+!ReturnNode methodsFor:'queries'!
+
+isReturnNode
+ ^ true
+! !
+
!ReturnNode methodsFor:'evaluating'!
evaluateExpression
--- a/UnaryNd.st Wed Jan 12 21:20:41 1994 +0100
+++ b/UnaryNd.st Sun Jan 16 04:51:45 1994 +0100
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.4 1994-01-09 21:30:25 claus Exp $
+$Header: /cvs/stx/stx/libcomp/Attic/UnaryNd.st,v 1.5 1994-01-16 03:51:45 claus Exp $
'!
!UnaryNode class methodsFor:'instance creation'!
@@ -126,6 +126,9 @@
evaluate
"evaluate the expression represented by the receiver"
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
^ (receiver evaluate) perform:selector
! !
--- a/UnaryNode.st Wed Jan 12 21:20:41 1994 +0100
+++ b/UnaryNode.st Sun Jan 16 04:51:45 1994 +0100
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1989 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.4 1994-01-09 21:30:25 claus Exp $
+$Header: /cvs/stx/stx/libcomp/UnaryNode.st,v 1.5 1994-01-16 03:51:45 claus Exp $
'!
!UnaryNode class methodsFor:'instance creation'!
@@ -126,6 +126,9 @@
evaluate
"evaluate the expression represented by the receiver"
+ receiver isSuper ifTrue:[
+ ^ super evaluate
+ ].
^ (receiver evaluate) perform:selector
! !