diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2020-05-20 10:56:49 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-20 10:56:49 -0400 |
| commit | 96a00c8e8d14964c8e1f45c7c3c85d321b2a1b61 (patch) | |
| tree | 5cda70f1c650db831afa4b3efb1b0d2bda497856 /source/core/slang-string-slice-pool.cpp | |
| parent | c54c957d2e647d2f9bfdc0bf31561fca5a02c5df (diff) | |
AST dumping via C++ Extractor reflection (#1348)
* Add support for parsing array types to C++ extractor.
* C++ extractor looks for 'balanced tokens'. Use for extracting array suffixes.
* First pass at field dumping.
* Update project for field dumping.
* WIP AST Dumper.
* More AST dump compiling.
* Fix bug in StringSlicePool where it doesn't use the copy of the UnownedStringSlice in the map.
* Add support for SLANG_RELFECTED and SLANG_UNREFLECTED
More AST dump support.
* Support for hierarchical dumping/flat dumping.
Use SourceWriter to dump.
* Add -dump-ast command line option.
* Add fixes to VS project to incude AST dump.
* Fix compilation on gcc.
* Add fix for type ambiguity issue on x86 VS.
* Fixes from merge of reducing Token size.
* Fix comment about using SourceWriter.
Diffstat (limited to 'source/core/slang-string-slice-pool.cpp')
| -rw-r--r-- | source/core/slang-string-slice-pool.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/source/core/slang-string-slice-pool.cpp b/source/core/slang-string-slice-pool.cpp index 24187ba5c..a0af3ba68 100644 --- a/source/core/slang-string-slice-pool.cpp +++ b/source/core/slang-string-slice-pool.cpp @@ -61,16 +61,23 @@ StringSlicePool::Handle StringSlicePool::add(const Slice& slice) bool StringSlicePool::findOrAdd(const Slice& slice, Handle& outHandle) { - Handle newHandle = Handle(m_slices.getCount()); - const Handle* handlePtr = m_map.TryGetValueOrAdd(slice, newHandle); + const Handle* handlePtr = m_map.TryGetValue(slice); if (handlePtr) { outHandle = *handlePtr; return true; } - // Need to add + // Need to add. + + // Make a copy stored in the arena UnownedStringSlice scopeSlice(m_arena.allocateString(slice.begin(), slice.getLength()), slice.getLength()); + + // Add using the arenas copy + Handle newHandle = Handle(m_slices.getCount()); + m_map.Add(scopeSlice, newHandle); + + // Add to slices list m_slices.add(scopeSlice); outHandle = newHandle; return false; |
