rewrite_defn (UnifiedRuby)

    # File lib/unified_ruby.rb, line 153
      def rewrite_defn(exp)
        weirdo = exp.ivar || exp.attrset
        fbody  = exp.fbody(true)

        weirdo ||= fbody.cfunc if fbody

        exp.push(fbody.scope) if fbody unless weirdo

        args = exp.scope.block.args(true) unless weirdo
        exp.insert 2, args if args

        # move block_arg up and in
        block_arg = exp.scope.block.block_arg(true) rescue nil
        if block_arg
          block = args.block(true)
          args << "&#{block_arg.last}""&#{block_arg.last}"
          args << block if block
        end

        # patch up attr_accessor methods
        if weirdo then
          case
          when fbody && fbody.cfunc then
            exp.insert 2, s(:args, "*args""*args")
          when exp.ivar then
            exp.insert 2, s(:args)
          when exp.attrset then
            exp.insert 2, s(:args, :arg)
          else
            raise "unknown wierdo: #{wierdo.inpsect}"
          end
        end

        exp
      end