use local8bit instead of latin1 resp. 8bit-passthrough, after all.
the situation was as follows:
- if the pro files and file names were all ascii, everything just worked
- if either contained non-ascii:
- on unix, the evaluator would work as long as the file content
encoding matched the file name encoding, and the ui would work as
long as the file name encoding was latin1 (i.e., on no modern
system)
- on windows, both would work only if the ansi code page was
latin1/cp1252 (i.e., on western systems)
i.e., even in the low-level evaluator, only native latin1 systems with
actual latin1 files worked consistently. given this situation, it makes
little sense to make an encoding adapter between the evaluator and the
ui as originally planned. instead, take the easy way out and use
local8bit - this continues to work for native latin1 systems+files in
the backend, and makes the ui work for everything the backend groks and
some more.
Reviewed-by: dt
Task-number: QTCREATORBUG-930
this fixes the recent appearance of qt_webkit_version.pri in all qt 4.7
based projects.
in fact, the patch does somewhat more: it makes the evaluator provide
the information to the higher layers which is necessary for a truly
hierarchical display of includes. TBD later.
Reviewed-by: dt
Task-number: QTCREATORBUG-1590
the async re-parsing code breaks the assumption that project
parsing only ever starts with a single non-concurrent evaluation
(of the top-level project file), so the population of the base
values in the shared ProFileOption was happily causing crashes.
Reviewed-by: dt
Task-number: QTCREATORBUG-1569
that way the result vector can be pre-allocated - which gives zero
resizes if no expansions are in the expression.
for the joined argument lists of built-in functions, pre-allocate a
fixed 5 elements, which covers all cases and more.
the argument lists of user-defined functions are not pre-allocated
yet.
ProString is almost a QStringRef, except that it keeps a copy of instead
of a pointer to the QString - to make it refcountable. additionally, it
holds a hash so it can be efficiently used for repetetive hash lookups.
this function class just joins each string list argument into a
single string. so instead of first building a list and joining it
right afterwards, create a single string in the first place.
turn else, for(), defineTest() and defineReplace() into own node
types instead of treating them as magic conditionals/functions.
on top of that, introduce a proper branching node type, so finding
the alternative code paths can be moved into the parser instead of
burdening the evaluator with it.
it wouldn't work as expected anyway, as the splitting rule (using the
semicolon in addition to whitespace) applied only to the string literal
from the pro file, but not any expanded [environment] variables, etc.
(i.e., where it might any make sense). so just drop it, as it would
considerably complicate following optimizations.
unlike in qmake, the arguments are already expanded at this point
(which is strictly speaking a bug for the iterator variable name),
so it is plain wrong to call doVariableReplace on them.
We used to indicate that the cache for a file is up to date by having a
Entry with ent->locker == 0. But we first wake up all threads and only
after all the threads who waited for that parse to complete we set
ent->locker to zero. Thus a different thread could get the impression
that it needs to wait for the parse thread, yet get no wake up.
We need a different flag to indicate that we are actually already done
parsing and the cache can simply be used instead of waiting for a wake
up.
Reviewed-By: ossi
we are so fast now, we can burn a few cycles again ... :}
variable names are mapped as soon as they become known (and not when
using them). that sprinkles map() calls everywhere, but it's faster.
previously, the entire value hash was simply pushed on a stack upon
entering a custom function. the problem with that was that setting the
function's argument already detached (i.e., copied) the entire hash.
so instead store only actually modified values in nested scopes and let
lookups cascade to parent scopes.
improvement: 2% for qt, 15% for creator ...