Compare commits

..

2 Commits

Author SHA1 Message Date
David Mak d2eb9255c3 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 20:40:05 +08:00
David Mak 6322b6db90 core: Add ArrayLikeValue
For exposing LLVM values that can be accessed like an array.
2024-03-21 15:46:10 +08:00
3 changed files with 9 additions and 14 deletions

View File

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

View File

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

View File

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