diff --git a/CxxBuilder/src/FileMatcher.bf b/CxxBuilder/src/FileMatcher.bf index 58ef8b9..ec72560 100644 --- a/CxxBuilder/src/FileMatcher.bf +++ b/CxxBuilder/src/FileMatcher.bf @@ -12,7 +12,7 @@ static class FileMatcher Runtime.Assert(Directory.Exists(directory), scope $"No such directory {directory}"); void Dir(StringView dir) { - for (let element in Directory.Enumerate(dir)) + dir: for (let element in Directory.Enumerate(dir)) { let path = element.GetFilePath(..scope .()); path.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar); @@ -23,11 +23,18 @@ static class FileMatcher } let relpath = Path.GetRelativePath(path, directory, ..scope .()); for (let pattern in patterns) - if (IsMatch(pattern, relpath)) - { - callback(relpath); - break; - } + { + if (!pattern.StartsWith('^') && !pattern.StartsWith('!')) continue; + if (IsMatch(pattern[1...], relpath)) + continue dir; + } + for (let pattern in patterns) + { + if (pattern.StartsWith('^') || pattern.StartsWith('!')) continue; + if (!IsMatch(pattern, relpath)) continue; + callback(relpath); + break; + } } } Dir(directory); diff --git a/src/Generator.bf b/src/Generator.bf index f83a9bb..955d7ab 100644 --- a/src/Generator.bf +++ b/src/Generator.bf @@ -793,7 +793,7 @@ abstract class Cpp2BeefGenerator { if (Clang.GetTokenKind(last) != .Identifier) break; str.Append(' '); - str.Append(GetTokenSpelling!(last)); + Compiler.Identifier.GetSourceName(GetTokenSpelling!(last), str); break; } last = token;