Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
R
riscv-gcc-1
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lvzhengyang
riscv-gcc-1
Commits
f4f3b9d3
Commit
f4f3b9d3
authored
13 years ago
by
Ian Lance Taylor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
compiler: Permit a general expression in case x := <-c.
From-SVN: r183802
parent
c2453253
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
9 deletions
+17
-9
gcc/go/gofrontend/parse.cc
+17
-9
No files found.
gcc/go/gofrontend/parse.cc
View file @
f4f3b9d3
...
...
@@ -4640,9 +4640,14 @@ Parse::send_or_recv_stmt(bool* is_send, Expression** channel, Expression** val,
if
(
token
->
is_op
(
OPERATOR_COLONEQ
))
{
// case rv := <-c:
if
(
!
this
->
advance_token
()
->
is_op
(
OPERATOR_CHANOP
))
this
->
advance_token
();
Expression
*
e
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
false
,
NULL
);
Receive_expression
*
re
=
e
->
receive_expression
();
if
(
re
==
NULL
)
{
error_at
(
this
->
location
(),
"expected %<<-%>"
);
if
(
!
e
->
is_error_expression
())
error_at
(
this
->
location
(),
"expected receive expression"
);
return
false
;
}
if
(
recv_var
==
"_"
)
...
...
@@ -4653,8 +4658,7 @@ Parse::send_or_recv_stmt(bool* is_send, Expression** channel, Expression** val,
}
*
is_send
=
false
;
*
varname
=
gogo
->
pack_hidden_name
(
recv_var
,
is_rv_exported
);
this
->
advance_token
();
*
channel
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
true
,
NULL
);
*
channel
=
re
->
channel
();
return
true
;
}
else
if
(
token
->
is_op
(
OPERATOR_COMMA
))
...
...
@@ -4671,9 +4675,15 @@ Parse::send_or_recv_stmt(bool* is_send, Expression** channel, Expression** val,
if
(
token
->
is_op
(
OPERATOR_COLONEQ
))
{
// case rv, rc := <-c:
if
(
!
this
->
advance_token
()
->
is_op
(
OPERATOR_CHANOP
))
this
->
advance_token
();
Expression
*
e
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
false
,
NULL
);
Receive_expression
*
re
=
e
->
receive_expression
();
if
(
re
==
NULL
)
{
error_at
(
this
->
location
(),
"expected %<<-%>"
);
if
(
!
e
->
is_error_expression
())
error_at
(
this
->
location
(),
"expected receive expression"
);
return
false
;
}
if
(
recv_var
==
"_"
&&
recv_closed
==
"_"
)
...
...
@@ -4689,9 +4699,7 @@ Parse::send_or_recv_stmt(bool* is_send, Expression** channel, Expression** val,
if
(
recv_closed
!=
"_"
)
*
closedname
=
gogo
->
pack_hidden_name
(
recv_closed
,
is_rc_exported
);
this
->
advance_token
();
*
channel
=
this
->
expression
(
PRECEDENCE_NORMAL
,
false
,
true
,
NULL
);
*
channel
=
re
->
channel
();
return
true
;
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment