Index: libcfa/prelude/builtins.c
===================================================================
--- libcfa/prelude/builtins.c	(revision a715b5c08c27a59aa8a90d183fb68e349cd38822)
+++ libcfa/prelude/builtins.c	(revision ec42ff2e16a4d9e4fa25a7afb0cc135b75bfdf53)
@@ -13,4 +13,28 @@
 // Update Count     : 20
 //
+
+// type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions
+// Note: needs to occur early, because it is used to generate destructor calls during code generation
+forall(dtype T)
+struct __Destructor {
+	T * object;
+	void (*dtor)(T *);
+};
+
+// defined destructor in the case that non-generated code wants to use __Destructor
+forall(dtype T)
+static inline void ^?{}(__Destructor(T) & x) {
+	if (x.object && x.dtor) {
+		x.dtor(x.object);
+	}
+}
+
+// easy interface into __Destructor's destructor for easy codegen purposes
+extern "C" {
+	forall(dtype T)
+	static inline void __destroy_Destructor(__Destructor(T) * dtor) {
+		^(*dtor){};
+	}
+}
 
 // exception implementation
@@ -111,27 +135,4 @@
 static inline unsigned int ?\=?( unsigned int & x, unsigned long int y ) { x = x \ y; return x; }
 
-// type that wraps a pointer and a destructor-like function - used in generating implicit destructor calls for struct members in user-defined functions
-forall(dtype T)
-struct __Destructor {
-  T * object;
-  void (*dtor)(T *);
-};
-
-// defined destructor in the case that non-generated code wants to use __Destructor
-forall(dtype T)
-static inline void ^?{}(__Destructor(T) & x) {
-	if (x.object && x.dtor) {
-	  x.dtor(x.object);
-	}
-}
-
-// easy interface into __Destructor's destructor for easy codegen purposes
-extern "C" {
-  forall(dtype T)
-  static inline void __destroy_Destructor(__Destructor(T) * dtor) {
-    ^(*dtor){};
-  }
-}
-
 // Local Variables: //
 // mode: c //
