Builtins.cpp (218893) | Builtins.cpp (224145) |
---|---|
1//===--- Builtins.cpp - Builtin function implementation -------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 4 unchanged lines hidden (view full) --- 13 14#include "clang/Basic/Builtins.h" 15#include "clang/Basic/IdentifierTable.h" 16#include "clang/Basic/TargetInfo.h" 17#include "clang/Basic/LangOptions.h" 18using namespace clang; 19 20static const Builtin::Info BuiltinInfo[] = { | 1//===--- Builtins.cpp - Builtin function implementation -------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 4 unchanged lines hidden (view full) --- 13 14#include "clang/Basic/Builtins.h" 15#include "clang/Basic/IdentifierTable.h" 16#include "clang/Basic/TargetInfo.h" 17#include "clang/Basic/LangOptions.h" 18using namespace clang; 19 20static const Builtin::Info BuiltinInfo[] = { |
21 { "not a builtin function", 0, 0, 0, ALL_LANGUAGES, false }, 22#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, ALL_LANGUAGES, false }, | 21 { "not a builtin function", 0, 0, 0, ALL_LANGUAGES }, 22#define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, ALL_LANGUAGES }, |
23#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER, BUILTIN_LANG) { #ID, TYPE, ATTRS, HEADER,\ | 23#define LIBBUILTIN(ID, TYPE, ATTRS, HEADER, BUILTIN_LANG) { #ID, TYPE, ATTRS, HEADER,\ |
24 BUILTIN_LANG, false }, | 24 BUILTIN_LANG }, |
25#include "clang/Basic/Builtins.def" 26}; 27 28const Builtin::Info &Builtin::Context::GetRecord(unsigned ID) const { 29 if (ID < Builtin::FirstTSBuiltin) 30 return BuiltinInfo[ID]; 31 assert(ID - Builtin::FirstTSBuiltin < NumTSRecords && "Invalid builtin ID!"); 32 return TSRecords[ID - Builtin::FirstTSBuiltin]; --- 8 unchanged lines hidden (view full) --- 41 42/// InitializeBuiltins - Mark the identifiers for all the builtins with their 43/// appropriate builtin ID # and mark any non-portable builtin identifiers as 44/// such. 45void Builtin::Context::InitializeBuiltins(IdentifierTable &Table, 46 const LangOptions& LangOpts) { 47 // Step #1: mark all target-independent builtins with their ID's. 48 for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) | 25#include "clang/Basic/Builtins.def" 26}; 27 28const Builtin::Info &Builtin::Context::GetRecord(unsigned ID) const { 29 if (ID < Builtin::FirstTSBuiltin) 30 return BuiltinInfo[ID]; 31 assert(ID - Builtin::FirstTSBuiltin < NumTSRecords && "Invalid builtin ID!"); 32 return TSRecords[ID - Builtin::FirstTSBuiltin]; --- 8 unchanged lines hidden (view full) --- 41 42/// InitializeBuiltins - Mark the identifiers for all the builtins with their 43/// appropriate builtin ID # and mark any non-portable builtin identifiers as 44/// such. 45void Builtin::Context::InitializeBuiltins(IdentifierTable &Table, 46 const LangOptions& LangOpts) { 47 // Step #1: mark all target-independent builtins with their ID's. 48 for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) |
49 if (!BuiltinInfo[i].Suppressed && 50 (!LangOpts.NoBuiltin || !strchr(BuiltinInfo[i].Attributes, 'f'))) { | 49 if (!LangOpts.NoBuiltin || !strchr(BuiltinInfo[i].Attributes, 'f')) { |
51 if (LangOpts.ObjC1 || 52 BuiltinInfo[i].builtin_lang != clang::OBJC_LANG) 53 Table.get(BuiltinInfo[i].Name).setBuiltinID(i); 54 } 55 56 // Step #2: Register target-specific builtins. 57 for (unsigned i = 0, e = NumTSRecords; i != e; ++i) | 50 if (LangOpts.ObjC1 || 51 BuiltinInfo[i].builtin_lang != clang::OBJC_LANG) 52 Table.get(BuiltinInfo[i].Name).setBuiltinID(i); 53 } 54 55 // Step #2: Register target-specific builtins. 56 for (unsigned i = 0, e = NumTSRecords; i != e; ++i) |
58 if (!TSRecords[i].Suppressed && 59 (!LangOpts.NoBuiltin || 60 (TSRecords[i].Attributes && 61 !strchr(TSRecords[i].Attributes, 'f')))) | 57 if (!LangOpts.NoBuiltin || !strchr(TSRecords[i].Attributes, 'f')) |
62 Table.get(TSRecords[i].Name).setBuiltinID(i+Builtin::FirstTSBuiltin); 63} 64 65void 66Builtin::Context::GetBuiltinNames(llvm::SmallVectorImpl<const char *> &Names, 67 bool NoBuiltins) { 68 // Final all target-independent names 69 for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) | 58 Table.get(TSRecords[i].Name).setBuiltinID(i+Builtin::FirstTSBuiltin); 59} 60 61void 62Builtin::Context::GetBuiltinNames(llvm::SmallVectorImpl<const char *> &Names, 63 bool NoBuiltins) { 64 // Final all target-independent names 65 for (unsigned i = Builtin::NotBuiltin+1; i != Builtin::FirstTSBuiltin; ++i) |
70 if (!BuiltinInfo[i].Suppressed && 71 (!NoBuiltins || !strchr(BuiltinInfo[i].Attributes, 'f'))) | 66 if (!NoBuiltins || !strchr(BuiltinInfo[i].Attributes, 'f')) |
72 Names.push_back(BuiltinInfo[i].Name); 73 74 // Find target-specific names. 75 for (unsigned i = 0, e = NumTSRecords; i != e; ++i) | 67 Names.push_back(BuiltinInfo[i].Name); 68 69 // Find target-specific names. 70 for (unsigned i = 0, e = NumTSRecords; i != e; ++i) |
76 if (!TSRecords[i].Suppressed && 77 (!NoBuiltins || 78 (TSRecords[i].Attributes && 79 !strchr(TSRecords[i].Attributes, 'f')))) | 71 if (!NoBuiltins || !strchr(TSRecords[i].Attributes, 'f')) |
80 Names.push_back(TSRecords[i].Name); 81} 82 83void Builtin::Context::ForgetBuiltin(unsigned ID, IdentifierTable &Table) { 84 Table.get(GetRecord(ID).Name).setBuiltinID(0); 85} 86 87bool --- 36 unchanged lines hidden --- | 72 Names.push_back(TSRecords[i].Name); 73} 74 75void Builtin::Context::ForgetBuiltin(unsigned ID, IdentifierTable &Table) { 76 Table.get(GetRecord(ID).Name).setBuiltinID(0); 77} 78 79bool --- 36 unchanged lines hidden --- |