Add ability to specify variable types in let
This commit is contained in:
		
							parent
							
								
									ea8a833bdf
								
							
						
					
					
						commit
						6634597c92
					
				| @ -45,12 +45,11 @@ Currently missing big features (TODOs) are: | ||||
| - ~~Built-in Int/Float division and modulo~~ (DONE) | ||||
| - ~~Loops~~ (DONE) | ||||
| - ~~Intrinsic functions~~ (DONE) | ||||
| - ~~Ability to specify types in literals~~ (DONE) | ||||
| - ~~Ability to specify types in literals and variable definitions~~ (DONE) | ||||
| - Debug Information (PARTIALLY DONE) | ||||
| - Not-Unary | ||||
| - Importing types from other modules | ||||
| - Importable binops? | ||||
| - Ability to specify types in variable definitions | ||||
| 
 | ||||
| Big features that I want later but are not necessary: | ||||
| - Associated functions | ||||
|  | ||||
| @ -17,7 +17,7 @@ fn main() -> u32 { | ||||
|     let mut value = test(); | ||||
| 
 | ||||
|     let beep = [2, 3, 4]; | ||||
|     let boop = 3; | ||||
|     let boop: f32 = 3; | ||||
| 
 | ||||
|     let mut a = &mut value; | ||||
| 
 | ||||
|  | ||||
| @ -1,9 +1,6 @@ | ||||
| // Arithmetic, function calls and imports! | ||||
| 
 | ||||
| pub fn test() -> u8 { | ||||
|   return 5; | ||||
| } | ||||
| 
 | ||||
| pub fn main() -> bool { | ||||
|   return 7.5 > (test() as f16); | ||||
|   return 7.5 > 5.001; | ||||
| } | ||||
|  | ||||
| @ -531,6 +531,13 @@ impl Parse for LetStatement { | ||||
|         let mutability = stream.expect(Token::MutKeyword).is_ok(); | ||||
| 
 | ||||
|         if let Some(Token::Identifier(variable)) = stream.next() { | ||||
|             let ty = if let Some(Token::Colon) = stream.peek() { | ||||
|                 stream.next(); // Consume colon
 | ||||
|                 Some(stream.parse()?) | ||||
|             } else { | ||||
|                 None | ||||
|             }; | ||||
| 
 | ||||
|             let range = stream.get_range_prev().unwrap(); | ||||
|             stream.expect(Token::Equals)?; | ||||
| 
 | ||||
| @ -538,7 +545,7 @@ impl Parse for LetStatement { | ||||
|             stream.expect(Token::Semi)?; | ||||
|             Ok(LetStatement { | ||||
|                 name: variable, | ||||
|                 ty: None, | ||||
|                 ty, | ||||
|                 mutable: mutability, | ||||
|                 value: expression, | ||||
|                 name_range: range, | ||||
|  | ||||
| @ -900,6 +900,13 @@ impl Literal { | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::U32) => L::U32(v as u32), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::U64) => L::U64(v as u64), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::U128) => L::U128(v as u128), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F16) => L::F16(v as f32), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F32) => L::F32(v as f32), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F32B) => L::F32B(v as f32), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F64) => L::F64(v as f64), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F80) => L::F80(v as f64), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F128) => L::F128(v as f64), | ||||
|                 (L::Vague(VagueL::Number(v)), TypeKind::F128PPC) => L::F128PPC(v as f64), | ||||
|                 (L::Vague(VagueL::Decimal(v)), TypeKind::F16) => L::F16(v as f32), | ||||
|                 (L::Vague(VagueL::Decimal(v)), TypeKind::F32) => L::F32(v as f32), | ||||
|                 (L::Vague(VagueL::Decimal(v)), TypeKind::F32B) => L::F32B(v as f32), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user