183e085b7a331c96237cf8e814f97b3ef4c36a70fjimblandy// Copyright (c) 2010 Google Inc. 2057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// All rights reserved. 3057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// 4057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// Redistribution and use in source and binary forms, with or without 5057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// modification, are permitted provided that the following conditions are 6057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// met: 7057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// 8057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// * Redistributions of source code must retain the above copyright 9057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// notice, this list of conditions and the following disclaimer. 10057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// * Redistributions in binary form must reproduce the above 11057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// copyright notice, this list of conditions and the following disclaimer 12057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// in the documentation and/or other materials provided with the 13057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// distribution. 14057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// * Neither the name of Google Inc. nor the names of its 15057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// contributors may be used to endorse or promote products derived from 16057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// this software without specific prior written permission. 17057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// 18057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 30c50e7c604cd1b12bba9421b0a95357fc942ecd7cjimblandy// Original author: Jim Blandy <jimb@mozilla.com> <jimb@red-bean.com> 31c50e7c604cd1b12bba9421b0a95357fc942ecd7cjimblandy 32c50e7c604cd1b12bba9421b0a95357fc942ecd7cjimblandy// language.cc: Subclasses and singletons for google_breakpad::Language. 33c50e7c604cd1b12bba9421b0a95357fc942ecd7cjimblandy// See language.h for details. 34c50e7c604cd1b12bba9421b0a95357fc942ecd7cjimblandy 3587855248f1fab83caf002418196a34051d359f2cjimblandy#include "common/language.h" 36057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 37057aa1f6173501e1a62cf91fd08275e7da439166jimblandynamespace google_breakpad { 38057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 39057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// C++ language-specific operations. 40057aa1f6173501e1a62cf91fd08275e7da439166jimblandyclass CPPLanguage: public Language { 41057aa1f6173501e1a62cf91fd08275e7da439166jimblandy public: 42eba8cc51723f414b53ef8b3579b5d3f3157cf531ted.mielczarek CPPLanguage() {} 43057aa1f6173501e1a62cf91fd08275e7da439166jimblandy string MakeQualifiedName(const string &parent_name, 44057aa1f6173501e1a62cf91fd08275e7da439166jimblandy const string &name) const { 45057aa1f6173501e1a62cf91fd08275e7da439166jimblandy if (parent_name.empty()) 46057aa1f6173501e1a62cf91fd08275e7da439166jimblandy return name; 47057aa1f6173501e1a62cf91fd08275e7da439166jimblandy else 48057aa1f6173501e1a62cf91fd08275e7da439166jimblandy return parent_name + "::" + name; 49057aa1f6173501e1a62cf91fd08275e7da439166jimblandy } 50057aa1f6173501e1a62cf91fd08275e7da439166jimblandy}; 51057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 527b64ed2c32992378580cc1a41f4e9c9f2f3088e2Michael KrebsCPPLanguage CPPLanguageSingleton; 53057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 54057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// Java language-specific operations. 55057aa1f6173501e1a62cf91fd08275e7da439166jimblandyclass JavaLanguage: public Language { 56057aa1f6173501e1a62cf91fd08275e7da439166jimblandy public: 57057aa1f6173501e1a62cf91fd08275e7da439166jimblandy string MakeQualifiedName(const string &parent_name, 58057aa1f6173501e1a62cf91fd08275e7da439166jimblandy const string &name) const { 59057aa1f6173501e1a62cf91fd08275e7da439166jimblandy if (parent_name.empty()) 60057aa1f6173501e1a62cf91fd08275e7da439166jimblandy return name; 61057aa1f6173501e1a62cf91fd08275e7da439166jimblandy else 62057aa1f6173501e1a62cf91fd08275e7da439166jimblandy return parent_name + "." + name; 63057aa1f6173501e1a62cf91fd08275e7da439166jimblandy } 64057aa1f6173501e1a62cf91fd08275e7da439166jimblandy}; 65057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 66057aa1f6173501e1a62cf91fd08275e7da439166jimblandyJavaLanguage JavaLanguageSingleton; 67057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 68057aa1f6173501e1a62cf91fd08275e7da439166jimblandy// Assembler language-specific operations. 69057aa1f6173501e1a62cf91fd08275e7da439166jimblandyclass AssemblerLanguage: public Language { 70057aa1f6173501e1a62cf91fd08275e7da439166jimblandy bool HasFunctions() const { return false; } 71057aa1f6173501e1a62cf91fd08275e7da439166jimblandy string MakeQualifiedName(const string &parent_name, 72057aa1f6173501e1a62cf91fd08275e7da439166jimblandy const string &name) const { 73057aa1f6173501e1a62cf91fd08275e7da439166jimblandy return name; 74057aa1f6173501e1a62cf91fd08275e7da439166jimblandy } 75057aa1f6173501e1a62cf91fd08275e7da439166jimblandy}; 76057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 77057aa1f6173501e1a62cf91fd08275e7da439166jimblandyAssemblerLanguage AssemblerLanguageSingleton; 78057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 79057aa1f6173501e1a62cf91fd08275e7da439166jimblandyconst Language * const Language::CPlusPlus = &CPPLanguageSingleton; 80057aa1f6173501e1a62cf91fd08275e7da439166jimblandyconst Language * const Language::Java = &JavaLanguageSingleton; 81057aa1f6173501e1a62cf91fd08275e7da439166jimblandyconst Language * const Language::Assembler = &AssemblerLanguageSingleton; 82057aa1f6173501e1a62cf91fd08275e7da439166jimblandy 83057aa1f6173501e1a62cf91fd08275e7da439166jimblandy} // namespace google_breakpad 84