Remove obsolete way of initializing AST elements with serialized (string) data
authorNick Downing <nick@ndcode.org>
Sat, 26 Jan 2019 23:35:22 +0000 (10:35 +1100)
committerNick Downing <nick@ndcode.org>
Sun, 27 Jan 2019 00:23:44 +0000 (11:23 +1100)
ast.py
generate_ast.py

diff --git a/ast.py b/ast.py
index 953162a..417aafb 100644 (file)
--- a/ast.py
+++ b/ast.py
@@ -282,11 +282,7 @@ class AST(element.Element):
         text,
         children
       )
-      self.value = (
-        element.deserialize_bool(value)
-      if isinstance(value, str) else
-        value
-      )
+      self.value = value
     def serialize(self, ref_list):
       AST.Expression.serialize(self, ref_list)
       self.set('value', element.serialize_bool(self.value))
@@ -331,11 +327,7 @@ class AST(element.Element):
         children
       )
       self.sign = sign
-      self.base = (
-        element.deserialize_int(base)
-      if isinstance(base, str) else
-        base
-      )
+      self.base = base
       self.digits = digits
     def serialize(self, ref_list):
       AST.Expression.serialize(self, ref_list)
@@ -501,11 +493,7 @@ class AST(element.Element):
           text,
           children
         )
-        self.value = (
-          element.deserialize_int(value)
-        if isinstance(value, str) else
-          value
-        )
+        self.value = value
       def serialize(self, ref_list):
         element.Element.serialize(self, ref_list)
         self.set('value', element.serialize_int(self.value))
@@ -847,7 +835,7 @@ class AST(element.Element):
 {14:s}    text,
 {15:s}    children{16:s}
 {17:s}  )
-'''.format(
+{18:s}'''.format(
             context.indent,
             context.indent,
             context.indent,
@@ -882,79 +870,19 @@ class AST(element.Element):
                 for i in context.fields[:n_base_fields]
               ]
             ),
-            context.indent
+            context.indent,
+            ''.join(
+              [
+                '{0:s}  self.{1:s} = {2:s}\n'.format(
+                  context.indent,
+                  i[1].get_text(),
+                  i[1].get_text()
+                )
+                for i in context.fields[n_base_fields:]
+              ]
+            )
           )
         )
-        for i in context.fields[n_base_fields:]:
-          type = element.to_text(i[0])
-          name = i[1].get_text()
-          if type == 'ref' or type == 'list(ref)' or type == 'set(ref)' or type == 'str':
-            context.fout.write(
-              '''{0:s}  self.{1:s} = {2:s}
-'''.format(context.indent, name, name)
-            )
-          elif type[:5] == 'list(' and type[-1:] == ')':
-            subtype = type[5:-1]
-            context.fout.write(
-              '''{0:s}  self.{1:s} = (
-{2:s}    [element.deserialize_{3:s}(i) for i in {4:s}.split()]
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-                context.indent,
-                name,
-                context.indent,
-                subtype,
-                name,
-                context.indent,
-                name,
-                context.indent,
-                name,
-                context.indent
-              )
-            )
-          elif type[:4] == 'set(' and type[-1:] == ')':
-            subtype = type[4:-1]
-            context.fout.write(
-              '''{0:s}  self.{1:s} = (
-{2:s}    set([element.deserialize_{3:s}(i) for i in {4:s}.split()])
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-                context.indent,
-                name,
-                context.indent,
-                subtype,
-                name,
-                context.indent,
-                name,
-                context.indent,
-                name,
-                context.indent
-              )
-            )
-          else:
-            context.fout.write(
-              '''{0:s}  self.{1:s} = (
-{2:s}    element.deserialize_{3:s}({4:s})
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-                context.indent,
-                name,
-                context.indent,
-                type,
-                name,
-                context.indent,
-                name,
-                context.indent,
-                name,
-                context.indent
-              )
-            )
         if len(context.fields) > n_base_fields:
           context.fout.write(
             '''{0:s}def serialize(self, ref_list):
index f9a633b..0e3155f 100755 (executable)
@@ -109,7 +109,7 @@ while len(line):
 {16:s}    text,
 {17:s}    children{18:s}
 {19:s}  )
-'''.format(
+{20:s}'''.format(
           indent,
           params,
           indent,
@@ -143,80 +143,22 @@ while len(line):
                 indent,
                 name
               )
-              for type, name in base_classes[-2][class_name][:i]
+              for _, name in base_classes[-2][class_name][:i]
             ]
           ),
-          indent
+          indent,
+          ''.join(
+            [
+              '{0:s}  self.{1:s} = {2:s}\n'.format(
+                indent,
+                name,
+                name
+              )
+              for _, name in fields
+            ]
+          )
         )
       )
-      for type, name in fields:
-        if type == 'ref' or type == 'list(ref)' or type == 'set(ref)' or type == 'str':
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = {2:s}
-'''.format(indent, name, name)
-          )
-        elif type[:5] == 'list(' and type[-1:] == ')':
-          subtype = type[5:-1]
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    [element.deserialize_{3:s}(i) for i in {4:s}.split()]
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              subtype,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
-        elif type[:4] == 'set(' and type[-1:] == ')':
-          subtype = type[4:-1]
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    set([element.deserialize_{3:s}(i) for i in {4:s}.split()])
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              subtype,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
-        else:
-          sys.stdout.write(
-            '''{0:s}  self.{1:s} = (
-{2:s}    element.deserialize_{3:s}({4:s})
-{5:s}  if isinstance({6:s}, str) else
-{7:s}    {8:s}
-{9:s}  )
-'''.format(
-              indent,
-              name,
-              indent,
-              type,
-              name,
-              indent,
-              name,
-              indent,
-              name,
-              indent
-            )
-          )
       if len(fields):
         sys.stdout.write(
           '''{0:s}def serialize(self, ref_list):