forked from M-Labs/nac3
core: Add primitive definition-id list
So that we have a single ground truth for the definition IDs of primitive types.
This commit is contained in:
parent
82fdb02d13
commit
c3db6297d9
|
@ -6,7 +6,7 @@ use nac3core::{
|
||||||
CodeGenContext, CodeGenerator,
|
CodeGenContext, CodeGenerator,
|
||||||
},
|
},
|
||||||
symbol_resolver::ValueEnum,
|
symbol_resolver::ValueEnum,
|
||||||
toplevel::{DefinitionId, GenCall},
|
toplevel::{DefinitionId, GenCall, helper::PRIMITIVE_DEF_IDS},
|
||||||
typecheck::typedef::{FunSignature, FuncArg, Type, TypeEnum}
|
typecheck::typedef::{FunSignature, FuncArg, Type, TypeEnum}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -681,7 +681,7 @@ pub fn attributes_writeback(
|
||||||
vars: HashMap::default()
|
vars: HashMap::default()
|
||||||
};
|
};
|
||||||
let args: Vec<_> = values.into_iter().map(|(_, val)| (None, ValueEnum::Dynamic(val))).collect();
|
let args: Vec<_> = values.into_iter().map(|(_, val)| (None, ValueEnum::Dynamic(val))).collect();
|
||||||
if let Err(e) = rpc_codegen_callback_fn(ctx, None, (&fun, DefinitionId(0)), args, generator) {
|
if let Err(e) = rpc_codegen_callback_fn(ctx, None, (&fun, PRIMITIVE_DEF_IDS.int32), args, generator) {
|
||||||
return Ok(Err(e));
|
return Ok(Err(e));
|
||||||
}
|
}
|
||||||
Ok(Ok(()))
|
Ok(Ok(()))
|
||||||
|
|
|
@ -8,6 +8,7 @@ use crate::{
|
||||||
stmt::exn_constructor,
|
stmt::exn_constructor,
|
||||||
},
|
},
|
||||||
symbol_resolver::SymbolValue,
|
symbol_resolver::SymbolValue,
|
||||||
|
toplevel::helper::PRIMITIVE_DEF_IDS,
|
||||||
toplevel::numpy::*,
|
toplevel::numpy::*,
|
||||||
};
|
};
|
||||||
use inkwell::{
|
use inkwell::{
|
||||||
|
@ -81,7 +82,7 @@ pub fn get_exn_constructor(
|
||||||
methods: vec![("__init__".into(), signature, DefinitionId(cons_id))],
|
methods: vec![("__init__".into(), signature, DefinitionId(cons_id))],
|
||||||
ancestors: vec![
|
ancestors: vec![
|
||||||
TypeAnnotation::CustomClass { id: DefinitionId(class_id), params: Vec::default() },
|
TypeAnnotation::CustomClass { id: DefinitionId(class_id), params: Vec::default() },
|
||||||
TypeAnnotation::CustomClass { id: DefinitionId(7), params: Vec::default() },
|
TypeAnnotation::CustomClass { id: PRIMITIVE_DEF_IDS.exception, params: Vec::default() },
|
||||||
],
|
],
|
||||||
constructor: Some(signature),
|
constructor: Some(signature),
|
||||||
resolver: None,
|
resolver: None,
|
||||||
|
@ -332,49 +333,49 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
};
|
};
|
||||||
let top_level_def_list = vec![
|
let top_level_def_list = vec![
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
0,
|
PRIMITIVE_DEF_IDS.int32,
|
||||||
None,
|
None,
|
||||||
"int32".into(),
|
"int32".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
1,
|
PRIMITIVE_DEF_IDS.int64,
|
||||||
None,
|
None,
|
||||||
"int64".into(),
|
"int64".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
2,
|
PRIMITIVE_DEF_IDS.float,
|
||||||
None,
|
None,
|
||||||
"float".into(),
|
"float".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
3,
|
PRIMITIVE_DEF_IDS.bool,
|
||||||
None,
|
None,
|
||||||
"bool".into(),
|
"bool".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
4,
|
PRIMITIVE_DEF_IDS.none,
|
||||||
None,
|
None,
|
||||||
"none".into(),
|
"none".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
5,
|
PRIMITIVE_DEF_IDS.range,
|
||||||
None,
|
None,
|
||||||
"range".into(),
|
"range".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
6,
|
PRIMITIVE_DEF_IDS.str,
|
||||||
None,
|
None,
|
||||||
"str".into(),
|
"str".into(),
|
||||||
None,
|
None,
|
||||||
|
@ -382,7 +383,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelDef::Class {
|
Arc::new(RwLock::new(TopLevelDef::Class {
|
||||||
name: "Exception".into(),
|
name: "Exception".into(),
|
||||||
object_id: DefinitionId(7),
|
object_id: PRIMITIVE_DEF_IDS.exception,
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: exception_fields,
|
fields: exception_fields,
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
|
@ -392,14 +393,14 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
loc: None,
|
loc: None,
|
||||||
})),
|
})),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
8,
|
PRIMITIVE_DEF_IDS.uint32,
|
||||||
None,
|
None,
|
||||||
"uint32".into(),
|
"uint32".into(),
|
||||||
None,
|
None,
|
||||||
None,
|
None,
|
||||||
))),
|
))),
|
||||||
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
Arc::new(RwLock::new(TopLevelComposer::make_top_level_class_def(
|
||||||
9,
|
PRIMITIVE_DEF_IDS.uint64,
|
||||||
None,
|
None,
|
||||||
"uint64".into(),
|
"uint64".into(),
|
||||||
None,
|
None,
|
||||||
|
@ -408,7 +409,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
Arc::new(RwLock::new({
|
Arc::new(RwLock::new({
|
||||||
TopLevelDef::Class {
|
TopLevelDef::Class {
|
||||||
name: "Option".into(),
|
name: "Option".into(),
|
||||||
object_id: DefinitionId(10),
|
object_id: PRIMITIVE_DEF_IDS.option,
|
||||||
type_vars: vec![option_ty_var],
|
type_vars: vec![option_ty_var],
|
||||||
fields: vec![],
|
fields: vec![],
|
||||||
methods: vec![
|
methods: vec![
|
||||||
|
@ -417,7 +418,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
("unwrap".into(), unwrap_ty.0, DefinitionId(13)),
|
("unwrap".into(), unwrap_ty.0, DefinitionId(13)),
|
||||||
],
|
],
|
||||||
ancestors: vec![TypeAnnotation::CustomClass {
|
ancestors: vec![TypeAnnotation::CustomClass {
|
||||||
id: DefinitionId(10),
|
id: PRIMITIVE_DEF_IDS.option,
|
||||||
params: Vec::default(),
|
params: Vec::default(),
|
||||||
}],
|
}],
|
||||||
constructor: None,
|
constructor: None,
|
||||||
|
@ -504,7 +505,7 @@ pub fn get_builtins(primitives: &mut (PrimitiveStore, Unifier)) -> BuiltinInfo {
|
||||||
|
|
||||||
Arc::new(RwLock::new(TopLevelDef::Class {
|
Arc::new(RwLock::new(TopLevelDef::Class {
|
||||||
name: "ndarray".into(),
|
name: "ndarray".into(),
|
||||||
object_id: DefinitionId(14),
|
object_id: PRIMITIVE_DEF_IDS.ndarray,
|
||||||
type_vars: vec![tvar.0, ndims.0],
|
type_vars: vec![tvar.0, ndims.0],
|
||||||
fields: Vec::default(),
|
fields: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
|
|
|
@ -221,7 +221,7 @@ impl TopLevelComposer {
|
||||||
let constructor_ty = self.unifier.get_dummy_var().0;
|
let constructor_ty = self.unifier.get_dummy_var().0;
|
||||||
let mut class_def_ast = (
|
let mut class_def_ast = (
|
||||||
Arc::new(RwLock::new(Self::make_top_level_class_def(
|
Arc::new(RwLock::new(Self::make_top_level_class_def(
|
||||||
class_def_id,
|
DefinitionId(class_def_id),
|
||||||
resolver.clone(),
|
resolver.clone(),
|
||||||
fully_qualified_class_name,
|
fully_qualified_class_name,
|
||||||
Some(constructor_ty),
|
Some(constructor_ty),
|
||||||
|
|
|
@ -5,6 +5,68 @@ use nac3parser::ast::{Constant, Location};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
/// Structure storing [`DefinitionId`] for primitive types.
|
||||||
|
#[derive(Clone, Copy)]
|
||||||
|
pub struct PrimitiveDefinitionIds {
|
||||||
|
pub int32: DefinitionId,
|
||||||
|
pub int64: DefinitionId,
|
||||||
|
pub uint32: DefinitionId,
|
||||||
|
pub uint64: DefinitionId,
|
||||||
|
pub float: DefinitionId,
|
||||||
|
pub bool: DefinitionId,
|
||||||
|
pub none: DefinitionId,
|
||||||
|
pub range: DefinitionId,
|
||||||
|
pub str: DefinitionId,
|
||||||
|
pub exception: DefinitionId,
|
||||||
|
pub option: DefinitionId,
|
||||||
|
pub ndarray: DefinitionId,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl PrimitiveDefinitionIds {
|
||||||
|
/// Returns all [`DefinitionId`] of primitives as a [`Vec`].
|
||||||
|
///
|
||||||
|
/// There are no guarantees on ordering of the IDs.
|
||||||
|
#[must_use]
|
||||||
|
fn as_vec(&self) -> Vec<DefinitionId> {
|
||||||
|
vec![
|
||||||
|
self.int32,
|
||||||
|
self.int64,
|
||||||
|
self.uint32,
|
||||||
|
self.uint64,
|
||||||
|
self.float,
|
||||||
|
self.bool,
|
||||||
|
self.none,
|
||||||
|
self.range,
|
||||||
|
self.str,
|
||||||
|
self.exception,
|
||||||
|
self.option,
|
||||||
|
self.ndarray,
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns the primitive with the largest [`DefinitionId`].
|
||||||
|
#[must_use]
|
||||||
|
pub fn max_id(&self) -> DefinitionId {
|
||||||
|
self.as_vec().into_iter().max().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The [definition IDs][DefinitionId] for primitive types.
|
||||||
|
pub const PRIMITIVE_DEF_IDS: PrimitiveDefinitionIds = PrimitiveDefinitionIds {
|
||||||
|
int32: DefinitionId(0),
|
||||||
|
int64: DefinitionId(1),
|
||||||
|
uint32: DefinitionId(8),
|
||||||
|
uint64: DefinitionId(9),
|
||||||
|
float: DefinitionId(2),
|
||||||
|
bool: DefinitionId(3),
|
||||||
|
none: DefinitionId(4),
|
||||||
|
range: DefinitionId(5),
|
||||||
|
str: DefinitionId(6),
|
||||||
|
exception: DefinitionId(7),
|
||||||
|
option: DefinitionId(10),
|
||||||
|
ndarray: DefinitionId(14),
|
||||||
|
};
|
||||||
|
|
||||||
impl TopLevelDef {
|
impl TopLevelDef {
|
||||||
pub fn to_string(&self, unifier: &mut Unifier) -> String {
|
pub fn to_string(&self, unifier: &mut Unifier) -> String {
|
||||||
match self {
|
match self {
|
||||||
|
@ -47,42 +109,42 @@ impl TopLevelComposer {
|
||||||
pub fn make_primitives(size_t: u32) -> (PrimitiveStore, Unifier) {
|
pub fn make_primitives(size_t: u32) -> (PrimitiveStore, Unifier) {
|
||||||
let mut unifier = Unifier::new();
|
let mut unifier = Unifier::new();
|
||||||
let int32 = unifier.add_ty(TypeEnum::TObj {
|
let int32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(0),
|
obj_id: PRIMITIVE_DEF_IDS.int32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let int64 = unifier.add_ty(TypeEnum::TObj {
|
let int64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(1),
|
obj_id: PRIMITIVE_DEF_IDS.int64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let float = unifier.add_ty(TypeEnum::TObj {
|
let float = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(2),
|
obj_id: PRIMITIVE_DEF_IDS.float,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let bool = unifier.add_ty(TypeEnum::TObj {
|
let bool = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(3),
|
obj_id: PRIMITIVE_DEF_IDS.bool,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let none = unifier.add_ty(TypeEnum::TObj {
|
let none = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(4),
|
obj_id: PRIMITIVE_DEF_IDS.none,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let range = unifier.add_ty(TypeEnum::TObj {
|
let range = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(5),
|
obj_id: PRIMITIVE_DEF_IDS.range,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let str = unifier.add_ty(TypeEnum::TObj {
|
let str = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(6),
|
obj_id: PRIMITIVE_DEF_IDS.str,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let exception = unifier.add_ty(TypeEnum::TObj {
|
let exception = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(7),
|
obj_id: PRIMITIVE_DEF_IDS.exception,
|
||||||
fields: vec![
|
fields: vec![
|
||||||
("__name__".into(), (int32, true)),
|
("__name__".into(), (int32, true)),
|
||||||
("__file__".into(), (str, true)),
|
("__file__".into(), (str, true)),
|
||||||
|
@ -99,12 +161,12 @@ impl TopLevelComposer {
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(8),
|
obj_id: PRIMITIVE_DEF_IDS.uint32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(9),
|
obj_id: PRIMITIVE_DEF_IDS.uint64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
|
@ -121,7 +183,7 @@ impl TopLevelComposer {
|
||||||
vars: HashMap::from([(option_type_var.1, option_type_var.0)]),
|
vars: HashMap::from([(option_type_var.1, option_type_var.0)]),
|
||||||
}));
|
}));
|
||||||
let option = unifier.add_ty(TypeEnum::TObj {
|
let option = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(10),
|
obj_id: PRIMITIVE_DEF_IDS.option,
|
||||||
fields: vec![
|
fields: vec![
|
||||||
("is_some".into(), (is_some_type_fun_ty, true)),
|
("is_some".into(), (is_some_type_fun_ty, true)),
|
||||||
("is_none".into(), (is_some_type_fun_ty, true)),
|
("is_none".into(), (is_some_type_fun_ty, true)),
|
||||||
|
@ -155,7 +217,7 @@ impl TopLevelComposer {
|
||||||
/// when first registering, the `type_vars`, fields, methods, ancestors are invalid
|
/// when first registering, the `type_vars`, fields, methods, ancestors are invalid
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn make_top_level_class_def(
|
pub fn make_top_level_class_def(
|
||||||
index: usize,
|
obj_id: DefinitionId,
|
||||||
resolver: Option<Arc<dyn SymbolResolver + Send + Sync>>,
|
resolver: Option<Arc<dyn SymbolResolver + Send + Sync>>,
|
||||||
name: StrRef,
|
name: StrRef,
|
||||||
constructor: Option<Type>,
|
constructor: Option<Type>,
|
||||||
|
@ -163,7 +225,7 @@ impl TopLevelComposer {
|
||||||
) -> TopLevelDef {
|
) -> TopLevelDef {
|
||||||
TopLevelDef::Class {
|
TopLevelDef::Class {
|
||||||
name,
|
name,
|
||||||
object_id: DefinitionId(index),
|
object_id: obj_id,
|
||||||
type_vars: Vec::default(),
|
type_vars: Vec::default(),
|
||||||
fields: Vec::default(),
|
fields: Vec::default(),
|
||||||
methods: Vec::default(),
|
methods: Vec::default(),
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
use crate::symbol_resolver::SymbolValue;
|
use crate::symbol_resolver::SymbolValue;
|
||||||
|
use crate::toplevel::helper::PRIMITIVE_DEF_IDS;
|
||||||
use super::*;
|
use super::*;
|
||||||
use nac3parser::ast::Constant;
|
use nac3parser::ast::Constant;
|
||||||
|
|
||||||
|
@ -93,7 +94,7 @@ pub fn parse_ast_to_type_annotation_kinds<T>(
|
||||||
} else if id == &"str".into() {
|
} else if id == &"str".into() {
|
||||||
Ok(TypeAnnotation::Primitive(primitives.str))
|
Ok(TypeAnnotation::Primitive(primitives.str))
|
||||||
} else if id == &"Exception".into() {
|
} else if id == &"Exception".into() {
|
||||||
Ok(TypeAnnotation::CustomClass { id: DefinitionId(7), params: Vec::default() })
|
Ok(TypeAnnotation::CustomClass { id: PRIMITIVE_DEF_IDS.exception, params: Vec::default() })
|
||||||
} else if let Ok(obj_id) = resolver.get_identifier_def(*id) {
|
} else if let Ok(obj_id) = resolver.get_identifier_def(*id) {
|
||||||
let type_vars = {
|
let type_vars = {
|
||||||
let def_read = top_level_defs[obj_id.0].try_read();
|
let def_read = top_level_defs[obj_id.0].try_read();
|
||||||
|
@ -491,7 +492,7 @@ pub fn get_type_from_type_annotation_kinds(
|
||||||
(*name, (subst_ty, *mutability))
|
(*name, (subst_ty, *mutability))
|
||||||
}));
|
}));
|
||||||
let need_subst = !subst.is_empty();
|
let need_subst = !subst.is_empty();
|
||||||
let ty = if obj_id == &DefinitionId(14) {
|
let ty = if obj_id == &PRIMITIVE_DEF_IDS.ndarray {
|
||||||
assert_eq!(subst.len(), 2);
|
assert_eq!(subst.len(), 2);
|
||||||
let tv_tys = subst.iter()
|
let tv_tys = subst.iter()
|
||||||
.sorted_by_key(|(k, _)| *k)
|
.sorted_by_key(|(k, _)| *k)
|
||||||
|
|
|
@ -3,7 +3,7 @@ use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
codegen::CodeGenContext,
|
codegen::CodeGenContext,
|
||||||
symbol_resolver::ValueEnum,
|
symbol_resolver::ValueEnum,
|
||||||
toplevel::{DefinitionId, TopLevelDef},
|
toplevel::{DefinitionId, helper::PRIMITIVE_DEF_IDS, TopLevelDef},
|
||||||
};
|
};
|
||||||
use indoc::indoc;
|
use indoc::indoc;
|
||||||
use std::iter::zip;
|
use std::iter::zip;
|
||||||
|
@ -73,7 +73,7 @@ impl TestEnvironment {
|
||||||
let mut unifier = Unifier::new();
|
let mut unifier = Unifier::new();
|
||||||
|
|
||||||
let int32 = unifier.add_ty(TypeEnum::TObj {
|
let int32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(0),
|
obj_id: PRIMITIVE_DEF_IDS.int32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
|
@ -86,52 +86,52 @@ impl TestEnvironment {
|
||||||
fields.insert("__add__".into(), (add_ty, false));
|
fields.insert("__add__".into(), (add_ty, false));
|
||||||
});
|
});
|
||||||
let int64 = unifier.add_ty(TypeEnum::TObj {
|
let int64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(1),
|
obj_id: PRIMITIVE_DEF_IDS.int64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let float = unifier.add_ty(TypeEnum::TObj {
|
let float = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(2),
|
obj_id: PRIMITIVE_DEF_IDS.float,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let bool = unifier.add_ty(TypeEnum::TObj {
|
let bool = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(3),
|
obj_id: PRIMITIVE_DEF_IDS.bool,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let none = unifier.add_ty(TypeEnum::TObj {
|
let none = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(4),
|
obj_id: PRIMITIVE_DEF_IDS.none,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let range = unifier.add_ty(TypeEnum::TObj {
|
let range = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(5),
|
obj_id: PRIMITIVE_DEF_IDS.range,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let str = unifier.add_ty(TypeEnum::TObj {
|
let str = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(6),
|
obj_id: PRIMITIVE_DEF_IDS.str,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let exception = unifier.add_ty(TypeEnum::TObj {
|
let exception = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(7),
|
obj_id: PRIMITIVE_DEF_IDS.exception,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(8),
|
obj_id: PRIMITIVE_DEF_IDS.uint32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(9),
|
obj_id: PRIMITIVE_DEF_IDS.uint64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let option = unifier.add_ty(TypeEnum::TObj {
|
let option = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(10),
|
obj_id: PRIMITIVE_DEF_IDS.option,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
|
@ -200,7 +200,7 @@ impl TestEnvironment {
|
||||||
let mut identifier_mapping = HashMap::new();
|
let mut identifier_mapping = HashMap::new();
|
||||||
let mut top_level_defs: Vec<Arc<RwLock<TopLevelDef>>> = Vec::new();
|
let mut top_level_defs: Vec<Arc<RwLock<TopLevelDef>>> = Vec::new();
|
||||||
let int32 = unifier.add_ty(TypeEnum::TObj {
|
let int32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(0),
|
obj_id: PRIMITIVE_DEF_IDS.int32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
|
@ -213,52 +213,52 @@ impl TestEnvironment {
|
||||||
fields.insert("__add__".into(), (add_ty, false));
|
fields.insert("__add__".into(), (add_ty, false));
|
||||||
});
|
});
|
||||||
let int64 = unifier.add_ty(TypeEnum::TObj {
|
let int64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(1),
|
obj_id: PRIMITIVE_DEF_IDS.int64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let float = unifier.add_ty(TypeEnum::TObj {
|
let float = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(2),
|
obj_id: PRIMITIVE_DEF_IDS.float,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let bool = unifier.add_ty(TypeEnum::TObj {
|
let bool = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(3),
|
obj_id: PRIMITIVE_DEF_IDS.bool,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let none = unifier.add_ty(TypeEnum::TObj {
|
let none = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(4),
|
obj_id: PRIMITIVE_DEF_IDS.none,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let range = unifier.add_ty(TypeEnum::TObj {
|
let range = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(5),
|
obj_id: PRIMITIVE_DEF_IDS.range,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let str = unifier.add_ty(TypeEnum::TObj {
|
let str = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(6),
|
obj_id: PRIMITIVE_DEF_IDS.str,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let exception = unifier.add_ty(TypeEnum::TObj {
|
let exception = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(7),
|
obj_id: PRIMITIVE_DEF_IDS.exception,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
let uint32 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(8),
|
obj_id: PRIMITIVE_DEF_IDS.uint32,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
let uint64 = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(9),
|
obj_id: PRIMITIVE_DEF_IDS.uint64,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
let option = unifier.add_ty(TypeEnum::TObj {
|
let option = unifier.add_ty(TypeEnum::TObj {
|
||||||
obj_id: DefinitionId(10),
|
obj_id: PRIMITIVE_DEF_IDS.option,
|
||||||
fields: HashMap::new(),
|
fields: HashMap::new(),
|
||||||
params: HashMap::new(),
|
params: HashMap::new(),
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue