about summary refs log tree commit diff stats
path: root/cpp/011load
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-03-16 22:47:28 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-03-16 22:48:41 -0700
commit100157d1a83ccb02d82af21c5767ecda3d7cb1c2 (patch)
treed540d4a6351473119bf49c4ad03de9856caacc61 /cpp/011load
parent5df82e48a2548e7d30b3e86dab0d866851a1c47d (diff)
downloadmu-100157d1a83ccb02d82af21c5767ecda3d7cb1c2.tar.gz
939 - c++: fix an old parsing hack
Diffstat (limited to 'cpp/011load')
-rw-r--r--cpp/011load58
1 files changed, 58 insertions, 0 deletions
diff --git a/cpp/011load b/cpp/011load
index 9806bfd0..d01c72d2 100644
--- a/cpp/011load
+++ b/cpp/011load
@@ -109,6 +109,8 @@ string next_word(istream& in) {
   ostringstream out;
   skip_whitespace(in);
   slurp_word(in, out);
+  skip_whitespace(in);
+  skip_comment(in);
   return out.str();
 }
 
@@ -144,12 +146,68 @@ void skip_comments_and_newlines(istream& in) {
   }
 }
 
+void skip_comment(istream& in) {
+  if (in.peek() == '#') {
+    in.get();
+    while (in.peek() != '\n') in.get();
+  }
+}
+
 void skip_comma(istream& in) {
   skip_whitespace(in);
   if (in.peek() == ',') in.get();
   skip_whitespace(in);
 }
 
+:(scenario parse_comment_outside_recipe)
+# comment
+recipe main [
+  1:integer <- copy 23:literal
+]
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "1", type: 1}
+
+:(scenario parse_comment_amongst_instruction)
+recipe main [
+  # comment
+  1:integer <- copy 23:literal
+]
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "1", type: 1}
+
+:(scenario parse_comment_amongst_instruction2)
+recipe main [
+  # comment
+  1:integer <- copy 23:literal
+  # comment
+]
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "1", type: 1}
+
+:(scenario parse_comment_amongst_instruction3)
+recipe main [
+  1:integer <- copy 23:literal
+  # comment
+  2:integer <- copy 23:literal
+]
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "1", type: 1}
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "2", type: 1}
+
+:(scenario parse_comment_after_instruction)
+recipe main [
+  1:integer <- copy 23:literal # comment
+]
++parse: instruction: 1
++parse:   ingredient: {name: "23", type: 0}
++parse:   product: {name: "1", type: 1}
+
 :(scenario parse_label)
 recipe main [
   +foo