diff options
author | Chris Lattner <sabre@nondot.org> | 2009-06-14 01:05:48 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-06-14 01:05:48 +0000 |
commit | 6b15cdc1312f8fc45c86ee75e2a85106700e97f6 (patch) | |
tree | a3a61c42e8fced466487e5c556f5e0d1402fcb2f /lib/AST/Builtins.cpp | |
parent | f6c2a2a3ff0533334d15c96c24b22b57e13d4dd9 (diff) |
move the various builtins stuff from libast to libbasic. This
fixes a layering violation in lib/Basic/Targets.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@73318 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/Builtins.cpp')
-rw-r--r-- | lib/AST/Builtins.cpp | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/lib/AST/Builtins.cpp b/lib/AST/Builtins.cpp deleted file mode 100644 index bdf5dc4f0b..0000000000 --- a/lib/AST/Builtins.cpp +++ /dev/null @@ -1,94 +0,0 @@ -//===--- Builtins.cpp - Builtin function implementation -------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file implements various things for builtin functions. -// -//===----------------------------------------------------------------------===// - -#include "clang/AST/Builtins.h" -#include "clang/Basic/IdentifierTable.h" -#include "clang/Basic/TargetInfo.h" -using namespace clang; - -static const Builtin::Info BuiltinInfo[] = { - { "not a builtin function", 0, 0, 0, false }, -#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, false }, -#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER) { #ID, TYPE, ATTRS, HEADER, false }, -#include "clang/AST/Builtins.def" -}; - -const Builtin::Info &Builtin::Context::GetRecord(unsigned ID) const { - if (ID < Builtin::FirstTSBuiltin) - return BuiltinInfo[ID]; - assert(ID - Builtin::FirstTSBuiltin < NumTSRecords && "Invalid builtin ID!"); - return TSRecords[ID - Builtin::FirstTSBuiltin]; -} - -/// \brief Load all of the target builtins. This must be called -/// prior to initializing the builtin identifiers. -void Builtin::Context::InitializeTargetBuiltins(const TargetInfo &Target) { - Target.getTargetBuiltins(TSRecords, NumTSRecords); -} - -/// InitializeBuiltins - Mark the identifiers for all the builtins with their -/// appropriate builtin ID # and mark any non-portable builtin identifiers as -/// such. -void Builtin::Context::InitializeBuiltins(IdentifierTable &Table, - bool NoBuiltins) { - // Step #1: mark all target-independent builtins with their ID's. - for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) - if (!BuiltinInfo[i].Suppressed && - (!NoBuiltins || !strchr(BuiltinInfo[i].Attributes, 'f'))) - Table.get(BuiltinInfo[i].Name).setBuiltinID(i); - - // Step #2: Register target-specific builtins. - for (unsigned i = 0, e = NumTSRecords; i != e; ++i) - if (!TSRecords[i].Suppressed && - (!NoBuiltins || - (TSRecords[i].Attributes && - !strchr(TSRecords[i].Attributes, 'f')))) - Table.get(TSRecords[i].Name).setBuiltinID(i+Builtin::FirstTSBuiltin); -} - -void -Builtin::Context::GetBuiltinNames(llvm::SmallVectorImpl<const char *> &Names, - bool NoBuiltins) { - // Final all target-independent names - for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) - if (!BuiltinInfo[i].Suppressed && - (!NoBuiltins || !strchr(BuiltinInfo[i].Attributes, 'f'))) - Names.push_back(BuiltinInfo[i].Name); - - // Find target-specific names. - for (unsigned i = 0, e = NumTSRecords; i != e; ++i) - if (!TSRecords[i].Suppressed && - (!NoBuiltins || - (TSRecords[i].Attributes && - !strchr(TSRecords[i].Attributes, 'f')))) - Names.push_back(TSRecords[i].Name); -} - -bool -Builtin::Context::isPrintfLike(unsigned ID, unsigned &FormatIdx, - bool &HasVAListArg) { - const char *Printf = strpbrk(GetRecord(ID).Attributes, "pP"); - if (!Printf) - return false; - - HasVAListArg = (*Printf == 'P'); - - ++Printf; - assert(*Printf == ':' && "p or P specifier must have be followed by a ':'"); - ++Printf; - - assert(strchr(Printf, ':') && "printf specifier must end with a ':'"); - FormatIdx = strtol(Printf, 0, 10); - return true; -} - |