--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/TSemanticAnalyser.st Wed Sep 02 09:18:00 2015 +0100
@@ -0,0 +1,112 @@
+"{ Package: 'jv:tea/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+TCompilerPass subclass:#TSemanticAnalyser
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Languages-Tea-Compiler'
+!
+
+!TSemanticAnalyser class methodsFor:'documentation'!
+
+documentation
+"
+ This pass analyzes the tree, creates scopes and
+ initializes variable bindings.
+
+ [author:]
+ Jan Vrany <jan.vrany@fit.cvut.cz>
+
+ [instance variables:]
+
+ [class variables:]
+
+ [see also:]
+
+"
+! !
+
+!TSemanticAnalyser methodsFor:'visitor-double dispatching'!
+
+acceptBlockNode: aBlockNode
+ aBlockNode scope: (currentScope subScope: aBlockNode).
+ super acceptBlockNode: aBlockNode
+
+ "Created: / 25-08-2015 / 22:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-09-2015 / 07:20:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptClassDefinition: aTClassDefinition
+ aTClassDefinition binding: (TClassBinding name: aTClassDefinition name).
+ super acceptClassDefinition: aTClassDefinition
+
+ "Created: / 31-08-2015 / 11:46:51 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptLiteralNode: aRBLiteralNode
+ aRBLiteralNode binding: (TConstantBinding value: aRBLiteralNode value).
+ super acceptLiteralNode: aRBLiteralNode
+
+ "Created: / 25-08-2015 / 23:17:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptMetaclassDefinition: aTClassDefinition
+ aTClassDefinition binding: (TClassBinding name: aTClassDefinition name).
+ super acceptMetaclassDefinition: aTClassDefinition
+
+ "Created: / 31-08-2015 / 11:47:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptMethodNode: aMethodNode
+ | binding scope bindingSelf |
+
+ binding := TMethodBinding class: currentClass binding selector: aMethodNode selector.
+ scope := TScope node: aMethodNode.
+ bindingSelf := TArgumentBinding name:'self'.
+ bindingSelf index: self.
+ scope addVariable: bindingSelf.
+ aMethodNode binding: binding.
+ aMethodNode scope: scope.
+
+ super acceptMethodNode: aMethodNode
+
+ "Created: / 25-08-2015 / 22:29:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-09-2015 / 08:44:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptVariableNode: aVariableNode
+ aVariableNode binding: (aVariableNode scope lookupVariable: aVariableNode name).
+ super acceptVariableNode: aVariableNode
+
+ "Created: / 25-08-2015 / 23:00:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitArgument: anRBVariableNode
+ | binding |
+
+ anRBVariableNode parent isSequence ifTrue:[
+ binding := TLocalBinding name:anRBVariableNode name.
+ ] ifFalse:[
+ binding := TArgumentBinding name:anRBVariableNode name.
+ binding index: (anRBVariableNode parent arguments indexOf: anRBVariableNode)
+ + (currentScope isMethodScope ifTrue:[1] ifFalse:[0])
+ ].
+ anRBVariableNode parent scope addVariable: binding.
+ super visitArgument: anRBVariableNode.
+
+ "Created: / 25-08-2015 / 22:51:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 02-09-2015 / 08:58:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!TSemanticAnalyser class methodsFor:'documentation'!
+
+version
+ ^ 'Path: jv/tea/compiler/TSemanticAnalyzer.st, Version: 1.0, User: jv, Time: 2015-08-31T13:47:58.729+01'
+!
+
+version_HG
+ ^ 'Path: jv/tea/compiler/TSemanticAnalyzer.st, Version: 1.0, User: jv, Time: 2015-08-31T13:47:58.729+01'
+! !
+