51 for (
auto i = seek_expandable_arg();
52 i < args().size(); ++_cur_arg,
53 i = seek_expandable_arg()) {
54 edits += expand(args()[i]);
56 edits += substitute();
57 }
else if (!callee()->defn()) {
60 }
else if (callee()->defn()->empty()) {
65 _value = callee()->format()->str();
68 return edits += expand(_value);
80 chew = off + sym->
id().length();
91 <<
"Macro expansion of \"" << eb.reference::invocation()
92 <<
"\" abandoned. Will exceed max expansion size "
93 << max_expansion_size() <<
" bytes" <<
emit();
96 size_t len = size_t(chew) - off;
97 if (len && str.compare(off,len,e.value()) == 0) {
100 edit(str,off,
size_t(chew) - off,e.value());
102 edits += edit_buf(str,e,off + e.invocation().size());
103 edits += edit_trailing_args(e,_cur_arg + 1);
struct unexplained_expansion encapsulates macro-expansion of a reference where the --explain option i...
struct symbol::locator encapsulates a symbol table entry.
bool in_progress() const
Say whether a determination the symbol's state is in progress.
static locator find_any_in(chewer< CharSeq > &chew, size_t &off)
Search a terminal portion of a CharSeq for any known symbol name.
std::string const & id() const
Get the name of the symbol.
bool configured() const
Say whether the symbol is configured.
warning_msg< 35 > warning_incomplete_expansion
Report a macro reference not fully expanded.
The tag class is inserted in a diagnostic_base to tell it to emit itself.
`template struct chewer<CharSeq> is a cursor-like type that is associated with a character-sequence t...
struct expansion_base is an abstract base for classes that encapsulate a mode of macro-expansion of a...
unsigned expand() override
Perform the unexplained expansion of the reference.