string Slice::JsGenerator::importPrefix(const ContainedPtr& contained, const ContainedPtr& toplevel, const vector<pair<string, string> >& imports) { string m1 = getModuleMetadata(contained); string m2 = getModuleMetadata(toplevel); string p; if(m1.empty()) { string p1 = contained->definitionContext()->filename(); string p2 = toplevel->definitionContext()->filename(); p = relativePath(p1, p2); string::size_type pos = p.rfind('.'); if (pos != string::npos) { p.erase(pos); } } else if(m1 == "ice" && m1 != m2) { return "iceNS0."; } else if(m1 != m2) { p = m1; } if(!p.empty()) { for(vector<pair<string, string> >::const_iterator i = imports.begin(); i != imports.end(); ++i) { if(i->first == p) { return i->second + "."; } } } return ""; }
string Slice::JsGenerator::getModuleMetadata(const ContainedPtr& p) { // // Check if the file contains the python:pkgdir global metadata. // DefinitionContextPtr dc = p->definitionContext(); assert(dc); const string prefix = "js:module:"; const string value = dc->findMetaData(prefix); return value.empty() ? value : value.substr(prefix.size()); }