[svn:parrot] r44495 - in branches/rm_cflags: . include/parrot src src/interp src/nci src/packfile src/runcore t/src tools/dev

coke at svn.parrot.org coke at svn.parrot.org
Fri Feb 26 14:42:34 UTC 2010


Author: coke
Date: Fri Feb 26 14:42:32 2010
New Revision: 44495
URL: https://trac.parrot.org/parrot/changeset/44495

Log:
merge latest changes from trunk

Modified:
   branches/rm_cflags/   (props changed)
   branches/rm_cflags/include/parrot/packfile.h
   branches/rm_cflags/include/parrot/pmc_freeze.h
   branches/rm_cflags/include/parrot/runcore_trace.h   (props changed)
   branches/rm_cflags/src/interp/inter_create.c   (props changed)
   branches/rm_cflags/src/main.c
   branches/rm_cflags/src/nci/extra_thunks.c
   branches/rm_cflags/src/packfile.c
   branches/rm_cflags/src/packfile/pf_items.c
   branches/rm_cflags/src/pmc_freeze.c
   branches/rm_cflags/src/runcore/cores.c   (props changed)
   branches/rm_cflags/src/runcore/trace.c   (props changed)
   branches/rm_cflags/t/src/embed.t   (props changed)
   branches/rm_cflags/tools/dev/mk_gitignore.pl   (props changed)
   branches/rm_cflags/tools/dev/nci_thunk_gen.pir

Modified: branches/rm_cflags/include/parrot/packfile.h
==============================================================================
--- branches/rm_cflags/include/parrot/packfile.h	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/include/parrot/packfile.h	Fri Feb 26 14:42:32 2010	(r44495)
@@ -1091,6 +1091,9 @@
 size_t PF_size_string(ARGIN(const STRING *s))
         __attribute__nonnull__(1);
 
+PARROT_PURE_FUNCTION
+size_t PF_size_strlen(const UINTVAL len);
+
 PARROT_WARN_UNUSED_RESULT
 PARROT_CANNOT_RETURN_NULL
 opcode_t* PF_store_cstring(ARGOUT(opcode_t *cursor), ARGIN(const char *s))
@@ -1148,6 +1151,7 @@
 #define ASSERT_ARGS_PF_size_opcode __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_PF_size_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(s))
+#define ASSERT_ARGS_PF_size_strlen __attribute__unused__ int _ASSERT_ARGS_CHECK = (0)
 #define ASSERT_ARGS_PF_store_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\
        PARROT_ASSERT_ARG(cursor) \
     , PARROT_ASSERT_ARG(s))

Modified: branches/rm_cflags/include/parrot/pmc_freeze.h
==============================================================================
--- branches/rm_cflags/include/parrot/pmc_freeze.h	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/include/parrot/pmc_freeze.h	Fri Feb 26 14:42:32 2010	(r44495)
@@ -121,7 +121,7 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-INTVAL Parrot_freeze_size(PARROT_INTERP, ARGIN(PMC *pmc))
+UINTVAL Parrot_freeze_size(PARROT_INTERP, ARGIN(PMC *pmc))
         __attribute__nonnull__(1)
         __attribute__nonnull__(2);
 

Modified: branches/rm_cflags/src/main.c
==============================================================================
--- branches/rm_cflags/src/main.c	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/src/main.c	Fri Feb 26 14:42:32 2010	(r44495)
@@ -429,6 +429,11 @@
     ASSERT_ARGS(parseflags)
     struct longopt_opt_info opt  = LONGOPT_OPT_INFO_INIT;
     int                     status;
