Replaces prevNode with new node and adds prevNode to newNode's children It can be considered that newNode encapsulated prevNode.
| 158 | // Replaces prevNode with new node and adds prevNode to newNode's children |
| 159 | // It can be considered that newNode encapsulated prevNode. |
| 160 | void BfReducer::ReplaceNode(BfAstNode* prevNode, BfAstNode* newNode) |
| 161 | { |
| 162 | #ifdef BF_AST_HAS_PARENT_MEMBER |
| 163 | newNode->mParent = prevNode->mParent; |
| 164 | #endif |
| 165 | |
| 166 | if (!newNode->IsInitialized()) |
| 167 | { |
| 168 | #ifdef BF_AST_COMPACT |
| 169 | if (prevNode->mIsCompact) |
| 170 | { |
| 171 | newNode->mIsCompact = prevNode->mIsCompact; |
| 172 | newNode->mCompact_SrcStart = prevNode->mCompact_SrcStart; |
| 173 | newNode->mCompact_SrcLen = prevNode->mCompact_SrcLen; |
| 174 | newNode->mCompact_TriviaLen = prevNode->mCompact_TriviaLen; |
| 175 | } |
| 176 | else |
| 177 | { |
| 178 | int prevTriviaStart; |
| 179 | int prevSrcStart; |
| 180 | int prevSrcEnd; |
| 181 | prevNode->GetSrcPositions(prevTriviaStart, prevSrcStart, prevSrcEnd); |
| 182 | newNode->Init(prevTriviaStart, prevSrcStart, prevSrcEnd); |
| 183 | } |
| 184 | #else |
| 185 | newNode->mTriviaStart = prevNode->mTriviaStart; |
| 186 | newNode->mSrcStart = prevNode->mSrcStart; |
| 187 | newNode->mSrcEnd = prevNode->mSrcEnd; |
| 188 | #endif |
| 189 | } |
| 190 | else |
| 191 | { |
| 192 | int newTriviaStart; |
| 193 | int newSrcStart; |
| 194 | int newSrcEnd; |
| 195 | newNode->GetSrcPositions(newTriviaStart, newSrcStart, newSrcEnd); |
| 196 | |
| 197 | int prevTriviaStart; |
| 198 | int prevSrcStart; |
| 199 | int prevSrcEnd; |
| 200 | prevNode->GetSrcPositions(prevTriviaStart, prevSrcStart, prevSrcEnd); |
| 201 | |
| 202 | if (prevTriviaStart < newTriviaStart) |
| 203 | newNode->SetTriviaStart(prevTriviaStart); |
| 204 | if (prevSrcStart < newSrcStart) |
| 205 | newNode->SetSrcStart(prevSrcStart); |
| 206 | if (prevSrcEnd > newSrcEnd) |
| 207 | newNode->SetSrcEnd(prevSrcEnd); |
| 208 | } |
| 209 | |
| 210 | #ifdef BF_AST_HAS_PARENT_MEMBER |
| 211 | prevNode->mParent = newNode; |
| 212 | #endif |
| 213 | } |
| 214 | |
| 215 | BfAstNode* BfReducer::Fail(const StringImpl& errorMsg, BfAstNode* refNode) |
| 216 | { |
no test coverage detected