mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 20:28:02 +00:00
Simplify how builtin types are added to a module
This commit is contained in:
parent
2028dd5b0c
commit
c521668d4c
2 changed files with 24 additions and 172 deletions
|
@ -80,58 +80,6 @@ const MODULE_SEPARATOR: char = '.';
|
|||
|
||||
const EXPANDED_STACK_SIZE: usize = 8 * 1024 * 1024;
|
||||
|
||||
/// TODO: how can we populate these at compile/runtime from the standard library?
|
||||
/// Consider updating the macro in symbol to do this?
|
||||
const PRELUDE_TYPES: [(&str, Symbol); 33] = [
|
||||
("Num", Symbol::NUM_NUM),
|
||||
("Int", Symbol::NUM_INT),
|
||||
("Frac", Symbol::NUM_FRAC),
|
||||
("Integer", Symbol::NUM_INTEGER),
|
||||
("FloatingPoint", Symbol::NUM_FLOATINGPOINT),
|
||||
("Binary32", Symbol::NUM_BINARY32),
|
||||
("Binary64", Symbol::NUM_BINARY64),
|
||||
("Signed128", Symbol::NUM_SIGNED128),
|
||||
("Signed64", Symbol::NUM_SIGNED64),
|
||||
("Signed32", Symbol::NUM_SIGNED32),
|
||||
("Signed16", Symbol::NUM_SIGNED16),
|
||||
("Signed8", Symbol::NUM_SIGNED8),
|
||||
("Unsigned128", Symbol::NUM_UNSIGNED128),
|
||||
("Unsigned64", Symbol::NUM_UNSIGNED64),
|
||||
("Unsigned32", Symbol::NUM_UNSIGNED32),
|
||||
("Unsigned16", Symbol::NUM_UNSIGNED16),
|
||||
("Unsigned8", Symbol::NUM_UNSIGNED8),
|
||||
("Natural", Symbol::NUM_NATURAL),
|
||||
("Decimal", Symbol::NUM_DECIMAL),
|
||||
("Nat", Symbol::NUM_NAT),
|
||||
("I8", Symbol::NUM_I8),
|
||||
("I16", Symbol::NUM_I16),
|
||||
("I32", Symbol::NUM_I32),
|
||||
("I64", Symbol::NUM_I64),
|
||||
("I128", Symbol::NUM_I128),
|
||||
("U8", Symbol::NUM_U8),
|
||||
("U16", Symbol::NUM_U16),
|
||||
("U32", Symbol::NUM_U32),
|
||||
("U64", Symbol::NUM_U64),
|
||||
("U128", Symbol::NUM_U128),
|
||||
("F32", Symbol::NUM_F32),
|
||||
("F64", Symbol::NUM_F64),
|
||||
("Dec", Symbol::NUM_DEC),
|
||||
];
|
||||
|
||||
const MODULE_ENCODE_TYPES: &[(&str, Symbol)] = &[
|
||||
("Encoder", Symbol::ENCODE_ENCODER),
|
||||
("Encoding", Symbol::ENCODE_ENCODING),
|
||||
("EncoderFormatting", Symbol::ENCODE_ENCODERFORMATTING),
|
||||
];
|
||||
|
||||
const MODULE_DECODE_TYPES: &[(&str, Symbol)] = &[
|
||||
("DecodeError", Symbol::DECODE_DECODE_ERROR),
|
||||
("DecodeResult", Symbol::DECODE_DECODE_RESULT),
|
||||
("Decoder", Symbol::DECODE_DECODER_OPAQUE),
|
||||
("Decoding", Symbol::DECODE_DECODING),
|
||||
("DecoderFormatting", Symbol::DECODE_DECODERFORMATTING),
|
||||
];
|
||||
|
||||
macro_rules! log {
|
||||
($($arg:tt)*) => (dbg_do!(ROC_PRINT_LOAD_LOG, println!($($arg)*)))
|
||||
}
|
||||
|
@ -2057,6 +2005,19 @@ fn report_unused_imported_modules<'a>(
|
|||
}
|
||||
}
|
||||
|
||||
fn extend_header_with_builtin(header: &mut ModuleHeader, module: ModuleId) {
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(module));
|
||||
|
||||
header.imported_modules.insert(module, Region::zero());
|
||||
|
||||
let types = Symbol::builtin_types_in_scope(module)
|
||||
.into_iter()
|
||||
.map(|(name, info)| (Ident::from(*name), *info));
|
||||
header.exposed_imports.extend(types);
|
||||
}
|
||||
|
||||
fn update<'a>(
|
||||
mut state: State<'a>,
|
||||
msg: Msg<'a>,
|
||||
|
@ -2158,134 +2119,25 @@ fn update<'a>(
|
|||
let mut header = header;
|
||||
|
||||
if ![ModuleId::RESULT, ModuleId::BOOL].contains(&header.module_id) {
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::RESULT));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::RESULT, Region::zero());
|
||||
|
||||
header.exposed_imports.insert(
|
||||
Ident::from("Result"),
|
||||
(Symbol::RESULT_RESULT, Region::zero()),
|
||||
);
|
||||
extend_header_with_builtin(&mut header, ModuleId::RESULT);
|
||||
}
|
||||
|
||||
if ![ModuleId::NUM, ModuleId::BOOL, ModuleId::RESULT].contains(&header.module_id) {
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::NUM));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::NUM, Region::zero());
|
||||
|
||||
for (type_name, symbol) in PRELUDE_TYPES {
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from(type_name), (symbol, Region::zero()));
|
||||
}
|
||||
extend_header_with_builtin(&mut header, ModuleId::NUM);
|
||||
}
|
||||
|
||||
if header.module_id != ModuleId::BOOL {
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::BOOL));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::BOOL, Region::zero());
|
||||
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from("Bool"), (Symbol::BOOL_BOOL, Region::zero()));
|
||||
}
|
||||
|
||||
if header.module_id == ModuleId::NUM {
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from("List"), (Symbol::LIST_LIST, Region::zero()));
|
||||
extend_header_with_builtin(&mut header, ModuleId::BOOL);
|
||||
}
|
||||
|
||||
if !header.module_id.is_builtin() {
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::BOX));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::BOX, Region::zero());
|
||||
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::STR));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::STR, Region::zero());
|
||||
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::DICT));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::DICT, Region::zero());
|
||||
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from("Dict"), (Symbol::DICT_DICT, Region::zero()));
|
||||
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::SET));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::SET, Region::zero());
|
||||
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from("Set"), (Symbol::SET_SET, Region::zero()));
|
||||
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::LIST));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::LIST, Region::zero());
|
||||
|
||||
// ENCODE
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::ENCODE));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::ENCODE, Region::zero());
|
||||
|
||||
for (type_name, symbol) in MODULE_ENCODE_TYPES {
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from(*type_name), (*symbol, Region::zero()));
|
||||
}
|
||||
|
||||
// DECODE
|
||||
header
|
||||
.package_qualified_imported_modules
|
||||
.insert(PackageQualified::Unqualified(ModuleId::DECODE));
|
||||
|
||||
header
|
||||
.imported_modules
|
||||
.insert(ModuleId::DECODE, Region::zero());
|
||||
|
||||
for (type_name, symbol) in MODULE_DECODE_TYPES {
|
||||
header
|
||||
.exposed_imports
|
||||
.insert(Ident::from(*type_name), (*symbol, Region::zero()));
|
||||
}
|
||||
extend_header_with_builtin(&mut header, ModuleId::BOX);
|
||||
extend_header_with_builtin(&mut header, ModuleId::STR);
|
||||
extend_header_with_builtin(&mut header, ModuleId::DICT);
|
||||
extend_header_with_builtin(&mut header, ModuleId::SET);
|
||||
extend_header_with_builtin(&mut header, ModuleId::LIST);
|
||||
extend_header_with_builtin(&mut header, ModuleId::ENCODE);
|
||||
extend_header_with_builtin(&mut header, ModuleId::DECODE);
|
||||
}
|
||||
|
||||
state
|
||||
|
|
|
@ -1169,7 +1169,7 @@ define_builtins! {
|
|||
85 NUM_INT_CAST: "intCast"
|
||||
86 NUM_IS_MULTIPLE_OF: "isMultipleOf"
|
||||
87 NUM_DECIMAL: "Decimal" exposed_type=true
|
||||
88 NUM_DEC: "Dec" // the Num.Dectype alias
|
||||
88 NUM_DEC: "Dec" exposed_type=true // the Num.Dectype alias
|
||||
89 NUM_BYTES_TO_U16: "bytesToU16"
|
||||
90 NUM_BYTES_TO_U32: "bytesToU32"
|
||||
91 NUM_CAST_TO_NAT: "#castToNat"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue