return RNull.instance;
}
@SlowPath
private static void doBrowser(MaterializedFrame frame) {
ConsoleHandler ch = RContext.getInstance().getConsoleHandler();
REnvironment callerEnv = REnvironment.frameToEnvironment(frame.materialize());
ch.printf("Called from: %s%n", callerEnv == REnvironment.globalEnv() ? "top level" : RArguments.getFunction(frame).getTarget());
String savedPrompt = ch.getPrompt();
ch.setPrompt(browserPrompt());
try {
LW: while (true) {
String input = ch.readLine();
if (input.length() == 0) {
RLogicalVector browserNLdisabledVec = (RLogicalVector) ROptions.getValue("browserNLdisabled");
if (!RRuntime.fromLogical(browserNLdisabledVec.getDataAt(0))) {
break;
}
} else {
input = input.trim();
}
switch (input) {
case "c":
case "cont":
break LW;
case "s":
case "f":
case "n":
throw RError.nyi(null, notImplemented(input));
case "where": {
int ix = RArguments.getDepth(frame);
Frame stackFrame;
while (ix >= 0 && (stackFrame = Utils.getStackFrame(FrameAccess.READ_ONLY, ix)) != null) {
RFunction fun = RArguments.getFunction(stackFrame);
if (fun != null) {
ch.printf("where %d: %s%n", ix, fun.getTarget());
}
ix--;
}
ch.println("");
break;
}
default:
RContext.getEngine().parseAndEval("<browser_input>", input, frame.materialize(), callerEnv, true, false);
break;
}
}
} finally {
ch.setPrompt(savedPrompt);
}
}