-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathTreeBlock.h
More file actions
50 lines (37 loc) · 1.43 KB
/
TreeBlock.h
File metadata and controls
50 lines (37 loc) · 1.43 KB
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
#ifndef __TREEBLOCK_H__
#define __TREEBLOCK_H__
#include "TreeNode.h"
#include "ILBlock.h"
#include "Settings.h"
#include "Struct.h"
#include "Variable.h"
struct VariableAssignments;
class Output;
class TreeBlock: public RefCountObject
{
ILBlock* m_source;
size_t m_index;
std::vector< Ref<TreeNode> > m_nodes;
size_t m_errors;
TreeNodeType m_ptrType;
bool GetMemberVariableAndOffset(ILParameter& operand, Variable*& var, size_t& offset, Type*& type);
TreeNodeType GetPtrType();
TreeNodeType VariableTypeToNodeType(Type* type);
TreeNodeType OperandToNodeType(ILParameter& operand);
TreeNode* OperandToNode(const VariableAssignments& vars, ILParameter& operand);
TreeNode* OperandRefToNode(const VariableAssignments& vars, ILParameter& operand);
void StoreToOperand(const VariableAssignments& vars, ILParameter& dest, TreeNode* value);
TreeNode* ConstantMultiplyNode(TreeNode* val, uint64_t mult);
TreeNode* ConstantDivideNode(TreeNode* val, uint64_t div);
TreeNodeType DoubleTypeSize(TreeNodeType type);
public:
TreeBlock(ILBlock* source, size_t idx);
ILBlock* GetSource() const { return m_source; }
size_t GetIndex() const { return m_index; }
void AddNode(TreeNode* node);
const std::vector< Ref<TreeNode> >& GetNodes() const { return m_nodes; }
bool GenerateFromILBlock(ILBlock* il, std::vector< Ref<TreeBlock> >& blocks, const VariableAssignments& vars,
const Settings& settings, Output* output);
void Print() const;
};
#endif