    # File lib/merb-core/dispatch/default_exception/default_exception.rb, line 23
            def frame_details(line)
              if (match = line.match(/^(.+):(\d+):(.+)$/))
                filename = match[1]
                lineno = match[2]
                location = match[3]
                if filename.index(Merb.framework_root) == 0
                  type = "framework"
                  shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.framework_root))
                elsif filename.index(Merb.root) == 0
                  type = "app"
                  shortname = Pathname.new(filename).relative_path_from(Pathname.new(Merb.root))
                elsif Module.const_defined?(:Gem) && Gem.respond_to?(:path) && path = Gem.path.find {|p| filename.index(p) == 0}
                  type = "gem"
                  shortname = Pathname.new(filename).relative_path_from(Pathname.new(path))
                else
                  type = "other"
                  shortname = filename
                end
                [type, shortname, filename, lineno, location]
              else
                ['', '', '', nil, nil]
              end
            end