Add HeapTest and make GC work enough to pass it

Change-Id: If06eaef2921b64b3226bfd347acaec60ec993e67
diff --git a/src/class_loader.h b/src/class_loader.h
new file mode 100644
index 0000000..da19539
--- /dev/null
+++ b/src/class_loader.h
@@ -0,0 +1,54 @@
+// Copyright 2011 Google Inc. All Rights Reserved.
+
+#ifndef ART_SRC_CLASS_LOADER_H_
+#define ART_SRC_CLASS_LOADER_H_
+
+#include <vector>
+
+#include "dex_file.h"
+#include "object.h"
+
+namespace art {
+
+// ClassLoader objects.
+class ClassLoader : public Object {
+ public:
+  static const std::vector<const DexFile*>& GetClassPath(const ClassLoader* class_loader);
+
+  void SetClassPath(std::vector<const DexFile*>& class_path) {
+    DCHECK_EQ(0U, class_path_.size());
+    class_path_ = class_path;
+  }
+
+ private:
+  // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
+  Object* packages_;
+  ClassLoader* parent_;
+
+  // TODO: remove once we can create a real PathClassLoader
+  std::vector<const DexFile*> class_path_;
+
+  DISALLOW_IMPLICIT_CONSTRUCTORS(ClassLoader);
+};
+
+class BaseDexClassLoader : public ClassLoader {
+ private:
+  // Field order required by test "ValidateFieldOrderOfJavaCppUnionClasses".
+  String* original_path_;
+  Object* path_list_;
+  DISALLOW_IMPLICIT_CONSTRUCTORS(BaseDexClassLoader);
+};
+
+class PathClassLoader : public BaseDexClassLoader {
+ public:
+  static const PathClassLoader* Alloc(std::vector<const DexFile*> dex_files);
+  static void SetClass(Class* dalvik_system_PathClassLoader);
+  static void ResetClass();
+ private:
+  static Class* dalvik_system_PathClassLoader_;
+  DISALLOW_IMPLICIT_CONSTRUCTORS(PathClassLoader);
+};
+
+}  // namespace art
+
+#endif  // ART_SRC_OBJECT_H_