Start adding macros
This commit is contained in:
		
							parent
							
								
									ea6458dddc
								
							
						
					
					
						commit
						2e153922f1
					
				| @ -61,6 +61,7 @@ impl mir::FunctionDefinitionKind { | |||||||
|             } |             } | ||||||
|             mir::FunctionDefinitionKind::Extern(_) => {} |             mir::FunctionDefinitionKind::Extern(_) => {} | ||||||
|             mir::FunctionDefinitionKind::Intrinsic(_) => {} |             mir::FunctionDefinitionKind::Intrinsic(_) => {} | ||||||
|  |             mir::FunctionDefinitionKind::Macro(_) => {} | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         Allocator { allocations: allocated } |         Allocator { allocations: allocated } | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ use reid_lib::{builder::InstructionValue, CmpPredicate, ConstValue, Instr, Type} | |||||||
| use crate::{ | use crate::{ | ||||||
|     codegen::{ErrorKind, StackValueKind}, |     codegen::{ErrorKind, StackValueKind}, | ||||||
|     mir::{ |     mir::{ | ||||||
|         BinaryOperator, BinopDefinition, CmpOperator, FunctionDefinition, FunctionDefinitionKind, FunctionParam, |         self, BinaryOperator, BinopDefinition, CmpOperator, FunctionDefinition, FunctionDefinitionKind, FunctionParam, | ||||||
|         TypeKind, |         TypeKind, | ||||||
|     }, |     }, | ||||||
| }; | }; | ||||||
| @ -309,6 +309,10 @@ pub trait IntrinsicFunction: std::fmt::Debug { | |||||||
|     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, params: &[StackValue]) -> Result<StackValue, ErrorKind>; |     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, params: &[StackValue]) -> Result<StackValue, ErrorKind>; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | pub trait MacroFunction: std::fmt::Debug { | ||||||
|  |     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, params: &[mir::Literal]) -> Result<StackValue, ErrorKind>; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| macro_rules! intrinsic_debug { | macro_rules! intrinsic_debug { | ||||||
|     ($kind:ty, $name:literal) => { |     ($kind:ty, $name:literal) => { | ||||||
|         impl<T> std::fmt::Debug for $kind |         impl<T> std::fmt::Debug for $kind | ||||||
|  | |||||||
| @ -237,6 +237,7 @@ impl mir::Module { | |||||||
|                     }, |                     }, | ||||||
|                 )), |                 )), | ||||||
|                 mir::FunctionDefinitionKind::Intrinsic(_) => None, |                 mir::FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |                 mir::FunctionDefinitionKind::Macro(_) => None, | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|             if let Some(func) = func { |             if let Some(func) = func { | ||||||
| @ -288,6 +289,7 @@ impl mir::Module { | |||||||
|                     }, |                     }, | ||||||
|                 )), |                 )), | ||||||
|                 mir::FunctionDefinitionKind::Intrinsic(_) => None, |                 mir::FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |                 mir::FunctionDefinitionKind::Macro(_) => None, | ||||||
|             }; |             }; | ||||||
| 
 | 
 | ||||||
