TypeVar and virtual support in Symbol Resolver #99

Merged
sb10q merged 12 commits from symbol_resolver_typevar into master 2021-12-01 22:44:53 +08:00
2 changed files with 0 additions and 11 deletions
Showing only changes of commit fe4fbdc5db - Show all commits

View File

@ -111,9 +111,7 @@ impl Resolver {
// do not handle type var param and concrete check here // do not handle type var param and concrete check here
Ok(Ok((unifier.add_ty(TypeEnum::TTuple { ty: vec![] }), false))) Ok(Ok((unifier.add_ty(TypeEnum::TTuple { ty: vec![] }), false)))
} else if let Some(def_id) = self.pyid_to_def.read().get(&ty_id).cloned() { } else if let Some(def_id) = self.pyid_to_def.read().get(&ty_id).cloned() {
// println!("getting def");
let def = defs[def_id.0].read(); let def = defs[def_id.0].read();
// println!("got def");
if let TopLevelDef::Class { if let TopLevelDef::Class {
object_id, object_id,
type_vars, type_vars,

View File

@ -71,7 +71,6 @@ fn main() {
assert_eq!(targets.len(), 1, "only support single assignment for now, at {}", targets[0].location); assert_eq!(targets.len(), 1, "only support single assignment for now, at {}", targets[0].location);
if let ExprKind::Call { func, args, .. } = &value.node { if let ExprKind::Call { func, args, .. } = &value.node {
if matches!(&func.node, ExprKind::Name { id, .. } if id == &"TypeVar".into()) { if matches!(&func.node, ExprKind::Name { id, .. } if id == &"TypeVar".into()) {
print!("registering typevar {:?}", targets[0].node);
let constraints = args let constraints = args
.iter() .iter()
.skip(1) .skip(1)
@ -87,14 +86,6 @@ fn main() {
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let res_ty = composer.unifier.get_fresh_var_with_range(&constraints).0; let res_ty = composer.unifier.get_fresh_var_with_range(&constraints).0;
println!(
" ...registered: {}",
composer.unifier.stringify(
res_ty,
&mut |x| format!("obj{}", x),
&mut |x| format!("tavr{}", x)
)
);
internal_resolver.add_id_type( internal_resolver.add_id_type(
if let ExprKind::Name { id, .. } = &targets[0].node { *id } else { if let ExprKind::Name { id, .. } = &targets[0].node { *id } else {
panic!("must assign simple name variable as type variable") panic!("must assign simple name variable as type variable")