StrictModules/scope.cpp (25 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) #include "StrictModules/scope.h" namespace strictmod { std::string mangle(const std::string& className, const std::string& name) { // private names need to start with __ if (name.size() < 2 || name[0] != '_' || name[1] != '_') { return name; } auto nameLen = name.size(); if (name[nameLen - 1] == '_' && name[nameLen - 2] == '_') { return name; } if (name.find('.') != std::string::npos) { return name; } auto classStartPos = className.find_first_not_of('_'); if (classStartPos == std::string::npos) { return name; } // The maximum size of the end result is size(_<className><name>) std::string result; result.reserve(1 + className.size() + name.size()); result.append("_"); result.append(className, classStartPos); result.append(name); return result; } } // namespace strictmod