|             if let Some(func) = func { |             if let Some(func) = func { | ||||||
| @ -374,6 +376,7 @@ impl mir::Module { | |||||||
|                                         } |                                         } | ||||||
|                                         FunctionDefinitionKind::Extern(_) => None, |                                         FunctionDefinitionKind::Extern(_) => None, | ||||||
|                                         FunctionDefinitionKind::Intrinsic(_) => None, |                                         FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |                                         FunctionDefinitionKind::Macro(_) => None, | ||||||
|                                     }, |                                     }, | ||||||
|                                 ) |                                 ) | ||||||
|                                 .unwrap(); |                                 .unwrap(); | ||||||
| @ -394,6 +397,7 @@ impl mir::Module { | |||||||
|                         FunctionDefinitionKind::Intrinsic(intrinsic_function) => { |                         FunctionDefinitionKind::Intrinsic(intrinsic_function) => { | ||||||
|                             ScopeFunctionKind::Intrinsic(intrinsic_function) |                             ScopeFunctionKind::Intrinsic(intrinsic_function) | ||||||
|                         } |                         } | ||||||
|  |                         FunctionDefinitionKind::Macro(macro_function) => ScopeFunctionKind::Macro(macro_function), | ||||||
|                     }, |                     }, | ||||||
|                 }, |                 }, | ||||||
|             ); |             ); | ||||||
| @ -450,6 +454,7 @@ impl mir::Module { | |||||||
|                             } |                             } | ||||||
|                             FunctionDefinitionKind::Extern(_) => None, |                             FunctionDefinitionKind::Extern(_) => None, | ||||||
|                             FunctionDefinitionKind::Intrinsic(_) => None, |                             FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |                             FunctionDefinitionKind::Macro(macro_function) => None, | ||||||
|                         }, |                         }, | ||||||
|                     ) |                     ) | ||||||
|                     .unwrap(); |                     .unwrap(); | ||||||
| @ -510,6 +515,7 @@ impl mir::Module { | |||||||
|                             } |                             } | ||||||
|                             FunctionDefinitionKind::Extern(_) => None, |                             FunctionDefinitionKind::Extern(_) => None, | ||||||
|                             FunctionDefinitionKind::Intrinsic(_) => None, |                             FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |                             FunctionDefinitionKind::Macro(_) => None, | ||||||
|                         }, |                         }, | ||||||
|                     ) |                     ) | ||||||
|                     .unwrap(); |                     .unwrap(); | ||||||
| @ -616,6 +622,7 @@ impl FunctionDefinitionKind { | |||||||
|             } |             } | ||||||
|             mir::FunctionDefinitionKind::Extern(_) => {} |             mir::FunctionDefinitionKind::Extern(_) => {} | ||||||
|             mir::FunctionDefinitionKind::Intrinsic(_) => {} |             mir::FunctionDefinitionKind::Intrinsic(_) => {} | ||||||
|  |             FunctionDefinitionKind::Macro(_) => {} | ||||||
|         }; |         }; | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
| @ -1379,7 +1386,14 @@ fn codegen_function_call<'ctx, 'a>( | |||||||
|             .or(intrinsic.as_ref()) |             .or(intrinsic.as_ref()) | ||||||
|             .expect(&format!("Function {} does not exist!", call_name)); |             .expect(&format!("Function {} does not exist!", call_name)); | ||||||
|         callee |         callee | ||||||
|             .codegen(&call_name, params.as_slice(), &call.return_type, location, scope) |             .codegen( | ||||||
|  |                 &call_name, | ||||||
|  |                 params.as_slice(), | ||||||
|  |                 &call.parameters, | ||||||
|  |                 &call.return_type, | ||||||
|  |                 location, | ||||||
|  |                 scope, | ||||||
|  |             ) | ||||||
|             .unwrap() |             .unwrap() | ||||||
|     } else { |     } else { | ||||||
|         let callee = scope |         let callee = scope | ||||||
| @ -1388,7 +1402,14 @@ fn codegen_function_call<'ctx, 'a>( | |||||||
|             .expect(&format!("Function {} does not exist!", call_name)); |             .expect(&format!("Function {} does not exist!", call_name)); | ||||||
| 
 | 
 | ||||||
|         callee |         callee | ||||||
|             .codegen(&call_name, params.as_slice(), &call.return_type, location, scope) |             .codegen( | ||||||
|  |                 &call_name, | ||||||
|  |                 params.as_slice(), | ||||||
|  |                 &call.parameters, | ||||||
|  |                 &call.return_type, | ||||||
|  |                 location, | ||||||
|  |                 scope, | ||||||
|  |             ) | ||||||
|             .unwrap() |             .unwrap() | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -7,8 +7,10 @@ use reid_lib::{ | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|  |     codegen::intrinsics::MacroFunction, | ||||||
|     lexer::FullToken, |     lexer::FullToken, | ||||||
|     mir::{ |     mir::{ | ||||||
|  |         self, | ||||||
|         pass::{AssociatedFunctionKey, BinopKey}, |         pass::{AssociatedFunctionKey, BinopKey}, | ||||||
|         CustomTypeKey, FunctionParam, Metadata, SourceModuleId, TypeDefinition, TypeKind, |         CustomTypeKey, FunctionParam, Metadata, SourceModuleId, TypeDefinition, TypeKind, | ||||||
|     }, |     }, | ||||||
| @ -138,6 +140,7 @@ pub enum ScopeFunctionKind<'ctx> { | |||||||
|     UserGenerated(Function<'ctx>), |     UserGenerated(Function<'ctx>), | ||||||
|     Intrinsic(&'ctx Box<dyn IntrinsicFunction>), |     Intrinsic(&'ctx Box<dyn IntrinsicFunction>), | ||||||
|     IntrinsicOwned(Box<dyn IntrinsicFunction>), |     IntrinsicOwned(Box<dyn IntrinsicFunction>), | ||||||
|  |     Macro(&'ctx Box<dyn MacroFunction>), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl<'ctx> StackBinopDefinition<'ctx> { | impl<'ctx> StackBinopDefinition<'ctx> { | ||||||
| @ -156,7 +159,7 @@ impl<'ctx> StackBinopDefinition<'ctx> { | |||||||
|             "binop.{}.{}.{}.call", |             "binop.{}.{}.{}.call", | ||||||
|             self.parameters.0.ty, self.parameters.1.ty, self.return_ty |             self.parameters.0.ty, self.parameters.1.ty, self.return_ty | ||||||
|         ); |         ); | ||||||
|         self.kind.codegen(&name, &[lhs, rhs], &self.return_ty, None, scope) |         self.kind.codegen(&name, &[lhs, rhs], &[], &self.return_ty, None, scope) | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -165,6 +168,7 @@ impl<'ctx> ScopeFunctionKind<'ctx> { | |||||||
|         &self, |         &self, | ||||||
|         name: &str, |         name: &str, | ||||||
|         params: &[StackValue], |         params: &[StackValue], | ||||||
|  |         param_exprs: &[mir::Expression], | ||||||
|         return_ty: &TypeKind, |         return_ty: &TypeKind, | ||||||
|         location: Option<DebugLocation>, |         location: Option<DebugLocation>, | ||||||
|         scope: &mut Scope<'ctx, 'a>, |         scope: &mut Scope<'ctx, 'a>, | ||||||
| @ -189,6 +193,16 @@ impl<'ctx> ScopeFunctionKind<'ctx> { | |||||||
|             } |             } | ||||||
|             ScopeFunctionKind::Intrinsic(fun) => fun.codegen(scope, params), |             ScopeFunctionKind::Intrinsic(fun) => fun.codegen(scope, params), | ||||||
|             ScopeFunctionKind::IntrinsicOwned(fun) => fun.codegen(scope, params), |             ScopeFunctionKind::IntrinsicOwned(fun) => fun.codegen(scope, params), | ||||||
|  |             ScopeFunctionKind::Macro(fun) => fun.codegen( | ||||||
|  |                 scope, | ||||||
|  |                 ¶m_exprs | ||||||
|  |                     .iter() | ||||||
|  |                     .map(|e| match &e.0 { | ||||||
|  |                         crate::mir::ExprKind::Literal(lit) => lit.clone(), | ||||||
|  |                         _ => panic!(), | ||||||
|  |                     }) | ||||||
|  |                     .collect::<Vec<_>>(), | ||||||
|  |             ), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -151,6 +151,7 @@ impl Display for FunctionDefinitionKind { | |||||||
|             FunctionDefinitionKind::Extern(true) => write!(f, "<Imported Extern>"), |             FunctionDefinitionKind::Extern(true) => write!(f, "<Imported Extern>"), | ||||||
|             FunctionDefinitionKind::Extern(false) => write!(f, "<Linked Extern>"), |             FunctionDefinitionKind::Extern(false) => write!(f, "<Linked Extern>"), | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => write!(f, "<Intrinsic>"), |             FunctionDefinitionKind::Intrinsic(_) => write!(f, "<Intrinsic>"), | ||||||
|  |             FunctionDefinitionKind::Macro(_) => write!(f, "<Macro>"), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -615,6 +615,7 @@ impl FunctionDefinition { | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => Err(EqualsIssue::ExistsAsIntrinsic), |             FunctionDefinitionKind::Intrinsic(_) => Err(EqualsIssue::ExistsAsIntrinsic), | ||||||
|  |             FunctionDefinitionKind::Macro(_) => Err(EqualsIssue::ExistsAsIntrinsic), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -269,6 +269,7 @@ impl<'map> Pass for LinkerPass<'map> { | |||||||
|                             } |                             } | ||||||
|                             FunctionDefinitionKind::Extern(_) => {} |                             FunctionDefinitionKind::Extern(_) => {} | ||||||
|                             FunctionDefinitionKind::Intrinsic(_) => {} |                             FunctionDefinitionKind::Intrinsic(_) => {} | ||||||
|  |                             FunctionDefinitionKind::Macro(_) => {} | ||||||
|                         } |                         } | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ use std::{collections::HashMap, path::PathBuf}; | |||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|     ast::token_stream::TokenRange, |     ast::token_stream::TokenRange, | ||||||
|     codegen::intrinsics::IntrinsicFunction, |     codegen::intrinsics::{IntrinsicFunction, MacroFunction}, | ||||||
|     lexer::{FullToken, Position}, |     lexer::{FullToken, Position}, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -322,6 +322,8 @@ pub enum FunctionDefinitionKind { | |||||||
|     Extern(bool), |     Extern(bool), | ||||||
|     /// Intrinsic definition, defined within the compiler
 |     /// Intrinsic definition, defined within the compiler
 | ||||||
|     Intrinsic(Box<dyn IntrinsicFunction>), |     Intrinsic(Box<dyn IntrinsicFunction>), | ||||||
|  |     /// Macro function, executed entirely on the compiler
 | ||||||
|  |     Macro(Box<dyn MacroFunction>), | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl FunctionDefinition { | impl FunctionDefinition { | ||||||
| @ -330,6 +332,7 @@ impl FunctionDefinition { | |||||||
|             FunctionDefinitionKind::Local(block, _) => block.meta.clone(), |             FunctionDefinitionKind::Local(block, _) => block.meta.clone(), | ||||||
|             FunctionDefinitionKind::Extern(_) => Metadata::default(), |             FunctionDefinitionKind::Extern(_) => Metadata::default(), | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), |             FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), | ||||||
|  |             FunctionDefinitionKind::Macro(_) => Metadata::default(), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -338,6 +341,7 @@ impl FunctionDefinition { | |||||||
|             FunctionDefinitionKind::Local(_, metadata) => metadata.clone(), |             FunctionDefinitionKind::Local(_, metadata) => metadata.clone(), | ||||||
|             FunctionDefinitionKind::Extern(_) => Metadata::default(), |             FunctionDefinitionKind::Extern(_) => Metadata::default(), | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), |             FunctionDefinitionKind::Intrinsic(_) => Metadata::default(), | ||||||
|  |             FunctionDefinitionKind::Macro(_) => Metadata::default(), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -402,6 +406,7 @@ impl BinopDefinition { | |||||||
|             FunctionDefinitionKind::Local(block, _) => Some(block.meta), |             FunctionDefinitionKind::Local(block, _) => Some(block.meta), | ||||||
|             FunctionDefinitionKind::Extern(_) => None, |             FunctionDefinitionKind::Extern(_) => None, | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => None, |             FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |             FunctionDefinitionKind::Macro(_) => None, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -188,6 +188,7 @@ impl<Data: Clone + Default> Scope<Data> { | |||||||
|                     ScopeFunction { |                     ScopeFunction { | ||||||
|                         ret: func.return_type, |                         ret: func.return_type, | ||||||
|                         params: func.parameters.iter().map(|p| p.ty.clone()).collect(), |                         params: func.parameters.iter().map(|p| p.ty.clone()).collect(), | ||||||
|  |                         is_macro: matches!(func.kind, FunctionDefinitionKind::Macro(_)), | ||||||
|                     }, |                     }, | ||||||
|                 ) |                 ) | ||||||
|                 .unwrap(); |                 .unwrap(); | ||||||
| @ -202,6 +203,7 @@ impl<Data: Clone + Default> Scope<Data> { | |||||||
| pub struct ScopeFunction { | pub struct ScopeFunction { | ||||||
|     pub ret: TypeKind, |     pub ret: TypeKind, | ||||||
|     pub params: Vec<TypeKind>, |     pub params: Vec<TypeKind>, | ||||||
|  |     pub is_macro: bool, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Clone, Debug)] | #[derive(Clone, Debug)] | ||||||
| @ -427,6 +429,7 @@ impl Module { | |||||||
|                     ScopeFunction { |                     ScopeFunction { | ||||||
|                         ret: function.return_type.clone(), |                         ret: function.return_type.clone(), | ||||||
|                         params: function.parameters.iter().cloned().map(|v| v.ty).collect(), |                         params: function.parameters.iter().cloned().map(|v| v.ty).collect(), | ||||||
|  |                         is_macro: matches!(function.kind, FunctionDefinitionKind::Macro(_)), | ||||||
|                     }, |                     }, | ||||||
|                 ) |                 ) | ||||||
|                 .ok(); |                 .ok(); | ||||||
| @ -440,6 +443,7 @@ impl Module { | |||||||
|                     ScopeFunction { |                     ScopeFunction { | ||||||
|                         ret: function.return_type.clone(), |                         ret: function.return_type.clone(), | ||||||
|                         params: function.parameters.iter().cloned().map(|v| v.ty).collect(), |                         params: function.parameters.iter().cloned().map(|v| v.ty).collect(), | ||||||
|  |                         is_macro: matches!(function.kind, FunctionDefinitionKind::Macro(_)), | ||||||
|                     }, |                     }, | ||||||
|                 ) |                 ) | ||||||
|                 .ok(); |                 .ok(); | ||||||
| @ -484,6 +488,7 @@ impl FunctionDefinition { | |||||||
|             } |             } | ||||||
|             FunctionDefinitionKind::Extern(_) => {} |             FunctionDefinitionKind::Extern(_) => {} | ||||||
|             FunctionDefinitionKind::Intrinsic(..) => {} |             FunctionDefinitionKind::Intrinsic(..) => {} | ||||||
|  |             FunctionDefinitionKind::Macro(_) => {} | ||||||
|         }; |         }; | ||||||
|         Ok(()) |         Ok(()) | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -88,6 +88,8 @@ pub enum ErrorKind { | |||||||
|     InvalidBinop(BinaryOperator, TypeKind, TypeKind), |     InvalidBinop(BinaryOperator, TypeKind, TypeKind), | ||||||
|     #[error("Could not infer type for {0:?}. Try adding type annotations.")] |     #[error("Could not infer type for {0:?}. Try adding type annotations.")] | ||||||
|     CouldNotInferType(String), |     CouldNotInferType(String), | ||||||
|  |     #[error("Arguments for a macro-function may only contain literals")] | ||||||
|  |     MacroMustBeLiterals, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Clone, Debug, PartialEq, Eq)] | #[derive(Clone, Debug, PartialEq, Eq)] | ||||||
|  | |||||||
| @ -193,7 +193,8 @@ impl FunctionDefinitionKind { | |||||||
|                 block.typecheck(&mut state.inner(), &typerefs, hint.into()) |                 block.typecheck(&mut state.inner(), &typerefs, hint.into()) | ||||||
|             } |             } | ||||||
|             FunctionDefinitionKind::Extern(_) => Ok((ReturnKind::Soft, TypeKind::Vague(Vague::Unknown))), |             FunctionDefinitionKind::Extern(_) => Ok((ReturnKind::Soft, TypeKind::Vague(Vague::Unknown))), | ||||||
|             FunctionDefinitionKind::Intrinsic(..) => Ok((ReturnKind::Soft, TypeKind::Vague(Vague::Unknown))), |             FunctionDefinitionKind::Intrinsic(intrinsic) => Ok((ReturnKind::Soft, TypeKind::Vague(Vague::Unknown))), | ||||||
|  |             FunctionDefinitionKind::Macro(_) => Ok((ReturnKind::Soft, TypeKind::Vague(Vague::Unknown))), | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @ -471,6 +472,16 @@ impl Expression { | |||||||
|                         ); |                         ); | ||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|  |                     if f.is_macro { | ||||||
|  |                         for param in &function_call.parameters { | ||||||
|  |                             match ¶m.0 { | ||||||
|  |                                 ExprKind::Literal(_) => {} | ||||||
|  |                                 _ => return Err(ErrorKind::Null), | ||||||
|  |                             } | ||||||
|  |                         } | ||||||
|  |                         return Ok(function_call.return_type.clone()); | ||||||
|  |                     } | ||||||
|  | 
 | ||||||
