projects
/
pspp
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
0d68154
)
array_arg
author
Ben Pfaff
<blp@cs.stanford.edu>
Tue, 14 Dec 2021 06:22:19 +0000
(22:22 -0800)
committer
Ben Pfaff
<blp@cs.stanford.edu>
Tue, 14 Dec 2021 06:22:19 +0000
(22:22 -0800)
src/language/expressions/generate.py
patch
|
blob
|
history
diff --git
a/src/language/expressions/generate.py
b/src/language/expressions/generate.py
index 9d404de61ad908dcd28de80ea925a13fba453531..9edcc3a4d3b3ec95ee65772ff3e1967e1c10730f 100644
(file)
--- a/
src/language/expressions/generate.py
+++ b/
src/language/expressions/generate.py
@@
-191,6
+191,15
@@
class Op:
self.mangle = ''.join([a.type_.mangle for a in args])
self.opname += '_%s' % self.mangle
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.
def parse_input():
"""Parses the entire input.
@@
-341,7
+350,7
@@
def parse_input():
sys.exit(1)
if min_valid > 0:
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)
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]
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 = []
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']
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']
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' % 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
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
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
def usage():
print("""\
%(argv0)s, for generating expression parsers and evaluators from definitions