[svn:parrot] r48294 - trunk/src/pmc
chromatic at svn.parrot.org
chromatic at svn.parrot.org
Tue Aug 3 18:57:52 UTC 2010
Author: chromatic
Date: Tue Aug 3 18:57:52 2010
New Revision: 48294
URL: https://trac.parrot.org/parrot/changeset/48294
Log:
[PMC] Tidied ImageIO PMC; no functional changes.
Modified:
trunk/src/pmc/imageio.pmc
Modified: trunk/src/pmc/imageio.pmc
==============================================================================
--- trunk/src/pmc/imageio.pmc Tue Aug 3 18:57:49 2010 (r48293)
+++ trunk/src/pmc/imageio.pmc Tue Aug 3 18:57:52 2010 (r48294)
@@ -132,16 +132,18 @@
return (opcode_t *)(buf + pos);
}
+
PARROT_INLINE
static void
SET_VISIT_CURSOR(ARGMOD(PMC *pmc), ARGIN(const char *cursor))
{
ASSERT_ARGS(SET_VISIT_CURSOR)
- const char *bufstart = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
+ const char *bufstart = (char *)Buffer_bufstart(PARROT_IMAGEIO(pmc)->buffer);
PARROT_IMAGEIO(pmc)->pos = (cursor - bufstart);
}
+
PARROT_INLINE
static void
INC_VISIT_CURSOR(ARGMOD(PMC *pmc), UINTVAL inc)
@@ -151,11 +153,10 @@
PARROT_IMAGEIO(pmc)->pos += inc;
}
+
#define BYTECODE_SHIFT_OK(pmc) PARROT_ASSERT( \
PARROT_IMAGEIO(pmc)->pos <= PARROT_IMAGEIO(pmc)->input_length)
-
-
static void
create_buffer(PARROT_INTERP, ARGIN_NULLOK(PMC *pmc), ARGMOD(PMC *info))
{
@@ -166,11 +167,11 @@
if (!PMC_IS_NULL(pmc)) {
STRING * const array = CONST_STRING(interp, "array");
STRING * const hash = CONST_STRING(interp, "hash");
- INTVAL items = 1;
+ INTVAL items = 1;
- if (VTABLE_does(interp, pmc, array) || VTABLE_does(interp, pmc, hash)) {
+ if (VTABLE_does(interp, pmc, array) || VTABLE_does(interp, pmc, hash))
items += VTABLE_elements(interp, pmc);
- }
+
len = items * FREEZE_BYTES_PER_ITEM;
}
else
@@ -180,7 +181,9 @@
Parrot_gc_new_bufferlike_header(interp, sizeof (Buffer));
Parrot_gc_allocate_buffer_storage_aligned(interp,
PARROT_IMAGEIO(info)->buffer, len);
- SET_VISIT_CURSOR(info, (char *)Buffer_bufstart(PARROT_IMAGEIO(info)->buffer));
+
+ SET_VISIT_CURSOR(info,
+ (char *)Buffer_bufstart(PARROT_IMAGEIO(info)->buffer));
}
@@ -205,8 +208,10 @@
/* grow by factor 1.5 or such */
if (need_free <= 16) {
size_t new_size = (size_t) (Buffer_buflen(buf) * 1.5);
+
if (new_size < Buffer_buflen(buf) - need_free + 512)
new_size = Buffer_buflen(buf) - need_free + 512;
+
Parrot_gc_reallocate_buffer_storage(interp, buf, new_size);
PARROT_ASSERT(Buffer_buflen(buf) - used - len >= 15);
}
@@ -214,9 +219,9 @@
#ifndef DISABLE_GC_DEBUG
Parrot_gc_compact_memory_pool(interp);
#endif
-
}
+
PARROT_WARN_UNUSED_RESULT
PARROT_INLINE
static INTVAL
@@ -227,6 +232,7 @@
return PARROT_IMAGEIO(io)->pos < PARROT_IMAGEIO(io)->input_length;
}
+
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
PARROT_INLINE
@@ -238,6 +244,7 @@
return VTABLE_get_pmc_keyed_int(interp, PARROT_IMAGEIO(io)->todo, id - 1);
}
+
PARROT_WARN_UNUSED_RESULT
PARROT_CAN_RETURN_NULL
PARROT_INLINE
@@ -260,13 +267,15 @@
break;
case enum_PackID_normal:
{
- PMC * const todo = PARROT_IMAGEIO(info)->todo;
+ PMC * const todo = PARROT_IMAGEIO(info)->todo;
const INTVAL type = VTABLE_shift_integer(interp, info);
- PARROT_ASSERT(id - 1 == VTABLE_elements(interp, PARROT_IMAGEIO(info)->todo));
+ PARROT_ASSERT(id - 1
+ == VTABLE_elements(interp, PARROT_IMAGEIO(info)->todo));
if (type <= 0 || type > interp->n_vtable_max)
- Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown PMC type to thaw %d", type);
+ Parrot_ex_throw_from_c_args(interp, NULL, 1,
+ "Unknown PMC type to thaw %d", type);
/* workaround to keep ParrotInterpreter PBC hack working */
if (type == enum_class_ParrotInterpreter)
@@ -278,13 +287,15 @@
}
break;
default:
- Parrot_ex_throw_from_c_args(interp, NULL, 1, "Unknown PMC id args thaw %d", packid_flags);
+ Parrot_ex_throw_from_c_args(interp, NULL, 1,
+ "Unknown PMC id args thaw %d", packid_flags);
break;
}
return pmc;
}
+
static void
visit_todo_list_freeze(PARROT_INTERP, ARGIN_NULLOK(PMC* pmc), ARGMOD(PMC* info))
{
@@ -300,10 +311,12 @@
packid_type = enum_PackID_seen;
}
else {
- Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
+ Hash * const hash = (Hash *)VTABLE_get_pointer(interp,
+ PARROT_IMAGEIO(info)->seen);
HashBucket * const b = parrot_hash_get_bucket(interp, hash, pmc);
+
if (b) {
- id = (UINTVAL) b->value;
+ id = (UINTVAL)b->value;
packid_type = enum_PackID_seen;
}
else {
@@ -316,7 +329,8 @@
VTABLE_push_integer(interp, info, PackID_new(id, packid_type));
if (packid_type == enum_PackID_normal) {
- Hash * const hash = (Hash *)VTABLE_get_pointer(interp, PARROT_IMAGEIO(info)->seen);
+ Hash * const hash = (Hash *)VTABLE_get_pointer(interp,
+ PARROT_IMAGEIO(info)->seen);
PARROT_ASSERT(pmc);
@@ -325,16 +339,19 @@
PObj_flag_CLEAR(private1, info);
VTABLE_push_integer(interp, info,
- PObj_is_object_TEST(pmc) ? (INTVAL) enum_class_Object : pmc->vtable->base_type);
+ PObj_is_object_TEST(pmc)
+ ? (INTVAL) enum_class_Object
+ : pmc->vtable->base_type);
parrot_hash_put(interp, hash, pmc, (void *)id);
VTABLE_push_pmc(interp, PARROT_IMAGEIO(info)->todo, pmc);
}
}
+
pmclass ImageIO auto_attrs {
ATTR Buffer *buffer; /* buffer to store the image */
- ATTR size_t pos; /* current read/write position in buffer */
+ ATTR size_t pos; /* current read/write buf position */
ATTR size_t input_length;
ATTR INTVAL what;
ATTR PMC *seen; /* seen hash */
@@ -363,15 +380,17 @@
*/
VTABLE void init() {
- PARROT_IMAGEIO(SELF)->todo = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
- PARROT_IMAGEIO(SELF)->seen = PMCNULL;
- PARROT_IMAGEIO(SELF)->pf = PackFile_new(INTERP, 0);
+ PARROT_IMAGEIO(SELF)->seen = PMCNULL;
+ PARROT_IMAGEIO(SELF)->pf = PackFile_new(INTERP, 0);
+ PARROT_IMAGEIO(SELF)->todo =
+ Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
PObj_flag_CLEAR(private1, SELF);
PObj_custom_mark_destroy_SETALL(SELF);
}
+
/*
=item C<void init_pmc(PMC *pmc)>
@@ -382,13 +401,13 @@
*/
VTABLE void init_pmc(PMC *pmc) {
- PARROT_IMAGEIO(SELF)->buffer = NULL;
- PARROT_IMAGEIO(SELF)->todo = Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
PARROT_IMAGEIO(SELF)->seen = PMCNULL;
- PARROT_IMAGEIO(SELF)->id = 0;
PARROT_IMAGEIO(SELF)->pf = PackFile_new(INTERP, 0);
+ PARROT_IMAGEIO(SELF)->pf_ct =
+ (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pmc);
+ PARROT_IMAGEIO(SELF)->todo =
+ Parrot_pmc_new(INTERP, enum_class_ResizablePMCArray);
- PARROT_IMAGEIO(SELF)->pf_ct = (PackFile_ConstTable *)VTABLE_get_pointer(INTERP, pmc);
PObj_flag_SET(private1, SELF);
PObj_custom_mark_destroy_SETALL(SELF);
@@ -409,6 +428,7 @@
PARROT_IMAGEIO(SELF)->pf = NULL;
}
+
/*
=item C<void mark()>
@@ -426,6 +446,7 @@
Parrot_gc_mark_PMC_alive(INTERP, PARROT_IMAGEIO(SELF)->seen);
}
+
/*
=item C<STRING *get_string()>
@@ -442,6 +463,7 @@
PARROT_IMAGEIO(SELF)->pos);
}
+
/*
=item C<VTABLE PMC *get_pmc()>
@@ -453,9 +475,11 @@
*/
VTABLE PMC *get_pmc() {
- return VTABLE_get_pmc_keyed_int(INTERP, (PARROT_IMAGEIO(SELF))->todo, 0);
+ return VTABLE_get_pmc_keyed_int(INTERP,
+ (PARROT_IMAGEIO(SELF))->todo, 0);
}
+
/*
=item C<VTABLE PMC *get_iter()>
@@ -474,7 +498,7 @@
=item C<VTABLE INTVAL get_integer()>
-Returns the flags describing the visit action
+Returns the flags describing the visit action.
=cut
@@ -484,6 +508,7 @@
return PARROT_IMAGEIO(SELF)->what;
}
+
/*
=item C<VTABLE void push_integer(INTVAL v)>
@@ -495,9 +520,10 @@
*/
VTABLE void push_integer(INTVAL v) {
- const size_t len = PF_size_integer() * sizeof (opcode_t);
+ const const size_t len = PF_size_integer() * sizeof (opcode_t);
ensure_buffer_size(INTERP, SELF, len);
- SET_VISIT_CURSOR(SELF, (char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
+ SET_VISIT_CURSOR(SELF,
+ (char *)PF_store_integer(GET_VISIT_CURSOR(SELF), v));
}
@@ -511,11 +537,11 @@
*/
- VTABLE void push_float(FLOATVAL v)
- {
- size_t len = PF_size_number() * sizeof (opcode_t);
+ VTABLE void push_float(FLOATVAL v) {
+ const size_t len = PF_size_number() * sizeof (opcode_t);
ensure_buffer_size(INTERP, SELF, len);
- SET_VISIT_CURSOR(SELF, (char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
+ SET_VISIT_CURSOR(SELF,
+ (char *)PF_store_number(GET_VISIT_CURSOR(SELF), &v));
}
@@ -532,33 +558,35 @@
VTABLE void push_string(STRING *v) {
if (PObj_flag_TEST(private1, SELF)) {
/* store a reference to constant table entry of string */
- PMC *v_pmc = key_new_string(interp, v);
+ PMC *v_pmc = key_new_string(interp, v);
PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
- int idx = PackFile_ConstTable_rlookup(INTERP, table, v_pmc, PFC_STRING);
+ int idx =
+ PackFile_ConstTable_rlookup(INTERP, table, v_pmc, PFC_STRING);
if (idx >= 0) {
STATICSELF.push_integer(idx);
return;
}
- /* XXX
- * handle cases where the PMC has changed after Parrot_freeze_strings was called
- * eg: :immediate subs
- */
+ /* XXX handle cases where the PMC has changed after
+ * Parrot_freeze_strings was called eg: :immediate subs */
STATICSELF.push_integer(-1);
+
/* TODO
* should really be:
- * PANIC(INTERP, "string not previously in constant table when freezing to packfile");
- */
+ * PANIC(INTERP, "string not previously in constant table "
+ * "when freezing to packfile"); */
}
{
const size_t len = PF_size_string(v) * sizeof (opcode_t);
ensure_buffer_size(INTERP, SELF, len);
- SET_VISIT_CURSOR(SELF, (char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
+ SET_VISIT_CURSOR(SELF,
+ (char *)PF_store_string(GET_VISIT_CURSOR(SELF), v));
}
}
+
/*
=item C<VTABLE void push_pmc(PMC *v)>
@@ -626,7 +654,7 @@
VTABLE FLOATVAL shift_float() {
const opcode_t *pos = GET_VISIT_CURSOR(SELF);
- FLOATVAL f = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, &pos);
+ FLOATVAL f = PF_fetch_number(PARROT_IMAGEIO(SELF)->pf, &pos);
SET_VISIT_CURSOR(SELF, (char *)pos);
BYTECODE_SHIFT_OK(SELF);
return f;
@@ -645,10 +673,11 @@
VTABLE STRING *shift_string() {
if (PObj_flag_TEST(private1, SELF)) {
- PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
- INTVAL i = STATICSELF.shift_integer();
+ const INTVAL i = STATICSELF.shift_integer();
if (i >= 0) {
+ PackFile_ConstTable *table = PARROT_IMAGEIO(SELF)->pf_ct;
+
if (!table->constants[i].type)
Parrot_ex_throw_from_c_args(interp, NULL,
EXCEPTION_MALFORMED_PACKFILE,
@@ -664,13 +693,15 @@
{
const opcode_t *pos = GET_VISIT_CURSOR(SELF);
- STRING *s = PF_fetch_string(INTERP, PARROT_IMAGEIO(SELF)->pf, &pos);
+ STRING *s = PF_fetch_string(INTERP,
+ PARROT_IMAGEIO(SELF)->pf, &pos);
SET_VISIT_CURSOR(SELF, (char *)pos);
BYTECODE_SHIFT_OK(SELF);
return s;
}
}
+
/*
=item C<static PMC *shift_pmc()>
@@ -687,9 +718,11 @@
VTABLE void set_pmc(PMC *p)
{
- const UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+ const UINTVAL header_length =
+ GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
+
+ PARROT_IMAGEIO(SELF)->what = VISIT_FREEZE_NORMAL;
- PARROT_IMAGEIO(SELF)->what = VISIT_FREEZE_NORMAL;
create_buffer(INTERP, p, SELF);
ensure_buffer_size(INTERP, SELF, header_length);
mem_sys_memcopy(GET_VISIT_CURSOR(SELF),
@@ -706,15 +739,17 @@
VTABLE void set_string_native(STRING *image) {
PMC *unused;
- const UINTVAL header_length = GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
- int unpacked_length;
+ int unpacked_length;
+ const UINTVAL header_length =
+ GROW_TO_16_BYTE_BOUNDARY(PACKFILE_HEADER_BYTES);
PARROT_IMAGEIO(SELF)->what = VISIT_THAW_NORMAL;
PARROT_IMAGEIO(SELF)->buffer = (Buffer *)image;
PARROT_ASSERT(image->_bufstart == image->strstart);
- SET_VISIT_CURSOR(SELF, (char *)Buffer_bufstart(PARROT_IMAGEIO(SELF)->buffer));
+ SET_VISIT_CURSOR(SELF,
+ (char *)Buffer_bufstart(PARROT_IMAGEIO(SELF)->buffer));
PARROT_IMAGEIO(SELF)->input_length = image->strlen;
PARROT_IMAGEIO(SELF)->pf->options |= PFOPT_PMC_FREEZE_ONLY;
@@ -736,6 +771,7 @@
Parrot_visit_loop_thawfinish(INTERP, SELF);
}
+
/*
=back
More information about the parrot-commits
mailing list