diff options
Diffstat (limited to '')
-rw-r--r-- | cpp/sca/modules/eval/io.hpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/cpp/sca/modules/eval/io.hpp b/cpp/sca/modules/eval/io.hpp index 2a55e67bbf..a898a11440 100644 --- a/cpp/sca/modules/eval/io.hpp +++ b/cpp/sca/modules/eval/io.hpp @@ -92,6 +92,7 @@ const bool isQuote(const value& token) { return token == quoteSymbol; } +const value skipComment(std::istream& in); const value readQuoted(std::istream& in); const value readIdentifier(const char chr, std::istream& in); const value readString(const char chr, std::istream& in); @@ -102,6 +103,8 @@ const value readToken(std::istream& in) { const char firstChar = readChar(in); if(isWhitespace(firstChar)) return readToken(in); + if(firstChar == ';') + return skipComment(in); if(firstChar == '\'') return readQuoted(in); if(firstChar == '(') @@ -120,6 +123,13 @@ const value readToken(std::istream& in) { return readToken(in); } +const value skipComment(std::istream& in) { + const char nextChar = readChar(in); + if (nextChar == '\n') + return readToken(in); + return skipComment(in); +} + const value readQuoted(std::istream& in) { return mklist(quoteSymbol, readValue(in)); } @@ -181,6 +191,14 @@ const value readValue(std::istream& in) { const bool writeValue(const value& val, std::ostream& out) { out << val; + return true; +} + +const value readScript(std::istream& in) { + const value val = readValue(in); + if (isNil(val)) + return list<value>(); + return cons(val, (list<value>)readScript(in)); } } |