pike.git/
src/
interpret.c
Branch:
Tag:
Non-build tags
All tags
No tags
2017-11-18
2017-11-18 10:13:14 by Arne Goedeke <el@laramies.com>
924583b1e3b8a4e00a2360db9cbcdc70c4f4edb7 (
19
lines) (+
2
/-
17
)
[
Show
|
Annotate
]
Branch:
arne/faster_calls_again
Interpreter: remove stack check from apply_svalue
Similar checks already happen in callsite_return()
2803:
PMOD_EXPORT void apply_svalue(struct svalue *s, INT32 args) {
-
if(TYPEOF(*s) == T_INT)
+
if(
UNLIKELY(
TYPEOF(*s) == T_INT)
)
{ pop_n_elems(args); push_int(0); }else{
-
ptrdiff_t expected_stack=Pike_sp-args+1 - Pike_interpreter.evaluator_stack;
+
struct pike_callsite C; callsite_init(&C, args);
2816:
callsite_prepare(&C); callsite_execute(&C); callsite_free(&C);
-
-
/* Note: do we still need those? I guess callsite_return takes care
-
* of this stuff */
-
if(Pike_sp > (expected_stack + Pike_interpreter.evaluator_stack))
-
{
-
pop_n_elems(Pike_sp-(expected_stack + Pike_interpreter.evaluator_stack));
+
}
-
else if(Pike_sp < (expected_stack + Pike_interpreter.evaluator_stack))
-
{
-
push_int(0);
+
}
-
#ifdef PIKE_DEBUG
-
if(Pike_sp < (expected_stack + Pike_interpreter.evaluator_stack))
-
Pike_fatal("Stack underflow!\n");
-
#endif
-
}
-
}
+
PMOD_EXPORT void safe_apply_svalue(struct svalue *s, int args, int handle_errors) {