Fix nested if/else, add add_num_to_str to standard library
This commit is contained in:
parent
32059682ee
commit
8f45c8cf92
@ -105,12 +105,24 @@ impl BlockHolder {
|
||||
}
|
||||
writeln!(f, "{} ({:?}):", self.data.name, self.value)?;
|
||||
|
||||
let mut state = Default::default();
|
||||
let mut inner = PadAdapter::wrap(f, &mut state);
|
||||
|
||||
for instr in &self.instructions {
|
||||
let mut state = Default::default();
|
||||
let mut inner = PadAdapter::wrap(f, &mut state);
|
||||
instr.builder_fmt(&mut inner, builder, debug)?;
|
||||
}
|
||||
|
||||
if let Some(terminator) = &self.data.terminator {
|
||||
terminator.builder_fmt(&mut inner, builder, debug)?;
|
||||
}
|
||||
if let Some(location) = self.data.terminator_location {
|
||||
writeln!(
|
||||
inner,
|
||||
" ^ (At {}) ",
|
||||
debug.as_ref().unwrap().get_location(location)
|
||||
)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@ -155,6 +167,24 @@ impl InstructionHolder {
|
||||
}
|
||||
}
|
||||
|
||||
impl TerminatorKind {
|
||||
fn builder_fmt(
|
||||
&self,
|
||||
f: &mut impl std::fmt::Write,
|
||||
builder: &Builder,
|
||||
debug: &Option<DebugInformation>,
|
||||
) -> std::fmt::Result {
|
||||
match self {
|
||||
TerminatorKind::Ret(instr) => writeln!(f, "ret {:?}", instr),
|
||||
TerminatorKind::RetVoid => writeln!(f, "ret void"),
|
||||
TerminatorKind::Br(block) => writeln!(f, "br {:?}", block),
|
||||
TerminatorKind::CondBr(instr, lhs, rhs) => {
|
||||
writeln!(f, "condbr {:?}, {:?} or {:?}", instr, lhs, rhs)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DebugMetadataValue {
|
||||
fn hr(&self, debug: &DebugInformation) -> String {
|
||||
let kind = match debug.get_metadata(*self) {
|
||||
|
@ -90,4 +90,17 @@ fn str_length(string: *char, position: u32) -> u32 {
|
||||
return 0;
|
||||
}
|
||||
return str_length(string, position + 1) + 1;
|
||||
}
|
||||
|
||||
pub fn add_num_to_str(string: &mut String, num: u64) {
|
||||
if num == 0 { add_char(string, '0'); }
|
||||
else { if num == 1 { add_char(string, '1'); }
|
||||
else { if num == 2 { add_char(string, '2'); }
|
||||
else { if num == 3 { add_char(string, '3'); }
|
||||
else { if num == 4 { add_char(string, '4'); }
|
||||
else { if num == 5 { add_char(string, '5'); }
|
||||
else { if num == 6 { add_char(string, '6'); }
|
||||
else { if num == 7 { add_char(string, '7'); }
|
||||
else { if num == 8 { add_char(string, '8'); }
|
||||
else { if num == 9 { add_char(string, '9'); } } } } } } } } } }
|
||||
}
|
@ -1177,8 +1177,9 @@ impl mir::IfExpression {
|
||||
|
||||
let opt = else_block.codegen(&mut else_scope, state);
|
||||
|
||||
else_scope.block.terminate(Term::Br(after_bb)).ok();
|
||||
|
||||
if let Some(ret) = opt {
|
||||
else_scope.block.terminate(Term::Br(after_bb)).ok();
|
||||
Some(ret)
|
||||
} else {
|
||||
None
|
||||
|
@ -167,7 +167,7 @@ impl<'a, 'b> TokenStream<'a, 'b> {
|
||||
match T::parse(clone) {
|
||||
Ok(res) => {
|
||||
#[cfg(debug_assertions)]
|
||||
dbg!(&res);
|
||||
// dbg!(&res);
|
||||
let new_pos = ref_pos.max(self.position);
|
||||
Ok((res, new_pos))
|
||||
}
|
||||
|
@ -3,12 +3,14 @@ import std::from_str;
|
||||
import std::add_char;
|
||||
import std::set_char;
|
||||
import std::free_string;
|
||||
import std::add_num_to_str;
|
||||
|
||||
fn main() -> i32 {
|
||||
let mut test = from_str("hello world");
|
||||
|
||||
add_char(&mut test, '!');
|
||||
set_char(&mut test, 'B', 0);
|
||||
add_num_to_str(&mut test, 7);
|
||||
|
||||
print(&test);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user