just substituted. This could cause infinite looping in certain
pathological cases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91843
91177308-0d34-0410-b5e6-
96231b3b80d8
--- /dev/null
+// RUN: tblgen %s | FileCheck %s
+// CHECK: No subst
+// CHECK: No foo
+// CHECK: RECURSE foo
+
+class Recurse<string t> {
+ string Text = t;
+}
+
+class Text<string text> :
+ Recurse<!subst("RECURSE", "RECURSE", !subst("NORECURSE", "foo", text))>;
+
+def Ok1 : Text<"No subst">;
+def Ok2 : Text<"No NORECURSE">;
+def Trouble : Text<"RECURSE NORECURSE">;
std::string Val = RHSs->getValue();
std::string::size_type found;
std::string Val = RHSs->getValue();
std::string::size_type found;
+ std::string::size_type idx = 0;
- found = Val.find(LHSs->getValue());
+ found = Val.find(LHSs->getValue(), idx);
if (found != std::string::npos) {
Val.replace(found, LHSs->getValue().size(), MHSs->getValue());
}
if (found != std::string::npos) {
Val.replace(found, LHSs->getValue().size(), MHSs->getValue());
}
+ idx = found + MHSs->getValue().size();
} while (found != std::string::npos);
return new StringInit(Val);
} while (found != std::string::npos);
return new StringInit(Val);