Mercurial > hg > truffle
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; } }