|                     let true_params_iter = f |                     let true_params_iter = f | ||||||
|                         .params |                         .params | ||||||
|                         .into_iter() |                         .into_iter() | ||||||
|  | |||||||
| @ -56,6 +56,7 @@ impl<'t> Pass for TypeInference<'t> { | |||||||
|                         FunctionDefinitionKind::Local(..) => ErrorTypedefKind::Local, |                         FunctionDefinitionKind::Local(..) => ErrorTypedefKind::Local, | ||||||
|                         FunctionDefinitionKind::Extern(..) => ErrorTypedefKind::Extern, |                         FunctionDefinitionKind::Extern(..) => ErrorTypedefKind::Extern, | ||||||
|                         FunctionDefinitionKind::Intrinsic(..) => ErrorTypedefKind::Intrinsic, |                         FunctionDefinitionKind::Intrinsic(..) => ErrorTypedefKind::Intrinsic, | ||||||
|  |                         FunctionDefinitionKind::Macro(..) => ErrorTypedefKind::Intrinsic, | ||||||
|                     }, |                     }, | ||||||
|                 ); |                 ); | ||||||
|             } |             } | ||||||
| @ -79,6 +80,7 @@ impl<'t> Pass for TypeInference<'t> { | |||||||
|                         FunctionDefinitionKind::Local(..) => ErrorTypedefKind::Local, |                         FunctionDefinitionKind::Local(..) => ErrorTypedefKind::Local, | ||||||
|                         FunctionDefinitionKind::Extern(..) => ErrorTypedefKind::Extern, |                         FunctionDefinitionKind::Extern(..) => ErrorTypedefKind::Extern, | ||||||
|                         FunctionDefinitionKind::Intrinsic(..) => ErrorTypedefKind::Intrinsic, |                         FunctionDefinitionKind::Intrinsic(..) => ErrorTypedefKind::Intrinsic, | ||||||
|  |                         FunctionDefinitionKind::Macro(..) => ErrorTypedefKind::Intrinsic, | ||||||
|                     }, |                     }, | ||||||
|                 ); |                 ); | ||||||
|             } |             } | ||||||
| @ -191,6 +193,7 @@ impl FunctionDefinition { | |||||||
|             } |             } | ||||||
|             FunctionDefinitionKind::Extern(_) => {} |             FunctionDefinitionKind::Extern(_) => {} | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => {} |             FunctionDefinitionKind::Intrinsic(_) => {} | ||||||
|  |             FunctionDefinitionKind::Macro(_) => {} | ||||||
|         }; |         }; | ||||||
|         let return_ty = self |         let return_ty = self | ||||||
|             .kind |             .kind | ||||||
| @ -223,6 +226,7 @@ impl FunctionDefinitionKind { | |||||||
|             } |             } | ||||||
|             FunctionDefinitionKind::Extern(_) => None, |             FunctionDefinitionKind::Extern(_) => None, | ||||||
|             FunctionDefinitionKind::Intrinsic(_) => None, |             FunctionDefinitionKind::Intrinsic(_) => None, | ||||||
|  |             FunctionDefinitionKind::Macro(_) => todo!(), | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user