mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-22 10:16:43 +00:00
[Kaleidoscope] Rename Error -> LogError in Chapters 2-5.
This keeps the naming consistent with Chapters 6-8, where Error was renamed to LogError in r264426 to avoid clashes with the new Error class in libSupport. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264427 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d7b240afb9
commit
215b61f08e
@ -176,17 +176,17 @@ be parsed.
|
||||
.. code-block:: c++
|
||||
|
||||
|
||||
/// Error* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> Error(const char *Str) {
|
||||
fprintf(stderr, "Error: %s\n", Str);
|
||||
/// LogError* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> LogError(const char *Str) {
|
||||
fprintf(stderr, "LogError: %s\n", Str);
|
||||
return nullptr;
|
||||
}
|
||||
std::unique_ptr<PrototypeAST> ErrorP(const char *Str) {
|
||||
Error(Str);
|
||||
std::unique_ptr<PrototypeAST> LogErrorP(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
The ``Error`` routines are simple helper routines that our parser will
|
||||
The ``LogError`` routines are simple helper routines that our parser will
|
||||
use to handle errors. The error recovery in our parser will not be the
|
||||
best and is not particular user-friendly, but it will be enough for our
|
||||
tutorial. These routines make it easier to handle errors in routines
|
||||
@ -233,7 +233,7 @@ the parenthesis operator is defined like this:
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != ')')
|
||||
return Error("expected ')'");
|
||||
return LogError("expected ')'");
|
||||
getNextToken(); // eat ).
|
||||
return V;
|
||||
}
|
||||
@ -241,7 +241,7 @@ the parenthesis operator is defined like this:
|
||||
This function illustrates a number of interesting things about the
|
||||
parser:
|
||||
|
||||
1) It shows how we use the Error routines. When called, this function
|
||||
1) It shows how we use the LogError routines. When called, this function
|
||||
expects that the current token is a '(' token, but after parsing the
|
||||
subexpression, it is possible that there is no ')' waiting. For example,
|
||||
if the user types in "(4 x" instead of "(4)", the parser should emit an
|
||||
@ -288,7 +288,7 @@ function calls:
|
||||
break;
|
||||
|
||||
if (CurTok != ',')
|
||||
return Error("Expected ')' or ',' in argument list");
|
||||
return LogError("Expected ')' or ',' in argument list");
|
||||
getNextToken();
|
||||
}
|
||||
}
|
||||
@ -324,7 +324,7 @@ primary expression, we need to determine what sort of expression it is:
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -571,20 +571,20 @@ expressions):
|
||||
/// ::= id '(' id* ')'
|
||||
static std::unique_ptr<PrototypeAST> ParsePrototype() {
|
||||
if (CurTok != tok_identifier)
|
||||
return ErrorP("Expected function name in prototype");
|
||||
return LogErrorP("Expected function name in prototype");
|
||||
|
||||
std::string FnName = IdentifierStr;
|
||||
getNextToken();
|
||||
|
||||
if (CurTok != '(')
|
||||
return ErrorP("Expected '(' in prototype");
|
||||
return LogErrorP("Expected '(' in prototype");
|
||||
|
||||
// Read the list of argument names.
|
||||
std::vector<std::string> ArgNames;
|
||||
while (getNextToken() == tok_identifier)
|
||||
ArgNames.push_back(IdentifierStr);
|
||||
if (CurTok != ')')
|
||||
return ErrorP("Expected ')' in prototype");
|
||||
return LogErrorP("Expected ')' in prototype");
|
||||
|
||||
// success.
|
||||
getNextToken(); // eat ')'.
|
||||
|
@ -67,7 +67,7 @@ way to model this. Again, this tutorial won't dwell on good software
|
||||
engineering practices: for our purposes, adding a virtual method is
|
||||
simplest.
|
||||
|
||||
The second thing we want is an "Error" method like we used for the
|
||||
The second thing we want is an "LogError" method like we used for the
|
||||
parser, which will be used to report errors found during code generation
|
||||
(for example, use of an undeclared parameter):
|
||||
|
||||
@ -77,8 +77,8 @@ parser, which will be used to report errors found during code generation
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value*> NamedValues;
|
||||
|
||||
Value *ErrorV(const char *Str) {
|
||||
Error(Str);
|
||||
Value *LogErrorV(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@ are all uniqued together and shared. For this reason, the API uses the
|
||||
// Look this variable up in the function.
|
||||
Value *V = NamedValues[Name];
|
||||
if (!V)
|
||||
ErrorV("Unknown variable name");
|
||||
LogErrorV("Unknown variable name");
|
||||
return V;
|
||||
}
|
||||
|
||||
@ -168,7 +168,7 @@ variables <LangImpl7.html#user-defined-local-variables>`_.
|
||||
return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
|
||||
"booltmp");
|
||||
default:
|
||||
return ErrorV("invalid binary operator");
|
||||
return LogErrorV("invalid binary operator");
|
||||
}
|
||||
}
|
||||
|
||||
@ -214,11 +214,11 @@ would return 0.0 and -1.0, depending on the input value.
|
||||
// Look up the name in the global module table.
|
||||
Function *CalleeF = TheModule->getFunction(Callee);
|
||||
if (!CalleeF)
|
||||
return ErrorV("Unknown function referenced");
|
||||
return LogErrorV("Unknown function referenced");
|
||||
|
||||
// If argument mismatch error.
|
||||
if (CalleeF->arg_size() != Args.size())
|
||||
return ErrorV("Incorrect # arguments passed");
|
||||
return LogErrorV("Incorrect # arguments passed");
|
||||
|
||||
std::vector<Value *> ArgsV;
|
||||
for (unsigned i = 0, e = Args.size(); i != e; ++i) {
|
||||
@ -328,7 +328,7 @@ codegen and attach a function body.
|
||||
return nullptr;
|
||||
|
||||
if (!TheFunction->empty())
|
||||
return (Function*)ErrorV("Function cannot be redefined.");
|
||||
return (Function*)LogErrorV("Function cannot be redefined.");
|
||||
|
||||
|
||||
For function definitions, we start by searching TheModule's symbol table for an
|
||||
|
@ -127,7 +127,7 @@ First we define a new parsing function:
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != tok_then)
|
||||
return Error("expected then");
|
||||
return LogError("expected then");
|
||||
getNextToken(); // eat the then
|
||||
|
||||
auto Then = ParseExpression();
|
||||
@ -135,7 +135,7 @@ First we define a new parsing function:
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != tok_else)
|
||||
return Error("expected else");
|
||||
return LogError("expected else");
|
||||
|
||||
getNextToken();
|
||||
|
||||
@ -154,7 +154,7 @@ Next we hook it up as a primary expression:
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -518,13 +518,13 @@ value to null in the AST node:
|
||||
getNextToken(); // eat the for.
|
||||
|
||||
if (CurTok != tok_identifier)
|
||||
return Error("expected identifier after for");
|
||||
return LogError("expected identifier after for");
|
||||
|
||||
std::string IdName = IdentifierStr;
|
||||
getNextToken(); // eat identifier.
|
||||
|
||||
if (CurTok != '=')
|
||||
return Error("expected '=' after for");
|
||||
return LogError("expected '=' after for");
|
||||
getNextToken(); // eat '='.
|
||||
|
||||
|
||||
@ -532,7 +532,7 @@ value to null in the AST node:
|
||||
if (!Start)
|
||||
return nullptr;
|
||||
if (CurTok != ',')
|
||||
return Error("expected ',' after for start value");
|
||||
return LogError("expected ',' after for start value");
|
||||
getNextToken();
|
||||
|
||||
auto End = ParseExpression();
|
||||
@ -549,7 +549,7 @@ value to null in the AST node:
|
||||
}
|
||||
|
||||
if (CurTok != tok_in)
|
||||
return Error("expected 'in' after for");
|
||||
return LogError("expected 'in' after for");
|
||||
getNextToken(); // eat 'in'.
|
||||
|
||||
auto Body = ParseExpression();
|
||||
|
@ -187,13 +187,13 @@ static int GetTokPrecedence() {
|
||||
return TokPrec;
|
||||
}
|
||||
|
||||
/// Error* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> Error(const char *Str) {
|
||||
/// LogError* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> LogError(const char *Str) {
|
||||
fprintf(stderr, "Error: %s\n", Str);
|
||||
return nullptr;
|
||||
}
|
||||
std::unique_ptr<PrototypeAST> ErrorP(const char *Str) {
|
||||
Error(Str);
|
||||
std::unique_ptr<PrototypeAST> LogErrorP(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -214,7 +214,7 @@ static std::unique_ptr<ExprAST> ParseParenExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != ')')
|
||||
return Error("expected ')'");
|
||||
return LogError("expected ')'");
|
||||
getNextToken(); // eat ).
|
||||
return V;
|
||||
}
|
||||
@ -244,7 +244,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
break;
|
||||
|
||||
if (CurTok != ',')
|
||||
return Error("Expected ')' or ',' in argument list");
|
||||
return LogError("Expected ')' or ',' in argument list");
|
||||
getNextToken();
|
||||
}
|
||||
}
|
||||
@ -262,7 +262,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -324,19 +324,19 @@ static std::unique_ptr<ExprAST> ParseExpression() {
|
||||
/// ::= id '(' id* ')'
|
||||
static std::unique_ptr<PrototypeAST> ParsePrototype() {
|
||||
if (CurTok != tok_identifier)
|
||||
return ErrorP("Expected function name in prototype");
|
||||
return LogErrorP("Expected function name in prototype");
|
||||
|
||||
std::string FnName = IdentifierStr;
|
||||
getNextToken();
|
||||
|
||||
if (CurTok != '(')
|
||||
return ErrorP("Expected '(' in prototype");
|
||||
return LogErrorP("Expected '(' in prototype");
|
||||
|
||||
std::vector<std::string> ArgNames;
|
||||
while (getNextToken() == tok_identifier)
|
||||
ArgNames.push_back(IdentifierStr);
|
||||
if (CurTok != ')')
|
||||
return ErrorP("Expected ')' in prototype");
|
||||
return LogErrorP("Expected ')' in prototype");
|
||||
|
||||
// success.
|
||||
getNextToken(); // eat ')'.
|
||||
|
@ -189,14 +189,14 @@ static int GetTokPrecedence() {
|
||||
return TokPrec;
|
||||
}
|
||||
|
||||
/// Error* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> Error(const char *Str) {
|
||||
/// LogError* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> LogError(const char *Str) {
|
||||
fprintf(stderr, "Error: %s\n", Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<PrototypeAST> ErrorP(const char *Str) {
|
||||
Error(Str);
|
||||
std::unique_ptr<PrototypeAST> LogErrorP(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -217,7 +217,7 @@ static std::unique_ptr<ExprAST> ParseParenExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != ')')
|
||||
return Error("expected ')'");
|
||||
return LogError("expected ')'");
|
||||
getNextToken(); // eat ).
|
||||
return V;
|
||||
}
|
||||
@ -247,7 +247,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
break;
|
||||
|
||||
if (CurTok != ',')
|
||||
return Error("Expected ')' or ',' in argument list");
|
||||
return LogError("Expected ')' or ',' in argument list");
|
||||
getNextToken();
|
||||
}
|
||||
}
|
||||
@ -265,7 +265,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -327,19 +327,19 @@ static std::unique_ptr<ExprAST> ParseExpression() {
|
||||
/// ::= id '(' id* ')'
|
||||
static std::unique_ptr<PrototypeAST> ParsePrototype() {
|
||||
if (CurTok != tok_identifier)
|
||||
return ErrorP("Expected function name in prototype");
|
||||
return LogErrorP("Expected function name in prototype");
|
||||
|
||||
std::string FnName = IdentifierStr;
|
||||
getNextToken();
|
||||
|
||||
if (CurTok != '(')
|
||||
return ErrorP("Expected '(' in prototype");
|
||||
return LogErrorP("Expected '(' in prototype");
|
||||
|
||||
std::vector<std::string> ArgNames;
|
||||
while (getNextToken() == tok_identifier)
|
||||
ArgNames.push_back(IdentifierStr);
|
||||
if (CurTok != ')')
|
||||
return ErrorP("Expected ')' in prototype");
|
||||
return LogErrorP("Expected ')' in prototype");
|
||||
|
||||
// success.
|
||||
getNextToken(); // eat ')'.
|
||||
@ -384,8 +384,8 @@ static std::unique_ptr<Module> TheModule;
|
||||
static IRBuilder<> Builder(getGlobalContext());
|
||||
static std::map<std::string, Value *> NamedValues;
|
||||
|
||||
Value *ErrorV(const char *Str) {
|
||||
Error(Str);
|
||||
Value *LogErrorV(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -397,7 +397,7 @@ Value *VariableExprAST::codegen() {
|
||||
// Look this variable up in the function.
|
||||
Value *V = NamedValues[Name];
|
||||
if (!V)
|
||||
return ErrorV("Unknown variable name");
|
||||
return LogErrorV("Unknown variable name");
|
||||
return V;
|
||||
}
|
||||
|
||||
@ -420,7 +420,7 @@ Value *BinaryExprAST::codegen() {
|
||||
return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
|
||||
"booltmp");
|
||||
default:
|
||||
return ErrorV("invalid binary operator");
|
||||
return LogErrorV("invalid binary operator");
|
||||
}
|
||||
}
|
||||
|
||||
@ -428,11 +428,11 @@ Value *CallExprAST::codegen() {
|
||||
// Look up the name in the global module table.
|
||||
Function *CalleeF = TheModule->getFunction(Callee);
|
||||
if (!CalleeF)
|
||||
return ErrorV("Unknown function referenced");
|
||||
return LogErrorV("Unknown function referenced");
|
||||
|
||||
// If argument mismatch error.
|
||||
if (CalleeF->arg_size() != Args.size())
|
||||
return ErrorV("Incorrect # arguments passed");
|
||||
return LogErrorV("Incorrect # arguments passed");
|
||||
|
||||
std::vector<Value *> ArgsV;
|
||||
for (unsigned i = 0, e = Args.size(); i != e; ++i) {
|
||||
|
@ -196,14 +196,14 @@ static int GetTokPrecedence() {
|
||||
return TokPrec;
|
||||
}
|
||||
|
||||
/// Error* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> Error(const char *Str) {
|
||||
/// LogError* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> LogError(const char *Str) {
|
||||
fprintf(stderr, "Error: %s\n", Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<PrototypeAST> ErrorP(const char *Str) {
|
||||
Error(Str);
|
||||
std::unique_ptr<PrototypeAST> LogErrorP(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -224,7 +224,7 @@ static std::unique_ptr<ExprAST> ParseParenExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != ')')
|
||||
return Error("expected ')'");
|
||||
return LogError("expected ')'");
|
||||
getNextToken(); // eat ).
|
||||
return V;
|
||||
}
|
||||
@ -254,7 +254,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
break;
|
||||
|
||||
if (CurTok != ',')
|
||||
return Error("Expected ')' or ',' in argument list");
|
||||
return LogError("Expected ')' or ',' in argument list");
|
||||
getNextToken();
|
||||
}
|
||||
}
|
||||
@ -272,7 +272,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -334,19 +334,19 @@ static std::unique_ptr<ExprAST> ParseExpression() {
|
||||
/// ::= id '(' id* ')'
|
||||
static std::unique_ptr<PrototypeAST> ParsePrototype() {
|
||||
if (CurTok != tok_identifier)
|
||||
return ErrorP("Expected function name in prototype");
|
||||
return LogErrorP("Expected function name in prototype");
|
||||
|
||||
std::string FnName = IdentifierStr;
|
||||
getNextToken();
|
||||
|
||||
if (CurTok != '(')
|
||||
return ErrorP("Expected '(' in prototype");
|
||||
return LogErrorP("Expected '(' in prototype");
|
||||
|
||||
std::vector<std::string> ArgNames;
|
||||
while (getNextToken() == tok_identifier)
|
||||
ArgNames.push_back(IdentifierStr);
|
||||
if (CurTok != ')')
|
||||
return ErrorP("Expected ')' in prototype");
|
||||
return LogErrorP("Expected ')' in prototype");
|
||||
|
||||
// success.
|
||||
getNextToken(); // eat ')'.
|
||||
@ -394,8 +394,8 @@ static std::unique_ptr<legacy::FunctionPassManager> TheFPM;
|
||||
static std::unique_ptr<KaleidoscopeJIT> TheJIT;
|
||||
static std::map<std::string, std::unique_ptr<PrototypeAST>> FunctionProtos;
|
||||
|
||||
Value *ErrorV(const char *Str) {
|
||||
Error(Str);
|
||||
Value *LogErrorV(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -422,7 +422,7 @@ Value *VariableExprAST::codegen() {
|
||||
// Look this variable up in the function.
|
||||
Value *V = NamedValues[Name];
|
||||
if (!V)
|
||||
return ErrorV("Unknown variable name");
|
||||
return LogErrorV("Unknown variable name");
|
||||
return V;
|
||||
}
|
||||
|
||||
@ -445,7 +445,7 @@ Value *BinaryExprAST::codegen() {
|
||||
return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
|
||||
"booltmp");
|
||||
default:
|
||||
return ErrorV("invalid binary operator");
|
||||
return LogErrorV("invalid binary operator");
|
||||
}
|
||||
}
|
||||
|
||||
@ -453,11 +453,11 @@ Value *CallExprAST::codegen() {
|
||||
// Look up the name in the global module table.
|
||||
Function *CalleeF = getFunction(Callee);
|
||||
if (!CalleeF)
|
||||
return ErrorV("Unknown function referenced");
|
||||
return LogErrorV("Unknown function referenced");
|
||||
|
||||
// If argument mismatch error.
|
||||
if (CalleeF->arg_size() != Args.size())
|
||||
return ErrorV("Incorrect # arguments passed");
|
||||
return LogErrorV("Incorrect # arguments passed");
|
||||
|
||||
std::vector<Value *> ArgsV;
|
||||
for (unsigned i = 0, e = Args.size(); i != e; ++i) {
|
||||
|
@ -238,14 +238,14 @@ static int GetTokPrecedence() {
|
||||
return TokPrec;
|
||||
}
|
||||
|
||||
/// Error* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> Error(const char *Str) {
|
||||
/// LogError* - These are little helper functions for error handling.
|
||||
std::unique_ptr<ExprAST> LogError(const char *Str) {
|
||||
fprintf(stderr, "Error: %s\n", Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::unique_ptr<PrototypeAST> ErrorP(const char *Str) {
|
||||
Error(Str);
|
||||
std::unique_ptr<PrototypeAST> LogErrorP(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -266,7 +266,7 @@ static std::unique_ptr<ExprAST> ParseParenExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != ')')
|
||||
return Error("expected ')'");
|
||||
return LogError("expected ')'");
|
||||
getNextToken(); // eat ).
|
||||
return V;
|
||||
}
|
||||
@ -296,7 +296,7 @@ static std::unique_ptr<ExprAST> ParseIdentifierExpr() {
|
||||
break;
|
||||
|
||||
if (CurTok != ',')
|
||||
return Error("Expected ')' or ',' in argument list");
|
||||
return LogError("Expected ')' or ',' in argument list");
|
||||
getNextToken();
|
||||
}
|
||||
}
|
||||
@ -317,7 +317,7 @@ static std::unique_ptr<ExprAST> ParseIfExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != tok_then)
|
||||
return Error("expected then");
|
||||
return LogError("expected then");
|
||||
getNextToken(); // eat the then
|
||||
|
||||
auto Then = ParseExpression();
|
||||
@ -325,7 +325,7 @@ static std::unique_ptr<ExprAST> ParseIfExpr() {
|
||||
return nullptr;
|
||||
|
||||
if (CurTok != tok_else)
|
||||
return Error("expected else");
|
||||
return LogError("expected else");
|
||||
|
||||
getNextToken();
|
||||
|
||||
@ -342,20 +342,20 @@ static std::unique_ptr<ExprAST> ParseForExpr() {
|
||||
getNextToken(); // eat the for.
|
||||
|
||||
if (CurTok != tok_identifier)
|
||||
return Error("expected identifier after for");
|
||||
return LogError("expected identifier after for");
|
||||
|
||||
std::string IdName = IdentifierStr;
|
||||
getNextToken(); // eat identifier.
|
||||
|
||||
if (CurTok != '=')
|
||||
return Error("expected '=' after for");
|
||||
return LogError("expected '=' after for");
|
||||
getNextToken(); // eat '='.
|
||||
|
||||
auto Start = ParseExpression();
|
||||
if (!Start)
|
||||
return nullptr;
|
||||
if (CurTok != ',')
|
||||
return Error("expected ',' after for start value");
|
||||
return LogError("expected ',' after for start value");
|
||||
getNextToken();
|
||||
|
||||
auto End = ParseExpression();
|
||||
@ -372,7 +372,7 @@ static std::unique_ptr<ExprAST> ParseForExpr() {
|
||||
}
|
||||
|
||||
if (CurTok != tok_in)
|
||||
return Error("expected 'in' after for");
|
||||
return LogError("expected 'in' after for");
|
||||
getNextToken(); // eat 'in'.
|
||||
|
||||
auto Body = ParseExpression();
|
||||
@ -392,7 +392,7 @@ static std::unique_ptr<ExprAST> ParseForExpr() {
|
||||
static std::unique_ptr<ExprAST> ParsePrimary() {
|
||||
switch (CurTok) {
|
||||
default:
|
||||
return Error("unknown token when expecting an expression");
|
||||
return LogError("unknown token when expecting an expression");
|
||||
case tok_identifier:
|
||||
return ParseIdentifierExpr();
|
||||
case tok_number:
|
||||
@ -458,19 +458,19 @@ static std::unique_ptr<ExprAST> ParseExpression() {
|
||||
/// ::= id '(' id* ')'
|
||||
static std::unique_ptr<PrototypeAST> ParsePrototype() {
|
||||
if (CurTok != tok_identifier)
|
||||
return ErrorP("Expected function name in prototype");
|
||||
return LogErrorP("Expected function name in prototype");
|
||||
|
||||
std::string FnName = IdentifierStr;
|
||||
getNextToken();
|
||||
|
||||
if (CurTok != '(')
|
||||
return ErrorP("Expected '(' in prototype");
|
||||
return LogErrorP("Expected '(' in prototype");
|
||||
|
||||
std::vector<std::string> ArgNames;
|
||||
while (getNextToken() == tok_identifier)
|
||||
ArgNames.push_back(IdentifierStr);
|
||||
if (CurTok != ')')
|
||||
return ErrorP("Expected ')' in prototype");
|
||||
return LogErrorP("Expected ')' in prototype");
|
||||
|
||||
// success.
|
||||
getNextToken(); // eat ')'.
|
||||
@ -518,8 +518,8 @@ static std::unique_ptr<legacy::FunctionPassManager> TheFPM;
|
||||
static std::unique_ptr<KaleidoscopeJIT> TheJIT;
|
||||
static std::map<std::string, std::unique_ptr<PrototypeAST>> FunctionProtos;
|
||||
|
||||
Value *ErrorV(const char *Str) {
|
||||
Error(Str);
|
||||
Value *LogErrorV(const char *Str) {
|
||||
LogError(Str);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@ -546,7 +546,7 @@ Value *VariableExprAST::codegen() {
|
||||
// Look this variable up in the function.
|
||||
Value *V = NamedValues[Name];
|
||||
if (!V)
|
||||
return ErrorV("Unknown variable name");
|
||||
return LogErrorV("Unknown variable name");
|
||||
return V;
|
||||
}
|
||||
|
||||
@ -569,7 +569,7 @@ Value *BinaryExprAST::codegen() {
|
||||
return Builder.CreateUIToFP(L, Type::getDoubleTy(getGlobalContext()),
|
||||
"booltmp");
|
||||
default:
|
||||
return ErrorV("invalid binary operator");
|
||||
return LogErrorV("invalid binary operator");
|
||||
}
|
||||
}
|
||||
|
||||
@ -577,11 +577,11 @@ Value *CallExprAST::codegen() {
|
||||
// Look up the name in the global module table.
|
||||
Function *CalleeF = getFunction(Callee);
|
||||
if (!CalleeF)
|
||||
return ErrorV("Unknown function referenced");
|
||||
return LogErrorV("Unknown function referenced");
|
||||
|
||||
// If argument mismatch error.
|
||||
if (CalleeF->arg_size() != Args.size())
|
||||
return ErrorV("Incorrect # arguments passed");
|
||||
return LogErrorV("Incorrect # arguments passed");
|
||||
|
||||
std::vector<Value *> ArgsV;
|
||||
for (unsigned i = 0, e = Args.size(); i != e; ++i) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user