forked from M-Labs/nac3
nac3core: toplevel change class method name handling, cleanup comments
This commit is contained in:
parent
2ac3f9a176
commit
471547855e
|
@ -85,7 +85,6 @@ impl TopLevelComposer {
|
|||
resolver: Option<Arc<Box<dyn SymbolResolver + Send + Sync>>>,
|
||||
mod_path: String,
|
||||
) -> Result<(String, DefinitionId), String> {
|
||||
// FIXME: different module same name?
|
||||
let defined_class_name = &mut self.defined_class_name;
|
||||
let defined_class_method_name = &mut self.defined_class_method_name;
|
||||
let defined_function_name = &mut self.defined_function_name;
|
||||
|
@ -603,7 +602,8 @@ impl TopLevelComposer {
|
|||
unifier,
|
||||
primitives_store,
|
||||
annotation,
|
||||
// NOTE: since only class need this, for function, it should be fine
|
||||
// NOTE: since only class need this, for function
|
||||
// it should be fine to be empty map
|
||||
HashMap::new(),
|
||||
)?;
|
||||
|
||||
|
@ -651,7 +651,8 @@ impl TopLevelComposer {
|
|||
unifier,
|
||||
primitives_store,
|
||||
return_annotation,
|
||||
// NOTE: since only class need this, for function, it should be fine
|
||||
// NOTE: since only class need this, for function
|
||||
// it should be fine to be empty map
|
||||
HashMap::new(),
|
||||
)?
|
||||
};
|
||||
|
@ -896,8 +897,8 @@ impl TopLevelComposer {
|
|||
FunSignature { args: arg_types, ret: ret_type, vars: method_var_map }.into(),
|
||||
));
|
||||
|
||||
// NOTE: unify now since function type is not in type annotation define
|
||||
// which is fine since type within method_type will be subst later
|
||||
// unify now since function type is not in type annotation define
|
||||
// which should be fine since type within method_type will be subst later
|
||||
unifier.unify(method_dummy_ty, method_type)?;
|
||||
} else if let ast::StmtKind::AnnAssign { target, annotation, value: None, .. } = &b.node
|
||||
{
|
||||
|
|
|
@ -44,7 +44,7 @@ impl TopLevelDef {
|
|||
name,
|
||||
unifier.stringify(*signature, obj_to_name, var_to_name),
|
||||
{
|
||||
// NOTE: preserve the order for debug output and test
|
||||
// preserve the order for debug output and test
|
||||
let mut r = var_id.clone();
|
||||
r.sort_unstable();
|
||||
r
|
||||
|
@ -123,6 +123,7 @@ impl TopLevelComposer {
|
|||
}
|
||||
|
||||
pub fn make_class_method_name(mut class_name: String, method_name: &str) -> String {
|
||||
class_name.push('.');
|
||||
class_name.push_str(method_name);
|
||||
class_name
|
||||
}
|
||||
|
|
|
@ -198,19 +198,19 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"6: Function {
|
||||
name: \"A__init__\",
|
||||
name: \"A.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"7: Function {
|
||||
name: \"Afun\",
|
||||
name: \"A.fun\",
|
||||
sig: \"fn[[b=class10], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"8: Function {
|
||||
name: \"Afoo\",
|
||||
name: \"A.foo\",
|
||||
sig: \"fn[[a=tvar2, b=tvar3], class4]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
@ -227,7 +227,7 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"11: Function {
|
||||
name: \"B__init__\",
|
||||
name: \"B.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
@ -244,13 +244,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"14: Function {
|
||||
name: \"C__init__\",
|
||||
name: \"C.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"15: Function {
|
||||
name: \"Cfun\",
|
||||
name: \"C.fun\",
|
||||
sig: \"fn[[b=class10], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
@ -301,13 +301,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"6: Function {
|
||||
name: \"Generic_A__init__\",
|
||||
name: \"Generic_A.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: [3]
|
||||
}"},
|
||||
|
||||
indoc! {"7: Function {
|
||||
name: \"Generic_Afun\",
|
||||
name: \"Generic_A.fun\",
|
||||
sig: \"fn[[a=class0], tvar3]\",
|
||||
var_id: [3]
|
||||
}"},
|
||||
|
@ -324,13 +324,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"10: Function {
|
||||
name: \"B__init__\",
|
||||
name: \"B.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"11: Function {
|
||||
name: \"Bfoo\",
|
||||
name: \"B.foo\",
|
||||
sig: \"fn[[b=tvar2], class4]\",
|
||||
var_id: [2]
|
||||
}"},
|
||||
|
@ -382,13 +382,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"7: Function {
|
||||
name: \"A__init__\",
|
||||
name: \"A.__init__\",
|
||||
sig: \"fn[[v=tvar3], class4]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
||||
indoc! {"8: Function {
|
||||
name: \"Afun\",
|
||||
name: \"A.fun\",
|
||||
sig: \"fn[[a=tvar2], tvar3]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
@ -411,7 +411,7 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"12: Function {
|
||||
name: \"B__init__\",
|
||||
name: \"B.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
@ -453,13 +453,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"6: Function {
|
||||
name: \"A__init__\",
|
||||
name: \"A.__init__\",
|
||||
sig: \"fn[[a=class5[2->class2, 3->class3], b=class9], class4]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
||||
indoc! {"7: Function {
|
||||
name: \"Afun\",
|
||||
name: \"A.fun\",
|
||||
sig: \"fn[[a=class5[2->class2, 3->class3]], class5[2->class3, 3->class0]]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
@ -476,19 +476,19 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"10: Function {
|
||||
name: \"B__init__\",
|
||||
name: \"B.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"11: Function {
|
||||
name: \"Bfoo\",
|
||||
name: \"B.foo\",
|
||||
sig: \"fn[[b=class9], class9]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
||||
indoc! {"12: Function {
|
||||
name: \"Bbar\",
|
||||
name: \"B.bar\",
|
||||
sig: \"fn[[a=class5[2->list[class9], 3->class0]], tuple[class5[2->virtual[class5[2->class9, 3->class0]], 3->class3], class9]]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
@ -539,19 +539,19 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"6: Function {
|
||||
name: \"A__init__\",
|
||||
name: \"A.__init__\",
|
||||
sig: \"fn[[t=tvar2], class4]\",
|
||||
var_id: [2]
|
||||
}"},
|
||||
|
||||
indoc! {"7: Function {
|
||||
name: \"Afun\",
|
||||
name: \"A.fun\",
|
||||
sig: \"fn[[a=class0, b=tvar2], list[virtual[class10[3->class3]]]]\",
|
||||
var_id: [2]
|
||||
}"},
|
||||
|
||||
indoc! {"8: Function {
|
||||
name: \"Afoo\",
|
||||
name: \"A.foo\",
|
||||
sig: \"fn[[c=class14], class4]\",
|
||||
var_id: [2]
|
||||
}"},
|
||||
|
@ -568,13 +568,13 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"11: Function {
|
||||
name: \"B__init__\",
|
||||
name: \"B.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: [3]
|
||||
}"},
|
||||
|
||||
indoc! {"12: Function {
|
||||
name: \"Bfun\",
|
||||
name: \"B.fun\",
|
||||
sig: \"fn[[a=class0, b=tvar2], list[virtual[class10[3->class3]]]]\",
|
||||
var_id: [2, 3]
|
||||
}"},
|
||||
|
@ -591,7 +591,7 @@ fn test_simple_function_analyze(source: Vec<&str>, tys: Vec<&str>, names: Vec<&s
|
|||
}"},
|
||||
|
||||
indoc! {"15: Function {
|
||||
name: \"C__init__\",
|
||||
name: \"C.__init__\",
|
||||
sig: \"fn[[], class4]\",
|
||||
var_id: []
|
||||
}"},
|
||||
|
|
|
@ -244,7 +244,7 @@ pub fn get_type_from_type_annotation_kinds(
|
|||
unifier.get_ty(*tvar).as_ref()
|
||||
{
|
||||
let ok: bool = {
|
||||
// NOTE: create a temp type var and unify to check compatibility
|
||||
// create a temp type var and unify to check compatibility
|
||||
let temp =
|
||||
unifier.get_fresh_var_with_range(range.borrow().as_slice());
|
||||
unifier.unify(temp.0, p).is_ok()
|
||||
|
|
|
@ -717,7 +717,7 @@ impl Unifier {
|
|||
let params = params.iter().map(|(id, v)| {
|
||||
format!("{}->{}", *id, self.stringify(*v, obj_to_name, var_to_name))
|
||||
});
|
||||
// NOTE: sort to preserve order
|
||||
// sort to preserve order
|
||||
let mut params = params.sorted();
|
||||
format!("{}[{}]", name, params.join(", "))
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue