aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/compiler/qv4compilercontext.cpp
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-06-22 00:09:31 +0200
committerLars Knoll <lars.knoll@qt.io>2018-06-26 10:04:08 +0000
commit046d1c5db44f409c67244bd70b13077cc03219b2 (patch)
treefae07993dd3c6be0c4b020d20bf49c01c35cb25e /src/qml/compiler/qv4compilercontext.cpp
parent5faf2e9a693d10e1e689c42deec911083a35ddb2 (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.cpp3
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;
}
}