Skip to content
Snippets Groups Projects
Commit b98e677f authored by stepan's avatar stepan
Browse files

Arguments for .Internal calls may be omitted

parent eb8bc833
No related branches found
No related tags found
No related merge requests found
......@@ -297,12 +297,17 @@ public abstract class InternalNode extends OperatorNode {
@Override
@ExplodeLoop
protected Object[] prepareArgs(VirtualFrame frame) {
Object[] args = new Object[factory.getSignature().getLength()];
int argsLength = factory.getSignature().getLength();
if (arguments.length < argsLength - 1) {
// Note: GnuR seems to be OK with this and makes up some random values
throw error(Message.ARGUMENT_LENGTHS_DIFFER);
}
Object[] args = new Object[argsLength];
for (int i = 0; i < args.length - 1; i++) {
args[i] = arguments[i].execute(frame);
}
Object[] varArgs = new Object[arguments.length - (factory.getSignature().getLength() - 1)];
Object[] varArgs = new Object[arguments.length - (argsLength - 1)];
for (int i = 0; i < varArgs.length; i++) {
varArgs[i] = arguments[args.length - 1 + i].execute(frame);
}
......
......@@ -106,7 +106,9 @@ public final class EvaluatedArgumentsVisitor extends RSyntaxVisitor<Info> {
} else {
assert signature.getVarArgCount() == 1 : signature;
assert innerArguments.length == signature.getLength() || signature.getVarArgIndex() == signature.getLength() - 1 : signature;
assert innerArguments.length >= signature.getLength() - 1 : signature + " " + innerArguments.length;
// holds only for well-formed code, so we cannot rely on it:
// assert innerArguments.length >= signature.getLength() - 1 : signature
// + " " + innerArguments.length;
}
Info info = Info.createNew();
for (int i = innerArguments.length - 1; i >= 0; i--) {
......
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