mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 06:44:46 +00:00
make builtin applies importable
This commit is contained in:
parent
9c5df1d5a5
commit
63c5af2882
3 changed files with 35 additions and 19 deletions
|
@ -1,4 +1,4 @@
|
||||||
use roc_collections::all::{default_hasher, MutMap};
|
use roc_collections::all::{default_hasher, MutMap, MutSet};
|
||||||
use roc_module::ident::TagName;
|
use roc_module::ident::TagName;
|
||||||
use roc_module::symbol::Symbol;
|
use roc_module::symbol::Symbol;
|
||||||
use roc_region::all::{Located, Region};
|
use roc_region::all::{Located, Region};
|
||||||
|
@ -16,6 +16,7 @@ pub struct StdLib {
|
||||||
pub mode: Mode,
|
pub mode: Mode,
|
||||||
pub types: MutMap<Symbol, (SolvedType, Region)>,
|
pub types: MutMap<Symbol, (SolvedType, Region)>,
|
||||||
pub aliases: MutMap<Symbol, BuiltinAlias>,
|
pub aliases: MutMap<Symbol, BuiltinAlias>,
|
||||||
|
pub applies: MutSet<Symbol>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn standard_stdlib() -> StdLib {
|
pub fn standard_stdlib() -> StdLib {
|
||||||
|
@ -23,6 +24,14 @@ pub fn standard_stdlib() -> StdLib {
|
||||||
mode: Mode::Standard,
|
mode: Mode::Standard,
|
||||||
types: types(),
|
types: types(),
|
||||||
aliases: aliases(),
|
aliases: aliases(),
|
||||||
|
applies: vec![
|
||||||
|
Symbol::LIST_LIST,
|
||||||
|
Symbol::SET_SET,
|
||||||
|
Symbol::MAP_MAP,
|
||||||
|
Symbol::STR_STR,
|
||||||
|
]
|
||||||
|
.into_iter()
|
||||||
|
.collect(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,15 @@ pub fn uniq_stdlib() -> StdLib {
|
||||||
mode: Mode::Uniqueness,
|
mode: Mode::Uniqueness,
|
||||||
types,
|
types,
|
||||||
aliases,
|
aliases,
|
||||||
|
applies: vec![
|
||||||
|
Symbol::ATTR_ATTR,
|
||||||
|
Symbol::LIST_LIST,
|
||||||
|
Symbol::SET_SET,
|
||||||
|
Symbol::MAP_MAP,
|
||||||
|
Symbol::STR_STR,
|
||||||
|
]
|
||||||
|
.into_iter()
|
||||||
|
.collect(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ use roc_parse::module::module_defs;
|
||||||
use roc_parse::parser::{Fail, Parser, State};
|
use roc_parse::parser::{Fail, Parser, State};
|
||||||
use roc_region::all::{Located, Region};
|
use roc_region::all::{Located, Region};
|
||||||
use roc_solve::solve::{self, ExposedModuleTypes, SubsByModule};
|
use roc_solve::solve::{self, ExposedModuleTypes, SubsByModule};
|
||||||
use roc_types::solved_types::{BuiltinAlias, Solved, SolvedType};
|
use roc_types::solved_types::{Solved, SolvedType};
|
||||||
use roc_types::subs::{Subs, VarStore, Variable};
|
use roc_types::subs::{Subs, VarStore, Variable};
|
||||||
use roc_types::types::{self, Alias};
|
use roc_types::types::{self, Alias};
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
|
@ -779,24 +779,22 @@ fn solve_module(
|
||||||
solved_type,
|
solved_type,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// This wasn't a builtin value; maybe it was a builtin alias.
|
None => {
|
||||||
None => match stdlib.aliases.get(&symbol) {
|
if stdlib.applies.contains(&symbol) {
|
||||||
Some(BuiltinAlias { region, typ, .. }) => {
|
// do nothing
|
||||||
let loc_symbol = Located {
|
} else {
|
||||||
value: symbol,
|
// This wasn't a builtin value or Apply; maybe it was a builtin alias.
|
||||||
region: *region,
|
match stdlib.aliases.get(&symbol) {
|
||||||
};
|
Some(_) => {
|
||||||
|
// do nothing
|
||||||
imported_symbols.push(Import {
|
}
|
||||||
loc_symbol,
|
None => panic!(
|
||||||
solved_type: typ,
|
"Could not find {:?} in builtin types {:?} or aliases {:?}",
|
||||||
});
|
symbol, stdlib.types, stdlib.aliases
|
||||||
|
),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
None => panic!(
|
}
|
||||||
"Could not find {:?} in builtin types {:?} or aliases {:?}",
|
|
||||||
symbol, stdlib.types, stdlib.aliases
|
|
||||||
),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
} else if module_id != home {
|
} else if module_id != home {
|
||||||
// We already have constraints for our own symbols.
|
// We already have constraints for our own symbols.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue