[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