From 1fe196b405762ab5b579a1d6a4dd754bdcb30c9f Mon Sep 17 00:00:00 2001 From: Goren Barak Date: Tue, 2 Jan 2024 11:49:59 -0500 Subject: [PATCH] fixed bugs with multiple nested loops/words --- src/backend.rs | 90 ++++++++++++++++------------ tags | 155 ------------------------------------------------- 2 files changed, 52 insertions(+), 193 deletions(-) delete mode 100644 tags diff --git a/src/backend.rs b/src/backend.rs index bcb8e69..b65efe7 100644 --- a/src/backend.rs +++ b/src/backend.rs @@ -15,7 +15,6 @@ struct Dictionary { words: HashMap } -// fn paren_matching(source: &str, left: impl Fn(&str) -> bool, right: impl Fn(&str) -> bool) {} impl<'a> Vm { pub fn new() -> Self { @@ -39,6 +38,36 @@ impl<'a> Vm { } } } + macro_rules! paren_matching { + ($start:expr, $end:expr) => {{ + let start = $start; + let end = $end; + let mut depth = 1; + let mut content = String::new(); + + let item = { + loop { + if let Some(item) = parser.inner_next() { + content.push_str(item); + content.push_str(" "); + if start(item) { + depth += 1; + } + if end(item) { + depth -= 1; + } + if depth == 0 { + break Some(item); + } + } else { + break None; + } + } + }; + + (item, content) + }} + } while let Some(item) = parser.next() { match item { @@ -96,6 +125,16 @@ impl<'a> Vm { let rem = stack_second.wrapping_rem(stack_top); self.stack.push(rem); }, + "*/" => { + let n3 = unwrap!(); + let n2 = unwrap!(); + let n1 = unwrap!(); + + let d = n1 * n2; + let n4 = d/n3; + + self.stack.push(n4); + }, "TRACE"|"trace" => { match parser.inner_next() { Some("stack") => { @@ -170,13 +209,7 @@ impl<'a> Vm { }, "IF"|"if" => { let expr = unwrap!(); - let mut content = String::new(); - let mut next = parser.inner_next_back(); - while !matches!(next, Some("THEN")|Some("then")|None) { - content.push_str(next.unwrap()); - content.push_str(" "); - next = parser.inner_next_back(); - } + let (_, content) = paren_matching!(|x| matches!(x, "IF"|"if"), |x| matches!(x, "THEN"|"then")); if expr == 0 { // Do nothing. @@ -187,7 +220,7 @@ impl<'a> Vm { "THEN"|"then" => {} "(" => { - let mut next = parser.inner_next_back(); + let mut next = parser.inner_next(); while next != Some(")") && next != None { next = parser.inner_next_back(); } @@ -198,14 +231,7 @@ impl<'a> Vm { "DO"|"do" => { let start = unwrap!(); let limit = unwrap!(); - let mut action = String::new(); - - let mut next = parser.inner_next_back(); - while !matches!(next, Some("LOOP")|Some("loop")|None) { - action.push_str(next.unwrap()); - action.push_str(" "); - next = parser.inner_next_back(); - } + let (_, action) = paren_matching!(|x| matches!(x, "DO"|"do"), |x| matches!(x, "LOOP"|"loop")); for i in start..limit { self.dictionary.words.insert("I".to_string(), i.to_string()); @@ -222,15 +248,8 @@ impl<'a> Vm { }, "LOOP"|"loop" => {}, "BEGIN"|"begin" => { - let mut action = String::new(); + let (next, action) = paren_matching!(|x| matches!(x, "BEGIN"|"begin"), |x| matches!(x, "UNTIL"|"until"|"WHILE"|"while")); - let mut next = parser.inner_next_back(); - while !matches!(next, Some("UNTIL")|Some("until")|Some("WHILE")|Some("while")|None) { - action.push_str(next.unwrap()); - action.push_str(" "); - next = parser.inner_next_back(); - } - match next { Some("UNTIL")|Some("until") => { self.vmrun(&mut Parser::new(action.as_str())); @@ -241,7 +260,7 @@ impl<'a> Vm { }, Some("WHILE")|Some("while") => { let mut condition = String::new(); - let mut next = parser.inner_next_back(); + let mut next = parser.inner_next(); while !matches!(next, Some("REPEAT")|Some("repeat")|None) { condition.push_str(next.unwrap()); condition.push_str(" "); @@ -265,14 +284,8 @@ impl<'a> Vm { "WHILE"|"while" => {}, "REPEAT"|"repeat" => {}, ":" => { - let mut word_content = String::new(); let Some(Word(word_name)) = parser.next() else { println!("ERROR: Word name not given."); std::process::exit(1); }; - let mut next = parser.inner_next_back(); - while next != Some(";") && next != None { - word_content.push_str(next.unwrap()); - word_content.push_str(" "); - next = parser.inner_next_back(); - } + let (_, word_content) = paren_matching!(|x| matches!(x, ":"), |x| matches!(x, ";")); self.dictionary.words.insert(word_name.to_string(), word_content); }, @@ -285,11 +298,12 @@ impl<'a> Vm { }, word => { let words = self.dictionary.words.clone(); - let Some(word_content) = words.get(word) else { - println!("word {:?} does not exist", word); - std::process::exit(1); - }; - self.vmrun(&mut Parser::new(word_content)); + if let Some(word_content) = words.get(word) { + self.vmrun(&mut Parser::new(word_content)); + } else { + println!("WARNING: word {:?} does not exist, will clear stack.", word); + self.stack = Vec::new(); + } } } } diff --git a/tags b/tags deleted file mode 100644 index 14ba284..0000000 --- a/tags +++ /dev/null @@ -1,155 +0,0 @@ -!_TAG_EXTRA_DESCRIPTION anonymous /Include tags for non-named objects like lambda/ -!_TAG_EXTRA_DESCRIPTION fileScope /Include tags of file scope/ -!_TAG_EXTRA_DESCRIPTION pseudo /Include pseudo tags/ -!_TAG_EXTRA_DESCRIPTION subparser /Include tags generated by subparsers/ -!_TAG_FIELD_DESCRIPTION epoch /the last modified time of the input file (only for F\/file kind tag)/ -!_TAG_FIELD_DESCRIPTION file /File-restricted scoping/ -!_TAG_FIELD_DESCRIPTION input /input file/ -!_TAG_FIELD_DESCRIPTION name /tag name/ -!_TAG_FIELD_DESCRIPTION pattern /pattern/ -!_TAG_FIELD_DESCRIPTION typeref /Type and name of a variable or typedef/ -!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ -!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ -!_TAG_KIND_DESCRIPTION!D M,module /modules/ -!_TAG_KIND_DESCRIPTION!D T,template /templates/ -!_TAG_KIND_DESCRIPTION!D V,version /version statements/ -!_TAG_KIND_DESCRIPTION!D X,mixin /mixins/ -!_TAG_KIND_DESCRIPTION!D a,alias /aliases/ -!_TAG_KIND_DESCRIPTION!D c,class /classes/ -!_TAG_KIND_DESCRIPTION!D e,enumerator /enumerators (values inside an enumeration)/ -!_TAG_KIND_DESCRIPTION!D f,function /function definitions/ -!_TAG_KIND_DESCRIPTION!D g,enum /enumeration names/ -!_TAG_KIND_DESCRIPTION!D i,interface /interfaces/ -!_TAG_KIND_DESCRIPTION!D m,member /class, struct, and union members/ -!_TAG_KIND_DESCRIPTION!D n,namespace /namespaces/ -!_TAG_KIND_DESCRIPTION!D s,struct /structure names/ -!_TAG_KIND_DESCRIPTION!D u,union /union names/ -!_TAG_KIND_DESCRIPTION!D v,variable /variable definitions/ -!_TAG_KIND_DESCRIPTION!JSON a,array /arrays/ -!_TAG_KIND_DESCRIPTION!JSON b,boolean /booleans/ -!_TAG_KIND_DESCRIPTION!JSON n,number /numbers/ -!_TAG_KIND_DESCRIPTION!JSON o,object /objects/ -!_TAG_KIND_DESCRIPTION!JSON s,string /strings/ -!_TAG_KIND_DESCRIPTION!JSON z,null /nulls/ -!_TAG_KIND_DESCRIPTION!Rust C,constant /A constant/ -!_TAG_KIND_DESCRIPTION!Rust M,macro /Macro Definition/ -!_TAG_KIND_DESCRIPTION!Rust P,method /A method/ -!_TAG_KIND_DESCRIPTION!Rust c,implementation /implementation/ -!_TAG_KIND_DESCRIPTION!Rust e,enumerator /An enum variant/ -!_TAG_KIND_DESCRIPTION!Rust f,function /Function/ -!_TAG_KIND_DESCRIPTION!Rust g,enum /Enum/ -!_TAG_KIND_DESCRIPTION!Rust i,interface /trait interface/ -!_TAG_KIND_DESCRIPTION!Rust m,field /A struct field/ -!_TAG_KIND_DESCRIPTION!Rust n,module /module/ -!_TAG_KIND_DESCRIPTION!Rust s,struct /structural type/ -!_TAG_KIND_DESCRIPTION!Rust t,typedef /Type Alias/ -!_TAG_KIND_DESCRIPTION!Rust v,variable /Global variable/ -!_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ -!_TAG_OUTPUT_FILESEP slash /slash or backslash/ -!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ -!_TAG_OUTPUT_VERSION 0.0 /current.age/ -!_TAG_PARSER_VERSION!D 0.0 /current.age/ -!_TAG_PARSER_VERSION!JSON 0.0 /current.age/ -!_TAG_PARSER_VERSION!Rust 0.0 /current.age/ -!_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ -!_TAG_PROC_CWD /home/goren/Code/fourth/ // -!_TAG_PROGRAM_AUTHOR Universal Ctags Team // -!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ -!_TAG_PROGRAM_URL https://ctags.io/ /official site/ -!_TAG_PROGRAM_VERSION 6.0.0 /p6.0.20221218.0/ -0 target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" o array:local -0 target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" o array:local -0 target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" o array:local -0 target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" o array:local -15729799797837862367 target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" o object:outputs -4614504638168534921 target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" o object:outputs -CheckDepInfo target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" o object:local.0 -CheckDepInfo target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" o object:local.0 -CheckDepInfo target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" o object:local.0 -CheckDepInfo target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" o object:local.0 -Dictionary src/backend.rs /^struct Dictionary {$/;" s -Item src/parse.rs /^ type Item = TokenType<'a>;$/;" t implementation:Parser -Number src/parse.rs /^ Number(u64),$/;" e enum:TokenType -Parser src/parse.rs /^impl<'a> Iterator for Parser<'a> {$/;" c -Parser src/parse.rs /^impl<'a> Parser<'a> {$/;" c -Parser src/parse.rs /^pub struct Parser<'a> {$/;" s -TokenType src/parse.rs /^pub enum TokenType<'a> {$/;" g -Vm src/backend.rs /^impl<'a> Vm {$/;" c -Vm src/backend.rs /^pub struct Vm {$/;" s -Word src/parse.rs /^ Word(&'a str),$/;" e enum:TokenType -backend src/main.rs /^pub mod backend;$/;" n -code target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" n object:outputs.15729799797837862367 -code target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" n object:outputs.4614504638168534921 -compile_kind target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -compile_kind target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -compile_kind target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -compile_kind target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -config target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -config target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -config target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -config target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -data src/backend.rs /^ data: HashMap,$/;" m struct:Dictionary -dep_info target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" s object:local.0.CheckDepInfo -dep_info target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" s object:local.0.CheckDepInfo -dep_info target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" s object:local.0.CheckDepInfo -dep_info target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" s object:local.0.CheckDepInfo -deps target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" a -deps target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" a -deps target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" a -deps target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" a -dictionary src/backend.rs /^ dictionary: Dictionary$/;" m struct:Vm -dp src/backend.rs /^ dp: u64,$/;" m struct:Dictionary -features target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" s -features target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" s -features target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" s -features target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" s -inner_next src/parse.rs /^ pub fn inner_next(&mut self) -> Option<&'a str> {$/;" P implementation:Parser -local target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" a -local target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" a -local target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" a -local target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" a -main src/main.rs /^fn main() -> std::io::Result<()> {$/;" f -metadata target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -metadata target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -metadata target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -metadata target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -new src/backend.rs /^ pub fn new() -> Self {$/;" P implementation:Vm -new src/parse.rs /^ pub fn new(source: &'a str) -> Parser {$/;" P implementation:Parser -next src/parse.rs /^ fn next(&mut self) -> Option> {$/;" P implementation:Parser -outputs target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" o -parse src/main.rs /^pub mod parse;$/;" n -path target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -path target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -path target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -path target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -profile target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -profile target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -profile target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -profile target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -rustc target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -rustc target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -rustc target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -rustc target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -rustc_fingerprint target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" n -rustflags target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" a -rustflags target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" a -rustflags target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" a -rustflags target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" a -split_whitespace src/parse.rs /^ pub(crate) split_whitespace: SplitWhitespace<'a>$/;" m struct:Parser -stack src/backend.rs /^ stack: Vec,$/;" m struct:Vm -status target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.15729799797837862367 -status target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.4614504638168534921 -stderr target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.15729799797837862367 -stderr target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.4614504638168534921 -stdout target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.15729799797837862367 -stdout target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" s object:outputs.4614504638168534921 -success target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" b object:outputs.15729799797837862367 -success target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" b object:outputs.4614504638168534921 -successes target/.rustc_info.json /^{"rustc_fingerprint":15313746258697816560,"outputs":{"4614504638168534921":{"success":true,"stat/;" o -target target/debug/.fingerprint/fourth-0eb22537b83d0b36/test-bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":183265222628/;" n -target target/debug/.fingerprint/fourth-c58712c3665fe72a/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":110397424744/;" n -target target/debug/.fingerprint/fourth-d5bfd771d6ea8237/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":131263742483/;" n -target target/release/.fingerprint/fourth-96ade2603d15be13/bin-fourth.json /^{"rustc":3462548589188548201,"features":"[]","target":6449572106981162502,"profile":356732962844/;" n -unwrap src/backend.rs /^ macro_rules! unwrap {$/;" M method:Vm::vmrun -vmrun src/backend.rs /^ pub fn vmrun(&mut self, parser: &mut Parser) {$/;" P implementation:Vm -words src/backend.rs /^ words: HashMap$/;" m struct:Dictionary