From 471547855e7842064b3383d17709a4d1592c50b8 Mon Sep 17 00:00:00 2001 From: ychenfo Date: Sun, 12 Sep 2021 13:14:46 +0800 Subject: [PATCH] nac3core: toplevel change class method name handling, cleanup comments --- nac3core/src/toplevel/composer.rs | 11 +++--- nac3core/src/toplevel/helper.rs | 3 +- nac3core/src/toplevel/test.rs | 48 ++++++++++++------------ nac3core/src/toplevel/type_annotation.rs | 2 +- nac3core/src/typecheck/typedef/mod.rs | 2 +- 5 files changed, 34 insertions(+), 32 deletions(-) diff --git a/nac3core/src/toplevel/composer.rs b/nac3core/src/toplevel/composer.rs index ed40b102..722c87c1 100644 --- a/nac3core/src/toplevel/composer.rs +++ b/nac3core/src/toplevel/composer.rs @@ -85,7 +85,6 @@ impl TopLevelComposer { resolver: Option>>, 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 { diff --git a/nac3core/src/toplevel/helper.rs b/nac3core/src/toplevel/helper.rs index 2912e3e7..dd70fa90 100644 --- a/nac3core/src/toplevel/helper.rs +++ b/nac3core/src/toplevel/helper.rs @@ -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 } diff --git a/nac3core/src/toplevel/test.rs b/nac3core/src/toplevel/test.rs index 48a75acc..0f0c1433 100644 --- a/nac3core/src/toplevel/test.rs +++ b/nac3core/src/toplevel/test.rs @@ -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: [] }"}, diff --git a/nac3core/src/toplevel/type_annotation.rs b/nac3core/src/toplevel/type_annotation.rs index 4e49de12..9d6ebeeb 100644 --- a/nac3core/src/toplevel/type_annotation.rs +++ b/nac3core/src/toplevel/type_annotation.rs @@ -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() diff --git a/nac3core/src/typecheck/typedef/mod.rs b/nac3core/src/typecheck/typedef/mod.rs index 56b7dbe9..c708c86c 100644 --- a/nac3core/src/typecheck/typedef/mod.rs +++ b/nac3core/src/typecheck/typedef/mod.rs @@ -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 {