     @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
+    throw "Code.parse error: 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)
+      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)
    return bytes_array

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)
    return bytes_array

  parse_class: (bytes_array, constant_pool) ->
    {

      spc = bytes_array.get_uint 2
      ln = bytes_array.get_uint 2
      @entries.push {'start_pc': spc,'line_number': ln}

class SourceFile
  parse: (bytes_array,constant_pool) ->
    @name = constant_pool.get(bytes_array.get_uint 2).value

class StackMapTable
  parse: (bytes_array, constant_pool) ->
