     return @get_component_class().is_castable(rs, target.get_component_class())
 
 class root.PrimitiveClassData extends ClassData
-  constructor: (@this_class, @loader=null) ->
-    @constant_pool = new ConstantPool
-    @ml_cache = {}
-    @fl_cache = {}
-    @access_flags = {}
-    @super_class = null
-    @interfaces = []
-    @fields = []
-    @methods = {}
-    @attrs = []
+  constructor: (@this_class, loader) ->
+    super loader
     @initialized = true
-    @static_fields = []
 
   # Returns a boolean indicating if this class is an instance of the target class.
   # "target" is a ClassData object.

    @super_class = @constant_pool.get(super_ref).deref() unless super_ref is 0
    # direct interfaces of this class
    isize = bytes_array.get_uint 2
    @interfaces = (bytes_array.get_uint 2 for i in [0...isize] by 1)
    # fields of this class
    num_fields = bytes_array.get_uint 2
    @fields = (new methods.Field(@) for i in [0...num_fields] by 1)


# Represents a single Class in the JVM.
class ClassData
  # Responsible for setting up all of the fields that are guaranteed to be
  # present on any ClassData object.
  constructor: (@loader=null) ->
    @ml_cache = {}
    @fl_cache = {}
    @access_flags = {}
    @interfaces = []
    @fields = []
    @methods = {}
    @attrs = []
    @initialized = false
    @static_fields = []

  # Resets any ClassData state that may have been built up
  load: () ->
