Compare commits

..

2 Commits

Author SHA1 Message Date
David Mak aa84cc425f core: Refactor VarMap to IndexMap
This is the only Map I can find that preserves insertion order while
also deduplicating elements by key.
2024-03-21 21:10:39 +08:00
David Mak f7fbc629aa core: Add ArrayLikeValue
For exposing LLVM values that can be accessed like an array.
2024-03-21 21:10:19 +08:00
3 changed files with 14 additions and 9 deletions

View File

@ -2,7 +2,14 @@ use std::{collections::HashMap, convert::TryInto, iter::once, iter::zip};
use crate::{ use crate::{
codegen::{ codegen::{
classes::{ArrayLikeIndexer, ListValue, NDArrayValue, RangeValue, UntypedArrayLikeAccessor}, classes::{
ArrayLikeIndexer,
ArrayLikeValue,
ListValue,
NDArrayValue,
RangeValue,
UntypedArrayLikeAccessor,
},
concrete_type::{ConcreteFuncArg, ConcreteTypeEnum, ConcreteTypeStore}, concrete_type::{ConcreteFuncArg, ConcreteTypeEnum, ConcreteTypeStore},
gen_in_range_check, gen_in_range_check,
get_llvm_type, get_llvm_type,
@ -35,7 +42,6 @@ use itertools::{chain, izip, Itertools, Either};
use nac3parser::ast::{ use nac3parser::ast::{
self, Boolop, Comprehension, Constant, Expr, ExprKind, Location, Operator, StrRef, self, Boolop, Comprehension, Constant, Expr, ExprKind, Location, Operator, StrRef,
}; };
use crate::codegen::classes::ArrayLikeValue;
use super::{CodeGenerator, llvm_intrinsics::call_memcpy_generic, need_sret}; use super::{CodeGenerator, llvm_intrinsics::call_memcpy_generic, need_sret};

View File

@ -1,7 +1,7 @@
use crate::typecheck::typedef::Type; use crate::typecheck::typedef::Type;
use super::{ use super::{
classes::{ArrayLikeIndexer, ListValue, NDArrayValue, UntypedArrayLikeMutator}, classes::{ArrayLikeIndexer, ArrayLikeValue, ListValue, NDArrayValue, UntypedArrayLikeMutator},
CodeGenContext, CodeGenContext,
CodeGenerator, CodeGenerator,
}; };
@ -16,7 +16,6 @@ use inkwell::{
}; };
use itertools::Either; use itertools::Either;
use nac3parser::ast::Expr; use nac3parser::ast::Expr;
use crate::codegen::classes::ArrayLikeValue;
#[must_use] #[must_use]
pub fn load_irrt(ctx: &Context) -> Module { pub fn load_irrt(ctx: &Context) -> Module {
@ -579,9 +578,9 @@ pub fn call_ndarray_calc_size<'ctx, G, Dims>(
generator: &G, generator: &G,
ctx: &CodeGenContext<'ctx, '_>, ctx: &CodeGenContext<'ctx, '_>,
dims: &Dims, dims: &Dims,
) -> IntValue<'ctx> ) -> IntValue<'ctx>
where where
G: CodeGenerator + ?Sized, G: CodeGenerator + ?Sized,
Dims: ArrayLikeIndexer<'ctx>, { Dims: ArrayLikeIndexer<'ctx>, {
let llvm_i64 = ctx.ctx.i64_type(); let llvm_i64 = ctx.ctx.i64_type();
let llvm_usize = generator.get_size_type(ctx.ctx); let llvm_usize = generator.get_size_type(ctx.ctx);
@ -688,8 +687,7 @@ fn call_ndarray_flatten_index_impl<'ctx, G, Indices>(
) -> IntValue<'ctx> ) -> IntValue<'ctx>
where where
G: CodeGenerator + ?Sized, G: CodeGenerator + ?Sized,
Indices: ArrayLikeIndexer<'ctx>, Indices: ArrayLikeIndexer<'ctx>, {
{
let llvm_i32 = ctx.ctx.i32_type(); let llvm_i32 = ctx.ctx.i32_type();
let llvm_usize = generator.get_size_type(ctx.ctx); let llvm_usize = generator.get_size_type(ctx.ctx);

View File

@ -8,9 +8,11 @@ use crate::{
codegen::{ codegen::{
classes::{ classes::{
ArrayLikeIndexer, ArrayLikeIndexer,
ArrayLikeValue,
ListValue, ListValue,
NDArrayValue, NDArrayValue,
TypedArrayLikeAccessor, TypedArrayLikeAccessor,
UntypedArrayLikeAccessor,
}, },
CodeGenContext, CodeGenContext,
CodeGenerator, CodeGenerator,
@ -28,7 +30,6 @@ use crate::{
}, },
typecheck::typedef::{FunSignature, Type}, typecheck::typedef::{FunSignature, Type},
}; };
use crate::codegen::classes::{ArrayLikeValue, UntypedArrayLikeAccessor};
/// Creates an `NDArray` instance from a dynamic shape. /// Creates an `NDArray` instance from a dynamic shape.
/// ///