+#ifdef CY_OBJECTIVEC
+const char *Meta::Encode(CYPool &pool) const {
+ return "#";
+}
+
+const char *Selector::Encode(CYPool &pool) const {
+ return ":";
+}
+#endif
+
+const char *Bits::Encode(CYPool &pool) const {
+ return pool.strcat("b", pool.itoa(size), NULL);
+}
+
+const char *Pointer::Encode(CYPool &pool) const {
+ return pool.strcat("^", type.Encode(pool), NULL);
+}
+
+const char *Array::Encode(CYPool &pool) const {
+ return pool.strcat("[", pool.itoa(size), type.Encode(pool), "]", NULL);
+}
+
+#ifdef CY_OBJECTIVEC
+const char *Object::Encode(CYPool &pool) const {
+ return name == NULL ? "@" : pool.strcat("@\"", name, "\"", NULL);
+}
+#endif
+
+const char *Aggregate::Encode(CYPool &pool) const {
+ return pool.strcat(overlap ? "(" : "{", name == NULL ? "?" : name, "=", Unparse(pool, &signature), overlap ? ")" : "}", NULL);
+}
+
+const char *Function::Encode(CYPool &pool) const {
+ return "?";
+}
+
+#ifdef CY_OBJECTIVEC
+const char *Block::Encode(CYPool &pool) const {
+ return "@?";
+}
+#endif