Add global api support for llvm-lib
This commit is contained in:
		
							parent
							
								
									a7ac974f46
								
							
						
					
					
						commit
						30257e1a2b
					
				| @ -1,7 +1,7 @@ | |||||||
| use reid_lib::{CmpPredicate, ConstValue, Context, FunctionFlags, Instr, TerminatorKind, Type}; | use reid_lib::{CmpPredicate, ConstValueKind, Context, FunctionFlags, Instr, TerminatorKind, Type}; | ||||||
| 
 | 
 | ||||||
| fn main() { | fn main() { | ||||||
|     use ConstValue::*; |     use ConstValueKind::*; | ||||||
|     use Instr::*; |     use Instr::*; | ||||||
| 
 | 
 | ||||||
|     let context = Context::new("libtest"); |     let context = Context::new("libtest"); | ||||||
|  | |||||||
| @ -4,8 +4,8 @@ | |||||||
| use std::{cell::RefCell, rc::Rc}; | use std::{cell::RefCell, rc::Rc}; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|     Block, BlockData, CompileResult, CustomTypeKind, ErrorKind, FunctionData, Instr, InstructionData, ModuleData, |     Block, BlockData, CompileResult, ConstValueKind, CustomTypeKind, ErrorKind, FunctionData, Instr, InstructionData, | ||||||
|     NamedStruct, TerminatorKind, Type, TypeCategory, TypeData, |     ModuleData, NamedStruct, TerminatorKind, Type, TypeCategory, TypeData, | ||||||
|     debug_information::{ |     debug_information::{ | ||||||
|         DebugInformation, DebugLocationValue, DebugMetadataValue, DebugScopeValue, InstructionDebugRecordData, |         DebugInformation, DebugLocationValue, DebugMetadataValue, DebugScopeValue, InstructionDebugRecordData, | ||||||
|     }, |     }, | ||||||
| @ -27,6 +27,12 @@ pub struct BlockValue(pub(crate) FunctionValue, pub(crate) usize); | |||||||
| #[derive(Clone, Hash, Copy, PartialEq, Eq)] | #[derive(Clone, Hash, Copy, PartialEq, Eq)] | ||||||
| pub struct InstructionValue(pub(crate) BlockValue, pub(crate) usize); | pub struct InstructionValue(pub(crate) BlockValue, pub(crate) usize); | ||||||
| 
 | 
 | ||||||
|  | #[derive(Clone, Hash, Copy, PartialEq, Eq)] | ||||||
|  | pub struct ConstantValue(pub(crate) usize); | ||||||
|  | 
 | ||||||
|  | #[derive(Clone, Hash, Copy, PartialEq, Eq)] | ||||||
|  | pub struct GlobalValue(pub(crate) usize); | ||||||
|  | 
 | ||||||
| #[derive(Clone)] | #[derive(Clone)] | ||||||
| pub struct ModuleHolder { | pub struct ModuleHolder { | ||||||
|     pub(crate) value: ModuleValue, |     pub(crate) value: ModuleValue, | ||||||
| @ -34,6 +40,20 @@ pub struct ModuleHolder { | |||||||
|     pub(crate) functions: Vec<FunctionHolder>, |     pub(crate) functions: Vec<FunctionHolder>, | ||||||
|     pub(crate) types: Vec<TypeHolder>, |     pub(crate) types: Vec<TypeHolder>, | ||||||
|     pub(crate) debug_information: Option<DebugInformation>, |     pub(crate) debug_information: Option<DebugInformation>, | ||||||
|  |     pub(crate) constants: Vec<ConstantValueHolder>, | ||||||
|  |     pub(crate) globals: Vec<GlobalValueHolder>, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[derive(Clone)] | ||||||
|  | pub struct ConstantValueHolder { | ||||||
|  |     pub(crate) value: ConstantValue, | ||||||
|  |     pub(crate) kind: ConstValueKind, | ||||||
|  | } | ||||||
|  | #[derive(Clone)] | ||||||
|  | pub struct GlobalValueHolder { | ||||||
|  |     pub(crate) value: GlobalValue, | ||||||
|  |     pub(crate) name: String, | ||||||
|  |     pub(crate) initializer: ConstantValue, | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Clone)] | #[derive(Clone)] | ||||||
| @ -88,6 +108,8 @@ impl Builder { | |||||||
|             functions: Vec::new(), |             functions: Vec::new(), | ||||||
|             types: Vec::new(), |             types: Vec::new(), | ||||||
|             debug_information: None, |             debug_information: None, | ||||||
|  |             constants: Vec::new(), | ||||||
|  |             globals: Vec::new(), | ||||||
|         }); |         }); | ||||||
|         value |         value | ||||||
|     } |     } | ||||||
| @ -168,6 +190,35 @@ impl Builder { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub(crate) unsafe fn build_constant(&self, module: ModuleValue, kind: ConstValueKind) -> ConstantValue { | ||||||
|  |         unsafe { | ||||||
|  |             let mut modules = self.modules.borrow_mut(); | ||||||
|  |             let module = modules.get_unchecked_mut(module.0); | ||||||
|  |             let value = ConstantValue(module.constants.len()); | ||||||
|  |             module.constants.push(ConstantValueHolder { value, kind }); | ||||||
|  |             value | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub(crate) unsafe fn add_global( | ||||||
|  |         &self, | ||||||
|  |         module: ModuleValue, | ||||||
|  |         name: String, | ||||||
|  |         initializer: ConstantValue, | ||||||
|  |     ) -> GlobalValue { | ||||||
|  |         unsafe { | ||||||
|  |             let mut modules = self.modules.borrow_mut(); | ||||||
|  |             let module = modules.get_unchecked_mut(module.0); | ||||||
|  |             let value = GlobalValue(module.globals.len()); | ||||||
|  |             module.globals.push(GlobalValueHolder { | ||||||
|  |                 value, | ||||||
|  |                 name, | ||||||
|  |                 initializer, | ||||||
|  |             }); | ||||||
|  |             value | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub(crate) unsafe fn find_function(&self, module: ModuleValue, name: &String) -> Option<FunctionValue> { |     pub(crate) unsafe fn find_function(&self, module: ModuleValue, name: &String) -> Option<FunctionValue> { | ||||||
|         unsafe { |         unsafe { | ||||||
|             let mut modules = self.modules.borrow_mut(); |             let mut modules = self.modules.borrow_mut(); | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ use crate::{ | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use super::{ | use super::{ | ||||||
|     CmpPredicate, ConstValue, Context, TerminatorKind, Type, |     CmpPredicate, ConstValueKind, Context, TerminatorKind, Type, | ||||||
|     builder::{ |     builder::{ | ||||||
|         BlockHolder, BlockValue, Builder, FunctionHolder, FunctionValue, InstructionHolder, InstructionValue, |         BlockHolder, BlockValue, Builder, FunctionHolder, FunctionValue, InstructionHolder, InstructionValue, | ||||||
|         ModuleHolder, |         ModuleHolder, | ||||||
| @ -1144,32 +1144,32 @@ impl CmpPredicate { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl ConstValue { | impl ConstValueKind { | ||||||
|     fn as_llvm(&self, module: &LLVMModule) -> LLVMValueRef { |     fn as_llvm(&self, module: &LLVMModule) -> LLVMValueRef { | ||||||
|         unsafe { |         unsafe { | ||||||
|             let t = self.get_type().as_llvm(module.context_ref, &module.types); |             let t = self.get_type().as_llvm(module.context_ref, &module.types); | ||||||
|             match self { |             match self { | ||||||
|                 ConstValue::Bool(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::Bool(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::I8(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::I8(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::I16(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::I16(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::I32(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::I32(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::I64(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::I64(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::I128(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::I128(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::U8(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::U8(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::U16(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::U16(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::U32(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::U32(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::U64(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::U64(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::U128(val) => LLVMConstInt(t, *val as u64, 1), |                 ConstValueKind::U128(val) => LLVMConstInt(t, *val as u64, 1), | ||||||
|                 ConstValue::Str(val) => { |                 ConstValueKind::Str(val) => { | ||||||
|                     LLVMBuildGlobalString(module.builder_ref, into_cstring(val).as_ptr(), c"string".as_ptr()) |                     LLVMBuildGlobalString(module.builder_ref, into_cstring(val).as_ptr(), c"string".as_ptr()) | ||||||
|                 } |                 } | ||||||
|                 ConstValue::F16(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F16(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F32B(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F32B(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F32(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F32(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F64(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F64(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F80(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F80(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F128(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F128(val) => LLVMConstReal(t, *val as f64), | ||||||
|                 ConstValue::F128PPC(val) => LLVMConstReal(t, *val as f64), |                 ConstValueKind::F128PPC(val) => LLVMConstReal(t, *val as f64), | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -8,7 +8,10 @@ use builder::{BlockValue, Builder, FunctionValue, InstructionValue, ModuleValue, | |||||||
| use debug_information::{DebugFileData, DebugInformation, DebugLocationValue, DebugMetadataValue}; | use debug_information::{DebugFileData, DebugInformation, DebugLocationValue, DebugMetadataValue}; | ||||||
| use fmt::PrintableModule; | use fmt::PrintableModule; | ||||||
| 
 | 
 | ||||||
| use crate::debug_information::DebugScopeValue; | use crate::{ | ||||||
|  |     builder::{ConstantValue, GlobalValue}, | ||||||
|  |     debug_information::DebugScopeValue, | ||||||
|  | }; | ||||||
| 
 | 
 | ||||||
| pub mod builder; | pub mod builder; | ||||||
| pub mod compile; | pub mod compile; | ||||||
| @ -121,6 +124,14 @@ impl<'ctx> Module<'ctx> { | |||||||
|     pub fn get_debug_info(&self) -> &Option<DebugInformation> { |     pub fn get_debug_info(&self) -> &Option<DebugInformation> { | ||||||
|         &self.debug_info |         &self.debug_info | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     pub fn add_constant(&self, constant: ConstValueKind) -> ConstantValue { | ||||||
|  |         unsafe { self.builder.build_constant(self.value, constant) } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     pub fn add_global(&self, name: String, constant: ConstantValue) -> GlobalValue { | ||||||
|  |         unsafe { self.builder.add_global(self.value, name, constant) } | ||||||
|  |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl<'ctx> Drop for Module<'ctx> { | impl<'ctx> Drop for Module<'ctx> { | ||||||
| @ -361,7 +372,7 @@ pub enum CmpPredicate { | |||||||
| #[derive(Clone)] | #[derive(Clone)] | ||||||
| pub enum Instr { | pub enum Instr { | ||||||
|     Param(usize), |     Param(usize), | ||||||
|     Constant(ConstValue), |     Constant(ConstValueKind), | ||||||
| 
 | 
 | ||||||
|     /// Add two integers
 |     /// Add two integers
 | ||||||
|     Add(InstructionValue, InstructionValue), |     Add(InstructionValue, InstructionValue), | ||||||
| @ -487,7 +498,7 @@ pub enum Type { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
| pub enum ConstValue { | pub enum ConstValueKind { | ||||||
|     I8(i8), |     I8(i8), | ||||||
|     I16(i16), |     I16(i16), | ||||||
|     I32(i32), |     I32(i32), | ||||||
| @ -531,29 +542,29 @@ pub enum CustomTypeKind { | |||||||
| #[derive(Debug, PartialEq, Eq, Clone, Hash)] | #[derive(Debug, PartialEq, Eq, Clone, Hash)] | ||||||
| pub struct NamedStruct(pub String, pub Vec<Type>); | pub struct NamedStruct(pub String, pub Vec<Type>); | ||||||
| 
 | 
 | ||||||
| impl ConstValue { | impl ConstValueKind { | ||||||
|     pub fn get_type(&self) -> Type { |     pub fn get_type(&self) -> Type { | ||||||
|         use Type::*; |         use Type::*; | ||||||
|         match self { |         match self { | ||||||
|             ConstValue::I8(_) => I8, |             ConstValueKind::I8(_) => I8, | ||||||
|             ConstValue::I16(_) => I16, |             ConstValueKind::I16(_) => I16, | ||||||
|             ConstValue::I32(_) => I32, |             ConstValueKind::I32(_) => I32, | ||||||
|             ConstValue::I64(_) => I64, |             ConstValueKind::I64(_) => I64, | ||||||
|             ConstValue::I128(_) => I128, |             ConstValueKind::I128(_) => I128, | ||||||
|             ConstValue::U8(_) => U8, |             ConstValueKind::U8(_) => U8, | ||||||
|             ConstValue::U16(_) => U16, |             ConstValueKind::U16(_) => U16, | ||||||
|             ConstValue::U32(_) => U32, |             ConstValueKind::U32(_) => U32, | ||||||
|             ConstValue::U64(_) => U64, |             ConstValueKind::U64(_) => U64, | ||||||
|             ConstValue::U128(_) => U128, |             ConstValueKind::U128(_) => U128, | ||||||
|             ConstValue::Str(_) => Type::Ptr(Box::new(U8)), |             ConstValueKind::Str(_) => Type::Ptr(Box::new(U8)), | ||||||
|             ConstValue::Bool(_) => Bool, |             ConstValueKind::Bool(_) => Bool, | ||||||
|             ConstValue::F16(_) => F16, |             ConstValueKind::F16(_) => F16, | ||||||
|             ConstValue::F32B(_) => F32B, |             ConstValueKind::F32B(_) => F32B, | ||||||
|             ConstValue::F32(_) => F32, |             ConstValueKind::F32(_) => F32, | ||||||
|             ConstValue::F64(_) => F64, |             ConstValueKind::F64(_) => F64, | ||||||
|             ConstValue::F80(_) => F80, |             ConstValueKind::F80(_) => F80, | ||||||
|             ConstValue::F128(_) => F128, |             ConstValueKind::F128(_) => F128, | ||||||
|             ConstValue::F128PPC(_) => F128PPC, |             ConstValueKind::F128PPC(_) => F128PPC, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| use reid_lib::{builder::InstructionValue, CmpPredicate, ConstValue, Instr, Type}; | use reid_lib::{builder::InstructionValue, CmpPredicate, ConstValueKind, Instr, Type}; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
|     codegen::{ErrorKind, StackValueKind}, |     codegen::{ErrorKind, StackValueKind}, | ||||||
| @ -364,7 +364,7 @@ impl IntrinsicFunction for IntrinsicSizeOf { | |||||||
|     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, _: &[StackValue]) -> Result<StackValue, ErrorKind> { |     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, _: &[StackValue]) -> Result<StackValue, ErrorKind> { | ||||||
|         let instr = scope |         let instr = scope | ||||||
|             .block |             .block | ||||||
|             .build(Instr::Constant(reid_lib::ConstValue::U64(self.0.size_of() / 8))) |             .build(Instr::Constant(reid_lib::ConstValueKind::U64(self.0.size_of() / 8))) | ||||||
|             .unwrap(); |             .unwrap(); | ||||||
|         Ok(StackValue(StackValueKind::Literal(instr), self.0.clone())) |         Ok(StackValue(StackValueKind::Literal(instr), self.0.clone())) | ||||||
|     } |     } | ||||||
| @ -382,7 +382,7 @@ impl IntrinsicFunction for IntrinsicMalloc { | |||||||
| 
 | 
 | ||||||
|         let sizeof = scope |         let sizeof = scope | ||||||
|             .block |             .block | ||||||
|             .build(Instr::Constant(ConstValue::U64(self.0.size_of() / 8))) |             .build(Instr::Constant(ConstValueKind::U64(self.0.size_of() / 8))) | ||||||
|             .unwrap(); |             .unwrap(); | ||||||
|         let bytes = scope.block.build(Instr::Mul(sizeof, amount.instr())).unwrap(); |         let bytes = scope.block.build(Instr::Mul(sizeof, amount.instr())).unwrap(); | ||||||
|         let instr = scope.block.build(Instr::FunctionCall(function, vec![bytes])).unwrap(); |         let instr = scope.block.build(Instr::FunctionCall(function, vec![bytes])).unwrap(); | ||||||
| @ -394,7 +394,7 @@ impl IntrinsicFunction for IntrinsicMalloc { | |||||||
| pub struct IntrinsicNullPtr(TypeKind); | pub struct IntrinsicNullPtr(TypeKind); | ||||||
| impl IntrinsicFunction for IntrinsicNullPtr { | impl IntrinsicFunction for IntrinsicNullPtr { | ||||||
|     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, _: &[StackValue]) -> Result<StackValue, ErrorKind> { |     fn codegen<'ctx, 'a>(&self, scope: &mut Scope<'ctx, 'a>, _: &[StackValue]) -> Result<StackValue, ErrorKind> { | ||||||
|         let zero = scope.block.build(Instr::Constant(ConstValue::I8(0))).unwrap(); |         let zero = scope.block.build(Instr::Constant(ConstValueKind::I8(0))).unwrap(); | ||||||
|         let instr = scope |         let instr = scope | ||||||
|             .block |             .block | ||||||
|             .build(Instr::IntToPtr( |             .build(Instr::IntToPtr( | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ use reid_lib::{ | |||||||
|         DebugSubprogramData, DebugSubprogramOptionals, DebugSubprogramType, DebugTypeData, DwarfFlags, |         DebugSubprogramData, DebugSubprogramOptionals, DebugSubprogramType, DebugTypeData, DwarfFlags, | ||||||
|         InstructionDebugRecordData, |         InstructionDebugRecordData, | ||||||
|     }, |     }, | ||||||
|     CmpPredicate, ConstValue, Context, CustomTypeKind, Function, FunctionFlags, Instr, Module, NamedStruct, |     CmpPredicate, ConstValueKind, Context, CustomTypeKind, Function, FunctionFlags, Instr, Module, NamedStruct, | ||||||
|     TerminatorKind as Term, Type, |     TerminatorKind as Term, Type, | ||||||
| }; | }; | ||||||
| use scope::*; | use scope::*; | ||||||
| @ -784,7 +784,7 @@ impl mir::Statement { | |||||||
|                 let condition_res = condition.codegen(&mut condition_scope, state)?.unwrap(); |                 let condition_res = condition.codegen(&mut condition_scope, state)?.unwrap(); | ||||||
|                 let true_instr = condition_scope |                 let true_instr = condition_scope | ||||||
|                     .block |                     .block | ||||||
|                     .build(Instr::Constant(ConstValue::Bool(true))) |                     .build(Instr::Constant(ConstValueKind::Bool(true))) | ||||||
|                     .unwrap(); |                     .unwrap(); | ||||||
|                 let check = condition_scope |                 let check = condition_scope | ||||||
|                     .block |                     .block | ||||||
| @ -1031,7 +1031,7 @@ impl mir::Expression { | |||||||
| 
 | 
 | ||||||
|                     let first = scope |                     let first = scope | ||||||
|                         .block |                         .block | ||||||
|                         .build_named("array.zero", Instr::Constant(ConstValue::U32(0))) |                         .build_named("array.zero", Instr::Constant(ConstValueKind::U32(0))) | ||||||
|                         .unwrap(); |                         .unwrap(); | ||||||
|                     ( |                     ( | ||||||
|                         scope |                         scope | ||||||
| @ -1098,11 +1098,11 @@ impl mir::Expression { | |||||||
| 
 | 
 | ||||||
|                     let index_expr = scope |                     let index_expr = scope | ||||||
|                         .block |                         .block | ||||||
|                         .build_named(index.to_string(), Instr::Constant(ConstValue::U32(index as u32))) |                         .build_named(index.to_string(), Instr::Constant(ConstValueKind::U32(index as u32))) | ||||||
|                         .unwrap(); |                         .unwrap(); | ||||||
|                     let first = scope |                     let first = scope | ||||||
|                         .block |                         .block | ||||||
|                         .build_named("zero", Instr::Constant(ConstValue::U32(0))) |                         .build_named("zero", Instr::Constant(ConstValueKind::U32(0))) | ||||||
|                         .unwrap(); |                         .unwrap(); | ||||||
|                     let ptr = scope |                     let ptr = scope | ||||||
|                         .block |                         .block | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ use reid_lib::{ | |||||||
|         DebugArrayType, DebugBasicType, DebugFieldType, DebugInformation, DebugLocation, DebugPointerType, |         DebugArrayType, DebugBasicType, DebugFieldType, DebugInformation, DebugLocation, DebugPointerType, | ||||||
|         DebugPosition, DebugScopeValue, DebugStructType, DebugTypeData, DebugTypeValue, DwarfEncoding, DwarfFlags, |         DebugPosition, DebugScopeValue, DebugStructType, DebugTypeData, DebugTypeValue, DwarfEncoding, DwarfFlags, | ||||||
|     }, |     }, | ||||||
|     Block, CmpPredicate, ConstValue, Instr, Type, |     Block, CmpPredicate, ConstValueKind, Instr, Type, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use crate::{ | use crate::{ | ||||||
| @ -39,28 +39,28 @@ impl mir::Literal { | |||||||
| 
 | 
 | ||||||
|     pub(super) fn as_const_kind(&self) -> Instr { |     pub(super) fn as_const_kind(&self) -> Instr { | ||||||
|         Instr::Constant(match self.clone() { |         Instr::Constant(match self.clone() { | ||||||
|             mir::Literal::I8(val) => ConstValue::I8(val), |             mir::Literal::I8(val) => ConstValueKind::I8(val), | ||||||
|             mir::Literal::I16(val) => ConstValue::I16(val), |             mir::Literal::I16(val) => ConstValueKind::I16(val), | ||||||
|             mir::Literal::I32(val) => ConstValue::I32(val), |             mir::Literal::I32(val) => ConstValueKind::I32(val), | ||||||
|             mir::Literal::I64(val) => ConstValue::I64(val), |             mir::Literal::I64(val) => ConstValueKind::I64(val), | ||||||
|             mir::Literal::I128(val) => ConstValue::I128(val), |             mir::Literal::I128(val) => ConstValueKind::I128(val), | ||||||
|             mir::Literal::U8(val) => ConstValue::U8(val), |             mir::Literal::U8(val) => ConstValueKind::U8(val), | ||||||
|             mir::Literal::U16(val) => ConstValue::U16(val), |             mir::Literal::U16(val) => ConstValueKind::U16(val), | ||||||
|             mir::Literal::U32(val) => ConstValue::U32(val), |             mir::Literal::U32(val) => ConstValueKind::U32(val), | ||||||
|             mir::Literal::U64(val) => ConstValue::U64(val), |             mir::Literal::U64(val) => ConstValueKind::U64(val), | ||||||
|             mir::Literal::U128(val) => ConstValue::U128(val), |             mir::Literal::U128(val) => ConstValueKind::U128(val), | ||||||
|             mir::Literal::Bool(val) => ConstValue::Bool(val), |             mir::Literal::Bool(val) => ConstValueKind::Bool(val), | ||||||
|             mir::Literal::String(val) => ConstValue::Str(val.clone()), |             mir::Literal::String(val) => ConstValueKind::Str(val.clone()), | ||||||
|             mir::Literal::Vague(VagueLiteral::Number(val)) => ConstValue::I32(val as i32), |             mir::Literal::Vague(VagueLiteral::Number(val)) => ConstValueKind::I32(val as i32), | ||||||
|             mir::Literal::Vague(VagueLiteral::Decimal(val)) => ConstValue::F32(val as f32), |             mir::Literal::Vague(VagueLiteral::Decimal(val)) => ConstValueKind::F32(val as f32), | ||||||
|             mir::Literal::F16(val) => ConstValue::F16(val), |             mir::Literal::F16(val) => ConstValueKind::F16(val), | ||||||
|             mir::Literal::F32B(val) => ConstValue::F32B(val), |             mir::Literal::F32B(val) => ConstValueKind::F32B(val), | ||||||
|             mir::Literal::F32(val) => ConstValue::F32(val), |             mir::Literal::F32(val) => ConstValueKind::F32(val), | ||||||
|             mir::Literal::F64(val) => ConstValue::F64(val), |             mir::Literal::F64(val) => ConstValueKind::F64(val), | ||||||
|             mir::Literal::F80(val) => ConstValue::F80(val), |             mir::Literal::F80(val) => ConstValueKind::F80(val), | ||||||
|             mir::Literal::F128(val) => ConstValue::F128(val), |             mir::Literal::F128(val) => ConstValueKind::F128(val), | ||||||
|             mir::Literal::F128PPC(val) => ConstValue::F128PPC(val), |             mir::Literal::F128PPC(val) => ConstValueKind::F128PPC(val), | ||||||
|             mir::Literal::Char(c) => ConstValue::U8(c as u8), |             mir::Literal::Char(c) => ConstValueKind::U8(c as u8), | ||||||
|         }) |         }) | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -82,7 +82,6 @@ impl mir::Statement { | |||||||
| 
 | 
 | ||||||
| impl mir::Expression { | impl mir::Expression { | ||||||
|     fn gen_macros(&mut self, data: &MacroPass, state: &mut MacroPassState) -> PassResult { |     fn gen_macros(&mut self, data: &MacroPass, state: &mut MacroPassState) -> PassResult { | ||||||
|         dbg!("asd?"); |  | ||||||
|         match &mut self.0 { |         match &mut self.0 { | ||||||
|             mir::ExprKind::FunctionCall(function_call) => { |             mir::ExprKind::FunctionCall(function_call) => { | ||||||
|                 if function_call.is_macro { |                 if function_call.is_macro { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user