diff graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java @ 13821:b16ec83edc73

Documentation and more refactoring of Simple Language
author Christian Wimmer <christian.wimmer@oracle.com>
date Wed, 29 Jan 2014 20:45:43 -0800
parents 7c418666c6c9
children 64c77f0577bb
line wrap: on
line diff
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java	Wed Jan 29 20:43:28 2014 -0800
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/controlflow/SLFunctionBodyNode.java	Wed Jan 29 20:45:43 2014 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -24,38 +24,31 @@
 
 import com.oracle.truffle.api.frame.*;
 import com.oracle.truffle.api.nodes.*;
+import com.oracle.truffle.api.utilities.*;
 import com.oracle.truffle.sl.nodes.*;
 import com.oracle.truffle.sl.runtime.*;
 
+@NodeInfo(shortName = "body")
 public class SLFunctionBodyNode extends SLExpressionNode {
 
-    @Child private SLStatementNode body;
-
-    private FrameDescriptor frameDescriptor;
+    @Child private SLStatementNode bodyNode;
 
-    public SLFunctionBodyNode(FrameDescriptor frameDescriptor, SLStatementNode body) {
-        this.frameDescriptor = frameDescriptor;
-        this.body = adoptChild(body);
+    private final BranchProfile exceptionTaken = new BranchProfile();
+    private final BranchProfile nullTaken = new BranchProfile();
+
+    public SLFunctionBodyNode(SLStatementNode bodyNode) {
+        this.bodyNode = adoptChild(bodyNode);
     }
 
     @Override
     public Object executeGeneric(VirtualFrame frame) {
         try {
-            body.executeVoid(frame);
+            bodyNode.executeVoid(frame);
         } catch (SLReturnException ex) {
+            exceptionTaken.enter();
             return ex.getResult();
         }
-        return SLNull.INSTANCE;
-    }
-
-    @Override
-    public Node copy() {
-        SLFunctionBodyNode copy = (SLFunctionBodyNode) super.copy();
-        copy.frameDescriptor = frameDescriptor.shallowCopy();
-        return copy;
-    }
-
-    public FrameDescriptor getFrameDescriptor() {
-        return frameDescriptor;
+        nullTaken.enter();
+        return SLNull.SINGLETON;
     }
 }