ProgramNodeEnumerator.st
author Claus Gittinger <cg@exept.de>
Thu, 25 Nov 2004 15:30:33 +0100
changeset 1561 175735dcd732
parent 1146 e3e399a85be0
child 1570 8ce7594e9b55
permissions -rw-r--r--
do not check for endOfInput if parsing from a Stream

"{ Package: 'stx:libcomp' }"

Object subclass:#ProgramNodeEnumerator
	instanceVariableNames:''
	classVariableNames:''
	poolDictionaries:''
	category:'System-Compiler'
!

!ProgramNodeEnumerator class methodsFor:'documentation'!

documentation
"
    This is a pure mimicri class.
    It is not used by ST/X, but provided to support limited
    compatibility for applications which walk codetrees,
    knowing internals of ST-80's compiler class hierarchy.
    This classes protocol is not (not meant to be) fully covering
    the corresponding ST-80's classes protocol. It maps ST-80 messages
    to corresponding ST/X messages (as far as possible).

    This class was added to allow for the PD goody CodeReview to be filed
    into ST/X.

    NO WARRANTY and GUARANTEE; this class may be removed without notice.
"

! !

!ProgramNodeEnumerator class methodsFor:'instance creation'!

new
    ^ super new initialize

    "Created: 19.6.1997 / 16:52:06 / cg"
! !

!ProgramNodeEnumerator methodsFor:'enumeratiion callbacks'!

doAssignment:aNode variable:var value:val
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:49:48 / cg"
    "Modified: 19.6.1997 / 16:52:12 / cg"
!

doBlock:aNode arguments:args body:seq
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:12 / cg"
    "Modified: 19.6.1997 / 16:52:16 / cg"
!

doCascade:aNode receiver:rcvr messages:msgs
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:22 / cg"
    "Modified: 19.6.1997 / 16:52:24 / cg"
!

doLiteral:aNode value:lit
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:34 / cg"
    "Modified: 19.6.1997 / 16:52:31 / cg"
!

doMessage:aNode receiver:rcvr selector:sel arguments:args
    ^ self subclassResponsibility

    "Modified: 19.6.1997 / 16:52:42 / cg"
!

doMethod:aNode selector:sel primitive:prim block:block
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:45 / cg"
    "Modified: 19.6.1997 / 16:52:54 / cg"
!

doParameter:aNode variable:var type:type
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:50 / cg"
    "Modified: 19.6.1997 / 16:53:01 / cg"
!

doReturn:aNode value:value
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:54 / cg"
    "Modified: 19.6.1997 / 16:53:07 / cg"
!

doSequence:aNode temporaries:temps statements:stats
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:50:59 / cg"
    "Modified: 19.6.1997 / 16:53:15 / cg"
!

doVariable:aNode name:nameString
    ^ self subclassResponsibility

    "Created: 19.6.1997 / 16:51:06 / cg"
    "Modified: 19.6.1997 / 16:53:21 / cg"
! !

!ProgramNodeEnumerator methodsFor:'private'!

collectNodes:nodeList
    ^ nodeList collect:[:node | self doNode:node]

    "Created: 19.6.1997 / 16:51:31 / cg"
    "Modified: 19.6.1997 / 16:53:32 / cg"
!

doNode:aNode
    ^ aNode nodeDo:self

    "Modified: 19.6.1997 / 16:53:47 / cg"
!

doNodes:nodeList
    ^ nodeList do:[:node | self doNode:node]

    "Created: 19.6.1997 / 16:51:41 / cg"
    "Modified: 19.6.1997 / 16:53:55 / cg"
!

doType:aType
    ^ aType

    "Modified: 19.6.1997 / 16:54:05 / cg"
! !

!ProgramNodeEnumerator class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libcomp/ProgramNodeEnumerator.st,v 1.3 2001-02-01 11:33:39 cg Exp $'
! !