[svn:parrot] r44632 - in branches/rm_cflags: . compilers/imcc config/gen/makefiles include/parrot lib/Parrot lib/Parrot/Docs/Section lib/Parrot/Ops2c runtime/parrot/library/HTTP src src/interp src/ops src/runcore t/codingstd t/native_pbc t/pmc t/src tools/dev

coke at svn.parrot.org coke at svn.parrot.org
Thu Mar 4 20:51:47 UTC 2010


Author: coke
Date: Thu Mar  4 20:51:45 2010
New Revision: 44632
URL: https://trac.parrot.org/parrot/changeset/44632

Log:
merge latest changes from trunk.

Deleted:
   branches/rm_cflags/include/parrot/events.h
   branches/rm_cflags/include/parrot/tsq.h
   branches/rm_cflags/src/events.c
   branches/rm_cflags/src/tsq.c
Modified:
   branches/rm_cflags/   (props changed)
   branches/rm_cflags/MANIFEST
   branches/rm_cflags/MANIFEST.SKIP
   branches/rm_cflags/PBC_COMPAT
   branches/rm_cflags/compilers/imcc/parser_util.c
   branches/rm_cflags/config/gen/makefiles/root.in
   branches/rm_cflags/include/parrot/op.h
   branches/rm_cflags/include/parrot/parrot.h
   branches/rm_cflags/include/parrot/runcore_api.h
   branches/rm_cflags/include/parrot/runcore_trace.h   (props changed)
   branches/rm_cflags/lib/Parrot/Docs/Section/C.pm
   branches/rm_cflags/lib/Parrot/Ops2c/Utils.pm
   branches/rm_cflags/lib/Parrot/OpsFile.pm
   branches/rm_cflags/runtime/parrot/library/HTTP/Daemon.pir
   branches/rm_cflags/src/interp/inter_create.c   (props changed)
   branches/rm_cflags/src/ops/core.ops
   branches/rm_cflags/src/ops/ops.num
   branches/rm_cflags/src/runcore/cores.c   (props changed)
   branches/rm_cflags/src/runcore/main.c
   branches/rm_cflags/src/runcore/trace.c   (props changed)
   branches/rm_cflags/t/codingstd/c_function_docs.t
   branches/rm_cflags/t/codingstd/perlcritic.t
   branches/rm_cflags/t/native_pbc/annotations.pbc
   branches/rm_cflags/t/native_pbc/integer_1.pbc
   branches/rm_cflags/t/native_pbc/number_1.pbc
   branches/rm_cflags/t/native_pbc/string_1.pbc
   branches/rm_cflags/t/pmc/signal.t
   branches/rm_cflags/t/src/embed.t   (props changed)
   branches/rm_cflags/tools/dev/mk_gitignore.pl   (props changed)

Modified: branches/rm_cflags/MANIFEST
==============================================================================
--- branches/rm_cflags/MANIFEST	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/MANIFEST	Thu Mar  4 20:51:45 2010	(r44632)
@@ -1018,7 +1018,6 @@
 include/parrot/embed.h                                      [main]include
 include/parrot/encoding.h                                   [main]include
 include/parrot/enums.h                                      [main]include
-include/parrot/events.h                                     [main]include
 include/parrot/exceptions.h                                 [main]include
 include/parrot/exit.h                                       [main]include
 include/parrot/extend.h                                     [main]include
@@ -1063,7 +1062,6 @@
 include/parrot/thr_pthread.h                                [main]include
 include/parrot/thr_windows.h                                [main]include
 include/parrot/thread.h                                     [main]include
-include/parrot/tsq.h                                        [main]include
 include/parrot/vtables.h                                    [main]include
 include/parrot/warnings.h                                   [main]include
 include/pmc/dummy                                           [main]include
@@ -1324,7 +1322,6 @@
 src/dynpmc/rotest.pmc                                       [devel]src
 src/dynpmc/subproxy.pmc                                     [devel]src
 src/embed.c                                                 []
-src/events.c                                                []
 src/exceptions.c                                            []
 src/exit.c                                                  []
 src/extend.c                                                []
@@ -1516,7 +1513,6 @@
 src/string/unicode.h                                        []
 src/sub.c                                                   []
 src/thread.c                                                []
-src/tsq.c                                                   []
 src/utils.c                                                 []
 src/vtable.tbl                                              [devel]src
 src/vtables.c                                               []

Modified: branches/rm_cflags/MANIFEST.SKIP
==============================================================================
--- branches/rm_cflags/MANIFEST.SKIP	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/MANIFEST.SKIP	Thu Mar  4 20:51:45 2010	(r44632)
@@ -1,6 +1,6 @@
 # ex: set ro:
 # $Id$
-# generated by tools/dev/mk_manifest_and_skip.pl Thu Feb 25 23:56:41 2010 UT
+# generated by tools/dev/mk_manifest_and_skip.pl Thu Mar  4 20:45:33 2010 UT
 #
 # This file should contain a transcript of the svn:ignore properties
 # of the directories in the Parrot subversion repository. (Needed for

Modified: branches/rm_cflags/PBC_COMPAT
==============================================================================
--- branches/rm_cflags/PBC_COMPAT	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/PBC_COMPAT	Thu Mar  4 20:51:45 2010	(r44632)
@@ -27,6 +27,7 @@
 
 # please insert tab separated entries at the top of the list
 
+6.4	2010.03.02	cotto	remove prederef__ and reserved
 6.3	2010.02.16	whiteknight	Add OpLib and Opcode PMCs
 6.2	2010.01.31	cotto	serialization-related changes to ParrotInterpreter
 6.1	2010.01.30	whiteknight	remove Array PMC

Modified: branches/rm_cflags/compilers/imcc/parser_util.c
==============================================================================
--- branches/rm_cflags/compilers/imcc/parser_util.c	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/compilers/imcc/parser_util.c	Thu Mar  4 20:51:45 2010	(r44632)
@@ -548,7 +548,7 @@
         }
     }
 
-    if (op_info->jump && op_info->jump != PARROT_JUMP_ENEXT) {
+    if (op_info->jump) {
         ins->type |= ITBRANCH;
         /* TODO use opnum constants */
         if (STREQ(name, "branch")

Modified: branches/rm_cflags/config/gen/makefiles/root.in
==============================================================================
--- branches/rm_cflags/config/gen/makefiles/root.in	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/config/gen/makefiles/root.in	Thu Mar  4 20:51:45 2010	(r44632)
@@ -192,7 +192,6 @@
 	runtime/parrot/include/datatypes.pasm \
 	runtime/parrot/include/iterator.pasm \
 	runtime/parrot/include/call_bits.pasm \
-	runtime/parrot/include/io_thr_msg.pasm \
 	runtime/parrot/include/timer.pasm \
 	runtime/parrot/include/except_types.pasm \
 	runtime/parrot/include/except_severity.pasm \
@@ -376,7 +375,6 @@
         $(INC_DIR)/io.h \
         $(INC_DIR)/op.h \
         $(INC_DIR)/pmc.h \
-        $(INC_DIR)/events.h \
         $(INC_DIR)/gc_api.h \
         $(INC_DIR)/string_funcs.h \
         $(INC_DIR)/misc.h \
@@ -387,7 +385,6 @@
         $(INC_DIR)/nci.h \
         $(INC_DIR)/thread.h \
         $(INC_DIR)/scheduler.h \
-        $(INC_DIR)/tsq.h \
         $(INC_DIR)/longopt.h \
         $(INC_DIR)/oo.h \
         $(INC_DIR)/vtables.h \
@@ -449,7 +446,6 @@
     src/dynext$(O) \
     src/embed$(O) \
     src/string/encoding$(O) \
-    src/events$(O) \
     src/exceptions$(O) \
     src/exit$(O) \
     src/extend$(O) \
@@ -497,7 +493,6 @@
     src/sub$(O) \
     src/thread$(O) \
     src/runcore/trace$(O) \
-    src/tsq$(O) \
     src/utils$(O) \
     src/vtables$(O) \
     src/warnings$(O) \
@@ -644,7 +639,6 @@
 STR_FILES = \
     src/debug.str \
     src/dynext.str \
-    src/events.str \
     src/exceptions.str \
     src/global.str \
     src/global_setup.str \
@@ -1082,9 +1076,6 @@
 runtime/parrot/include/socket.pasm : $(INC_DIR)/io.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/io.h $@
 
-runtime/parrot/include/io_thr_msg.pasm : $(INC_DIR)/events.h $(H2INC)
-	$(PERL) $(H2INC) $(INC_DIR)/events.h $@
-
 runtime/parrot/include/hash_key_type.pasm : $(INC_DIR)/hash.h $(H2INC)
 	$(PERL) $(H2INC) $(INC_DIR)/hash.h $@
 
@@ -1258,8 +1249,6 @@
         src/exceptions.str \
 	include/pmc/pmc_continuation.h
 
-src/events$(O) : $(PARROT_H_HEADERS) src/events.str
-
 src/thread$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/atomic.h \
         include/pmc/pmc_sub.h \
 	include/pmc/pmc_parrotinterpreter.h
@@ -1382,10 +1371,6 @@
         $(INC_DIR)/runcore_api.h $(INC_DIR)/runcore_trace.h \
         $(PARROT_H_HEADERS)
 
-## SUFFIX OVERRIDE
-src/tsq$(O) : $(PARROT_H_HEADERS) src/tsq.c
-	$(CC) $(CFLAGS) @optimize::src/tsq.c@ @ccwarn::src/tsq.c@ @cc_shared@ -I$(@D) @cc_o_out@ $@ -c src/tsq.c
-
 src/embed$(O) : $(PARROT_H_HEADERS) $(INC_DIR)/embed.h \
         $(INC_DIR)/oplib/ops.h $(INC_DIR)/runcore_api.h \
         compilers/imcc/imc.h \

Deleted: branches/rm_cflags/include/parrot/events.h
==============================================================================
--- branches/rm_cflags/include/parrot/events.h	Thu Mar  4 20:51:45 2010	(r44631)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,226 +0,0 @@
-/* events.h
- *  Copyright (C) 2001-2008, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     This api will handle parrot events
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_EVENTS_H_GUARD
-#define PARROT_EVENTS_H_GUARD
-
-#include "parrot/compiler.h"
-
-typedef void* (*event_func_t)(Parrot_Interp, void*);
-
-typedef enum {
-    EVENT_TYPE_NONE,
-    EVENT_TYPE_EVENT,
-    EVENT_TYPE_IO,
-    EVENT_TYPE_MSG,
-    EVENT_TYPE_TIMER,
-    EVENT_TYPE_CALL_BACK,
-    EVENT_TYPE_SLEEP,
-    EVENT_TYPE_TERMINATE,
-    EVENT_TYPE_EVENT_TERMINATE,
-    EVENT_TYPE_CLASS_CHANGED,
-    EVENT_TYPE_SIGNAL,
-    EVENT_TYPE_SUSPEND_FOR_GC
-} parrot_event_type_enum;
-
-/*
- * any timer event has 2 time fields in front
- */
-typedef struct parrot_timer_event {
-    FLOATVAL                    abs_time;
-    FLOATVAL                    interval;
-    int                         repeat; /* 0 = once, -1 = forever */
-    PMC*                        sub;    /* handler sub */
-    PMC*                        timer;  /* a .Timer PMC */
-} parrot_timer_event;
-
-/* TODO export to pasm */
-typedef enum {
-    EV_IO_NONE,                 /* invalidated */
-    EV_IO_SELECT_RD,            /* rd is ready for read */
-    EV_IO_SELECT_WR             /* rd is ready for write */
-} parrot_io_event_enum;
-
-typedef struct parrot_io_event {
-    parrot_io_event_enum        action; /* read, write, ... */
-    PMC*                        pio;
-    PMC*                        handler;
-    PMC*                        user_data;
-} parrot_io_event;
-
-typedef struct _call_back_info {
-    PMC*                        cbi;    /* callback info */
-    char*                       external_data;
-} _call_back_info;
-
-typedef struct parrot_event {
-    parrot_event_type_enum      type;
-    Parrot_Interp               interp;
-    /* event_func_t                event_func; unused */
-    union {
-        STRING*                 msg;            /* for testing only */
-        int                     signal;         /* for EVENT_TYPE_SIGNAL */
-        parrot_timer_event      timer_event;    /* for EVENT_TYPE_TIMER */
-        _call_back_info         call_back;      /* CALL_BACKs */
-        parrot_io_event         io_event;       /* EVENT_TYPE_IO */
-    } u;
-} parrot_event;
-
-struct QUEUE_ENTRY;
-
-#define CHECK_EVENTS(i, n)  (opcode_t *)Parrot_do_check_events((i), (n))
-#define HANDLE_EVENTS(i, n) (opcode_t *)Parrot_do_handle_events((i), 1, (n))
-
-/* HEADERIZER BEGIN: src/events.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_EXPORT
-void Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_check_events(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_do_handle_events(PARROT_INTERP,
-    int restore,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_event_add_io_event(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *pio),
-    ARGIN_NULLOK(PMC *sub),
-    ARGIN_NULLOK(PMC *data),
-    INTVAL which)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_events(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_init_signals(void);
-
-PARROT_EXPORT
-void Parrot_kill_event_loop(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
-PARROT_EXPORT
-void Parrot_new_suspend_for_gc_event(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_terminate_event(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_new_timer_event(PARROT_INTERP,
-    ARGIN_NULLOK(PMC *timer),
-    FLOATVAL diff,
-    FLOATVAL interval,
-    int repeat,
-    ARGIN_NULLOK(PMC *sub),
-    parrot_event_type_enum typ)
-        __attribute__nonnull__(1);
-
-PARROT_EXPORT
-void Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(* ev);
-
-PARROT_EXPORT
-void Parrot_schedule_interp_qentry(PARROT_INTERP,
-    ARGIN(struct QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t * Parrot_sleep_on_event(PARROT_INTERP,
-    FLOATVAL t,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-void Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_Parrot_del_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(timer))
-#define ASSERT_ARGS_Parrot_do_check_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_do_handle_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_event_add_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_init_signals __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_Parrot_kill_event_loop __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_cb_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(cbi) \
-    , PARROT_ASSERT_ARG(ext))
-#define ASSERT_ARGS_Parrot_new_suspend_for_gc_event \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_terminate_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_new_timer_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_Parrot_schedule_interp_qentry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_Parrot_sleep_on_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_Parrot_schedule_broadcast_qentry \
-     __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/events.c */
-
-/* &gen_from_enum(io_thr_msg.pasm) */
-typedef enum {
-    IO_THR_MSG_NONE,
-    IO_THR_MSG_TERMINATE,
-    IO_THR_MSG_ADD_SELECT_RD
-} io_thread_msg_type;
-/* &end_gen */
-
-#endif /* PARROT_EVENTS_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/rm_cflags/include/parrot/op.h
==============================================================================
--- branches/rm_cflags/include/parrot/op.h	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/include/parrot/op.h	Thu Mar  4 20:51:45 2010	(r44632)
@@ -51,13 +51,7 @@
 
 /* See lib/Parrot/OpsFile.pm if the names of these values change */
 typedef enum {
-    PARROT_JUMP_RELATIVE = 1,
-    PARROT_JUMP_ADDRESS = 2,
-    PARROT_JUMP_POP = 4,
-    PARROT_JUMP_ENEXT = 8,
-    PARROT_JUMP_GNEXT = 16,
-    PARROT_JUMP_UNPREDICTABLE = 32,
-    PARROT_JUMP_RESTART = 64
+    PARROT_JUMP_RELATIVE = 1
 } op_jump_t;
 
 /* NOTE: Sure wish we could put the types here... */
@@ -82,7 +76,6 @@
     arg_type_t     types[PARROT_MAX_ARGS];  /* arg_type_t, 0 = 1st arg */
     arg_dir_t      dirs[PARROT_MAX_ARGS];   /* arg_dir_t   0 = 1st arg */
     char           labels[PARROT_MAX_ARGS]; /* 0/1         0 = 1st arg */
-    unsigned int   flags;
 } op_info_t;
 
 

Modified: branches/rm_cflags/include/parrot/parrot.h
==============================================================================
--- branches/rm_cflags/include/parrot/parrot.h	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/include/parrot/parrot.h	Thu Mar  4 20:51:45 2010	(r44632)
@@ -269,7 +269,6 @@
 #include "parrot/io.h"
 #include "parrot/op.h"
 #include "parrot/pmc.h"
-#include "parrot/events.h"
 #include "parrot/gc_api.h"
 #include "parrot/string_funcs.h"
 #include "parrot/misc.h"
@@ -280,7 +279,6 @@
 #include "parrot/nci.h"
 #include "parrot/thread.h"
 #include "parrot/scheduler.h"
-#include "parrot/tsq.h"
 #include "parrot/longopt.h"
 #include "parrot/oo.h"
 #include "parrot/vtables.h"

Modified: branches/rm_cflags/include/parrot/runcore_api.h
==============================================================================
--- branches/rm_cflags/include/parrot/runcore_api.h	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/include/parrot/runcore_api.h	Thu Mar  4 20:51:45 2010	(r44632)
@@ -97,14 +97,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-void do_prederef(
-    ARGIN(void **pc_prederef),
-    PARROT_INTERP,
-    ARGIN(Parrot_runcore_t *runcore))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3);
-
 void dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
@@ -134,10 +126,6 @@
 #define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(name))
-#define ASSERT_ARGS_do_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(pc_prederef) \
-    , PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(runcore))
 #define ASSERT_ARGS_dynop_register __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(lib_pmc))

