Skip to content

Commit

Permalink
Refactor; also made it easier to spot where the "SomethingWentWrong" …
Browse files Browse the repository at this point in the history
…happened
  • Loading branch information
sozysozbot committed Jul 24, 2020
1 parent 15c36dd commit 6c39a47
Show file tree
Hide file tree
Showing 5 changed files with 234 additions and 49 deletions.
145 changes: 145 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@ edition = "2018"
peek-nth = "0.2.0"
clap = "2.33.1"
serde_json = "1.0.56"
bimap = "0.4.0"
bimap = "0.4.0"
position = "0.0.3"
19 changes: 17 additions & 2 deletions src/compile/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -444,15 +444,19 @@ fn compile_statement(mut env: &mut Env, st: &parse::Statement) -> Vec<Line> {
elseifcases,
elsecase,
} => compile_if(&mut env, ifcase, elseifcases, elsecase),
parse::Statement::Reference { data } => vec![(
parse::Statement::Reference {
rvalue: parse::RvalueNoQi2::Simple(data),
} => vec![(
env.indent_level,
format!(
"let _ans{} = {};",
get_new_unnamed_var(&mut env),
compile_literal(&env, data)
),
)],
parse::Statement::ReferenceInd { data, index } => vec![(
parse::Statement::Reference {
rvalue: parse::RvalueNoQi2::Index(data, index),
} => vec![(
env.indent_level,
format!(
"let _ans{} = {}[{} - 1];",
Expand All @@ -461,6 +465,16 @@ fn compile_statement(mut env: &mut Env, st: &parse::Statement) -> Vec<Line> {
index
),
)],
parse::Statement::Reference {
rvalue: parse::RvalueNoQi2::Length(data),
} => vec![(
env.indent_level,
format!(
"let _ans{} = {}.len();",
get_new_unnamed_var(&mut env),
compile_literal(&env, data),
),
)],
parse::Statement::NameMulti { idents } => compile_name_multi_statement(&mut env, &idents),
parse::Statement::Flush => {
env.variables_not_yet_named = vec![];
Expand Down Expand Up @@ -566,6 +580,7 @@ fn compile_rvalue(mut env: &mut Env, rvalue: &parse::Rvalue) -> String {
format!("{}[{} - 1]", compile_dataorqi2(&mut env, data), index)
}
parse::Rvalue::Simple(data) => format!("{}", compile_dataorqi2(&mut env, data)),
parse::Rvalue::Length(data) => format!("{}.len()", compile_dataorqi2(&mut env, data)),
}
}

Expand Down
27 changes: 21 additions & 6 deletions src/identbimap/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,12 +175,11 @@ impl IdentBiMap {
self.insert_stmt(&s, &conversion_table)
}
}
parse::Statement::Reference { data } => {
self.insert_dat(data, &conversion_table);
}
parse::Statement::ReferenceInd { data, index: _ } => {
self.insert_dat(data, &conversion_table);
}
parse::Statement::Reference { rvalue } => match rvalue {
parse::RvalueNoQi2::Simple(data)
| parse::RvalueNoQi2::Index(data, _)
| parse::RvalueNoQi2::Length(data) => self.insert_dat(data, &conversion_table),
},
parse::Statement::NameMulti { idents } => {
for id in idents {
self.insert_ident(&id, &conversion_table);
Expand All @@ -195,6 +194,14 @@ impl IdentBiMap {
},
rvalue: parse::Rvalue::Index(data, _),
}
| parse::Statement::Assignment {
lvalue:
parse::Lvalue {
ident,
opt_index: None,
},
rvalue: parse::Rvalue::Length(data),
}
| parse::Statement::Assignment {
lvalue:
parse::Lvalue {
Expand All @@ -218,6 +225,14 @@ impl IdentBiMap {
opt_index: Some(_), // FIXME: need to consder this once the possibility of index being an identifier is added
},
rvalue: parse::Rvalue::Index(data, _),
}
| parse::Statement::Assignment {
lvalue:
parse::Lvalue {
ident,
opt_index: Some(_), // FIXME: need to consder this once the possibility of index being an identifier is added
},
rvalue: parse::Rvalue::Length(data),
} => {
self.insert_ident(&ident, &conversion_table);
self.mutable_idents.insert(ident.clone());
Expand Down
Loading

0 comments on commit 6c39a47

Please sign in to comment.