diff -r 3515c11d7573 go/types.cc --- a/go/types.cc Thu Jan 09 22:40:50 2014 -0800 +++ b/go/types.cc Tue Jan 14 15:16:02 2014 -0800 @@ -4066,6 +4066,17 @@ return new Function_type(receiver, parameters, results, location); } +// Make a backend function type. + +Backend_function_type* +Type::make_backend_function_type(Typed_identifier* receiver, + Typed_identifier_list* parameters, + Typed_identifier_list* results, + Location location) +{ + return new Backend_function_type(receiver, parameters, results, location); +} + // Class Pointer_type. // Traversal. diff -r 3515c11d7573 go/types.h --- a/go/types.h Thu Jan 09 22:40:50 2014 -0800 +++ b/go/types.h Tue Jan 14 15:16:02 2014 -0800 @@ -19,6 +19,7 @@ class Complex_type; class String_type; class Function_type; +class Backend_function_type; class Struct_field; class Struct_field_list; class Struct_type; @@ -484,6 +485,12 @@ Typed_identifier_list* results, Location); + static Backend_function_type* + make_backend_function_type(Typed_identifier* receiver, + Typed_identifier_list* parameters, + Typed_identifier_list* results, + Location); + static Pointer_type* make_pointer_type(Type*); @@ -1896,6 +1903,23 @@ Btype* fnbtype_; }; +// The type of a function's backend representation. + +class Backend_function_type : public Function_type +{ + public: + Backend_function_type(Typed_identifier* receiver, + Typed_identifier_list* parameters, + Typed_identifier_list* results, Location location) + : Function_type(receiver, parameters, results, location) + { } + + protected: + Btype* + do_get_backend(Gogo* gogo) + { return this->get_backend_fntype(gogo); } +}; + // The type of a pointer. class Pointer_type : public Type