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)?; |         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 { |         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)?; |             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(()) |         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 { | impl DebugMetadataValue { | ||||||
|     fn hr(&self, debug: &DebugInformation) -> String { |     fn hr(&self, debug: &DebugInformation) -> String { | ||||||
|         let kind = match debug.get_metadata(*self) { |         let kind = match debug.get_metadata(*self) { | ||||||
|  | |||||||
| @ -90,4 +90,17 @@ fn str_length(string: *char, position: u32) -> u32 { | |||||||
|         return 0; |         return 0; | ||||||
|     } |     } | ||||||
|     return str_length(string, position + 1) + 1; |     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); |             let opt = else_block.codegen(&mut else_scope, state); | ||||||
| 
 | 
 | ||||||
|  |             else_scope.block.terminate(Term::Br(after_bb)).ok(); | ||||||
|  | 
 | ||||||
|             if let Some(ret) = opt { |             if let Some(ret) = opt { | ||||||
|                 else_scope.block.terminate(Term::Br(after_bb)).ok(); |  | ||||||
|                 Some(ret) |                 Some(ret) | ||||||
|             } else { |             } else { | ||||||
|                 None |                 None | ||||||
|  | |||||||
| @ -167,7 +167,7 @@ impl<'a, 'b> TokenStream<'a, 'b> { | |||||||
|         match T::parse(clone) { |         match T::parse(clone) { | ||||||
|             Ok(res) => { |             Ok(res) => { | ||||||
|                 #[cfg(debug_assertions)] |                 #[cfg(debug_assertions)] | ||||||
|                 dbg!(&res); |                 // dbg!(&res);
 | ||||||
|                 let new_pos = ref_pos.max(self.position); |                 let new_pos = ref_pos.max(self.position); | ||||||
|                 Ok((res, new_pos)) |                 Ok((res, new_pos)) | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -3,12 +3,14 @@ import std::from_str; | |||||||
| import std::add_char; | import std::add_char; | ||||||
| import std::set_char; | import std::set_char; | ||||||
| import std::free_string; | import std::free_string; | ||||||
|  | import std::add_num_to_str; | ||||||
| 
 | 
 | ||||||
| fn main() -> i32 { | fn main() -> i32 { | ||||||
|     let mut test = from_str("hello world"); |     let mut test = from_str("hello world"); | ||||||
| 
 | 
 | ||||||
|     add_char(&mut test, '!'); |     add_char(&mut test, '!'); | ||||||
|     set_char(&mut test, 'B', 0); |     set_char(&mut test, 'B', 0); | ||||||
|  |     add_num_to_str(&mut test, 7); | ||||||
|      |      | ||||||
|     print(&test); |     print(&test); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user