Deleted: branches/rm_cflags/include/parrot/tsq.h
==============================================================================
--- branches/rm_cflags/include/parrot/tsq.h	Thu Mar  4 20:51:45 2010	(r44631)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,167 +0,0 @@
-/* tsq.h
- *  Copyright (C) 2001-2007, Parrot Foundation.
- *  SVN Info
- *     $Id$
- *  Overview:
- *     Defines the thread-safe queue system
- *  Data Structure and Algorithms:
- *  History:
- *  Notes:
- *  References:
- */
-
-#ifndef PARROT_TSQ_H_GUARD
-#define PARROT_TSQ_H_GUARD
-
-#include "parrot/config.h"
-#include "parrot/thread.h"
-
-
-typedef struct QUEUE_ENTRY QUEUE_ENTRY;
-typedef struct QUEUE QUEUE;
-
-typedef enum {
-    QUEUE_ENTRY_TYPE_NONE,
-    QUEUE_ENTRY_TYPE_EVENT,
-    QUEUE_ENTRY_TYPE_TIMED_EVENT
-} queue_entry_type_enum;
-
-struct QUEUE_ENTRY {
-    void *data;
-    queue_entry_type_enum type;
-    QUEUE_ENTRY *next;
-};
-
-struct QUEUE {
-    QUEUE_ENTRY *head;
-    QUEUE_ENTRY *tail;
-    UINTVAL max_prio;
-    Parrot_mutex queue_mutex;
-    Parrot_cond queue_condition;
-};
-
-/* HEADERIZER BEGIN: src/tsq.c */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-void insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY * nosync_pop_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY * peek_entry(ARGIN(const QUEUE *queue))
-        __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * pop_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void queue_broadcast(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_destroy(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE* queue_init(UINTVAL prio);
-
-void queue_lock(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_signal(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_timedwait(
-    ARGMOD(QUEUE *queue),
-    ARGIN(const struct timespec *abs_time))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-void queue_unlock(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void queue_wait(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-void unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*queue);
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY * wait_for_entry(ARGMOD(QUEUE *queue))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*queue);
-
-#define ASSERT_ARGS_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_insert_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_nosync_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_peek_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_pop_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_push_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_queue_broadcast __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_queue_lock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_timedwait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(abs_time))
-#define ASSERT_ARGS_queue_unlock __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_queue_wait __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-#define ASSERT_ARGS_unshift_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue) \
-    , PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_wait_for_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(queue))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: src/tsq.c */
-
-#endif /* PARROT_TSQ_H_GUARD */
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/rm_cflags/lib/Parrot/Docs/Section/C.pm
==============================================================================
--- branches/rm_cflags/lib/Parrot/Docs/Section/C.pm	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/lib/Parrot/Docs/Section/C.pm	Thu Mar  4 20:51:45 2010	(r44632)
@@ -218,11 +218,10 @@
             'Threads', '',
             $self->c_pair_item( '', 'thread' ),
             $self->c_header_item( '', 'thr_pthread' ),
-            $self->c_pair_item( '', 'tsq' ),
         ),
         $self->new_group(
             'Exceptions', '',
-            $self->c_pair_item( '', 'exceptions' ), $self->c_pair_item( '', 'events' ),
+            $self->c_pair_item( '', 'exceptions' )
         ),
         $self->new_group(
             'Memory', '',

Modified: branches/rm_cflags/lib/Parrot/Ops2c/Utils.pm
==============================================================================
--- branches/rm_cflags/lib/Parrot/Ops2c/Utils.pm	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/lib/Parrot/Ops2c/Utils.pm	Thu Mar  4 20:51:45 2010	(r44632)
@@ -826,7 +826,6 @@
                 ? $op->labels
                 : 0
                 ) . " }";
-            my $flags = 0;
 
             print $fh <<END_C;
   { /* $self->{index} */
@@ -839,8 +838,7 @@
     $arg_count,
     $arg_types,
     $arg_dirs,
-    $labels,
-    $flags
+    $labels
   },
 END_C
 

Modified: branches/rm_cflags/lib/Parrot/OpsFile.pm
==============================================================================
--- branches/rm_cflags/lib/Parrot/OpsFile.pm	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/lib/Parrot/OpsFile.pm	Thu Mar  4 20:51:45 2010	(r44632)
@@ -126,10 +126,6 @@
 
 Transforms to C<X>, an absolute address.
 
-=item C<OP_SIZE>
-
-Transforms to C<S>, the size of an op.
-
 =item C<restart OFFSET(X)>
 
 Transforms to C<PC' = 0> and restarts at C<PC + X>.
@@ -457,11 +453,8 @@
         $argdirs, $line, $file, $labels,     $flags, $nolines
     ) = @_;
     my $counter  = 0;
-    my $absolute = 0;
     my $branch   = 0;
     my $pop      = 0;
-    my $next     = 0;
-    my $restart  = 0;
 
     if (exists($$flags{deprecated})) {
         $body = <<"END_CODE" . $body;
@@ -494,7 +487,6 @@
         #   expr OFFSET(X)     {{^+X}}  PC + X        Relative address
         #   expr NEXT()        {{^+S}}  PC + S        Where S is op size
         #   expr ADDRESS(X)    {{^X}}   X             Absolute address
-        #   OP_SIZE            {{^S}}   S             op size
         #
         #   restart OFFSET(X)  {{=0,+=X}}   PC' = 0   Restarts at PC + X
         #   restart NEXT()     {{=0,+=S}}   PC' = 0   Restarts at PC + S
@@ -512,37 +504,27 @@
         # on the mode of operation (function calls, switch statements, gotos
         # with labels, etc.).
         #
-
-        $absolute ||= $body =~ s/\bgoto\s+ADDRESS\(\( (.*?) \)\)/{{=$1}}/mg;
-                      $body =~ s/\bexpr\s+ADDRESS\(\( (.*?) \)\)/{{^$1}}/mg;
-        $absolute ||= $body =~ s/\bgoto\s+ADDRESS\((.*?)\)/{{=$1}}/mg;
-                      $body =~ s/\bexpr\s+ADDRESS\((.*?)\)/{{^$1}}/mg;
-
-        $branch   ||= $short_name =~ /runinterp/;
-        $branch   ||= $body =~ s/\bgoto\s+OFFSET\(\( (.*?) \)\)/{{+=$1}}/mg;
-                      $body =~ s/\bexpr\s+OFFSET\(\( (.*?) \)\)/{{^+$1}}/mg;
-        $branch   ||= $body =~ s/\bgoto\s+OFFSET\((.*?)\)/{{+=$1}}/mg;
-                      $body =~ s/\bexpr\s+OFFSET\((.*?)\)/{{^+$1}}/mg;
-
-        $next     ||= $short_name =~ /runinterp/;
-        $next     ||= $body =~ s/\bexpr\s+NEXT\(\)/{{^+$op_size}}/mg;
-                      $body =~ s/\bgoto\s+NEXT\(\)/{{+=$op_size}}/mg;
-
-        $body =~ s/\bOP_SIZE\b/{{^$op_size}}/mg;
-
-        if ( $body =~ s/\brestart\s+OFFSET\((.*?)\)/{{=0,+=$1}}/mg ) {
-            $branch  = 1;
-            $restart = 1;
-        }
-        elsif ( $body =~ s/\brestart\s+NEXT\(\)/{{=0,+=$op_size}}/mg ) {
-            $restart = 1;
-            $next    = 1;
-        }
-        elsif ( $body =~ s/\brestart\s+ADDRESS\((.*?)\)/{{=$1}}/mg ) {
-            $next    = 0;
-            $restart = 1;
+        if ($body =~ /(goto|restart)\s+OFFSET\(.*?\)/ || $short_name =~ /runinterp/) {
+            $branch = 1;
         }
 
+        $body =~ s/\bgoto\s+ADDRESS\(\( (.*?) \)\)/{{=$1}}/mg;
+        $body =~ s/\bexpr\s+ADDRESS\(\( (.*?) \)\)/{{^$1}}/mg;
+        $body =~ s/\bgoto\s+ADDRESS\((.*?)\)/{{=$1}}/mg;
+        $body =~ s/\bexpr\s+ADDRESS\((.*?)\)/{{^$1}}/mg;
+
+        $body =~ s/\bgoto\s+OFFSET\(\( (.*?) \)\)/{{+=$1}}/mg;
+        $body =~ s/\bexpr\s+OFFSET\(\( (.*?) \)\)/{{^+$1}}/mg;
+        $body =~ s/\bgoto\s+OFFSET\((.*?)\)/{{+=$1}}/mg;
+        $body =~ s/\bexpr\s+OFFSET\((.*?)\)/{{^+$1}}/mg;
+
+        $body =~ s/\bexpr\s+NEXT\(\)/{{^+$op_size}}/mg;
+        $body =~ s/\bgoto\s+NEXT\(\)/{{+=$op_size}}/mg;
+
+        $body =~ s/\brestart\s+OFFSET\((.*?)\)/{{=0,+=$1}}/mg;
+        $body =~ s/\brestart\s+NEXT\(\)/{{=0,+=$op_size}}/mg;
+        $body =~ s/\brestart\s+ADDRESS\((.*?)\)/{{=$1}}/mg;
+
         $body =~ s/\$(\d+)/{{\@$1}}/mg;
 
         # We can only reference as many parameters as we declare
@@ -558,17 +540,7 @@
         $op->body( $nolines ? $body : qq{#line $line "$file_escaped"\n$body} );
 
         # Constants here are defined in include/parrot/op.h
-        or_flag( \$jumps, "PARROT_JUMP_ADDRESS"  ) if $absolute;
         or_flag( \$jumps, "PARROT_JUMP_RELATIVE" ) if $branch;
-        or_flag( \$jumps, "PARROT_JUMP_ENEXT"    ) if $next;
-        or_flag( \$jumps, "PARROT_JUMP_RESTART"  ) if $restart;
-
-        # I'm assuming the op branches to the value in the last argument.
-        if ( ($jumps)
-            && ( $fixedargs[ @fixedargs - 1 ] )
-            && ( $fixedargs[ @fixedargs - 1 ] eq 'i' ) ) {
-            or_flag( \$jumps, "PARROT_JUMP_GNEXT" );
-        }
 
         $op->jump($jumps);
         $self->push_op($op);

Modified: branches/rm_cflags/runtime/parrot/library/HTTP/Daemon.pir
==============================================================================
--- branches/rm_cflags/runtime/parrot/library/HTTP/Daemon.pir	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/runtime/parrot/library/HTTP/Daemon.pir	Thu Mar  4 20:51:45 2010	(r44632)
@@ -433,7 +433,7 @@
 .end
 
 # close all sockets
-# this needs enabling of SIGHUP in src/events.c but still doesn't
+# this needs enabling of SIGHUP but still doesn't
 # help against FIN_WAIT2 / TIME_WAIT state of connections
 .sub 'shutdown' :method
     .local pmc active, sock

Deleted: branches/rm_cflags/src/events.c
==============================================================================
--- branches/rm_cflags/src/events.c	Thu Mar  4 20:51:45 2010	(r44631)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,1562 +0,0 @@
-/*
-Copyright (C) 2001-2008, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/events.c - Event handling stuff
-
-=head1 DESCRIPTION
-
-An event_thread handles async events for all interpreters. When events
-are due, they are placed in per interpreter task_queues, where they are
-handled then by the C<check_event*> opcodes.
-
-IO events and signals are caught in the io_thread, which again
-dispatches these to one or all interpreters.
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-#include "parrot/events.h"
-#include "events.str"
-
-typedef struct pending_io_events {
-    parrot_event **events;
-    size_t n;
-    size_t alloced;
-} pending_io_events;
-
-/* HEADERIZER HFILE: include/parrot/events.h */
-/* HEADERIZER BEGIN: static */
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * do_event(PARROT_INTERP,
-    ARGIN(parrot_event* event),
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry(ARGIN(const QUEUE_ENTRY *entry))
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY* dup_entry_interval(
-    ARGIN(QUEUE_ENTRY *entry),
-    FLOATVAL now)
-        __attribute__nonnull__(1);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void* event_thread(ARGMOD(void *data))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*data);
-
-static void event_to_exception(PARROT_INTERP,
-    ARGIN(const parrot_event* event))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2);
-
-static void init_events_all(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-static void init_events_first(PARROT_INTERP)
-        __attribute__nonnull__(1);
-
-PARROT_CAN_RETURN_NULL
-static void* io_thread(SHIM(void *data));
-
-static void io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*ios);
-
-static void Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
-        __attribute__nonnull__(2);
-
-static void Parrot_unblock_signal(int sig);
-static int process_events(ARGMOD(QUEUE *event_q))
-        __attribute__nonnull__(1)
-        FUNC_MODIFIES(*event_q);
-
-static void schedule_signal_event(int signum);
-static void sig_handler(int signum);
-static void stop_io_thread(void);
-static void store_io_event(
-    ARGMOD(pending_io_events *ios),
-    ARGIN(parrot_event *ev))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        FUNC_MODIFIES(*ios);
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t * wait_for_wakeup(PARROT_INTERP,
-    ARGIN_NULLOK(opcode_t *next))
-        __attribute__nonnull__(1);
-
-#define ASSERT_ARGS_do_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_dup_entry __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_dup_entry_interval __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(entry))
-#define ASSERT_ARGS_event_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(data))
-#define ASSERT_ARGS_event_to_exception __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(event))
-#define ASSERT_ARGS_init_events_all __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_init_events_first __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-#define ASSERT_ARGS_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_io_thread_ready_rd __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(ios))
-#define ASSERT_ARGS_Parrot_sigaction __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(handler))
-#define ASSERT_ARGS_Parrot_unblock_signal __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_process_events __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(event_q))
-#define ASSERT_ARGS_schedule_signal_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_sig_handler __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_stop_io_thread __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
-#define ASSERT_ARGS_store_io_event __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(ios) \
-    , PARROT_ASSERT_ARG(ev))
-#define ASSERT_ARGS_wait_for_wakeup __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(interp))
-/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */
-/* HEADERIZER END: static */
-
-/*
- * event debugging stuff - turn it off before running tests
- */
-#define EVENT_DEBUG 0
-/*
- * not yet - need to sort out platform code and fix exceptions first
- * TODO get some config for POSIX compliant
- * TODO create API for extenders like ponie - events disabled for now
- */
-#if defined(linux) || defined(darwin)
-#  define INSTALL_EVENT_HANDLER 0
-#else
-#  define INSTALL_EVENT_HANDLER 0
-#endif
-
-#if EVENT_DEBUG
-#  define edebug(x) fprintf (x)
-static const char *ev_names[] = {
-    "EVENT_TYPE_NONE",
-    "EVENT_TYPE_EVENT",
-    "EVENT_TYPE_IO",
-    "EVENT_TYPE_MSG",
-    "EVENT_TYPE_TIMER",
-    "EVENT_TYPE_CALL_BACK",
-    "EVENT_TYPE_SLEEP",
-    "EVENT_TYPE_TERMINATE",
-    "EVENT_TYPE_EVENT_TERMINATE",
-    "EVENT_TYPE_CLASS_CHANGED",
-    "EVENT_TYPE_SIGNAL",
-    "EVENT_TYPE_SUSPEND_FOR_GC"
-};
-static const char*
-et(const parrot_event* const e)
-{
-    return ev_names[e->type];
-}
-
-#else
-#  define edebug(x)
-#endif
-
-
-/* forward defs */
-
-/*
- * we have exactly one global event_queue
- * TODO task prio handling
- */
-static QUEUE *event_queue;
-#define TASK_PRIO 10
-
-/*
- * user accessible signals like SIGINT
- */
-#ifndef SIGINT
-#  define SIGINT -4711
-#endif
-#ifndef SIGHUP
-#  define SIGHUP -4712
-#endif
-
-/*
- * XXX need a configure test
- * should be sig_atomic_t
- */
-static int sig_int, sig_hup;
-
-/*
- * a pipe is used to send messages to the IO thread
- */
-static int pipe_fds[2];
-#define PIPE_READ_FD  pipe_fds[0]
-#define PIPE_WRITE_FD pipe_fds[1]
-
-/*
- * a structure to communicate with the io_thread
- */
-typedef struct io_thread_msg {
-    INTVAL command;
-    parrot_event *ev;
-} io_thread_msg;
-
-
-/*
-
-=back
-
-=head2 Signal Handling
-
-=over 4
-
-=item C<static void sig_handler(int signum)>
-
-Handle signal C<signum>.
-
-TODO - Only C<SIGHUP> is handled at the moment for testing
-
-=cut
-
-*/
-
-static void
-sig_handler(int signum)
-{
-    ASSERT_ARGS(sig_handler)
-    switch (signum) {
-      case SIGINT:
-        sig_int = 1;
-        break;
-      case SIGHUP:
-        sig_hup = 1;
-        break;
-      default:
-        break;
-    }
-}
-
-/*
-
-=item C<static void Parrot_sigaction(int sig, void (*handler(int)))>
-
-Signal handlers are common to all threads, signal block masks are
-specific, so we install one handler then block that signal and unblock
-it in the thread, that will receive that signal.
-
-=cut
-
-*/
-
-static void
-Parrot_sigaction(int sig, ARGIN(void (*handler)(int)))
-{
-    ASSERT_ARGS(Parrot_sigaction)
-#ifdef PARROT_HAS_SIGACTION
-    struct sigaction action;
-    sigset_t block_mask;
-
-    /* install handler */
-    action.sa_handler = handler;
-    sigemptyset(&action.sa_mask);
-    action.sa_flags = 0;
-    sigaction(sig, &action, NULL);
-
-    /* block that signal */
-    sigemptyset(&block_mask);
-    sigaddset(&block_mask, sig);
-    sigprocmask(SIG_BLOCK, &block_mask, NULL);
-#else
-    UNUSED(sig);
-    UNUSED(handler);
-#endif
-}
-
-
-/*
-
-=item C<static void Parrot_unblock_signal(int sig)>
-
-unblock a signal
-
-=cut
-
-*/
-
-static void
-Parrot_unblock_signal(int sig)
-{
-    ASSERT_ARGS(Parrot_unblock_signal)
-#ifdef PARROT_HAS_SIGACTION
-    sigset_t block_mask;
-
-    sigemptyset(&block_mask);
-    sigaddset(&block_mask, sig);
-    sigprocmask(SIG_UNBLOCK, &block_mask, NULL);
-#else
-    UNUSED(sig);
-#endif
-}
-
-
-/*
-
-=item C<void Parrot_init_signals(void)>
-
-Set up actions to handle signals.
-Only SIGHUP handled at the moment.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_signals(void)
-{
-    ASSERT_ARGS(Parrot_init_signals)
-    /*
-     * SIGFPE is architecture specific - some signal an error,
-     * some don't, so we have to use direct checks if we are dividing
-     * by zero.
-     */
-    Parrot_sigaction(SIGHUP, sig_handler);
-}
-
-/*
-
-=back
-
-=head2 Initialization
-
-=over 4
-
-=item C<static void init_events_first(PARROT_INTERP)>
-
-Init event system for first interpreter.
-
-=cut
-
-*/
-
-static void
-init_events_first(PARROT_INTERP)
-{
-    ASSERT_ARGS(init_events_first)
-    Parrot_thread    ev_handle;
-#ifndef WIN32
-    Parrot_thread    io_handle;
-#endif
-
-    /*
-     * be sure all init is done only once
-     * we could use pthread_once for that too
-     */
-    if (event_queue)
-        PANIC(interp, "event queue already exists - missing parent_interp?");
-    /*
-     * create event queue
-     */
-    event_queue = queue_init(TASK_PRIO);
-    /*
-     * we use a message pipe to send IO related stuff to the
-     * IO thread
-     */
-#ifndef WIN32
-    /*
-     * pipes on WIN32 don't support select
-     * s. p6i: "event.c - of signals and pipes"
-     */
-    if (pipe(pipe_fds))
-        Parrot_ex_throw_from_c_args(interp, NULL, 1, "Couldn't create message pipe");
-#endif
-    /*
-     * now set some sig handlers before any thread is started, so
-     * that all threads inherit the signal block mask
-     */
-#if INSTALL_EVENT_HANDLER
-    Parrot_init_signals();
-#endif
-    /*
-     * we start an event_handler thread
-     */
-    THREAD_CREATE_DETACHED(ev_handle, event_thread, event_queue);
-    /*
-     * and a signal and IO handler thread
-     */
-#ifndef WIN32
-    THREAD_CREATE_DETACHED(io_handle, io_thread, event_queue);
-#endif
-}
-
-/*
-
-=item C<static void init_events_all(PARROT_INTERP)>
-
-Init events for all interpreters.
-
-=cut
-
-*/
-
-static void
-init_events_all(PARROT_INTERP)
-{
-    ASSERT_ARGS(init_events_all)
-    /*
-     * create per interpreter task queue
-     */
-    interp->task_queue = queue_init(0);
-}
-
-/*
-
-=item C<void Parrot_init_events(PARROT_INTERP)>
-
-Initialize the event system.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_init_events(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_init_events)
-    if (!interp->parent_interpreter) {
-        /* add the very first interpreter to the list of interps. */
-        pt_add_to_interpreters(interp, NULL);
-        init_events_first(interp);
-    }
-    init_events_all(interp);
-}
-
-/*
-
-=back
-
-=head2 Event Handler Functions
-
-=over 4
-
-=item C<void Parrot_schedule_event(PARROT_INTERP, parrot_event* ev)>
-
-Create queue entry and insert event into task queue.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_event(PARROT_INTERP, ARGMOD(parrot_event* ev))
-{
-    ASSERT_ARGS(Parrot_schedule_event)
-    QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-    entry->next = NULL;
-    ev->interp  = interp;
-    entry->data = ev;
-    switch (ev->type) {
-      case EVENT_TYPE_TIMER:
-      case EVENT_TYPE_SLEEP:
-        entry->type = QUEUE_ENTRY_TYPE_TIMED_EVENT;
-        insert_entry(event_queue, entry);
-        break;
-      case EVENT_TYPE_CALL_BACK:
-      case EVENT_TYPE_SIGNAL:
-      case EVENT_TYPE_IO:
-        entry->type = QUEUE_ENTRY_TYPE_EVENT;
-        unshift_entry(event_queue, entry);
-        break;
-      default:
-        entry->type = QUEUE_ENTRY_TYPE_EVENT;
-        push_entry(event_queue, entry);
-        break;
-    }
-}
-
-/*
-
-=item C<static void schedule_signal_event(int signum)>
-
-create and schedule a signal event
-
-=cut
-
-*/
-
-static void
-schedule_signal_event(int signum)
-{
-    ASSERT_ARGS(schedule_signal_event)
-    parrot_event* const ev    = mem_internal_allocate_typed(parrot_event);
-    QUEUE_ENTRY * const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    entry->next  = NULL;
-    entry->type  = QUEUE_ENTRY_TYPE_EVENT;
-    ev->type     = EVENT_TYPE_SIGNAL;
-    ev->u.signal = signum;
-    entry->data  = ev;
-    /*
-     * deliver to all interpreters
-     */
-    Parrot_schedule_broadcast_qentry(entry);
-}
-
-/*
-
-=item C<void Parrot_new_timer_event(PARROT_INTERP, PMC *timer, FLOATVAL diff,
-FLOATVAL interval, int repeat, PMC *sub, parrot_event_type_enum typ)>
-
-Create a new timer event due at C<diff> from now, repeated at C<interval>
-and running the passed C<sub>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_timer_event(PARROT_INTERP, ARGIN_NULLOK(PMC *timer), FLOATVAL diff,
-        FLOATVAL interval, int repeat, ARGIN_NULLOK(PMC *sub), parrot_event_type_enum typ)
-{
-    ASSERT_ARGS(Parrot_new_timer_event)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-
-    const FLOATVAL now = Parrot_floatval_time();
-
-    ev->type                   = typ;
-    ev->u.timer_event.timer    = timer;
-    ev->u.timer_event.abs_time = now + diff;
-    ev->u.timer_event.interval = interval;
-    ev->u.timer_event.repeat   = repeat;
-    ev->u.timer_event.sub      = sub;
-
-    if (repeat && FLOAT_IS_ZERO(interval))
-        ev->u.timer_event.interval = diff;
-
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_cb_event(PARROT_INTERP, PMC *cbi, char *ext)>
-
-Prepare and schedule a callback event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_cb_event(PARROT_INTERP, ARGIN(PMC *cbi), ARGIN(char *ext))
-{
-    ASSERT_ARGS(Parrot_new_cb_event)
-    parrot_event* const ev    = mem_internal_allocate_typed(parrot_event);
-    QUEUE_ENTRY*  const entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    entry->next = NULL;
-    entry->data = ev;
-    ev->interp  = interp;
-    ev->type    = EVENT_TYPE_CALL_BACK;
-    ev->u.call_back.cbi           = cbi;
-    ev->u.call_back.external_data = ext;
-    Parrot_schedule_interp_qentry(interp, entry);
-}
-
-/*
-
-=item C<void Parrot_del_timer_event(PARROT_INTERP, const PMC *timer)>
-
-Deactivate the timer identified by C<timer>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_del_timer_event(PARROT_INTERP, ARGIN(const PMC *timer))
-{
-    ASSERT_ARGS(Parrot_del_timer_event)
-    QUEUE_ENTRY *entry;
-
-    LOCK(event_queue->queue_mutex);
-
-    for (entry = event_queue->head; entry; entry = entry->next) {
-        if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-
-            parrot_event * const event = (parrot_event *)entry->data;
-
-            if (event->interp == interp
-                    && event->u.timer_event.timer == timer) {
-                event->u.timer_event.interval = 0.0;
-                event->type = EVENT_TYPE_NONE;
-                break;
-            }
-        }
-    }
-    UNLOCK(event_queue->queue_mutex);
-}
-
-/*
-
-=item C<void Parrot_new_terminate_event(PARROT_INTERP)>
-
-Create a terminate event, interpreter will leave the run-loop when this
-event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_terminate_event(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_new_terminate_event)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_TERMINATE;
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_new_suspend_for_gc_event(PARROT_INTERP)>
-
-Create a suspend-for-GC event, interpreter will wait on a condition
-variable for GC to finish when the event arrives.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_new_suspend_for_gc_event(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_new_suspend_for_gc_event)
-    QUEUE_ENTRY *qe;
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_SUSPEND_FOR_GC;
-    qe = mem_internal_allocate_typed(QUEUE_ENTRY);
-    qe->next = NULL;
-    qe->data = ev;
-    qe->type = QUEUE_ENTRY_TYPE_EVENT;
-    /* we don't use schedule_event because we must modify its
-     * task queue immediately
-     */
-    Parrot_schedule_interp_qentry(interp, qe);
-}
-
-/*
-
-=item C<void Parrot_kill_event_loop(PARROT_INTERP)>
-
-Schedule event-loop terminate event. This shuts down the event thread.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_kill_event_loop(PARROT_INTERP)
-{
-    ASSERT_ARGS(Parrot_kill_event_loop)
-    parrot_event* const ev = mem_internal_allocate_typed(parrot_event);
-    ev->type = EVENT_TYPE_EVENT_TERMINATE;
-    Parrot_schedule_event(interp, ev);
-}
-
-/*
-
-=item C<void Parrot_schedule_interp_qentry(PARROT_INTERP, struct QUEUE_ENTRY
-*entry)>
-
-Put a queue entry into the interpreters task queue and enable event
-checking for the interpreter.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_schedule_interp_qentry(PARROT_INTERP, ARGIN(struct QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(Parrot_schedule_interp_qentry)
-    parrot_event * const event = (parrot_event *)entry->data;
-    /*
-     * sleep checks events when it awakes
-     */
-    edebug((stderr, "got entry - schedule_inter_qentry %s\n", et(event)));
-    if (event->type != EVENT_TYPE_SLEEP)
-        enable_event_checking(interp);
-    /*
-     * do push_entry last - this signales the queue condition so the
-     * interpreter might starting process that event immediately
-     *
-     * we should better use a priority for placing the event
-     * in front or at the end of the queue
-     */
-    switch (event->type) {
-      case EVENT_TYPE_CALL_BACK:
-      case EVENT_TYPE_SIGNAL:
-        unshift_entry(interp->task_queue, entry);
-        break;
-      default:
-        push_entry(interp->task_queue, entry);
-        break;
-    }
-}
-
-/*
-
-=item C<void Parrot_schedule_broadcast_qentry(struct QUEUE_ENTRY *entry)>
-
-Broadcast an event.
-
-=cut
-
-*/
-
-void
-Parrot_schedule_broadcast_qentry(ARGIN(struct QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(Parrot_schedule_broadcast_qentry)
-    parrot_event * const event = (parrot_event *)entry->data;
-
-    switch (event->type) {
-      case EVENT_TYPE_SIGNAL:
-        edebug((stderr, "broadcast signal\n"));
-        /*
-         * we don't have special signal handlers in usercode yet
-         * e.g.:
-         * install handler like exception handler *and*
-         * set a interpreter flag, that a handler exists
-         * we then could examine that flag (after LOCKing it)
-         * and dispatch the exception to all interpreters that
-         * handle it
-         * Finally, we send the first (main) interpreter that signal
-         *
-         * For now just send to all.
-         *
-         */
-        switch (event->u.signal) {
-          case SIGHUP:
-          case SIGINT:
-            {
-                if (n_interpreters) {
-                    size_t i;
-                    LOCK(interpreter_array_mutex);
-                    for (i = 1; i < n_interpreters; ++i) {
-                        Interp *interp;
-                        edebug((stderr, "deliver SIGINT to %d\n", i));
-                        interp = interpreter_array[i];
-                        if (interp)
-                            Parrot_schedule_interp_qentry(interp,
-                                        dup_entry(entry));
-                    }
-                    UNLOCK(interpreter_array_mutex);
-                }
-                Parrot_schedule_interp_qentry(interpreter_array[0], entry);
-                edebug((stderr, "deliver SIGINT to 0\n"));
-            }
-            break;
-          default:
-            mem_internal_free(entry);
-            mem_internal_free(event);
-        }
-        break;
-      default:
-        mem_internal_free(entry);
-        mem_internal_free(event);
-        exit_fatal(1, "Unknown event to broadcast");
-        break;
-    }
-}
-
-/*
-
-=back
-
-=head2 IO Thread Handling
-
-=over 4
-
-=cut
-
-*/
-
-#ifndef WIN32
-
-/*
-
-=item C<static void store_io_event(pending_io_events *ios, parrot_event *ev)>
-
-Stores an event in the event stack.  Allocates memory if necessary.
-
-=cut
-
-*/
-
-static void
-store_io_event(ARGMOD(pending_io_events *ios), ARGIN(parrot_event *ev))
-{
-    ASSERT_ARGS(store_io_event)
-    if (!ios->alloced) {
-        ios->alloced = 16;
-        ios->events  = mem_internal_allocate_n_zeroed_typed(ios->alloced, parrot_event *);
-    }
-    else if (ios->n >= ios->alloced) {
-        ios->events  = mem_internal_realloc_n_zeroed_typed(ios->events,
-                ios->alloced * 2, ios->alloced, parrot_event *);
-        ios->alloced *= 2;
-    }
-    ios->events[ios->n++] = ev;
-}
-
-/*
-
-=item C<static void io_thread_ready_rd(pending_io_events *ios, int ready_rd)>
-
-Takes a list of pending i/o events and a file descriptor.
-If the fd is ready to read, the event is removed from the
-"pending" list and moved to the "scheduled" task queue.
-
-=cut
-
-*/
-
-static void
-io_thread_ready_rd(ARGMOD(pending_io_events *ios), int ready_rd)
-{
-    ASSERT_ARGS(io_thread_ready_rd)
-    size_t i;
-
-    for (i = 0; i < ios->n; ++i) {
-        parrot_event * const ev  = ios->events[i];
-        PMC          * const pio = ev->u.io_event.pio;
-        const int            fd  = Parrot_io_getfd(ev->interp, pio);
-
-        if (fd == ready_rd) {
-            /* remove from event list */
-            --ios->n;
-
-            for (; i < ios->n; ++i)
-                ios->events[i] = ios->events[i+1];
-
-            Parrot_schedule_event(ev->interp, ev);
-            break;
-        }
-    }
-}
-
-/*
-
-=item C<static void* io_thread(void *data)>
-
-The IO thread uses select/poll to handle IO events and signals.
-
-It waits on input from the message pipe to insert file descriptors in
-the wait sets.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-static void*
-io_thread(SHIM(void *data))
-{
-    ASSERT_ARGS(io_thread)
-    fd_set act_rfds, act_wfds;
-    int n_highest, i;
-    int  running = 1;
-    pending_io_events ios;
-
-    ios.n       = 0;
-    ios.alloced = 0;
-    ios.events  = 0;
-    /* remember pending io events */
-
-    FD_ZERO(&act_rfds);
-    FD_ZERO(&act_wfds);
-    /*
-     * Watch the reader end of the pipe for messages
-     */
-    FD_SET(PIPE_READ_FD, &act_rfds);
-    n_highest = PIPE_READ_FD + 1;
-    /*
-     * all signals that we shall handle here have to be unblocked
-     * in this and only in this thread
-     */
-    Parrot_unblock_signal(SIGHUP);
-    while (running) {
-        fd_set rfds = act_rfds;
-        fd_set wfds = act_wfds;
-        const int retval = select(n_highest, &rfds, &wfds, NULL, NULL);
-
-        switch (retval) {
-          case -1:
-            if (errno == EINTR) {
-                edebug((stderr, "select EINTR\n"));
-                if (sig_int) {
-                    edebug((stderr, "int arrived\n"));
-                    sig_int = 0;
-                    /*
-                     * signal the event thread
-                     */
-                    schedule_signal_event(SIGINT);
-                }
-                if (sig_hup) {
-                    edebug((stderr, "int arrived\n"));
-                    sig_hup = 0;
-                    /*
-                     * signal the event thread
-                     */
-                    schedule_signal_event(SIGHUP);
-                }
-
-            }
-            break;
-          case 0:     /* timeout - can't happen */
-            break;
-          default:
-            edebug((stderr, "IO ready\n"));
-            for (i = 0; i < n_highest; ++i) {
-                if (FD_ISSET(i, &rfds)) {
-                    if (i == PIPE_READ_FD) {
-                        io_thread_msg buf;
-                        /*
-                         * a command arrived
-                         */
-                        edebug((stderr, "msg arrived\n"));
-                        if (read(PIPE_READ_FD, &buf, sizeof (buf)) != sizeof (buf))
-                            exit_fatal(1,
-                                    "read error from msg pipe");
-                        switch (buf.command) {
-                          case IO_THR_MSG_TERMINATE:
-                            running = 0;
-                            break;
-                          case IO_THR_MSG_ADD_SELECT_RD:
-                            {
-                                PMC * const pio = buf.ev->u.io_event.pio;
-                                const int fd = Parrot_io_getfd(buf.ev->interp, pio);
-                                if (FD_ISSET(fd, &act_rfds)) {
-                                    mem_internal_free(buf.ev);
-                                    break;
-                                }
-                                FD_SET(fd, &act_rfds);
-                                if (fd >= n_highest)
-                                    n_highest = fd + 1;
-                                store_io_event(&ios, buf.ev);
-                            }
-                            break;
-                          default:
-                            /* TODO */
-                            exit_fatal(1, "unhandled msg in pipe");
-                            break;
-                        }
-
-                    }
-                    else {
-                        /*
-                         * one of the io_event fds is ready
-                         * remove from active set, as we don't
-                         * want to fire again during io_handler
-                         * invocation
-                         */
-                        FD_CLR(i, &act_rfds);
-                        io_thread_ready_rd(&ios, i);
-                    }
-                }
-            }
-            /* TODO check fds */
-            break;
-        }
-    }
-    edebug((stderr, "IO thread terminated\n"));
-    close(PIPE_READ_FD);
-    close(PIPE_WRITE_FD);
-    return NULL;
-}
-#endif
-
-/*
-
-=item C<static void stop_io_thread(void)>
-
-Tell the IO thread to stop.
-
-=cut
-
-*/
-
-static void
-stop_io_thread(void)
-{
-    ASSERT_ARGS(stop_io_thread)
-#ifndef WIN32
-    io_thread_msg buf;
-    /*
-     * tell IO thread to stop
-     */
-    memset(&buf, 0, sizeof (buf));
-    buf.command = IO_THR_MSG_TERMINATE;
-    if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
-        exit_fatal(1, "msg pipe write failed");
-#endif
-}
-
-/*
-
-=item C<void Parrot_event_add_io_event(PARROT_INTERP, PMC *pio, PMC *sub, PMC
-*data, INTVAL which)>
-
-Create new i/o event.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-void
-Parrot_event_add_io_event(PARROT_INTERP,
-        ARGIN_NULLOK(PMC *pio), ARGIN_NULLOK(PMC *sub), ARGIN_NULLOK(PMC *data), INTVAL which)
-{
-    ASSERT_ARGS(Parrot_event_add_io_event)
-    io_thread_msg buf;
-    parrot_event * const event = mem_internal_allocate_typed(parrot_event);
-
-    event->type   = EVENT_TYPE_IO;
-    event->interp = interp;
-    /*
-     * TODO gc_register these PMCs as long as the event system
-     *      owns these 3
-     *      unregister, when event is passed to interp again
-     */
-    event->u.io_event.pio       = pio;
-    event->u.io_event.handler   = sub;
-    event->u.io_event.user_data = data;
-
-    buf.command = which;
-    buf.ev      = event;
-    /* XXX Why isn't this entire function inside an ifndef WIN32? */
-#ifndef WIN32
-    if (write(PIPE_WRITE_FD, &buf, sizeof (buf)) != sizeof (buf))
-        Parrot_ex_throw_from_c_args(interp, NULL, 1, "msg pipe write failed");
-#endif
-}
-
-
-/*
-
-=back
-
-=head2 Event Handler Thread Functions
-
-=over 4
-
-=item C<static QUEUE_ENTRY* dup_entry(const QUEUE_ENTRY *entry)>
-
-Duplicate queue entry.
-
-=cut
-
-*/
-
-PARROT_MALLOC
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry(ARGIN(const QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(dup_entry)
-    QUEUE_ENTRY * const new_entry = mem_internal_allocate_typed(QUEUE_ENTRY);
-
-    new_entry->next = NULL;
-    new_entry->type = entry->type;
-    new_entry->data = mem_internal_allocate_typed(parrot_event);
-
-    mem_sys_memcopy(new_entry->data, entry->data, sizeof (parrot_event));
-    return new_entry;
-}
-
-/*
-
-=item C<static QUEUE_ENTRY* dup_entry_interval(QUEUE_ENTRY *entry, FLOATVAL
-now)>
-
-Duplicate timed entry and add interval to C<abs_time>.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CANNOT_RETURN_NULL
-static QUEUE_ENTRY*
-dup_entry_interval(ARGIN(QUEUE_ENTRY *entry), FLOATVAL now)
-{
-    ASSERT_ARGS(dup_entry_interval)
-    QUEUE_ENTRY  * const new_entry = dup_entry(entry);
-    parrot_event * const event     = (parrot_event *)new_entry->data;
-
-    event->u.timer_event.abs_time  = now + event->u.timer_event.interval;
-
-    return new_entry;
-}
-
-/*
-
-=item C<static int process_events(QUEUE *event_q)>
-
-Do something, when an event arrived caller has locked the mutex returns
-0 if event thread terminates.
-
-=cut
-
-*/
-
-static int
-process_events(ARGMOD(QUEUE *event_q))
-{
-    ASSERT_ARGS(process_events)
-    FLOATVAL     now;
-    QUEUE_ENTRY *entry;
-
-    while ((entry = peek_entry(event_q)) != NULL) {
-        /*
-         * one or more entries arrived - we hold the mutex again
-         * so we have to use the nonsyc_pop_entry to pop off event entries
-         */
-        parrot_event *event = NULL;
-
-        switch (entry->type) {
-          case QUEUE_ENTRY_TYPE_EVENT:
-            entry = nosync_pop_entry(event_q);
-            event = (parrot_event *)entry->data;
-            break;
-
-          case QUEUE_ENTRY_TYPE_TIMED_EVENT:
-            event = (parrot_event *)entry->data;
-            now   = Parrot_floatval_time();
-
-            /*
-             * if the timer_event isn't due yet, ignore the event
-             * (we were signalled on insert of the event)
-             * wait until we get at it again when time has elapsed
-             */
-            if (now < event->u.timer_event.abs_time)
-                return 1;
-            entry = nosync_pop_entry(event_q);
-
-            /* if event is repeated dup and reinsert it */
-
-            if (event->u.timer_event.interval) {
-                if (event->u.timer_event.repeat) {
-                    if (event->u.timer_event.repeat != -1)
-                        event->u.timer_event.repeat--;
-                    nosync_insert_entry(event_q,
-                                dup_entry_interval(entry, now));
-                }
-            }
-            break;
-          default:
-            exit_fatal(1, "Unknown queue entry");
-        }
-        PARROT_ASSERT(event);
-        if (event->type == EVENT_TYPE_NONE) {
-            mem_internal_free(entry);
-            mem_internal_free(event);
-            continue;
-        }
-        else if (event->type == EVENT_TYPE_EVENT_TERMINATE) {
-            mem_internal_free(entry);
-            mem_internal_free(event);
-
-            return 0;
-        }
-        /*
-         * now insert entry in interpreter task queue
-         */
-        if (event->interp) {
-            Parrot_schedule_interp_qentry(event->interp, entry);
-        }
-        else {
-            Parrot_schedule_broadcast_qentry(entry);
-        }
-    } /* while events */
-    return 1;
-}
-
-/*
-
-=item C<static void* event_thread(void *data)>
-
-The event thread is started by the first interpreter. It handles all
-events for all interpreters.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static void*
-event_thread(ARGMOD(void *data))
-{
-    ASSERT_ARGS(event_thread)
-    QUEUE * const event_q = (QUEUE *) data;
-    int running = 1;
-
-    LOCK(event_q->queue_mutex);
-    /*
-     * we might already have an event in the queue
-     */
-    if (peek_entry(event_q))
-        running = process_events(event_q);
-    while (running) {
-        QUEUE_ENTRY * const entry = peek_entry(event_q);
-
-        if (!entry) {
-            /* wait infinite until entry arrives */
-            queue_wait(event_q);
-        }
-        else if (entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-            /* do a_timedwait for entry */
-            struct timespec abs_time;
-            parrot_event * const event = (parrot_event*)entry->data;
-            const FLOATVAL when = event->u.timer_event.abs_time;
-
-            abs_time.tv_sec  = (time_t) when;
-            abs_time.tv_nsec = (long)((when - abs_time.tv_sec)*1000.0f)
-                *1000L*1000L;
-            queue_timedwait(event_q, &abs_time);
-        }
-        else {
-            /* we shouldn't get here probably
-             */
-            exit_fatal(1, "Spurious event");
-
-        }
-        /*
-         * one or more entries arrived - we hold the mutex again
-         * so we have to use the nonsync_pop_entry to pop off event entries
-         */
-        running = process_events(event_q);
-    } /* event loop */
-    /*
-     * the main interpreter is dying
-     * TODO empty the queue
-     */
-    UNLOCK(event_q->queue_mutex);
-    queue_destroy(event_q);
-    stop_io_thread();
-    edebug((stderr, "event thread stopped\n"));
-    return NULL;
-}
-
-/*
-
-=back
-
-=head2 Sleep Handling
-
-=over 4
-
-=item C<static opcode_t * wait_for_wakeup(PARROT_INTERP, opcode_t *next)>
-
-Sleep on the event queue condition. If an event arrives, the event
-is processed. Terminate the loop if sleeping is finished.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-wait_for_wakeup(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(wait_for_wakeup)
-    QUEUE * const tq = interp->task_queue;
-
-    interp->sleeping = 1;
-
-    /*
-     * event handler like callbacks or timers are run as normal code
-     * so inside such an event handler function, another event might get
-     * handled, which is good (higher priority events can interrupt
-     * other event handler).  OTOH we must ensure that all state changes
-     * are done in do_event and we should probably suspend nested
-     * event handlers sometimes
-     *
-     * FIXME: the same is true for the *next param:
-     *        get rid of that, instead mangle the resume flags
-     *        and offset to stop the runloop
-     *
-     */
-
-    while (interp->sleeping) {
-        QUEUE_ENTRY  * const entry = wait_for_entry(tq);
-        parrot_event * const event = (parrot_event*)entry->data;
-
-        mem_internal_free(entry);
-        edebug((stderr, "got ev %s head : %p\n", et(event), tq->head));
-        next = do_event(interp, event, next);
-    }
-
-    edebug((stderr, "woke up\n"));
-    return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, opcode_t
-*next)>
-
-Go to sleep. This is called from the C<sleep> opcode.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_sleep_on_event(PARROT_INTERP, FLOATVAL t, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_sleep_on_event)
-#ifdef PARROT_HAS_THREADS
-
-    if (interp->sleeping)
-        fprintf(stderr, "nested sleep might not work\n");
-    /*
-     * place the opcode_t* next arg in the event data, so that
-     * we can identify this event in wakeup
-     */
-    Parrot_new_timer_event(interp, (PMC *) next, t, 0.0, 0,
-        NULL, EVENT_TYPE_SLEEP);
-    next = wait_for_wakeup(interp, next);
-#else
-    /*
-     * TODO check for nanosleep or such
-     */
-    Parrot_sleep((UINTVAL) ceil(t));
-#endif
-    return next;
-}
-
-/*
-
-=back
-
-=head2 Event Handling for Run-Loops
-
-=over 4
-
-=item C<opcode_t * Parrot_do_check_events(PARROT_INTERP, opcode_t *next)>
-
-Explicitly C<sync> called by the check_event opcode from run loops.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_check_events(PARROT_INTERP, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_do_check_events)
-    if (peek_entry(interp->task_queue))
-        return Parrot_do_handle_events(interp, 0, next);
-
-    return next;
-}
-
-/*
-
-=item C<static void event_to_exception(PARROT_INTERP, const parrot_event*
-event)>
-
-Convert event to exception and throw it.
-
-=cut
-
-*/
-
-static void
-event_to_exception(PARROT_INTERP, ARGIN(const parrot_event* event))
-{
-    ASSERT_ARGS(event_to_exception)
-    const int exit_code = -event->u.signal;
-
-    switch (event->u.signal) {
-      case SIGINT:
-      case SIGHUP:
-        /*
-         * SIGINT is silent, if no exception handler is
-         * installed: set severity to EXCEPT_exit
-         */
-        {
-            STRING * const message = CONST_STRING(interp, "Caught signal.");
-            PMC           *exception = Parrot_ex_build_exception(interp,
-                                        EXCEPT_exit, exit_code, message);
-
-            Parrot_ex_throw_from_c(interp, exception);
-        }
-        break;
-      default:
-        Parrot_ex_throw_from_c_args(interp, NULL, exit_code,
-                    "Caught signal.");
-        break;
-    }
-}
-
-/*
-
-=item C<static opcode_t * do_event(PARROT_INTERP, parrot_event* event, opcode_t
-*next)>
-
-Run user code or such.  The C<event> argument is freed after execution.
-
-TODO: Instrument with splint args so splint knows event gets released.
-
-=cut
-
-*/
-
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-static opcode_t *
-do_event(PARROT_INTERP, ARGIN(parrot_event* event), ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(do_event)
-    edebug((stderr, "do_event %s\n", et(event)));
-    switch (event->type) {
-      case EVENT_TYPE_TERMINATE:
-        next = NULL;        /* this will terminate the run loop */
-        break;
-      case EVENT_TYPE_SIGNAL:
-        interp->sleeping = 0;
-        /* generate exception */
-        event_to_exception(interp, event);
-        /* not reached - will longjmp */
-        break;
-      case EVENT_TYPE_TIMER:
-        /* run ops, save registers */
-        Parrot_pcc_invoke_sub_from_c_args(interp,
-                    event->u.timer_event.sub, "->");
-        break;
-      case EVENT_TYPE_CALL_BACK:
-        edebug((stderr, "starting user cb\n"));
-        Parrot_run_callback(interp, event->u.call_back.cbi,
-                    event->u.call_back.external_data);
-        break;
-      case EVENT_TYPE_IO:
-        edebug((stderr, "starting io handler\n"));
-        Parrot_pcc_invoke_sub_from_c_args(interp,
-                    event->u.io_event.handler,
-                    "PP->",
-                    event->u.io_event.pio,
-                    event->u.io_event.user_data);
-        break;
-      case EVENT_TYPE_SLEEP:
-        interp->sleeping = 0;
-        break;
-      case EVENT_TYPE_SUSPEND_FOR_GC:
-        edebug((stderr, "suspend for gc\n"));
-        pt_suspend_self_for_gc(interp);
-        break;
-      default:
-        fprintf(stderr, "Unhandled event type %d\n", (int)event->type);
-        break;
-    }
-    mem_internal_free(event);
-    return next;
-}
-
-/*
-
-=item C<opcode_t * Parrot_do_handle_events(PARROT_INTERP, int restore, opcode_t
-*next)>
-
-Called by the C<check_event__> opcode from run loops or from above. When
-called from the C<check_events__> opcode, we have to restore the
-C<op_func_table>.
-
-=cut
-
-*/
-
-PARROT_EXPORT
-PARROT_WARN_UNUSED_RESULT
-PARROT_CAN_RETURN_NULL
-opcode_t *
-Parrot_do_handle_events(PARROT_INTERP, int restore, ARGIN_NULLOK(opcode_t *next))
-{
-    ASSERT_ARGS(Parrot_do_handle_events)
-    QUEUE * const tq = interp->task_queue;
-
-    if (restore)
-        disable_event_checking(interp);
-
-    if (!peek_entry(tq))
-        return next;
-
-    while (peek_entry(tq)) {
-        QUEUE_ENTRY  * const entry = pop_entry(tq);
-        parrot_event * const event = (parrot_event*)entry->data;
-
-        mem_internal_free(entry);
-        next = do_event(interp, event, next);
-    }
-
-    return next;
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/events.h> and F<docs/dev/events.pod>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/rm_cflags/src/ops/core.ops
==============================================================================
--- branches/rm_cflags/src/ops/core.ops	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/src/ops/core.ops	Thu Mar  4 20:51:45 2010	(r44632)
@@ -88,16 +88,6 @@
 Don't use.
 (Must be op #5, CORE_OPS_wrapper__).
 
-=item B<prederef__>()
-
-Internal opcode to prederef opcodes on the fly.
-Don't use.
-(Must be op #6, CORE_OPS_prederef__).
-
-=item B<reserved>(inconst INT)
-
-Reserve 1 more fix entry.
-
 =item B<load_bytecode>(in STR)
 
 Load Parrot bytecode from file $1, and search the library path to locate the
@@ -148,21 +138,6 @@
     goto ADDRESS(pc);
 }
 
-inline op prederef__() :internal :flow {
-    opcode_t * const _this = CUR_OPCODE;
-    if (PARROT_RUNCORE_CGOTO_OPS_TEST(interp->run_core)) {
-        /* must be CGP then - check for events in not yet prederefed code */
-        Parrot_cx_runloop_wake(interp, interp->scheduler);
-    /*    _this = CHECK_EVENTS(interp, _this); */
-    }
-    do_prederef((void**)cur_opcode, interp, interp->run_core);
-    goto ADDRESS(_this); /* force this being a branch op */
-}
-
-inline op reserved(inconst INT) {
-    /* reserve 1 entries */
-}
-
 inline op load_bytecode(in STR) :load_file {
     Parrot_load_bytecode(interp, $1);
 }

Modified: branches/rm_cflags/src/ops/ops.num
==============================================================================
--- branches/rm_cflags/src/ops/ops.num	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/src/ops/ops.num	Thu Mar  4 20:51:45 2010	(r44632)
@@ -26,1251 +26,1249 @@
 check_events                      3
 check_events__                    4
 wrapper__                         5
-prederef__                        6
-reserved_ic                       7
 ###DYNAMIC### other ops
-load_bytecode_s                   8
-load_bytecode_sc                  9
-load_language_s                  10
-load_language_sc                 11
-branch_i                         12
-branch_ic                        13
-local_branch_p_i                 14
-local_branch_p_ic                15
-local_return_p                   16
-jump_i                           17
-jump_ic                          18
-enternative                      19
-if_i_ic                          20
-if_n_ic                          21
-if_s_ic                          22
-if_p_ic                          23
-unless_i_ic                      24
-unless_n_ic                      25
-unless_s_ic                      26
-unless_p_ic                      27
-invokecc_p                       28
-invoke_p_p                       29
-yield                            30
-tailcall_p                       31
-returncc                         32
-capture_lex_p                    33
-newclosure_p_p                   34
-set_args_pc                      35
-get_results_pc                   36
-get_params_pc                    37
-set_returns_pc                   38
-result_info_p                    39
-set_addr_i_ic                    40
-set_addr_p_ic                    41
-set_addr_p_i                     42
-get_addr_i_p                     43
-schedule_p                       44
-addhandler_p                     45
-push_eh_ic                       46
-push_eh_p                        47
-pop_eh                           48
-throw_p                          49
-throw_p_p                        50
-rethrow_p                        51
-count_eh_i                       52
-die_s                            53
-die_sc                           54
-die_p                            55
-die_pc                           56
-die_i_i                          57
-die_ic_i                         58
-die_i_ic                         59
-die_ic_ic                        60
-exit_i                           61
-exit_ic                          62
-pushmark_i                       63
-pushmark_ic                      64
-popmark_i                        65
-popmark_ic                       66
-pushaction_p                     67
-debug_i                          68
-debug_ic                         69
-bounds_i                         70
-bounds_ic                        71
-profile_i                        72
-profile_ic                       73
-trace_i                          74
-trace_ic                         75
-gc_debug_i                       76
-gc_debug_ic                      77
-interpinfo_i_i                   78
-interpinfo_i_ic                  79
-interpinfo_p_i                   80
-interpinfo_p_ic                  81
-interpinfo_s_i                   82
-interpinfo_s_ic                  83
-warningson_i                     84
-warningson_ic                    85
-warningsoff_i                    86
-warningsoff_ic                   87
-errorson_i                       88
-errorson_ic                      89
-errorsoff_i                      90
-errorsoff_ic                     91
-runinterp_p_i                    92
-runinterp_p_ic                   93
-getinterp_p                      94
-sweep_ic                         95
-collect                          96
-sweepoff                         97
-sweepon                          98
-collectoff                       99
-collecton                       100
-needs_destroy_p                 101
-loadlib_p_s                     102
-loadlib_p_sc                    103
-dlfunc_p_p_s_s                  104
-dlfunc_p_p_sc_s                 105
-dlfunc_p_p_s_sc                 106
-dlfunc_p_p_sc_sc                107
-dlvar_p_p_s                     108
-dlvar_p_p_sc                    109
-compreg_s_p                     110
-compreg_sc_p                    111
-compreg_p_s                     112
-compreg_p_sc                    113
-new_callback_p_p_p_s            114
-new_callback_p_p_p_sc           115
-annotations_p                   116
-annotations_p_s                 117
-annotations_p_sc                118
-band_i_i                        119
-band_i_ic                       120
-band_p_i                        121
-band_p_ic                       122
-band_p_p                        123
-band_i_i_i                      124
-band_i_ic_i                     125
-band_i_i_ic                     126
-band_p_p_i                      127
-band_p_p_ic                     128
-band_p_p_p                      129
-bands_s_s                       130
-bands_s_sc                      131
-bands_p_s                       132
-bands_p_sc                      133
-bands_p_p                       134
-bands_s_s_s                     135
-bands_s_sc_s                    136
-bands_s_s_sc                    137
-bands_p_p_s                     138
-bands_p_p_sc                    139
-bands_p_p_p                     140
-bnot_i                          141
-bnot_i_i                        142
-bnot_p                          143
-bnot_p_p                        144
-bnots_s                         145
-bnots_s_s                       146
-bnots_s_sc                      147
-bnots_p                         148
-bnots_p_p                       149
-bor_i_i                         150
-bor_i_ic                        151
-bor_p_i                         152
-bor_p_ic                        153
-bor_p_p                         154
-bor_i_i_i                       155
-bor_i_ic_i                      156
-bor_i_i_ic                      157
-bor_p_p_i                       158
-bor_p_p_ic                      159
-bor_p_p_p                       160
-bors_s_s                        161
-bors_s_sc                       162
-bors_p_s                        163
-bors_p_sc                       164
-bors_p_p                        165
-bors_s_s_s                      166
-bors_s_sc_s                     167
-bors_s_s_sc                     168
-bors_p_p_s                      169
-bors_p_p_sc                     170
-bors_p_p_p                      171
-shl_i_i                         172
-shl_i_ic                        173
-shl_p_i                         174
-shl_p_ic                        175
-shl_p_p                         176
-shl_i_i_i                       177
-shl_i_ic_i                      178
-shl_i_i_ic                      179
-shl_p_p_i                       180
-shl_p_p_ic                      181
-shl_p_p_p                       182
-shr_i_i                         183
-shr_i_ic                        184
-shr_p_i                         185
-shr_p_ic                        186
-shr_p_p                         187
-shr_i_i_i                       188
-shr_i_ic_i                      189
-shr_i_i_ic                      190
-shr_p_p_i                       191
-shr_p_p_ic                      192
-shr_p_p_p                       193
-lsr_i_i                         194
-lsr_i_ic                        195
-lsr_p_i                         196
-lsr_p_ic                        197
-lsr_p_p                         198
-lsr_i_i_i                       199
-lsr_i_ic_i                      200
-lsr_i_i_ic                      201
-lsr_p_p_i                       202
-lsr_p_p_ic                      203
-lsr_p_p_p                       204
-rot_i_i_i_ic                    205
-rot_i_ic_i_ic                   206
-rot_i_i_ic_ic                   207
-bxor_i_i                        208
-bxor_i_ic                       209
-bxor_p_i                        210
-bxor_p_ic                       211
-bxor_p_p                        212
-bxor_i_i_i                      213
-bxor_i_ic_i                     214
-bxor_i_i_ic                     215
-bxor_p_p_i                      216
-bxor_p_p_ic                     217
-bxor_p_p_p                      218
-bxors_s_s                       219
-bxors_s_sc                      220
-bxors_p_s                       221
-bxors_p_sc                      222
-bxors_p_p                       223
-bxors_s_s_s                     224
-bxors_s_sc_s                    225
-bxors_s_s_sc                    226
-bxors_p_p_s                     227
-bxors_p_p_sc                    228
-bxors_p_p_p                     229
-eq_i_i_ic                       230
-eq_ic_i_ic                      231
-eq_i_ic_ic                      232
-eq_n_n_ic                       233
-eq_nc_n_ic                      234
-eq_n_nc_ic                      235
-eq_s_s_ic                       236
-eq_sc_s_ic                      237
-eq_s_sc_ic                      238
-eq_p_p_ic                       239
-eq_p_i_ic                       240
-eq_p_ic_ic                      241
-eq_p_n_ic                       242
-eq_p_nc_ic                      243
-eq_p_s_ic                       244
-eq_p_sc_ic                      245
-eq_str_p_p_ic                   246
-eq_num_p_p_ic                   247
-eq_addr_s_s_ic                  248
-eq_addr_sc_s_ic                 249
-eq_addr_s_sc_ic                 250
-eq_addr_sc_sc_ic                251
-eq_addr_p_p_ic                  252
-ne_i_i_ic                       253
-ne_ic_i_ic                      254
-ne_i_ic_ic                      255
-ne_n_n_ic                       256
-ne_nc_n_ic                      257
-ne_n_nc_ic                      258
-ne_s_s_ic                       259
-ne_sc_s_ic                      260
-ne_s_sc_ic                      261
-ne_p_p_ic                       262
-ne_p_i_ic                       263
-ne_p_ic_ic                      264
-ne_p_n_ic                       265
-ne_p_nc_ic                      266
-ne_p_s_ic                       267
-ne_p_sc_ic                      268
-ne_str_p_p_ic                   269
-ne_num_p_p_ic                   270
-ne_addr_s_s_ic                  271
-ne_addr_sc_s_ic                 272
-ne_addr_s_sc_ic                 273
-ne_addr_sc_sc_ic                274
-ne_addr_p_p_ic                  275
-lt_i_i_ic                       276
-lt_ic_i_ic                      277
-lt_i_ic_ic                      278
-lt_n_n_ic                       279
-lt_nc_n_ic                      280
-lt_n_nc_ic                      281
-lt_s_s_ic                       282
-lt_sc_s_ic                      283
-lt_s_sc_ic                      284
-lt_p_p_ic                       285
-lt_p_i_ic                       286
-lt_p_ic_ic                      287
-lt_p_n_ic                       288
-lt_p_nc_ic                      289
-lt_p_s_ic                       290
-lt_p_sc_ic                      291
-lt_str_p_p_ic                   292
-lt_num_p_p_ic                   293
-le_i_i_ic                       294
-le_ic_i_ic                      295
-le_i_ic_ic                      296
-le_n_n_ic                       297
-le_nc_n_ic                      298
-le_n_nc_ic                      299
-le_s_s_ic                       300
-le_sc_s_ic                      301
-le_s_sc_ic                      302
-le_p_p_ic                       303
-le_p_i_ic                       304
-le_p_ic_ic                      305
-le_p_n_ic                       306
-le_p_nc_ic                      307
-le_p_s_ic                       308
-le_p_sc_ic                      309
-le_str_p_p_ic                   310
-le_num_p_p_ic                   311
-gt_p_p_ic                       312
-gt_p_i_ic                       313
-gt_p_ic_ic                      314
-gt_p_n_ic                       315
-gt_p_nc_ic                      316
-gt_p_s_ic                       317
-gt_p_sc_ic                      318
-gt_str_p_p_ic                   319
-gt_num_p_p_ic                   320
-ge_p_p_ic                       321
-ge_p_i_ic                       322
-ge_p_ic_ic                      323
-ge_p_n_ic                       324
-ge_p_nc_ic                      325
-ge_p_s_ic                       326
-ge_p_sc_ic                      327
-ge_str_p_p_ic                   328
-ge_num_p_p_ic                   329
-if_null_p_ic                    330
-if_null_s_ic                    331
-unless_null_p_ic                332
-unless_null_s_ic                333
-cmp_i_i_i                       334
-cmp_i_ic_i                      335
-cmp_i_i_ic                      336
-cmp_i_n_n                       337
-cmp_i_nc_n                      338
-cmp_i_n_nc                      339
-cmp_i_s_s                       340
-cmp_i_sc_s                      341
-cmp_i_s_sc                      342
-cmp_i_p_p                       343
-cmp_i_p_i                       344
-cmp_i_p_ic                      345
-cmp_i_p_n                       346
-cmp_i_p_nc                      347
-cmp_i_p_s                       348
-cmp_i_p_sc                      349
-cmp_str_i_p_p                   350
-cmp_num_i_p_p                   351
-cmp_pmc_p_p_p                   352
-issame_i_p_p                    353
-issame_i_s_s                    354
-issame_i_sc_s                   355
-issame_i_s_sc                   356
-issame_i_sc_sc                  357
-isntsame_i_p_p                  358
-isntsame_i_s_s                  359
-isntsame_i_sc_s                 360
-isntsame_i_s_sc                 361
-isntsame_i_sc_sc                362
-istrue_i_p                      363
-isfalse_i_p                     364
-isnull_i_p                      365
-isnull_i_pc                     366
-isnull_i_s                      367
-isnull_i_sc                     368
-isgt_i_p_p                      369
-isge_i_p_p                      370
-isle_i_i_i                      371
-isle_i_ic_i                     372
-isle_i_i_ic                     373
-isle_i_n_n                      374
-isle_i_nc_n                     375
-isle_i_n_nc                     376
-isle_i_s_s                      377
-isle_i_sc_s                     378
-isle_i_s_sc                     379
-isle_i_p_p                      380
-islt_i_i_i                      381
-islt_i_ic_i                     382
-islt_i_i_ic                     383
-islt_i_n_n                      384
-islt_i_nc_n                     385
-islt_i_n_nc                     386
-islt_i_s_s                      387
-islt_i_sc_s                     388
-islt_i_s_sc                     389
-islt_i_p_p                      390
-iseq_i_i_i                      391
-iseq_i_ic_i                     392
-iseq_i_i_ic                     393
-iseq_i_n_n                      394
-iseq_i_nc_n                     395
-iseq_i_n_nc                     396
-iseq_i_s_s                      397
-iseq_i_sc_s                     398
-iseq_i_s_sc                     399
-iseq_i_p_p                      400
-isne_i_i_i                      401
-isne_i_ic_i                     402
-isne_i_i_ic                     403
-isne_i_n_n                      404
-isne_i_nc_n                     405
-isne_i_n_nc                     406
-isne_i_s_s                      407
-isne_i_sc_s                     408
-isne_i_s_sc                     409
-isne_i_p_p                      410
-and_i_i_i                       411
-and_i_ic_i                      412
-and_i_i_ic                      413
-and_p_p_p                       414
-not_i                           415
-not_i_i                         416
-not_p                           417
-not_p_p                         418
-or_i_i_i                        419
-or_i_ic_i                       420
-or_i_i_ic                       421
-or_p_p_p                        422
-xor_i_i_i                       423
-xor_i_ic_i                      424
-xor_i_i_ic                      425
-xor_p_p_p                       426
-debug_init                      427
-debug_load_sc                   428
-debug_break                     429
-debug_print                     430
-backtrace                       431
-getline_i                       432
-getfile_s                       433
-set_label_p_ic                  434
-get_label_i_p                   435
-close_p                         436
-fdopen_p_i_s                    437
-fdopen_p_ic_s                   438
-fdopen_p_i_sc                   439
-fdopen_p_ic_sc                  440
-getstdin_p                      441
-getstdout_p                     442
-getstderr_p                     443
-setstdin_p                      444
-setstdout_p                     445
-setstderr_p                     446
-open_p_s_s                      447
-open_p_sc_s                     448
-open_p_s_sc                     449
-open_p_sc_sc                    450
-open_p_s                        451
-open_p_sc                       452
-print_i                         453
-print_ic                        454
-print_n                         455
-print_nc                        456
-print_s                         457
-print_sc                        458
-print_p                         459
-say_i                           460
-say_ic                          461
-say_n                           462
-say_nc                          463
-say_s                           464
-say_sc                          465
-say_p                           466
-printerr_i                      467
-printerr_ic                     468
-printerr_n                      469
-printerr_nc                     470
-printerr_s                      471
-printerr_sc                     472
-printerr_p                      473
-print_p_i                       474
-print_p_ic                      475
-print_p_n                       476
-print_p_nc                      477
-print_p_s                       478
-print_p_sc                      479
-print_p_p                       480
-read_s_i                        481
-read_s_ic                       482
-read_s_p_i                      483
-read_s_p_ic                     484
-readline_s_p                    485
-peek_s                          486
-peek_s_p                        487
-stat_i_s_i                      488
-stat_i_sc_i                     489
-stat_i_s_ic                     490
-stat_i_sc_ic                    491
-stat_i_i_i                      492
-stat_i_ic_i                     493
-stat_i_i_ic                     494
-stat_i_ic_ic                    495
-seek_p_i_i                      496
-seek_p_ic_i                     497
-seek_p_i_ic                     498
-seek_p_ic_ic                    499
-seek_p_i_i_i                    500
-seek_p_ic_i_i                   501
-seek_p_i_ic_i                   502
-seek_p_ic_ic_i                  503
-seek_p_i_i_ic                   504
-seek_p_ic_i_ic                  505
-seek_p_i_ic_ic                  506
-seek_p_ic_ic_ic                 507
-tell_i_p                        508
-tell_i_i_p                      509
-abs_i                           510
-abs_n                           511
-abs_i_i                         512
-abs_n_n                         513
-abs_p                           514
-abs_p_p                         515
-add_i_i                         516
-add_i_ic                        517
-add_n_n                         518
-add_n_nc                        519
-add_p_p                         520
-add_p_i                         521
-add_p_ic                        522
-add_p_n                         523
-add_p_nc                        524
-add_i_i_i                       525
-add_i_ic_i                      526
-add_i_i_ic                      527
-add_n_n_n                       528
-add_n_nc_n                      529
-add_n_n_nc                      530
-add_p_p_p                       531
-add_p_p_i                       532
-add_p_p_ic                      533
-add_p_p_n                       534
-add_p_p_nc                      535
-cmod_i_i_i                      536
-cmod_i_ic_i                     537
-cmod_i_i_ic                     538
-cmod_p_p_i                      539
-cmod_p_p_ic                     540
-cmod_p_p_p                      541
-cmod_n_n_n                      542
-cmod_n_nc_n                     543
-cmod_n_n_nc                     544
-cmod_p_p_n                      545
-cmod_p_p_nc                     546
-dec_i                           547
-dec_n                           548
-dec_p                           549
-div_i_i                         550
-div_i_ic                        551
-div_n_n                         552
-div_n_nc                        553
-div_p_p                         554
-div_p_i                         555
-div_p_ic                        556
-div_p_n                         557
-div_p_nc                        558
-div_i_i_i                       559
-div_i_ic_i                      560
-div_i_i_ic                      561
-div_i_ic_ic                     562
-div_n_n_n                       563
-div_n_nc_n                      564
-div_n_n_nc                      565
-div_n_nc_nc                     566
-div_p_p_p                       567
-div_p_p_i                       568
-div_p_p_ic                      569
-div_p_p_n                       570
-div_p_p_nc                      571
-fdiv_i_i                        572
-fdiv_i_ic                       573
-fdiv_n_n                        574
-fdiv_n_nc                       575
-fdiv_p_p                        576
-fdiv_p_i                        577
-fdiv_p_ic                       578
-fdiv_p_n                        579
-fdiv_p_nc                       580
-fdiv_i_i_i                      581
-fdiv_i_ic_i                     582
-fdiv_i_i_ic                     583
-fdiv_n_n_n                      584
-fdiv_n_nc_n                     585
-fdiv_n_n_nc                     586
-fdiv_p_p_p                      587
-fdiv_p_p_i                      588
-fdiv_p_p_ic                     589
-fdiv_p_p_n                      590
-fdiv_p_p_nc                     591
-ceil_n                          592
-ceil_i_n                        593
-ceil_n_n                        594
-floor_n                         595
-floor_i_n                       596
-floor_n_n                       597
-inc_i                           598
-inc_n                           599
-inc_p                           600
-mod_i_i                         601
-mod_i_ic                        602
-mod_n_n                         603
-mod_n_nc                        604
-mod_p_p                         605
-mod_p_i                         606
-mod_p_ic                        607
-mod_p_n                         608
-mod_p_nc                        609
-mod_i_i_i                       610
-mod_i_ic_i                      611
-mod_i_i_ic                      612
-mod_n_n_n                       613
-mod_n_nc_n                      614
-mod_n_n_nc                      615
-mod_p_p_p                       616
-mod_p_p_i                       617
-mod_p_p_ic                      618
-mod_p_p_n                       619
-mod_p_p_nc                      620
-mul_i_i                         621
-mul_i_ic                        622
-mul_n_n                         623
-mul_n_nc                        624
-mul_p_p                         625
-mul_p_i                         626
-mul_p_ic                        627
-mul_p_n                         628
-mul_p_nc                        629
-mul_i_i_i                       630
-mul_i_ic_i                      631
-mul_i_i_ic                      632
-mul_n_n_n                       633
-mul_n_nc_n                      634
-mul_n_n_nc                      635
-mul_p_p_p                       636
-mul_p_p_i                       637
-mul_p_p_ic                      638
-mul_p_p_n                       639
-mul_p_p_nc                      640
-neg_i                           641
-neg_n                           642
-neg_p                           643
-neg_i_i                         644
-neg_n_n                         645
-neg_p_p                         646
-pow_n_n_n                       647
-pow_n_nc_n                      648
-pow_n_n_nc                      649
-pow_p_p_p                       650
-pow_p_p_i                       651
-pow_p_p_ic                      652
-pow_p_p_n                       653
-pow_p_p_nc                      654
-pow_n_n_i                       655
-pow_n_nc_i                      656
-pow_n_n_ic                      657
-pow_n_nc_ic                     658
-sub_i_i                         659
-sub_i_ic                        660
-sub_n_n                         661
-sub_n_nc                        662
-sub_p_p                         663
-sub_p_i                         664
-sub_p_ic                        665
-sub_p_n                         666
-sub_p_nc                        667
-sub_i_i_i                       668
-sub_i_ic_i                      669
-sub_i_i_ic                      670
-sub_n_n_n                       671
-sub_n_nc_n                      672
-sub_n_n_nc                      673
-sub_p_p_p                       674
-sub_p_p_i                       675
-sub_p_p_ic                      676
-sub_p_p_n                       677
-sub_p_p_nc                      678
-sqrt_n_n                        679
-acos_n_n                        680
-asec_n_n                        681
-asin_n_n                        682
-atan_n_n                        683
-atan_n_n_n                      684
-atan_n_nc_n                     685
-atan_n_n_nc                     686
-cos_n_n                         687
-cosh_n_n                        688
-exp_n_n                         689
-ln_n_n                          690
-log10_n_n                       691
-log2_n_n                        692
-sec_n_n                         693
-sech_n_n                        694
-sin_n_n                         695
-sinh_n_n                        696
-tan_n_n                         697
-tanh_n_n                        698
-gcd_i_i_i                       699
-gcd_i_ic_i                      700
-gcd_i_i_ic                      701
-lcm_i_i_i                       702
-lcm_i_ic_i                      703
-lcm_i_i_ic                      704
-fact_i_i                        705
-fact_n_i                        706
-callmethodcc_p_s                707
-callmethodcc_p_sc               708
-callmethodcc_p_p                709
-callmethod_p_s_p                710
-callmethod_p_sc_p               711
-callmethod_p_p_p                712
-tailcallmethod_p_s              713
-tailcallmethod_p_sc             714
-tailcallmethod_p_p              715
-addmethod_p_s_p                 716
-addmethod_p_sc_p                717
-can_i_p_s                       718
-can_i_p_sc                      719
-does_i_p_s                      720
-does_i_p_sc                     721
-does_i_p_p                      722
-does_i_p_pc                     723
-isa_i_p_s                       724
-isa_i_p_sc                      725
-isa_i_p_p                       726
-isa_i_p_pc                      727
-newclass_p_s                    728
-newclass_p_sc                   729
-newclass_p_p                    730
-newclass_p_pc                   731
-subclass_p_p                    732
-subclass_p_pc                   733
-subclass_p_p_s                  734
-subclass_p_pc_s                 735
-subclass_p_p_sc                 736
-subclass_p_pc_sc                737
-subclass_p_p_p                  738
-subclass_p_pc_p                 739
-subclass_p_p_pc                 740
-subclass_p_pc_pc                741
-subclass_p_s                    742
-subclass_p_sc                   743
-subclass_p_s_s                  744
-subclass_p_sc_s                 745
-subclass_p_s_sc                 746
-subclass_p_sc_sc                747
-subclass_p_s_p                  748
-subclass_p_sc_p                 749
-subclass_p_s_pc                 750
-subclass_p_sc_pc                751
-get_class_p_s                   752
-get_class_p_sc                  753
-get_class_p_p                   754
-get_class_p_pc                  755
-class_p_p                       756
-addparent_p_p                   757
-removeparent_p_p                758
-addrole_p_p                     759
-addattribute_p_s                760
-addattribute_p_sc               761
-removeattribute_p_s             762
-removeattribute_p_sc            763
-getattribute_p_p_s              764
-getattribute_p_p_sc             765
-getattribute_p_p_p_s            766
-getattribute_p_p_pc_s           767
-getattribute_p_p_p_sc           768
-getattribute_p_p_pc_sc          769
-setattribute_p_s_p              770
-setattribute_p_sc_p             771
-setattribute_p_p_s_p            772
-setattribute_p_pc_s_p           773
-setattribute_p_p_sc_p           774
-setattribute_p_pc_sc_p          775
-inspect_p_p                     776
-inspect_p_pc                    777
-inspect_p_p_s                   778
-inspect_p_pc_s                  779
-inspect_p_p_sc                  780
-inspect_p_pc_sc                 781
-new_p_s                         782
-new_p_sc                        783
-new_p_s_p                       784
-new_p_sc_p                      785
-new_p_s_pc                      786
-new_p_sc_pc                     787
-new_p_p                         788
-new_p_pc                        789
-new_p_p_p                       790
-new_p_pc_p                      791
-new_p_p_pc                      792
-new_p_pc_pc                     793
-root_new_p_p                    794
-root_new_p_pc                   795
-root_new_p_p_p                  796
-root_new_p_pc_p                 797
-root_new_p_p_pc                 798
-root_new_p_pc_pc                799
-typeof_s_p                      800
-typeof_p_p                      801
-get_repr_s_p                    802
-find_method_p_p_s               803
-find_method_p_p_sc              804
-defined_i_p                     805
-defined_i_p_ki                  806
-defined_i_p_kic                 807
-defined_i_p_k                   808
-defined_i_p_kc                  809
-exists_i_p_ki                   810
-exists_i_p_kic                  811
-exists_i_p_k                    812
-exists_i_p_kc                   813
-delete_p_k                      814
-delete_p_kc                     815
-delete_p_ki                     816
-delete_p_kic                    817
-elements_i_p                    818
-push_p_i                        819
-push_p_ic                       820
-push_p_n                        821
-push_p_nc                       822
-push_p_s                        823
-push_p_sc                       824
-push_p_p                        825
-pop_i_p                         826
-pop_n_p                         827
-pop_s_p                         828
-pop_p_p                         829
-unshift_p_i                     830
-unshift_p_ic                    831
-unshift_p_n                     832
-unshift_p_nc                    833
-unshift_p_s                     834
-unshift_p_sc                    835
-unshift_p_p                     836
-shift_i_p                       837
-shift_n_p                       838
-shift_s_p                       839
-shift_p_p                       840
-splice_p_p_i_i                  841
-splice_p_p_ic_i                 842
-splice_p_p_i_ic                 843
-splice_p_p_ic_ic                844
-setprop_p_s_p                   845
-setprop_p_sc_p                  846
-getprop_p_s_p                   847
-getprop_p_sc_p                  848
-delprop_p_s                     849
-delprop_p_sc                    850
-prophash_p_p                    851
-freeze_s_p                      852
-thaw_p_s                        853
-thaw_p_sc                       854
-add_multi_s_s_p                 855
-add_multi_sc_s_p                856
-add_multi_s_sc_p                857
-add_multi_sc_sc_p               858
-find_multi_p_s_s                859
-find_multi_p_sc_s               860
-find_multi_p_s_sc               861
-find_multi_p_sc_sc              862
-register_p                      863
-unregister_p                    864
-box_p_i                         865
-box_p_ic                        866
-box_p_n                         867
-box_p_nc                        868
-box_p_s                         869
-box_p_sc                        870
-iter_p_p                        871
-morph_p_p                       872
-morph_p_pc                      873
-clone_s_s                       874
-clone_s_sc                      875
-exchange_i_i                    876
-exchange_p_p                    877
-exchange_n_n                    878
-exchange_s_s                    879
-set_i_i                         880
-set_i_ic                        881
-set_i_n                         882
-set_i_nc                        883
-set_i_s                         884
-set_i_sc                        885
-set_n_n                         886
-set_n_nc                        887
-set_n_i                         888
-set_n_ic                        889
-set_n_s                         890
-set_n_sc                        891
-set_n_p                         892
-set_s_p                         893
-set_s_s                         894
-set_s_sc                        895
-set_s_i                         896
-set_s_ic                        897
-set_s_n                         898
-set_s_nc                        899
-set_p_pc                        900
-set_p_p                         901
-set_p_i                         902
-set_p_ic                        903
-set_p_n                         904
-set_p_nc                        905
-set_p_s                         906
-set_p_sc                        907
-set_i_p                         908
-assign_p_p                      909
-assign_p_i                      910
-assign_p_ic                     911
-assign_p_n                      912
-assign_p_nc                     913
-assign_p_s                      914
-assign_p_sc                     915
-assign_s_s                      916
-assign_s_sc                     917
-setref_p_p                      918
-deref_p_p                       919
-setp_ind_i_p                    920
-setp_ind_ic_p                   921
-setn_ind_i_n                    922
-setn_ind_ic_n                   923
-setn_ind_i_nc                   924
-setn_ind_ic_nc                  925
-sets_ind_i_s                    926
-sets_ind_ic_s                   927
-sets_ind_i_sc                   928
-sets_ind_ic_sc                  929
-seti_ind_i_i                    930
-seti_ind_ic_i                   931
-seti_ind_i_ic                   932
-seti_ind_ic_ic                  933
-set_p_ki_i                      934
-set_p_kic_i                     935
-set_p_ki_ic                     936
-set_p_kic_ic                    937
-set_p_ki_n                      938
-set_p_kic_n                     939
-set_p_ki_nc                     940
-set_p_kic_nc                    941
-set_p_ki_s                      942
-set_p_kic_s                     943
-set_p_ki_sc                     944
-set_p_kic_sc                    945
-set_p_ki_p                      946
-set_p_kic_p                     947
-set_i_p_ki                      948
-set_i_p_kic                     949
-set_n_p_ki                      950
-set_n_p_kic                     951
-set_s_p_ki                      952
-set_s_p_kic                     953
-set_p_p_ki                      954
-set_p_p_kic                     955
-set_p_k_i                       956
-set_p_kc_i                      957
-set_p_k_ic                      958
-set_p_kc_ic                     959
-set_p_k_n                       960
-set_p_kc_n                      961
-set_p_k_nc                      962
-set_p_kc_nc                     963
-set_p_k_s                       964
-set_p_kc_s                      965
-set_p_k_sc                      966
-set_p_kc_sc                     967
-set_p_k_p                       968
-set_p_kc_p                      969
-set_i_p_k                       970
-set_i_p_kc                      971
-set_n_p_k                       972
-set_n_p_kc                      973
-set_s_p_k                       974
-set_s_p_kc                      975
-set_p_p_k                       976
-set_p_p_kc                      977
-clone_p_p                       978
-clone_p_p_p                     979
-clone_p_p_pc                    980
-copy_p_p                        981
-null_s                          982
-null_i                          983
-null_p                          984
-null_n                          985
-cleari                          986
-clearn                          987
-clears                          988
-clearp                          989
-ord_i_s                         990
-ord_i_sc                        991
-ord_i_s_i                       992
-ord_i_sc_i                      993
-ord_i_s_ic                      994
-ord_i_sc_ic                     995
-chr_s_i                         996
-chr_s_ic                        997
-chopn_s_i                       998
-chopn_s_ic                      999
-chopn_s_s_i                    1000
-chopn_s_sc_i                   1001
-chopn_s_s_ic                   1002
-chopn_s_sc_ic                  1003
-concat_s_s                     1004
-concat_s_sc                    1005
-concat_p_p                     1006
-concat_p_s                     1007
-concat_p_sc                    1008
-concat_s_s_s                   1009
-concat_s_sc_s                  1010
-concat_s_s_sc                  1011
-concat_p_p_s                   1012
-concat_p_p_sc                  1013
-concat_p_p_p                   1014
-repeat_s_s_i                   1015
-repeat_s_sc_i                  1016
-repeat_s_s_ic                  1017
-repeat_s_sc_ic                 1018
-repeat_p_p_i                   1019
-repeat_p_p_ic                  1020
-repeat_p_p_p                   1021
-repeat_p_i                     1022
-repeat_p_ic                    1023
-repeat_p_p                     1024
-length_i_s                     1025
-length_i_sc                    1026
-bytelength_i_s                 1027
-bytelength_i_sc                1028
-pin_s                          1029
-unpin_s                        1030
-substr_s_s_i                   1031
-substr_s_sc_i                  1032
-substr_s_s_ic                  1033
-substr_s_sc_ic                 1034
-substr_s_s_i_i                 1035
-substr_s_sc_i_i                1036
-substr_s_s_ic_i                1037
-substr_s_sc_ic_i               1038
-substr_s_s_i_ic                1039
-substr_s_sc_i_ic               1040
-substr_s_s_ic_ic               1041
-substr_s_sc_ic_ic              1042
-substr_s_s_i_i_s               1043
-substr_s_s_ic_i_s              1044
-substr_s_s_i_ic_s              1045
-substr_s_s_ic_ic_s             1046
-substr_s_s_i_i_sc              1047
-substr_s_s_ic_i_sc             1048
-substr_s_s_i_ic_sc             1049
-substr_s_s_ic_ic_sc            1050
-substr_s_i_i_s                 1051
-substr_s_ic_i_s                1052
-substr_s_i_ic_s                1053
-substr_s_ic_ic_s               1054
-substr_s_i_i_sc                1055
-substr_s_ic_i_sc               1056
-substr_s_i_ic_sc               1057
-substr_s_ic_ic_sc              1058
-substr_s_p_i_i                 1059
-substr_s_p_ic_i                1060
-substr_s_p_i_ic                1061
-substr_s_p_ic_ic               1062
-index_i_s_s                    1063
-index_i_sc_s                   1064
-index_i_s_sc                   1065
-index_i_sc_sc                  1066
-index_i_s_s_i                  1067
-index_i_sc_s_i                 1068
-index_i_s_sc_i                 1069
-index_i_sc_sc_i                1070
-index_i_s_s_ic                 1071
-index_i_sc_s_ic                1072
-index_i_s_sc_ic                1073
-index_i_sc_sc_ic               1074
-sprintf_s_s_p                  1075
-sprintf_s_sc_p                 1076
-sprintf_p_p_p                  1077
-new_s                          1078
-new_s_i                        1079
-new_s_ic                       1080
-stringinfo_i_s_i               1081
-stringinfo_i_sc_i              1082
-stringinfo_i_s_ic              1083
-stringinfo_i_sc_ic             1084
-upcase_s_s                     1085
-upcase_s_sc                    1086
-upcase_s                       1087
-downcase_s_s                   1088
-downcase_s_sc                  1089
-downcase_s                     1090
-titlecase_s_s                  1091
-titlecase_s_sc                 1092
-titlecase_s                    1093
-join_s_s_p                     1094
-join_s_sc_p                    1095
-split_p_s_s                    1096
-split_p_sc_s                   1097
-split_p_s_sc                   1098
-split_p_sc_sc                  1099
-charset_i_s                    1100
-charset_i_sc                   1101
-charsetname_s_i                1102
-charsetname_s_ic               1103
-find_charset_i_s               1104
-find_charset_i_sc              1105
-trans_charset_s_i              1106
-trans_charset_s_ic             1107
-trans_charset_s_s_i            1108
-trans_charset_s_sc_i           1109
-trans_charset_s_s_ic           1110
-trans_charset_s_sc_ic          1111
-encoding_i_s                   1112
-encoding_i_sc                  1113
-encodingname_s_i               1114
-encodingname_s_ic              1115
-find_encoding_i_s              1116
-find_encoding_i_sc             1117
-trans_encoding_s_i             1118
-trans_encoding_s_ic            1119
-trans_encoding_s_s_i           1120
-trans_encoding_s_sc_i          1121
-trans_encoding_s_s_ic          1122
-trans_encoding_s_sc_ic         1123
-is_cclass_i_i_s_i              1124
-is_cclass_i_ic_s_i             1125
-is_cclass_i_i_sc_i             1126
-is_cclass_i_ic_sc_i            1127
-is_cclass_i_i_s_ic             1128
-is_cclass_i_ic_s_ic            1129
-is_cclass_i_i_sc_ic            1130
-is_cclass_i_ic_sc_ic           1131
-find_cclass_i_i_s_i_i          1132
-find_cclass_i_ic_s_i_i         1133
-find_cclass_i_i_sc_i_i         1134
-find_cclass_i_ic_sc_i_i        1135
-find_cclass_i_i_s_ic_i         1136
-find_cclass_i_ic_s_ic_i        1137
-find_cclass_i_i_sc_ic_i        1138
-find_cclass_i_ic_sc_ic_i       1139
-find_cclass_i_i_s_i_ic         1140
-find_cclass_i_ic_s_i_ic        1141
-find_cclass_i_i_sc_i_ic        1142
-find_cclass_i_ic_sc_i_ic       1143
-find_cclass_i_i_s_ic_ic        1144
-find_cclass_i_ic_s_ic_ic       1145
-find_cclass_i_i_sc_ic_ic       1146
-find_cclass_i_ic_sc_ic_ic      1147
-find_not_cclass_i_i_s_i_i      1148
-find_not_cclass_i_ic_s_i_i     1149
-find_not_cclass_i_i_sc_i_i     1150
-find_not_cclass_i_ic_sc_i_i    1151
-find_not_cclass_i_i_s_ic_i     1152
-find_not_cclass_i_ic_s_ic_i    1153
-find_not_cclass_i_i_sc_ic_i    1154
-find_not_cclass_i_ic_sc_ic_i   1155
-find_not_cclass_i_i_s_i_ic     1156
-find_not_cclass_i_ic_s_i_ic    1157
-find_not_cclass_i_i_sc_i_ic    1158
-find_not_cclass_i_ic_sc_i_ic   1159
-find_not_cclass_i_i_s_ic_ic    1160
-find_not_cclass_i_ic_s_ic_ic   1161
-find_not_cclass_i_i_sc_ic_ic   1162
-find_not_cclass_i_ic_sc_ic_ic  1163
-escape_s_s                     1164
-compose_s_s                    1165
-compose_s_sc                   1166
-spawnw_i_s                     1167
-spawnw_i_sc                    1168
-spawnw_i_p                     1169
-err_i                          1170
-err_s                          1171
-err_s_i                        1172
-err_s_ic                       1173
-time_i                         1174
-time_n                         1175
-gmtime_s_i                     1176
-gmtime_s_ic                    1177
-localtime_s_i                  1178
-localtime_s_ic                 1179
-decodetime_p_i                 1180
-decodetime_p_ic                1181
-decodelocaltime_p_i            1182
-decodelocaltime_p_ic           1183
-sysinfo_s_i                    1184
-sysinfo_s_ic                   1185
-sysinfo_i_i                    1186
-sysinfo_i_ic                   1187
-sleep_i                        1188
-sleep_ic                       1189
-sleep_n                        1190
-sleep_nc                       1191
-sizeof_i_i                     1192
-sizeof_i_ic                    1193
-store_lex_s_p                  1194
-store_lex_sc_p                 1195
-store_dynamic_lex_s_p          1196
-store_dynamic_lex_sc_p         1197
-find_lex_p_s                   1198
-find_lex_p_sc                  1199
-find_dynamic_lex_p_s           1200
-find_dynamic_lex_p_sc          1201
-find_caller_lex_p_s            1202
-find_caller_lex_p_sc           1203
-get_namespace_p                1204
-get_namespace_p_p              1205
-get_namespace_p_pc             1206
-get_hll_namespace_p            1207
-get_hll_namespace_p_p          1208
-get_hll_namespace_p_pc         1209
-get_root_namespace_p           1210
-get_root_namespace_p_p         1211
-get_root_namespace_p_pc        1212
-get_global_p_s                 1213
-get_global_p_sc                1214
-get_global_p_p_s               1215
-get_global_p_pc_s              1216
-get_global_p_p_sc              1217
-get_global_p_pc_sc             1218
-get_hll_global_p_s             1219
-get_hll_global_p_sc            1220
-get_hll_global_p_p_s           1221
-get_hll_global_p_pc_s          1222
-get_hll_global_p_p_sc          1223
-get_hll_global_p_pc_sc         1224
-get_root_global_p_s            1225
-get_root_global_p_sc           1226
-get_root_global_p_p_s          1227
-get_root_global_p_pc_s         1228
-get_root_global_p_p_sc         1229
-get_root_global_p_pc_sc        1230
-set_global_s_p                 1231
-set_global_sc_p                1232
-set_global_p_s_p               1233
-set_global_pc_s_p              1234
-set_global_p_sc_p              1235
-set_global_pc_sc_p             1236
-set_hll_global_s_p             1237
-set_hll_global_sc_p            1238
-set_hll_global_p_s_p           1239
-set_hll_global_pc_s_p          1240
-set_hll_global_p_sc_p          1241
-set_hll_global_pc_sc_p         1242
-set_root_global_s_p            1243
-set_root_global_sc_p           1244
-set_root_global_p_s_p          1245
-set_root_global_pc_s_p         1246
-set_root_global_p_sc_p         1247
-set_root_global_pc_sc_p        1248
-find_name_p_s                  1249
-find_name_p_sc                 1250
-find_sub_not_null_p_s          1251
-find_sub_not_null_p_sc         1252
+load_bytecode_s                   6
+load_bytecode_sc                  7
+load_language_s                   8
+load_language_sc                  9
+branch_i                         10
+branch_ic                        11
+local_branch_p_i                 12
+local_branch_p_ic                13
+local_return_p                   14
+jump_i                           15
+jump_ic                          16
+enternative                      17
+if_i_ic                          18
+if_n_ic                          19
+if_s_ic                          20
+if_p_ic                          21
+unless_i_ic                      22
+unless_n_ic                      23
+unless_s_ic                      24
+unless_p_ic                      25
+invokecc_p                       26
+invoke_p_p                       27
+yield                            28
+tailcall_p                       29
+returncc                         30
+capture_lex_p                    31
+newclosure_p_p                   32
+set_args_pc                      33
+get_results_pc                   34
+get_params_pc                    35
+set_returns_pc                   36
+result_info_p                    37
+set_addr_i_ic                    38
+set_addr_p_ic                    39
+set_addr_p_i                     40
+get_addr_i_p                     41
+schedule_p                       42
+addhandler_p                     43
+push_eh_ic                       44
+push_eh_p                        45
+pop_eh                           46
+throw_p                          47
+throw_p_p                        48
+rethrow_p                        49
+count_eh_i                       50
+die_s                            51
+die_sc                           52
+die_p                            53
+die_pc                           54
+die_i_i                          55
+die_ic_i                         56
+die_i_ic                         57
+die_ic_ic                        58
+exit_i                           59
+exit_ic                          60
+pushmark_i                       61
+pushmark_ic                      62
+popmark_i                        63
+popmark_ic                       64
+pushaction_p                     65
+debug_i                          66
+debug_ic                         67
+bounds_i                         68
+bounds_ic                        69
+profile_i                        70
+profile_ic                       71
+trace_i                          72
+trace_ic                         73
+gc_debug_i                       74
+gc_debug_ic                      75
+interpinfo_i_i                   76
+interpinfo_i_ic                  77
+interpinfo_p_i                   78
+interpinfo_p_ic                  79
+interpinfo_s_i                   80
+interpinfo_s_ic                  81
+warningson_i                     82
+warningson_ic                    83
+warningsoff_i                    84
+warningsoff_ic                   85
+errorson_i                       86
+errorson_ic                      87
+errorsoff_i                      88
+errorsoff_ic                     89
+runinterp_p_i                    90
+runinterp_p_ic                   91
+getinterp_p                      92
+sweep_ic                         93
+collect                          94
+sweepoff                         95
+sweepon                          96
+collectoff                       97
+collecton                        98
+needs_destroy_p                  99
+loadlib_p_s                     100
+loadlib_p_sc                    101
+dlfunc_p_p_s_s                  102
+dlfunc_p_p_sc_s                 103
+dlfunc_p_p_s_sc                 104
+dlfunc_p_p_sc_sc                105
+dlvar_p_p_s                     106
+dlvar_p_p_sc                    107
+compreg_s_p                     108
+compreg_sc_p                    109
+compreg_p_s                     110
+compreg_p_sc                    111
+new_callback_p_p_p_s            112
+new_callback_p_p_p_sc           113
+annotations_p                   114
+annotations_p_s                 115
+annotations_p_sc                116
+band_i_i                        117
+band_i_ic                       118
+band_p_i                        119
+band_p_ic                       120
+band_p_p                        121
+band_i_i_i                      122
+band_i_ic_i                     123
+band_i_i_ic                     124
+band_p_p_i                      125
+band_p_p_ic                     126
+band_p_p_p                      127
+bands_s_s                       128
+bands_s_sc                      129
+bands_p_s                       130
+bands_p_sc                      131
+bands_p_p                       132
+bands_s_s_s                     133
+bands_s_sc_s                    134
+bands_s_s_sc                    135
+bands_p_p_s                     136
+bands_p_p_sc                    137
+bands_p_p_p                     138
+bnot_i                          139
+bnot_i_i                        140
+bnot_p                          141
+bnot_p_p                        142
+bnots_s                         143
+bnots_s_s                       144
+bnots_s_sc                      145
+bnots_p                         146
+bnots_p_p                       147
+bor_i_i                         148
+bor_i_ic                        149
+bor_p_i                         150
+bor_p_ic                        151
+bor_p_p                         152
+bor_i_i_i                       153
+bor_i_ic_i                      154
+bor_i_i_ic                      155
+bor_p_p_i                       156
+bor_p_p_ic                      157
+bor_p_p_p                       158
+bors_s_s                        159
+bors_s_sc                       160
+bors_p_s                        161
+bors_p_sc                       162
+bors_p_p                        163
+bors_s_s_s                      164
+bors_s_sc_s                     165
+bors_s_s_sc                     166
+bors_p_p_s                      167
+bors_p_p_sc                     168
+bors_p_p_p                      169
+shl_i_i                         170
+shl_i_ic                        171
+shl_p_i                         172
+shl_p_ic                        173
+shl_p_p                         174
+shl_i_i_i                       175
+shl_i_ic_i                      176
+shl_i_i_ic                      177
+shl_p_p_i                       178
+shl_p_p_ic                      179
+shl_p_p_p                       180
+shr_i_i                         181
+shr_i_ic                        182
+shr_p_i                         183
+shr_p_ic                        184
+shr_p_p                         185
+shr_i_i_i                       186
+shr_i_ic_i                      187
+shr_i_i_ic                      188
+shr_p_p_i                       189
+shr_p_p_ic                      190
+shr_p_p_p                       191
+lsr_i_i                         192
+lsr_i_ic                        193
+lsr_p_i                         194
+lsr_p_ic                        195
+lsr_p_p                         196
+lsr_i_i_i                       197
+lsr_i_ic_i                      198
+lsr_i_i_ic                      199
+lsr_p_p_i                       200
+lsr_p_p_ic                      201
+lsr_p_p_p                       202
+rot_i_i_i_ic                    203
+rot_i_ic_i_ic                   204
+rot_i_i_ic_ic                   205
+bxor_i_i                        206
+bxor_i_ic                       207
+bxor_p_i                        208
+bxor_p_ic                       209
+bxor_p_p                        210
+bxor_i_i_i                      211
+bxor_i_ic_i                     212
+bxor_i_i_ic                     213
+bxor_p_p_i                      214
+bxor_p_p_ic                     215
+bxor_p_p_p                      216
+bxors_s_s                       217
+bxors_s_sc                      218
+bxors_p_s                       219
+bxors_p_sc                      220
+bxors_p_p                       221
+bxors_s_s_s                     222
+bxors_s_sc_s                    223
+bxors_s_s_sc                    224
+bxors_p_p_s                     225
+bxors_p_p_sc                    226
+bxors_p_p_p                     227
+eq_i_i_ic                       228
+eq_ic_i_ic                      229
+eq_i_ic_ic                      230
+eq_n_n_ic                       231
+eq_nc_n_ic                      232
+eq_n_nc_ic                      233
+eq_s_s_ic                       234
+eq_sc_s_ic                      235
+eq_s_sc_ic                      236
+eq_p_p_ic                       237
+eq_p_i_ic                       238
+eq_p_ic_ic                      239
+eq_p_n_ic                       240
+eq_p_nc_ic                      241
+eq_p_s_ic                       242
+eq_p_sc_ic                      243
+eq_str_p_p_ic                   244
+eq_num_p_p_ic                   245
+eq_addr_s_s_ic                  246
+eq_addr_sc_s_ic                 247
+eq_addr_s_sc_ic                 248
+eq_addr_sc_sc_ic                249
+eq_addr_p_p_ic                  250
+ne_i_i_ic                       251
+ne_ic_i_ic                      252
+ne_i_ic_ic                      253
+ne_n_n_ic                       254
+ne_nc_n_ic                      255
+ne_n_nc_ic                      256
+ne_s_s_ic                       257
+ne_sc_s_ic                      258
+ne_s_sc_ic                      259
+ne_p_p_ic                       260
+ne_p_i_ic                       261
+ne_p_ic_ic                      262
+ne_p_n_ic                       263
+ne_p_nc_ic                      264
+ne_p_s_ic                       265
+ne_p_sc_ic                      266
+ne_str_p_p_ic                   267
+ne_num_p_p_ic                   268
+ne_addr_s_s_ic                  269
+ne_addr_sc_s_ic                 270
+ne_addr_s_sc_ic                 271
+ne_addr_sc_sc_ic                272
+ne_addr_p_p_ic                  273
+lt_i_i_ic                       274
+lt_ic_i_ic                      275
+lt_i_ic_ic                      276
+lt_n_n_ic                       277
+lt_nc_n_ic                      278
+lt_n_nc_ic                      279
+lt_s_s_ic                       280
+lt_sc_s_ic                      281
+lt_s_sc_ic                      282
+lt_p_p_ic                       283
+lt_p_i_ic                       284
+lt_p_ic_ic                      285
+lt_p_n_ic                       286
+lt_p_nc_ic                      287
+lt_p_s_ic                       288
+lt_p_sc_ic                      289
+lt_str_p_p_ic                   290
+lt_num_p_p_ic                   291
+le_i_i_ic                       292
+le_ic_i_ic                      293
+le_i_ic_ic                      294
+le_n_n_ic                       295
+le_nc_n_ic                      296
+le_n_nc_ic                      297
+le_s_s_ic                       298
+le_sc_s_ic                      299
+le_s_sc_ic                      300
+le_p_p_ic                       301
+le_p_i_ic                       302
+le_p_ic_ic                      303
+le_p_n_ic                       304
+le_p_nc_ic                      305
+le_p_s_ic                       306
+le_p_sc_ic                      307
+le_str_p_p_ic                   308
+le_num_p_p_ic                   309
+gt_p_p_ic                       310
+gt_p_i_ic                       311
+gt_p_ic_ic                      312
+gt_p_n_ic                       313
+gt_p_nc_ic                      314
+gt_p_s_ic                       315
+gt_p_sc_ic                      316
+gt_str_p_p_ic                   317
+gt_num_p_p_ic                   318
+ge_p_p_ic                       319
+ge_p_i_ic                       320
+ge_p_ic_ic                      321
+ge_p_n_ic                       322
+ge_p_nc_ic                      323
+ge_p_s_ic                       324
+ge_p_sc_ic                      325
+ge_str_p_p_ic                   326
+ge_num_p_p_ic                   327
+if_null_p_ic                    328
+if_null_s_ic                    329
+unless_null_p_ic                330
+unless_null_s_ic                331
+cmp_i_i_i                       332
+cmp_i_ic_i                      333
+cmp_i_i_ic                      334
+cmp_i_n_n                       335
+cmp_i_nc_n                      336
+cmp_i_n_nc                      337
+cmp_i_s_s                       338
+cmp_i_sc_s                      339
+cmp_i_s_sc                      340
+cmp_i_p_p                       341
+cmp_i_p_i                       342
+cmp_i_p_ic                      343
+cmp_i_p_n                       344
+cmp_i_p_nc                      345
+cmp_i_p_s                       346
+cmp_i_p_sc                      347
+cmp_str_i_p_p                   348
+cmp_num_i_p_p                   349
+cmp_pmc_p_p_p                   350
+issame_i_p_p                    351
+issame_i_s_s                    352
+issame_i_sc_s                   353
+issame_i_s_sc                   354
+issame_i_sc_sc                  355
+isntsame_i_p_p                  356
+isntsame_i_s_s                  357
+isntsame_i_sc_s                 358
+isntsame_i_s_sc                 359
+isntsame_i_sc_sc                360
+istrue_i_p                      361
+isfalse_i_p                     362
+isnull_i_p                      363
+isnull_i_pc                     364
+isnull_i_s                      365
+isnull_i_sc                     366
+isgt_i_p_p                      367
+isge_i_p_p                      368
+isle_i_i_i                      369
+isle_i_ic_i                     370
+isle_i_i_ic                     371
+isle_i_n_n                      372
+isle_i_nc_n                     373
+isle_i_n_nc                     374
+isle_i_s_s                      375
+isle_i_sc_s                     376
+isle_i_s_sc                     377
+isle_i_p_p                      378
+islt_i_i_i                      379
+islt_i_ic_i                     380
+islt_i_i_ic                     381
+islt_i_n_n                      382
+islt_i_nc_n                     383
+islt_i_n_nc                     384
+islt_i_s_s                      385
+islt_i_sc_s                     386
+islt_i_s_sc                     387
+islt_i_p_p                      388
+iseq_i_i_i                      389
+iseq_i_ic_i                     390
+iseq_i_i_ic                     391
+iseq_i_n_n                      392
+iseq_i_nc_n                     393
+iseq_i_n_nc                     394
+iseq_i_s_s                      395
+iseq_i_sc_s                     396
+iseq_i_s_sc                     397
+iseq_i_p_p                      398
+isne_i_i_i                      399
+isne_i_ic_i                     400
+isne_i_i_ic                     401
+isne_i_n_n                      402
+isne_i_nc_n                     403
+isne_i_n_nc                     404
+isne_i_s_s                      405
+isne_i_sc_s                     406
+isne_i_s_sc                     407
+isne_i_p_p                      408
+and_i_i_i                       409
+and_i_ic_i                      410
+and_i_i_ic                      411
+and_p_p_p                       412
+not_i                           413
+not_i_i                         414
+not_p                           415
+not_p_p                         416
+or_i_i_i                        417
+or_i_ic_i                       418
+or_i_i_ic                       419
+or_p_p_p                        420
+xor_i_i_i                       421
+xor_i_ic_i                      422
+xor_i_i_ic                      423
+xor_p_p_p                       424
+debug_init                      425
+debug_load_sc                   426
+debug_break                     427
+debug_print                     428
+backtrace                       429
+getline_i                       430
+getfile_s                       431
+set_label_p_ic                  432
+get_label_i_p                   433
+close_p                         434
+fdopen_p_i_s                    435
+fdopen_p_ic_s                   436
+fdopen_p_i_sc                   437
+fdopen_p_ic_sc                  438
+getstdin_p                      439
+getstdout_p                     440
+getstderr_p                     441
+setstdin_p                      442
+setstdout_p                     443
+setstderr_p                     444
+open_p_s_s                      445
+open_p_sc_s                     446
+open_p_s_sc                     447
+open_p_sc_sc                    448
+open_p_s                        449
+open_p_sc                       450
+print_i                         451
+print_ic                        452
+print_n                         453
+print_nc                        454
+print_s                         455
+print_sc                        456
+print_p                         457
+say_i                           458
+say_ic                          459
+say_n                           460
+say_nc                          461
+say_s                           462
+say_sc                          463
+say_p                           464
+printerr_i                      465
+printerr_ic                     466
+printerr_n                      467
+printerr_nc                     468
+printerr_s                      469
+printerr_sc                     470
+printerr_p                      471
+print_p_i                       472
+print_p_ic                      473
+print_p_n                       474
+print_p_nc                      475
+print_p_s                       476
+print_p_sc                      477
+print_p_p                       478
+read_s_i                        479
+read_s_ic                       480
+read_s_p_i                      481
+read_s_p_ic                     482
+readline_s_p                    483
+peek_s                          484
+peek_s_p                        485
+stat_i_s_i                      486
+stat_i_sc_i                     487
+stat_i_s_ic                     488
+stat_i_sc_ic                    489
+stat_i_i_i                      490
+stat_i_ic_i                     491
+stat_i_i_ic                     492
+stat_i_ic_ic                    493
+seek_p_i_i                      494
+seek_p_ic_i                     495
+seek_p_i_ic                     496
+seek_p_ic_ic                    497
+seek_p_i_i_i                    498
+seek_p_ic_i_i                   499
+seek_p_i_ic_i                   500
+seek_p_ic_ic_i                  501
+seek_p_i_i_ic                   502
+seek_p_ic_i_ic                  503
+seek_p_i_ic_ic                  504
+seek_p_ic_ic_ic                 505
+tell_i_p                        506
+tell_i_i_p                      507
+abs_i                           508
+abs_n                           509
+abs_i_i                         510
+abs_n_n                         511
+abs_p                           512
+abs_p_p                         513
+add_i_i                         514
+add_i_ic                        515
+add_n_n                         516
+add_n_nc                        517
+add_p_p                         518
+add_p_i                         519
+add_p_ic                        520
+add_p_n                         521
+add_p_nc                        522
+add_i_i_i                       523
+add_i_ic_i                      524
+add_i_i_ic                      525
+add_n_n_n                       526
+add_n_nc_n                      527
+add_n_n_nc                      528
+add_p_p_p                       529
+add_p_p_i                       530
+add_p_p_ic                      531
+add_p_p_n                       532
+add_p_p_nc                      533
+cmod_i_i_i                      534
+cmod_i_ic_i                     535
+cmod_i_i_ic                     536
+cmod_p_p_i                      537
+cmod_p_p_ic                     538
+cmod_p_p_p                      539
+cmod_n_n_n                      540
+cmod_n_nc_n                     541
+cmod_n_n_nc                     542
+cmod_p_p_n                      543
+cmod_p_p_nc                     544
+dec_i                           545
+dec_n                           546
+dec_p                           547
+div_i_i                         548
+div_i_ic                        549
+div_n_n                         550
+div_n_nc                        551
+div_p_p                         552
+div_p_i                         553
+div_p_ic                        554
+div_p_n                         555
+div_p_nc                        556
+div_i_i_i                       557
+div_i_ic_i                      558
+div_i_i_ic                      559
+div_i_ic_ic                     560
+div_n_n_n                       561
+div_n_nc_n                      562
+div_n_n_nc                      563
+div_n_nc_nc                     564
+div_p_p_p                       565
+div_p_p_i                       566
+div_p_p_ic                      567
+div_p_p_n                       568
+div_p_p_nc                      569
+fdiv_i_i                        570
+fdiv_i_ic                       571
+fdiv_n_n                        572
+fdiv_n_nc                       573
+fdiv_p_p                        574
+fdiv_p_i                        575
+fdiv_p_ic                       576
+fdiv_p_n                        577
+fdiv_p_nc                       578
+fdiv_i_i_i                      579
+fdiv_i_ic_i                     580
+fdiv_i_i_ic                     581
+fdiv_n_n_n                      582
+fdiv_n_nc_n                     583
+fdiv_n_n_nc                     584
+fdiv_p_p_p                      585
+fdiv_p_p_i                      586
+fdiv_p_p_ic                     587
+fdiv_p_p_n                      588
+fdiv_p_p_nc                     589
+ceil_n                          590
+ceil_i_n                        591
+ceil_n_n                        592
+floor_n                         593
+floor_i_n                       594
+floor_n_n                       595
+inc_i                           596
+inc_n                           597
+inc_p                           598
+mod_i_i                         599
+mod_i_ic                        600
+mod_n_n                         601
+mod_n_nc                        602
+mod_p_p                         603
+mod_p_i                         604
+mod_p_ic                        605
+mod_p_n                         606
+mod_p_nc                        607
+mod_i_i_i                       608
+mod_i_ic_i                      609
+mod_i_i_ic                      610
+mod_n_n_n                       611
+mod_n_nc_n                      612
+mod_n_n_nc                      613
+mod_p_p_p                       614
+mod_p_p_i                       615
+mod_p_p_ic                      616
+mod_p_p_n                       617
+mod_p_p_nc                      618
+mul_i_i                         619
+mul_i_ic                        620
+mul_n_n                         621
+mul_n_nc                        622
+mul_p_p                         623
+mul_p_i                         624
+mul_p_ic                        625
+mul_p_n                         626
+mul_p_nc                        627
+mul_i_i_i                       628
+mul_i_ic_i                      629
+mul_i_i_ic                      630
+mul_n_n_n                       631
+mul_n_nc_n                      632
+mul_n_n_nc                      633
+mul_p_p_p                       634
+mul_p_p_i                       635
+mul_p_p_ic                      636
+mul_p_p_n                       637
+mul_p_p_nc                      638
+neg_i                           639
+neg_n                           640
+neg_p                           641
+neg_i_i                         642
+neg_n_n                         643
+neg_p_p                         644
+pow_n_n_n                       645
+pow_n_nc_n                      646
+pow_n_n_nc                      647
+pow_p_p_p                       648
+pow_p_p_i                       649
+pow_p_p_ic                      650
+pow_p_p_n                       651
+pow_p_p_nc                      652
+pow_n_n_i                       653
+pow_n_nc_i                      654
+pow_n_n_ic                      655
+pow_n_nc_ic                     656
+sub_i_i                         657
+sub_i_ic                        658
+sub_n_n                         659
+sub_n_nc                        660
+sub_p_p                         661
+sub_p_i                         662
+sub_p_ic                        663
+sub_p_n                         664
+sub_p_nc                        665
+sub_i_i_i                       666
+sub_i_ic_i                      667
+sub_i_i_ic                      668
+sub_n_n_n                       669
+sub_n_nc_n                      670
+sub_n_n_nc                      671
+sub_p_p_p                       672
+sub_p_p_i                       673
+sub_p_p_ic                      674
+sub_p_p_n                       675
+sub_p_p_nc                      676
+sqrt_n_n                        677
+acos_n_n                        678
+asec_n_n                        679
+asin_n_n                        680
+atan_n_n                        681
+atan_n_n_n                      682
+atan_n_nc_n                     683
+atan_n_n_nc                     684
+cos_n_n                         685
+cosh_n_n                        686
+exp_n_n                         687
+ln_n_n                          688
+log10_n_n                       689
+log2_n_n                        690
+sec_n_n                         691
+sech_n_n                        692
+sin_n_n                         693
+sinh_n_n                        694
+tan_n_n                         695
+tanh_n_n                        696
+gcd_i_i_i                       697
+gcd_i_ic_i                      698
+gcd_i_i_ic                      699
+lcm_i_i_i                       700
+lcm_i_ic_i                      701
+lcm_i_i_ic                      702
+fact_i_i                        703
+fact_n_i                        704
+callmethodcc_p_s                705
+callmethodcc_p_sc               706
+callmethodcc_p_p                707
+callmethod_p_s_p                708
+callmethod_p_sc_p               709
+callmethod_p_p_p                710
+tailcallmethod_p_s              711
+tailcallmethod_p_sc             712
+tailcallmethod_p_p              713
+addmethod_p_s_p                 714
+addmethod_p_sc_p                715
+can_i_p_s                       716
+can_i_p_sc                      717
+does_i_p_s                      718
+does_i_p_sc                     719
+does_i_p_p                      720
+does_i_p_pc                     721
+isa_i_p_s                       722
+isa_i_p_sc                      723
+isa_i_p_p                       724
+isa_i_p_pc                      725
+newclass_p_s                    726
+newclass_p_sc                   727
+newclass_p_p                    728
+newclass_p_pc                   729
+subclass_p_p                    730
+subclass_p_pc                   731
+subclass_p_p_s                  732
+subclass_p_pc_s                 733
+subclass_p_p_sc                 734
+subclass_p_pc_sc                735
+subclass_p_p_p                  736
+subclass_p_pc_p                 737
+subclass_p_p_pc                 738
+subclass_p_pc_pc                739
+subclass_p_s                    740
+subclass_p_sc                   741
+subclass_p_s_s                  742
+subclass_p_sc_s                 743
+subclass_p_s_sc                 744
+subclass_p_sc_sc                745
+subclass_p_s_p                  746
+subclass_p_sc_p                 747
+subclass_p_s_pc                 748
+subclass_p_sc_pc                749
+get_class_p_s                   750
+get_class_p_sc                  751
+get_class_p_p                   752
+get_class_p_pc                  753
+class_p_p                       754
+addparent_p_p                   755
+removeparent_p_p                756
+addrole_p_p                     757
+addattribute_p_s                758
+addattribute_p_sc               759
+removeattribute_p_s             760
+removeattribute_p_sc            761
+getattribute_p_p_s              762
+getattribute_p_p_sc             763
+getattribute_p_p_p_s            764
+getattribute_p_p_pc_s           765
+getattribute_p_p_p_sc           766
+getattribute_p_p_pc_sc          767
+setattribute_p_s_p              768
+setattribute_p_sc_p             769
+setattribute_p_p_s_p            770
+setattribute_p_pc_s_p           771
+setattribute_p_p_sc_p           772
+setattribute_p_pc_sc_p          773
+inspect_p_p                     774
+inspect_p_pc                    775
+inspect_p_p_s                   776
+inspect_p_pc_s                  777
+inspect_p_p_sc                  778
+inspect_p_pc_sc                 779
+new_p_s                         780
+new_p_sc                        781
+new_p_s_p                       782
+new_p_sc_p                      783
+new_p_s_pc                      784
+new_p_sc_pc                     785
+new_p_p                         786
+new_p_pc                        787
+new_p_p_p                       788
+new_p_pc_p                      789
+new_p_p_pc                      790
+new_p_pc_pc                     791
+root_new_p_p                    792
+root_new_p_pc                   793
+root_new_p_p_p                  794
+root_new_p_pc_p                 795
+root_new_p_p_pc                 796
+root_new_p_pc_pc                797
+typeof_s_p                      798
+typeof_p_p                      799
+get_repr_s_p                    800
+find_method_p_p_s               801
+find_method_p_p_sc              802
+defined_i_p                     803
+defined_i_p_ki                  804
+defined_i_p_kic                 805
+defined_i_p_k                   806
+defined_i_p_kc                  807
+exists_i_p_ki                   808
+exists_i_p_kic                  809
+exists_i_p_k                    810
+exists_i_p_kc                   811
+delete_p_k                      812
+delete_p_kc                     813
+delete_p_ki                     814
+delete_p_kic                    815
+elements_i_p                    816
+push_p_i                        817
+push_p_ic                       818
+push_p_n                        819
+push_p_nc                       820
+push_p_s                        821
+push_p_sc                       822
+push_p_p                        823
+pop_i_p                         824
+pop_n_p                         825
+pop_s_p                         826
+pop_p_p                         827
+unshift_p_i                     828
+unshift_p_ic                    829
+unshift_p_n                     830
+unshift_p_nc                    831
+unshift_p_s                     832
+unshift_p_sc                    833
+unshift_p_p                     834
+shift_i_p                       835
+shift_n_p                       836
+shift_s_p                       837
+shift_p_p                       838
+splice_p_p_i_i                  839
+splice_p_p_ic_i                 840
+splice_p_p_i_ic                 841
+splice_p_p_ic_ic                842
+setprop_p_s_p                   843
+setprop_p_sc_p                  844
+getprop_p_s_p                   845
+getprop_p_sc_p                  846
+delprop_p_s                     847
+delprop_p_sc                    848
+prophash_p_p                    849
+freeze_s_p                      850
+thaw_p_s                        851
+thaw_p_sc                       852
+add_multi_s_s_p                 853
+add_multi_sc_s_p                854
+add_multi_s_sc_p                855
+add_multi_sc_sc_p               856
+find_multi_p_s_s                857
+find_multi_p_sc_s               858
+find_multi_p_s_sc               859
+find_multi_p_sc_sc              860
+register_p                      861
+unregister_p                    862
+box_p_i                         863
+box_p_ic                        864
+box_p_n                         865
+box_p_nc                        866
+box_p_s                         867
+box_p_sc                        868
+iter_p_p                        869
+morph_p_p                       870
+morph_p_pc                      871
+clone_s_s                       872
+clone_s_sc                      873
+exchange_i_i                    874
+exchange_p_p                    875
+exchange_n_n                    876
+exchange_s_s                    877
+set_i_i                         878
+set_i_ic                        879
+set_i_n                         880
+set_i_nc                        881
+set_i_s                         882
+set_i_sc                        883
+set_n_n                         884
+set_n_nc                        885
+set_n_i                         886
+set_n_ic                        887
+set_n_s                         888
+set_n_sc                        889
+set_n_p                         890
+set_s_p                         891
+set_s_s                         892
+set_s_sc                        893
+set_s_i                         894
+set_s_ic                        895
+set_s_n                         896
+set_s_nc                        897
+set_p_pc                        898
+set_p_p                         899
+set_p_i                         900
+set_p_ic                        901
+set_p_n                         902
+set_p_nc                        903
+set_p_s                         904
+set_p_sc                        905
+set_i_p                         906
+assign_p_p                      907
+assign_p_i                      908
+assign_p_ic                     909
+assign_p_n                      910
+assign_p_nc                     911
+assign_p_s                      912
+assign_p_sc                     913
+assign_s_s                      914
+assign_s_sc                     915
+setref_p_p                      916
+deref_p_p                       917
+setp_ind_i_p                    918
+setp_ind_ic_p                   919
+setn_ind_i_n                    920
+setn_ind_ic_n                   921
+setn_ind_i_nc                   922
+setn_ind_ic_nc                  923
+sets_ind_i_s                    924
+sets_ind_ic_s                   925
+sets_ind_i_sc                   926
+sets_ind_ic_sc                  927
+seti_ind_i_i                    928
+seti_ind_ic_i                   929
+seti_ind_i_ic                   930
+seti_ind_ic_ic                  931
+set_p_ki_i                      932
+set_p_kic_i                     933
+set_p_ki_ic                     934
+set_p_kic_ic                    935
+set_p_ki_n                      936
+set_p_kic_n                     937
+set_p_ki_nc                     938
+set_p_kic_nc                    939
+set_p_ki_s                      940
+set_p_kic_s                     941
+set_p_ki_sc                     942
+set_p_kic_sc                    943
+set_p_ki_p                      944
+set_p_kic_p                     945
+set_i_p_ki                      946
+set_i_p_kic                     947
+set_n_p_ki                      948
+set_n_p_kic                     949
+set_s_p_ki                      950
+set_s_p_kic                     951
+set_p_p_ki                      952
+set_p_p_kic                     953
+set_p_k_i                       954
+set_p_kc_i                      955
+set_p_k_ic                      956
+set_p_kc_ic                     957
+set_p_k_n                       958
+set_p_kc_n                      959
+set_p_k_nc                      960
+set_p_kc_nc                     961
+set_p_k_s                       962
+set_p_kc_s                      963
+set_p_k_sc                      964
+set_p_kc_sc                     965
+set_p_k_p                       966
+set_p_kc_p                      967
+set_i_p_k                       968
+set_i_p_kc                      969
+set_n_p_k                       970
+set_n_p_kc                      971
+set_s_p_k                       972
+set_s_p_kc                      973
+set_p_p_k                       974
+set_p_p_kc                      975
+clone_p_p                       976
+clone_p_p_p                     977
+clone_p_p_pc                    978
+copy_p_p                        979
+null_s                          980
+null_i                          981
+null_p                          982
+null_n                          983
+cleari                          984
+clearn                          985
+clears                          986
+clearp                          987
+ord_i_s                         988
+ord_i_sc                        989
+ord_i_s_i                       990
+ord_i_sc_i                      991
+ord_i_s_ic                      992
+ord_i_sc_ic                     993
+chr_s_i                         994
+chr_s_ic                        995
+chopn_s_i                       996
+chopn_s_ic                      997
+chopn_s_s_i                     998
+chopn_s_sc_i                    999
+chopn_s_s_ic                   1000
+chopn_s_sc_ic                  1001
+concat_s_s                     1002
+concat_s_sc                    1003
+concat_p_p                     1004
+concat_p_s                     1005
+concat_p_sc                    1006
+concat_s_s_s                   1007
+concat_s_sc_s                  1008
+concat_s_s_sc                  1009
+concat_p_p_s                   1010
+concat_p_p_sc                  1011
+concat_p_p_p                   1012
+repeat_s_s_i                   1013
+repeat_s_sc_i                  1014
+repeat_s_s_ic                  1015
+repeat_s_sc_ic                 1016
+repeat_p_p_i                   1017
+repeat_p_p_ic                  1018
+repeat_p_p_p                   1019
+repeat_p_i                     1020
+repeat_p_ic                    1021
+repeat_p_p                     1022
+length_i_s                     1023
+length_i_sc                    1024
+bytelength_i_s                 1025
+bytelength_i_sc                1026
+pin_s                          1027
+unpin_s                        1028
+substr_s_s_i                   1029
+substr_s_sc_i                  1030
+substr_s_s_ic                  1031
+substr_s_sc_ic                 1032
+substr_s_s_i_i                 1033
+substr_s_sc_i_i                1034
+substr_s_s_ic_i                1035
+substr_s_sc_ic_i               1036
+substr_s_s_i_ic                1037
+substr_s_sc_i_ic               1038
+substr_s_s_ic_ic               1039
+substr_s_sc_ic_ic              1040
+substr_s_s_i_i_s               1041
+substr_s_s_ic_i_s              1042
+substr_s_s_i_ic_s              1043
+substr_s_s_ic_ic_s             1044
+substr_s_s_i_i_sc              1045
+substr_s_s_ic_i_sc             1046
+substr_s_s_i_ic_sc             1047
+substr_s_s_ic_ic_sc            1048
+substr_s_i_i_s                 1049
+substr_s_ic_i_s                1050
+substr_s_i_ic_s                1051
+substr_s_ic_ic_s               1052
+substr_s_i_i_sc                1053
+substr_s_ic_i_sc               1054
+substr_s_i_ic_sc               1055
+substr_s_ic_ic_sc              1056
+substr_s_p_i_i                 1057
+substr_s_p_ic_i                1058
+substr_s_p_i_ic                1059
+substr_s_p_ic_ic               1060
+index_i_s_s                    1061
+index_i_sc_s                   1062
+index_i_s_sc                   1063
+index_i_sc_sc                  1064
+index_i_s_s_i                  1065
+index_i_sc_s_i                 1066
+index_i_s_sc_i                 1067
+index_i_sc_sc_i                1068
+index_i_s_s_ic                 1069
+index_i_sc_s_ic                1070
+index_i_s_sc_ic                1071
+index_i_sc_sc_ic               1072
+sprintf_s_s_p                  1073
+sprintf_s_sc_p                 1074
+sprintf_p_p_p                  1075
+new_s                          1076
+new_s_i                        1077
+new_s_ic                       1078
+stringinfo_i_s_i               1079
+stringinfo_i_sc_i              1080
+stringinfo_i_s_ic              1081
+stringinfo_i_sc_ic             1082
+upcase_s_s                     1083
+upcase_s_sc                    1084
+upcase_s                       1085
+downcase_s_s                   1086
+downcase_s_sc                  1087
+downcase_s                     1088
+titlecase_s_s                  1089
+titlecase_s_sc                 1090
+titlecase_s                    1091
+join_s_s_p                     1092
+join_s_sc_p                    1093
+split_p_s_s                    1094
+split_p_sc_s                   1095
+split_p_s_sc                   1096
+split_p_sc_sc                  1097
+charset_i_s                    1098
+charset_i_sc                   1099
+charsetname_s_i                1100
+charsetname_s_ic               1101
+find_charset_i_s               1102
+find_charset_i_sc              1103
+trans_charset_s_i              1104
+trans_charset_s_ic             1105
+trans_charset_s_s_i            1106
+trans_charset_s_sc_i           1107
+trans_charset_s_s_ic           1108
+trans_charset_s_sc_ic          1109
+encoding_i_s                   1110
+encoding_i_sc                  1111
+encodingname_s_i               1112
+encodingname_s_ic              1113
+find_encoding_i_s              1114
+find_encoding_i_sc             1115
+trans_encoding_s_i             1116
+trans_encoding_s_ic            1117
+trans_encoding_s_s_i           1118
+trans_encoding_s_sc_i          1119
+trans_encoding_s_s_ic          1120
+trans_encoding_s_sc_ic         1121
+is_cclass_i_i_s_i              1122
+is_cclass_i_ic_s_i             1123
+is_cclass_i_i_sc_i             1124
+is_cclass_i_ic_sc_i            1125
+is_cclass_i_i_s_ic             1126
+is_cclass_i_ic_s_ic            1127
+is_cclass_i_i_sc_ic            1128
+is_cclass_i_ic_sc_ic           1129
+find_cclass_i_i_s_i_i          1130
+find_cclass_i_ic_s_i_i         1131
+find_cclass_i_i_sc_i_i         1132
+find_cclass_i_ic_sc_i_i        1133
+find_cclass_i_i_s_ic_i         1134
+find_cclass_i_ic_s_ic_i        1135
+find_cclass_i_i_sc_ic_i        1136
+find_cclass_i_ic_sc_ic_i       1137
+find_cclass_i_i_s_i_ic         1138
+find_cclass_i_ic_s_i_ic        1139
+find_cclass_i_i_sc_i_ic        1140
+find_cclass_i_ic_sc_i_ic       1141
+find_cclass_i_i_s_ic_ic        1142
+find_cclass_i_ic_s_ic_ic       1143
+find_cclass_i_i_sc_ic_ic       1144
+find_cclass_i_ic_sc_ic_ic      1145
+find_not_cclass_i_i_s_i_i      1146
+find_not_cclass_i_ic_s_i_i     1147
+find_not_cclass_i_i_sc_i_i     1148
+find_not_cclass_i_ic_sc_i_i    1149
+find_not_cclass_i_i_s_ic_i     1150
+find_not_cclass_i_ic_s_ic_i    1151
+find_not_cclass_i_i_sc_ic_i    1152
+find_not_cclass_i_ic_sc_ic_i   1153
+find_not_cclass_i_i_s_i_ic     1154
+find_not_cclass_i_ic_s_i_ic    1155
+find_not_cclass_i_i_sc_i_ic    1156
+find_not_cclass_i_ic_sc_i_ic   1157
+find_not_cclass_i_i_s_ic_ic    1158
+find_not_cclass_i_ic_s_ic_ic   1159
+find_not_cclass_i_i_sc_ic_ic   1160
+find_not_cclass_i_ic_sc_ic_ic  1161
+escape_s_s                     1162
+compose_s_s                    1163
+compose_s_sc                   1164
+spawnw_i_s                     1165
+spawnw_i_sc                    1166
+spawnw_i_p                     1167
+err_i                          1168
+err_s                          1169
+err_s_i                        1170
+err_s_ic                       1171
+time_i                         1172
+time_n                         1173
+gmtime_s_i                     1174
+gmtime_s_ic                    1175
+localtime_s_i                  1176
+localtime_s_ic                 1177
+decodetime_p_i                 1178
+decodetime_p_ic                1179
+decodelocaltime_p_i            1180
+decodelocaltime_p_ic           1181
+sysinfo_s_i                    1182
+sysinfo_s_ic                   1183
+sysinfo_i_i                    1184
+sysinfo_i_ic                   1185
+sleep_i                        1186
+sleep_ic                       1187
+sleep_n                        1188
+sleep_nc                       1189
+sizeof_i_i                     1190
+sizeof_i_ic                    1191
+store_lex_s_p                  1192
+store_lex_sc_p                 1193
+store_dynamic_lex_s_p          1194
+store_dynamic_lex_sc_p         1195
+find_lex_p_s                   1196
+find_lex_p_sc                  1197
+find_dynamic_lex_p_s           1198
+find_dynamic_lex_p_sc          1199
+find_caller_lex_p_s            1200
+find_caller_lex_p_sc           1201
+get_namespace_p                1202
+get_namespace_p_p              1203
+get_namespace_p_pc             1204
+get_hll_namespace_p            1205
+get_hll_namespace_p_p          1206
+get_hll_namespace_p_pc         1207
+get_root_namespace_p           1208
+get_root_namespace_p_p         1209
+get_root_namespace_p_pc        1210
+get_global_p_s                 1211
+get_global_p_sc                1212
+get_global_p_p_s               1213
+get_global_p_pc_s              1214
+get_global_p_p_sc              1215
+get_global_p_pc_sc             1216
+get_hll_global_p_s             1217
+get_hll_global_p_sc            1218
+get_hll_global_p_p_s           1219
+get_hll_global_p_pc_s          1220
+get_hll_global_p_p_sc          1221
+get_hll_global_p_pc_sc         1222
+get_root_global_p_s            1223
+get_root_global_p_sc           1224
+get_root_global_p_p_s          1225
+get_root_global_p_pc_s         1226
+get_root_global_p_p_sc         1227
+get_root_global_p_pc_sc        1228
+set_global_s_p                 1229
+set_global_sc_p                1230
+set_global_p_s_p               1231
+set_global_pc_s_p              1232
+set_global_p_sc_p              1233
+set_global_pc_sc_p             1234
+set_hll_global_s_p             1235
+set_hll_global_sc_p            1236
+set_hll_global_p_s_p           1237
+set_hll_global_pc_s_p          1238
+set_hll_global_p_sc_p          1239
+set_hll_global_pc_sc_p         1240
+set_root_global_s_p            1241
+set_root_global_sc_p           1242
+set_root_global_p_s_p          1243
+set_root_global_pc_s_p         1244
+set_root_global_p_sc_p         1245
+set_root_global_pc_sc_p        1246
+find_name_p_s                  1247
+find_name_p_sc                 1248
+find_sub_not_null_p_s          1249
+find_sub_not_null_p_sc         1250

Modified: branches/rm_cflags/src/runcore/main.c
==============================================================================
--- branches/rm_cflags/src/runcore/main.c	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/src/runcore/main.c	Thu Mar  4 20:51:45 2010	(r44632)
@@ -10,20 +10,6 @@
 
 The runcore API handles running the operations.
 
-The predereferenced code chunk is pre-initialized with the opcode
-function pointers, addresses, or opnumbers of the C<prederef__>
-opcode. This opcode then calls the C<do_prederef()> function, which then
-fills in the real function, address or op number.
-
-Because the C<prederef__> opcode returns the same C<pc_prederef> it was
-passed, the runops loop will re-execute the same location, which will
-then have the pointer to the real C<prederef> opfunc and C<prederef>
-args.
-
-Pointer arithmetic is used to determine the index into the bytecode
-corresponding to the currect opcode. The bytecode and prederef arrays
-have the same number of elements because there is a one-to-one mapping.
-
 =head2 Functions
 
 =over 4
@@ -76,17 +62,6 @@
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 
-static void prederef_args(
-    ARGMOD(void **pc_prederef),
-    PARROT_INTERP,
-    ARGIN(const opcode_t *pc),
-    ARGIN(const op_info_t *opinfo))
-        __attribute__nonnull__(1)
-        __attribute__nonnull__(2)
-        __attribute__nonnull__(3)
-        __attribute__nonnull__(4)
-        FUNC_MODIFIES(*pc_prederef);
-
 static void stop_prederef(PARROT_INTERP)
         __attribute__nonnull__(1);
 
@@ -102,11 +77,6 @@
 #define ASSERT_ARGS_notify_func_table __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp) \
     , PARROT_ASSERT_ARG(table))
-#define ASSERT_ARGS_prederef_args __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
-       PARROT_ASSERT_ARG(pc_prederef) \
-    , PARROT_ASSERT_ARG(interp) \
-    , PARROT_ASSERT_ARG(pc) \
-    , PARROT_ASSERT_ARG(opinfo))
 #define ASSERT_ARGS_stop_prederef __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(interp))
 #define ASSERT_ARGS_turn_ev_check __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
