array_arg
authorBen Pfaff <blp@cs.stanford.edu>
Tue, 14 Dec 2021 06:22:19 +0000 (22:22 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Tue, 14 Dec 2021 06:22:19 +0000 (22:22 -0800)
src/language/expressions/generate.py

index 9d404de61ad908dcd28de80ea925a13fba453531..9edcc3a4d3b3ec95ee65772ff3e1967e1c10730f 100644 (file)
@@ -191,6 +191,15 @@ class Op:
             self.mangle = ''.join([a.type_.mangle for a in args])
             self.opname += '_%s' % self.mangle
 
+    def array_arg(self):
+        """If this operation has an array argument, returns it.  Otherwise,
+        returns None.
+        """
+        if self.args and self.args[-1].idx is not None:
+            return self.args[-1]
+        else:
+            return None
+
 def parse_input():
     """Parses the entire input.
 
@@ -341,7 +350,7 @@ def parse_input():
             sys.exit(1)
 
         if min_valid > 0:
-            aa = array_arg(op)
+            aa = op.array_arg()
             if aa is None:
                 sys.stderr.write("can't have minimum valid count without array arg\n")
                 sys.exit(1)
@@ -813,7 +822,7 @@ def generate_parse_inc():
                 if arg.idx is None:
                     args += [arg.type_.human_name]
 
-            array = array_arg(op)
+            array = op.array_arg()
             if array is not None:
                 if op.min_valid == 0:
                     array_args = []
@@ -836,7 +845,7 @@ def generate_parse_inc():
         flags = []
         if op.absorb_miss:
             flags += ['OPF_ABSORB_MISS']
-        if array_arg(op):
+        if op.array_arg():
             flags += ['OPF_ARRAY_OPERAND']
         if op.min_valid > 0:
             flags += ['OPF_MIN_VALID']
@@ -861,7 +870,7 @@ def generate_parse_inc():
 
         members += ['%s' % op.min_valid]
 
-        members += ['%s' % (array_arg(op).times if array_arg(op) else 0)]
+        members += ['%s' % (op.array_arg().times if op.array_arg() else 0)]
 
         out_file.write('{%s},\n' % ', '.join(members))
 \f
@@ -901,17 +910,6 @@ def make_sysmis_decl(op, min_valid_src):
         return 'bool force_sysmis = %s' % ' || '.join(sysmis_cond)
     return None
 
-def array_arg(op):
-    """If 'op' has an array argument, returns it.  Otherwise, returns
-    None."""
-    args = op.args
-    if not args:
-        return None
-    last_arg = args[-1]
-    if last_arg.idx is not None:
-        return last_arg
-    return None
-
 def usage():
     print("""\
 %(argv0)s, for generating expression parsers and evaluators from definitions