Make the compiler work on macOS

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
Slendi 2024-03-10 01:16:25 +02:00
parent 1092c68317
commit e4289d577a
5 changed files with 677 additions and 579 deletions

5
odinfmt.json Normal file
View File

@ -0,0 +1,5 @@
{
"$schema": "https://raw.githubusercontent.com/DanielGavin/ols/master/misc/odinfmt.schema.json",
"character_width": "120"
}

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,10 @@
package main package main
foreign import llvmc "LLVM-C.lib" when ODIN_OS == .Windows {
foreign import llvmc "llvm/win64/LLVM-C.lib"
} else when ODIN_OS == .Linux || ODIN_OS == .Darwin {
foreign import llvmc "system:LLVM-C"
}
LLVMBool :: distinct int LLVMBool :: distinct int
LLVMMemoryBufferRef :: distinct rawptr LLVMMemoryBufferRef :: distinct rawptr
@ -23,150 +27,150 @@ LLVMJITEventListenerRef :: distinct rawptr
LLVMBinaryRef :: distinct rawptr LLVMBinaryRef :: distinct rawptr
LLVMTypeKind :: enum { LLVMTypeKind :: enum {
LLVMVoidTypeKind, LLVMVoidTypeKind,
LLVMHalfTypeKind, LLVMHalfTypeKind,
LLVMFloatTypeKind, LLVMFloatTypeKind,
LLVMDoubleTypeKind, LLVMDoubleTypeKind,
LLVMX86_FP80TypeKind, LLVMX86_FP80TypeKind,
LLVMFP128TypeKind, LLVMFP128TypeKind,
LLVMPPC_FP128TypeKind, LLVMPPC_FP128TypeKind,
LLVMLabelTypeKind, LLVMLabelTypeKind,
LLVMIntegerTypeKind, LLVMIntegerTypeKind,
LLVMFunctionTypeKind, LLVMFunctionTypeKind,
LLVMStructTypeKind, LLVMStructTypeKind,
LLVMArrayTypeKind, LLVMArrayTypeKind,
LLVMPointerTypeKind, LLVMPointerTypeKind,
LLVMVectorTypeKind, LLVMVectorTypeKind,
LLVMMetadataTypeKind, LLVMMetadataTypeKind,
LLVMX86_MMXTypeKind, LLVMX86_MMXTypeKind,
LLVMTokenTypeKind, LLVMTokenTypeKind,
LLVMScalableVectorTypeKind, LLVMScalableVectorTypeKind,
LLVMBFloatTypeKind, LLVMBFloatTypeKind,
LLVMX86_AMXTypeKind, LLVMX86_AMXTypeKind,
LLVMTargetExtTypeKind, LLVMTargetExtTypeKind,
} }
LLVMIntPredicate :: enum { LLVMIntPredicate :: enum {
LLVMIntEQ = 32, LLVMIntEQ = 32,
LLVMIntNE, LLVMIntNE,
LLVMIntUGT, LLVMIntUGT,
LLVMIntUGE, LLVMIntUGE,
LLVMIntULT, LLVMIntULT,
LLVMIntULE, LLVMIntULE,
LLVMIntSGT, LLVMIntSGT,
LLVMIntSGE, LLVMIntSGE,
LLVMIntSLT, LLVMIntSLT,
LLVMIntSLE, LLVMIntSLE,
} }
LLVMRealPredicate :: enum { LLVMRealPredicate :: enum {
LLVMRealPredicateFalse, LLVMRealPredicateFalse,
LLVMRealOEQ, LLVMRealOEQ,
LLVMRealOGT, LLVMRealOGT,
LLVMRealOGE, LLVMRealOGE,
LLVMRealOLT, LLVMRealOLT,
LLVMRealOLE, LLVMRealOLE,
LLVMRealONE, LLVMRealONE,
LLVMRealORD, LLVMRealORD,
LLVMRealUNO, LLVMRealUNO,
LLVMRealUEQ, LLVMRealUEQ,
LLVMRealUGT, LLVMRealUGT,
LLVMRealUGE, LLVMRealUGE,
LLVMRealULT, LLVMRealULT,
LLVMRealULE, LLVMRealULE,
LLVMRealUNE, LLVMRealUNE,
LLVMRealPredicateTrue LLVMRealPredicateTrue,
}; }
@(default_calling_convention = "std") @(default_calling_convention = "c")
foreign llvmc { foreign llvmc {
LLVMContextCreate :: proc() -> LLVMContextRef --- LLVMContextCreate :: proc() -> LLVMContextRef ---
LLVMModuleCreateWithName :: proc(name: cstring) -> LLVMModuleRef --- LLVMModuleCreateWithName :: proc(name: cstring) -> LLVMModuleRef ---
LLVMModuleCreateWithNameInContext :: proc(name: cstring, C: LLVMContextRef) -> LLVMModuleRef --- LLVMModuleCreateWithNameInContext :: proc(name: cstring, C: LLVMContextRef) -> LLVMModuleRef ---
LLVMCreateBuilderInContext :: proc(C: LLVMContextRef) -> LLVMBuilderRef --- LLVMCreateBuilderInContext :: proc(C: LLVMContextRef) -> LLVMBuilderRef ---
LLVMPositionBuilderAtEnd :: proc(Builder: LLVMBuilderRef, Block: LLVMBasicBlockRef) --- LLVMPositionBuilderAtEnd :: proc(Builder: LLVMBuilderRef, Block: LLVMBasicBlockRef) ---
LLVMBuildPointerCast :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, DestTy: LLVMTypeRef, Name: cstring) -> LLVMValueRef --- LLVMBuildPointerCast :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, DestTy: LLVMTypeRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildGlobalString :: proc(Builder: LLVMBuilderRef, Str: cstring, Name: cstring) -> LLVMValueRef --- LLVMBuildGlobalString :: proc(Builder: LLVMBuilderRef, Str: cstring, Name: cstring) -> LLVMValueRef ---
LLVMBuildGlobalStringPtr :: proc(Builder: LLVMBuilderRef, Str: cstring, Name: cstring) -> LLVMValueRef --- LLVMBuildGlobalStringPtr :: proc(Builder: LLVMBuilderRef, Str: cstring, Name: cstring) -> LLVMValueRef ---
LLVMBuildCall2 :: proc(Builder: LLVMBuilderRef, Type: LLVMTypeRef, Fn: LLVMValueRef, Args: [^]LLVMValueRef, NumArgs: uint, Name: cstring) -> LLVMValueRef --- LLVMBuildCall2 :: proc(Builder: LLVMBuilderRef, Type: LLVMTypeRef, Fn: LLVMValueRef, Args: [^]LLVMValueRef, NumArgs: uint, Name: cstring) -> LLVMValueRef ---
LLVMBuildRetVoid :: proc(Builder: LLVMBuilderRef) -> LLVMValueRef --- LLVMBuildRetVoid :: proc(Builder: LLVMBuilderRef) -> LLVMValueRef ---
LLVMBuildRet :: proc(Builder: LLVMBuilderRef, V: LLVMValueRef) -> LLVMValueRef --- LLVMBuildRet :: proc(Builder: LLVMBuilderRef, V: LLVMValueRef) -> LLVMValueRef ---
LLVMInt1TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMInt1TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMInt8TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMInt8TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMInt16TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMInt16TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMInt32TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMInt32TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMInt64TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMInt64TypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMIntTypeInContext :: proc(C: LLVMContextRef, n: uint) -> LLVMTypeRef --- LLVMIntTypeInContext :: proc(C: LLVMContextRef, n: uint) -> LLVMTypeRef ---
LLVMDoubleTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMDoubleTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMFloatTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMFloatTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMVoidTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef --- LLVMVoidTypeInContext :: proc(C: LLVMContextRef) -> LLVMTypeRef ---
LLVMGetTypeKind :: proc(Ty: LLVMTypeRef) -> LLVMTypeKind --- LLVMGetTypeKind :: proc(Ty: LLVMTypeRef) -> LLVMTypeKind ---
LLVMArrayType2 :: proc(ElementType: LLVMTypeRef, ElementCount: u64) -> LLVMTypeRef --- LLVMArrayType2 :: proc(ElementType: LLVMTypeRef, ElementCount: u64) -> LLVMTypeRef ---
LLVMPointerType :: proc(ElementType: LLVMTypeRef, AddressSpace: uint) -> LLVMTypeRef --- LLVMPointerType :: proc(ElementType: LLVMTypeRef, AddressSpace: uint) -> LLVMTypeRef ---
LLVMConstInt :: proc(IntTy: LLVMTypeRef, N: u64, SignExtend: LLVMBool) -> LLVMValueRef --- LLVMConstInt :: proc(IntTy: LLVMTypeRef, N: u64, SignExtend: LLVMBool) -> LLVMValueRef ---
LLVMConstReal :: proc(RealTy: LLVMTypeRef, N: f64) -> LLVMValueRef --- LLVMConstReal :: proc(RealTy: LLVMTypeRef, N: f64) -> LLVMValueRef ---
LLVMFunctionType :: proc(ReturnType: LLVMTypeRef, ParamTypes: [^]LLVMTypeRef, ParamCount: uint, IsVarArg: LLVMBool) -> LLVMTypeRef --- LLVMFunctionType :: proc(ReturnType: LLVMTypeRef, ParamTypes: [^]LLVMTypeRef, ParamCount: uint, IsVarArg: LLVMBool) -> LLVMTypeRef ---
LLVMAddFunction :: proc(M: LLVMModuleRef, Name: cstring, FunctionType: LLVMTypeRef) -> LLVMValueRef --- LLVMAddFunction :: proc(M: LLVMModuleRef, Name: cstring, FunctionType: LLVMTypeRef) -> LLVMValueRef ---
LLVMAppendBasicBlockInContext :: proc(C: LLVMContextRef, Fn: LLVMValueRef, Name: cstring) -> LLVMBasicBlockRef --- LLVMAppendBasicBlockInContext :: proc(C: LLVMContextRef, Fn: LLVMValueRef, Name: cstring) -> LLVMBasicBlockRef ---
LLVMCreateBasicBlockInContext :: proc(C: LLVMContextRef, Name: cstring) -> LLVMBasicBlockRef --- LLVMCreateBasicBlockInContext :: proc(C: LLVMContextRef, Name: cstring) -> LLVMBasicBlockRef ---
LLVMGetLastBasicBlock :: proc(Fn: LLVMValueRef) -> LLVMBasicBlockRef --- LLVMGetLastBasicBlock :: proc(Fn: LLVMValueRef) -> LLVMBasicBlockRef ---
LLVMGetInsertBlock :: proc(Builder: LLVMBuilderRef) -> LLVMBasicBlockRef --- LLVMGetInsertBlock :: proc(Builder: LLVMBuilderRef) -> LLVMBasicBlockRef ---
LLVMInsertExistingBasicBlockAfterInsertBlock :: proc(Builder: LLVMBuilderRef, Block: LLVMBasicBlockRef) --- LLVMInsertExistingBasicBlockAfterInsertBlock :: proc(Builder: LLVMBuilderRef, Block: LLVMBasicBlockRef) ---
LLVMAppendExistingBasicBlock :: proc(Fn: LLVMValueRef, Block: LLVMBasicBlockRef) --- LLVMAppendExistingBasicBlock :: proc(Fn: LLVMValueRef, Block: LLVMBasicBlockRef) ---
LLVMPrintModuleToFile :: proc(M: LLVMModuleRef, Filename: cstring, ErrorMessage: ^cstring) -> LLVMBool --- LLVMPrintModuleToFile :: proc(M: LLVMModuleRef, Filename: cstring, ErrorMessage: ^cstring) -> LLVMBool ---
LLVMGetValueName2 :: proc(V: LLVMValueRef, Length: ^u64) -> cstring --- LLVMGetValueName2 :: proc(V: LLVMValueRef, Length: ^u64) -> cstring ---
LLVMBuildFAdd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFAdd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildAdd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildAdd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildFSub :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFSub :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildSub :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildSub :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildFMul :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFMul :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildMul :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildMul :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildFDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildUDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildUDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildSDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildSDiv :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildFRem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFRem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildURem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildURem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildSRem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildSRem :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildAlloca :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring) -> LLVMValueRef --- LLVMBuildAlloca :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildStore :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, Ptr: LLVMValueRef) -> LLVMValueRef --- LLVMBuildStore :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, Ptr: LLVMValueRef) -> LLVMValueRef ---
LLVMBuildLoad2 :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, PointerVal: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildLoad2 :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, PointerVal: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildBr :: proc(Builder: LLVMBuilderRef, Dest: LLVMBasicBlockRef) -> LLVMValueRef --- LLVMBuildBr :: proc(Builder: LLVMBuilderRef, Dest: LLVMBasicBlockRef) -> LLVMValueRef ---
LLVMBuildCondBr :: proc(Builder: LLVMBuilderRef, If: LLVMValueRef, Then: LLVMBasicBlockRef, Else: LLVMBasicBlockRef) -> LLVMValueRef --- LLVMBuildCondBr :: proc(Builder: LLVMBuilderRef, If: LLVMValueRef, Then: LLVMBasicBlockRef, Else: LLVMBasicBlockRef) -> LLVMValueRef ---
LLVMBuildICmp :: proc(Builder: LLVMBuilderRef, Predicate: LLVMIntPredicate, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildICmp :: proc(Builder: LLVMBuilderRef, Predicate: LLVMIntPredicate, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildFCmp :: proc(Builder: LLVMBuilderRef, Predicate: LLVMRealPredicate, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildFCmp :: proc(Builder: LLVMBuilderRef, Predicate: LLVMRealPredicate, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildAnd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildAnd :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildOr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildOr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildXor :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildXor :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildNot :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildNot :: proc(Builder: LLVMBuilderRef, Val: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildShl :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildShl :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildLShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildLShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildAShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildAShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef --- LLVMBuildShr :: proc(Builder: LLVMBuilderRef, LHS: LLVMValueRef, RHS: LLVMValueRef, Name: cstring) -> LLVMValueRef ---
LLVMBuildPhi :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring) -> LLVMValueRef --- LLVMBuildPhi :: proc(Builder: LLVMBuilderRef, Ty: LLVMTypeRef, Name: cstring) -> LLVMValueRef ---
LLVMTypeOf :: proc(Val: LLVMValueRef) -> LLVMTypeRef --- LLVMTypeOf :: proc(Val: LLVMValueRef) -> LLVMTypeRef ---
LLVMAddIncoming :: proc(PhiNode: LLVMValueRef, IncomingValues: [^]LLVMValueRef, IncomingBlocks: [^]LLVMBasicBlockRef, Count: uint) --- LLVMAddIncoming :: proc(PhiNode: LLVMValueRef, IncomingValues: [^]LLVMValueRef, IncomingBlocks: [^]LLVMBasicBlockRef, Count: uint) ---
LLVMDisposeBuilder :: proc(Builder: LLVMBuilderRef) --- LLVMDisposeBuilder :: proc(Builder: LLVMBuilderRef) ---
LLVMDisposeModule :: proc(M: LLVMModuleRef) --- LLVMDisposeModule :: proc(M: LLVMModuleRef) ---
LLVMContextDispose :: proc(C: LLVMContextRef) --- LLVMContextDispose :: proc(C: LLVMContextRef) ---
} }

View File

@ -2,7 +2,7 @@
- [x] Create a TODO list - [x] Create a TODO list
- [ ] Custom Functions (not external) - [ ] Custom Functions (not external)
- [ ] Add support for function definitions in the type checker - [x] Add support for function definitions in the type checker
- [ ] Add support for function definitions in the LLVM emitter - [ ] Add support for function definitions in the LLVM emitter
- [ ] Structures - [ ] Structures
- [ ] Add support for packed in the parser - [ ] Add support for packed in the parser