summaryrefslogtreecommitdiff
path: root/gcc/go
diff options
context:
space:
mode:
authorian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-29 07:03:49 +0000
committerian <ian@138bc75d-0d04-0410-961f-82ee72b054a4>2011-11-29 07:03:49 +0000
commit5f6c88358173a14035c34918c8585f155f180e34 (patch)
tree2579bb62ebd4ebd9cd591b5003b1bb82b002c6ed /gcc/go
parent6a5f222a6275220dffbab7451e59c4a8f51c69f3 (diff)
downloadgcc-5f6c88358173a14035c34918c8585f155f180e34.tar.gz
Implement predefined error interface.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@181798 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/go')
-rw-r--r--gcc/go/gofrontend/gogo.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc
index e20063b817f..45fb938f874 100644
--- a/gcc/go/gofrontend/gogo.cc
+++ b/gcc/go/gofrontend/gogo.cc
@@ -97,6 +97,18 @@ Gogo::Gogo(Backend* backend, int int_type_size, int pointer_size)
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),