Make add_char and set_char work
This commit is contained in:
		
							parent
							
								
									64418635a5
								
							
						
					
					
						commit
						32059682ee
					
				| @ -25,6 +25,7 @@ struct String { | ||||
|     inner: *char, | ||||
|     length: u64, | ||||
|     max_length: u64, | ||||
|     must_be_freed: bool, | ||||
| } | ||||
| 
 | ||||
| pub fn new_string() -> String { | ||||
| @ -32,6 +33,7 @@ pub fn new_string() -> String { | ||||
|         inner: allocate(0), | ||||
|         length: 0, | ||||
|         max_length: 0, | ||||
|         must_be_freed: true, | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -42,7 +44,8 @@ pub fn from_str(str: *char) -> String { | ||||
|     return String { | ||||
|         inner: cloned, | ||||
|         length: length, | ||||
|         max_length: length | ||||
|         max_length: length, | ||||
|         must_be_freed: false, | ||||
|     }; | ||||
| } | ||||
| 
 | ||||
| @ -51,9 +54,12 @@ pub fn add_char(string: &mut String, c: char) { | ||||
|         let new = allocate((*string).max_length + 4) as *char; | ||||
|         copy_bits((*string).inner, new, 0, (*string).max_length); | ||||
| 
 | ||||
|         if (*string).must_be_freed == true { | ||||
|             free((*string).inner as *u8); | ||||
|         } | ||||
|         (*string).max_length = (*string).max_length + 4; | ||||
|         (*string).inner = new; | ||||
|         (*string).must_be_freed = true; | ||||
|     } | ||||
| 
 | ||||
|     (*string).inner[(*string).length] = c; | ||||
| @ -61,6 +67,12 @@ pub fn add_char(string: &mut String, c: char) { | ||||
|     (*string).length = (*string).length + 1; | ||||
| } | ||||
| 
 | ||||
| pub fn set_char(string: &mut String, c: char, position: u64) { | ||||
|     if position <= (*string).length { | ||||
|         (*string).inner[position] = c; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| pub fn free_string(string: &mut String) { | ||||
|     free((*string).inner as *u8); | ||||
| } | ||||
| @ -74,7 +86,7 @@ fn copy_bits(from: *char, to: *char, pos: u64, max: u64) -> u8 { | ||||
| } | ||||
| 
 | ||||
| fn str_length(string: *char, position: u32) -> u32 { | ||||
|     if ((string[position] as u8) == 0) { | ||||
|     if (string[position] == '\0') { | ||||
|         return 0; | ||||
|     } | ||||
|     return str_length(string, position + 1) + 1; | ||||
|  | ||||
| @ -1135,7 +1135,7 @@ impl mir::IfExpression { | ||||
|         if let Some(debug) = &scope.debug { | ||||
|             let before_location = self.0 .1.into_debug(scope.tokens, debug.scope).unwrap(); | ||||
|             let before_v = debug.info.location(&debug.scope, before_location); | ||||
|             scope.block.set_terminator_location(before_v).unwrap(); | ||||
|             scope.block.set_terminator_location(before_v).ok(); | ||||
| 
 | ||||
|             let then_location = self | ||||
|                 .1 | ||||
|  | ||||
| @ -1,11 +1,15 @@ | ||||
| import std::print; | ||||
| import std::from_str; | ||||
| import std::add_char; | ||||
| import std::set_char; | ||||
| import std::free_string; | ||||
| 
 | ||||
| fn main() -> i32 { | ||||
|     let mut test = from_str("hello world"); | ||||
| 
 | ||||
|     add_char(&mut test, '!'); | ||||
|     set_char(&mut test, 'B', 0); | ||||
|      | ||||
|     print(&test); | ||||
| 
 | ||||
|     free_string(&mut test); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user