diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-06-12 20:33:22 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2012-06-12 20:33:22 +0000 |
commit | 9690ac05c92a154b5d2ca7078d3bf6f4c7eb6c57 (patch) | |
tree | 33b14dcd566e3f484c612221423ad78d80bfe383 /gcc | |
parent | b29e01b77bcbe5041f82007d423f2da9396d1e3b (diff) | |
download | gcc-9690ac05c92a154b5d2ca7078d3bf6f4c7eb6c57.zip gcc-9690ac05c92a154b5d2ca7078d3bf6f4c7eb6c57.tar.gz gcc-9690ac05c92a154b5d2ca7078d3bf6f4c7eb6c57.tar.bz2 |
compiler, reflect: Handle package path like gc compiler.
From-SVN: r188482
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 11 | ||||
-rw-r--r-- | gcc/go/gofrontend/types.cc | 21 |
2 files changed, 23 insertions, 9 deletions
diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 80ffe24..6e9b8c1 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -339,9 +339,14 @@ Gogo::set_package_name(const std::string& package_name, // symbol names. if (!this->pkgpath_set_) { - if (!this->prefix_from_option_) - this->prefix_ = "go"; - this->pkgpath_ = this->prefix_ + '.' + package_name; + if (!this->prefix_from_option_ && package_name == "main") + this->pkgpath_ = package_name; + else + { + if (!this->prefix_from_option_) + this->prefix_ = "go"; + this->pkgpath_ = this->prefix_ + '.' + package_name; + } this->pkgpath_set_ = true; } diff --git a/gcc/go/gofrontend/types.cc b/gcc/go/gofrontend/types.cc index c2e5ed8..ff6b5bd 100644 --- a/gcc/go/gofrontend/types.cc +++ b/gcc/go/gofrontend/types.cc @@ -8337,14 +8337,23 @@ Named_type::do_reflection(Gogo* gogo, std::string* ret) const { // We handle -fgo-prefix and -fgo-pkgpath differently here for // compatibility with how the compiler worked before - // -fgo-pkgpath was introduced. + // -fgo-pkgpath was introduced. When -fgo-pkgpath is specified, + // we use it to make a unique reflection string, so that the + // type canonicalization in the reflect package will work. In + // order to be compatible with the gc compiler, we quote the + // package path, so that the reflect methods can discard it. const Package* package = this->named_object_->package(); if (gogo->pkgpath_from_option()) - ret->append(package != NULL ? package->pkgpath() : gogo->pkgpath()); - else - ret->append(package != NULL - ? package->package_name() - : gogo->package_name()); + { + ret->push_back('"'); + ret->append(package != NULL + ? package->pkgpath_symbol() + : gogo->pkgpath_symbol()); + ret->push_back('"'); + } + ret->append(package != NULL + ? package->package_name() + : gogo->package_name()); ret->push_back('.'); } if (this->in_function_ != NULL) |