X-Git-Url: https://git.saurik.com/cycript.git/blobdiff_plain/a0be43fc10f28843e7a477d0c5354ea5e82b3140..90cf684cbbbb84de1f9f9892ddd9e3d54f5cba00:/Parser.hpp?ds=sidebyside diff --git a/Parser.hpp b/Parser.hpp index afb2c66..d915305 100644 --- a/Parser.hpp +++ b/Parser.hpp @@ -469,19 +469,44 @@ enum CYState { CYNewLine }; +class CYStream : + public std::istream +{ + private: + class CYBuffer : + public std::streambuf + { + public: + CYBuffer(const char *start, const char *end) { + setg(const_cast(start), const_cast(start), const_cast(end)); + } + } buffer_; + + public: + CYStream(const char *start, const char *end) : + std::istream(&buffer_), + buffer_(start, end) + { + } +}; + class CYDriver { public: void *scanner_; CYState state_; - bool nobrace_; std::stack in_; - const char *data_; - size_t size_; - FILE *file_; + struct { + bool AtImplementation; + bool Function; + bool OpenBrace; + } no_; + + std::istream &data_; bool strict_; + bool commented_; enum Condition { RegExpCondition, @@ -534,7 +559,7 @@ class CYDriver { void ScannerDestroy(); public: - CYDriver(const std::string &filename = ""); + CYDriver(std::istream &data, const std::string &filename = ""); ~CYDriver(); Condition GetCondition();