teo_parser/macros/
parse.rs1#[macro_export]
2macro_rules! parse_insert_punctuation {
3 ($context:ident, $current:ident, $children:ident, $content:expr) => {
4 {
5 let punc = crate::ast::punctuations::Punctuation::new($content, parse_span(&$current), $context.next_path());
6 $children.insert(crate::traits::identifiable::Identifiable::id(&punc), punc.into());
7 }
8 };
9}
10
11#[macro_export]
12macro_rules! parse_insert_operator {
13 ($context:ident, $current:ident, $children:ident, $content:expr) => {
14 {
15 let op = crate::ast::operators::Operator::new($content, parse_span(&$current), $context.next_path());
16 $children.insert(crate::traits::identifiable::Identifiable::id(&op), op.into());
17 }
18 };
19}
20
21#[macro_export]
22macro_rules! parse_insert_keyword {
23 ($context:ident, $current:ident, $children:ident, $content:expr) => {
24 {
25 let keyword = crate::ast::keyword::Keyword::new($content, parse_span(&$current), $context.next_path());
26 $children.insert(crate::traits::identifiable::Identifiable::id(&keyword), keyword.into());
27 }
28 };
29}
30
31#[macro_export]
32macro_rules! parse_append {
33 ($expr:expr, $children:ident) => {
34 {
35 let node = $expr;
36 $children.insert(crate::traits::identifiable::Identifiable::id(&node), node.into());
37 }
38 };
39}
40
41#[macro_export]
42macro_rules! parse_insert {
43 ($expr:expr, $children:ident, $dest:ident) => {
44 {
45 let node = $expr;
46 $dest.push(crate::traits::identifiable::Identifiable::id(&node));
47 $children.insert(crate::traits::identifiable::Identifiable::id(&node), node.into());
48 }
49 };
50}
51
52#[macro_export]
53macro_rules! parse_set {
54 ($expr:expr, $children:ident, $dest:ident) => {
55 {
56 let node = $expr;
57 $dest = crate::traits::identifiable::Identifiable::id(&node);
58 $children.insert(crate::traits::identifiable::Identifiable::id(&node), node.into());
59 }
60 };
61}
62
63#[macro_export]
64macro_rules! parse_set_optional {
65 ($expr:expr, $children:ident, $dest:ident) => {
66 {
67 let node = $expr;
68 $dest = Some(crate::traits::identifiable::Identifiable::id(&node));
69 $children.insert(crate::traits::identifiable::Identifiable::id(&node), node.into());
70 }
71 };
72}
73
74#[macro_export]
75macro_rules! parse_set_identifier_and_string_path {
76 ($context: ident, $current: ident, $children: ident, $identifier: ident, $string_path: ident) => {
77 {
78 let node = crate::parser::parse_identifier::parse_identifier(&$current, $context);
79 $identifier = crate::traits::identifiable::Identifiable::id(&node);
80 $string_path = $context.next_parent_string_path(node.name());
81 $children.insert(crate::traits::identifiable::Identifiable::id(&node), node.into());
82 }
83 };
84}
85
86#[macro_export]
87macro_rules! parse_container_node_variables_without_span {
88 ($context:ident) => {
89 {
90 let children: std::collections::BTreeMap<usize, crate::ast::node::Node> = std::collections::BTreeMap::new();
91 let path = $context.next_parent_path();
92 (path, children)
93 }
94 };
95}
96
97#[macro_export]
98macro_rules! parse_container_node_variables {
99 ($pair:ident, $context:ident) => {
100 {
101 let span = parse_span(&$pair);
102 let children: std::collections::BTreeMap<usize, crate::ast::node::Node> = std::collections::BTreeMap::new();
103 let path = $context.next_parent_path();
104 (span, path, children)
105 }
106 };
107 ($pair:ident, $context:ident, named) => {
108 {
109 let span = parse_span(&$pair);
110 let children: std::collections::BTreeMap<usize, crate::ast::node::Node> = std::collections::BTreeMap::new();
111 let path = $context.next_parent_path();
112 let string_path: Vec<String> = Vec::new();
113 (span, path, string_path, children)
114 }
115 };
116 ($pair:ident, $context:ident, availability) => {
117 {
118 let span = parse_span(&$pair);
119 let children: std::collections::BTreeMap<usize, crate::ast::node::Node> = std::collections::BTreeMap::new();
120 let path = $context.next_parent_path();
121 let define_availability = $context.current_availability_flag();
122 let actual_availability = std::cell::RefCell::new(crate::availability::Availability::none());
123 (span, path, children, define_availability, actual_availability)
124 }
125 };
126 ($pair:ident, $context:ident, named, availability) => {
127 {
128 let span = parse_span(&$pair);
129 let children: std::collections::BTreeMap<usize, crate::ast::node::Node> = std::collections::BTreeMap::new();
130 let path = $context.next_parent_path();
131 let string_path: Vec<String> = Vec::new();
132 let define_availability = $context.current_availability_flag();
133 let actual_availability = std::cell::RefCell::new(crate::availability::Availability::none());
134 (span, path, string_path, children, define_availability, actual_availability)
135 }
136 };
137}
138
139#[macro_export]
140macro_rules! parse_container_node_variables_cleanup {
141 ($context: ident) => {
142 $context.pop_parent_id();
143 };
144 ($context: ident, named) => {
145 $context.pop_parent_id();
146 $context.pop_string_path();
147 }
148}
149
150#[macro_export]
151macro_rules! parse_node_variables {
152 ($pair:ident, $context:ident) => {
153 {
154 let span = parse_span(&$pair);
155 let path = $context.next_path();
156 (span, path)
157 }
158 };
159}