Alien-SmokeQt
view release on metacpan or search on metacpan
generator/parser/rpp/pp-engine.h view on Meta::CPAN
PP_DEFINE_BIN_OP(^, ^=)
PP_DEFINE_BIN_OP2(<)
PP_DEFINE_BIN_OP2(>)
PP_DEFINE_BIN_OP2(!=)
PP_DEFINE_BIN_OP2(==)
PP_DEFINE_BIN_OP2(<=)
PP_DEFINE_BIN_OP2(>=)
PP_DEFINE_BIN_OP2(&&)
PP_DEFINE_BIN_OP2(||)
#undef PP_DEFINE_BIN_OP
};
class CPPPARSER_EXPORT pp
{
Environment* m_environment;
pp_macro_expander expand;
pp_skip_identifier skip_identifier;
pp_skip_comment_or_divop skip_comment_or_divop;
pp_skip_blanks skip_blanks;
pp_skip_number skip_number;
QStack<IndexedString> m_files;
Preprocessor* m_preprocessor;
QList<Problem*> m_problems;
enum { MAX_LEVEL = 512 };
int _M_skipping[MAX_LEVEL];
int _M_true_test[MAX_LEVEL];
int iflevel;
int nextToken;
bool haveNextToken;
bool hideNext;
bool hadGuardCandidate, checkGuardEnd;
IndexedString guardCandidate;
union {
long token_value;
unsigned long token_uvalue;
};
IndexedString token_text;
enum TOKEN_TYPE
{
TOKENS_START = 1000,
TOKEN_NUMBER,
TOKEN_UNUMBER,
TOKEN_IDENTIFIER,
TOKEN_DEFINED,
TOKEN_LT_LT,
TOKEN_LT_EQ,
TOKEN_GT_GT,
TOKEN_GT_EQ,
TOKEN_EQ_EQ,
TOKEN_NOT_EQ,
TOKEN_OR_OR,
TOKEN_AND_AND,
TOKENS_END
};
public:
pp(Preprocessor* preprocessor);
~pp();
Preprocessor* preprocessor();
enum StringType { File, Data };
///@todo Remove
inline QString currentFileNameString () const { return m_files.top().str(); }
inline IndexedString currentFileName () const { return m_files.top(); }
Value eval_expression (Stream& input);
/** Read file @p fileName and preprocess
* Currently the file is expected to be utf8-encoded. */
PreprocessedContents processFile(const QString& fileName);
/** Preprocess @p fileName with content @p data. Do not actually open file @p fileName
* Currently the file is expected to be utf8-encoded. */
PreprocessedContents processFile(const QString& fileName, const QByteArray& data);
void operator () (Stream& input, Stream& output);
void checkMarkNeeded(Stream& input, Stream& output);
bool hideNextMacro() const;
void setHideNextMacro(bool hideNext);
Environment* environment() const;
// once set, belongs to the engine
void setEnvironment(Environment* env);
const QList<Problem*>& problems() const;
void problemEncountered(Problem *problem);
//Returns a hash-value computed from all until currently open branching-conditions and their decisions(like #ifdef's)
uint branchingHash() const;
private:
void processFileInternal(const QString& fileName, const QByteArray& fileContent, PreprocessedContents& result);
int skipping() const;
bool test_if_level();
void createProblem(Stream& input, const QString& description);
void skip(Stream& input, Stream& output, bool outputText = true);
Value eval_primary(Stream& input);
Value eval_multiplicative(Stream& input);
Value eval_additive(Stream& input);
Value eval_shift(Stream& input);
Value eval_relational(Stream& input);
Value eval_equality(Stream& input);
( run in 0.772 second using v1.01-cache-2.11-cpan-39bf76dae61 )