compile: no default value for notnull primitive attributes.
authorJean Privat <jean@pryen.org>
Wed, 24 Jun 2009 19:16:33 +0000 (15:16 -0400)
committerJean Privat <jean@pryen.org>
Wed, 24 Jun 2009 20:29:37 +0000 (16:29 -0400)
However, instead of segfaulting, using an uninitialized attribute may
behave like if it was initialized to 0 (whatever it means).

Therefore the new test base_attr_nullable_int.nit makes more sense with -W to
activate non-lethal runtime warnings.

Signed-off-by: Jean Privat <jean@pryen.org>

src/compiling/compiling_global.nit
tests/base_attr_nullable_int.nit [new file with mode: 0644]
tests/sav/base_attr_nullable_int.sav [new file with mode: 0644]
tests/sav/base_attr_nullable_int_alt1.sav [new file with mode: 0644]
tests/sav/base_attr_nullable_int_alt2.sav [new file with mode: 0644]
tests/sav/base_attr_nullable_int_alt3.sav [new file with mode: 0644]
tests/sav/base_attr_nullable_int_alt4.sav [new file with mode: 0644]
tests/sav/base_attr_nullable_int_alt5.sav [new file with mode: 0644]

index 5ff14cd..c81ee97 100644 (file)
@@ -895,12 +895,6 @@ redef class MMLocalClass
                                        if ne != null then
                                                var e = ne.compile_expr(v)
                                                v.add_instr("{p.global.attr_access}(obj) = {e};")
-                                       else
-                                               var pi = t.local_class.primitive_info
-                                               if pi != null and pi.tagged then
-                                                       var default = t.default_cvalue
-                                                       v.add_instr("{p.global.attr_access}(obj) = {default};")
-                                               end
                                        end
                                end
                        end
diff --git a/tests/base_attr_nullable_int.nit b/tests/base_attr_nullable_int.nit
new file mode 100644 (file)
index 0000000..62e3679
--- /dev/null
@@ -0,0 +1,78 @@
+# This file is part of NIT ( http://www.nitlanguage.org ).
+#
+# Copyright 2004-2008 Jean Privat <jean@pryen.org>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import end
+
+interface Object
+end
+
+universal Int
+       meth output is intern
+       meth +(o: Int): Int is intern
+end
+
+class Foo
+       attr _a1: Int
+       readable attr _a2: Int
+       meth run
+       do
+               _a1.output
+               a2.output
+       end
+
+       meth run_other(o: Foo)
+       do
+               o._a1.output
+               o._a2.output
+       end
+
+       init
+       do
+               #alt1#run
+               _a1 = 1
+               #alt2#run
+               _a2 = _a1 + 1
+       end
+
+       init nop do end
+end
+
+class Bar
+special Foo
+       attr _a3: Int
+       redef meth run
+       do
+               _a1.output
+               _a2.output
+               _a3.output
+       end
+
+       init
+       do
+               nop
+               #alt3#run
+               _a1 = 10
+               #alt4#run_other(self)
+               _a2 = 20
+               #alt5#run
+               _a3 = 30
+       end
+end
+
+var f = new Foo
+var b = new Bar
+f.run
+b.run
diff --git a/tests/sav/base_attr_nullable_int.sav b/tests/sav/base_attr_nullable_int.sav
new file mode 100644 (file)
index 0000000..66b1ef1
--- /dev/null
@@ -0,0 +1,5 @@
+1
+2
+10
+20
+30
diff --git a/tests/sav/base_attr_nullable_int_alt1.sav b/tests/sav/base_attr_nullable_int_alt1.sav
new file mode 100644 (file)
index 0000000..5625f1f
--- /dev/null
@@ -0,0 +1,7 @@
+0
+0
+1
+2
+10
+20
+30
diff --git a/tests/sav/base_attr_nullable_int_alt2.sav b/tests/sav/base_attr_nullable_int_alt2.sav
new file mode 100644 (file)
index 0000000..2e8046c
--- /dev/null
@@ -0,0 +1,7 @@
+1
+0
+1
+2
+10
+20
+30
diff --git a/tests/sav/base_attr_nullable_int_alt3.sav b/tests/sav/base_attr_nullable_int_alt3.sav
new file mode 100644 (file)
index 0000000..f0c5f8f
--- /dev/null
@@ -0,0 +1,8 @@
+0
+0
+0
+1
+2
+10
+20
+30
diff --git a/tests/sav/base_attr_nullable_int_alt4.sav b/tests/sav/base_attr_nullable_int_alt4.sav
new file mode 100644 (file)
index 0000000..a12c8e0
--- /dev/null
@@ -0,0 +1,7 @@
+10
+0
+1
+2
+10
+20
+30
diff --git a/tests/sav/base_attr_nullable_int_alt5.sav b/tests/sav/base_attr_nullable_int_alt5.sav
new file mode 100644 (file)
index 0000000..f343f0e
--- /dev/null
@@ -0,0 +1,8 @@
+10
+20
+0
+1
+2
+10
+20
+30