def function_type_arguments
      skip_whitespace

      # First argument is special
      if s = @input.scan(/new\s*:\s*/)
        @out << s
        return false unless type_name
      elsif s = @input.scan(/this\s*:\s*/)
        @out << s
        return false unless type_name
      else
        return false unless ftype_arg
      end

      skip_whitespace

      # Go through additional arguments, separated with ","
      while @input.check(/,/)
        @out << @input.scan(/,/)
        return false unless ftype_arg
      end

      true
    end
def function_type_arguments
      skip_whitespace

      # First argument is special
      if s = @input.scan(/new\s*:\s*/)
        @out << s
        return false unless type_name
      elsif s = @input.scan(/this\s*:\s*/)
        @out << s
        return false unless type_name
      else
        return false unless ftype_arg
      end

      skip_whitespace

      # Go through additional arguments, separated with ","
      while @input.check(/,/)
        @out << @input.scan(/,/)
        return false unless ftype_arg
      end

      true
    end
<function-type-arguments> ::= <ftype-first-arg> [ "," <ftype-arg> ]*

     <ftype-first-arg> ::= "new" ":" <type-name>
                         | "this" ":" <type-name>
                         | <ftype-arg>