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>"
! !