diff --git a/.conda/environment.yml b/.conda/environment.yml index cc4cfed0..9fd075ec 100644 --- a/.conda/environment.yml +++ b/.conda/environment.yml @@ -6,8 +6,8 @@ name: rbc channels: - - numba - conda-forge + - numba - defaults dependencies: - python>=3.7 diff --git a/rbc/structure_type.py b/rbc/structure_type.py index 8f58df61..879c5a50 100644 --- a/rbc/structure_type.py +++ b/rbc/structure_type.py @@ -2,6 +2,7 @@ __all__ = ['StructureNumbaType', 'StructureNumbaPointerType', 'make_numba_struct'] import operator +from rbc.irutils import get_member_value from llvmlite import ir from numba.core import datamodel, extending, types, imputils, typing, cgutils, typeconv @@ -131,14 +132,7 @@ def model__init__(self, dmm, fe_type): def StructureNumbaType_getattr_impl(context, builder, sig, struct, attr): model = datamodel.default_manager.lookup(sig) index = model.get_field_position(attr) - - if struct.opname == 'load': - ptr = builder.gep(struct.operands[0], [int32_t(0), int32_t(0)]) - return builder.load(builder.gep(ptr, [int32_t(index)])) - elif struct.opname == 'insertvalue': - return builder.extract_value(struct, [index]) - else: - raise ValueError(struct.opname) + return get_member_value(builder, struct, index) @lowering_registry.lower_setattr_generic(StructureNumbaType)