diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-09 05:18:47 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2015-04-09 05:18:47 +0200 |
commit | e86d06400234dce2ee505eb58bb4a2cfeddc4303 (patch) | |
tree | 11e126a78b9dd7b7cd3582c1f45e3fbcf6115398 /src/lex.cpp | |
parent | 7a65ee0c61b04b09f10655f03be2fc082c8d5b2b (diff) | |
download | solar-e86d06400234dce2ee505eb58bb4a2cfeddc4303.tar solar-e86d06400234dce2ee505eb58bb4a2cfeddc4303.zip |
lex: use std::string * instead of char *
Diffstat (limited to 'src/lex.cpp')
-rw-r--r-- | src/lex.cpp | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/src/lex.cpp b/src/lex.cpp index 38d138c..63549c9 100644 --- a/src/lex.cpp +++ b/src/lex.cpp @@ -234,10 +234,10 @@ int lex_t::lex_keyword(parser_value_t *value) { break; } - char *token = get_token(); - const keyword_t key = { .keyword = token, .token = 0 }; + std::string *token = get_token(); + const keyword_t key = { .keyword = token->c_str(), .token = 0 }; const keyword_t *ret = static_cast<const keyword_t*>(bsearch(&key, keywords, array_size(keywords), sizeof(keyword_t), compare_keywords)); - free(token); + delete token; if (!ret) return syntax_error(value); @@ -262,15 +262,13 @@ int lex_t::lex_block(parser_value_t *value) { bool str = false; bool pp = false; - size_t pos = 0; - size_t len = 1024; - char *buf = static_cast<char*>(std::malloc(len)); + std::string *buf = new std::string; char prev = 0; while (true) { if (!next(true)) { - std::free(buf); + delete buf; return unterminated_block(value); } @@ -316,17 +314,11 @@ int lex_t::lex_block(parser_value_t *value) { } } - if (pos >= len) { - len *= 2; - buf = static_cast<char*>(std::realloc(buf, len)); - } - - buf[pos++] = cur; + *buf += cur; prev = cur; } - value->str = strndup(buf, pos); - std::free(buf); + value->str = buf; next(true); consume(true); |