Index: libcfa/src/bits/containers.hfa
===================================================================
--- libcfa/src/bits/containers.hfa	(revision 7006ba58edfad29340faefc4f3cd491ea4ff94d8)
+++ libcfa/src/bits/containers.hfa	(revision 2316525c0ab1029715c0c8bc2f6fe53ca84525fe)
@@ -10,6 +10,6 @@
 // Created On       : Tue Oct 31 16:38:50 2017
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jun 26 08:52:20 2019
-// Update Count     : 4
+// Last Modified On : Wed Jan 15 07:42:35 2020
+// Update Count     : 28
 
 #pragma once
@@ -44,20 +44,20 @@
 
 	forall(dtype T | sized(T))
-	static inline T& ?[?]( __small_array(T) & this, __lock_size_t idx) {
+	static inline T & ?[?]( __small_array(T) & this, __lock_size_t idx ) {
 		return ((typeof(this.data))this.data)[idx];
 	}
 
 	forall(dtype T | sized(T))
-	static inline T& ?[?]( const __small_array(T) & this, __lock_size_t idx) {
+	static inline T & ?[?]( const __small_array(T) & this, __lock_size_t idx ) {
 		return ((typeof(this.data))this.data)[idx];
 	}
 
+	forall(dtype T)
+	static inline T * begin( const __small_array(T) & this ) {
+		return ((typeof(this.data))this.data);
+	}
+
 	forall(dtype T | sized(T))
-	static inline T* begin( const __small_array(T) & this ) {
-		return ((typeof(this.data))this.data);
-	}
-
-	forall(dtype T | sized(T))
-	static inline T* end( const __small_array(T) & this ) {
+	static inline T * end( const __small_array(T) & this ) {
 		return ((typeof(this.data))this.data) + this.size;
 	}
@@ -70,5 +70,5 @@
 #ifdef __cforall
 	trait is_node(dtype T) {
-		T*& get_next( T& );
+		T *& get_next( T & );
 	};
 #endif
@@ -97,27 +97,26 @@
 	forall(dtype T)
 	static inline void ?{}( __stack(T) & this ) {
-		(this.top){ NULL };
-	}
-
-	forall(dtype T | is_node(T) | sized(T))
-	static inline void push( __stack(T) & this, T * val ) {
-		verify( !get_next( *val ) );
-		get_next( *val ) = this.top;
-		this.top = val;
-	}
-
-	forall(dtype T | is_node(T) | sized(T))
-	static inline T * pop( __stack(T) & this ) {
-		T * top = this.top;
-		if( top ) {
-			this.top = get_next( *top );
-			get_next( *top ) = NULL;
-		}
-		return top;
-	}
-
-	forall(dtype T | is_node(T))
-	static inline int ?!=?( const __stack(T) & this, __attribute__((unused)) zero_t zero ) {
-		return this.top != 0;
+		(this.top){ 0p };
+	}
+
+	static inline forall( dtype T | is_node(T) ) {
+		void push( __stack(T) & this, T * val ) {
+			verify( !get_next( *val ) );
+			get_next( *val ) = this.top;
+			this.top = val;
+		}
+
+		T * pop( __stack(T) & this ) {
+			T * top = this.top;
+			if( top ) {
+				this.top = get_next( *top );
+				get_next( *top ) = 0p;
+			}
+			return top;
+		}
+
+		int ?!=?( const __stack(T) & this, __attribute__((unused)) zero_t zero ) {
+			return this.top != 0;
+		}
 	}
 #endif
@@ -145,52 +144,48 @@
 
 #ifdef __cforall
-
-	forall(dtype T)
-	static inline void ?{}( __queue(T) & this ) with( this ) {
-		head{ NULL };
-		tail{ &head };
-	}
-
-	forall(dtype T | is_node(T) | sized(T))
-	static inline void append( __queue(T) & this, T * val ) with( this ) {
-		verify(tail != NULL);
-		*tail = val;
-		tail = &get_next( *val );
-	}
-
-	forall(dtype T | is_node(T) | sized(T))
-	static inline T * pop_head( __queue(T) & this ) {
-		T * head = this.head;
-		if( head ) {
-			this.head = get_next( *head );
-			if( !get_next( *head ) ) {
-				this.tail = &this.head;
-			}
-			get_next( *head ) = NULL;
-		}
-		return head;
-	}
-
-	forall(dtype T | is_node(T) | sized(T))
-	static inline T * remove( __queue(T) & this, T ** it ) with( this ) {
-		T * val = *it;
-		verify( val );
-
-		(*it) = get_next( *val );
-
-		if( tail == &get_next( *val ) ) {
-			tail = it;
-		}
-
-		get_next( *val ) = NULL;
-
-		verify( (head == NULL) == (&head == tail) );
-		verify( *tail == NULL );
-		return val;
-	}
-
-	forall(dtype T | is_node(T))
-	static inline int ?!=?( const __queue(T) & this, __attribute__((unused)) zero_t zero ) {
-		return this.head != 0;
+	static inline forall( dtype T | is_node(T) ) {
+		void ?{}( __queue(T) & this ) with( this ) {
+			head{ 0p };
+			tail{ &head };
+		}
+
+		void append( __queue(T) & this, T * val ) with( this ) {
+			verify(tail != 0p);
+			*tail = val;
+			tail = &get_next( *val );
+		}
+
+		T * pop_head( __queue(T) & this ) {
+			T * head = this.head;
+			if( head ) {
+				this.head = get_next( *head );
+				if( !get_next( *head ) ) {
+					this.tail = &this.head;
+				}
+				get_next( *head ) = 0p;
+			}
+			return head;
+		}
+
+		T * remove( __queue(T) & this, T ** it ) with( this ) {
+			T * val = *it;
+			verify( val );
+
+			(*it) = get_next( *val );
+
+			if( tail == &get_next( *val ) ) {
+				tail = it;
+			}
+
+			get_next( *val ) = 0p;
+
+			verify( (head == 0p) == (&head == tail) );
+			verify( *tail == 0p );
+			return val;
+		}
+
+		int ?!=?( const __queue(T) & this, __attribute__((unused)) zero_t zero ) {
+			return this.head != 0;
+		}
 	}
 #endif
@@ -223,8 +218,7 @@
 
 #ifdef __cforall
-
-	forall(dtype T | sized(T))
+	forall(dtype T )
 	static inline [void] ?{}( __dllist(T) & this, * [T * & next, T * & prev] ( T & ) __get ) {
-		this.head{ NULL };
+		this.head{ 0p };
 		this.__get = __get;
 	}
@@ -232,47 +226,44 @@
 	#define next 0
 	#define prev 1
-	forall(dtype T | sized(T))
-	static inline void push_front( __dllist(T) & this, T & node ) with( this ) {
-		verify(__get);
-		if ( head ) {
-			__get( node ).next = head;
-			__get( node ).prev = __get( *head ).prev;
-			// inserted node must be consistent before it is seen
+	static inline forall(dtype T) {
+		void push_front( __dllist(T) & this, T & node ) with( this ) {
+			verify(__get);
+			if ( head ) {
+				__get( node ).next = head;
+				__get( node ).prev = __get( *head ).prev;
+				// inserted node must be consistent before it is seen
+				// prevent code movement across barrier
+				asm( "" : : : "memory" );
+				__get( *head ).prev = &node;
+				T & _prev = *__get( node ).prev;
+				__get( _prev ).next = &node;
+			} else {
+				__get( node ).next = &node;
+				__get( node ).prev = &node;
+			}
+
 			// prevent code movement across barrier
 			asm( "" : : : "memory" );
-			__get( *head ).prev = &node;
-			T & _prev = *__get( node ).prev;
-			__get( _prev ).next = &node;
-		}
-		else {
-			__get( node ).next = &node;
-			__get( node ).prev = &node;
-		}
-
-		// prevent code movement across barrier
-		asm( "" : : : "memory" );
-		head = &node;
-	}
-
-	forall(dtype T | sized(T))
-	static inline void remove( __dllist(T) & this, T & node ) with( this ) {
-		verify(__get);
-		if ( &node == head ) {
-			if ( __get( *head ).next == head ) {
-				head = NULL;
-			}
-			else {
-				head = __get( *head ).next;
-			}
-		}
-		__get( *__get( node ).next ).prev = __get( node ).prev;
-		__get( *__get( node ).prev ).next = __get( node ).next;
-		__get( node ).next = NULL;
-		__get( node ).prev = NULL;
-	}
-
-	forall(dtype T | sized(T))
-	static inline int ?!=?( const __dllist(T) & this, __attribute__((unused)) zero_t zero ) {
-		return this.head != 0;
+			head = &node;
+		}
+
+		void remove( __dllist(T) & this, T & node ) with( this ) {
+			verify(__get);
+			if ( &node == head ) {
+				if ( __get( *head ).next == head ) {
+					head = 0p;
+				} else {
+					head = __get( *head ).next;
+				}
+			}
+			__get( *__get( node ).next ).prev = __get( node ).prev;
+			__get( *__get( node ).prev ).next = __get( node ).next;
+			__get( node ).next = 0p;
+			__get( node ).prev = 0p;
+		}
+
+		int ?!=?( const __dllist(T) & this, __attribute__((unused)) zero_t zero ) {
+			return this.head != 0;
+		}
 	}
 	#undef next
@@ -286,2 +277,6 @@
 
 #endif
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