@@ -217,197 +187,6 @@
 
 /*
 
-=item C<static void prederef_args(void **pc_prederef, PARROT_INTERP, const
-opcode_t *pc, const op_info_t *opinfo)>
-
-Called from C<do_prederef()> to deal with any arguments.
-
-C<pc_prederef> is the current opcode.
-
-=cut
-
-*/
-
-static void
-prederef_args(ARGMOD(void **pc_prederef), PARROT_INTERP,
-        ARGIN(const opcode_t *pc), ARGIN(const op_info_t *opinfo))
-{
-    ASSERT_ARGS(prederef_args)
-    const PackFile_ConstTable * const const_table = interp->code->const_table;
-
-    const int regs_n = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_NUM);
-    const int regs_i = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_INT);
-    const int regs_p = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_PMC);
-    const int regs_s = Parrot_pcc_get_regs_used(interp, CURRENT_CONTEXT(interp), REGNO_STR);
-
-    /* prederef var part too */
-    const int m = opinfo->op_count;
-    int       n = opinfo->op_count;
-    int       i;
-
-    ADD_OP_VAR_PART(interp, interp->code, pc, n);
-    for (i = 1; i < n; i++) {
-        const opcode_t arg = pc[i];
-        int type;
-        if (i >= m) {
-            PMC * const sig = (PMC*) pc_prederef[1];
-            type = VTABLE_get_integer_keyed_int(interp, sig, i - m);
-            type &= (PARROT_ARG_TYPE_MASK | PARROT_ARG_CONSTANT);
-        }
-        else
-            type = opinfo->types[i - 1];
-
-        switch (type) {
-
-          case PARROT_ARG_KI:
-          case PARROT_ARG_I:
-            if (arg < 0 || arg >= regs_i)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal register number");
-
-            pc_prederef[i] = (void *)REG_OFFS_INT(arg);
-            break;
-
-          case PARROT_ARG_N:
-            if (arg < 0 || arg >= regs_n)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal register number");
-
-            pc_prederef[i] = (void *)REG_OFFS_NUM(arg);
-            break;
-
-          case PARROT_ARG_K:
-          case PARROT_ARG_P:
-            if (arg < 0 || arg >= regs_p)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal register number");
-
-            pc_prederef[i] = (void *)REG_OFFS_PMC(arg);
-            break;
-
-          case PARROT_ARG_S:
-            if (arg < 0 || arg >= regs_s)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal register number");
-
-            pc_prederef[i] = (void *)REG_OFFS_STR(arg);
-            break;
-
-          case PARROT_ARG_KIC:
-          case PARROT_ARG_IC:
-            pc_prederef[i] = (void *)pc[i];
-            break;
-
-          case PARROT_ARG_NC:
-            if (arg < 0 || arg >= const_table->const_count)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal constant number");
-
-            pc_prederef[i] = (void *)&const_table->constants[arg]->u.number;
-            break;
-
-          case PARROT_ARG_SC:
-            if (arg < 0 || arg >= const_table->const_count)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal constant number");
-
-            pc_prederef[i] = (void *)const_table->constants[arg]->u.string;
-            break;
-
-          case PARROT_ARG_PC:
-          case PARROT_ARG_KC:
-            if (arg < 0 || arg >= const_table->const_count)
-                Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-                    "Illegal constant number");
-
-            pc_prederef[i] = (void *)const_table->constants[arg]->u.key;
-            break;
-          default:
-            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_ARG_OP_NOT_HANDLED,
-                "Unhandled argtype 0x%x\n", type);
-            break;
-        }
-    }
-}
-
-
-/*
-
-=item C<void do_prederef(void **pc_prederef, PARROT_INTERP, Parrot_runcore_t
-*runcore)>
-
-This is called from within the run cores to predereference the current
-opcode.
-
-C<pc_prederef> is the current opcode, and C<type> is the run core type.
-
-=cut
-
-*/
-
-void
-do_prederef(ARGIN(void **pc_prederef), PARROT_INTERP, ARGIN(Parrot_runcore_t *runcore))
-{
-    ASSERT_ARGS(do_prederef)
-    const size_t     offset = pc_prederef - interp->code->prederef.code;
-    opcode_t * const pc     = ((opcode_t *)interp->code->base.data) + offset;
-    const op_info_t *opinfo;
-    size_t           n;
-
-    if (*pc < 0 || *pc >= (opcode_t)interp->op_count)
-        Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INTERP_ERROR,
-            "Illegal opcode");
-
-    opinfo = &interp->op_info_table[*pc];
-
-    prederef_args(pc_prederef, interp, pc, opinfo);
-
-    if (PARROT_RUNCORE_PREDEREF_OPS_TEST(runcore)) {
-        *pc_prederef = PARROT_RUNCORE_CGOTO_OPS_TEST(runcore)
-            ? ((void **)interp->op_lib->op_func_table)[*pc]
-            : (void**)*pc;
-    }
-    else
-        Parrot_ex_throw_from_c_args(interp, NULL, 1,
-            "Tried to prederef wrong core");
-
-    /* now remember backward branches, invoke and similar opcodes */
-    n = opinfo->op_count;
-
-    if (((opinfo->jump & PARROT_JUMP_RELATIVE)
-    &&    opinfo->types[n - 2] == PARROT_ARG_IC
-    &&    pc[n - 1] < 0)                          /* relative backward branch */
-    ||   (opinfo->jump & PARROT_JUMP_ADDRESS)) {
-        Prederef * const pi = &interp->code->prederef;
-
-        /* first time prederef.branches == NULL:
-         * estimate size to 1/16th of opcodes */
-        if (!pi->branches) {
-            size_t nb = interp->code->base.size / 16;
-            if (nb < 8)
-                nb = (size_t)8;
-
-            pi->branches    = mem_gc_allocate_n_zeroed_typed(interp, nb, Prederef_branch);
-            pi->n_allocated = nb;
-            pi->n_branches  = 0;
-        }
-        else if (pi->n_branches >= pi->n_allocated) {
-            size_t old = pi->n_allocated;
-            pi->n_allocated = (size_t) (pi->n_allocated * 1.5);
-            pi->branches = mem_gc_realloc_n_typed_zeroed(interp,
-                    pi->branches, pi->n_allocated, old, Prederef_branch);
-        }
-
-        pi->branches[pi->n_branches].offs = offset;
-        pi->branches[pi->n_branches].op   = *pc_prederef;
-
-        ++pi->n_branches;
-    }
-}
-
-
-/*
-
 =item C<static void turn_ev_check(PARROT_INTERP, int on)>
 
 Turn on or off event checking for prederefed cores.

Deleted: branches/rm_cflags/src/tsq.c
==============================================================================
--- branches/rm_cflags/src/tsq.c	Thu Mar  4 20:51:45 2010	(r44631)
+++ /dev/null	00:00:00 1970	(deleted)
@@ -1,426 +0,0 @@
-/*
-Copyright (C) 2001-2009, Parrot Foundation.
-$Id$
-
-=head1 NAME
-
-src/tsq.c - Thread-safe queues
-
-=head1 DESCRIPTION
-
-This file implements thread-safe queues for Parrot.
-
-=head2 Functions
-
-=over 4
-
-=cut
-
-*/
-
-#include "parrot/parrot.h"
-
-/* HEADERIZER HFILE: include/parrot/tsq.h */
-
-/*
-
-=item C<QUEUE_ENTRY * pop_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue and returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-pop_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(pop_entry)
-    QUEUE_ENTRY *returnval;
-    queue_lock(queue);
-    returnval = nosync_pop_entry(queue);
-    queue_unlock(queue);
-    return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * peek_entry(const QUEUE *queue)>
-
-This does no locking, so the result might have changed by the time you
-get the entry, but a synchronized C<pop_entry()> will check again and
-return C<NULL> if the queue is empty.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_WARN_UNUSED_RESULT
-QUEUE_ENTRY *
-peek_entry(ARGIN(const QUEUE *queue))
-{
-    ASSERT_ARGS(peek_entry)
-    return queue->head;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * nosync_pop_entry(QUEUE *queue)>
-
-Grab an entry off the queue with no synchronization. Internal only,
-because it's darned evil and shouldn't be used outside the module. It's
-in here so we don't have to duplicate pop code.
-
-=cut
-
-*/
-
-PARROT_CANNOT_RETURN_NULL
-QUEUE_ENTRY *
-nosync_pop_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(nosync_pop_entry)
-    QUEUE_ENTRY *returnval;
-    if (!queue->head) {
-        return NULL;
-    }
-    returnval = queue->head;
-    if (queue->head == queue->tail) {
-        queue->head = NULL;
-        queue->tail = NULL;
-    }
-    else {
-        queue->head = queue->head->next;
-    }
-    returnval->next = NULL;
-    return returnval;
-}
-
-/*
-
-=item C<QUEUE_ENTRY * wait_for_entry(QUEUE *queue)>
-
-Does a synchronized removal of the head entry off the queue, waiting if
-necessary until there is an entry, and then returns it.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-QUEUE_ENTRY *
-wait_for_entry(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(wait_for_entry)
-    QUEUE_ENTRY *returnval;
-
-    queue_lock(queue);
-    while (queue->head == NULL) {
-        queue_wait(queue);
-    }
-    returnval = nosync_pop_entry(queue);
-    queue_unlock(queue);
-    return returnval;
-
-}
-
-/*
-
-=item C<void push_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> onto the tail of the queue.
-
-=cut
-
-*/
-
-void
-push_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(push_entry)
-    queue_lock(queue);
-    /* Is there something in the queue? */
-    if (queue->tail) {
-        queue->tail->next = entry;
-        queue->tail = entry;
-    }
-    else {
-        queue->head = entry;
-        queue->tail = entry;
-    }
-    queue_signal(queue);        /* assumes only one waiter */
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void unshift_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insertion of C<entry> into the head of the queue.
-
-=cut
-
-*/
-
-void
-unshift_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(unshift_entry)
-    QUEUE_ENTRY *cur;
-
-    queue_lock(queue);
-    cur = queue->head;
-    if (!cur) {
-        /* empty just set head */
-        queue->head = entry;
-        queue->tail = entry;
-    }
-    else {
-        queue->head = entry;
-        entry->next = cur;
-    }
-    queue_signal(queue);
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void nosync_insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Inserts a timed event according to C<abstime>. The caller has to hold the
-queue mutex.
-
-=cut
-
-*/
-
-void
-nosync_insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(nosync_insert_entry)
-    QUEUE_ENTRY *cur = queue->head;
-    QUEUE_ENTRY *prev;
-    parrot_event *event;
-    FLOATVAL abs_time;
-
-    PARROT_ASSERT(entry->type == QUEUE_ENTRY_TYPE_TIMED_EVENT);
-    /*
-     * empty queue - just insert
-     */
-    if (!cur) {
-        queue->head = entry;
-        queue->tail = entry;
-        return;
-    }
-
-    prev     = NULL;
-    event    = (parrot_event *)entry->data;
-    abs_time = event->u.timer_event.abs_time;
-
-    while (cur && cur->type == QUEUE_ENTRY_TYPE_TIMED_EVENT) {
-        const parrot_event * const cur_event = (parrot_event *)cur->data;
-        if (abs_time > cur_event->u.timer_event.abs_time) {
-            prev = cur;
-            cur = cur->next;
-        }
-        else
-            break;
-    }
-    if (!prev)
-        queue->head = entry;
-    else {
-        prev->next = entry;
-        if (prev == queue->tail)
-            queue->tail = entry;
-    }
-    entry->next = cur;
-}
-
-/*
-
-=item C<void insert_entry(QUEUE *queue, QUEUE_ENTRY *entry)>
-
-Does a synchronized insert of C<entry>.
-
-=cut
-
-*/
-
-void
-insert_entry(ARGMOD(QUEUE *queue), ARGIN(QUEUE_ENTRY *entry))
-{
-    ASSERT_ARGS(insert_entry)
-    queue_lock(queue);
-    nosync_insert_entry(queue, entry);
-    queue_signal(queue);
-    queue_unlock(queue);
-}
-
-/*
-
-=item C<void queue_lock(QUEUE *queue)>
-
-Locks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_lock(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_lock)
-    LOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_unlock(QUEUE *queue)>
-
-Unlocks the queue's mutex.
-
-=cut
-
-*/
-
-void
-queue_unlock(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_unlock)
-    UNLOCK(queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_broadcast(QUEUE *queue)>
-
-This function wakes up I<every> thread waiting on the queue.
-
-=cut
-
-*/
-
-void
-queue_broadcast(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_broadcast)
-    COND_BROADCAST(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_signal(QUEUE *queue)>
-
-=cut
-
-*/
-
-void
-queue_signal(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_signal)
-    COND_SIGNAL(queue->queue_condition);
-}
-
-/*
-
-=item C<void queue_wait(QUEUE *queue)>
-
-Instructs the queue to wait.
-
-=cut
-
-*/
-
-void
-queue_wait(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_wait)
-    COND_WAIT(queue->queue_condition, queue->queue_mutex);
-}
-
-/*
-
-=item C<void queue_timedwait(QUEUE *queue, const struct timespec *abs_time)>
-
-Instructs the queue to wait for C<abs_time> seconds (?).
-
-=cut
-
-*/
-
-void
-queue_timedwait(ARGMOD(QUEUE *queue), ARGIN(const struct timespec *abs_time))
-{
-    ASSERT_ARGS(queue_timedwait)
-    COND_TIMED_WAIT(queue->queue_condition, queue->queue_mutex, abs_time);
-}
-
-/*
-
-=item C<QUEUE* queue_init(UINTVAL prio)>
-
-Initializes the queue, setting C<prio> as the queue's priority.
-
-=cut
-
-*/
-
-PARROT_CAN_RETURN_NULL
-PARROT_MALLOC
-QUEUE*
-queue_init(UINTVAL prio)
-{
-    ASSERT_ARGS(queue_init)
-    QUEUE * const queue = mem_internal_allocate_typed(QUEUE);
-
-    queue->head = queue->tail = NULL;
-    queue->max_prio = prio;
-    COND_INIT(queue->queue_condition);
-    MUTEX_INIT(queue->queue_mutex);
-    return queue;
-}
-
-/*
-
-=item C<void queue_destroy(QUEUE *queue)>
-
-Destroys the queue, raising an exception if it is not empty.
-
-=cut
-
-*/
-
-void
-queue_destroy(ARGMOD(QUEUE *queue))
-{
-    ASSERT_ARGS(queue_destroy)
-    if (peek_entry(queue))
-        exit_fatal(1, "Queue not empty on destroy");
-
-    COND_DESTROY(queue->queue_condition);
-    MUTEX_DESTROY(queue->queue_mutex);
-    mem_internal_free(queue);
-}
-
-/*
-
-=back
-
-=head1 SEE ALSO
-
-F<include/parrot/tsq.h>.
-
-=cut
-
-*/
-
-
-/*
- * Local variables:
- *   c-file-style: "parrot"
- * End:
- * vim: expandtab shiftwidth=4:
- */

