diff options
Diffstat (limited to 'gcc/go/gofrontend')
-rw-r--r-- | gcc/go/gofrontend/MERGE | 2 | ||||
-rw-r--r-- | gcc/go/gofrontend/embed.cc | 15 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.cc | 5 | ||||
-rw-r--r-- | gcc/go/gofrontend/gogo.h | 11 | ||||
-rw-r--r-- | gcc/go/gofrontend/parse.cc | 2 |
5 files changed, 14 insertions, 21 deletions
diff --git a/gcc/go/gofrontend/MERGE b/gcc/go/gofrontend/MERGE index 9806b9d..5c9fc7d 100644 --- a/gcc/go/gofrontend/MERGE +++ b/gcc/go/gofrontend/MERGE @@ -1,4 +1,4 @@ -56cf388da8d04bbd3824c4df34d77a8afa69749b +2c5188b5ad6143e791f2ba42f02a4ea7887d87b6 The first line of this file holds the git revision number of the last merge done from the gofrontend repository. diff --git a/gcc/go/gofrontend/embed.cc b/gcc/go/gofrontend/embed.cc index 0a7df05..0584f70 100644 --- a/gcc/go/gofrontend/embed.cc +++ b/gcc/go/gofrontend/embed.cc @@ -663,21 +663,6 @@ Embedcfg_reader::error(const char* msg) this->filename_, msg); } -// Return whether the current file imports "embed". - -bool -Gogo::is_embed_imported() const -{ - Packages::const_iterator p = this->packages_.find("embed"); - if (p == this->packages_.end()) - return false; - - // We track current file imports in the package aliases, where a - // typical import will just list the package name in aliases. So - // the package has been imported if there is at least one alias. - return !p->second->aliases().empty(); -} - // Implement the sort order for a list of embedded files, as discussed // at the docs for embed.FS. diff --git a/gcc/go/gofrontend/gogo.cc b/gcc/go/gofrontend/gogo.cc index 38a2f6f..9d4150e 100644 --- a/gcc/go/gofrontend/gogo.cc +++ b/gcc/go/gofrontend/gogo.cc @@ -37,6 +37,7 @@ Gogo::Gogo(Backend* backend, Linemap* linemap, int, int pointer_size) imports_(), imported_unsafe_(false), current_file_imported_unsafe_(false), + current_file_imported_embed_(false), packages_(), init_functions_(), var_deps_(), @@ -469,6 +470,9 @@ Gogo::import_package(const std::string& filename, return; } + if (filename == "embed") + this->current_file_imported_embed_ = true; + Imports::const_iterator p = this->imports_.find(filename); if (p != this->imports_.end()) { @@ -2717,6 +2721,7 @@ Gogo::clear_file_scope() } this->current_file_imported_unsafe_ = false; + this->current_file_imported_embed_ = false; } // Queue up a type-specific hash function for later writing. These diff --git a/gcc/go/gofrontend/gogo.h b/gcc/go/gofrontend/gogo.h index 51b6575..f4155a2 100644 --- a/gcc/go/gofrontend/gogo.h +++ b/gcc/go/gofrontend/gogo.h @@ -397,10 +397,6 @@ class Gogo void read_embedcfg(const char* filename); - // Return whether the current file imports "embed". - bool - is_embed_imported() const; - // Build an initializer for a variable with a go:embed directive. Expression* initializer_for_embeds(Type*, const std::vector<std::string>*, Location); @@ -709,6 +705,11 @@ class Gogo current_file_imported_unsafe() const { return this->current_file_imported_unsafe_; } + // Return whether the current file imported the embed package. + bool + current_file_imported_embed() const + { return this->current_file_imported_embed_; } + // Clear out all names in file scope. This is called when we start // parsing a new file. void @@ -1251,6 +1252,8 @@ class Gogo bool imported_unsafe_; // Whether the magic unsafe package was imported by the current file. bool current_file_imported_unsafe_; + // Whether the embed package was imported by the current file. + bool current_file_imported_embed_; // Mapping from package names we have seen to packages. This does // not include the package we are compiling. Packages packages_; diff --git a/gcc/go/gofrontend/parse.cc b/gcc/go/gofrontend/parse.cc index fd81a85..e43b5f21 100644 --- a/gcc/go/gofrontend/parse.cc +++ b/gcc/go/gofrontend/parse.cc @@ -1321,7 +1321,7 @@ Parse::declaration() embeds = new(std::vector<std::string>); this->lex_->get_and_clear_embeds(embeds); - if (!this->gogo_->is_embed_imported()) + if (!this->gogo_->current_file_imported_embed()) { go_error_at(token->location(), "invalid go:embed: missing import %<embed%>"); |