summaryrefslogtreecommitdiffstats
path: root/translate.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'translate.cxx')
-rw-r--r--translate.cxx10
1 files changed, 8 insertions, 2 deletions
diff --git a/translate.cxx b/translate.cxx
index 83d6dd93..f3a5b23d 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -581,14 +581,20 @@ struct mapvar
string set (vector<tmpvar> const & indices, tmpvar const & val) const
{
+ string res = "{ int rc = ";
+
// impedance matching: empty strings -> NULL
if (type() == pe_string)
- return (call_prefix("set", indices)
+ res += (call_prefix("set", indices)
+ ", (" + val.qname() + "[0] ? " + val.qname() + " : NULL))");
else if (type() == pe_long)
- return (call_prefix("set", indices) + ", " + val.qname() + ")");
+ res += (call_prefix("set", indices) + ", " + val.qname() + ")");
else
throw semantic_error("setting a value of an unsupported map type");
+
+ res += "; if (unlikely(rc)) c->last_error = \"Array overflow, check MAXMAPENTRIES\"; }";
+
+ return res;
}
string hist() const