[erlang-bugs] Parser bug: if missing ", " in list between records, the first is ignored, and no parser warnings are given.
Loïc Hoguin
essen@REDACTED
Sun Nov 9 11:49:41 CET 2014
On 11/09/2014 12:40 PM, Roland Karlsson wrote:
>
> On Sat, 8 Nov 2014 09:02:08 +0100
> Mattias Waldau <mattias.waldau@REDACTED> wrote:
>
>> Yes, I can agree that
>>
>> #rec{a=2}#rec{b=3}
>>
>> is a matter of opinion. However, I completely fail to understand how
>>
>> #rec{a=2}#rec{a=3}
>>
>> can be a matter of opinion, since data in the code is LOST.
>
> Data is not lost.
> The code creates a record rec with the field a being 2.
> Then the code creates a copy of that record where the field now is 3.
> The first record is instance not used though. But, as it has no name
> that usually do not give a warning in Erlang, just like unused variables
> with underscore names do not give a warning.
>
> But ... I can see why it might maybe be a warning there.
> It IS a matter of opinion though IMHO.
When I said it needs a warning earlier in the thread, I meant one you
can set optionally, similar to +warn_export_all. Regardless of the
contents of the record. You have to program in a very specific way to be
annoyed by that kind of warning though.
> You have to be aware of the following code though.
>
> (?MY_DEF_REC)#rec{a=3}
>
> Lets say the macro MY_DEF_REC creates a record rec with some
> special default values. Lets say that one of the fields you have a
> special default value for is a. Do you want a warning?
And that would be one such way... though my heart would skip a beat
seeing code like this.
Most people simply do not write code that ends up as #rec{...}#rec{...},
and could very much benefit from a warning that avoids this error.
Others can simply choose not to enable it.
> /Roland
>
>
>
>
>
>
>
>
>> There should be a warning. My sample below shows how catastropic the missing "," can be.
>>
>> /mattias
>>
>> On 07/11/2014 13:22, Roland Karlsson wrote:
>>> Maybe we shall not discuss this for ever :)
>>> It is a matter of opinion after all.
>>>
>>> But - it is the same IMHO. It is a matter of operators and the need
>>> to set paranthesis when the precedents and right/left association is
>>> not obvious.
>>>
>>> The rec example can be written thus
>>>
>>> (#rec{a=2})#rec{b=3}
>>>
>>> Then everything is clear.
>>>
>>>
>>> /Roland
>>>
>>>
>>>
>>>> I'm not sure how that relates. This expression can be reasonably written
>>>> on purpose. The same cannot be said for #rec{a=2}#rec{b=3}.
>>>>
>>>> On 11/07/2014 02:01 PM, Roland Karlsson wrote:
>>>>> If there is a warning there, then all expressions including operators,
>>>>> e.g. arithmetic, should have warnings. How about 10 + 1 rem 3 + 7. ?
>>>>> Do you know the precedence of + and rem ? What is the result?
>>>>>
>>>>> /Roland
>>>>>
>>>>>
>>>>>
>>>>>> Warnings are ordinary Erlang code which is prone to errors.
>>>>>>
>>>>>> On 11/07/2014 01:46 PM, Roland Karlsson wrote:
>>>>>>> No warning is needed methinks. It is just ordinary Erlang code.
>>>>>>> It is equal to.
>>>>>>>
>>>>>>>> REC1 = #rec{b=3}.
>>>>>>>> REC2 = REC1#rec{a=2}.
>>>>>>> Nothing strange at all.
>>>>>>>
>>>>>>>
>>>>>>> /Roland
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> It is legal but there probably should be a warning for this
>>>>>>>> particular
>>>>>>>> case. I cannot think of a valid reason to do #rec{a=2}#rec{b=3} when
>>>>>>>> you
>>>>>>>> can just do #rec{a=2, b=3}.
>>>>>>>>
>>>>>>>> On 11/07/2014 10:09 AM, Vlad Dumitrescu wrote:
>>>>>>>>> Hi Mattias,
>>>>>>>>>
>>>>>>>>> This isn't a bug. The expression #rec{a=2}#rec{b=3} is legal, and is
>>>>>>>>> the
>>>>>>>>> same thing as (#rec{a=2})#rec{b=3} or #rec{a=2,b=3}. If the keys
>>>>>>>>> overlap, then the last one "wins".
>>>>>>>>>
>>>>>>>>> best regards,
>>>>>>>>> Vlad
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Nov 6, 2014 at 9:21 AM, Mattias Waldau
>>>>>>>>> <mattias.waldau@REDACTED <mailto:mattias.waldau@REDACTED>>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> This is the program
>>>>>>>>>
>>>>>>>>> -module('missing-comma-not-detected').
>>>>>>>>>
>>>>>>>>> -export([data/1]).
>>>>>>>>>
>>>>>>>>> -compile(export_all).
>>>>>>>>>
>>>>>>>>> -record(shcnode, {
>>>>>>>>> nodename :: any(),
>>>>>>>>> y_axis :: number(),
>>>>>>>>> children :: [any()],
>>>>>>>>> article_number :: number(),
>>>>>>>>> attribute_condition :: string()}).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> data(1) ->
>>>>>>>>> [
>>>>>>>>> #shcnode{nodename = start, y_axis = 0, children =
>>>>>>>>> [d1285]},
>>>>>>>>> #shcnode{nodename = d1285, y_axis = 295, children =
>>>>>>>>> [1939,
>>>>>>>>> 1940]}
>>>>>>>>> #shcnode{nodename = 1940, y_axis = 525, children =
>>>>>>>>> [bm3203],
>>>>>>>>> article_number = 14432861},
>>>>>>>>> #shcnode{nodename = 1939, y_axis = 530, children =
>>>>>>>>> [bm3203],
>>>>>>>>> article_number = 14432860},
>>>>>>>>> #shcnode{nodename = bm3203, y_axis = 915, children = []}
>>>>>>>>> ].
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Note the missing "," after [1939, 1940]}
>>>>>>>>>
>>>>>>>>> Only 4 rows are detected
>>>>>>>>>
>>>>>>>>> length('missing-comma-not-detected':data(1)).
>>>>>>>>> 4
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>>
>>>>>>>>> If I add the comma, I get
>>>>>>>>>
>>>>>>>>> length('missing-comma-not-detected':data(1)).
>>>>>>>>> 5
>>>>>>>>>
>>>>>>>>> ----
>>>>>>>>>
>>>>>>>>> I am using Erlang 17.3 on ubuntu.
>>>>>>>>>
>>>>>>>>> erlang:system_info(otp_release).
>>>>>>>>> "17"
>>>>>>>>>
>>>>>>>>> 36> |erl -V
>>>>>>>>> Eshell V6.2 (abort with ^G)
>>>>>>>>> 1> |
>>>>>>>>>
>>>>>>>>> ---
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Mattias
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> erlang-bugs mailing list
>>>>>>>>> erlang-bugs@REDACTED <mailto:erlang-bugs@REDACTED>
>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> erlang-bugs mailing list
>>>>>>>>> erlang-bugs@REDACTED
>>>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>>>
>>>>>>>> --
>>>>>>>> Loïc Hoguin
>>>>>>>> http://ninenines.eu
>>>>>>>> _______________________________________________
>>>>>>>> erlang-bugs mailing list
>>>>>>>> erlang-bugs@REDACTED
>>>>>>>> http://erlang.org/mailman/listinfo/erlang-bugs
>>>>>>>>
>>>>>>>
>>>>>> --
>>>>>> Loïc Hoguin
>>>>>> http://ninenines.eu
>>>>>>
>>>>>
>>>> --
>>>> Loïc Hoguin
>>>> http://ninenines.eu
>>>> _______________________________________________
>>>> erlang-bugs mailing list
>>>> erlang-bugs@REDACTED
>>>> http://erlang.org/mailman/listinfo/erlang-bugs
>>>>
>>>
>>
>> _______________________________________________
>> erlang-bugs mailing list
>> erlang-bugs@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-bugs
>
--
Loïc Hoguin
http://ninenines.eu
More information about the erlang-bugs
mailing list