aboutsummaryrefslogtreecommitdiffstats
path: root/interpret.h
diff options
context:
space:
mode:
Diffstat (limited to 'interpret.h')
-rw-r--r--interpret.h29
1 files changed, 19 insertions, 10 deletions
diff --git a/interpret.h b/interpret.h
index 3a9cab37..a11268de 100644
--- a/interpret.h
+++ b/interpret.h
@@ -1066,7 +1066,15 @@ match_re:
assert(the_func != NULL);
/* call it */
- r = the_func(arg_count);
+ if (the_func == (builtin_func_t) do_sub)
+ r = call_sub(t1->stptr, arg_count);
+ else if (the_func == do_match)
+ r = call_match(arg_count);
+ else if (the_func == do_split || the_func == do_patsplit)
+ r = call_split_func(t1->stptr, arg_count);
+ else
+ r = the_func(arg_count);
+
PUSH(r);
break;
} else if (f->type != Node_func) {
@@ -1313,17 +1321,18 @@ match_re:
fatal(_("`exit' cannot be called in the current context"));
exiting = true;
- t1 = POP_NUMBER();
- exit_val = (int) get_number_si(t1);
- DEREF(t1);
+ if ((t1 = POP_NUMBER()) != Nnull_string) {
+ exit_val = (int) get_number_si(t1);
#ifdef VMS
- if (exit_val == 0)
- exit_val = EXIT_SUCCESS;
- else if (exit_val == 1)
- exit_val = EXIT_FAILURE;
- /* else
- just pass anything else on through */
+ if (exit_val == 0)
+ exit_val = EXIT_SUCCESS;
+ else if (exit_val == 1)
+ exit_val = EXIT_FAILURE;
+ /* else
+ just pass anything else on through */
#endif
+ }
+ DEREF(t1);
if (currule == BEGINFILE || currule == ENDFILE) {