--- classes/parrotobject.pmc.orig       2003-12-06 01:00:29.000000000 +0100
+++ classes/parrotobject.pmc    2004-01-10 21:09:08.000000000 +0100
@@ -87,7 +87,12 @@
     }
 
     INTVAL get_integer_keyed (PMC* attr) {
-       return SELF.get_integer_keyed_str(key_string(interpreter, attr));
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          return SELF.get_integer_keyed_int(key_integer(interpreter, attr));
+        } else {
+          return SELF.get_integer_keyed_str(key_string(interpreter, attr));
+        }
     }
 
     void set_integer_keyed_int (INTVAL idx, INTVAL value) {
@@ -107,6 +112,175 @@
     }
 
     void set_integer_keyed (PMC* attr, INTVAL value) {
-       SELF.set_integer_keyed_str(key_string(interpreter, attr), value);
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          SELF.set_integer_keyed_int(key_integer(interpreter, attr), value);
+        } else {
+          SELF.set_integer_keyed_str(key_string(interpreter, attr), value);
+        }
     }
+
+
+    FLOATVAL get_number_keyed_int (INTVAL idx) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       return VTABLE_get_number_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val);
+    }
+
+    FLOATVAL get_number_keyed_str (STRING* attr) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       return SELF.get_number_keyed_int(idx);
+    }
+
+    FLOATVAL get_number_keyed (PMC* attr) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          return SELF.get_number_keyed_int(key_integer(interpreter, attr));
+        } else {
+          return SELF.get_number_keyed_str(key_string(interpreter, attr));
+        }
+
+    }
+
+    void set_number_keyed_int (INTVAL idx, FLOATVAL value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       VTABLE_set_number_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val, value);
+    }
+
+    void set_number_keyed_str (STRING* attr, FLOATVAL value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       SELF.set_number_keyed_int(idx, value);
+    }
+
+    void set_number_keyed (PMC* attr, FLOATVAL value) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          SELF.set_number_keyed_int(key_integer(interpreter, attr), value);
+        } else {
+          SELF.set_number_keyed_str(key_string(interpreter, attr), value);
+        }
+
+    }
+
+
+
+
+
+
+    STRING* get_string_keyed_int (INTVAL idx) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       return VTABLE_get_string_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val);
+    }
+
+    STRING* get_string_keyed_str (STRING* attr) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       return SELF.get_string_keyed_int(idx);
+    }
+
+    STRING* get_string_keyed (PMC* attr) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          return SELF.get_string_keyed_int(key_integer(interpreter, attr));
+        } else {
+          return SELF.get_string_keyed_str(key_string(interpreter, attr));
+        }
+    }
+
+    void set_string_keyed_int (INTVAL idx, STRING* value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       VTABLE_set_string_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val, value);
+    }
+
+    void set_string_keyed_str (STRING* attr, STRING* value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       SELF.set_string_keyed_int(idx, value);
+    }
+
+    void set_string_keyed (PMC* attr, STRING* value) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          SELF.set_string_keyed_int(key_integer(interpreter, attr), value);
+        } else {
+          SELF.set_string_keyed_str(key_string(interpreter, attr), value);
+        }
+    }
+
+
+
+
+    PMC* get_pmc_keyed_int (INTVAL idx) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       return VTABLE_get_pmc_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val);
+    }
+
+    PMC* get_pmc_keyed_str (STRING* attr) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       return SELF.get_pmc_keyed_int(idx);
+    }
+
+    PMC* get_pmc_keyed (PMC* attr) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          return SELF.get_pmc_keyed_int(key_integer(interpreter, attr));
+        } else {
+          return SELF.get_pmc_keyed_str(key_string(interpreter, attr));
+        }
+
+    }
+
+    void set_pmc_keyed_int (INTVAL idx, PMC* value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       VTABLE_set_pmc_keyed_int(interpreter, data_array,
+                       idx + SELF->cache.int_val, value);
+    }
+
+    void set_pmc_keyed_str (STRING* attr, PMC* value) {
+       PMC* data_array = (PMC*) PMC_data(SELF);
+       PMC *class = VTABLE_get_pmc_keyed_int(interpreter, data_array,
+               POD_CLASS);
+       INTVAL idx = VTABLE_get_integer_keyed_str(interpreter, class, attr);
+       if (idx < 0)
+           internal_exception(1, "No such attribute");
+       SELF.set_pmc_keyed_int(idx, value);
+    }
+
+    void set_pmc_keyed (PMC* attr, PMC* value) {
+        int flag = PObj_get_FLAGS(attr) & KEY_type_FLAGS;
+        if ( flag & KEY_integer_FLAG) {
+          SELF.set_pmc_keyed_int(key_integer(interpreter, attr), value);
+        } else {
+          SELF.set_pmc_keyed_str(key_string(interpreter, attr), value);
+        }
+    }
+
+
 }

Reply via email to