The Go language recently added a new predefined type, named "error",
which is an interface type with a single method, Error. This patch,
from Rémy Oudompheng, implements this type for gccgo. Bootstrapped and
ran Go testsuite on x86_64-unknown-linux-gnu. Committed to mainline.
Ian
diff -r 9f8ff21f7771 go/gogo.cc
--- a/go/gogo.cc Mon Nov 28 22:51:39 2011 -0800
+++ b/go/gogo.cc Mon Nov 28 22:52:22 2011 -0800
@@ -97,6 +97,18 @@
this->add_named_type(Type::make_named_string_type());
+ // "error" is interface { Error() string }.
+ {
+ Typed_identifier_list *methods = new Typed_identifier_list;
+ Typed_identifier_list *results = new Typed_identifier_list;
+ results->push_back(Typed_identifier("", Type::lookup_string_type(), loc));
+ Type *method_type = Type::make_function_type(NULL, NULL, results, loc);
+ methods->push_back(Typed_identifier("Error", method_type, loc));
+ Type *error_iface = Type::make_interface_type(methods, loc);
+ Named_type *error_type = Named_object::make_type("error", NULL, error_iface, loc)->type_value();
+ this->add_named_type(error_type);
+ }
+
this->globals_->add_constant(Typed_identifier("true",
Type::make_boolean_type(),
loc),