compiler/TCompilerPass.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 31 Aug 2015 18:37:31 +0100
changeset 5 976f21e29d37
parent 4 3d80069ea3e2
child 6 0c806a7f1888
permissions -rw-r--r--
Added TSourceReader to allow reading source files. Initial work on T environment...

"{ Package: 'jv:tea/compiler' }"

"{ NameSpace: Smalltalk }"

TProgramNodeVisitor subclass:#TCompilerPass
	instanceVariableNames:'context currentClass currentMethod'
	classVariableNames:''
	poolDictionaries:''
	category:'Languages-Tea-Compiler'
!

!TCompilerPass methodsFor:'accessing'!

context
    ^ context
!

context:aTCompilerContext
    context := aTCompilerContext.
! !

!TCompilerPass methodsFor:'running'!

run
    self run: context unit

    "Created: / 31-08-2015 / 11:52:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

run: anObject
    anObject isRingObject 
        ifTrue:[ self visitDefinition: anObject  ]
        ifFalse:[ self visitNode: anObject ]

    "Created: / 29-08-2015 / 21:45:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!TCompilerPass methodsFor:'visiting'!

visitDefinition: definition
    ^ definition acceptVisitor: self

    "Created: / 29-08-2015 / 21:50:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !

!TCompilerPass methodsFor:'visitor-double dispatching'!

acceptClassDefinition: aTClassDefinition
    self visitDefinition: aTClassDefinition theMetaclass.

    currentClass := aTClassDefinition.
    aTClassDefinition methodDictionary do:[:each | 
        self visitDefinition: each
    ].
    currentClass := nil.

    "Created: / 29-08-2015 / 21:50:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 31-08-2015 / 11:03:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

acceptMetaclassDefinition: aTClassDefinition
    currentClass := aTClassDefinition.
    aTClassDefinition methodDictionary do:[:each | 
        self visitDefinition: each
    ].
    currentClass := nil.

    "Created: / 29-08-2015 / 21:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 31-08-2015 / 11:03:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

acceptMethodDefinition: aTMethodDefinition
    currentMethod := aTMethodDefinition.
    self visitNode: aTMethodDefinition parseTree.
    currentMethod := nil.

    "Created: / 29-08-2015 / 21:55:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    "Modified: / 31-08-2015 / 11:03:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !