| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Store the definitions in a cmLinkedTree in the cmMakefile. This can
be moved to cmState and then the tree will provide snapshotting
possibilities. It will also make the Closure copy created at
the start of each cmMakefile unnecesarry.
|
|
|
|
|
|
| |
Store usage information in the cmDefintions value instead. We already
pay for the memory as padding in the Def struct, so we might as well
use it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In cmMakefile::PushScope, a copy of the closure of keys initialized
in the parent scope is made. In PopScope, essentially the same copy
is inserted back into the parent. That means a lot of duplication
of strings and a lot of string comparisons. None of it is needed,
because the cmDefinitions keys already provide a canonical
representation of what is initialized.
The removal of the separate container also makes the variable handling
code more easy to reason about in general.
Before this patch, configuring llvm uses 200 KiB for the VarInitStack.
Overall peak memory consumption goes from 35.5 MiB to 35.1 MiB.
|
|
|
|
|
|
|
|
|
|
| |
Presumably the intention here is to attempt to optimize memory by not
storing what is not needed. However, all keys need to be tracked
anyway to implement initialization tracking, and this special case
gets in the way of simplifying the implementation of that.
This doesn't change any observable effects because values set
to 0 are considered not to exist by the cmDefinitions API.
|
|
|
|
|
| |
The Get method implicitly pulls a copy of all variables into a local scope. This
is not necessary.
|
|
|
|
| |
For consistency with all other closure-related methods.
|
|
|
|
| |
Currently we process a list of definitions, but that will change.
|
|
|
|
|
| |
There is no need to have a separate method, or to pass an external
set to it.
|
|
|
|
|
|
|
|
| |
For some reason, using recursion here is faster to configure ParaView
than using a loop. Probably some compiler optimization is inhibited
by using a loop.
Co-Author: Brad King <brad.king@kitware.com>
|
| |
|
|
|
|
| |
All structural knowledge of the stack of scopes is now external.
|
| |
|
|
|
|
| |
Return the simple case first.
|
| |
|
|
|
|
| |
Iterate directly over the parent content provided by cmMakefile.
|
|
|
|
| |
Accept a range of cmDefinitions*.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
Construct the final list directly in a named return value. Use
a single set to track bindings already found.
Co-Author: Brad King <brad.king@kitware.com>
|
| |
|
| |
|
|
|
|
| |
This is more efficient and we lose nothing.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|\
| |
| |
| |
| |
| |
| |
| | |
d1b62185 Merge branch 'parent-scope-tests' into variable-pull-failure
5f414cef Revert "cmDefinitions: Don't store parent lookups"
e0c0b1ac test: add a test for PARENT_SCOPE with multiple scopes
064c415d test: add test for PARENT_SCOPE behavior
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This reverts commit 5abfde6cb8a1ae0b2825797eab6c2e9842eb7c49.
The behaviors associated with implicit pulldown on variable lookup
seriously conflict with the optimizations made in these commits.
Basically, since values were copied upon variable lookup, not just on
PARENT_SCOPE, coupled with PARENT_SCOPE's behavior based on whether the
variable is in the current scope or not causes serious problems with not
storing a value for every variable at every scope.
The commit changed behavior of the following example, among other cases:
function(test_set)
set(blah "value2")
message("before PARENT_SCOPE blah=${blah}")
set(blah ${blah} PARENT_SCOPE)
message("after PARENT_SCOPE blah=${blah}")
endfunction()
set(blah value1)
test_set()
message("in parent scope, blah=${blah}")
Reported-by: Alex Merry <alex.merry@kde.org>
Reported-by: Ben Cooksley <bcooksley@kde.org>
|
| |
| |
| |
| |
| | |
The hash map is much faster at checking that the map won't have what
we're looking for so that we can just go to the parent scope instead.
|
|/
|
|
| |
Searching the map is not necessary.
|
|
|
|
|
| |
When looking up scopes, it is faster to not store the lookup locally to
keep the maps smaller and avoid extra allocations and rebalancing.
|
|
|
|
|
|
|
|
|
|
|
| |
Casts from std::string -> cmStdString were high on the list of things
taking up time. Avoid such implicit casts across function calls by just
using std::string everywhere.
The comment that the symbol name is too long is no longer relevant since
modern debuggers alias the templates anyways and the size is a
non-issue since the underlying methods are generated since it's
inherited.
|
|
|
|
| |
Variable names are always generated by CMake and should never be NULL.
|
| |
|
| |
|
|
|
|
|
|
|
| |
This converts the CMake license to a pure 3-clause OSI-approved BSD
License. We drop the previous license clause requiring modified
versions to be plainly marked. We also update the CMake copyright to
cover the full development time range.
|
|
Previously each new variable scope (subdirectory or function call) in
the CMake language created a complete copy of the key->value definition
map. This avoids the copy using transitive lookups up the scope stack.
Results of queries answered by parents are stored locally to maintain
locality of reference.
The class cmDefinitions replaces cmMakefile::DefinitionsMap, and is
aware of its enclosing scope. Each scope stores only the definitions
set (or unset!) inside it relative to the enclosing scope.
|