     if attr_types[name]?
       attr = new attr_types[name]
       old_len = bytes_array.size()
-      bytes_array = attr.parse(bytes_array,constant_pool,attr_len)
+      attr.parse bytes_array, constant_pool, attr_len
       new_len = bytes_array.size()
       if old_len - new_len != attr_len
         #throw new Error "#{name} attribute didn't consume all bytes"

    @handler_pc = bytes_array.get_uint 2
    cti = bytes_array.get_uint 2
    @catch_type = if cti==0 then "<any>" else constant_pool.get(cti).deref()
    return bytes_array

class Code
  parse: (bytes_array,constant_pool) ->
    @max_stack = bytes_array.get_uint 2
    @max_locals = bytes_array.get_uint 2
    @code_len = bytes_array.get_uint 4
    throw "Attribute._parse_code: Code length is zero" if @code_len == 0
    code_array = bytes_array.splice(@code_len)
    @opcodes = @parse_code code_array, constant_pool
    except_len = bytes_array.get_uint 2
    @exception_handlers = (new ExceptionHandler for [0...except_len])
    for eh in @exception_handlers
      bytes_array = eh.parse(bytes_array,constant_pool)
    # yes, there are even attrs on attrs. BWOM... BWOM...
    @attrs = root.make_attributes(bytes_array,constant_pool)
    return bytes_array

  parse_code: (bytes_array, constant_pool) ->
    rv = new Array @code_len

    @num_exceptions = bytes_array.get_uint 2
    exc_refs = (bytes_array.get_uint 2 for i in [0...@num_exceptions] by 1)
    @exceptions = (constant_pool.get(ref).deref() for ref in exc_refs)

class InnerClasses
  parse: (bytes_array, constant_pool) ->
    num_classes = bytes_array.get_uint 2
    @classes = (@parse_class bytes_array, constant_pool for i in [0...num_classes] by 1)

  parse_class: (bytes_array, constant_pool) ->
    {
