--- a/ProgramNodeBuilder.st Mon Aug 07 12:18:54 2006 +0200
+++ b/ProgramNodeBuilder.st Mon Aug 07 12:19:16 2006 +0200
@@ -10,11 +10,13 @@
hereby transferred.
"
-Object subclass:#ProgramNodeBuilder
- instanceVariableNames:''
- classVariableNames:''
- poolDictionaries:''
- category:'System-Compiler ST-80-compatibility'
+"{ Package: 'stx:libcomp' }"
+
+Object subclass:#ProgramNodeBuilder
+ instanceVariableNames:''
+ classVariableNames:''
+ poolDictionaries:''
+ category:'System-Compiler ST-80-compatibility'
!
!ProgramNodeBuilder class methodsFor:'documentation'!
@@ -33,10 +35,6 @@
"
!
-version
- ^ '$Header: /cvs/stx/stx/libcomp/ProgramNodeBuilder.st,v 1.4 1995-11-11 15:31:29 cg Exp $'
-!
-
documentation
"
This is a pure mimicri class.
@@ -53,10 +51,92 @@
!ProgramNodeBuilder methodsFor:'tree building'!
+newBlockBody:statements
+ ^ (BlockNode arguments:#() home:nil variables:#()) statements:statements
+
+ "Created: / 06-08-2006 / 23:25:36 / cg"
+!
+
+newGlobal:name
+ "return a treeNode for a global variable"
+
+ ^ VariableNode globalNamed:name
+
+ "Created: / 06-08-2006 / 01:37:56 / cg"
+!
+
newLiteralValue:aConstantValue
"return a treeNode for a literal constant"
+(aConstantValue isKindOf:Association) ifTrue:[self halt].
+
^ ConstantNode value:aConstantValue
+
+ "Modified: / 06-08-2006 / 15:16:04 / cg"
+!
+
+newMessageReceiver: receiverNode selector: selector
+ ^ self newMessageReceiver: receiverNode selector: selector arguments: #()
+
+ "Created: / 06-08-2006 / 02:59:55 / cg"
+ "Modified: / 06-08-2006 / 13:29:33 / cg"
+!
+
+newMessageReceiver: receiverNode selector: selector arguments: arguments
+ selector isUnarySelector ifTrue:[
+ self assert:(arguments isEmptyOrNil).
+ ^ UnaryNode receiver:receiverNode selector: selector args: arguments
+ ].
+ selector isBinarySelector ifTrue:[
+ self assert:(arguments size == 1).
+ ^ BinaryNode receiver:receiverNode selector: selector args: arguments
+ ].
+ self assert:(arguments notEmptyOrNil).
+ ^ MessageNode receiver:receiverNode selector: selector args: arguments
+
+ "Created: / 06-08-2006 / 03:02:33 / cg"
+ "Modified: / 06-08-2006 / 14:00:47 / cg"
+!
+
+newMethodArgument:name
+ "return a treeNode for a method arg"
+
+ ^ VariableNode methodArgumentNamed:name
+
+ "Created: / 06-08-2006 / 01:15:33 / cg"
+ "Modified: / 06-08-2006 / 13:29:42 / cg"
+!
+
+newMethodLocal:name
+ "return a treeNode for a method local"
+
+ ^ VariableNode methodLocalNamed:name
+
+ "Created: / 06-08-2006 / 02:10:52 / cg"
+ "Modified: / 06-08-2006 / 13:29:46 / cg"
+!
+
+newMethodSelector:sel
+ ^ MethodNode new selector:sel
+
+ "Created: / 06-08-2006 / 01:17:16 / cg"
+ "Modified: / 06-08-2006 / 13:29:56 / cg"
+!
+
+newMethodSelector:sel arguments:argVars temporaries:localVars statements:statementNodes
+ ^ MethodNode new
+ selector:sel
+ arguments:argVars
+ locals:localVars
+ statements:statementNodes.
+
+ "Modified: / 06-08-2006 / 13:30:01 / cg"
+!
+
+newParameterVariable:aNode
+ ^ Variable name:(aNode name)
+
+ "Created: / 06-08-2006 / 14:23:25 / cg"
!
newReturnValue:anExpressionNode
@@ -65,11 +145,14 @@
^ ReturnNode expression:anExpressionNode
!
-newMethodSelector:sel arguments:argVars temporaries:localVars statements:statementNodes
- "mhmh - in ST/X we have no methodNodes ...."
- ^ MethodNode new
- selector:sel
- arguments:argVars
- locals:localVars
- statements:statementNodes.
+newSelf
+ ^ SelfNode new
+
+ "Created: / 06-08-2006 / 13:51:17 / cg"
! !
+
+!ProgramNodeBuilder class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/libcomp/ProgramNodeBuilder.st,v 1.5 2006-08-07 10:19:16 cg Exp $'
+! !