Modified: branches/rm_cflags/t/codingstd/c_function_docs.t
==============================================================================
--- branches/rm_cflags/t/codingstd/c_function_docs.t	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/t/codingstd/c_function_docs.t	Thu Mar  4 20:51:45 2010	(r44632)
@@ -121,7 +121,6 @@
 src/string/charset/binary.c
 src/string/charset/iso-8859-1.c
 src/string/charset/unicode.c
-src/tsq.c
 
 # Local Variables:
 #   mode: cperl

Modified: branches/rm_cflags/t/codingstd/perlcritic.t
==============================================================================
--- branches/rm_cflags/t/codingstd/perlcritic.t	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/t/codingstd/perlcritic.t	Thu Mar  4 20:51:45 2010	(r44632)
@@ -40,7 +40,13 @@
 use Parrot::Distribution;
 use Test::More;
 
-# There's no point in continuing if we're missing some certain modules.
+# There's no point in continuing if we're missing some certain modules, or
+# if the developer doesn't want to.
+
+if (exists $ENV{'PARROT_TEST_NO_PERLCRITIC'}) {
+  give_up('absence of PARROT_TEST_NO_PERLCRITIC environment variable');
+}
+
 eval { require Test::Perl::Critic };
 if ($@) {
   give_up('Test::Perl::Critic');

Modified: branches/rm_cflags/t/native_pbc/annotations.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/rm_cflags/t/native_pbc/integer_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/rm_cflags/t/native_pbc/number_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/rm_cflags/t/native_pbc/string_1.pbc
==============================================================================
Binary file (source and/or target). No diff available.

Modified: branches/rm_cflags/t/pmc/signal.t
==============================================================================
--- branches/rm_cflags/t/pmc/signal.t	Thu Mar  4 20:42:24 2010	(r44631)
+++ branches/rm_cflags/t/pmc/signal.t	Thu Mar  4 20:51:45 2010	(r44632)
@@ -22,8 +22,7 @@
 
 =cut
 
-# actually more platforms should work - all POSIX compliant ones - but
-# signals are currently not enabled for all in src/events.c
+# actually more platforms should work - all POSIX compliant ones
 # a second problem is to get the test doing the right thing: mainly figuring
 # out what PID to kill. The "ps" command isn't one of the portable ones.
 


More information about the parrot-commits mailing list