#include <set>
#include <sstream>
#include <utility>
+#include <iostream> // TODO pmk rm
namespace Fortran {
namespace parser {
def.set_isDisabled(true);
TokenSequence replaced{ReplaceMacros(def.replacement(), prescanner)};
def.set_isDisabled(false);
- ProvenanceRange from{def.replacement().GetProvenanceRange()};
- ProvenanceRange use{input.GetTokenProvenanceRange(j)};
- ProvenanceRange newRange{
- allSources_->AddMacroCall(from, use, replaced.ToString())};
- result->Put(replaced, newRange);
+ if (!replaced.empty()) {
+ ProvenanceRange from{def.replacement().GetProvenanceRange()};
+ ProvenanceRange use{input.GetTokenProvenanceRange(j)};
+ ProvenanceRange newRange{
+ allSources_->AddMacroCall(from, use, replaced.ToString())};
+ result->Put(replaced, newRange);
+ }
continue;
}
// Possible function-like macro call. Skip spaces and newlines to see
TokenSequence replaced{
ReplaceMacros(def.Apply(args, *allSources_), prescanner)};
def.set_isDisabled(false);
- ProvenanceRange from{def.replacement().GetProvenanceRange()};
- ProvenanceRange use{input.GetIntervalProvenanceRange(j, k - j)};
- ProvenanceRange newRange{
- allSources_->AddMacroCall(from, use, replaced.ToString())};
- result->Put(replaced, newRange);
+ if (!replaced.empty()) {
+ ProvenanceRange from{def.replacement().GetProvenanceRange()};
+ ProvenanceRange use{input.GetIntervalProvenanceRange(j, k - j)};
+ ProvenanceRange newRange{
+ allSources_->AddMacroCall(from, use, replaced.ToString())};
+ result->Put(replaced, newRange);
+ }
j = k; // advance to the terminal ')'
}
return true;
definitions_.emplace(std::make_pair(
nameToken, Definition{argName, dir, j, tokens - j, isVariadic}));
} else {
- j = SkipBlanks(dir, j + 1, tokens);
+ j = SkipBlanks(dir, j, tokens);
definitions_.emplace(
std::make_pair(nameToken, Definition{dir, j, tokens - j}));
}