# New Ticket Created by Leopold Toetsch # Please include the string: [perl #17524] # in the subject line of all future correspondence about this issue. # <URL: http://rt.perl.org/rt2/Ticket/Display.html?id=17524 >
This patch hides some internals of keys by using the appropriate key functions in packfile.c. Packfile shouldn't know keys internals. Please apply, TIA leo PS If accepted, a similar patch for packout.c will follow. -- attachment 1 ------------------------------------------------------ url: http://rt.perl.org/rt2/attach/38314/31186/1338d1/packfile-keys.patch
--- parrot/packfile.c Tue Aug 20 07:06:07 2002 +++ parrot-leo/packfile.c Mon Sep 23 15:52:06 2002 @@ -980,43 +980,38 @@ while (components-- > 0) { if (tail) { - tail->data = pmc_new(interpreter, enum_class_Key); + tail->data = key_new(interpreter); tail = tail->data; } else { - head = tail = pmc_new(interpreter, enum_class_Key); + head = tail = key_new(interpreter); } tail->flags |= PMC_constant_FLAG; switch (*cursor++) { case PARROT_ARG_IC: - tail->flags |= KEY_integer_FLAG; - tail->cache.int_val = *cursor++; + key_set_integer(interpreter, tail, *cursor++); break; case PARROT_ARG_NC: - tail->flags |= KEY_number_FLAG; - tail->cache.num_val = pf->const_table->constants[*cursor++]->number; + key_set_number(interpreter, tail, + pf->const_table->constants[*cursor++]->number); break; case PARROT_ARG_SC: - tail->flags |= KEY_string_FLAG; - tail->cache.string_val = pf->const_table->constants[*cursor++]->string; + key_set_string(interpreter, tail, + pf->const_table->constants[*cursor++]->string); break; case PARROT_ARG_I: - tail->flags |= KEY_integer_FLAG|KEY_register_FLAG; - tail->cache.int_val = *cursor++; + key_set_register(interpreter, tail, *cursor++, KEY_integer_FLAG); break; case PARROT_ARG_N: - tail->flags |= KEY_number_FLAG|KEY_register_FLAG; - tail->cache.int_val = *cursor++; + key_set_register(interpreter, tail, *cursor++, KEY_number_FLAG); break; case PARROT_ARG_S: - tail->flags |= KEY_string_FLAG|KEY_register_FLAG; - tail->cache.int_val = *cursor++; + key_set_register(interpreter, tail, *cursor++, KEY_string_FLAG); break; case PARROT_ARG_P: - tail->flags |= KEY_pmc_FLAG|KEY_register_FLAG; - tail->cache.int_val = *cursor++; + key_set_register(interpreter, tail, *cursor++, KEY_pmc_FLAG); break; default: return 0; --- parrot/key.c Sat Aug 24 09:24:16 2002 +++ parrot-leo/key.c Mon Sep 23 15:47:59 2002 @@ -76,6 +76,17 @@ return; } +void +key_set_register(struct Parrot_Interp *interpreter, PMC *key, INTVAL value, + INTVAL flag) +{ + key->flags &= ~KEY_type_FLAGS; + key->flags |= KEY_register_FLAG | flag; + key->cache.int_val = value; + + return; +} + void key_set_number(struct Parrot_Interp *interpreter, PMC *key, FLOATVAL value) --- parrot/include/parrot/key.h Tue Aug 20 07:06:08 2002 +++ parrot-leo/include/parrot/key.h Mon Sep 23 15:48:47 2002 @@ -37,6 +37,8 @@ void key_set_integer(struct Parrot_Interp *interpreter, PMC *key, INTVAL value); void key_set_number(struct Parrot_Interp *interpreter, PMC *key, FLOATVAL value); +void key_set_register(struct Parrot_Interp *interpreter, PMC *key, INTVAL value, + INTVAL flag); void key_set_string(struct Parrot_Interp *interpreter, PMC *key, STRING *value); void key_set_pmc(struct Parrot_Interp *interpreter, PMC *key, PMC *value);