diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/IfNode.java @ 7503:31da1716950f

Updated truffle-sl for the changed operation code generation.
author Christian Humer <christian.humer@gmail.com>
date Fri, 18 Jan 2013 13:29:14 +0100
parents 213c1297a814
children 5e3d1a68664e
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/IfNode.java	Fri Jan 18 13:28:12 2013 +0100
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/IfNode.java	Fri Jan 18 13:29:14 2013 +0100
@@ -22,29 +22,38 @@
  */
 package com.oracle.truffle.sl.nodes;
 
+import com.oracle.truffle.api.codegen.*;
 import com.oracle.truffle.api.frame.*;
 
-public class IfNode extends StatementNode {
+@ExecuteChildren("conditionNode")
+public abstract class IfNode extends StatementNode {
 
     @Child
-    private ConditionNode condition;
+    protected ConditionNode conditionNode;
+
     @Child
-    private StatementNode thenPart;
+    private StatementNode thenPartNode;
+
     @Child
-    private StatementNode elsePart;
+    private StatementNode elsePartNode;
 
     public IfNode(ConditionNode condition, StatementNode thenPart, StatementNode elsePart) {
-        this.condition = adoptChild(condition);
-        this.thenPart = adoptChild(thenPart);
-        this.elsePart = adoptChild(elsePart);
+        this.conditionNode = adoptChild(condition);
+        this.thenPartNode = adoptChild(thenPart);
+        this.elsePartNode = adoptChild(elsePart);
+    }
+
+    protected IfNode(IfNode node) {
+        this(node.conditionNode, node.thenPartNode, node.elsePartNode);
     }
 
-    @Override
-    public void executeVoid(VirtualFrame frame) {
-        if (condition.executeCondition(frame)) {
-            thenPart.executeVoid(frame);
-        } else if (elsePart != null) {
-            elsePart.executeVoid(frame);
+    @Specialization
+    public void doVoid(VirtualFrame frame, boolean condition) {
+        if (condition) {
+            thenPartNode.executeVoid(frame);
+        } else {
+            elsePartNode.executeVoid(frame);
         }
     }
+
 }