compiler/TCompilerPass.st
changeset 15 10a95d798b36
parent 12 d716a8181fc1
child 16 17a2d1d9f205
equal deleted inserted replaced
14:fa42d3f1a578 15:10a95d798b36
     1 "{ Package: 'jv:tea/compiler' }"
     1 "{ Package: 'jv:tea/compiler' }"
     2 
     2 
     3 "{ NameSpace: Smalltalk }"
     3 "{ NameSpace: Smalltalk }"
     4 
     4 
     5 TProgramNodeVisitor subclass:#TCompilerPass
     5 TProgramNodeVisitor subclass:#TCompilerPass
     6 	instanceVariableNames:'context currentClass currentMethod currentScope'
     6 	instanceVariableNames:'context'
     7 	classVariableNames:''
     7 	classVariableNames:''
     8 	poolDictionaries:''
     8 	poolDictionaries:''
     9 	category:'Languages-Tea-Compiler-Internals'
     9 	category:'Languages-Tea-Compiler-Internals'
    10 !
    10 !
    11 
    11 
    87     "Created: / 29-08-2015 / 21:50:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    87     "Created: / 29-08-2015 / 21:50:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    88 ! !
    88 ! !
    89 
    89 
    90 !TCompilerPass methodsFor:'visitor-double dispatching'!
    90 !TCompilerPass methodsFor:'visitor-double dispatching'!
    91 
    91 
    92 acceptBlockNode: aBlockNode
       
    93     currentScope := aBlockNode scope.
       
    94     super acceptBlockNode: aBlockNode
       
    95 
       
    96     "Created: / 02-09-2015 / 07:20:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
    97 !
       
    98 
       
    99 acceptClassDefinition: aTClassDefinition
    92 acceptClassDefinition: aTClassDefinition
   100     self visitDefinition: aTClassDefinition theMetaclass.
    93     self visitDefinition: aTClassDefinition theMetaclass.
   101 
       
   102     currentClass := aTClassDefinition.
       
   103     aTClassDefinition methodDictionary do:[:each | 
    94     aTClassDefinition methodDictionary do:[:each | 
   104         self visitDefinition: each
    95         self visitDefinition: each
   105     ].
    96     ].
   106     currentClass := nil.
       
   107 
    97 
   108     "Created: / 29-08-2015 / 21:50:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    98     "Created: / 29-08-2015 / 21:50:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   109     "Modified: / 31-08-2015 / 11:03:20 / Jan Vrany <jan.vrany@fit.cvut.cz>"
    99     "Modified: / 23-09-2015 / 06:16:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   110 !
   100 !
   111 
   101 
   112 acceptCompilationUnitDefinition: aTCompilationUnitDefinition
   102 acceptCompilationUnitDefinition: aTCompilationUnitDefinition
   113     aTCompilationUnitDefinition classes do:[:class |
   103     aTCompilationUnitDefinition classes do:[:class |
   114         self visitDefinition: class.
   104         self visitDefinition: class.
   134 
   124 
   135     "Created: / 02-09-2015 / 07:03:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   125     "Created: / 02-09-2015 / 07:03:06 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   136 !
   126 !
   137 
   127 
   138 acceptMetaclassDefinition: aTClassDefinition
   128 acceptMetaclassDefinition: aTClassDefinition
   139     currentClass := aTClassDefinition.
       
   140     aTClassDefinition methodDictionary do:[:each | 
   129     aTClassDefinition methodDictionary do:[:each | 
   141         self visitDefinition: each
   130         self visitDefinition: each
   142     ].
   131     ].
   143     currentClass := nil.
       
   144 
   132 
   145     "Created: / 29-08-2015 / 21:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   133     "Created: / 29-08-2015 / 21:54:24 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   146     "Modified: / 31-08-2015 / 11:03:35 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   134     "Modified: / 23-09-2015 / 06:16:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   147 !
   135 !
   148 
   136 
   149 acceptMethodDefinition: aTMethodDefinition
   137 acceptMethodDefinition: aTMethodDefinition
   150     currentMethod := aTMethodDefinition.
       
   151     self visitNode: aTMethodDefinition parseTree.
   138     self visitNode: aTMethodDefinition parseTree.
   152     currentMethod := nil.
       
   153 
   139 
   154     "Created: / 29-08-2015 / 21:55:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   140     "Created: / 29-08-2015 / 21:55:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   155     "Modified: / 31-08-2015 / 11:03:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   141     "Modified: / 23-09-2015 / 06:17:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
   156 !
       
   157 
       
   158 acceptMethodNode: aMethodNode
       
   159 
       
   160     currentScope := aMethodNode scope.
       
   161     self visitArguments: aMethodNode arguments.        
       
   162     self visitNode: aMethodNode returnTypeSpec. 
       
   163     "/ If method node contains inline assembly, then visit that inline assembly
       
   164     "/ node but nothing else!!
       
   165     aMethodNode body statements first isInlineAssembly ifTrue:[ 
       
   166         self visitNode: aMethodNode body statements first
       
   167     ] ifFalse:[ 
       
   168         self visitNode: aMethodNode body
       
   169     ].
       
   170 
       
   171     "Created: / 02-09-2015 / 07:16:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
       
   172 !
   142 !
   173 
   143 
   174 acceptSequenceNode: aSequenceNode 
   144 acceptSequenceNode: aSequenceNode 
   175     | last |
   145     | last |
   176     self passByNode:aSequenceNode.
   146     self passByNode:aSequenceNode.