2004-11-12
2004-11-12 13:45:30 by Henrik Grubbström (Grubba) <grubba@grubba.org>
-
9606ebebee6907fc3e0a2dc1b9748554e5f4bcae
(139 lines)
(+76/-63)
[
Show
| Annotate
]
Branch: 7.9
Updated use of Pike_error().
Rev: src/builtin.cmod:1.173
Rev: src/cpp.c:1.151
Rev: src/dynamic_load.c:1.86
Rev: src/encode.c:1.224
Rev: src/interpret.c:1.359
Rev: src/modules/Gmp/mpf.cmod:1.30
Rev: src/modules/Postgres/postgres.c:1.40
Rev: src/modules/_Image_FreeType/freetype.c:1.25
Rev: src/modules/files/efuns.c:1.153
Rev: src/modules/files/file.c:1.332
Rev: src/object.c:1.259
Rev: src/operators.c:1.199
Rev: src/post_modules/SDL/SDL.cmod:1.27
Rev: src/post_modules/SQLite/sqlite.cmod:1.14
Rev: src/post_modules/_ADT/circular_list.cmod:1.15
Rev: src/post_modules/_ADT/sequence.cmod:1.14
Rev: src/signal_handler.c:1.311
2:
|| This file is part of Pike. For copyright information see COPYRIGHT.
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING
|| for more information.
- || $Id: interpret.c,v 1.358 2004/10/30 11:38:25 mast Exp $
+ || $Id: interpret.c,v 1.359 2004/11/12 13:13:30 grubba Exp $
*/
#include "global.h"
995:
#ifdef PIKE_USE_MACHINE_CODE
-
+
/* Labels to jump to to cause eval_instruction to return */
/* FIXME: Replace these with assembler lables */
void *do_inter_return_label = NULL;
void *do_escape_catch_label;
void *dummy_label = NULL;
- #ifndef DEF_PROG_COUNTER
- #define DEF_PROG_COUNTER
- #endif /* !DEF_PROG_COUNTER */
-
+
#ifndef CALL_MACHINE_CODE
#define CALL_MACHINE_CODE(pc) \
do { \
1069:
}
}
- #else /* !PIKE_DEBUG */
- #define DEBUG_PROLOGUE(OPCODE, EXTRA) do {} while (0)
+
#endif /* !PIKE_DEBUG */
-
+ #endif /* PIKE_USE_MACHINE_CODE */
+
+ #ifdef PIKE_SMALL_EVAL_INSTRUCTION
+ #undef PROG_COUNTER
+ #define PROG_COUNTER Pike_fp->pc+1
+ #endif /* PIKE_SMALL_EVAL_INSTRUCTION */
+
+ #if defined(PIKE_USE_MACHINE_CODE) || defined(PIKE_SMALL_EVAL_INSTRUCTION)
+
+ #ifndef DEF_PROG_COUNTER
+ #define DEF_PROG_COUNTER
+ #endif /* !DEF_PROG_COUNTER */
+
+ #ifndef DEBUG_PROLOGUE
+ #define DEBUG_PROLOGUE(OPCODE, EXTRA) do {} while (0)
+ #endif
+
#define OPCODE0(O,N,F,C) \
void PIKE_CONCAT(opcode_,O)(void) { \
DEF_PROG_COUNTER; \
1091:
DEBUG_PROLOGUE (O, DEBUG_LOG_ARG (arg1); DEBUG_LOG_ARG2 (arg2)); \
C }
- #ifdef OPCODE_RETURN_JUMPADDR
+ #if defined(OPCODE_RETURN_JUMPADDR) || defined(PIKE_SMALL_EVAL_INSTRUCTION)
#define OPCODE0_JUMP(O,N,F,C) \
void *PIKE_CONCAT(jump_opcode_,O)(void) { \
1132:
#define JUMP_DONE return jumpaddr
#endif
- #else /* !OPCODE_RETURN_JUMPADDR */
+ #else /* !OPCODE_RETURN_JUMPADDR && !PIKE_SMALL_EVAL_INSTRUCTION */
#define OPCODE0_JUMP OPCODE0
#define OPCODE1_JUMP OPCODE1
#define OPCODE2_JUMP OPCODE2
#define JUMP_DONE DONE
- #endif /* !OPCODE_RETURN_JUMPADDR */
+ #endif /* OPCODE_RETURN_JUMPADDR || PIKE_SMALL_EVAL_INSTRUCTION */
- #ifdef OPCODE_INLINE_BRANCH
+ #if defined(OPCODE_INLINE_BRANCH) || defined(PIKE_SMALL_EVAL_INSTRUCTION)
#define TEST_OPCODE0(O,N,F,C) \
int PIKE_CONCAT(test_opcode_,O)(void) { \
int branch_taken = 0; \
1170:
#define DO_BRANCH() (branch_taken = -1)
#define DONT_BRANCH() (branch_taken = 0)
- #else /* !OPCODE_INLINE_BRANCH */
+ #else /* !OPCODE_INLINE_BRANCH && !PIKE_SMALL_EVAL_INSTRUCTION */
#define TEST_OPCODE0(O,N,F,C) OPCODE0_PTRJUMP(O,N,F,C)
#define TEST_OPCODE1(O,N,F,C) OPCODE1_PTRJUMP(O,N,F,C)
#define TEST_OPCODE2(O,N,F,C) OPCODE2_PTRJUMP(O,N,F,C)
- #endif /* OPCODE_INLINE_BRANCH */
+ #endif /* OPCODE_INLINE_BRANCH || PIKE_SMALL_EVAL_INSTRUCTION */
#define OPCODE0_TAIL(O,N,F,C) OPCODE0(O,N,F,C)
#define OPCODE1_TAIL(O,N,F,C) OPCODE1(O,N,F,C)
1214:
GLOBAL_DEF_PROG_COUNTER;
#endif
+ #ifndef SET_PROG_COUNTER
+ #define SET_PROG_COUNTER(X) (PROG_COUNTER=(X))
+ #endif /* SET_PROG_COUNTER */
+
+ #undef DONE
+ #undef FETCH
+ #undef INTER_RETURN
+ #undef INTER_ESCAPE_CATCH
+
+ #define DONE return
+ #define FETCH
+ #define INTER_RETURN {SET_PROG_COUNTER(do_inter_return_label);JUMP_DONE;}
+ #define INTER_ESCAPE_CATCH {SET_PROG_COUNTER(do_escape_catch_label);JUMP_DONE;}
+
+ #if defined(PIKE_USE_MACHINE_CODE) && defined(_M_IX86)
+ /* Disable frame pointer optimization */
+ #pragma optimize("y", off)
+ #endif
+
+ #include "interpret_functions_fixed.h"
+
+ #if defined(PIKE_USE_MACHINE_CODE) && defined(_M_IX86)
+ /* Restore optimization */
+ #pragma optimize("", on)
+ #endif
+
+ #ifdef PIKE_SMALL_EVAL_INSTRUCTION
+ #undef SET_PROG_COUNTER
+ #undef PROG_COUNTER
+ #define PROG_COUNTER pc
+ #endif
+
+ #endif /* PIKE_USE_MACHINE_CODE || PIKE_SMALL_EVAL_INSTRUCTION */
+
+ #ifdef PIKE_USE_MACHINE_CODE
+
#ifdef PIKE_DEBUG
/* Note: The debug code is extracted, to keep the frame size constant. */
static int eval_instruction_low(PIKE_OPCODE_T *pc);
1306:
return -1;
}
- #ifndef SET_PROG_COUNTER
- #define SET_PROG_COUNTER(X) (PROG_COUNTER=(X))
- #endif /* SET_PROG_COUNTER */
-
- #undef DONE
- #undef FETCH
- #undef INTER_RETURN
- #undef INTER_ESCAPE_CATCH
-
- #define DONE return
- #define FETCH
- #define INTER_RETURN {SET_PROG_COUNTER(do_inter_return_label);JUMP_DONE;}
- #define INTER_ESCAPE_CATCH {SET_PROG_COUNTER(do_escape_catch_label);JUMP_DONE;}
-
- #ifdef _M_IX86
- // Disable frame pointer optimization
- #pragma optimize("y", off)
- #endif
-
- #include "interpret_functions_fixed.h"
-
- #ifdef _M_IX86
- // Restore optimization
- #pragma optimize("", on)
- #endif
-
+
#else /* PIKE_USE_MACHINE_CODE */
1381:
}
- #else
+ #else /* !PIKE_DEBUG || HAVE_COMPUTED_GOTO */
#include "interpreter.h"
#endif
1643:
case T_STRING:
if (s->u.string->len > 20) {
- Pike_error("Attempt to call the string \"%20s\"...\n", s->u.string->str);
+ Pike_error("Attempt to call the string \"%20S\"...\n", s->u.string);
} else {
- Pike_error("Attempt to call the string \"%s\"\n", s->u.string->str);
+ Pike_error("Attempt to call the string \"%S\"\n", s->u.string);
}
case T_MAPPING:
Pike_error("Attempt to call a mapping\n");
1677: Inside #if defined(PIKE_DEBUG)
if(Pike_sp != expected_stack + !s->u.efun->may_return_void)
{
if(Pike_sp < expected_stack)
- Pike_fatal("Function popped too many arguments: %s\n",
- s->u.efun->name->str);
+ Pike_fatal("Function popped too many arguments: %S\n",
+ s->u.efun->name);
if(Pike_sp>expected_stack+1)
- Pike_fatal("Function left droppings on stack: %s\n",
- s->u.efun->name->str);
+ Pike_fatal("Function left droppings on stack: %S\n",
+ s->u.efun->name);
if(Pike_sp == expected_stack && !s->u.efun->may_return_void)
- Pike_fatal("Non-void function returned without return value on stack: %s %d\n",
- s->u.efun->name->str,s->u.efun->may_return_void);
+ Pike_fatal("Non-void function returned without return value on stack: %S %d\n",
+ s->u.efun->name, s->u.efun->may_return_void);
if(Pike_sp==expected_stack+1 && s->u.efun->may_return_void)
- Pike_fatal("Void function returned with a value on the stack: %s %d\n",
- s->u.efun->name->str, s->u.efun->may_return_void);
+ Pike_fatal("Void function returned with a value on the stack: %S %d\n",
+ s->u.efun->name, s->u.efun->may_return_void);
}
#endif
2262:
safe_apply_low2(o, id, args, 1);
else {
char buf[4096];
+ /* FIXME: Ought to use string_buffer_vsprintf(). */
SNPRINTF(buf, sizeof (buf), "Cannot call unknown function \"%s\".\n", fun);
push_error (buf);
free_svalue (&throw_value);
2358:
push_int(0);
}
else {
- push_constant_text("Invalid return value from %s: %O\n");
- push_text(fun);
- push_svalue(Pike_sp - 3);
- f_sprintf(3);
- if (!Pike_sp[-1].u.string->size_shift)
- Pike_error("%s", Pike_sp[-1].u.string->str);
- else
- Pike_error("Invalid return value from %s\n", fun);
+ Pike_error("Invalid return value from %s: %O\n",
+ fun, Pike_sp-1);
}
}
2399:
if (id >= 0)
apply_low(o, id, args);
else
- if (fun->size_shift)
- Pike_error ("Cannot call unknown function.\n");
- else
- Pike_error ("Cannot call unknown function \"%s\".\n", fun->str);
+ Pike_error("Cannot call unknown function \"%S\".\n", fun);
}
PMOD_EXPORT void apply(struct object *o, const char *fun, int args)