Index: doc/papers/general/Paper.tex
===================================================================
--- doc/papers/general/Paper.tex	(revision 29db7239b8192d870e72ad96c020f2db4b40c2bc)
+++ doc/papers/general/Paper.tex	(revision e59f0bf1e2bd92c1edd775285840d853f5900983)
@@ -2627,6 +2627,6 @@
 									& \CT{C}	& \CT{\CFA}	& \CT{\CC}	& \CT{\CCV}		\\ \hline
 maximum memory usage (MB)			& 10,001	& 2,502		& 2,503		& 11,253		\\
-source code size (lines)			& 187		& 186		& 133		& 303			\\
-redundant type annotations (lines)	& 25		& 0			& 2			& 16			\\
+source code size (lines)			& 197		& 186		& 133		& 303			\\
+redundant type annotations (lines)	& 27		& 0			& 2			& 16			\\
 binary size (KB)					& 14		& 257		& 14		& 37			\\
 \end{tabular}
@@ -2796,5 +2796,5 @@
 \lstset{basicstyle=\linespread{0.9}\sf\small}
 
-Throughout, @/***/@ designates a counted redundant type annotation.
+Throughout, @/***/@ designates a counted redundant type annotation; code reformatted for brevity.
 
 \smallskip\noindent
@@ -2806,4 +2806,13 @@
 };
 struct stack { struct stack_node* head; };
+void clear_stack( struct stack * s, void (*free_el)( void * ) ) {
+	for ( struct stack_node * next = s->head; next; ) {
+		struct stack_node * crnt = next;
+		next = crnt->next;
+		free_el( crnt->value );
+		free( crnt );
+	}
+	s->head = NULL;
+}
 struct stack new_stack() { return (struct stack){ NULL }; /***/ }
 void copy_stack( struct stack * s, const struct stack * t, void * (*copy)( const void * ) ) {
@@ -2816,4 +2825,11 @@
 	*crnt = NULL;
 }
+struct stack * assign_stack( struct stack * s, const struct stack * t, 
+		void * (*copy_el)( const void * ), void (*free_el)( void * ) ) {
+	if ( s->head == t->head ) return s;
+	clear_stack( s, free_el ); /***/
+	copy_stack( s, t, copy_el ); /***/
+	return s;
+}
 _Bool stack_empty( const struct stack * s ) { return s->head == NULL; }
 void push_stack( struct stack * s, void * value ) {
@@ -2828,13 +2844,4 @@
 	free( n );
 	return x;
-}
-void clear_stack( struct stack * s, void (*free_el)( void * ) ) {
-	for ( struct stack_node * next = s->head; next; ) {
-		struct stack_node * crnt = next;
-		next = crnt->next;
-		free_el( crnt->value );
-		free( crnt );
-	}
-	s->head = NULL;
 }
 \end{cfa}
@@ -2848,4 +2855,13 @@
 };
 forall( otype T ) struct stack { stack_node(T) * head; };
+forall( otype T ) void clear( stack(T) & s ) with( s ) {
+	for ( stack_node(T) * next = head; next; ) {
+		stack_node(T) * crnt = next;
+		next = crnt->next;
+		^(*crnt){};
+		free(crnt);
+	}
+	head = 0;
+}
 forall( otype T ) void ?{}( stack(T) & s ) { (s.head){ 0 }; }
 forall( otype T ) void ?{}( stack(T) & s, stack(T) t ) {
@@ -2878,13 +2894,4 @@
 	free( n );
 	return v;
-}
-forall( otype T ) void clear( stack(T) & s ) with( s ) {
-	for ( stack_node(T) * next = head; next; ) {
-		stack_node(T) * crnt = next;
-		next = crnt->next;
-		^(*crnt){};
-		free(crnt);
-	}
-	head = 0;
 }
 \end{cfa}
@@ -2900,4 +2907,12 @@
 	};
 	node * head;
+	void clear() {
+		for ( node * next = head; next; ) {
+			node * crnt = next;
+			next = crnt->next;
+			delete crnt;
+		}
+		head = nullptr;
+	}
 	void copy( const stack<T> & o) {
 		node ** crnt = &head;
@@ -2933,12 +2948,4 @@
 		return x;
 	}
-	void clear() {
-		for ( node * next = head; next; ) {
-			node * crnt = next;
-			next = crnt->next;
-			delete crnt;
-		}
-		head = nullptr;
-	}
 };
 \end{cfa}
@@ -2954,4 +2961,12 @@
 	};
 	node* head;
+	void clear() {
+		for ( node * next = head; next; ) {
+			node * crnt = next;
+			next = crnt->next;
+			delete crnt;
+		}
+		head = nullptr;
+	}
 	void copy( const stack & o ) {
 		node ** crnt = &head;
@@ -2987,12 +3002,4 @@
 		return x;
 	}
-	void clear() {
-		for ( node * next = head; next; ) {
-			node * crnt = next;
-			next = crnt->next;
-			delete crnt;
-		}
-		head = nullptr;
-	}
 };
 \end{cfa}
Index: doc/papers/general/evaluation/c-stack.c
===================================================================
--- doc/papers/general/evaluation/c-stack.c	(revision 29db7239b8192d870e72ad96c020f2db4b40c2bc)
+++ doc/papers/general/evaluation/c-stack.c	(revision e59f0bf1e2bd92c1edd775285840d853f5900983)
@@ -17,4 +17,12 @@
 	}
 	*crnt = NULL;
+}
+
+struct stack* assign_stack(struct stack* s, const struct stack* t, 
+		void* (*copy_el)(const void*), void (*free_el)(void*)) {
+	if ( s->head == t->head ) return s;
+	clear_stack( s, free_el ); /***/
+	copy_stack( s, t, copy_el ); /***/
+	return s;
 }
 
Index: doc/papers/general/evaluation/c-stack.h
===================================================================
--- doc/papers/general/evaluation/c-stack.h	(revision 29db7239b8192d870e72ad96c020f2db4b40c2bc)
+++ doc/papers/general/evaluation/c-stack.h	(revision e59f0bf1e2bd92c1edd775285840d853f5900983)
@@ -8,4 +8,6 @@
 struct stack new_stack();
 void copy_stack(struct stack* dst, const struct stack* src, void* (*copy)(const void*));
+struct stack* assign_stack(struct stack* dst, const struct stack* src, 
+	void* (*copy_el)(const void*), void (*free_el)(void*));
 void clear_stack(struct stack* s, void (*free_el)(void*));
 
