'string', 'ss', 'empty_string'),
Type.new_any('boolean', 'double', 'number', 'n',
'boolean', 'ns', 'SYSMIS'),
+ Type.new_any('integer', 'int', 'number', 'n',
+ 'integer', 'ns', 'SYSMIS'),
# Format types.
Type.new_atom('format'),
'format', 'f', 'num_output_format'),
# Integer types.
- Type.new_leaf('integer', 'int', 'integer', 'n',
- 'integer'),
Type.new_leaf('pos_int', 'int', 'integer', 'n',
'positive_integer_constant'),
# Types that appear only as auxiliary data.
Type.new_auxonly('expression', 'struct expression *', 'e'),
+ Type.new_auxonly('expr_node', 'const struct expr_node *', 'n'),
Type.new_auxonly('case', 'const struct ccase *', 'c'),
Type.new_auxonly('case_idx', 'size_t', 'case_idx'),
Type.new_auxonly('dataset', 'struct dataset *', 'ds'),
# Used only for debugging purposes.
Type.new_atom('operation'),
+ Type.new_atom('exprnode'),
]:
types[t.name] = t
flags += ['OPF_PERM_ONLY']
if self.no_abbrev:
flags += ['OPF_NO_ABBREV']
+ for aux in self.aux:
+ if aux['TYPE'].name == 'expr_node':
+ flags += ['OPF_EXPR_NODE']
+ break
return ' | '.join(flags) if flags else '0'
decls += ['%saux_%s = op++->%s'
% (type_.c_type, name, type_.atom)]
args += ['aux_%s' % name]
+ elif type_.name == 'expr_node':
+ decls += ['%saux_%s = op++->node'
+ % (type_.c_type, name)]
+ args += ['aux_%s' % name]
elif type_.role == 'auxonly':
args += [type_.auxonly_value]
func = 'get_%s_arg' % type_.atom
args += '%s (node, %s)' % (func, arg_idx)
arg_idx += 1
+ elif type_.name == 'expr_node':
+ args += ['node']
elif type_.role == 'auxonly':
args += [type_.auxonly_value]
else: