-
Notifications
You must be signed in to change notification settings - Fork 71
/
Copy pathast.rs
148 lines (142 loc) · 5.09 KB
/
ast.rs
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
use crate::{
ast::macros::*,
ast::*,
visitor::ast_visitor::{ASTConstVisitor, Node},
};
use eyre::Result;
generate_ast_methods!(
ArrayTypeName,
Assignment,
BinaryOperation,
Block,
Conditional,
ContractDefinition,
ElementaryTypeName,
ElementaryTypeNameExpression,
EmitStatement,
EnumDefinition,
EnumValue,
EventDefinition,
ErrorDefinition,
ExpressionStatement,
FunctionCall,
FunctionCallOptions,
FunctionDefinition,
FunctionTypeName,
ForStatement,
Identifier,
IdentifierPath,
IfStatement,
ImportDirective,
IndexAccess,
IndexRangeAccess,
InheritanceSpecifier,
InlineAssembly,
Literal,
MemberAccess,
NewExpression,
Mapping,
ModifierDefinition,
ModifierInvocation,
OverrideSpecifier,
ParameterList,
PragmaDirective,
Return,
RevertStatement,
SourceUnit,
StructDefinition,
StructuredDocumentation,
TryStatement,
TryCatchClause,
TupleExpression,
UnaryOperation,
UserDefinedTypeName,
UserDefinedValueTypeDefinition,
UsingForDirective,
VariableDeclaration,
VariableDeclarationStatement,
WhileStatement,
DoWhileStatement,
Break,
Continue,
PlaceholderStatement,
);
impl From<&YulFunctionCall> for ASTNode {
fn from(value: &YulFunctionCall) -> Self {
ASTNode::YulFunctionCall(value.clone())
}
}
impl From<&YulIdentifier> for ASTNode {
fn from(value: &YulIdentifier) -> Self {
ASTNode::YulIdentifier(value.clone())
}
}
impl From<&YulLiteral> for ASTNode {
fn from(value: &YulLiteral) -> Self {
ASTNode::YulLiteral(value.clone())
}
}
impl From<&Expression> for ASTNode {
fn from(value: &Expression) -> Self {
match value {
Expression::Literal(literal) => ASTNode::Literal(literal.clone()),
Expression::Identifier(identifier) => ASTNode::Identifier(identifier.clone()),
Expression::UnaryOperation(unary_operation) => {
ASTNode::UnaryOperation(unary_operation.clone())
}
Expression::BinaryOperation(binary_operation) => {
ASTNode::BinaryOperation(binary_operation.clone())
}
Expression::Conditional(conditional) => ASTNode::Conditional(conditional.clone()),
Expression::Assignment(assignment) => ASTNode::Assignment(assignment.clone()),
Expression::FunctionCall(function_call) => ASTNode::FunctionCall(function_call.clone()),
Expression::FunctionCallOptions(function_call_ops) => {
ASTNode::FunctionCallOptions(function_call_ops.clone())
}
Expression::IndexAccess(index_access) => ASTNode::IndexAccess(index_access.clone()),
Expression::IndexRangeAccess(index_range_access) => {
ASTNode::IndexRangeAccess(index_range_access.clone())
}
Expression::MemberAccess(member_access) => ASTNode::MemberAccess(member_access.clone()),
Expression::ElementaryTypeNameExpression(elementary_type_name_expression) => {
ASTNode::ElementaryTypeNameExpression(elementary_type_name_expression.clone())
}
Expression::TupleExpression(tuple_expression) => {
ASTNode::TupleExpression(tuple_expression.clone())
}
Expression::NewExpression(new_expression) => {
ASTNode::NewExpression(new_expression.clone())
}
}
}
}
impl From<Expression> for ASTNode {
fn from(value: Expression) -> Self {
match value {
Expression::Literal(literal) => ASTNode::Literal(literal),
Expression::Identifier(identifier) => ASTNode::Identifier(identifier),
Expression::UnaryOperation(unary_operation) => ASTNode::UnaryOperation(unary_operation),
Expression::BinaryOperation(binary_operation) => {
ASTNode::BinaryOperation(binary_operation)
}
Expression::Conditional(conditional) => ASTNode::Conditional(conditional),
Expression::Assignment(assignment) => ASTNode::Assignment(assignment),
Expression::FunctionCall(function_call) => ASTNode::FunctionCall(function_call),
Expression::FunctionCallOptions(function_call_ops) => {
ASTNode::FunctionCallOptions(function_call_ops)
}
Expression::IndexAccess(index_access) => ASTNode::IndexAccess(index_access),
Expression::IndexRangeAccess(index_range_access) => {
ASTNode::IndexRangeAccess(index_range_access)
}
Expression::MemberAccess(member_access) => ASTNode::MemberAccess(member_access),
Expression::ElementaryTypeNameExpression(elementary_type_name_expression) => {
ASTNode::ElementaryTypeNameExpression(elementary_type_name_expression)
}
Expression::TupleExpression(tuple_expression) => {
ASTNode::TupleExpression(tuple_expression)
}
Expression::NewExpression(new_expression) => ASTNode::NewExpression(new_expression),
}
}
}