-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathexpr.h
90 lines (70 loc) · 2.38 KB
/
expr.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/******************************************************************************
* @file expr.h
*****************************************************************************/
#ifndef _EXPR_H
#define _EXPR_H
enum expr_type {
EXPR_TYPE_INVALID,
EXPR_TYPE_ABSENT,
EXPR_TYPE_CONSTANT,
EXPR_TYPE_SYMBOL,
EXPR_TYPE_SYMBOL_RVA,
EXPR_TYPE_REGISTER,
EXPR_TYPE_INDEX,
EXPR_TYPE_LOGICAL_OR,
EXPR_TYPE_LOGICAL_AND,
EXPR_TYPE_EQUAL,
EXPR_TYPE_NOT_EQUAL,
EXPR_TYPE_LESSER,
EXPR_TYPE_LESSER_EQUAL,
EXPR_TYPE_GREATER,
EXPR_TYPE_GREATER_EQUAL,
EXPR_TYPE_ADD,
EXPR_TYPE_SUBTRACT,
EXPR_TYPE_BIT_INCLUSIVE_OR,
EXPR_TYPE_BIT_EXCLUSIVE_OR,
EXPR_TYPE_BIT_AND,
EXPR_TYPE_MULTIPLY,
EXPR_TYPE_DIVIDE,
EXPR_TYPE_MODULUS,
EXPR_TYPE_LEFT_SHIFT,
EXPR_TYPE_RIGHT_SHIFT,
EXPR_TYPE_LOGICAL_NOT,
EXPR_TYPE_BIT_NOT,
EXPR_TYPE_UNARY_MINUS,
/* Machine dependent operators. */
EXPR_TYPE_MACHINE_DEPENDENT_0,
EXPR_TYPE_MACHINE_DEPENDENT_1,
EXPR_TYPE_MACHINE_DEPENDENT_2,
EXPR_TYPE_MACHINE_DEPENDENT_3,
EXPR_TYPE_MACHINE_DEPENDENT_4,
EXPR_TYPE_MACHINE_DEPENDENT_5,
EXPR_TYPE_MACHINE_DEPENDENT_6,
EXPR_TYPE_MACHINE_DEPENDENT_7,
EXPR_TYPE_MACHINE_DEPENDENT_8,
EXPR_TYPE_MACHINE_DEPENDENT_9,
EXPR_TYPE_MACHINE_DEPENDENT_10,
/* How many expression types exist. */
EXPR_TYPE_MAX
};
enum expr_mode {
expr_mode_normal,
expr_mode_evaluate
};
#include "types.h"
struct expr {
enum expr_type type;
symbol_t add_symbol, op_symbol;
value_t add_number;
};
#define expression_read_into(pp, expr) (read_into ((pp), (expr), 0, expr_mode_normal))
#define expression_evaluate_and_read_into(pp, expr) (read_into ((pp), (expr), 0, expr_mode_evaluate))
section_t current_location (struct expr *expr);
section_t read_into (char **pp, struct expr *expr, uint32_t rank, enum expr_mode expr_mode);
symbol_t make_expr_symbol (struct expr *expr);
int expr_symbol_get_filename_and_line_number (struct symbol *symbol, const char **filename_p, unsigned long *line_number_p);
int resolve_expression (struct expr *expr);
offset_t absolute_expression_read_into (char **pp, struct expr *expr);
offset_t get_result_of_absolute_expression (char **pp);
void expr_type_set_rank (enum expr_type expr_type, uint32_t rank);
#endif /* _EXPR_H */