Fix a bug which meant the user had to explictly specify the default value (rather...
authorNick Downing <nick@ndcode.org>
Tue, 5 Dec 2023 00:55:04 +0000 (11:55 +1100)
committerNick Downing <nick@ndcode.org>
Tue, 5 Dec 2023 00:55:04 +0000 (11:55 +1100)
ndcode/pitree/pitree.t

index ac253b2..331be65 100644 (file)
@@ -171,11 +171,9 @@ def generate_class_or_field_def(self, context):
               context.indent,
               i.children[1].get_text(),
               (
-                (
-                  'None'
-                if i.children[0].is_mutable() else
-                  i.children[2].children[0].generate_expression(i.children[0])
-                )
+                'None'
+              if i.children[0].is_mutable() else
+                i.children[2].children[0].generate_expression(i.children[0])
               if len(i.children[2].children) else
                 i.children[0].null_value()
               )
@@ -206,11 +204,27 @@ def generate_class_or_field_def(self, context):
               i.children[1].get_text(),
               (
                 '{0:s} if {1:s} is None else {2:s}'.format(
-                  i.children[2].children[0].generate_expression(i.children[0]),
+                  (
+                    i.children[2].children[0].generate_expression(i.children[0])
+
+                  if len(i.children[2].children) else
+                    i.children[0].null_value()
+                  ),
                   i.children[1].get_text(),
                   i.children[1].get_text()
                 )
-              if i.children[0].is_mutable() else
+              if (
+                i.children[0].is_mutable() and
+                # bit of a hack -- avoid "None if xxx is None else xxx"
+                (
+                  (
+                    i.children[2].children[0].generate_expression(i.children[0])
+
+                  if len(i.children[2].children) else
+                    i.children[0].null_value()
+                  )
+                ) != 'None'
+              ) else
                 i.children[1].get_text()
               )
             )