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::{
codegen::{
classes::{ArrayLikeIndexer, ListValue, NDArrayValue, RangeValue, UntypedArrayLikeAccessor},
classes::{
ArrayLikeIndexer,
ArrayLikeValue,
ListValue,
NDArrayValue,
RangeValue,
UntypedArrayLikeAccessor,
},
concrete_type::{ConcreteFuncArg, ConcreteTypeEnum, ConcreteTypeStore},
gen_in_range_check,
get_llvm_type,
@ -35,7 +42,6 @@ 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, ListValue, NDArrayValue, UntypedArrayLikeMutator},
classes::{ArrayLikeIndexer, ArrayLikeValue, ListValue, NDArrayValue, UntypedArrayLikeMutator},
CodeGenContext,
CodeGenerator,
};
@ -16,7 +16,6 @@ use inkwell::{
};
use itertools::Either;
use nac3parser::ast::Expr;
use crate::codegen::classes::ArrayLikeValue;
#[must_use]
pub fn load_irrt(ctx: &Context) -> Module {
@ -579,9 +578,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);
@ -688,8 +687,7 @@ 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,9 +8,11 @@ use crate::{
codegen::{
classes::{
ArrayLikeIndexer,
ArrayLikeValue,
ListValue,
NDArrayValue,
TypedArrayLikeAccessor,
UntypedArrayLikeAccessor,
},
CodeGenContext,
CodeGenerator,
@ -28,7 +30,6 @@ use crate::{
},
typecheck::typedef::{FunSignature, Type},
};
use crate::codegen::classes::{ArrayLikeValue, UntypedArrayLikeAccessor};
/// Creates an `NDArray` instance from a dynamic shape.
///