+}
+void
+insert_set_olink
+( uint64_t ref_id
+)
+{
+ struct set* curr_setp;
+ struct cdat* curr_cdatp;
+ struct link* curr_linkp;
+
+ curr_setp = curr_set();
+ curr_cdatp = curr_cdat();
+ curr_linkp = alloc_link();
+
+ curr_setp->cdat_idx = curr_cdatp->idx;
+ curr_setp->ref_id = ref_id; /* Will be resolved to offset
+ when link is processed */
+ curr_linkp->type = 1;
+ curr_linkp->link_t.olink.ref_id = ref_id;
+ curr_linkp->cdat_idx = curr_cdatp->idx;
+ curr_linkp->set_idx = curr_cdatp->num_sets++;
+ curr_linkp->ele_idx = -1;
+
+}
+
+void
+insert_set_vlink
+( uint64_t ref_id,
+ char* anim_name
+)
+{
+ struct cdat* curr_cdatp;
+ struct link* curr_linkp;
+
+ curr_cdatp = curr_cdat();
+ curr_linkp = alloc_link();
+
+ /* Insert vlink into link_stack so that it gets processed at
+ output time */
+ curr_linkp->type = 2;
+ curr_linkp->link_t.vlink.ref_id = ref_id;
+ curr_linkp->cdat_idx = curr_cdatp->idx;
+ curr_linkp->set_idx = curr_cdatp->num_sets;
+ curr_linkp->ele_idx = -1;
+ memmove(curr_linkp->link_t.vlink.anim_name, anim_name, 32);
+
+}
+
+/* Svlinks dont have animation names */
+void
+insert_set_svlink
+( uint64_t ref_id
+)
+{
+ struct cdat* curr_cdatp;
+ struct link* curr_linkp;
+
+ curr_cdatp = curr_cdat();
+ curr_linkp = alloc_link();
+
+ /* Insert svlink into link_stack so that it gets processed at
+ output time */
+ curr_linkp->type = 3;
+ curr_linkp->cdat_idx = curr_cdatp->idx;
+ curr_linkp->set_idx = curr_cdatp->num_sets;
+ curr_linkp->ele_idx = -1;
+ curr_linkp->link_t.svlink.ref_id = ref_id;
+
+}
+
+/* At the point of reducing to a set, most of the
+ sets odat information has already been populated
+ during the reduction of its right hand side
+ non terminals (hitbox, root, quad_list). */
+void
+insert_set
+()
+{ uint64_t ref_id;
+ struct odat* curr_odatp;
+ struct cdat* curr_cdatp;
+ struct set* curr_setp;
+ struct ref* prev_refp;
+ struct ref* curr_refp;
+
+ curr_odatp = curr_set_odatp; //allocated at insert_set_label, preserved in global space
+ curr_cdatp = curr_cdat();
+ curr_setp = curr_set();
+ prev_refp = prev_ref();
+ curr_refp = alloc_ref();
+
+
+ curr_setp->cdat_idx = curr_cdatp->idx; //does a set need its class idx?
+ memmove(curr_setp->name, curr_odatp->name, 32);
+ curr_cdatp->num_sets++;
+
+ curr_odatp->cdat_idx = curr_cdatp->idx;
+ curr_odatp->refp = curr_refp;
+
+ ref_id = curr_setp->ref_id; // ref_id set by insert_set_label(name, ref_id)
+
+ if(ref_id == -1) /* user did not define a ref_id */
+ { ref_id = ss_ref_id;
+ ss_ref_id++;