Merge commit 'b7e675f'
authorJean Privat <jean@pryen.org>
Mon, 24 Feb 2014 20:53:12 +0000 (15:53 -0500)
committerJean Privat <jean@pryen.org>
Mon, 24 Feb 2014 20:53:12 +0000 (15:53 -0500)
Partially fixes issue #276 and add the test to exhibit the remaining bad
behavior of the issue

18 files changed:
src/rapid_type_analysis.nit
tests/sav/base_attr_init_val_int.res [new file with mode: 0644]
tests/sav/base_attr_init_val_int_alt1.res [new file with mode: 0644]
tests/sav/base_attr_init_val_int_alt2.res [new file with mode: 0644]
tests/sav/base_attr_init_val_int_alt3.res [new file with mode: 0644]
tests/sav/base_attr_init_val_int_alt4.res [new file with mode: 0644]
tests/sav/nitg-e/fixme/base_attr_init_val_int_alt1.res [new file with mode: 0644]
tests/sav/nitg-e/fixme/base_attr_init_val_int_alt2.res [new file with mode: 0644]
tests/sav/nitg-e/fixme/base_attr_init_val_int_alt3.res [new file with mode: 0644]
tests/sav/nitg-e/fixme/base_attr_init_val_int_alt4.res [new file with mode: 0644]
tests/sav/nitg-g/fixme/base_attr_init_val_int_alt1.res [new file with mode: 0644]
tests/sav/nitg-g/fixme/base_attr_init_val_int_alt2.res [new file with mode: 0644]
tests/sav/nitg-g/fixme/base_attr_init_val_int_alt3.res [new file with mode: 0644]
tests/sav/nitg-g/fixme/base_attr_init_val_int_alt4.res [new file with mode: 0644]
tests/sav/nitg-s/fixme/base_attr_init_val_int_alt1.res [new file with mode: 0644]
tests/sav/nitg-s/fixme/base_attr_init_val_int_alt2.res [new file with mode: 0644]
tests/sav/nitg-s/fixme/base_attr_init_val_int_alt3.res [new file with mode: 0644]
tests/sav/nitg-s/fixme/base_attr_init_val_int_alt4.res [new file with mode: 0644]

index 3ee7b28..db88025 100644 (file)
@@ -81,6 +81,12 @@ class RapidTypeAnalysis
        # The method definitions that remain to visit
        private var todo = new List[MMethodDef]
 
+       private fun force_alive(classname: String)
+       do
+               var classes = self.modelbuilder.model.get_mclasses_by_name(classname)
+               if classes != null then for c in classes do self.add_new(c.mclass_type, c.mclass_type)
+       end
+
        # Run the analysis until all visitable method definitions are visited.
        fun run_analysis
        do
@@ -96,9 +102,11 @@ class RapidTypeAnalysis
                        add_send(maintype, mainprop)
                end
 
-               # Force Bool
-               var classes = self.modelbuilder.model.get_mclasses_by_name("Bool")
-               if classes != null then for c in classes do self.add_new(c.mclass_type, c.mclass_type)
+               # Force primitive types
+               force_alive("Bool")
+               force_alive("Int")
+               force_alive("Float")
+               force_alive("Char")
 
                while not todo.is_empty do
                        var mmethoddef = todo.shift
diff --git a/tests/sav/base_attr_init_val_int.res b/tests/sav/base_attr_init_val_int.res
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/tests/sav/base_attr_init_val_int_alt1.res b/tests/sav/base_attr_init_val_int_alt1.res
new file mode 100644 (file)
index 0000000..5784bf1
--- /dev/null
@@ -0,0 +1 @@
+Runtime error: Uninitialized attribute @b (alt/base_attr_init_val_int_alt1.nit:28)
diff --git a/tests/sav/base_attr_init_val_int_alt2.res b/tests/sav/base_attr_init_val_int_alt2.res
new file mode 100644 (file)
index 0000000..9f0a522
--- /dev/null
@@ -0,0 +1 @@
+Runtime error: Uninitialized attribute @c (alt/base_attr_init_val_int_alt2.nit:29)
diff --git a/tests/sav/base_attr_init_val_int_alt3.res b/tests/sav/base_attr_init_val_int_alt3.res
new file mode 100644 (file)
index 0000000..87f4b33
--- /dev/null
@@ -0,0 +1 @@
+Runtime error: Uninitialized attribute @i (alt/base_attr_init_val_int_alt3.nit:30)
diff --git a/tests/sav/base_attr_init_val_int_alt4.res b/tests/sav/base_attr_init_val_int_alt4.res
new file mode 100644 (file)
index 0000000..c8da86f
--- /dev/null
@@ -0,0 +1 @@
+Runtime error: Uninitialized attribute @f (alt/base_attr_init_val_int_alt4.nit:31)
diff --git a/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt1.res b/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt1.res
new file mode 100644 (file)
index 0000000..c508d53
--- /dev/null
@@ -0,0 +1 @@
+false
diff --git a/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt2.res b/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt2.res
new file mode 100644 (file)
index 0000000..f76dd23
Binary files /dev/null and b/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt2.res differ
diff --git a/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt3.res b/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt3.res
new file mode 100644 (file)
index 0000000..573541a
--- /dev/null
@@ -0,0 +1 @@
+0
diff --git a/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt4.res b/tests/sav/nitg-e/fixme/base_attr_init_val_int_alt4.res
new file mode 100644 (file)
index 0000000..945da8f
--- /dev/null
@@ -0,0 +1 @@
+0.000000
diff --git a/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt1.res b/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt1.res
new file mode 100644 (file)
index 0000000..c508d53
--- /dev/null
@@ -0,0 +1 @@
+false
diff --git a/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt2.res b/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt2.res
new file mode 100644 (file)
index 0000000..f76dd23
Binary files /dev/null and b/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt2.res differ
diff --git a/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt3.res b/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt3.res
new file mode 100644 (file)
index 0000000..573541a
--- /dev/null
@@ -0,0 +1 @@
+0
diff --git a/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt4.res b/tests/sav/nitg-g/fixme/base_attr_init_val_int_alt4.res
new file mode 100644 (file)
index 0000000..945da8f
--- /dev/null
@@ -0,0 +1 @@
+0.000000
diff --git a/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt1.res b/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt1.res
new file mode 100644 (file)
index 0000000..c508d53
--- /dev/null
@@ -0,0 +1 @@
+false
diff --git a/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt2.res b/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt2.res
new file mode 100644 (file)
index 0000000..f76dd23
Binary files /dev/null and b/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt2.res differ
diff --git a/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt3.res b/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt3.res
new file mode 100644 (file)
index 0000000..573541a
--- /dev/null
@@ -0,0 +1 @@
+0
diff --git a/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt4.res b/tests/sav/nitg-s/fixme/base_attr_init_val_int_alt4.res
new file mode 100644 (file)
index 0000000..945da8f
--- /dev/null
@@ -0,0 +1 @@
+0.000000