File 2596-stdlib-Fix-the-Erlang-parser-regarding-unary-operato.patch of Package erlang
From 3ad9c868718fe9931fbc24bd8d03807d0bb1d7a4 Mon Sep 17 00:00:00 2001
From: Hans Bolinder <hasse@erlang.org>
Date: Wed, 29 Jan 2020 15:35:18 +0100
Subject: [PATCH 1/2] stdlib: Fix the Erlang parser regarding unary operators
---
lib/stdlib/src/erl_parse.yrl | 22 +++++++++++++---------
lib/stdlib/test/erl_eval_SUITE.erl | 18 +++++++++++++++---
2 files changed, 28 insertions(+), 12 deletions(-)
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index 4ad94f2507..59c10f1dd2 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -27,10 +27,10 @@ attribute attr_val
function function_clauses function_clause
clause_args clause_guard clause_body
expr expr_100 expr_150 expr_160 expr_200 expr_300 expr_400 expr_500
-expr_600 expr_700 expr_800
+expr_600 expr_650 expr_700 expr_800
expr_max
pat_expr pat_expr_200 pat_expr_300 pat_expr_400 pat_expr_500
-pat_expr_600 pat_expr_700 pat_expr_800
+pat_expr_600 pat_expr_650 pat_expr_700 pat_expr_800
pat_expr_max map_pat_expr record_pat_expr
pat_argument_list pat_exprs
list tail
@@ -251,10 +251,12 @@ expr_500 -> expr_500 mult_op expr_600 :
?mkop2('$1', '$2', '$3').
expr_500 -> expr_600 : '$1'.
-expr_600 -> prefix_op expr_700 :
+expr_600 -> prefix_op expr_600 :
?mkop1('$1', '$2').
-expr_600 -> map_expr : '$1'.
-expr_600 -> expr_700 : '$1'.
+expr_600 -> expr_650 : '$1'.
+
+expr_650 -> map_expr : '$1'.
+expr_650 -> expr_700 : '$1'.
expr_700 -> function_call : '$1'.
expr_700 -> record_expr : '$1'.
@@ -298,10 +300,12 @@ pat_expr_500 -> pat_expr_500 mult_op pat_expr_600 :
?mkop2('$1', '$2', '$3').
pat_expr_500 -> pat_expr_600 : '$1'.
-pat_expr_600 -> prefix_op pat_expr_700 :
+pat_expr_600 -> prefix_op pat_expr_600 :
?mkop1('$1', '$2').
-pat_expr_600 -> map_pat_expr : '$1'.
-pat_expr_600 -> pat_expr_700 : '$1'.
+pat_expr_600 -> pat_expr_650 : '$1'.
+
+pat_expr_650 -> map_pat_expr : '$1'.
+pat_expr_650 -> pat_expr_700 : '$1'.
pat_expr_700 -> record_pat_expr : '$1'.
pat_expr_700 -> pat_expr_800 : '$1'.
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 2436c8091c..c7556f6f7e 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1998-2018. All Rights Reserved.
+%% Copyright Ericsson AB 1998-2020. All Rights Reserved.
%%
%% Licensed under the Apache License, Version 2.0 (the "License");
%% you may not use this file except in compliance with the License.
@@ -49,6 +49,7 @@
eep37/1,
eep43/1,
otp_15035/1,
+ otp_16439/1,
otp_16545/1]).
%%
@@ -89,7 +90,7 @@ all() ->
otp_6539, otp_6543, otp_6787, otp_6977, otp_7550,
otp_8133, otp_10622, otp_13228, otp_14826,
funs, try_catch, eval_expr_5, zero_width,
- eep37, eep43, otp_15035, otp_16545].
+ eep37, eep43, otp_15035, otp_16439, otp_16545].
groups() ->
[].
@@ -1657,6 +1658,17 @@ otp_15035(Config) when is_list(Config) ->
{e, d}),
ok.
+otp_16439(Config) when is_list(Config) ->
+ check(fun() -> + - 5 end, "+ - 5.", -5),
+ check(fun() -> - + - 5 end, "- + - 5.", 5),
+ check(fun() -> case 7 of - - 7 -> seven end end,
+ "case 7 of - - 7 -> seven end.", seven),
+
+ {ok,Ts,_} = erl_scan:string("- #{}. "),
+ {ok,[{op,1,'-',{map,1,[]}}]} = erl_parse:parse_exprs(Ts),
+
+ ok.
+
otp_16545(Config) when is_list(Config) ->
case eval_string("<<$W/utf16-native>> = <<$W/utf16-native>>.") of
<<$W/utf16-native>> -> ok
--
2.16.4