Skip to content

Commit 37409c7

Browse files
ddobrevtritao
authored andcommitted
Optimized the walking of the ASt by simplifying its search.
Signed-off-by: Dimitar Dobrev <[email protected]>
1 parent 84dec5d commit 37409c7

File tree

2 files changed

+10
-46
lines changed

2 files changed

+10
-46
lines changed

src/AST/Namespace.cs

Lines changed: 6 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -107,25 +107,6 @@ public Declaration FindAnonymous(ulong key)
107107
return Anonymous.ContainsKey(key) ? Anonymous[key] : null;
108108
}
109109

110-
public DeclarationContext FindDeclaration(IEnumerable<string> declarations)
111-
{
112-
DeclarationContext currentDeclaration = this;
113-
114-
foreach (var declaration in declarations)
115-
{
116-
var subDeclaration = currentDeclaration.Namespaces
117-
.Concat<DeclarationContext>(currentDeclaration.Classes)
118-
.FirstOrDefault(e => e.Name.Equals(declaration));
119-
120-
if (subDeclaration == null)
121-
return null;
122-
123-
currentDeclaration = subDeclaration;
124-
}
125-
126-
return currentDeclaration as DeclarationContext;
127-
}
128-
129110
public Namespace FindNamespace(string name)
130111
{
131112
var namespaces = name.Split(new string[] { "::" },
@@ -259,31 +240,12 @@ public Class FindClass(string name,
259240
{
260241
if (string.IsNullOrEmpty(name)) return null;
261242

262-
var entries = name.Split(new[] { "::" },
263-
StringSplitOptions.RemoveEmptyEntries).ToList();
264-
265-
if (entries.Count <= 1)
266-
{
267-
var @class = Classes.Find(c => c.Name.Equals(name, stringComparison)) ??
268-
Namespaces.Select(n => n.FindClass(name, stringComparison)).FirstOrDefault(c => c != null);
269-
if (@class != null)
270-
return @class.CompleteDeclaration == null ?
271-
@class : (Class) @class.CompleteDeclaration;
272-
return null;
273-
}
274-
275-
var className = entries[entries.Count - 1];
276-
var namespaces = entries.Take(entries.Count - 1);
277-
278-
DeclarationContext declContext = FindDeclaration(namespaces);
279-
if (declContext == null)
280-
{
281-
declContext = FindClass(entries[0]);
282-
if (declContext == null)
283-
return null;
284-
}
285-
286-
return declContext.FindClass(className);
243+
var @class = Classes.Find(c => c.Name.Equals(name, stringComparison)) ??
244+
Namespaces.Select(n => n.FindClass(name, stringComparison)).FirstOrDefault(c => c != null);
245+
if (@class != null)
246+
return @class.CompleteDeclaration == null ?
247+
@class : (Class) @class.CompleteDeclaration;
248+
return null;
287249
}
288250

289251
public Class FindClass(string name, bool isComplete,

src/Generator.Tests/AST/TestAST.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,13 @@ public void TestASTParameter()
6666
[Test]
6767
public void TestASTHelperMethods()
6868
{
69-
var @class = AstContext.FindClass("Math::Complex").FirstOrDefault();
69+
var @namespace = AstContext.FindDecl<Namespace>("Math").FirstOrDefault();
70+
Assert.IsNotNull(@namespace, "Couldn't find Math namespace.");
71+
var @class = @namespace.FindClass("Complex");
7072
Assert.IsNotNull(@class, "Couldn't find Math::Complex class.");
7173
var plusOperator = @class.FindOperator(CXXOperatorKind.Plus).FirstOrDefault();
7274
Assert.IsNotNull(plusOperator, "Couldn't find operator+ in Math::Complex class.");
73-
var typedef = AstContext.FindTypedef("Math::Single").FirstOrDefault();
75+
var typedef = @namespace.FindTypedef("Single");
7476
Assert.IsNotNull(typedef);
7577
}
7678

0 commit comments

Comments
 (0)