OpenVDB
12.0.0
|
Logger for collecting errors and warnings that occur during AX compilation. More...
#include <openvdb_ax/compiler/Logger.h>
Public Types | |
using | Ptr = std::shared_ptr< Logger > |
using | CodeLocation = std::pair< size_t, size_t > |
using | OutputFunction = std::function< void(const std::string &)> |
Public Member Functions | |
Logger (const OutputFunction &errors=[](const std::string &msg){std::cerr<< msg<< std::endl;}, const OutputFunction &warnings=[](const std::string &){}) | |
Construct a Logger with optional error and warning output functions, defaults stream errors to std::cerr and suppress warnings. More... | |
~Logger () | |
bool | error (const std::string &message, const CodeLocation &lineCol=CodeLocation(0, 0)) |
Log a compiler error and its offending code location. If the offending location is (0,0), the message is treated as not having an associated code location. More... | |
bool | error (const std::string &message, const ax::ast::Node *node) |
Log a compiler error using the offending AST node. Used in AST traversal. More... | |
bool | warning (const std::string &message, const CodeLocation &lineCol=CodeLocation(0, 0)) |
Log a compiler warning and its offending code location. If the offending location is (0,0), the message is treated as not having an associated code location. More... | |
bool | warning (const std::string &message, const ax::ast::Node *node) |
Log a compiler warning using the offending AST node. Used in AST traversal. More... | |
size_t | errors () const |
Returns the number of errors that have been encountered. More... | |
size_t | warnings () const |
Returns the number of warnings that have been encountered. More... | |
bool | hasError () const |
Returns true if an error has been found, false otherwise. More... | |
bool | hasWarning () const |
Returns true if a warning has been found, false otherwise. More... | |
bool | atErrorLimit () const |
Returns true if it has errored and the max errors has been hit. More... | |
void | clear () |
Clear the tree-code mapping and reset the number of errors/warnings. More... | |
void | setWarningsAsErrors (const bool warnAsError=false) |
Set any warnings that are encountered to be promoted to errors. More... | |
bool | getWarningsAsErrors () const |
Returns if warning are promoted to errors. More... | |
void | setMaxErrors (const size_t maxErrors=0) |
Sets the maximum number of errors that are allowed before compilation should exit. More... | |
size_t | getMaxErrors () const |
Returns the number of allowed errors. More... | |
void | setNumberedOutput (const bool numbered=true) |
Error/warning formatting options. More... | |
void | setIndent (const size_t ident=0) |
Number of spaces to indent every new line before the message is formatted. More... | |
void | setErrorPrefix (const char *prefix="error: ") |
Set a prefix for each warning message. More... | |
void | setWarningPrefix (const char *prefix="warning: ") |
Set a prefix for each warning message. More... | |
void | setPrintLines (const bool print=true) |
Set whether the output should include the offending line of code. More... | |
bool | getNumberedOutput () const |
Returns whether the messages will be numbered. More... | |
size_t | getIndent () const |
Returns the number of spaces to be printed before every new line. More... | |
const char * | getErrorPrefix () const |
Returns the prefix for each error message. More... | |
const char * | getWarningPrefix () const |
Returns the prefix for each warning message. More... | |
bool | getPrintLines () const |
Returns whether the messages will include the line of offending code. More... | |
void | setSourceCode (const char *code) |
Set the source code that lines can be printed from if an error or warning is raised. More... | |
void | setSourceTree (openvdb::ax::ast::Tree::ConstPtr tree) |
Set the AST source tree which will be used as reference for the locations of nodes when resolving line and column numbers during AST traversal. More... | |
void | addNodeLocation (const ax::ast::Node *node, const CodeLocation &location) |
Add a node to the code location map. More... | |
Friends | |
class | ::TestLogger |
Logger for collecting errors and warnings that occur during AX compilation.
Error and warning output can be customised using the function pointer arguments. These require a function that takes the formatted error or warning string and handles the output, returning void. e.g. void streamCerr(const std::string& message) { std::cerr << message << std::endl; }
The Logger handles formatting of messages, tracking of number of errors or warnings and retrieval of errored lines of code to be printed if needed. Use of the Logger to track new errors or warnings can be done either with the line/column numbers directly (e.g during lexing and parsing where the code is being iterated through) or referring to the AST node using its position in the Tree (e.g. during codegen where only the AST node is known directly, not the corresponding line/column numbers). To find the line or column numbers for events logged using AST nodes, the Logger stores a map of Node* to line and column numbers. This must be populated e.g. during parsing, to allow resolution of code locations when they are not explicitly available. The Logger also stores a pointer to the AST Tree that these nodes belong to and the code used to create it.
using CodeLocation = std::pair<size_t, size_t> |
using OutputFunction = std::function<void(const std::string&)> |
Logger | ( | const OutputFunction & | errors = [](const std::string &msg){std::cerr<< msg<< std::endl;} , |
const OutputFunction & | warnings = [](const std::string &){} |
||
) |
Construct a Logger with optional error and warning output functions, defaults stream errors to std::cerr and suppress warnings.
errors | Optional error output function |
warnings | Optional warning output function |
~Logger | ( | ) |
void addNodeLocation | ( | const ax::ast::Node * | node, |
const CodeLocation & | location | ||
) |
Add a node to the code location map.
node | Pointer to AST node |
location | Line and column number in code |
|
inline |
Returns true if it has errored and the max errors has been hit.
void clear | ( | ) |
Clear the tree-code mapping and reset the number of errors/warnings.
bool error | ( | const std::string & | message, |
const CodeLocation & | lineCol = CodeLocation(0, 0) |
||
) |
Log a compiler error and its offending code location. If the offending location is (0,0), the message is treated as not having an associated code location.
message | The error message |
lineCol | The line/column number of the offending code |
bool error | ( | const std::string & | message, |
const ax::ast::Node * | node | ||
) |
Log a compiler error using the offending AST node. Used in AST traversal.
message | The error message |
node | The offending AST node causing the error |
|
inline |
Returns the number of errors that have been encountered.
const char* getErrorPrefix | ( | ) | const |
Returns the prefix for each error message.
size_t getIndent | ( | ) | const |
Returns the number of spaces to be printed before every new line.
size_t getMaxErrors | ( | ) | const |
Returns the number of allowed errors.
bool getNumberedOutput | ( | ) | const |
Returns whether the messages will be numbered.
bool getPrintLines | ( | ) | const |
Returns whether the messages will include the line of offending code.
const char* getWarningPrefix | ( | ) | const |
Returns the prefix for each warning message.
bool getWarningsAsErrors | ( | ) | const |
Returns if warning are promoted to errors.
|
inline |
Returns true if an error has been found, false otherwise.
|
inline |
Returns true if a warning has been found, false otherwise.
void setErrorPrefix | ( | const char * | prefix = "error: " | ) |
Set a prefix for each warning message.
void setIndent | ( | const size_t | ident = 0 | ) |
Number of spaces to indent every new line before the message is formatted.
void setMaxErrors | ( | const size_t | maxErrors = 0 | ) |
Sets the maximum number of errors that are allowed before compilation should exit.
maxErrors | The number of allowed errors |
void setNumberedOutput | ( | const bool | numbered = true | ) |
Error/warning formatting options.
Set whether the output should number the errors/warnings
numbered | If true, messages will be numbered |
void setPrintLines | ( | const bool | print = true | ) |
Set whether the output should include the offending line of code.
If true, offending lines of code will be appended to the output message |
void setSourceCode | ( | const char * | code | ) |
Set the source code that lines can be printed from if an error or warning is raised.
code | The AX code as a c-style string |
void setSourceTree | ( | openvdb::ax::ast::Tree::ConstPtr | tree | ) |
Set the AST source tree which will be used as reference for the locations of nodes when resolving line and column numbers during AST traversal.
These functions are only to be used during parsing to allow line and column number retrieval during later stages of compilation when working solely with an AST
tree | Pointer to const AST |
void setWarningPrefix | ( | const char * | prefix = "warning: " | ) |
Set a prefix for each warning message.
void setWarningsAsErrors | ( | const bool | warnAsError = false | ) |
Set any warnings that are encountered to be promoted to errors.
warnAsError | If true, warnings will be treated as errors |
bool warning | ( | const std::string & | message, |
const CodeLocation & | lineCol = CodeLocation(0, 0) |
||
) |
Log a compiler warning and its offending code location. If the offending location is (0,0), the message is treated as not having an associated code location.
message | The warning message |
lineCol | The line/column number of the offending code |
bool warning | ( | const std::string & | message, |
const ax::ast::Node * | node | ||
) |
Log a compiler warning using the offending AST node. Used in AST traversal.
message | The warning message |
node | The offending AST node causing the warning |
|
inline |
Returns the number of warnings that have been encountered.
|
friend |