-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathiapihax.h
57 lines (50 loc) · 2.05 KB
/
iapihax.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
/*
* Copyright (c) 1996-2010 Barton P. Miller
*
* We provide the Paradyn Parallel Performance Tools (below
* described as "Paradyn") on an AS IS basis, and do not warrant its
* validity or performance. We reserve the right to update, modify,
* or discontinue this software at any time. We shall have no
* obligation to supply such updates or modifications or any other
* form of support to you.
*
* By your use of Paradyn, you understand and agree that we (or any
* other person or entity with proprietary rights in Paradyn) are
* under no obligation to provide either maintenance services,
* update services, notices of latent defects, or correction of
* defects for Paradyn.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include "Expression.h"
#include "Visitor.h"
using namespace Dyninst::InstructionAPI;
class ExpTyper : public Visitor
{
private:
bool _is_reg;
bool _is_imm;
public:
ExpTyper() : _is_reg(false), _is_imm(false) { }
void visit(BinaryFunction *) { reset(); }
void visit(Dereference *) { reset(); }
void visit(Immediate *) { reset(); _is_imm = true; }
void visit(RegisterAST *) { reset(); _is_reg = true; }
bool reg() const {return _is_reg; }
bool imm() const {return _is_imm; }
private:
void reset() { _is_reg = false; _is_imm = false; }
};