+    /* g++ complains if we cast char** to const char** directly. However, nobody
+       ever complains if you const to void* first. Sure we lose a certain
+       amount of compiler-enforced type safety, but this is a rare occasion
+       with a very long explanatory comment. */
+    const char ** const _tempargv = (const char **)((void *)*argv);
 
     if (*argc == 1) {
         usage(stderr);
@@ -437,7 +442,7 @@
 
     imcc_start_handling_flags(interp);
 
-    while ((status = longopt_get(interp, *argc, (const char **)*argv, options,
+    while ((status = longopt_get(interp, *argc, _tempargv, options,
             &opt)) > 0) {
         switch (opt.opt_id) {
           case 'R':
@@ -476,8 +481,11 @@
             /* Handled in parseflags_minimal */
             break;
           case 't':
-            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg))
-                *trace = (Parrot_trace_flags)strtoul(opt.opt_arg, NULL, 16);
+            if (opt.opt_arg && is_all_hex_digits(opt.opt_arg)) {
+                const unsigned long _temp = strtoul(opt.opt_arg, NULL, 16);
+                const Parrot_trace_flags _temp_flag = (Parrot_trace_flags)_temp;
+                *trace = _temp_flag;
+            }
             else
                 *trace = PARROT_TRACE_OPS_FLAG;
             break;

Modified: branches/rm_cflags/src/nci/extra_thunks.c
==============================================================================
--- branches/rm_cflags/src/nci/extra_thunks.c	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/src/nci/extra_thunks.c	Fri Feb 26 14:42:32 2010	(r44495)
@@ -574,7 +574,7 @@
 static void
 pcf_v_(PARROT_INTERP, PMC *self)
 {
-    typedef void(* func_t)();
+    typedef void(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -1794,7 +1794,7 @@
 static void
 pcf_i_(PARROT_INTERP, PMC *self)
 {
-    typedef int(* func_t)();
+    typedef int(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -2213,7 +2213,7 @@
 static void
 pcf_l_(PARROT_INTERP, PMC *self)
 {
-    typedef long(* func_t)();
+    typedef long(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -2970,7 +2970,7 @@
 static void
 pcf_c_(PARROT_INTERP, PMC *self)
 {
-    typedef char(* func_t)();
+    typedef char(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -3008,7 +3008,7 @@
 static void
 pcf_d_(PARROT_INTERP, PMC *self)
 {
-    typedef double(* func_t)();
+    typedef double(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -3044,7 +3044,7 @@
 static void
 pcf_f_(PARROT_INTERP, PMC *self)
 {
-    typedef float(* func_t)();
+    typedef float(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -4675,7 +4675,7 @@
 static void
 pcf_p_(PARROT_INTERP, PMC *self)
 {
-    typedef void *(* func_t)();
+    typedef void *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -5070,7 +5070,7 @@
 static void
 pcf_s_(PARROT_INTERP, PMC *self)
 {
-    typedef short(* func_t)();
+    typedef short(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);
@@ -5087,7 +5087,7 @@
 static void
 pcf_t_(PARROT_INTERP, PMC *self)
 {
-    typedef char *(* func_t)();
+    typedef char *(* func_t)(void);
     func_t fn_pointer;
     void *orig_func;
     PMC *ctx         = CURRENT_CONTEXT(interp);

Modified: branches/rm_cflags/src/packfile.c
==============================================================================
--- branches/rm_cflags/src/packfile.c	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/src/packfile.c	Fri Feb 26 14:42:32 2010	(r44495)
@@ -3914,9 +3914,7 @@
 
       case PFC_PMC:
         component = self->u.key; /* the pmc (Sub, ...) */
-
-        packed_size =
-            PF_size_string(STRINGNULL) + Parrot_freeze_size(interp, component) / sizeof (opcode_t);
+        packed_size = PF_size_strlen(Parrot_freeze_size(interp, component));
         break;
 
       default:

Modified: branches/rm_cflags/src/packfile/pf_items.c
==============================================================================
--- branches/rm_cflags/src/packfile/pf_items.c	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/src/packfile/pf_items.c	Fri Feb 26 14:42:32 2010	(r44495)
@@ -1,5 +1,5 @@
 /*
-Copyright (C) 2001-2009, Parrot Foundation.
+Copyright (C) 2001-2010, Parrot Foundation.
 $Id$
 
 =head1 NAME
@@ -1415,7 +1415,27 @@
 PF_size_string(ARGIN(const STRING *s))
 {
     ASSERT_ARGS(PF_size_string)
-    opcode_t padded_size = s->bufused;
+    /* TODO: don't break encapsulation on strings */
+    const UINTVAL len = s->bufused;
+    return PF_size_strlen(len);
+}
+
+/*
+
+=item C<size_t PF_size_strlen(const UINTVAL len)>
+
+Reports stored size of C<STRING> in C<opcode_t> units given its in-memory byte length.
+
+=cut
+
+*/
+
+PARROT_PURE_FUNCTION
+size_t
+PF_size_strlen(const UINTVAL len)
+{
+    ASSERT_ARGS(PF_size_strlen)
+    opcode_t padded_size = len;
 
     if (padded_size % sizeof (opcode_t)) {
         padded_size += sizeof (opcode_t) - (padded_size % sizeof (opcode_t));

Modified: branches/rm_cflags/src/pmc_freeze.c
==============================================================================
--- branches/rm_cflags/src/pmc_freeze.c	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/src/pmc_freeze.c	Fri Feb 26 14:42:32 2010	(r44495)
@@ -61,7 +61,7 @@
 
 /*
 
-=item C<INTVAL Parrot_freeze_size(PARROT_INTERP, PMC *pmc)>
+=item C<UINTVAL Parrot_freeze_size(PARROT_INTERP, PMC *pmc)>
 
 Get the size of an image to be frozen without allocating a large buffer.
 
@@ -74,15 +74,25 @@
 PARROT_EXPORT
 PARROT_WARN_UNUSED_RESULT
 PARROT_CAN_RETURN_NULL
-INTVAL
+UINTVAL
 Parrot_freeze_size(PARROT_INTERP, ARGIN(PMC *pmc))
 {
     ASSERT_ARGS(Parrot_freeze_size)
-    PMC *result;
-    PMC *visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
+    UINTVAL int_result;
+    PMC    *pmc_result;
+    PMC    *visitor = Parrot_pmc_new(interp, enum_class_ImageIOSize);
     VTABLE_set_pmc(interp, visitor, pmc);
-    result = VTABLE_get_pmc(interp, visitor);
-    return VTABLE_get_integer(interp, result);
+    pmc_result = VTABLE_get_pmc(interp, visitor);
+    int_result = VTABLE_get_integer(interp, pmc_result);
+
+    {
+        /* XXX remove once bug found */
+        STRING *image = Parrot_freeze(interp, pmc);
+        const UINTVAL check_result =image->bufused;
+        PARROT_ASSERT(check_result == int_result);
+    }
+
+    return int_result;
 }
 
 

Modified: branches/rm_cflags/tools/dev/nci_thunk_gen.pir
==============================================================================
--- branches/rm_cflags/tools/dev/nci_thunk_gen.pir	Fri Feb 26 10:21:39 2010	(r44494)
+++ branches/rm_cflags/tools/dev/nci_thunk_gen.pir	Fri Feb 26 14:42:32 2010	(r44495)
@@ -28,12 +28,14 @@
 
 .macro_const VERSION 0.01
 
-.macro_const OPTS_GLOBAL_NAME 'options'
+.macro_const SIG_TABLE_GLOBAL_NAME  'signature_table'
+.macro_const OPTS_GLOBAL_NAME       'options'
 
 .sub 'main' :main
     .param pmc argv
 
     # initialize global variables
+    'gen_sigtable'()
     'get_options'(argv)
 
     .local string targ
@@ -607,6 +609,9 @@
     .local string params_csig
     $P0 = 'map_from_sig_table'(params, 'as_proto')
     params_csig = join ', ', $P0
+    if params_csig goto end_default_params_csig_to_void
+        params_csig = 'void'
+    end_default_params_csig_to_void:
 
     .local string ret_tdecl
     ret_tdecl = ""
@@ -676,7 +681,7 @@
     .param string field_name
 
     .local pmc sig_table
-    .const 'Sub' sig_table = 'get_sigtable'
+    sig_table = get_global .SIG_TABLE_GLOBAL_NAME
 
     $P0 = split '', sig
 
@@ -816,9 +821,9 @@
 
 #}}}
 
-# get_sigtable {{{
+# gen_sigtable {{{
 
-.sub 'get_sigtable' :anon :immediate
+.sub 'gen_sigtable'
     .const string json_table = <<'JSON'
 {
     "p": { "as_proto":   "void *",
@@ -987,7 +992,7 @@
     goto iter_loop
   iter_end:
 
-    .return (table)
+    set_global .SIG_TABLE_GLOBAL_NAME, table
 .end
 
 # }}}


More information about the parrot-commits mailing list