static void HandleCallImpl(Vm vm, int numArgs, bool saveReturnAddress, bool inApply = false)
{
var maybeCallable = vm.stack.Top ();
if (maybeCallable.Kind != Value.Kinds.Callable) {
vm.RaiseShovelError (String.Format (
"Object [{0}] is not callable.", Prim0.ShovelStringRepresentation (vm.api, maybeCallable))
);
}
var callable = maybeCallable.CallableValue;
if (callable.ProgramCounter.HasValue) {
vm.stack.Pop ();
CallFunction (callable, vm, numArgs, saveReturnAddress, inApply);
if (saveReturnAddress) {
vm.IncrementCells (1);
}
} else {
CallPrimitive (callable, vm, numArgs, saveReturnAddress, inApply);
}
}