Skip to content

Commit f6ce878

Browse files
committed
FindClass patch
1 parent dc50ec4 commit f6ce878

File tree

4 files changed

+33
-19
lines changed

4 files changed

+33
-19
lines changed

src/AST/ASTContext.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,20 +75,18 @@ public Enumeration FindCompleteEnum(string name)
7575
}
7676

7777
/// Finds an existing struct/class in the library modules.
78-
public IEnumerable<Class> FindClass(string name, bool create = false,
79-
bool ignoreCase = false)
78+
public IEnumerable<Class> FindClass(string name, bool create = false)
8079
{
8180
return TranslationUnits.Select(
82-
module => module.FindClass(name,
83-
ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal))
81+
module => module.FindClass(name))
8482
.Where(type => type != null);
8583
}
8684

8785
/// Finds the complete declaration of a class.
88-
public Class FindCompleteClass(string name, bool ignoreCase = false)
86+
public Class FindCompleteClass(string name)
8987
{
90-
return FindClass(name, ignoreCase: ignoreCase).FirstOrDefault(
91-
@class => !@class.IsIncomplete);
88+
return FindClass(name)
89+
.FirstOrDefault(@class => !@class.IsIncomplete);
9290
}
9391

9492
/// Finds an existing function in the library modules.

src/AST/Namespace.cs

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -203,17 +203,33 @@ Class CreateClass(string name, bool isComplete)
203203
};
204204
}
205205

206-
public Class FindClass(string name,
207-
StringComparison stringComparison = StringComparison.Ordinal)
206+
public Class FindClass(string name)
208207
{
209-
if (string.IsNullOrEmpty(name)) return null;
210-
211-
var @class = Classes.FirstOrDefault(c => c.Name.Equals(name, stringComparison)) ??
212-
Namespaces.Select(n => n.FindClass(name, stringComparison)).FirstOrDefault(c => c != null);
213-
if (@class != null)
214-
return @class.CompleteDeclaration == null ?
215-
@class : (Class)@class.CompleteDeclaration;
216-
return null;
208+
if (string.IsNullOrEmpty(name))
209+
return null;
210+
211+
var entries = name.Split(new[] { "::" }, StringSplitOptions.RemoveEmptyEntries)
212+
.ToArray();
213+
214+
if (entries.Length <= 1)
215+
{
216+
var @class = Classes.FirstOrDefault(e => e.Name.Equals(name));
217+
218+
if (@class == null)
219+
return null;
220+
221+
if (@class.CompleteDeclaration == null)
222+
return @class;
223+
224+
return (Class)@class.CompleteDeclaration;
225+
}
226+
227+
var className = entries[^1];
228+
var namespaces = entries.Take(entries.Length - 1);
229+
230+
var @namespace = FindNamespace(namespaces);
231+
232+
return @namespace?.FindClass(className);
217233
}
218234

219235
public Class FindClass(string name, bool isComplete,

src/Generator/Passes/MoveFunctionToClassPass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ private Class FindClassToMoveFunctionTo(Function function)
6161
string name = tu != null ? Options.GenerateFreeStandingFunctionsClassName(tu) :
6262
function.Namespace.Name;
6363
@class = ASTContext.FindClass(
64-
name, ignoreCase: true).FirstOrDefault(
64+
name).FirstOrDefault(
6565
c => c.TranslationUnit.Module == function.TranslationUnit.Module &&
6666
!c.IsIncomplete);
6767
}

src/Generator/Passes/StripUnusedSystemTypesPass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public override bool VisitASTContext(ASTContext context)
1616
// we need this one for marshalling std::string
1717
foreach (var name in new[] { "allocator", "char_traits" })
1818
{
19-
var forceIncludedClasses = context.FindClass(name, false, true)
19+
var forceIncludedClasses = context.FindClass(name)
2020
.Where(a => a.TranslationUnit.IsSystemHeader);
2121

2222
foreach (var usedStdType in forceIncludedClasses)

0 commit comments

Comments
 (0)