mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 06:14:46 +00:00
Account for ability specialization in reuse_symbol
This commit is contained in:
parent
5a5fc0162d
commit
8bff2875b0
1 changed files with 31 additions and 24 deletions
|
@ -7000,34 +7000,41 @@ fn can_reuse_symbol<'a>(
|
||||||
procs: &Procs<'a>,
|
procs: &Procs<'a>,
|
||||||
expr: &roc_can::expr::Expr,
|
expr: &roc_can::expr::Expr,
|
||||||
) -> ReuseSymbol {
|
) -> ReuseSymbol {
|
||||||
|
use roc_can::expr::Expr::*;
|
||||||
use ReuseSymbol::*;
|
use ReuseSymbol::*;
|
||||||
|
|
||||||
if let roc_can::expr::Expr::Var(symbol) = expr {
|
let symbol = match expr {
|
||||||
let symbol = *symbol;
|
AbilityMember(_, specialization) => {
|
||||||
|
let specialization_symbol = specialization
|
||||||
let arguments = [
|
.read()
|
||||||
Symbol::ARG_1,
|
.unwrap()
|
||||||
Symbol::ARG_2,
|
.expect("Specialization must be known!");
|
||||||
Symbol::ARG_3,
|
specialization_symbol
|
||||||
Symbol::ARG_4,
|
|
||||||
Symbol::ARG_5,
|
|
||||||
Symbol::ARG_6,
|
|
||||||
Symbol::ARG_7,
|
|
||||||
];
|
|
||||||
|
|
||||||
if arguments.contains(&symbol) {
|
|
||||||
Value(symbol)
|
|
||||||
} else if env.is_imported_symbol(symbol) {
|
|
||||||
Imported(symbol)
|
|
||||||
} else if procs.partial_procs.contains_key(symbol) {
|
|
||||||
LocalFunction(symbol)
|
|
||||||
} else if procs.ability_member_aliases.get(symbol).is_some() {
|
|
||||||
UnspecializedExpr(symbol)
|
|
||||||
} else {
|
|
||||||
Value(symbol)
|
|
||||||
}
|
}
|
||||||
|
Var(symbol) => *symbol,
|
||||||
|
_ => return NotASymbol,
|
||||||
|
};
|
||||||
|
|
||||||
|
let arguments = [
|
||||||
|
Symbol::ARG_1,
|
||||||
|
Symbol::ARG_2,
|
||||||
|
Symbol::ARG_3,
|
||||||
|
Symbol::ARG_4,
|
||||||
|
Symbol::ARG_5,
|
||||||
|
Symbol::ARG_6,
|
||||||
|
Symbol::ARG_7,
|
||||||
|
];
|
||||||
|
|
||||||
|
if arguments.contains(&symbol) {
|
||||||
|
Value(symbol)
|
||||||
|
} else if env.is_imported_symbol(symbol) {
|
||||||
|
Imported(symbol)
|
||||||
|
} else if procs.partial_procs.contains_key(symbol) {
|
||||||
|
LocalFunction(symbol)
|
||||||
|
} else if procs.ability_member_aliases.get(symbol).is_some() {
|
||||||
|
UnspecializedExpr(symbol)
|
||||||
} else {
|
} else {
|
||||||
NotASymbol
|
Value(symbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue