diff mbox

Go patch committed: Define Backend_function_type

Message ID mcr7ga240b6.fsf@iant-glaptop.roam.corp.google.com
State New
Headers show

Commit Message

Ian Lance Taylor Jan. 14, 2014, 11:21 p.m. UTC
This patch from Chris Manghane adds a Backend_function_type: a function
type that is implemented as a function pointer rather than as the
pointer to a struct that is the implementation of a Go function.  This
will be used in other backend conversions.  Bootstrapped and ran Go
testsuite on x86_64-unknown-linux-gnu.  Committed to mainline.

Ian
diff mbox

Patch

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