From 97f3a01dc5bbd8cd37f2b5e6cf6b12f7926132d2 Mon Sep 17 00:00:00 2001 From: Stephen Williams Date: Thu, 14 Feb 2013 18:25:10 -0800 Subject: [PATCH] Support import if single items. --- pform_package.cc | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/pform_package.cc b/pform_package.cc index c0fadd05e..62d48ee0b 100644 --- a/pform_package.cc +++ b/pform_package.cc @@ -82,15 +82,32 @@ void pform_package_import(const struct vlltype&, const char*pkg_name, const char return; } - perm_string use_ident; - if (ident) use_ident = lex_strings.make(ident); - PPackage*pkg = pcur->second; LexicalScope*scope = pform_peek_scope(); - for (map::const_iterator cur = pkg->parameters.begin() - ; cur != pkg->parameters.end() ; ++cur) { + if (ident) { + perm_string use_ident = lex_strings.make(ident); + + map::const_iterator cur + = pkg->parameters.find(use_ident); + if (cur == pkg->parameters.end()) { + ostringstream msg; + msg << "Symbol " << use_ident + << " not found in package " << pcur->first << "." << ends; + VLerror(msg.str().c_str()); + return; + } scope->parameters[cur->first] = cur->second; + + } else { + + // Handle the pkg::* case by importing everything from + // the package. + for (map::const_iterator cur = pkg->parameters.begin() + ; cur != pkg->parameters.end() ; ++cur) { + + scope->parameters[cur->first] = cur->second; + } } }