Lines Matching +full:write +full:- +full:back
1 //===--- DLangDemangle.cpp ------------------------------------------------===//
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
14 //===----------------------------------------------------------------------===//
41 /// \param Demangled Output buffer to write the demangled name.
53 /// \param Demangled output buffer to write the demangled name.
70 /// Extract the back reference position from a given string.
72 /// \param Mangled string to extract the back reference position.
83 /// Extract the symbol pointed by the back reference form a given string.
85 /// \param Mangled string to extract the back reference position.
96 /// \param Demangled output buffer to write the demangled name.
124 /// \param Demangled Output buffer to write the demangled name.
134 /// \param Demangled Output buffer to write the demangled name.
145 /// \param Demangled Output buffer to write the demangled name.
163 /// The index of the last back reference.
184 unsigned long Digit = Mangled[0] - '0'; in decodeNumber()
187 if (Val > (std::numeric_limits<unsigned int>::max() - Digit) / 10) { in decodeNumber()
210 // Any identifier or non-basic type that has been emitted to the mangled in decodeBackrefPos()
214 // Numbers in back references are encoded with base 26 by upper case letters in decodeBackrefPos()
215 // A-Z for higher digits but lower case letters a-z for the last digit. in decodeBackrefPos()
217 // [a-z] in decodeBackrefPos()
218 // [A-Z] NumberBackRef in decodeBackrefPos()
224 if (Val > (std::numeric_limits<unsigned long>::max() - 25) / 26) in decodeBackrefPos()
230 Val += Mangled[0] - 'a'; in decodeBackrefPos()
238 Val += Mangled[0] - 'A'; in decodeBackrefPos()
249 "Invalid back reference!"); in decodeBackref()
262 if (RefPos > Qpos - Str.data()) { in decodeBackref()
267 // Set the position of the back reference. in decodeBackref()
268 Ret = Qpos - RefPos; in decodeBackref()
275 // An identifier back reference always points to a digit 0 to 9. in parseSymbolBackref()
281 // Get position of the back reference in parseSymbolBackref()
301 // A type back reference always points to a letter. in parseTypeBackref()
307 // bail as this may be a recursive back reference. in parseTypeBackref()
308 if (Mangled.data() - Str.data() >= LastBackref) { in parseTypeBackref()
314 LastBackref = Mangled.data() - Str.data(); in parseTypeBackref()
316 // Get position of the back reference. in parseTypeBackref()
323 // Can't decode back reference. in parseTypeBackref()
329 // TODO: Add support for function type back references. in parseTypeBackref()
353 if (!Valid || Ret > Qref - Str.data()) in isSymbolName()
356 return std::isdigit(Qref[-Ret]); in isSymbolName()
452 const size_t SuffixLen = Mangled.length() - Len; in parseIdentifier()
489 // Back referenced type. in parseType()
507 Demangled->prepend("initializer for "); in parseLName()
508 Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); in parseLName()
514 Demangled->prepend("vtable for "); in parseLName()
515 Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); in parseLName()
524 Demangled->prepend("ClassInfo for "); in parseLName()
525 Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); in parseLName()
534 Demangled->prepend("Interface for "); in parseLName()
535 Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); in parseLName()
544 Demangled->prepend("ModuleInfo for "); in parseLName()
545 Demangled->setCurrentPosition(Demangled->getCurrentPosition() - 1); in parseLName()
560 std::string_view M(this->Str); in parseMangle()
588 Demangled.setCurrentPosition(Demangled.getCurrentPosition() - 1); in dlangDemangle()