OPF_UNIMPLEMENTED = 020,
/* If set, this operation is a PSPP extension. */
- OPF_EXTENSION = 040
+ OPF_EXTENSION = 040,
+
+ /* If set, this operation may not occur after TEMPORARY.
+ (Currently this applies only to LAG.) */
+ OPF_PERM_ONLY = 0100,
+
+ /* If set, this operation's name may not be abbreviated. */
+ OPF_NO_ABBREV = 0200
};
#define EXPR_ARG_MAX 4
int array_granularity;
};
-extern struct operation operations[];
+extern const struct operation operations[];
/* Tree structured expressions. */
struct string_node
{
operation_type type; /* OP_string. */
- struct fixed_string s;
+ struct substring s;
};
struct variable_node
{
operation_type operation;
double number;
- struct fixed_string string;
+ struct substring string;
struct variable *variable;
const struct vector *vector;
struct fmt_spec *format;
struct expression
{
struct pool *expr_pool; /* Pool for expression static data. */
- struct dictionary *dict; /* Dictionary for variables, vectors. */
+ struct dataset *ds ; /* The dataset */
atom_type type; /* Type of expression result. */
union operation_data *ops; /* Expression data. */
size_t op_cnt, op_cap; /* Number of ops, amount of allocated space. */
double *number_stack; /* Evaluation stack: numerics, Booleans. */
- struct fixed_string *string_stack; /* Evaluation stack: strings. */
+ struct substring *string_stack; /* Evaluation stack: strings. */
struct pool *eval_pool; /* Pool for evaluation temporaries. */
};
-struct expression *expr_parse_any (struct dictionary *, bool optimize);
+struct expression *expr_parse_any (struct lexer *lexer, struct dataset *, bool optimize);
void expr_debug_print_postfix (const struct expression *);
union any_node *expr_optimize (union any_node *, struct expression *);
union any_node *expr_allocate_string_buffer (struct expression *e,
const char *string, size_t length);
union any_node *expr_allocate_string (struct expression *e,
- struct fixed_string);
+ struct substring);
union any_node *expr_allocate_variable (struct expression *e,
struct variable *);
union any_node *expr_allocate_format (struct expression *e,