From: Lang Hames Date: Sun, 8 Feb 2015 19:14:56 +0000 (+0000) Subject: [Orc][Kaleidoscope] Remove fixed sized buffers from string conversion code and X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=13f2d9943f045f89e616b857ff29b125cfbd34dd;hp=b3d4cc50caa36668e226834324d6756ecaef3217 [Orc][Kaleidoscope] Remove fixed sized buffers from string conversion code and further c++ify the Kaleidoscope/Orc tutorials. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228530 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/examples/Kaleidoscope/Orc/initial/toy.cpp b/examples/Kaleidoscope/Orc/initial/toy.cpp index d068394a8f2..836c3a78a45 100644 --- a/examples/Kaleidoscope/Orc/initial/toy.cpp +++ b/examples/Kaleidoscope/Orc/initial/toy.cpp @@ -14,8 +14,10 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Transforms/Scalar.h" #include -#include +#include +#include #include +#include #include #include using namespace llvm; @@ -271,14 +273,14 @@ static int GetTokPrecedence() { } template -std::unique_ptr ErrorU(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +std::unique_ptr ErrorU(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } template -T* ErrorP(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +T* ErrorP(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } @@ -644,13 +646,11 @@ static std::unique_ptr ParseExtern() { //===----------------------------------------------------------------------===// // FIXME: Obviously we can do better than this -std::string GenerateUniqueName(const char *root) -{ +std::string GenerateUniqueName(const std::string &Root) { static int i = 0; - char s[16]; - sprintf(s, "%s%d", root, i++); - std::string S = s; - return S; + std::ostringstream NameStream; + NameStream << Root << ++i; + return NameStream.str(); } std::string MakeLegalFunctionName(std::string Name) @@ -670,10 +670,9 @@ std::string MakeLegalFunctionName(std::string Name) std::string legal_elements = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; size_t pos; while ((pos = NewName.find_first_not_of(legal_elements)) != std::string::npos) { - char old_c = NewName.at(pos); - char new_str[16]; - sprintf(new_str, "%d", (int)old_c); - NewName = NewName.replace(pos, 1, new_str); + std::ostringstream NumStream; + NumStream << (int)NewName.at(pos); + NewName = NewName.replace(pos, 1, NumStream.str()); } return NewName; @@ -700,7 +699,7 @@ PrototypeAST* SessionContext::getPrototypeAST(const std::string &Name) { if (I != Prototypes.end()) return I->second.get(); return nullptr; -} +} class IRGenContext { public: @@ -751,11 +750,8 @@ Value *VariableExprAST::IRGen(IRGenContext &C) { // Look this variable up in the function. Value *V = C.NamedValues[Name]; - if (V == 0) { - char ErrStr[256]; - sprintf(ErrStr, "Unknown variable name %s", Name.c_str()); - return ErrorP(ErrStr); - } + if (V == 0) + return ErrorP("Unknown variable name '" + Name + "'"); // Load the value. return C.getBuilder().CreateLoad(V, Name.c_str()); @@ -1189,7 +1185,7 @@ static void HandleDefinition(SessionContext &S, KaleidoscopeJIT &J) { IRGenContext C(S); if (auto LF = F->IRGen(C)) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "Read function definition:"); + std::cerr << "Read function definition:\n"; LF->dump(); #endif J.addModule(C.takeM()); @@ -1216,7 +1212,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { IRGenContext C(S); if (auto ExprFunc = F->IRGen(C)) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "Expression function:\n"); + std::cerr << "Expression function:\n"; ExprFunc->dump(); #endif // Add the CodeGen'd module to the JIT. Keep a handle to it: We can remove @@ -1232,7 +1228,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { #ifdef MINIMAL_STDERR_OUTPUT FP(); #else - fprintf(stderr, "Evaluated to %f\n", FP()); + std::cerr << "Evaluated to " << FP() << "\n"; #endif // Remove the function. @@ -1251,7 +1247,7 @@ static void MainLoop() { while (1) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif switch (CurTok) { case tok_eof: return; @@ -1307,10 +1303,12 @@ int main() { // Prime the first token. #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif getNextToken(); + std::cerr << std::fixed; + // Run the main "interpreter loop" now. MainLoop(); diff --git a/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp b/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp index 47cb71bb5f3..5fdc49293fc 100644 --- a/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp +++ b/examples/Kaleidoscope/Orc/lazy_codegen/toy.cpp @@ -13,8 +13,10 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Transforms/Scalar.h" #include -#include +#include +#include #include +#include #include #include using namespace llvm; @@ -270,14 +272,14 @@ static int GetTokPrecedence() { } template -std::unique_ptr ErrorU(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +std::unique_ptr ErrorU(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } template -T* ErrorP(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +T* ErrorP(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } @@ -643,13 +645,11 @@ static std::unique_ptr ParseExtern() { //===----------------------------------------------------------------------===// // FIXME: Obviously we can do better than this -std::string GenerateUniqueName(const char *root) -{ +std::string GenerateUniqueName(const std::string &Root) { static int i = 0; - char s[16]; - sprintf(s, "%s%d", root, i++); - std::string S = s; - return S; + std::ostringstream NameStream; + NameStream << Root << ++i; + return NameStream.str(); } std::string MakeLegalFunctionName(std::string Name) @@ -669,10 +669,9 @@ std::string MakeLegalFunctionName(std::string Name) std::string legal_elements = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; size_t pos; while ((pos = NewName.find_first_not_of(legal_elements)) != std::string::npos) { - char old_c = NewName.at(pos); - char new_str[16]; - sprintf(new_str, "%d", (int)old_c); - NewName = NewName.replace(pos, 1, new_str); + std::ostringstream NumStream; + NumStream << (int)NewName.at(pos); + NewName = NewName.replace(pos, 1, NumStream.str()); } return NewName; @@ -699,7 +698,7 @@ PrototypeAST* SessionContext::getPrototypeAST(const std::string &Name) { if (I != Prototypes.end()) return I->second.get(); return nullptr; -} +} class IRGenContext { public: @@ -750,11 +749,8 @@ Value *VariableExprAST::IRGen(IRGenContext &C) { // Look this variable up in the function. Value *V = C.NamedValues[Name]; - if (V == 0) { - char ErrStr[256]; - sprintf(ErrStr, "Unknown variable name %s", Name.c_str()); - return ErrorP(ErrStr); - } + if (V == 0) + return ErrorP("Unknown variable name '" + Name + "'"); // Load the value. return C.getBuilder().CreateLoad(V, Name.c_str()); @@ -1191,7 +1187,7 @@ static void HandleDefinition(SessionContext &S, KaleidoscopeJIT &J) { IRGenContext C(S); if (auto LF = F->IRGen(C)) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "Read function definition:"); + std::cerr << "Read function definition:\n"; LF->dump(); #endif J.addModule(C.takeM()); @@ -1218,7 +1214,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { IRGenContext C(S); if (auto ExprFunc = F->IRGen(C)) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "Expression function:\n"); + std::cerr << "Expression function:\n"; ExprFunc->dump(); #endif // Add the CodeGen'd module to the JIT. Keep a handle to it: We can remove @@ -1234,7 +1230,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { #ifdef MINIMAL_STDERR_OUTPUT FP(); #else - fprintf(stderr, "Evaluated to %f\n", FP()); + std::cerr << "Evaluated to " << FP() << "\n"; #endif // Remove the function. @@ -1253,7 +1249,7 @@ static void MainLoop() { while (1) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif switch (CurTok) { case tok_eof: return; @@ -1309,10 +1305,12 @@ int main() { // Prime the first token. #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif getNextToken(); + std::cerr << std::fixed; + // Run the main "interpreter loop" now. MainLoop(); diff --git a/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp b/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp index 51a7dc8cf25..7c99478a5d2 100644 --- a/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp +++ b/examples/Kaleidoscope/Orc/lazy_irgen/toy.cpp @@ -13,8 +13,10 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Transforms/Scalar.h" #include -#include +#include +#include #include +#include #include #include using namespace llvm; @@ -270,14 +272,14 @@ static int GetTokPrecedence() { } template -std::unique_ptr ErrorU(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +std::unique_ptr ErrorU(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } template -T* ErrorP(const char *Str) { - fprintf(stderr, "Error: %s\n", Str); +T* ErrorP(const std::string &Str) { + std::cerr << "Error: " << Str << "\n"; return nullptr; } @@ -643,13 +645,11 @@ static std::unique_ptr ParseExtern() { //===----------------------------------------------------------------------===// // FIXME: Obviously we can do better than this -std::string GenerateUniqueName(const char *root) -{ +std::string GenerateUniqueName(const std::string &Root) { static int i = 0; - char s[16]; - sprintf(s, "%s%d", root, i++); - std::string S = s; - return S; + std::ostringstream NameStream; + NameStream << Root << ++i; + return NameStream.str(); } std::string MakeLegalFunctionName(std::string Name) @@ -669,10 +669,9 @@ std::string MakeLegalFunctionName(std::string Name) std::string legal_elements = "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; size_t pos; while ((pos = NewName.find_first_not_of(legal_elements)) != std::string::npos) { - char old_c = NewName.at(pos); - char new_str[16]; - sprintf(new_str, "%d", (int)old_c); - NewName = NewName.replace(pos, 1, new_str); + std::ostringstream NumStream; + NumStream << (int)NewName.at(pos); + NewName = NewName.replace(pos, 1, NumStream.str()); } return NewName; @@ -700,7 +699,7 @@ PrototypeAST* SessionContext::getPrototypeAST(const std::string &Name) { if (I != Prototypes.end()) return I->second.get(); return nullptr; -} +} class IRGenContext { public: @@ -751,11 +750,8 @@ Value *VariableExprAST::IRGen(IRGenContext &C) { // Look this variable up in the function. Value *V = C.NamedValues[Name]; - if (V == 0) { - char ErrStr[256]; - sprintf(ErrStr, "Unknown variable name %s", Name.c_str()); - return ErrorP(ErrStr); - } + if (V == 0) + return ErrorP("Unknown variable name '" + Name + "'"); // Load the value. return C.getBuilder().CreateLoad(V, Name.c_str()); @@ -1237,7 +1233,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { IRGenContext C(S); if (auto ExprFunc = F->IRGen(C)) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "Expression function:\n"); + std::cerr << "Expression function:\n"; ExprFunc->dump(); #endif // Add the CodeGen'd module to the JIT. Keep a handle to it: We can remove @@ -1253,7 +1249,7 @@ static void HandleTopLevelExpression(SessionContext &S, KaleidoscopeJIT &J) { #ifdef MINIMAL_STDERR_OUTPUT FP(); #else - fprintf(stderr, "Evaluated to %f\n", FP()); + std::cerr << "Evaluated to " << FP() << "\n"; #endif // Remove the function. @@ -1272,7 +1268,7 @@ static void MainLoop() { while (1) { #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif switch (CurTok) { case tok_eof: return; @@ -1328,10 +1324,12 @@ int main() { // Prime the first token. #ifndef MINIMAL_STDERR_OUTPUT - fprintf(stderr, "ready> "); + std::cerr << "ready> "; #endif getNextToken(); + std::cerr << std::fixed; + // Run the main "interpreter loop" now. MainLoop();