aboutsummaryrefslogtreecommitdiff
path: root/var.cc
diff options
context:
space:
mode:
Diffstat (limited to 'var.cc')
-rw-r--r--var.cc9
1 files changed, 7 insertions, 2 deletions
diff --git a/var.cc b/var.cc
index 4b67c4f..8f46ff8 100644
--- a/var.cc
+++ b/var.cc
@@ -37,7 +37,7 @@ const char* GetOriginStr(VarOrigin origin) {
return "*** broken origin ***";
}
-Var::Var() {
+Var::Var() : readonly_(false) {
}
Var::~Var() {
@@ -130,10 +130,15 @@ Var* Vars::Lookup(Symbol name) const {
return v;
}
-void Vars::Assign(Symbol name, Var* v) {
+void Vars::Assign(Symbol name, Var* v, bool* readonly) {
+ *readonly = false;
auto p = emplace(name, v);
if (!p.second) {
Var* orig = p.first->second;
+ if (orig->ReadOnly()) {
+ *readonly = true;
+ return;
+ }
if (orig->Origin() == VarOrigin::OVERRIDE ||
orig->Origin() == VarOrigin::ENVIRONMENT_OVERRIDE) {
return;