diff options
author | Huon Wilson <dbau.pp+github@gmail.com> | 2014-07-18 20:19:21 +1000 |
---|---|---|
committer | Huon Wilson <dbau.pp+github@gmail.com> | 2014-07-18 20:20:45 +1000 |
commit | e756f56b62053a34aa26a00e28dbe4ce29cd9125 (patch) | |
tree | 2ccbf27ac04539985419897bf0225267c22f2541 | |
parent | 05f8c0bc41a10f1e98e420f8d02d778541d13d48 (diff) | |
download | milf-rs-e756f56b62053a34aa26a00e28dbe4ce29cd9125.tar.gz milf-rs-e756f56b62053a34aa26a00e28dbe4ce29cd9125.zip |
Disambiguate "" empty strings from multiline strings properly.
Previously `""` would go into multiline mode and thus *require* a
following ".
-rw-r--r-- | src/parser.rs | 13 | ||||
-rw-r--r-- | src/test/valid.rs | 3 | ||||
-rw-r--r-- | src/test/valid/string-empty.json | 6 | ||||
-rw-r--r-- | src/test/valid/string-empty.toml | 1 |
4 files changed, 19 insertions, 4 deletions
diff --git a/src/parser.rs b/src/parser.rs index ec9adf9..27edd2f 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -265,11 +265,16 @@ impl<'a> Parser<'a> { let mut multiline = false; let mut ret = String::new(); - // detect multiline literals + // detect multiline literals, but be careful about empty "" + // strings if self.eat('"') { - multiline = true; - if !self.expect('"') { return None } - self.eat('\n'); + if self.eat('"') { + multiline = true; + self.eat('\n'); + } else { + // empty + return Some(String(ret)) + } } loop { diff --git a/src/test/valid.rs b/src/test/valid.rs index 9a812d5..1bcfeb2 100644 --- a/src/test/valid.rs +++ b/src/test/valid.rs @@ -122,6 +122,9 @@ test!(long_float, test!(long_integer, include_str!("valid/long-integer.toml"), include_str!("valid/long-integer.json")) +test!(string_empty, + include_str!("valid/string-empty.toml"), + include_str!("valid/string-empty.json")) test!(string_escapes, include_str!("valid/string-escapes.toml"), include_str!("valid/string-escapes.json")) diff --git a/src/test/valid/string-empty.json b/src/test/valid/string-empty.json new file mode 100644 index 0000000..6c26d69 --- /dev/null +++ b/src/test/valid/string-empty.json @@ -0,0 +1,6 @@ +{ + "answer": { + "type": "string", + "value": "" + } +} diff --git a/src/test/valid/string-empty.toml b/src/test/valid/string-empty.toml new file mode 100644 index 0000000..e37e681 --- /dev/null +++ b/src/test/valid/string-empty.toml @@ -0,0 +1 @@ +answer = "" |