Added support for local variables and #whileTrue: special form
Allocate all local variables in a special basic block named
`allocas`. Added support for #whileTrue: special form.
--- a/compiler/Make.proto Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/Make.proto Wed Sep 23 22:21:44 2015 +0100
@@ -127,7 +127,6 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)TBinding.$(O) TBinding.$(H): TBinding.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TClassDefinition.$(O) TClassDefinition.$(H): TClassDefinition.st $(INCLUDE_TOP)/stx/goodies/ring/RGBehaviorDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGGlobalDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TCompilationUnitDefinition.$(O) TCompilationUnitDefinition.$(H): TCompilationUnitDefinition.st $(INCLUDE_TOP)/stx/goodies/ring/RGAbstractContainer.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TCompiler.$(O) TCompiler.$(H): TCompiler.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
@@ -138,35 +137,38 @@
$(OUTDIR)TMetaDefinition.$(O) TMetaDefinition.$(H): TMetaDefinition.st $(INCLUDE_TOP)/stx/goodies/ring/RGBehaviorDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGGlobalDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMetaclassDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TMethodDefinition.$(O) TMethodDefinition.$(H): TMethodDefinition.st $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGElementDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMethodDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TNamespaceDefinition.$(O) TNamespaceDefinition.$(H): TNamespaceDefinition.st $(INCLUDE_TOP)/stx/goodies/ring/RGAbstractContainer.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGContainer.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TObjectWithProperties.$(O) TObjectWithProperties.$(H): TObjectWithProperties.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TParser.$(O) TParser.$(H): TParser.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBParser.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TProgramNodeVisitor.$(O) TProgramNodeVisitor.$(H): TProgramNodeVisitor.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TScope.$(O) TScope.$(H): TScope.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TSourceReader.$(O) TSourceReader.$(H): TSourceReader.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TSpecialFormNode.$(O) TSpecialFormNode.$(H): TSpecialFormNode.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBMessageNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBStatementNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBValueNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TType.$(O) TType.$(H): TType.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TTypeNode.$(O) TTypeNode.$(H): TTypeNode.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TTypeSpecNode.$(O) TTypeSpecNode.$(H): TTypeSpecNode.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)jv_tea_compiler.$(O) jv_tea_compiler.$(H): jv_tea_compiler.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)TBlockType.$(O) TBlockType.$(H): TBlockType.st $(INCLUDE_TOP)/jv/tea/compiler/TType.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TClassBinding.$(O) TClassBinding.$(H): TClassBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TBinding.$(O) TBinding.$(H): TBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TCompilerPass.$(O) TCompilerPass.$(H): TCompilerPass.st $(INCLUDE_TOP)/jv/tea/compiler/TProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TEnvironment.$(O) TEnvironment.$(H): TEnvironment.st $(INCLUDE_TOP)/jv/tea/compiler/TNamespaceDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGAbstractContainer.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGContainer.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGNamespace.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TFilesystemProvider.$(O) TFilesystemProvider.$(H): TFilesystemProvider.st $(INCLUDE_TOP)/jv/tea/compiler/TEnvironmentProvider.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TFunctionBinding.$(O) TFunctionBinding.$(H): TFunctionBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TNamespaceBinding.$(O) TNamespaceBinding.$(H): TNamespaceBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TSimpleType.$(O) TSimpleType.$(H): TSimpleType.st $(INCLUDE_TOP)/jv/tea/compiler/TType.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TScope.$(O) TScope.$(H): TScope.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TSimpleTypeNode.$(O) TSimpleTypeNode.$(H): TSimpleTypeNode.st $(INCLUDE_TOP)/jv/tea/compiler/TTypeNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TValueBinding.$(O) TValueBinding.$(H): TValueBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TBlockBinding.$(O) TBlockBinding.$(H): TBlockBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TFunctionBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TConstantBinding.$(O) TConstantBinding.$(H): TConstantBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TType.$(O) TType.$(H): TType.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TAutomaticType.$(O) TAutomaticType.$(H): TAutomaticType.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TType.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TBlockType.$(O) TBlockType.$(H): TBlockType.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TType.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TClassBinding.$(O) TClassBinding.$(H): TClassBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TFunctionBinding.$(O) TFunctionBinding.$(H): TFunctionBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TLLVMCodeGenerator.$(O) TLLVMCodeGenerator.$(H): TLLVMCodeGenerator.st $(INCLUDE_TOP)/jv/tea/compiler/TCompilerPass.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TMethodBinding.$(O) TMethodBinding.$(H): TMethodBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TFunctionBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TNamespaceBinding.$(O) TNamespaceBinding.$(H): TNamespaceBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TSemanticAnalyser.$(O) TSemanticAnalyser.$(H): TSemanticAnalyser.st $(INCLUDE_TOP)/jv/tea/compiler/TCompilerPass.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TSimpleType.$(O) TSimpleType.$(H): TSimpleType.st $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TType.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
$(OUTDIR)TTypechecker.$(O) TTypechecker.$(H): TTypechecker.st $(INCLUDE_TOP)/jv/tea/compiler/TCompilerPass.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TVariableBinding.$(O) TVariableBinding.$(H): TVariableBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TArgumentBinding.$(O) TArgumentBinding.$(H): TArgumentBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TVariableBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)TLocalBinding.$(O) TLocalBinding.$(H): TLocalBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TVariableBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBBlockNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBMethodNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBReturnNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBStatementNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBToken.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBValueNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBVariableNode.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGBehaviorDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGElementDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGGlobalDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMetaclassDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMethodDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TValueBinding.$(O) TValueBinding.$(H): TValueBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TBlockBinding.$(O) TBlockBinding.$(H): TBlockBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TFunctionBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TConstantBinding.$(O) TConstantBinding.$(H): TConstantBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TMethodBinding.$(O) TMethodBinding.$(H): TMethodBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TFunctionBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TVariableBinding.$(O) TVariableBinding.$(H): TVariableBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TArgumentBinding.$(O) TArgumentBinding.$(H): TArgumentBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TVariableBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)TLocalBinding.$(O) TLocalBinding.$(H): TLocalBinding.st $(INCLUDE_TOP)/jv/tea/compiler/TBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TObjectWithProperties.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TValueBinding.$(H) $(INCLUDE_TOP)/jv/tea/compiler/TVariableBinding.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBAssignmentNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBBlockNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBMethodNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBProgramNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBReturnNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBStatementNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBToken.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBValueNode.$(H) $(INCLUDE_TOP)/stx/goodies/refactoryBrowser/parser/RBVariableNode.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGBehaviorDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGElementDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGGlobalDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMetaclassDefinition.$(H) $(INCLUDE_TOP)/stx/goodies/ring/RGMethodDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/compiler/Make.spec Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/Make.spec Wed Sep 23 22:21:44 2015 +0100
@@ -51,7 +51,6 @@
STCWARNINGS=-warnNonStandard
COMMON_CLASSES= \
- TBinding \
TClassDefinition \
TCompilationUnitDefinition \
TCompiler \
@@ -62,31 +61,34 @@
TMetaDefinition \
TMethodDefinition \
TNamespaceDefinition \
+ TObjectWithProperties \
TParser \
TProgramNodeVisitor \
- TScope \
TSourceReader \
TSpecialFormNode \
- TType \
TTypeNode \
TTypeSpecNode \
jv_tea_compiler \
- TBlockType \
- TClassBinding \
+ TBinding \
TCompilerPass \
TEnvironment \
TFilesystemProvider \
+ TScope \
+ TSimpleTypeNode \
+ TType \
+ TAutomaticType \
+ TBlockType \
+ TClassBinding \
TFunctionBinding \
+ TLLVMCodeGenerator \
TNamespaceBinding \
+ TSemanticAnalyser \
TSimpleType \
- TSimpleTypeNode \
+ TTypechecker \
TValueBinding \
TBlockBinding \
TConstantBinding \
- TLLVMCodeGenerator \
TMethodBinding \
- TSemanticAnalyser \
- TTypechecker \
TVariableBinding \
TArgumentBinding \
TLocalBinding \
@@ -95,7 +97,6 @@
COMMON_OBJS= \
- $(OUTDIR_SLASH)TBinding.$(O) \
$(OUTDIR_SLASH)TClassDefinition.$(O) \
$(OUTDIR_SLASH)TCompilationUnitDefinition.$(O) \
$(OUTDIR_SLASH)TCompiler.$(O) \
@@ -106,31 +107,34 @@
$(OUTDIR_SLASH)TMetaDefinition.$(O) \
$(OUTDIR_SLASH)TMethodDefinition.$(O) \
$(OUTDIR_SLASH)TNamespaceDefinition.$(O) \
+ $(OUTDIR_SLASH)TObjectWithProperties.$(O) \
$(OUTDIR_SLASH)TParser.$(O) \
$(OUTDIR_SLASH)TProgramNodeVisitor.$(O) \
- $(OUTDIR_SLASH)TScope.$(O) \
$(OUTDIR_SLASH)TSourceReader.$(O) \
$(OUTDIR_SLASH)TSpecialFormNode.$(O) \
- $(OUTDIR_SLASH)TType.$(O) \
$(OUTDIR_SLASH)TTypeNode.$(O) \
$(OUTDIR_SLASH)TTypeSpecNode.$(O) \
$(OUTDIR_SLASH)jv_tea_compiler.$(O) \
- $(OUTDIR_SLASH)TBlockType.$(O) \
- $(OUTDIR_SLASH)TClassBinding.$(O) \
+ $(OUTDIR_SLASH)TBinding.$(O) \
$(OUTDIR_SLASH)TCompilerPass.$(O) \
$(OUTDIR_SLASH)TEnvironment.$(O) \
$(OUTDIR_SLASH)TFilesystemProvider.$(O) \
+ $(OUTDIR_SLASH)TScope.$(O) \
+ $(OUTDIR_SLASH)TSimpleTypeNode.$(O) \
+ $(OUTDIR_SLASH)TType.$(O) \
+ $(OUTDIR_SLASH)TAutomaticType.$(O) \
+ $(OUTDIR_SLASH)TBlockType.$(O) \
+ $(OUTDIR_SLASH)TClassBinding.$(O) \
$(OUTDIR_SLASH)TFunctionBinding.$(O) \
+ $(OUTDIR_SLASH)TLLVMCodeGenerator.$(O) \
$(OUTDIR_SLASH)TNamespaceBinding.$(O) \
+ $(OUTDIR_SLASH)TSemanticAnalyser.$(O) \
$(OUTDIR_SLASH)TSimpleType.$(O) \
- $(OUTDIR_SLASH)TSimpleTypeNode.$(O) \
+ $(OUTDIR_SLASH)TTypechecker.$(O) \
$(OUTDIR_SLASH)TValueBinding.$(O) \
$(OUTDIR_SLASH)TBlockBinding.$(O) \
$(OUTDIR_SLASH)TConstantBinding.$(O) \
- $(OUTDIR_SLASH)TLLVMCodeGenerator.$(O) \
$(OUTDIR_SLASH)TMethodBinding.$(O) \
- $(OUTDIR_SLASH)TSemanticAnalyser.$(O) \
- $(OUTDIR_SLASH)TTypechecker.$(O) \
$(OUTDIR_SLASH)TVariableBinding.$(O) \
$(OUTDIR_SLASH)TArgumentBinding.$(O) \
$(OUTDIR_SLASH)TLocalBinding.$(O) \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/TAutomaticType.st Wed Sep 23 22:21:44 2015 +0100
@@ -0,0 +1,41 @@
+"{ Package: 'jv:tea/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+TType subclass:#TAutomaticType
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Languages-Tea-Compiler-Types'
+!
+
+!TAutomaticType methodsFor:'comparing'!
+
+= anotherType
+ ^ anotherType class == self class
+
+ "Created: / 23-09-2015 / 16:26:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+hash
+ ^ self class hash
+
+ "Created: / 23-09-2015 / 16:26:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!TAutomaticType methodsFor:'printing & storing'!
+
+printWithoutAnglesOn:aStream
+ aStream nextPutAll: '#auto'
+
+ "Created: / 23-09-2015 / 16:27:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!TAutomaticType methodsFor:'testing'!
+
+isAutomaticType
+ ^ true
+
+ "Created: / 23-09-2015 / 16:32:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/TBinding.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TBinding.st Wed Sep 23 22:21:44 2015 +0100
@@ -2,7 +2,7 @@
"{ NameSpace: Smalltalk }"
-Object subclass:#TBinding
+TObjectWithProperties subclass:#TBinding
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
--- a/compiler/TCompilerPass.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TCompilerPass.st Wed Sep 23 22:21:44 2015 +0100
@@ -3,7 +3,7 @@
"{ NameSpace: Smalltalk }"
TProgramNodeVisitor subclass:#TCompilerPass
- instanceVariableNames:'context currentClass currentMethod currentScope'
+ instanceVariableNames:'context'
classVariableNames:''
poolDictionaries:''
category:'Languages-Tea-Compiler-Internals'
@@ -89,24 +89,14 @@
!TCompilerPass methodsFor:'visitor-double dispatching'!
-acceptBlockNode: aBlockNode
- currentScope := aBlockNode scope.
- super acceptBlockNode: aBlockNode
-
- "Created: / 02-09-2015 / 07:20:59 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
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>"
+ "Modified: / 23-09-2015 / 06:16:03 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptCompilationUnitDefinition: aTCompilationUnitDefinition
@@ -136,39 +126,19 @@
!
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>"
+ "Modified: / 23-09-2015 / 06:16:10 / 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>"
-!
-
-acceptMethodNode: aMethodNode
-
- currentScope := aMethodNode scope.
- self visitArguments: aMethodNode arguments.
- self visitNode: aMethodNode returnTypeSpec.
- "/ If method node contains inline assembly, then visit that inline assembly
- "/ node but nothing else!!
- aMethodNode body statements first isInlineAssembly ifTrue:[
- self visitNode: aMethodNode body statements first
- ] ifFalse:[
- self visitNode: aMethodNode body
- ].
-
- "Created: / 02-09-2015 / 07:16:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 06:17:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptSequenceNode: aSequenceNode
--- a/compiler/TFunctionBinding.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TFunctionBinding.st Wed Sep 23 22:21:44 2015 +0100
@@ -26,6 +26,20 @@
"Modified: / 02-09-2015 / 17:02:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!TFunctionBinding methodsFor:'accesssing - llvm'!
+
+llvmValue
+ ^ self propertyAt: #llvmValue ifAbsent:[ nil ]
+
+ "Created: / 23-09-2015 / 21:14:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+llvmValue: anLLVMValue
+ self propertyAt: #llvmValue put: anLLVMValue
+
+ "Created: / 23-09-2015 / 21:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!TFunctionBinding methodsFor:'converting'!
asLLVMValueInModule: aLLVMModule
--- a/compiler/TLLVMCodeGenerator.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TLLVMCodeGenerator.st Wed Sep 23 22:21:44 2015 +0100
@@ -9,6 +9,7 @@
category:'Languages-Tea-Compiler-Internals'
!
+
!TLLVMCodeGenerator class methodsFor:'initialization'!
initialize
@@ -79,16 +80,25 @@
!TLLVMCodeGenerator methodsFor:'visiting'!
visitArgument: anRBVariableNode
- | binding |
+ | binding value |
binding := anRBVariableNode binding.
- binding isArgumentBinding ifTrue:[
- (function parameterAt: binding index) name: anRBVariableNode name.
+ binding isArgumentBinding ifTrue:[
+ value := function parameterAt: binding index.
+ value name: binding name.
] ifFalse:[
- self notYetImplemented.
+ | block allocas |
+
+ allocas := anRBVariableNode scope llvmAllocas.
+ block := asm block.
+ asm block: allocas.
+ value := asm alloca: (binding type asLLVMTypeInModule: context module) as: binding name.
+ asm block: block.
].
+ binding llvmValue: value.
"Created: / 02-09-2015 / 08:43:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 21:47:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!TLLVMCodeGenerator methodsFor:'visitor-double dispatching'!
@@ -100,9 +110,15 @@
!
acceptAssignmentNode: anAssignmentNode
- self notYetImplemented
+ | value binding |
+
+ value := self visitNode: anAssignmentNode value.
+ binding := anAssignmentNode variable binding.
+ asm store: value _: binding llvmValue.
+ ^ value
"Created: / 31-08-2015 / 10:14:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 21:52:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptBlockNode: aBlockNode
@@ -151,25 +167,27 @@
"Modified: / 16-09-2015 / 05:28:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
-acceptInlineAssemblyNode: aTInlineAssemblyNode
- | emitMethodNode emitMethod|
+acceptIfTrueNode: node
+ | condition thenBody thenBlock thenResult joinBlock result |
+
+ condition := self visitNode: node receiver.
+ thenBody := node arguments first body.
+ thenBlock := function addBasicBlock.
+
+ joinBlock := function addBasicBlock.
- emitMethodNode := RBMethodNode new.
- emitMethodNode arguments: (aTInlineAssemblyNode arguments collect:[ :e|e copy]) , { RBVariableNode named: 'zelf' } , (aTInlineAssemblyNode topNode arguments collect:[ :e|e copy]).
- emitMethodNode body: aTInlineAssemblyNode body copy.
- emitMethodNode variableNodesDo:[ :variableNode |
- variableNode name = 'self' ifTrue:[
- variableNode name: 'zelf'.
- ].
+ asm if: condition then: thenBlock else: joinBlock.
+ "/ Code true-branch
+ asm block: thenBlock.
+ thenResult := self visitNode: thenBody.
+ thenResult isReturnInst ifFalse:[
+ joinBlock notNil ifTrue:[ joinBlock function addBasicBlock ].
+ asm br: joinBlock.
].
- emitMethodNode selector:(String streamContents: [ :s | emitMethodNode arguments size timesRepeat:[s nextPutAll:'_:'] ]).
- emitMethod := Compiler compile: emitMethodNode formattedCode forClass: UndefinedObject install: false.
- emitMethod
- valueWithReceiver: nil
- arguments: { asm } , ((1 to: function numArgs) collect: [ :i | function parameterAt: i ])
- "Created: / 02-09-2015 / 06:53:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 02-09-2015 / 10:30:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ asm block: joinBlock.
+
+ "Created: / 23-09-2015 / 21:57:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptLiteralNode: aLiteralNode
@@ -193,13 +211,20 @@
!
acceptMethodNode: aMethodNode
+ | allocas entry |
+
function := aMethodNode binding asLLVMValueInModule: context module.
- asm := function builder.
- super acceptMethodNode: aMethodNode
+ allocas := function addBasicBlockNamed: 'allocas'.
+ entry := function addBasicBlockNamed: 'entry'.
+ aMethodNode scope llvmAllocas: allocas.
+ asm := entry builder.
+ super acceptMethodNode: aMethodNode.
+ "/ Finally, link allocas to entry.
+ asm block: allocas.
+ asm br: entry.
"Created: / 31-08-2015 / 09:42:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 15-09-2015 / 07:17:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified (format): / 15-09-2015 / 08:17:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 22:32:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptOptimizedNode: anOptimizedNode
@@ -214,6 +239,32 @@
"Created: / 31-08-2015 / 10:13:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
+acceptPrimitiveNode: aPragmaNode
+ | primitiveBlock methodIsForMeta emitMethodNode emitMethod |
+
+ primitiveBlock := aPragmaNode arguments first.
+ methodIsForMeta := aPragmaNode parent binding mclass isMetaclass.
+ emitMethodNode := RBMethodNode new.
+ emitMethodNode arguments:
+ (primitiveBlock arguments collect:[ :e|e copy]) ,
+ (methodIsForMeta ifFalse:[{ RBVariableNode named: 'zelf' }] ifTrue:[#()]) ,
+ (primitiveBlock topNode arguments collect:[ :e|e copy]).
+ emitMethodNode body: primitiveBlock body copy.
+ emitMethodNode variableNodesDo:[ :variableNode |
+ variableNode name = 'self' ifTrue:[
+ variableNode name: 'zelf'.
+ ].
+ ].
+ emitMethodNode selector:(String streamContents: [ :s | emitMethodNode arguments size timesRepeat:[s nextPutAll:'_:'] ]).
+ emitMethod := Compiler compile: emitMethodNode formattedCode forClass: UndefinedObject install: false.
+ emitMethod
+ valueWithReceiver: nil
+ arguments: { asm } , ((1 to: function numArgs) collect: [ :i | function parameterAt: i ])
+
+ "Created: / 22-09-2015 / 18:03:33 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 06:27:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
acceptReturnNode: aReturnNode
| value |
@@ -237,9 +288,49 @@
!
acceptVariableNode: aVariableNode
- self notYetImplemented
+ | binding |
+
+ binding := aVariableNode binding.
+ ^ binding isArgumentBinding ifTrue:[
+ binding llvmValue.
+ ] ifFalse:[
+ asm load: binding llvmValue.
+ ].
"Created: / 31-08-2015 / 10:13:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 22:30:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptWhileTrueNode: node
+ | loopConditionBlock loopConditionBody loopConditionResult loopBodyBody loopBodyBlock loopBodyResult joinBlock |
+
+ loopConditionBody := node receiver body.
+ loopConditionBlock := function addBasicBlock.
+
+ loopBodyBody := node arguments first body.
+ loopBodyBlock := function addBasicBlock.
+
+ joinBlock := function addBasicBlock.
+
+ asm br: loopConditionBlock.
+ asm block: loopConditionBlock.
+ loopConditionResult := self visitNode: loopConditionBody.
+ asm if: loopConditionResult then: loopBodyBlock else: joinBlock.
+ asm block: loopBodyBlock.
+ loopBodyResult := self visitNode: loopBodyBody.
+ loopBodyResult isReturnInst ifFalse:[
+ asm br: loopConditionBlock
+ ].
+ asm block: joinBlock
+
+ "Created: / 23-09-2015 / 22:02:39 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!TLLVMCodeGenerator class methodsFor:'documentation'!
+
+version_HG
+
+ ^ '$Changeset: <not expanded> $'
! !
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/compiler/TObjectWithProperties.st Wed Sep 23 22:21:44 2015 +0100
@@ -0,0 +1,95 @@
+"{ Package: 'jv:tea/compiler' }"
+
+"{ NameSpace: Smalltalk }"
+
+Object subclass:#TObjectWithProperties
+ instanceVariableNames:'properties'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Languages-Tea-Compiler-Internals'
+!
+
+!TObjectWithProperties methodsFor:'accessing-properties'!
+
+hasProperty: aKey
+ "Test if the property aKey is present."
+
+ ^ properties notNil and: [ properties includesKey: aKey ]
+
+ "Created: / 20-08-2015 / 18:25:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+propertyAt: aKey
+ "Answer the property value associated with aKey."
+
+ ^ self propertyAt: aKey ifAbsent: [ self error: 'Property not found' ]
+
+ "Created: / 20-08-2015 / 18:23:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+propertyAt: aKey ifAbsent: aBlock
+ "Answer the property value associated with aKey or, if aKey
+ isn't found, answer the result of evaluating aBlock."
+
+ ^ properties isNil
+ ifTrue: [ aBlock value ]
+ ifFalse: [ properties at: aKey ifAbsent: aBlock ]
+
+ "Created: / 20-08-2015 / 18:23:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+propertyAt: aKey ifAbsentPut: aBlock
+ "Answer the property associated with aKey or, if aKey isn't found
+ store the result of evaluating aBlock as new value."
+
+ ^ self propertyAt: aKey ifAbsent: [ self propertyAt: aKey put: aBlock value ]
+
+ "Created: / 20-08-2015 / 18:24:09 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+propertyAt: aKey put: anObject
+ "Set the property at aKey to be anObject. If aKey is not found, create a new entry
+ for aKey and set is value to anObject. Answer anObject."
+
+ ^ (properties ifNil: [ properties := RBSmallDictionary new: 1 ])
+ at: aKey put: anObject
+
+ "Created: / 20-08-2015 / 18:24:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+removeProperty: aKey
+ "Remove the property with aKey. Answer the property or raise
+ an error if aKey isn't found."
+
+ ^ self removeProperty: aKey ifAbsent: [ self error: 'Property not found' ].
+
+ "Created: / 20-08-2015 / 18:30:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+removeProperty: aKey ifAbsent: aBlock
+ "Remove the property with aKey. Answer the value or, if aKey isn't found, answer the result of evaluating aBlock."
+
+ | answer |
+ properties isNil ifTrue: [ ^ aBlock value ].
+ answer := properties removeKey: aKey ifAbsent: aBlock.
+ properties isEmpty ifTrue: [ properties := nil ].
+ ^ answer
+
+ "Created: / 20-08-2015 / 18:30:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!TObjectWithProperties methodsFor:'attributes access'!
+
+objectAttributes
+ ^ properties
+
+ "Created: / 20-08-2015 / 18:32:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified (format): / 23-09-2015 / 21:11:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+objectAttributes:aCollection
+ properties := aCollection
+
+ "Created: / 23-09-2015 / 21:11:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/TScope.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TScope.st Wed Sep 23 22:21:44 2015 +0100
@@ -2,7 +2,7 @@
"{ NameSpace: Smalltalk }"
-Object subclass:#TScope
+TObjectWithProperties subclass:#TScope
instanceVariableNames:'node parent children variables'
classVariableNames:''
poolDictionaries:''
@@ -45,6 +45,21 @@
"Modified: / 19-09-2015 / 05:56:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!TScope methodsFor:'accesssing - llvm'!
+
+llvmAllocas
+ ^ self propertyAt: #llvmAllocas
+ ifAbsent: [ parent notNil ifTrue:[ parent llvmAllocas ] ifFalse:[nil] ]
+
+ "Created: / 23-09-2015 / 21:42:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+llvmAllocas: anLLVMBasicBlock
+ self propertyAt: #llvmAllocas put: anLLVMBasicBlock
+
+ "Created: / 23-09-2015 / 21:40:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!TScope methodsFor:'adding & removing'!
addSubScope: aTScope
@@ -97,6 +112,12 @@
!TScope methodsFor:'testing'!
+hasSelfArgument
+ ^ (node isMethod and:[node binding mclass isMetaclass not])
+
+ "Created: / 23-09-2015 / 18:48:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
isBlockScope
^ node isBlock
--- a/compiler/TSemanticAnalyser.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TSemanticAnalyser.st Wed Sep 23 22:21:44 2015 +0100
@@ -40,29 +40,69 @@
] ifFalse:[
binding := TArgumentBinding name:anRBVariableNode name.
binding index: (anRBVariableNode parent arguments indexOf: anRBVariableNode)
- + (anRBVariableNode parent scope isMethodScope ifTrue:[1] ifFalse:[0])
+ + (anRBVariableNode parent scope hasSelfArgument 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: / 19-09-2015 / 06:17:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 18:48:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!TSemanticAnalyser methodsFor:'visitor-double dispatching'!
acceptBlockNode: aBlockNode
- | scope |
+ | scope binding |
aBlockNode parent isSpecialFormNode ifTrue:[
scope := TScope node: aBlockNode parent: aBlockNode parent scope
] ifFalse:[
scope := TScope node: aBlockNode
].
aBlockNode scope: scope.
+
+ binding := TBlockBinding new.
+ binding parameterTypes: aBlockNode parameterTypes.
+ binding returnType: aBlockNode returnType.
+ aBlockNode binding: binding.
+
super acceptBlockNode: aBlockNode
"Created: / 25-08-2015 / 22:30:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 19-09-2015 / 06:16:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 16:31:36 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptIfTrueIfFalseNode: node
+ node arguments first isBlock ifFalse:[
+ context reportSemanticError: 'First argument (true block) of ifTrue:ifFalse: special form is not a block'.
+ ] ifTrue:[
+ node arguments first arguments notEmptyOrNil ifTrue:[
+ context reportSemanticError: 'First argument (true block) of ifTrue::ifFalse: special form may not have any arguments'.
+ ]
+ ].
+ node arguments second isBlock ifFalse:[
+ context reportSemanticError: 'Second argument (false block) of ifTrue:ifFalse: special form is not a block'.
+ ] ifTrue:[
+ node arguments second arguments notEmptyOrNil ifTrue:[
+ context reportSemanticError: 'Second argument (false block) of ifTrue::ifFalse: special form may not have any arguments'.
+ ]
+ ].
+
+ ^ self acceptMessageNode: node.
+
+ "Created: / 23-09-2015 / 14:20:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptIfTrueNode: node
+ node arguments first isBlock ifFalse:[
+ context reportSemanticError: 'Argument (true block) of ifTrue: special form is not a block'.
+ ] ifTrue:[
+ node arguments first arguments notEmptyOrNil ifTrue:[
+ context reportSemanticError: 'Argument (true block) of ifTrue: special form may not have any arguments'.
+ ]
+ ].
+ self acceptMessageNode: node
+
+ "Created: / 23-09-2015 / 14:18:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptLiteralNode: aRBLiteralNode
@@ -89,7 +129,7 @@
scope := TScope node: aMethodNode.
bindingForSelf := TArgumentBinding name:'self'.
- bindingForSelf index: self.
+ bindingForSelf index: 1.
scope addVariable: bindingForSelf.
aMethodNode scope: scope.
@@ -97,7 +137,7 @@
super acceptMethodNode: aMethodNode
"Created: / 25-08-2015 / 22:29:21 / Jan Vrany <jan.vrany@fit.cvut.cz>"
- "Modified: / 13-09-2015 / 09:30:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 18:31:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
acceptVariableNode: aVariableNode
@@ -113,6 +153,26 @@
"Created: / 25-08-2015 / 23:00:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 20-09-2015 / 06:14:37 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptWhileTrueNode: node
+ node receiver isBlock ifFalse:[
+ context reportSemanticError: 'Receiver (condition) of whileTrue: special form is not a block'.
+ ] ifTrue:[
+ node receiver arguments notEmptyOrNil ifTrue:[
+ context reportSemanticError: 'Receiver (condition) of whileTrue: special form may not have any arguments'.
+ ]
+ ].
+ node arguments first isBlock ifFalse:[
+ context reportSemanticError: 'Argument (loop body) of whileTrue: special form is not a block'.
+ ] ifTrue:[
+ node arguments first arguments notEmptyOrNil ifTrue:[
+ context reportSemanticError: 'Argument (loop body) of whileTrue: special form may not have any arguments'.
+ ]
+ ].
+ super acceptWhileTrueNode: node
+
+ "Created: / 23-09-2015 / 14:10:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!TSemanticAnalyser class methodsFor:'documentation'!
--- a/compiler/TSimpleType.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TSimpleType.st Wed Sep 23 22:21:44 2015 +0100
@@ -70,14 +70,6 @@
!TSimpleType methodsFor:'printing & storing'!
-printOn:aStream
- aStream nextPut: $<; space.
- self printWithoutAnglesOn:aStream.
- aStream space; nextPut: $>.
-
- "Created: / 25-08-2015 / 23:22:15 / Jan Vrany <jan.vrany@fit.cvut.cz>"
-!
-
printWithoutAnglesOn:aStream
aStream nextPutAll: name
--- a/compiler/TType.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TType.st Wed Sep 23 22:21:44 2015 +0100
@@ -2,7 +2,7 @@
"{ NameSpace: Smalltalk }"
-Object subclass:#TType
+TObjectWithProperties subclass:#TType
instanceVariableNames:''
classVariableNames:''
poolDictionaries:''
@@ -37,9 +37,9 @@
printOn:aStream
aStream nextPut: $<; space.
self printWithoutAnglesOn:aStream.
- aStream nextPut: $>; space.
+ aStream space; nextPut: $>.
- "Modified: / 21-08-2015 / 13:46:25 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 16:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!
printWithoutAnglesOn:aStream
@@ -50,6 +50,12 @@
!TType methodsFor:'testing'!
+isAutomaticType
+ ^ false
+
+ "Created: / 23-09-2015 / 16:32:28 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
isBlockType
^ false
@@ -73,6 +79,6 @@
!
version_HG
- ^ 'Path: jv/tea/compiler/TType.st, Version: 1.0, User: jv, Time: 2015-08-26T07:46:38.380+01'
+ ^ '$Path: jv/tea/compiler/TType.st, Version: 1.0, User: jv, Time: 2015-08-26T07:46:38.380+01$'
! !
--- a/compiler/TTypechecker.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TTypechecker.st Wed Sep 23 22:21:44 2015 +0100
@@ -25,6 +25,24 @@
!TTypechecker methodsFor:'visitor-double dispatching'!
+acceptBlockNode: aBlockNode
+ | formalType actualType |
+
+ super acceptBlockNode: aBlockNode.
+
+ formalType := aBlockNode binding type.
+ actualType := aBlockNode body statements last binding type.
+ formalType isAutomaticType ifTrue:[
+ aBlockNode binding returnType: actualType.
+ ] ifFalse:[
+ formalType = actualType ifFalse:[
+ context reportTypeError: ('Block return type is specified as %1 but actually is %3' bindWith: formalType with: actualType).
+ ].
+ ].
+
+ "Created: / 23-09-2015 / 16:44:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
acceptIfTrueIfFalseNode: node
| receiverType booleanType |
@@ -94,6 +112,25 @@
"Created: / 02-09-2015 / 10:34:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
"Modified: / 14-09-2015 / 14:22:41 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+acceptWhileTrueNode: node
+ | receiverType booleanType |
+
+ (node isCascaded not or: [node isFirstCascaded]) ifTrue: [
+ self visitNode: node receiver
+ ].
+ node arguments do: [:each | self visitNode: each].
+
+ receiverType := node receiver binding type.
+ booleanType := context environment binding lookupClassBoolean type.
+
+ receiverType = booleanType ifFalse:[
+ context reportTypeError: 'receiver of ifTrue:ifFalse: special form must be of type tBoolean (is ' , receiverType printString.
+ ].
+
+ "Created: / 23-09-2015 / 14:06:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+ "Modified: / 23-09-2015 / 16:46:57 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
!TTypechecker class methodsFor:'documentation'!
--- a/compiler/TValueBinding.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/TValueBinding.st Wed Sep 23 22:21:44 2015 +0100
@@ -33,3 +33,17 @@
"Created: / 31-08-2015 / 11:49:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
! !
+!TValueBinding methodsFor:'accesssing - llvm'!
+
+llvmValue
+ ^ self propertyAt: #llvmValue ifAbsent:[ nil ]
+
+ "Created: / 23-09-2015 / 21:14:27 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+llvmValue: anLLVMValue
+ self propertyAt: #llvmValue put: anLLVMValue
+
+ "Created: / 23-09-2015 / 21:14:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- a/compiler/abbrev.stc Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/abbrev.stc Wed Sep 23 22:21:44 2015 +0100
@@ -1,48 +1,50 @@
# automagically generated by the project definition
# this file is needed for stc to be able to compile modules independently.
# it provides information about a classes filename, category and especially namespace.
-TBinding TBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TClassDefinition TClassDefinition jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TCompilationUnitDefinition TCompilationUnitDefinition jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TCompiler TCompiler jv:tea/compiler 'Languages-Tea-Compiler' 0
TCompilerContext TCompilerContext jv:tea/compiler 'Languages-Tea-Compiler' 0
TCompilerError TCompilerError jv:tea/compiler 'Languages-Tea-Compiler-Exceptions' 1
+TCompilerExamples TCompilerExamples jv:tea/compiler 'Languages-Tea-Compiler-Examples' 1
TEnvironmentProvider TEnvironmentProvider jv:tea/compiler 'Languages-Tea-Compiler-Model-Provider' 0
TFormatter TFormatter jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
TMetaDefinition TMetaDefinition jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TMethodDefinition TMethodDefinition jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TNamespaceDefinition TNamespaceDefinition jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
+TObjectWithProperties TObjectWithProperties jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TParser TParser jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
-TParserTests TParserTests jv:tea/compiler 'Languages-Tea-Compiler-AST-Tests' 1
TProgramNodeVisitor TProgramNodeVisitor jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
-TScope TScope jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TSourceReader TSourceReader jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TSpecialFormNode TSpecialFormNode jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
-TType TType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
TTypeNode TTypeNode jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
TTypeSpecNode TTypeSpecNode jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
jv_tea_compiler jv_tea_compiler jv:tea/compiler '* Projects & Packages *' 3
-TBlockType TBlockType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
-TClassBinding TClassBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
+TBinding TBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TCompilerPass TCompilerPass jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TEnvironment TEnvironment jv:tea/compiler 'Languages-Tea-Compiler-Model' 0
TFilesystemProvider TFilesystemProvider jv:tea/compiler 'Languages-Tea-Compiler-Model-Provider' 0
+TScope TScope jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
+TSimpleTypeNode TSimpleTypeNode jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
+TType TType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
+TAutomaticType TAutomaticType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
+TBlockType TBlockType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
+TClassBinding TClassBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TFunctionBinding TFunctionBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
+TLLVMCodeGenerator TLLVMCodeGenerator jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TNamespaceBinding TNamespaceBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
+TSemanticAnalyser TSemanticAnalyser jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TSimpleType TSimpleType jv:tea/compiler 'Languages-Tea-Compiler-Types' 0
-TSimpleTypeNode TSimpleTypeNode jv:tea/compiler 'Languages-Tea-Compiler-AST' 0
+TTypechecker TTypechecker jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TValueBinding TValueBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TBlockBinding TBlockBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TConstantBinding TConstantBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
-TLLVMCodeGenerator TLLVMCodeGenerator jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TMethodBinding TMethodBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
-TSemanticAnalyser TSemanticAnalyser jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
-TTypechecker TTypechecker jv:tea/compiler 'Languages-Tea-Compiler-Internals' 0
TVariableBinding TVariableBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TArgumentBinding TArgumentBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
TLocalBinding TLocalBinding jv:tea/compiler 'Languages-Tea-Compiler-Bindings' 0
-TCompilerExamples TCompilerExamples jv:tea/compiler 'Languages-Tea-Compiler-Examples' 1
TMethodDefinitionTests TMethodDefinitionTests jv:tea/compiler 'Languages-Tea-Compiler-Model-Tests' 1
+TParserTests TParserTests jv:tea/compiler 'Languages-Tea-Compiler-AST-Tests' 1
TSemanticAnalyserTests TSemanticAnalyserTests jv:tea/compiler 'Languages-Tea-Compiler-Internals-Tests' 1
TSourceReaderTests TSourceReaderTests jv:tea/compiler 'Languages-Tea-Compiler-Model-Tests' 1
TTypecheckerTests TTypecheckerTests jv:tea/compiler 'Languages-Tea-Compiler-Internals-Tests' 1
--- a/compiler/bc.mak Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/bc.mak Wed Sep 23 22:21:44 2015 +0100
@@ -74,7 +74,6 @@
# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)TBinding.$(O) TBinding.$(H): TBinding.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TClassDefinition.$(O) TClassDefinition.$(H): TClassDefinition.st $(INCLUDE_TOP)\stx\goodies\ring\RGBehaviorDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGGlobalDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TCompilationUnitDefinition.$(O) TCompilationUnitDefinition.$(H): TCompilationUnitDefinition.st $(INCLUDE_TOP)\stx\goodies\ring\RGAbstractContainer.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TCompiler.$(O) TCompiler.$(H): TCompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
@@ -85,35 +84,38 @@
$(OUTDIR)TMetaDefinition.$(O) TMetaDefinition.$(H): TMetaDefinition.st $(INCLUDE_TOP)\stx\goodies\ring\RGBehaviorDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGGlobalDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMetaclassDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TMethodDefinition.$(O) TMethodDefinition.$(H): TMethodDefinition.st $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGElementDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMethodDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TNamespaceDefinition.$(O) TNamespaceDefinition.$(H): TNamespaceDefinition.st $(INCLUDE_TOP)\stx\goodies\ring\RGAbstractContainer.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGContainer.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TObjectWithProperties.$(O) TObjectWithProperties.$(H): TObjectWithProperties.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TParser.$(O) TParser.$(H): TParser.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBParser.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TProgramNodeVisitor.$(O) TProgramNodeVisitor.$(H): TProgramNodeVisitor.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TScope.$(O) TScope.$(H): TScope.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TSourceReader.$(O) TSourceReader.$(H): TSourceReader.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TSpecialFormNode.$(O) TSpecialFormNode.$(H): TSpecialFormNode.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBMessageNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBStatementNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBValueNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TType.$(O) TType.$(H): TType.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TTypeNode.$(O) TTypeNode.$(H): TTypeNode.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TTypeSpecNode.$(O) TTypeSpecNode.$(H): TTypeSpecNode.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)jv_tea_compiler.$(O) jv_tea_compiler.$(H): jv_tea_compiler.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)TBlockType.$(O) TBlockType.$(H): TBlockType.st $(INCLUDE_TOP)\jv\tea\compiler\TType.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TClassBinding.$(O) TClassBinding.$(H): TClassBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TBinding.$(O) TBinding.$(H): TBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TCompilerPass.$(O) TCompilerPass.$(H): TCompilerPass.st $(INCLUDE_TOP)\jv\tea\compiler\TProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TEnvironment.$(O) TEnvironment.$(H): TEnvironment.st $(INCLUDE_TOP)\jv\tea\compiler\TNamespaceDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGAbstractContainer.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGContainer.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGNamespace.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TFilesystemProvider.$(O) TFilesystemProvider.$(H): TFilesystemProvider.st $(INCLUDE_TOP)\jv\tea\compiler\TEnvironmentProvider.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TFunctionBinding.$(O) TFunctionBinding.$(H): TFunctionBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TNamespaceBinding.$(O) TNamespaceBinding.$(H): TNamespaceBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TSimpleType.$(O) TSimpleType.$(H): TSimpleType.st $(INCLUDE_TOP)\jv\tea\compiler\TType.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TScope.$(O) TScope.$(H): TScope.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TSimpleTypeNode.$(O) TSimpleTypeNode.$(H): TSimpleTypeNode.st $(INCLUDE_TOP)\jv\tea\compiler\TTypeNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TValueBinding.$(O) TValueBinding.$(H): TValueBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TBlockBinding.$(O) TBlockBinding.$(H): TBlockBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TFunctionBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TConstantBinding.$(O) TConstantBinding.$(H): TConstantBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TType.$(O) TType.$(H): TType.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TAutomaticType.$(O) TAutomaticType.$(H): TAutomaticType.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TType.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TBlockType.$(O) TBlockType.$(H): TBlockType.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TType.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TClassBinding.$(O) TClassBinding.$(H): TClassBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TFunctionBinding.$(O) TFunctionBinding.$(H): TFunctionBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TLLVMCodeGenerator.$(O) TLLVMCodeGenerator.$(H): TLLVMCodeGenerator.st $(INCLUDE_TOP)\jv\tea\compiler\TCompilerPass.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TMethodBinding.$(O) TMethodBinding.$(H): TMethodBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TFunctionBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TNamespaceBinding.$(O) TNamespaceBinding.$(H): TNamespaceBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TSemanticAnalyser.$(O) TSemanticAnalyser.$(H): TSemanticAnalyser.st $(INCLUDE_TOP)\jv\tea\compiler\TCompilerPass.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TSimpleType.$(O) TSimpleType.$(H): TSimpleType.st $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TType.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
$(OUTDIR)TTypechecker.$(O) TTypechecker.$(H): TTypechecker.st $(INCLUDE_TOP)\jv\tea\compiler\TCompilerPass.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNodeVisitor.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TVariableBinding.$(O) TVariableBinding.$(H): TVariableBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TArgumentBinding.$(O) TArgumentBinding.$(H): TArgumentBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TVariableBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)TLocalBinding.$(O) TLocalBinding.$(H): TLocalBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TVariableBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBBlockNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBMethodNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBReturnNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBStatementNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBToken.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBValueNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBVariableNode.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGBehaviorDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGElementDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGGlobalDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMetaclassDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMethodDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TValueBinding.$(O) TValueBinding.$(H): TValueBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TBlockBinding.$(O) TBlockBinding.$(H): TBlockBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TFunctionBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TConstantBinding.$(O) TConstantBinding.$(H): TConstantBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TMethodBinding.$(O) TMethodBinding.$(H): TMethodBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TFunctionBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TVariableBinding.$(O) TVariableBinding.$(H): TVariableBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TArgumentBinding.$(O) TArgumentBinding.$(H): TArgumentBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TVariableBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)TLocalBinding.$(O) TLocalBinding.$(H): TLocalBinding.st $(INCLUDE_TOP)\jv\tea\compiler\TBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TObjectWithProperties.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TValueBinding.$(H) $(INCLUDE_TOP)\jv\tea\compiler\TVariableBinding.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBAssignmentNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBBlockNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBMethodNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBProgramNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBReturnNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBStatementNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBToken.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBValueNode.$(H) $(INCLUDE_TOP)\stx\goodies\refactoryBrowser\parser\RBVariableNode.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGBehaviorDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGClassDescriptionDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGElementDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGGlobalDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMetaclassDefinition.$(H) $(INCLUDE_TOP)\stx\goodies\ring\RGMethodDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
# ENDMAKEDEPEND --- do not remove this line
--- a/compiler/extensions.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/extensions.st Wed Sep 23 22:21:44 2015 +0100
@@ -1,5 +1,40 @@
"{ Package: 'jv:tea/compiler' }"!
+!RBAssignmentNode methodsFor:'accessing'!
+
+binding
+ ^ variable binding
+
+ "Created: / 23-09-2015 / 16:45:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBAssignmentNode methodsFor:'accessing'!
+
+binding: aTBinding
+ self shouldNotImplement
+
+ "Created: / 23-09-2015 / 16:45:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBBlockNode methodsFor:'accessing'!
+
+parameterTypes
+ ^arguments collect:[ :arg | arg type ]
+
+ "Created: / 23-09-2015 / 16:30:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBBlockNode methodsFor:'accessing'!
+
+returnType
+ | spec |
+
+ spec := self returnTypeSpec.
+ ^ spec notNil ifTrue:[ spec asType ] ifFalse:[ TAutomaticType new ]
+
+ "Created: / 23-09-2015 / 16:28:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
!RBBlockNode methodsFor:'accessing'!
returnTypeSpec
@@ -39,6 +74,25 @@
!RBMethodNode methodsFor:'accessing'!
+parameterTypes
+ ^arguments collect:[ :arg | arg type ]
+
+ "Created: / 23-09-2015 / 16:30:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBMethodNode methodsFor:'accessing'!
+
+returnType
+ | spec |
+
+ spec := self returnTypeSpec.
+ ^ spec notNil ifTrue:[ spec asType ] ifFalse:[ TAutomaticType new ]
+
+ "Created: / 23-09-2015 / 16:28:30 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBMethodNode methodsFor:'accessing'!
+
returnTypeSpec
"Return the TTypeSpecNode describing the return type of the
method"
@@ -148,6 +202,17 @@
!RBVariableNode methodsFor:'accessing'!
+type
+ | spec |
+
+ spec := self typeSpec.
+ ^ spec notNil ifTrue:[ spec asType ] ifFalse:[ TAutomaticType new ]
+
+ "Created: / 23-09-2015 / 16:29:32 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!RBVariableNode methodsFor:'accessing'!
+
typeSpec
"Return the TTypeSpecNode associated with this variable node
(if this node is for variable declaration) or nil (otherwise)"
--- a/compiler/jv_tea_compiler.st Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/jv_tea_compiler.st Wed Sep 23 22:21:44 2015 +0100
@@ -30,10 +30,10 @@
by searching along the inheritance chain of all of my classes."
^ #(
- #'stx:goodies/refactoryBrowser/parser' "RBBlockNode - extended"
+ #'stx:goodies/refactoryBrowser/parser' "RBAssignmentNode - extended"
#'stx:goodies/ring' "RGAbstractContainer - superclass of TCompilationUnitDefinition"
#'stx:goodies/sunit' "TestAsserter - superclass of TCompilerExamples"
- #'stx:libbasic' "Error - superclass of TCompilerError"
+ #'stx:libbasic' "Autoload - superclass of TMethodDefinitionTests"
)
!
@@ -73,48 +73,50 @@
^ #(
"<className> or (<className> attributes...) in load order"
- TBinding
TClassDefinition
TCompilationUnitDefinition
TCompiler
TCompilerContext
TCompilerError
+ (TCompilerExamples autoload)
TEnvironmentProvider
TFormatter
TMetaDefinition
TMethodDefinition
TNamespaceDefinition
+ TObjectWithProperties
TParser
- (TParserTests autoload)
TProgramNodeVisitor
- TScope
TSourceReader
TSpecialFormNode
- TType
TTypeNode
TTypeSpecNode
#'jv_tea_compiler'
- TBlockType
- TClassBinding
+ TBinding
TCompilerPass
TEnvironment
TFilesystemProvider
+ TScope
+ TSimpleTypeNode
+ TType
+ TAutomaticType
+ TBlockType
+ TClassBinding
TFunctionBinding
+ TLLVMCodeGenerator
TNamespaceBinding
+ TSemanticAnalyser
TSimpleType
- TSimpleTypeNode
+ TTypechecker
TValueBinding
TBlockBinding
TConstantBinding
- TLLVMCodeGenerator
TMethodBinding
- TSemanticAnalyser
- TTypechecker
TVariableBinding
TArgumentBinding
TLocalBinding
- (TCompilerExamples autoload)
(TMethodDefinitionTests autoload)
+ (TParserTests autoload)
(TSemanticAnalyserTests autoload)
(TSourceReaderTests autoload)
(TTypecheckerTests autoload)
@@ -149,6 +151,13 @@
RBToken isTInlineAssemblyEnd
RGDefinition isCompilationUnit
RBProgramNode isSpecialFormNode
+ RBAssignmentNode binding
+ RBAssignmentNode binding:
+ RBBlockNode parameterTypes
+ RBBlockNode returnType
+ RBMethodNode parameterTypes
+ RBMethodNode returnType
+ RBVariableNode type
)
! !
--- a/compiler/libInit.cc Tue Sep 22 17:43:38 2015 +0100
+++ b/compiler/libInit.cc Wed Sep 23 22:21:44 2015 +0100
@@ -27,7 +27,6 @@
void _libjv_tea_compiler_Init(pass, __pRT__, snd)
OBJ snd; struct __vmData__ *__pRT__; {
__BEGIN_PACKAGE2__("libjv_tea_compiler", _libjv_tea_compiler_Init, "jv:tea/compiler");
-_TBinding_Init(pass,__pRT__,snd);
_TClassDefinition_Init(pass,__pRT__,snd);
_TCompilationUnitDefinition_Init(pass,__pRT__,snd);
_TCompiler_Init(pass,__pRT__,snd);
@@ -38,31 +37,34 @@
_TMetaDefinition_Init(pass,__pRT__,snd);
_TMethodDefinition_Init(pass,__pRT__,snd);
_TNamespaceDefinition_Init(pass,__pRT__,snd);
+_TObjectWithProperties_Init(pass,__pRT__,snd);
_TParser_Init(pass,__pRT__,snd);
_TProgramNodeVisitor_Init(pass,__pRT__,snd);
-_TScope_Init(pass,__pRT__,snd);
_TSourceReader_Init(pass,__pRT__,snd);
_TSpecialFormNode_Init(pass,__pRT__,snd);
-_TType_Init(pass,__pRT__,snd);
_TTypeNode_Init(pass,__pRT__,snd);
_TTypeSpecNode_Init(pass,__pRT__,snd);
_jv_137tea_137compiler_Init(pass,__pRT__,snd);
-_TBlockType_Init(pass,__pRT__,snd);
-_TClassBinding_Init(pass,__pRT__,snd);
+_TBinding_Init(pass,__pRT__,snd);
_TCompilerPass_Init(pass,__pRT__,snd);
_TEnvironment_Init(pass,__pRT__,snd);
_TFilesystemProvider_Init(pass,__pRT__,snd);
+_TScope_Init(pass,__pRT__,snd);
+_TSimpleTypeNode_Init(pass,__pRT__,snd);
+_TType_Init(pass,__pRT__,snd);
+_TAutomaticType_Init(pass,__pRT__,snd);
+_TBlockType_Init(pass,__pRT__,snd);
+_TClassBinding_Init(pass,__pRT__,snd);
_TFunctionBinding_Init(pass,__pRT__,snd);
+_TLLVMCodeGenerator_Init(pass,__pRT__,snd);
_TNamespaceBinding_Init(pass,__pRT__,snd);
+_TSemanticAnalyser_Init(pass,__pRT__,snd);
_TSimpleType_Init(pass,__pRT__,snd);
-_TSimpleTypeNode_Init(pass,__pRT__,snd);
+_TTypechecker_Init(pass,__pRT__,snd);
_TValueBinding_Init(pass,__pRT__,snd);
_TBlockBinding_Init(pass,__pRT__,snd);
_TConstantBinding_Init(pass,__pRT__,snd);
-_TLLVMCodeGenerator_Init(pass,__pRT__,snd);
_TMethodBinding_Init(pass,__pRT__,snd);
-_TSemanticAnalyser_Init(pass,__pRT__,snd);
-_TTypechecker_Init(pass,__pRT__,snd);
_TVariableBinding_Init(pass,__pRT__,snd);
_TArgumentBinding_Init(pass,__pRT__,snd);
_TLocalBinding_Init(pass,__pRT__,snd);