[Bro-Dev] #981: &default record only creates one record
Bro Tracker
bro at tracker.bro.org
Thu May 2 14:54:40 PDT 2013
#981: &default record only creates one record
-----------------------+------------------------
Reporter: dmandelb | Owner:
Type: Problem | Status: new
Priority: Low | Milestone: Bro2.2
Component: Bro | Version: git/master
Resolution: | Keywords:
-----------------------+------------------------
Comment (by jsiwek):
Transferring previous discussion from bro-dev list since I think otherwise
it will get lost/forgotten:
>>Can we change tables so that if &default is a non-constant, the first
>>time one accesses a non-existing index, that slot gets assigned a
>>deep-copy of the &default value?
>
>I'm not a fan of this, as "&default is a non-constant" is a more nuanced
>semantic notion (and could get messy for complicated constructors) than
>the sort that I think language rules should draw upon. Rather, my
thinking
>is that &default should apply to rvalues but not lvalues. I believe (but
>have not confirmed) that there's enough context in the parser to tell
whether
>the access is in an lvalue context or an rvalue context. If so, then the
>former shoud be a run-time error; if the user wants to update a value in
the
>table that's not already there, they need to first put the value in the
table.
There's only really an implicit lvalue context that doesn't extend to sub-
expressions. If it were made explicit and extended to sub-expressions,
I'm still sketchy on what rules would determine whether a table lookup
that results in &default being used is a runtime error or not. The
example provided originally in this ticket is one that would be nice to
have produce a run-time error, but then there's things like:
{{{
global foo: table[count] of string &default="test";
global bar: table[string] of count;
bar["test"] = 7;
bar[foo[0]] = 13;
}}}
That shouldn't result in a runtime error even though the `foo[0]` sub-
expression results in the use of the &default within the context of the
outer lvalue expression.
Would the rule be that we have to propagate the lvalue "context" to the
operand of all unary expressions and only the left operand of binary
expressions?
>>An alternative would be to have the lookup return a copy of the
>>default, but not modify the table.
>
>That makes sense to me in any case. In fact, I'm surprised this isn't
>what already happens.
This is simple to change, are we ok with going this route? i.e. this
solution invalidates the premise of this ticket and #980 regarding whether
&default modifies table membership.
--
Ticket URL: <http://tracker.bro.org/bro/ticket/981#comment:1>
Bro Tracker <http://tracker.bro.org/bro>
Bro Issue Tracker
More information about the bro-dev
mailing list