diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-22 00:09:31 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-26 10:04:08 +0000 |
commit | 046d1c5db44f409c67244bd70b13077cc03219b2 (patch) | |
tree | fae07993dd3c6be0c4b020d20bf49c01c35cb25e /src/qml/compiler/qv4compilercontext.cpp | |
parent | 5faf2e9a693d10e1e689c42deec911083a35ddb2 (diff) |
throw a type error when trying to write to a const variable
This makes them really const. The codegen needs some smaller changes
to ensure that writing to the variable when it's being defined is
allowed.
Change-Id: I781b4bc9c0e0397b9d00cad3daf758a062c17600
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4compilercontext.cpp')
-rw-r--r-- | src/qml/compiler/qv4compilercontext.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/qml/compiler/qv4compilercontext.cpp b/src/qml/compiler/qv4compilercontext.cpp index bd9d19f491..9dfe3be7e0 100644 --- a/src/qml/compiler/qv4compilercontext.cpp +++ b/src/qml/compiler/qv4compilercontext.cpp @@ -125,6 +125,7 @@ Context::ResolvedName Context::resolveName(const QString &name) result.type = m.canEscape ? ResolvedName::Local : ResolvedName::Stack; result.scope = scope; result.index = m.index; + result.isConst = (m.scope == VariableScope::Const); if (c->isStrict && (name == QLatin1String("arguments") || name == QLatin1String("eval"))) result.isArgOrEval = true; return result; @@ -135,11 +136,13 @@ Context::ResolvedName Context::resolveName(const QString &name) result.index = argIdx + c->locals.size(); result.scope = scope; result.type = ResolvedName::Local; + result.isConst = false; return result; } else { result.index = argIdx + sizeof(CallData)/sizeof(Value) - 1; result.scope = 0; result.type = ResolvedName::Stack; + result.isConst = false; return result; } } |