diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 17:22:55 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-10 17:26:20 +0200 |
commit | 48b791d443efa3fc41715ea7d177d583952a77ee (patch) | |
tree | 5ef937517ca45eddddaef04f46ee6d62d1a7a22b /src/lex.cpp | |
parent | 5a54699f18e3ac52fe18d854f6d57be6795ed8e5 (diff) | |
download | solar-48b791d443efa3fc41715ea7d177d583952a77ee.tar solar-48b791d443efa3fc41715ea7d177d583952a77ee.zip |
Allow specifying sequences of character terminals as strings
Diffstat (limited to 'src/lex.cpp')
-rw-r--r-- | src/lex.cpp | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/src/lex.cpp b/src/lex.cpp index c5ae330..3746c91 100644 --- a/src/lex.cpp +++ b/src/lex.cpp @@ -135,7 +135,6 @@ int lex_t::consume_comment(parse_token_value_t *value) { return -1; } -/* int lex_t::unterminated_string(parse_token_value_t *value) { if (ferror(file)) return io_error(value); @@ -145,18 +144,14 @@ int lex_t::unterminated_string(parse_token_value_t *value) { } int lex_t::lex_string(parse_token_value_t *value) { - char *buf = NULL; - size_t len = 1024; - size_t pos = 0; - if (needspace) return syntax_error(value); - buf = static_cast<char*>(std::malloc(len)); + std::string *buf = new std::string; while (true) { if (!next(true)) { - std::free(buf); + delete buf; return unterminated_string(value); } @@ -177,16 +172,10 @@ int lex_t::lex_string(parse_token_value_t *value) { continue; } - if (pos >= len) { - len *= 2; - buf = static_cast<char*>(std::realloc(buf, len)); - } - - buf[pos++] = cur; + *buf += cur; } - value->str = strndup(buf, pos); - std::free(buf); + value->str = buf; next(true); consume(true); @@ -194,6 +183,7 @@ int lex_t::lex_string(parse_token_value_t *value) { return TOK_STRING; } +/* int lex_t::lex_number(parse_token_value_t *value) { if (needspace) return syntax_error(value); @@ -431,8 +421,8 @@ int lex_t::lex(parse_token_value_t *value) { case '{': return lex_block(value); - //case '"': - //return lex_string(value); + case '"': + return lex_string(value); //case '0' ... '9': //return lex_number(value); |