summaryrefslogtreecommitdiffstats
path: root/source/slang/lookup.cpp
diff options
context:
space:
mode:
authorTim Foley <tfoley@nvidia.com>2017-08-14 14:48:37 -0700
committerTim Foley <tfoley@nvidia.com>2017-08-14 14:48:37 -0700
commit9885c972a6bfa6f856e505cdd90d9b71fdbdadaf (patch)
tree7314b26e21ded966b6a4fe2430f0421c0c0970bd /source/slang/lookup.cpp
parent7f57ea4ad86c2a3eb5a14fef458e711845c1f87e (diff)
Add an explicit `Name` type
Fixes #23 Up to this point, the compiler has used the ordinary `String` type to represent declaration names, which means a bunch of lookup structures throughout the compiler were string-to-whatever maps, which can reduce efficiency. It also means that things like the `Token` type end up carying a `String` by value and paying for things like reference-counting. This change adds a `Name` type that is used to represent names of variables, types, macros, etc. Names are cached and unique'd globally for a session, and the string-to-name mapping gets done during lexing. From that point on, most mapping is from pointers, which should make all the various table lookups faster. More importantly (possibly), this brings us one step closer to being able to pool-allocate the AST nodes.
Diffstat (limited to 'source/slang/lookup.cpp')
-rw-r--r--source/slang/lookup.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/source/slang/lookup.cpp b/source/slang/lookup.cpp
index 30db9d75e..ccdbe8fbf 100644
--- a/source/slang/lookup.cpp
+++ b/source/slang/lookup.cpp
@@ -23,7 +23,7 @@ struct BreadcrumbInfo
void DoLocalLookupImpl(
Session* session,
- String const& name,
+ Name* name,
DeclRef<ContainerDecl> containerDeclRef,
LookupRequest const& request,
LookupResult& result,
@@ -42,7 +42,7 @@ void buildMemberDictionary(ContainerDecl* decl)
for (auto m : decl->Members)
{
- auto name = m->name.Content;
+ auto name = m->getName();
// Add any transparent members to a separate list for lookup
if (m->HasModifier<TransparentModifier>())
@@ -52,8 +52,8 @@ void buildMemberDictionary(ContainerDecl* decl)
decl->transparentMembers.Add(info);
}
- // Ignore members with an empty name
- if (name.Length() == 0)
+ // Ignore members with no name
+ if (!name)
continue;
m->nextInContainerWithSameName = nullptr;
@@ -153,11 +153,11 @@ LookupResultItem CreateLookupResultItem(
void DoMemberLookupImpl(
Session* session,
- String const& name,
- RefPtr<Type> baseType,
+ Name* name,
+ RefPtr<Type> baseType,
LookupRequest const& request,
- LookupResult& ioResult,
- BreadcrumbInfo* breadcrumbs)
+ LookupResult& ioResult,
+ BreadcrumbInfo* breadcrumbs)
{
// If the type was pointer-like, then dereference it
// automatically here.
@@ -192,7 +192,7 @@ void DoMemberLookupImpl(
void DoMemberLookupImpl(
Session* session,
- String const& name,
+ Name* name,
DeclRef<Decl> baseDeclRef,
LookupRequest const& request,
LookupResult& ioResult,
@@ -209,7 +209,7 @@ void DoMemberLookupImpl(
// Look for members of the given name in the given container for declarations
void DoLocalLookupImpl(
Session* session,
- String const& name,
+ Name* name,
DeclRef<ContainerDecl> containerDeclRef,
LookupRequest const& request,
LookupResult& result,
@@ -293,7 +293,7 @@ void DoLocalLookupImpl(
void DoLookupImpl(
Session* session,
- String const& name,
+ Name* name,
LookupRequest const& request,
LookupResult& result)
{
@@ -353,9 +353,9 @@ void DoLookupImpl(
}
LookupResult DoLookup(
- Session* session,
- String const& name,
- LookupRequest const& request)
+ Session* session,
+ Name* name,
+ LookupRequest const& request)
{
LookupResult result;
DoLookupImpl(session, name, request, result);
@@ -365,7 +365,7 @@ LookupResult DoLookup(
LookupResult LookUp(
Session* session,
SemanticsVisitor* semantics,
- String const& name,
+ Name* name,
RefPtr<Scope> scope)
{
LookupRequest request;
@@ -379,7 +379,7 @@ LookupResult LookUp(
LookupResult LookUpLocal(
Session* session,
SemanticsVisitor* semantics,
- String const& name,
+ Name* name,
DeclRef<ContainerDecl> containerDeclRef)
{
LookupRequest request;