initial checkin
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 25 Jul 2011 23:52:18 +0200
changeset 2584 9ad2a6f1a1c7
parent 2583 35296182102a
child 2585 4278b724948b
initial checkin
ParseNodeVisitor.st
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ParseNodeVisitor.st	Mon Jul 25 23:52:18 2011 +0200
@@ -0,0 +1,146 @@
+"{ Package: 'stx:libcomp' }"
+
+Object subclass:#ParseNodeVisitor
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'System-Compiler-Support'
+!
+
+
+!ParseNodeVisitor methodsFor:'visiting'!
+
+visit:anObject 
+
+    | stmt |
+
+    ^anObject isStatementNode ifTrue:[
+        stmt := anObject.
+        [ stmt isNil ] whileFalse:[
+            stmt acceptVisitor:self.
+            stmt := stmt nextStatement.
+        ]
+    ] ifFalse:[
+        anObject acceptVisitor: self.
+    ]
+
+    "Modified: / 25-07-2011 / 22:33:50 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitAssignmentNode:anObject 
+
+    self visit: anObject variable.
+    self visit: anObject expression.
+
+    "Modified: / 25-07-2011 / 22:30:54 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitBinaryNode:anObject 
+
+    ^self visitMessageNode: anObject
+
+    "Modified: / 25-07-2011 / 22:30:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitBlockNode:anObject 
+
+    anObject statements ifNotNil:[
+        self visit: anObject statements
+    ].
+
+    "Modified: / 25-07-2011 / 22:45:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitCascadeNode:anObject 
+
+    self visitMessageNode: anObject.
+
+    "Modified: / 25-07-2011 / 22:37:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitConstantNode:anObject
+
+    "Modified: / 25-07-2011 / 22:41:01 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitECompletionConstantNode:anObject 
+    "dispatched back from the visited eCompletionConstantNode-object (visitor pattern)"
+
+    "fall back to general object-case - please change as required"
+
+    ^ self visitObject:anObject
+!
+
+visitMessageNode:anObject 
+
+    self visit: anObject receiver.
+    anObject arguments do:[:arg|
+        self visit: arg.
+    ]
+
+    "Modified: / 25-07-2011 / 22:37:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitObject:anObject 
+    "dispatched back from the visited objects (visitor pattern)"
+
+    "general fallBack - please change as required"
+
+    self halt:'not yet implemented'
+!
+
+visitParseErrorNode:anObject
+
+    "Modified: / 25-07-2011 / 22:38:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitPrimitiveNode:anObject
+
+    "Modified: / 25-07-2011 / 22:38:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitReturnNode:anObject 
+
+    self visitStatementNode: anObject
+
+    "Modified: / 25-07-2011 / 22:34:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitSelfNode:anObject
+
+    "Modified: / 25-07-2011 / 22:38:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitStatementNode:anObject 
+
+    self visit: anObject expression.
+
+    "Modified: / 25-07-2011 / 22:34:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitSuperNode:anObject
+
+    "Modified: / 25-07-2011 / 22:38:29 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitUnaryNode:anObject 
+
+    self visitMessageNode: anObject
+
+    "Modified: / 25-07-2011 / 22:38:40 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+visitVariableNode:anObject
+
+    "Modified: / 25-07-2011 / 22:38:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!ParseNodeVisitor class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /cvs/stx/stx/libcomp/ParseNodeVisitor.st,v 1.1 2011-07-25 21:52:18 vrany Exp $'
+!
+
+version_CVS
+    ^ '$Header: /cvs/stx/stx/libcomp/ParseNodeVisitor.st,v 1.1 2011-07-25 21:52:18 vrany Exp $'
+! !