e034963a9a6903c1de09b8862add235f051f76af
[deliverable/binutils-gdb.git] / gdb / m2-exp.h
1 /* Definitions for Modula-2 expressions
2
3 Copyright (C) 2020 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #ifndef M2_EXP_H
21 #define M2_EXP_H
22
23 #include "expop.h"
24
25 extern struct value *eval_op_m2_high (struct type *expect_type,
26 struct expression *exp,
27 enum noside noside,
28 struct value *arg1);
29 extern struct value *eval_op_m2_subscript (struct type *expect_type,
30 struct expression *exp,
31 enum noside noside,
32 struct value *arg1,
33 struct value *arg2);
34
35 namespace expr
36 {
37
38 /* The Modula-2 "HIGH" operation. */
39 class m2_unop_high_operation
40 : public tuple_holding_operation<operation_up>
41 {
42 public:
43
44 using tuple_holding_operation::tuple_holding_operation;
45
46 value *evaluate (struct type *expect_type,
47 struct expression *exp,
48 enum noside noside) override
49 {
50 value *arg1 = std::get<0> (m_storage)->evaluate_with_coercion (exp,
51 noside);
52 return eval_op_m2_high (expect_type, exp, noside, arg1);
53 }
54
55 enum exp_opcode opcode () const override
56 { return UNOP_HIGH; }
57 };
58
59 /* Subscripting for Modula-2. */
60 class m2_binop_subscript_operation
61 : public tuple_holding_operation<operation_up, operation_up>
62 {
63 public:
64
65 using tuple_holding_operation::tuple_holding_operation;
66
67 value *evaluate (struct type *expect_type,
68 struct expression *exp,
69 enum noside noside) override
70 {
71 value *arg1 = std::get<0> (m_storage)->evaluate_with_coercion (exp,
72 noside);
73 value *arg2 = std::get<1> (m_storage)->evaluate_with_coercion (exp,
74 noside);
75 return eval_op_m2_subscript (expect_type, exp, noside, arg1, arg2);
76 }
77
78 enum exp_opcode opcode () const override
79 { return BINOP_SUBSCRIPT; }
80 };
81
82 } /* namespace expr */
83
84 #endif /* M2_EXP_H */
This page took 0.046002 seconds and 3 git commands to generate.