+SCM
+Object_key::dump () const
+{
+ return scm_cons (scm_from_int (get_type ()),
+ as_scheme ());
+}
+
+SCM
+Object_key::as_scheme () const
+{
+ return SCM_EOL;
+}
+
+Object_key *
+Object_key::from_scheme (SCM)
+{
+ return new Object_key ();
+}
+
+struct Object_dumper_table_entry
+{
+ Object_key_type type_;
+ Object_key *(*ctor_) (SCM);
+};
+
+static Object_dumper_table_entry undumpers[]
+= {
+ {BASE_KEY, Object_key::from_scheme},
+ {COPIED_KEY, Copied_key::from_scheme},
+ {GENERAL_KEY, Lilypond_general_key::from_scheme},
+ {GROB_KEY, Lilypond_grob_key::from_scheme},
+ {CONTEXT_KEY, Lilypond_context_key::from_scheme},
+ {KEY_COUNT, 0},
+};
+
+Object_key *
+Object_key::undump (SCM scm_key)
+{
+ int t = scm_to_int (scm_car (scm_key));
+ assert (t == undumpers[t].type_);
+ return (undumpers[t].ctor_) (scm_cdr (scm_key));
+}
+