- if (tmp) {
- // the file is loaded
- // make sure the buffer isn't us
- // FIXME RECURSIVE INCLUDES
- // This is not sufficient, as recursive includes could be
- // more than a file away. But it will do for now.
- if (tmp && tmp != &buffer()) {
- // We must temporarily change features.buffer,
- // otherwise it would always be the master buffer,
- // and nested includes would not work.
- features.setBuffer(*tmp);
- // Maybe this is already a child
- bool const is_child =
- features.runparams().is_child;
- features.runparams().is_child = true;
- tmp->validate(features);
- features.runparams().is_child = is_child;
- features.setBuffer(buffer());
- }
- }
+ if (!tmp)
+ return;
+
+ // the file is loaded
+ if (checkForRecursiveInclude(tmp))
+ return;
+ buffer().pushIncludedBuffer(tmp);
+
+ // We must temporarily change features.buffer,
+ // otherwise it would always be the master buffer,
+ // and nested includes would not work.
+ features.setBuffer(*tmp);
+ // Maybe this is already a child
+ bool const is_child =
+ features.runparams().is_child;
+ features.runparams().is_child = true;
+ tmp->validate(features);
+ features.runparams().is_child = is_child;
+ features.setBuffer(buffer());
+
+ buffer().popIncludedBuffer();