| #!/usr/bin/env bash |
| # Copyright 2017-2020 The Verible Authors. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| |
| usage() { |
| cat <<EOF |
| Converts copy-assignments of yacc/bison-generator parsers into std::move. |
| This is useful if the symbol type is a std::unique_ptr. |
| |
| TODO(b/126607844): This should be unnecessary with Bison 3.3 or later, as |
| it is supposed to handle move-only types natively. |
| |
| usage: $0 < inputfile > outputfile |
| EOF |
| } |
| |
| sed -e '/= yylval;/s|yylval|std::move(&)|' \ |
| -e '/= yyval;/s|yyval|std::move(&)|' \ |
| -e '/(= yyval_default)/s|yyval_default|std::move(&)|' \ |
| -e '/yyval = yyvsp\[1-yylen\];/s|yyval|// &|' |
| |
| # Intended transformations: |
| # *++yyvsp = yylval; -> *++yyvsp = std::move(yylval); |
| # *++yyvsp = yyval; -> *++yyvsp = std::move(yyval); |
| # (= yyval_default) -> (= std::move(yyval_default)) |
| # yyval = yyvsp[1-yylen]; -> deleted (see comment in generated code) |