mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
Move load_symbol to scope
This commit is contained in:
parent
8d3d4ed9d8
commit
6e23365551
4 changed files with 31 additions and 33 deletions
|
@ -913,7 +913,7 @@ pub(crate) fn build_exp_call<'a, 'ctx>(
|
|||
Vec::with_capacity_in(arguments.len(), env.arena);
|
||||
|
||||
for symbol in arguments.iter() {
|
||||
arg_tuples.push(load_symbol(scope, symbol));
|
||||
arg_tuples.push(scope.load_symbol(symbol));
|
||||
}
|
||||
|
||||
let bytes = specialization_id.to_bytes();
|
||||
|
@ -1053,7 +1053,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
|
|||
symbol,
|
||||
..
|
||||
} => {
|
||||
let reset = load_symbol(scope, symbol).into_pointer_value();
|
||||
let reset = scope.load_symbol(symbol).into_pointer_value();
|
||||
build_tag(
|
||||
env,
|
||||
layout_interner,
|
||||
|
@ -1098,7 +1098,7 @@ pub(crate) fn build_exp_expr<'a, 'ctx>(
|
|||
}
|
||||
|
||||
ExprUnbox { symbol } => {
|
||||
let value = load_symbol(scope, symbol);
|
||||
let value = scope.load_symbol(symbol);
|
||||
|
||||
debug_assert!(value.is_pointer_value());
|
||||
|
||||
|
@ -1579,7 +1579,7 @@ fn build_tag_fields<'a, 'r, 'ctx, 'env>(
|
|||
let field_type = basic_type_from_layout(env, layout_interner, *tag_field_layout);
|
||||
field_types.push(field_type);
|
||||
|
||||
let raw_value: BasicValueEnum<'ctx> = load_symbol(scope, field_symbol);
|
||||
let raw_value: BasicValueEnum<'ctx> = scope.load_symbol(field_symbol);
|
||||
let field_value = build_tag_field_value(env, layout_interner, raw_value, *tag_field_layout);
|
||||
|
||||
field_values.push((*tag_field_layout, field_value));
|
||||
|
@ -2184,7 +2184,7 @@ fn list_literal<'a, 'ctx>(
|
|||
global_elements.push(val.into_int_value());
|
||||
}
|
||||
ListLiteralElement::Symbol(symbol) => {
|
||||
let val = load_symbol(scope, symbol);
|
||||
let val = scope.load_symbol(symbol);
|
||||
|
||||
// here we'd like to furthermore check for intval.is_const().
|
||||
// if all elements are const for LLVM, we could make the array a constant.
|
||||
|
@ -2273,7 +2273,7 @@ fn list_literal<'a, 'ctx>(
|
|||
ListLiteralElement::Literal(literal) => {
|
||||
build_exp_literal(env, layout_interner, parent, element_layout, literal)
|
||||
}
|
||||
ListLiteralElement::Symbol(symbol) => load_symbol(scope, symbol),
|
||||
ListLiteralElement::Symbol(symbol) => scope.load_symbol(symbol),
|
||||
};
|
||||
let index_val = ctx.i64_type().const_int(index as u64, false);
|
||||
let elem_ptr = unsafe {
|
||||
|
@ -2960,17 +2960,6 @@ pub(crate) fn build_exp_stmt<'a, 'ctx>(
|
|||
}
|
||||
}
|
||||
|
||||
pub(crate) fn load_symbol<'ctx>(scope: &Scope<'_, 'ctx>, symbol: &Symbol) -> BasicValueEnum<'ctx> {
|
||||
match scope.get(symbol) {
|
||||
Some((_, ptr)) => *ptr,
|
||||
|
||||
None => panic!(
|
||||
"There was no entry for {:?} {} in scope {:?}",
|
||||
symbol, symbol, scope
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn load_symbol_and_layout<'a, 'ctx>(
|
||||
scope: &Scope<'a, 'ctx>,
|
||||
symbol: &Symbol,
|
||||
|
@ -6063,7 +6052,7 @@ pub(crate) fn throw_exception<'a, 'ctx>(
|
|||
message: &Symbol,
|
||||
tag: CrashTag,
|
||||
) {
|
||||
let msg_val = load_symbol(scope, message);
|
||||
let msg_val = scope.load_symbol(message);
|
||||
|
||||
env.call_panic(env, msg_val, tag);
|
||||
|
||||
|
|
|
@ -11,9 +11,7 @@ use roc_module::symbol::Symbol;
|
|||
use roc_mono::layout::{Builtin, InLayout, LayoutIds, LayoutInterner, STLayoutInterner};
|
||||
|
||||
use super::bitcode::{call_list_bitcode_fn, BitcodeReturns};
|
||||
use super::build::{
|
||||
create_entry_block_alloca, load_roc_value, load_symbol, store_roc_value, BuilderExt,
|
||||
};
|
||||
use super::build::{create_entry_block_alloca, load_roc_value, store_roc_value, BuilderExt};
|
||||
use super::convert::zig_list_type;
|
||||
use super::scope::Scope;
|
||||
use super::struct_::struct_from_fields;
|
||||
|
@ -41,7 +39,7 @@ pub(crate) fn list_symbol_to_c_abi<'a, 'ctx>(
|
|||
let list_type = zig_list_type(env);
|
||||
let list_alloca = create_entry_block_alloca(env, parent, list_type.into(), "list_alloca");
|
||||
|
||||
let list = load_symbol(scope, &symbol);
|
||||
let list = scope.load_symbol(&symbol);
|
||||
env.builder.build_store(list_alloca, list);
|
||||
|
||||
list_alloca
|
||||
|
|
|
@ -55,7 +55,7 @@ use crate::llvm::{
|
|||
|
||||
use super::{build::throw_internal_exception, convert::zig_with_overflow_roc_dec, scope::Scope};
|
||||
use super::{
|
||||
build::{load_symbol, load_symbol_and_layout, Env},
|
||||
build::{load_symbol_and_layout, Env},
|
||||
convert::zig_dec_type,
|
||||
};
|
||||
|
||||
|
@ -80,7 +80,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
// look at that, a usage for if let ... else
|
||||
let [$($x),+] = match &args {
|
||||
[$($x),+] => {
|
||||
[ $(load_symbol(scope, $x)),+ ]
|
||||
[ $(scope.load_symbol($x)),+ ]
|
||||
}
|
||||
_ => {
|
||||
// we could get fancier with reporting here, but this macro is used a bunch
|
||||
|
@ -685,7 +685,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
|
||||
let (first_list, list_layout) = load_symbol_and_layout(scope, &args[0]);
|
||||
|
||||
let second_list = load_symbol(scope, &args[1]);
|
||||
let second_list = scope.load_symbol(&args[1]);
|
||||
|
||||
let element_layout = list_element_layout!(layout_interner, list_layout);
|
||||
|
||||
|
@ -701,7 +701,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
// List.appendUnsafe : List elem, elem -> List elem
|
||||
debug_assert_eq!(args.len(), 2);
|
||||
|
||||
let original_wrapper = load_symbol(scope, &args[0]).into_struct_value();
|
||||
let original_wrapper = scope.load_symbol(&args[0]).into_struct_value();
|
||||
let (elem, elem_layout) = load_symbol_and_layout(scope, &args[1]);
|
||||
|
||||
list_append_unsafe(env, layout_interner, original_wrapper, elem, elem_layout)
|
||||
|
@ -710,7 +710,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
// List.prepend : List elem, elem -> List elem
|
||||
debug_assert_eq!(args.len(), 2);
|
||||
|
||||
let original_wrapper = load_symbol(scope, &args[0]).into_struct_value();
|
||||
let original_wrapper = scope.load_symbol(&args[0]).into_struct_value();
|
||||
let (elem, elem_layout) = load_symbol_and_layout(scope, &args[1]);
|
||||
|
||||
list_prepend(env, layout_interner, original_wrapper, elem, elem_layout)
|
||||
|
@ -721,7 +721,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
|
||||
let (list, list_layout) = load_symbol_and_layout(scope, &args[0]);
|
||||
let element_layout = list_element_layout!(layout_interner, list_layout);
|
||||
let spare = load_symbol(scope, &args[1]);
|
||||
let spare = scope.load_symbol(&args[1]);
|
||||
|
||||
list_reserve(
|
||||
env,
|
||||
|
@ -748,8 +748,8 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
let (list, list_layout) = load_symbol_and_layout(scope, &args[0]);
|
||||
let original_wrapper = list.into_struct_value();
|
||||
|
||||
let index_1 = load_symbol(scope, &args[1]);
|
||||
let index_2 = load_symbol(scope, &args[2]);
|
||||
let index_1 = scope.load_symbol(&args[1]);
|
||||
let index_2 = scope.load_symbol(&args[2]);
|
||||
|
||||
let element_layout = list_element_layout!(layout_interner, list_layout);
|
||||
list_swap(
|
||||
|
@ -768,8 +768,8 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
let (list, list_layout) = load_symbol_and_layout(scope, &args[0]);
|
||||
let original_wrapper = list.into_struct_value();
|
||||
|
||||
let start = load_symbol(scope, &args[1]);
|
||||
let len = load_symbol(scope, &args[2]);
|
||||
let start = scope.load_symbol(&args[1]);
|
||||
let len = scope.load_symbol(&args[2]);
|
||||
|
||||
let element_layout = list_element_layout!(layout_interner, list_layout);
|
||||
list_sublist(
|
||||
|
@ -789,7 +789,7 @@ pub(crate) fn run_low_level<'a, 'ctx>(
|
|||
let (list, list_layout) = load_symbol_and_layout(scope, &args[0]);
|
||||
let original_wrapper = list.into_struct_value();
|
||||
|
||||
let count = load_symbol(scope, &args[1]);
|
||||
let count = scope.load_symbol(&args[1]);
|
||||
|
||||
let element_layout = list_element_layout!(layout_interner, list_layout);
|
||||
list_drop_at(
|
||||
|
|
|
@ -24,6 +24,17 @@ impl<'a, 'ctx> Scope<'a, 'ctx> {
|
|||
self.symbols.get(symbol)
|
||||
}
|
||||
|
||||
pub fn load_symbol(&self, symbol: &Symbol) -> BasicValueEnum<'ctx> {
|
||||
match self.get(symbol) {
|
||||
Some((_, ptr)) => *ptr,
|
||||
|
||||
None => panic!(
|
||||
"There was no entry for {:?} {} in scope {:?}",
|
||||
symbol, symbol, self
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn insert(&mut self, symbol: Symbol, value: (InLayout<'a>, BasicValueEnum<'ctx>)) {
|
||||
self.symbols.insert(symbol, value);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue