Skip to content
Snippets Groups Projects
Commit d10a9f79 authored by Lukas Stadler's avatar Lukas Stadler
Browse files

implement proper RSyntaxElement subclasses in FunctionDefinitionNode and VarArgNode

parent 6c7b94e0
No related branches found
No related tags found
No related merge requests found
......@@ -46,6 +46,7 @@ import com.oracle.truffle.r.nodes.access.variables.ReadVariableNode;
import com.oracle.truffle.r.nodes.control.BreakException;
import com.oracle.truffle.r.nodes.control.NextException;
import com.oracle.truffle.r.nodes.instrumentation.RInstrumentation;
import com.oracle.truffle.r.runtime.ArgumentsSignature;
import com.oracle.truffle.r.runtime.BrowserQuitException;
import com.oracle.truffle.r.runtime.FunctionUID;
import com.oracle.truffle.r.runtime.RArguments;
......@@ -71,9 +72,11 @@ import com.oracle.truffle.r.runtime.env.frame.RFrameSlot;
import com.oracle.truffle.r.runtime.instrument.FunctionUIDFactory;
import com.oracle.truffle.r.runtime.nodes.RCodeBuilder;
import com.oracle.truffle.r.runtime.nodes.RNode;
import com.oracle.truffle.r.runtime.nodes.RSyntaxElement;
import com.oracle.truffle.r.runtime.nodes.RSyntaxFunction;
import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
public final class FunctionDefinitionNode extends RRootNode implements RSyntaxNode, WithFunctionUID {
public final class FunctionDefinitionNode extends RRootNode implements RSyntaxNode, WithFunctionUID, RSyntaxFunction {
@Child private RNode body; // typed as RNode to avoid custom instrument wrapper
/**
......@@ -499,4 +502,16 @@ public final class FunctionDefinitionNode extends RRootNode implements RSyntaxNo
public SourceSection getSourceSection() {
return sourceSectionR;
}
public ArgumentsSignature getSyntaxSignature() {
return getFormalArguments().getSignature();
}
public RSyntaxElement[] getSyntaxArgumentDefaults() {
return RASTUtils.asSyntaxNodes(getFormalArguments().getArguments());
}
public RSyntaxElement getSyntaxBody() {
return getBody();
}
}
......@@ -56,6 +56,7 @@ import com.oracle.truffle.r.runtime.data.RPromise.PromiseType;
import com.oracle.truffle.r.runtime.data.RPromise.RPromiseFactory;
import com.oracle.truffle.r.runtime.env.REnvironment;
import com.oracle.truffle.r.runtime.nodes.RNode;
import com.oracle.truffle.r.runtime.nodes.RSyntaxLookup;
import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
/**
......@@ -286,7 +287,7 @@ public abstract class PromiseNode extends RNode {
* an argument in a {@link RCallNode} where the arguments are statically typed as
* {@link RSyntaxNode}.
*/
public static final class VarArgNode extends RNode implements RSyntaxNode {
public static final class VarArgNode extends RNode implements RSyntaxNode, RSyntaxLookup {
@Child private ReadVariableNode lookupVarArgs;
......@@ -351,6 +352,15 @@ public abstract class PromiseNode extends RNode {
*/
return RSyntaxNode.INTERNAL;
}
public String getIdentifier() {
int num = index + 1;
return (num < 10 ? ".." : ".") + num;
}
public boolean isFunctionLookup() {
return false;
}
}
@TruffleBoundary
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment