mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-08-14 21:25:14 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f520e150eb | ||
|
|
75db37c564 | ||
|
|
886b503e4b | ||
|
|
a2f0444c6e | ||
|
|
66100b640f | ||
|
|
de5207244b | ||
|
|
cae8132690 | ||
|
|
a1a847bfb5 | ||
|
|
3ac95de01a | ||
|
|
da7af36a13 | ||
|
|
3f25104caf | ||
|
|
6b1933d992 | ||
|
|
5163803a63 | ||
|
|
fee7c78a83 | ||
|
|
8fc544b03c | ||
|
|
d62d5c4b33 | ||
|
|
ab3eaff7c4 | ||
|
|
85e83ea968 | ||
|
|
0269c6fb03 | ||
|
|
23e536af49 | ||
|
|
cd56929097 | ||
|
|
7aa38561f7 | ||
|
|
22a00cfbf2 | ||
|
|
8c06cb9130 | ||
|
|
b5233ba323 | ||
|
|
013720f0e7 | ||
|
|
365b4d95a4 | ||
|
|
5bb44cca81 | ||
|
|
15f9f8c853 | ||
|
|
04676a5085 | ||
|
|
cf44351dd7 | ||
|
|
614e0bbe23 |
+1
-1
@@ -1 +1 @@
|
|||||||
3.3.2
|
3.3.91
|
||||||
|
|||||||
+101
-27
@@ -11,8 +11,56 @@ env:
|
|||||||
# See https://github.com/nemequ/icc-travis.
|
# See https://github.com/nemequ/icc-travis.
|
||||||
secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE=
|
secure: B3manbbi0anCAGDJTdAa9TlodzRHeiYD87FKmFzS877dPm8Cm0BDvtUhKBUpBvP8+nbHOWFGrgDmLugSZjTGU+mAxtuQpamUFHvinu0BIk3qtjlqouwvbtIqUu8iiZ3Uqu+xKeAANKRy0YVZGLlEb9F3N119tJ/Fxp1p9bXL1qph+CZ25OFbUgZ2s4F+/AyHMUxJlNXKFe3Qean65hC6edhU3zoaKzr/g/wtbhRmcyWbkOa1dJqzr2yKotcPvrnApGhDzgMKFtohg/t7xfMADDVv6sGS5XNpt25Z+MUCmLg4Z9eD7u109jvRV1eu/jgVafqsthWEhXbuMiFgFhKBKGCNZ0dACIfKZSkFZI6FdM7ovJ6aNhSlxZ2169Ybd22rN1UTHeCQWySPcVVOg5taLVpqe+E8Xhnv4hBO5NrzElWwCMLxIdPUSwVStYvtDr8ZytHWzfot50vSnFKIFpTOr9hP4+AJMVmmqJfaJo2MLBft/q2xkztrMv3lQSj3m4+ma9kPDwXIu9uCutjlnhc00jNx9qegi5VfpAjxcG1R+pX4T20az6ByHk/7LPQsANkT31RJq/jAeD9LEuMOy8miha83q4QuvbFaqPK3PY0el/O1LZaXqLsV2aQ0uqH8YX0l4r5NzHdhb+3lYgvpMBO5ytr/EWJiEyNYV518050IUDE=
|
||||||
|
|
||||||
matrix:
|
# Run in two steps:
|
||||||
|
# 1. Build the tarball
|
||||||
|
# On a modern distro, with all the needed dependencies, including the whole git history.
|
||||||
|
# 2. Check it on various environments.
|
||||||
|
# Less dependencies, and little git content (we would like to have none, but it's not
|
||||||
|
# an option on Travis).
|
||||||
|
stages:
|
||||||
|
- compile
|
||||||
|
- test
|
||||||
|
|
||||||
|
# matrix.include and jobs.include are aliases (https://docs.travis-ci.com/user/conditional-builds-stages-jobs/).
|
||||||
|
jobs:
|
||||||
include:
|
include:
|
||||||
|
- stage: "compile"
|
||||||
|
dist: xenial
|
||||||
|
script:
|
||||||
|
- sudo apt-get update -qq
|
||||||
|
- sudo apt-get install -qq autoconf automake autopoint flex gettext graphviz help2man m4 texinfo
|
||||||
|
- autoconf --version
|
||||||
|
- automake --version
|
||||||
|
- autopoint --version
|
||||||
|
- dot -V
|
||||||
|
- gettext --version
|
||||||
|
- help2man --version
|
||||||
|
- makeinfo --version
|
||||||
|
- m4 --version
|
||||||
|
- git tag -l
|
||||||
|
# For some reasons, sometimes the checkout does not have any tags,
|
||||||
|
# so `git describe` fails, so bootstrap fails.
|
||||||
|
- git describe || git tag v3.0 -m "Fake version 3.0."
|
||||||
|
- git describe
|
||||||
|
|
||||||
|
# Appears to be needed for the following command (https://github.com/AppImage/AppImageKit/issues/511).
|
||||||
|
- git submodule sync
|
||||||
|
# Travis makes a shallow clone, but we need it in full to build the ChangeLog and apply the fixes in git-log-fix.
|
||||||
|
- git fetch --unshallow || true
|
||||||
|
|
||||||
|
- ./bootstrap
|
||||||
|
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
|
||||||
|
- ./configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
|
||||||
|
- make -j2
|
||||||
|
- make -j2 dist
|
||||||
|
- dist=$(echo bison*.xz)
|
||||||
|
# Unfortunately we cannot deterministically know the name of the tarball without the full
|
||||||
|
# git history (because git describe --abbrev=4 may use more than 4 characters if there are
|
||||||
|
# conflicts). Besides, one day we would like not to depend on the repository at all in the
|
||||||
|
# 'test' jobs. So also expose this tarball on a name that only depends on the Travis build
|
||||||
|
# number.
|
||||||
|
- sftp [email protected] <<< "put $dist"$'\n'"ln -s $dist bison-$TRAVIS_BUILD_NUMBER.tar.xz"
|
||||||
|
|
||||||
## ------- ##
|
## ------- ##
|
||||||
## First. ##
|
## First. ##
|
||||||
## ------- ##
|
## ------- ##
|
||||||
@@ -21,6 +69,7 @@ matrix:
|
|||||||
# errors asap.
|
# errors asap.
|
||||||
|
|
||||||
- name: "GCC 7 -O3"
|
- name: "GCC 7 -O3"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -33,8 +82,9 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'"
|
- MATRIX_EVAL="CC=gcc-7 && CXX=g++-7 && CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'"
|
||||||
|
|
||||||
# ASAN is time consuming, and we timeout the 50min granted by
|
# ASAN is time consuming, and we timeout the 50min granted by
|
||||||
# Travis if we run all the tests in on go. Run in two parts.
|
# Travis if we run all the tests in one go. Run in two parts.
|
||||||
- name: "Clang 7 libc++ and ASAN part 1"
|
- name: "Clang 7 libc++ and ASAN part 1"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -51,6 +101,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="PART=1 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
|
- MATRIX_EVAL="PART=1 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
|
||||||
|
|
||||||
- name: "Clang 7 libc++ and ASAN part 2"
|
- name: "Clang 7 libc++ and ASAN part 2"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -67,6 +118,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="PART=2 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
|
- MATRIX_EVAL="PART=2 CC='clang-7 -fsanitize=address' CXX='clang++-7 -fsanitize=address -stdlib=libc++'"
|
||||||
|
|
||||||
- name: "ICC"
|
- name: "ICC"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
env:
|
env:
|
||||||
@@ -100,6 +152,7 @@ matrix:
|
|||||||
# - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'"
|
# - MATRIX_EVAL="CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer' CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'"
|
||||||
|
|
||||||
- name: "GCC 6"
|
- name: "GCC 6"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -112,6 +165,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
|
- MATRIX_EVAL="CC=gcc-6 && CXX=g++-6"
|
||||||
|
|
||||||
- name: "GCC 5"
|
- name: "GCC 5"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -124,6 +178,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
|
- MATRIX_EVAL="CC=gcc-5 && CXX=g++-5"
|
||||||
|
|
||||||
- name: "GCC 4.9"
|
- name: "GCC 4.9"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -136,6 +191,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
- MATRIX_EVAL="CC=gcc-4.9 && CXX=g++-4.9"
|
||||||
|
|
||||||
- name: "GCC 4.8"
|
- name: "GCC 4.8"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -148,6 +204,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8"
|
- MATRIX_EVAL="CC=gcc-4.8 && CXX=g++-4.8"
|
||||||
|
|
||||||
- name: "GCC 4.7"
|
- name: "GCC 4.7"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -160,6 +217,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7"
|
- MATRIX_EVAL="CC=gcc-4.7 && CXX=g++-4.7"
|
||||||
|
|
||||||
- name: "GCC 4.6"
|
- name: "GCC 4.6"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -176,6 +234,7 @@ matrix:
|
|||||||
## ------- ##
|
## ------- ##
|
||||||
|
|
||||||
- name: "Clang 6 -O3 and libc++"
|
- name: "Clang 6 -O3 and libc++"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -191,6 +250,7 @@ matrix:
|
|||||||
- CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
|
- CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
|
||||||
|
|
||||||
- name: "Clang 5"
|
- name: "Clang 5"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -204,6 +264,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'"
|
- MATRIX_EVAL="CC='clang-5.0' CXX='clang++-5.0'"
|
||||||
|
|
||||||
- name: "Clang 4"
|
- name: "Clang 4"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -216,6 +277,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
|
- MATRIX_EVAL="CC=clang-4.0 && CXX=clang++-4.0"
|
||||||
|
|
||||||
- name: "Clang 3.9"
|
- name: "Clang 3.9"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -228,6 +290,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
|
- MATRIX_EVAL="CC=clang-3.9 && CXX=clang++-3.9"
|
||||||
|
|
||||||
- name: "Clang 3.8"
|
- name: "Clang 3.8"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -241,6 +304,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
|
- MATRIX_EVAL="CC=clang-3.8 && CXX=clang++-3.8"
|
||||||
|
|
||||||
- name: "CLang 3.7"
|
- name: "CLang 3.7"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -254,6 +318,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
|
- MATRIX_EVAL="CC=clang-3.7 && CXX=clang++-3.7"
|
||||||
|
|
||||||
- name: "Clang 3.6"
|
- name: "Clang 3.6"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -267,6 +332,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
|
- MATRIX_EVAL="CC=clang-3.6 && CXX=clang++-3.6"
|
||||||
|
|
||||||
- name: "Clang 3.5"
|
- name: "Clang 3.5"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
dist: xenial
|
dist: xenial
|
||||||
addons:
|
addons:
|
||||||
@@ -280,6 +346,7 @@ matrix:
|
|||||||
- MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5"
|
- MATRIX_EVAL="CC=clang-3.5 && CXX=clang++-3.5"
|
||||||
|
|
||||||
- name: "Clang 3.4"
|
- name: "Clang 3.4"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
# Not available on Xenial.
|
# Not available on Xenial.
|
||||||
dist: trusty
|
dist: trusty
|
||||||
@@ -290,9 +357,10 @@ matrix:
|
|||||||
env:
|
env:
|
||||||
# No versioned name installed, but beware that Travis installs
|
# No versioned name installed, but beware that Travis installs
|
||||||
# a more modern clang earlier in the default PATH.
|
# a more modern clang earlier in the default PATH.
|
||||||
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++ && GETTEXT_VERSION=0.18.3'
|
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
|
||||||
|
|
||||||
- name: "Clang 3.3"
|
- name: "Clang 3.3"
|
||||||
|
stage: test
|
||||||
os: linux
|
os: linux
|
||||||
# Not available on Xenial.
|
# Not available on Xenial.
|
||||||
dist: trusty
|
dist: trusty
|
||||||
@@ -302,50 +370,56 @@ matrix:
|
|||||||
- clang-3.3
|
- clang-3.3
|
||||||
env:
|
env:
|
||||||
# See comment for 3.4.
|
# See comment for 3.4.
|
||||||
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++ && GETTEXT_VERSION=0.18.3'
|
- MATRIX_EVAL='CC=/usr/bin/clang && CXX=/usr/bin/clang++'
|
||||||
|
|
||||||
|
## From https://docs.gitlab.com/ce/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor.
|
||||||
|
## Applies to Travis too. Applied to all the 'script's (of all the jobs).
|
||||||
|
before_script:
|
||||||
|
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
|
||||||
|
- eval "$(ssh-agent -s)"
|
||||||
|
# $SSH_PRIVATE_KEY is multiline. Use $'...' to register its value: $'-----BEGIN OPENSSH PRIVATE KEY-----\nXXXXX...\n...==\n-----END OPENSSH PRIVATE KEY-----'.
|
||||||
|
- echo "$SSH_PRIVATE_KEY" >/tmp/key.id_rsa
|
||||||
|
- chmod 600 /tmp/key.id_rsa
|
||||||
|
- ssh-add /tmp/key.id_rsa </dev/null
|
||||||
|
- mkdir -p ~/.ssh
|
||||||
|
- chmod 700 ~/.ssh
|
||||||
|
- echo '|1|bpc51UGxoDZjCPiwRlCStW32trI=|rfh6mLoLZv/vAvOVrpZXI1hTLxg= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBIR+ckMoJTNXHvAQLHWSfrRnrNJGW2ZR6kr5pBVDGCkz1v1RcQ5rleq0NAt9kS3v4hgnuLiEVnK7KDRzcEH3ikc=' >>~/.ssh/known_hosts
|
||||||
|
- chmod 600 ~/.ssh/known_hosts
|
||||||
|
|
||||||
before_install:
|
# Applies only to the jobs that don't have a 'script', i.e., applies to all the 'test' jobs, but not the 'compile' one.
|
||||||
|
script:
|
||||||
- eval "$MATRIX_EVAL"
|
- eval "$MATRIX_EVAL"
|
||||||
- env
|
# Beware not too leak $SSH_PRIVATE_KEY.
|
||||||
|
# - env
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
- sudo apt-get install -qq autoconf automake autopoint doxygen flex gettext graphviz help2man m4 texinfo
|
- sudo apt-get install -qq doxygen flex m4
|
||||||
|
# Install and activate ICC.
|
||||||
- if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi
|
- if [[ $CC == "icc" ]]; then build-aux/install-icc.sh; fi
|
||||||
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
|
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
|
||||||
# Install and activate dmd
|
# Install and activate dmd.
|
||||||
- mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
|
- mkdir -p ~/dlang && wget https://dlang.org/install.sh -O ~/dlang/install.sh
|
||||||
- source $(source ~/dlang/install.sh dmd -a)
|
- source $(source ~/dlang/install.sh dmd -a)
|
||||||
- autoconf --version
|
|
||||||
- automake --version
|
|
||||||
- autopoint --version
|
|
||||||
- $CC --version
|
- $CC --version
|
||||||
- $CXX --version
|
- $CXX --version
|
||||||
- dmd --version
|
- dmd --version
|
||||||
- doxygen --version
|
- doxygen --version
|
||||||
- flex --version
|
- flex --version
|
||||||
- gettext --version
|
|
||||||
- dot -V
|
|
||||||
- help2man --version
|
|
||||||
- ld --version
|
- ld --version
|
||||||
- m4 --version
|
- m4 --version
|
||||||
- makeinfo --version
|
|
||||||
|
|
||||||
script:
|
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
|
||||||
- git tag -l
|
|
||||||
# For some reasons, sometimes the checkout does not have any tags,
|
|
||||||
# so `git describe` fails, so bootstrap fails.
|
|
||||||
- git describe || git tag v3.0 -m "Fake version 3.0."
|
|
||||||
- git describe
|
|
||||||
# Unset this variable, otherwise, Java programs' stderr is cluttered
|
# Unset this variable, otherwise, Java programs' stderr is cluttered
|
||||||
# with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
|
# with `Picked up _JAVA_OPTIONS: -Xmx2048m -Xms512m`, which makes
|
||||||
# the test suite fail.
|
# the test suite fail.
|
||||||
- unset _JAVA_OPTIONS
|
- unset _JAVA_OPTIONS
|
||||||
- if [[ $GETTEXT_VERSION ]]; then sed -i -re "s/(AM_GNU_GETTEXT_VERSION).*/\1([$GETTEXT_VERSION])/" configure.ac; fi
|
- sftp [email protected]:bison-$TRAVIS_BUILD_NUMBER.tar.xz
|
||||||
- ./bootstrap
|
- tar xf bison-$TRAVIS_BUILD_NUMBER.tar.xz
|
||||||
# For some reason, gnulib-po/Makefile.in.in is about Gettext 0.19, so it will break here. Override it.
|
- dir=$(tar tf bison-$TRAVIS_BUILD_NUMBER.tar.xz | sed 1q)
|
||||||
- if [[ $GETTEXT_VERSION ]]; then autopoint --force; fi
|
- cd $dir
|
||||||
- if [[ -f ~/.bashrc ]]; then source ~/.bashrc; fi
|
- mkdir _build
|
||||||
- ./configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
|
- cd _build
|
||||||
|
- ../configure --enable-gcc-warnings CC="$CC" CXX="$CXX" $CONFIGUREFLAGS || { cat config.log && false; }
|
||||||
- make -j2 $MAKE_ARGS
|
- make -j2 $MAKE_ARGS
|
||||||
- if test ${PART-1} = 1; then make check VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
|
- if test ${PART-1} = 1; then make check VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat test-suite.log && cat tests/testsuite.log && false; }; fi
|
||||||
- if test ${PART-1} = 1; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
|
- if test ${PART-1} = 1; then make maintainer-check-posix VERBOSE=1 TESTSUITEFLAGS=-j2 || { cat tests/testsuite.log && false; }; fi
|
||||||
|
|||||||
@@ -1,15 +1,22 @@
|
|||||||
GNU Bison NEWS
|
GNU Bison NEWS
|
||||||
|
|
||||||
* Noteworthy changes in release 3.3.90 (2019-04-28) [beta]
|
* Noteworthy changes in release 3.4 (2019-05-19) [stable]
|
||||||
|
|
||||||
|
** Deprecated features
|
||||||
|
|
||||||
|
The %pure-parser directive is deprecated in favor of '%define api.pure'
|
||||||
|
since Bison 2.3b (2008-05-27), but no warning was issued; there is one
|
||||||
|
now. Note that since Bison 2.7 you are strongly encouraged to use
|
||||||
|
'%define api.pure full' instead of '%define api.pure'.
|
||||||
|
|
||||||
** New features
|
** New features
|
||||||
|
|
||||||
*** Colored diagnostics
|
*** Colored diagnostics
|
||||||
|
|
||||||
As an experimental feature, Bison now generates colored diagnostics,
|
As an experimental feature, diagnostics are now colored, controlled by the
|
||||||
controlled by the new options --color and --style.
|
new options --color and --style.
|
||||||
|
|
||||||
Install the libtextstyle library before configuring Bison to use them.
|
To use them, install the libtextstyle library before configuring Bison.
|
||||||
It is available from
|
It is available from
|
||||||
|
|
||||||
https://alpha.gnu.org/gnu/gettext/
|
https://alpha.gnu.org/gnu/gettext/
|
||||||
@@ -25,12 +32,13 @@ GNU Bison NEWS
|
|||||||
|
|
||||||
To customize the styles, create a CSS file similar to
|
To customize the styles, create a CSS file similar to
|
||||||
|
|
||||||
/* black-and-white.css */
|
/* bison-bw.css */
|
||||||
.warning { }
|
.warning { }
|
||||||
.error { font-weight: 800; text-decoration: underline; }
|
.error { font-weight: 800; text-decoration: underline; }
|
||||||
.note { }
|
.note { }
|
||||||
|
|
||||||
then invoke bison with --style=black-and-white.css.
|
then invoke bison with --style=bison-bw.css, or set the BISON_STYLE
|
||||||
|
environment variable to "bison-bw.css".
|
||||||
|
|
||||||
*** Disabling output
|
*** Disabling output
|
||||||
|
|
||||||
@@ -3614,7 +3622,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
LocalWords: redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi
|
LocalWords: redeclaration sval fcaret reentrant XSLT xsl Wmaybe yyvsp Tedi
|
||||||
LocalWords: pragmas noreturn untyped Rozenman unexpanded Wojciech Polak
|
LocalWords: pragmas noreturn untyped Rozenman unexpanded Wojciech Polak
|
||||||
LocalWords: Alexandre MERCHANTABILITY yytype emplace ptr automove lvalues
|
LocalWords: Alexandre MERCHANTABILITY yytype emplace ptr automove lvalues
|
||||||
LocalWords: nonterminal yy args Pragma dereference yyformat rhs docdir
|
LocalWords: nonterminal yy args Pragma dereference yyformat rhs docdir bw
|
||||||
LocalWords: Redeclarations rpcalc Autoconf YFLAGS Makefiles PROG DECL num
|
LocalWords: Redeclarations rpcalc Autoconf YFLAGS Makefiles PROG DECL num
|
||||||
LocalWords: Heimbigner AST src ast Makefile srcdir MinGW xxlex XXSTYPE
|
LocalWords: Heimbigner AST src ast Makefile srcdir MinGW xxlex XXSTYPE
|
||||||
LocalWords: XXLTYPE strictfp IDEs ffixit fdiagnostics parseable fixits
|
LocalWords: XXLTYPE strictfp IDEs ffixit fdiagnostics parseable fixits
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ Bruce Lilly [email protected]
|
|||||||
Bruno Haible [email protected]
|
Bruno Haible [email protected]
|
||||||
Charles-Henri de Boysson [email protected]
|
Charles-Henri de Boysson [email protected]
|
||||||
Christian Burger [email protected]
|
Christian Burger [email protected]
|
||||||
|
Clément Démoulins [email protected]
|
||||||
Colin Daley [email protected]
|
Colin Daley [email protected]
|
||||||
Cris Bailiff [email protected]
|
Cris Bailiff [email protected]
|
||||||
Cris van Pelt [email protected]
|
Cris van Pelt [email protected]
|
||||||
@@ -66,6 +67,7 @@ Frank Heckenbach [email protected]
|
|||||||
Frans Englich [email protected]
|
Frans Englich [email protected]
|
||||||
Gabriel Rassoul [email protected]
|
Gabriel Rassoul [email protected]
|
||||||
Gary L Peskin [email protected]
|
Gary L Peskin [email protected]
|
||||||
|
Gavin Smith [email protected]
|
||||||
Georg Sauthoff [email protected]
|
Georg Sauthoff [email protected]
|
||||||
George Neuner [email protected]
|
George Neuner [email protected]
|
||||||
Gilles Espinasse [email protected]
|
Gilles Espinasse [email protected]
|
||||||
@@ -128,6 +130,7 @@ Oliver Mangold [email protected]
|
|||||||
Paolo Bonzini [email protected]
|
Paolo Bonzini [email protected]
|
||||||
Paolo Simone Gasparello [email protected]
|
Paolo Simone Gasparello [email protected]
|
||||||
Pascal Bart [email protected]
|
Pascal Bart [email protected]
|
||||||
|
Patrice Dumas [email protected]
|
||||||
Paul Eggert [email protected]
|
Paul Eggert [email protected]
|
||||||
Paul Hilfinger [email protected]
|
Paul Hilfinger [email protected]
|
||||||
Per Allansson [email protected]
|
Per Allansson [email protected]
|
||||||
@@ -176,6 +179,7 @@ Tom Tromey [email protected]
|
|||||||
Tommy Nordgren [email protected]
|
Tommy Nordgren [email protected]
|
||||||
Troy A. Johnson [email protected]
|
Troy A. Johnson [email protected]
|
||||||
Tys Lefering [email protected]
|
Tys Lefering [email protected]
|
||||||
|
Uxio Prego [email protected]
|
||||||
Valentin Tolmer [email protected]
|
Valentin Tolmer [email protected]
|
||||||
wcventure [email protected]
|
wcventure [email protected]
|
||||||
Victor Khomenko [email protected]
|
Victor Khomenko [email protected]
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
/* Default styling rules for Bison when doing terminal output.
|
||||||
|
Copyright (C) 2019 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
/* This is an experimental feature. The class names may change in the
|
||||||
|
future. */
|
||||||
|
|
||||||
|
.warning { color: purple; }
|
||||||
|
.error { color: red; }
|
||||||
|
.note { color: cyan; }
|
||||||
|
/* Semantic values in Bison's own parser traces. */
|
||||||
|
.value { color: green; }
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
/* CSS style for Bison's diagnostics.
|
|
||||||
|
|
||||||
This is an experimental feature. The class names may change in the
|
|
||||||
future. */
|
|
||||||
|
|
||||||
.warning { color: purple; }
|
|
||||||
.error { color: red; }
|
|
||||||
.note { color: cyan; }
|
|
||||||
/* Semantic values in Bison's parser traces. */
|
|
||||||
.value { color: green; }
|
|
||||||
+1
-1
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
dist_pkgdata_DATA = \
|
dist_pkgdata_DATA = \
|
||||||
data/README.md \
|
data/README.md \
|
||||||
data/diagnostics.css
|
data/bison-default.css
|
||||||
|
|
||||||
skeletonsdir = $(pkgdatadir)/skeletons
|
skeletonsdir = $(pkgdatadir)/skeletons
|
||||||
dist_skeletons_DATA = \
|
dist_skeletons_DATA = \
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ m4_define([b4_shared_declarations],
|
|||||||
]b4_token_constructor_define[
|
]b4_token_constructor_define[
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// This class is not copyable.
|
/// This class is not copiable.
|
||||||
]b4_parser_class[ (const ]b4_parser_class[&);
|
]b4_parser_class[ (const ]b4_parser_class[&);
|
||||||
]b4_parser_class[& operator= (const ]b4_parser_class[&);
|
]b4_parser_class[& operator= (const ]b4_parser_class[&);
|
||||||
|
|
||||||
|
|||||||
+122
-74
@@ -7,6 +7,51 @@
|
|||||||
@settitle Bison @value{VERSION}
|
@settitle Bison @value{VERSION}
|
||||||
@setchapternewpage odd
|
@setchapternewpage odd
|
||||||
|
|
||||||
|
@tex
|
||||||
|
\gdef\rgbWarning{0.50 0 0.50}
|
||||||
|
\gdef\colorWarning{%
|
||||||
|
\setcolor{\rgbWarning}%
|
||||||
|
}
|
||||||
|
\gdef\rgbError{0.80 0 0}
|
||||||
|
\gdef\colorError{%
|
||||||
|
\setcolor{\rgbError}%
|
||||||
|
}
|
||||||
|
\gdef\rgbNotice{0 0 0.80}
|
||||||
|
\gdef\colorNotice{%
|
||||||
|
\setcolor{\rgbNotice}%
|
||||||
|
}
|
||||||
|
\gdef\colorOff{%
|
||||||
|
\setcolor{\maincolor}%
|
||||||
|
}
|
||||||
|
@end tex
|
||||||
|
|
||||||
|
@ifnottex
|
||||||
|
@macro colorWarning
|
||||||
|
@inlineraw{html, <b style="color:darkviolet">}
|
||||||
|
@end macro
|
||||||
|
@macro colorError
|
||||||
|
@inlineraw{html, <b style="color:red">}
|
||||||
|
@end macro
|
||||||
|
@macro colorNotice
|
||||||
|
@inlineraw{html, <b style="color:darkcyan">}
|
||||||
|
@end macro
|
||||||
|
@macro colorOff
|
||||||
|
@inlineraw{html, </b>}
|
||||||
|
@end macro
|
||||||
|
@end ifnottex
|
||||||
|
|
||||||
|
@macro dwarning{text}
|
||||||
|
@colorWarning{}\text\@colorOff{}
|
||||||
|
@end macro
|
||||||
|
|
||||||
|
@macro derror{text}
|
||||||
|
@colorError{}\text\@colorOff{}
|
||||||
|
@end macro
|
||||||
|
|
||||||
|
@macro dnotice{text}
|
||||||
|
@colorNotice{}\text\@colorOff{}
|
||||||
|
@end macro
|
||||||
|
|
||||||
@finalout
|
@finalout
|
||||||
|
|
||||||
@c SMALL BOOK version
|
@c SMALL BOOK version
|
||||||
@@ -4280,24 +4325,24 @@ $@@3: %empty @{ d(); @};
|
|||||||
exp: @@1 "b" @@2 $@@3 "e" @{ f = $1; @}
|
exp: @@1 "b" @@2 $@@3 "e" @{ f = $1; @}
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
There are probably two errors in the above example: the first midrule
|
There are probably two errors in the above example: the first midrule action
|
||||||
action does not generate a value (it does not use @code{$$} although the
|
does not generate a value (it does not use @code{$$} although the final
|
||||||
final action uses it), and the value of the second one is not used (the
|
action uses it), and the value of the second one is not used (the final
|
||||||
final action does not use @code{$3}). Bison reports these errors when the
|
action does not use @code{$3}). Bison reports these errors when the
|
||||||
@code{midrule-value} warnings are enabled (@pxref{Invocation, ,Invoking
|
@code{midrule-value} warnings are enabled (@pxref{Invocation, ,Invoking
|
||||||
Bison}):
|
Bison}):
|
||||||
|
|
||||||
@example
|
@example
|
||||||
$ @kbd{bison -Wmidrule-value mid.y}
|
$ @kbd{bison -Wmidrule-value mid.y}
|
||||||
@group
|
@group
|
||||||
mid.y:2.6-13: warning: unset value: $$
|
mid.y:2.6-13: @dwarning{warning}: unset value: $$
|
||||||
2 | exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
|
2 | exp: @dwarning{@{ a(); @}} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
|
||||||
| ^~~~~~~~
|
| @dwarning{^~~~~~~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
mid.y:2.19-31: warning: unused value: $3
|
mid.y:2.19-31: @dwarning{warning}: unused value: $3
|
||||||
2 | exp: @{ a(); @} "b" @{ $$ = c(); @} @{ d(); @} "e" @{ f = $1; @};
|
2 | exp: @{ a(); @} "b" @dwarning{@{ $$ = c(); @}} @{ d(); @} "e" @{ f = $1; @};
|
||||||
| ^~~~~~~~~~~~~
|
| @dwarning{^~~~~~~~~~~~~}
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -4305,9 +4350,9 @@ mid.y:2.19-31: warning: unused value: $3
|
|||||||
|
|
||||||
It is sometimes useful to turn midrule actions into regular actions, e.g.,
|
It is sometimes useful to turn midrule actions into regular actions, e.g.,
|
||||||
to factor them, or to escape from their limitations. For instance, as an
|
to factor them, or to escape from their limitations. For instance, as an
|
||||||
alternative to @emph{typed} midrule action, you may bury the midrule
|
alternative to @emph{typed} midrule action, you may bury the midrule action
|
||||||
action inside a nonterminal symbol and to declare a printer and a destructor
|
inside a nonterminal symbol and to declare a printer and a destructor for
|
||||||
for that symbol:
|
that symbol:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
@group
|
@group
|
||||||
@@ -9342,12 +9387,12 @@ useless: STR;
|
|||||||
@command{bison} reports:
|
@command{bison} reports:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
calc.y: warning: 1 nonterminal useless in grammar [-Wother]
|
calc.y: @dwarning{warning}: 1 nonterminal useless in grammar [@dwarning{-Wother}]
|
||||||
calc.y: warning: 1 rule useless in grammar [-Wother]
|
calc.y: @dwarning{warning}: 1 rule useless in grammar [@dwarning{-Wother}]
|
||||||
calc.y:19.1-7: warning: nonterminal useless in grammar: useless [-Wother]
|
calc.y:19.1-7: @dwarning{warning}: nonterminal useless in grammar: useless [@dwarning{-Wother}]
|
||||||
19 | useless: STR;
|
19 | @dwarning{useless: STR;}
|
||||||
| ^~~~~~~
|
| @dwarning{^~~~~~~}
|
||||||
calc.y: warning: 7 shift/reduce conflicts [-Wconflicts-sr]
|
calc.y: @dwarning{warning}: 7 shift/reduce conflicts [@dwarning{-Wconflicts-sr}]
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
When given @option{--report=state}, in addition to @file{calc.tab.c}, it
|
When given @option{--report=state}, in addition to @file{calc.tab.c}, it
|
||||||
@@ -9764,7 +9809,7 @@ Parser}, for a detailed analysis of the textual report.
|
|||||||
|
|
||||||
@ifnotinfo
|
@ifnotinfo
|
||||||
@float Figure,fig:graph
|
@float Figure,fig:graph
|
||||||
@image{figs/example, 430pt}
|
@center @image{figs/example, 430pt,,,.svg}
|
||||||
@caption{A graphical rendering of the parser.}
|
@caption{A graphical rendering of the parser.}
|
||||||
@end float
|
@end float
|
||||||
@end ifnotinfo
|
@end ifnotinfo
|
||||||
@@ -9802,7 +9847,7 @@ State 3
|
|||||||
|
|
||||||
A Graphviz rendering of this portion of the graph could be:
|
A Graphviz rendering of this portion of the graph could be:
|
||||||
|
|
||||||
@center @image{figs/example-shift, 100pt}
|
@center @image{figs/example-shift, 100pt,,,.svg}
|
||||||
|
|
||||||
@subheading Graphical Representation of Reductions
|
@subheading Graphical Representation of Reductions
|
||||||
|
|
||||||
@@ -9824,7 +9869,7 @@ State 1
|
|||||||
|
|
||||||
A Graphviz rendering of this portion of the graph could be:
|
A Graphviz rendering of this portion of the graph could be:
|
||||||
|
|
||||||
@center @image{figs/example-reduce, 120pt}
|
@center @image{figs/example-reduce, 120pt,,,.svg}
|
||||||
|
|
||||||
When unresolved conflicts are present, because in deterministic parsing
|
When unresolved conflicts are present, because in deterministic parsing
|
||||||
a single decision can be made, Bison can arbitrarily choose to disable a
|
a single decision can be made, Bison can arbitrarily choose to disable a
|
||||||
@@ -10299,15 +10344,15 @@ exp:;
|
|||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
$ @kbd{bison -u foo.y}
|
$ @kbd{bison -u foo.y}
|
||||||
foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
|
foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
|
||||||
1 | %error-verbose
|
1 | @dwarning{%error-verbose}
|
||||||
| ^~~~~~~~~~~~~~
|
| @dwarning{^~~~~~~~~~~~~~}
|
||||||
foo.y:2.1-27: error: %define variable 'parse.error' redefined
|
foo.y:2.1-27: @dwarning{warning}: %define variable 'parse.error' redefined [@dwarning{-Wother}]
|
||||||
2 | %define parse.error verbose
|
2 | @dwarning{%define parse.error verbose}
|
||||||
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| @dwarning{^~~~~~~~~~~~~~~~~~~~~~~~~~~}
|
||||||
foo.y:1.1-14: previous definition
|
foo.y:1.1-14: previous definition
|
||||||
1 | %error-verbose
|
1 | @dnotice{%error-verbose}
|
||||||
| ^~~~~~~~~~~~~~
|
| @dnotice{^~~~~~~~~~~~~~}
|
||||||
bison: file 'foo.y' was updated (backup: 'foo.y~')
|
bison: file 'foo.y' was updated (backup: 'foo.y~')
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
@@ -10421,19 +10466,19 @@ Bison reports:
|
|||||||
@c width in PDF.
|
@c width in PDF.
|
||||||
@example
|
@example
|
||||||
@group
|
@group
|
||||||
warning: useless precedence and associativity for "="
|
@dwarning{warning}: useless precedence and associativity for "="
|
||||||
| %nonassoc "="
|
| %nonassoc @dwarning{"="}
|
||||||
| ^~~
|
| @dwarning{^~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
warning: useless associativity for "*", use %precedence
|
@dwarning{warning}: useless associativity for "*", use %precedence
|
||||||
| %left "*"
|
| %left @dwarning{"*"}
|
||||||
| ^~~
|
| @dwarning{^~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
warning: useless precedence for "("
|
@dwarning{warning}: useless precedence for "("
|
||||||
| %precedence "("
|
| %precedence @dwarning{"("}
|
||||||
| ^~~
|
| @dwarning{^~~}
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -10520,29 +10565,29 @@ When invoked with @option{-fcaret} (or nothing), Bison will report:
|
|||||||
|
|
||||||
@example
|
@example
|
||||||
@group
|
@group
|
||||||
in.y:3.20-23: error: ambiguous reference: '$exp'
|
in.y:3.20-23: @derror{error}: ambiguous reference: '$exp'
|
||||||
3 | exp: exp '+' exp @{ $exp = $1 + $2; @};
|
3 | exp: exp '+' exp @{ @derror{$exp} = $1 + $2; @};
|
||||||
| ^~~~
|
| @derror{^~~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
in.y:3.1-3: refers to: $exp at $$
|
in.y:3.1-3: refers to: $exp at $$
|
||||||
3 | exp: exp '+' exp @{ $exp = $1 + $2; @};
|
3 | @dnotice{exp}: exp '+' exp @{ $exp = $1 + $2; @};
|
||||||
| ^~~
|
| @dnotice{^~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
in.y:3.6-8: refers to: $exp at $1
|
in.y:3.6-8: refers to: $exp at $1
|
||||||
3 | exp: exp '+' exp @{ $exp = $1 + $2; @};
|
3 | exp: @dnotice{exp} '+' exp @{ $exp = $1 + $2; @};
|
||||||
| ^~~
|
| @dnotice{^~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
in.y:3.14-16: refers to: $exp at $3
|
in.y:3.14-16: refers to: $exp at $3
|
||||||
3 | exp: exp '+' exp @{ $exp = $1 + $2; @};
|
3 | exp: exp '+' @dnotice{exp} @{ $exp = $1 + $2; @};
|
||||||
| ^~~
|
| @dnotice{^~~}
|
||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
in.y:3.32-33: error: $2 of 'exp' has no declared type
|
in.y:3.32-33: @derror{error}: $2 of 'exp' has no declared type
|
||||||
3 | exp: exp '+' exp @{ $exp = $1 + $2; @};
|
3 | exp: exp '+' exp @{ $exp = $1 + @derror{$2}; @};
|
||||||
| ^~
|
| @derror{^~}
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -10550,11 +10595,11 @@ Whereas, when invoked with @option{-fno-caret}, Bison will only report:
|
|||||||
|
|
||||||
@example
|
@example
|
||||||
@group
|
@group
|
||||||
in.y:3.20-23: error: ambiguous reference: ‘$exp’
|
in.y:3.20-23: @derror{error}: ambiguous reference: ‘$exp’
|
||||||
in.y:3.1-3: refers to: $exp at $$
|
in.y:3.1-3: refers to: $exp at $$
|
||||||
in.y:3.6-8: refers to: $exp at $1
|
in.y:3.6-8: refers to: $exp at $1
|
||||||
in.y:3.14-16: refers to: $exp at $3
|
in.y:3.14-16: refers to: $exp at $3
|
||||||
in.y:3.32-33: error: $2 of ‘exp’ has no declared type
|
in.y:3.32-33: @derror{error}: $2 of ‘exp’ has no declared type
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -10578,14 +10623,14 @@ exp:;
|
|||||||
|
|
||||||
@group
|
@group
|
||||||
$ @kbd{bison -ffixit foo.y}
|
$ @kbd{bison -ffixit foo.y}
|
||||||
foo.y:2.1-24: error: %define variable 'api.prefix' redefined
|
foo.y:2.1-24: @derror{error}: %define variable 'api.prefix' redefined
|
||||||
2 | %define api.prefix @{bar@}
|
2 | @derror{%define api.prefix @{bar@}}
|
||||||
| ^~~~~~~~~~~~~~~~~~~~~~~~
|
| @derror{^~~~~~~~~~~~~~~~~~~~~~~~}
|
||||||
foo.y:1.1-24: previous definition
|
foo.y:1.1-24: previous definition
|
||||||
1 | %define api.prefix @{foo@}
|
1 | @dnotice{%define api.prefix @{foo@}}
|
||||||
| ^~~~~~~~~~~~~~~~~~~~~~~~
|
| @dnotice{^~~~~~~~~~~~~~~~~~~~~~~~}
|
||||||
fix-it:"foo.y":@{2:1-2:25@}:""
|
fix-it:"foo.y":@{2:1-2:25@}:""
|
||||||
foo.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother]
|
foo.y: @dwarning{warning}: fix-its can be applied. Rerun with option '--update'. [@dwarning{-Wother}]
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -10602,13 +10647,13 @@ exp:;
|
|||||||
@end group
|
@end group
|
||||||
@group
|
@group
|
||||||
$ @kbd{bison foo.y}
|
$ @kbd{bison foo.y}
|
||||||
foo.y:1.1-14: warning: deprecated directive, use '%define parse.error verbose' [-Wdeprecated]
|
foo.y:1.1-14: @dwarning{warning}: deprecated directive, use '%define parse.error verbose' [@dwarning{-Wdeprecated}]
|
||||||
1 | %error-verbose
|
1 | @dwarning{%error-verbose}
|
||||||
| ^~~~~~~~~~~~~~
|
| @dwarning{^~~~~~~~~~~~~~}
|
||||||
foo.y:2.1-18: warning: deprecated directive, use '%define api.prefix @{foo@}' [-Wdeprecated]
|
foo.y:2.1-18: @dwarning{warning}: deprecated directive, use '%define api.prefix @{foo@}' [@dwarning{-Wdeprecated}]
|
||||||
2 | %name-prefix "foo"
|
2 | @dwarning{%name-prefix "foo"}
|
||||||
| ^~~~~~~~~~~~~~~~~~
|
| @dwarning{^~~~~~~~~~~~~~~~~~}
|
||||||
foo.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother]
|
foo.y: @dwarning{warning}: fix-its can be applied. Rerun with option '--update'. [@dwarning{-Wother}]
|
||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@@ -11523,7 +11568,7 @@ Instead of using the built-in types you may use the @code{%define} variable
|
|||||||
The requirements over your @var{LocationType} are:
|
The requirements over your @var{LocationType} are:
|
||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
it must be copyable;
|
it must be copiable;
|
||||||
|
|
||||||
@item
|
@item
|
||||||
in order to compute the (default) value of @code{@@$} in a reduction, the
|
in order to compute the (default) value of @code{@@$} in a reduction, the
|
||||||
@@ -11533,7 +11578,7 @@ parser basically runs
|
|||||||
@@$.end = @@@var{N}.end; // The location of last right-hand side symbol.
|
@@$.end = @@@var{N}.end; // The location of last right-hand side symbol.
|
||||||
@end example
|
@end example
|
||||||
@noindent
|
@noindent
|
||||||
so there must be copyable @code{begin} and @code{end} members;
|
so there must be copiable @code{begin} and @code{end} members;
|
||||||
|
|
||||||
@item
|
@item
|
||||||
alternatively you may redefine the computation of the default location, in
|
alternatively you may redefine the computation of the default location, in
|
||||||
@@ -12371,8 +12416,8 @@ You can create documentation for generated parsers using Javadoc.
|
|||||||
|
|
||||||
Contrary to C parsers, Java parsers do not use global variables; the state
|
Contrary to C parsers, Java parsers do not use global variables; the state
|
||||||
of the parser is always local to an instance of the parser class.
|
of the parser is always local to an instance of the parser class.
|
||||||
Therefore, all Java parsers are ``pure'', and the @code{%pure-parser} and
|
Therefore, all Java parsers are ``pure'', and the @code{%define api.pure}
|
||||||
@code{%define api.pure} directives do nothing when used in Java.
|
directive does nothing when used in Java.
|
||||||
|
|
||||||
Push parsers are currently unsupported in Java and @code{%define
|
Push parsers are currently unsupported in Java and @code{%define
|
||||||
api.push-pull} have no effect.
|
api.push-pull} have no effect.
|
||||||
@@ -14428,7 +14473,7 @@ London, Department of Computer Science, TR-00-12 (December 2000).
|
|||||||
@c LocalWords: YYENABLE bindtextdomain Makefile DEFS CPPFLAGS DBISON DeRemer
|
@c LocalWords: YYENABLE bindtextdomain Makefile DEFS CPPFLAGS DBISON DeRemer
|
||||||
@c LocalWords: autoreconf Pennello multisets nondeterminism Generalised baz ACM
|
@c LocalWords: autoreconf Pennello multisets nondeterminism Generalised baz ACM
|
||||||
@c LocalWords: redeclare automata Dparse localedir datadir XSLT midrule Wno
|
@c LocalWords: redeclare automata Dparse localedir datadir XSLT midrule Wno
|
||||||
@c LocalWords: multitable headitem hh basename Doxygen fno filename
|
@c LocalWords: multitable headitem hh basename Doxygen fno filename gdef
|
||||||
@c LocalWords: doxygen ival sval deftypemethod deallocate pos deftypemethodx
|
@c LocalWords: doxygen ival sval deftypemethod deallocate pos deftypemethodx
|
||||||
@c LocalWords: Ctor defcv defcvx arg accessors arithmetics CPP ifndef CALCXX
|
@c LocalWords: Ctor defcv defcvx arg accessors arithmetics CPP ifndef CALCXX
|
||||||
@c LocalWords: lexer's calcxx bool LPAREN RPAREN deallocation cerrno climits
|
@c LocalWords: lexer's calcxx bool LPAREN RPAREN deallocation cerrno climits
|
||||||
@@ -14449,14 +14494,17 @@ London, Department of Computer Science, TR-00-12 (December 2000).
|
|||||||
@c LocalWords: errorVerbose subtype subtypes Wmidrule midrule's src rvalues
|
@c LocalWords: errorVerbose subtype subtypes Wmidrule midrule's src rvalues
|
||||||
@c LocalWords: automove evolutions Wother Wconflicts PNG lookaheads Acc sep
|
@c LocalWords: automove evolutions Wother Wconflicts PNG lookaheads Acc sep
|
||||||
@c LocalWords: xsltproc XSL xsl xhtml html num Wprecedence Werror fcaret gv
|
@c LocalWords: xsltproc XSL xsl xhtml html num Wprecedence Werror fcaret gv
|
||||||
@c LocalWords: fdiagnostics setlocale nullptr ast srcdir copyable iff drv
|
@c LocalWords: fdiagnostics setlocale nullptr ast srcdir iff drv rgbWarning
|
||||||
@c LocalWords: deftypefunx pragma Wnull dereference Wdocumentation elif ish
|
@c LocalWords: deftypefunx pragma Wnull dereference Wdocumentation elif ish
|
||||||
@c LocalWords: Wdeprecated Wregister noinput yyloc yypos PODs sstream Wsign
|
@c LocalWords: Wdeprecated Wregister noinput yyloc yypos PODs sstream Wsign
|
||||||
@c LocalWords: typename emplace Wconversion Wshorten yacchack reentrancy
|
@c LocalWords: typename emplace Wconversion Wshorten yacchack reentrancy
|
||||||
@c LocalWords: Relocatability exprs fixit Wyacc parseable fixits ffixit
|
@c LocalWords: Relocatability exprs fixit Wyacc parseable fixits ffixit svg
|
||||||
@c LocalWords: DNDEBUG cstring Wzero workalike POPL workalikes byacc UCB
|
@c LocalWords: DNDEBUG cstring Wzero workalike POPL workalikes byacc UCB
|
||||||
@c LocalWords: Penello's Penello Byson Byson's Corbett's CSD TOPLAS PDP
|
@c LocalWords: Penello's Penello Byson Byson's Corbett's CSD TOPLAS PDP
|
||||||
@c LocalWords: Beazley's goyacc ocamlyacc SIGACT SIGPLAN
|
@c LocalWords: Beazley's goyacc ocamlyacc SIGACT SIGPLAN colorWarning
|
||||||
|
@c LocalWords: setcolor rgbError colorError rgbNotice colorNotice derror
|
||||||
|
@c LocalWords: colorOff maincolor inlineraw darkviolet darkcyan dwarning
|
||||||
|
@c LocalWords: dnotice copiable
|
||||||
|
|
||||||
@c Local Variables:
|
@c Local Variables:
|
||||||
@c ispell-dictionary: "american"
|
@c ispell-dictionary: "american"
|
||||||
|
|||||||
+12
-7
@@ -14,7 +14,12 @@
|
|||||||
## You should have received a copy of the GNU General Public License
|
## You should have received a copy of the GNU General Public License
|
||||||
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
AM_MAKEINFOFLAGS = --no-split
|
AM_MAKEINFOFLAGS = \
|
||||||
|
--no-split \
|
||||||
|
--set-customization-variable=SECTION_NAME_IN_TITLE=true \
|
||||||
|
--set-customization-variable=AVOID_MENU_REDUNDANCY=true \
|
||||||
|
--set-customization-variable=ICONS=true
|
||||||
|
|
||||||
info_TEXINFOS = doc/bison.texi
|
info_TEXINFOS = doc/bison.texi
|
||||||
doc_bison_TEXINFOS = \
|
doc_bison_TEXINFOS = \
|
||||||
$(CROSS_OPTIONS_TEXI) \
|
$(CROSS_OPTIONS_TEXI) \
|
||||||
@@ -28,7 +33,7 @@ doc_bison = doc/bison
|
|||||||
$(doc_bison).dvi: $(FIGS_GV:.gv=.eps)
|
$(doc_bison).dvi: $(FIGS_GV:.gv=.eps)
|
||||||
$(doc_bison).info: $(FIGS_GV:.gv=.txt)
|
$(doc_bison).info: $(FIGS_GV:.gv=.txt)
|
||||||
$(doc_bison).pdf: $(FIGS_GV:.gv=.pdf)
|
$(doc_bison).pdf: $(FIGS_GV:.gv=.pdf)
|
||||||
$(doc_bison).html: $(FIGS_GV:.gv=.png)
|
$(doc_bison).html: $(FIGS_GV:.gv=.svg)
|
||||||
|
|
||||||
TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc
|
TEXI2DVI = texi2dvi --build-dir=doc/bison.t2d -I doc
|
||||||
CLEANDIRS += doc/bison.t2d
|
CLEANDIRS += doc/bison.t2d
|
||||||
@@ -137,14 +142,14 @@ endif
|
|||||||
## Graphviz examples generation. ##
|
## Graphviz examples generation. ##
|
||||||
## ----------------------------- ##
|
## ----------------------------- ##
|
||||||
|
|
||||||
CLEANFILES += $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.png)
|
CLEANFILES += $(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
|
||||||
FIGS_GV = \
|
FIGS_GV = \
|
||||||
doc/figs/example.gv \
|
doc/figs/example.gv \
|
||||||
doc/figs/example-reduce.gv doc/figs/example-shift.gv
|
doc/figs/example-reduce.gv doc/figs/example-shift.gv
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
$(FIGS_GV) $(FIGS_GV:.gv=.txt) \
|
$(FIGS_GV) $(FIGS_GV:.gv=.txt) \
|
||||||
$(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.png)
|
$(FIGS_GV:.gv=.eps) $(FIGS_GV:.gv=.pdf) $(FIGS_GV:.gv=.svg)
|
||||||
SUFFIXES += .gv .eps .pdf .png
|
SUFFIXES += .gv .eps .pdf .svg
|
||||||
|
|
||||||
.gv.eps:
|
.gv.eps:
|
||||||
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
|
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
|
||||||
@@ -156,9 +161,9 @@ SUFFIXES += .gv .eps .pdf .png
|
|||||||
$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
|
$(AM_V_at) $(DOT) -Gmargin=0 -Tpdf $< >$@.tmp
|
||||||
$(AM_V_at) mv $@.tmp $@
|
$(AM_V_at) mv $@.tmp $@
|
||||||
|
|
||||||
.gv.png:
|
.gv.svg:
|
||||||
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
|
$(AM_V_GEN) $(MKDIR_P) `echo "./$@" | sed -e 's,/[^/]*$$,,'`
|
||||||
$(AM_V_at) $(DOT) -Gmargin=0 -Tpng $< >$@.tmp
|
$(AM_V_at) $(DOT) -Gmargin=0 -Tsvg $< >$@.tmp
|
||||||
$(AM_V_at) mv $@.tmp $@
|
$(AM_V_at) mv $@.tmp $@
|
||||||
|
|
||||||
## -------------- ##
|
## -------------- ##
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ DASH = -
|
|||||||
$(AM_V_LEX)rm -f $@ $@.tmp
|
$(AM_V_LEX)rm -f $@ $@.tmp
|
||||||
$(AM_V_at)$(MKDIR_P) %D%
|
$(AM_V_at)$(MKDIR_P) %D%
|
||||||
$(AM_V_at)touch $@.tmp
|
$(AM_V_at)touch $@.tmp
|
||||||
$(AM_V_at) $(LEX) -o %D%/scan.c --header-file=%D%/scan.h $<
|
$(AM_V_at)$(LEX) -o%D%/scan.c --header-file=%D%/scan.h $(srcdir)/%D%/scan.l
|
||||||
$(AM_V_at)mv $@.tmp $@
|
$(AM_V_at)mv $@.tmp $@
|
||||||
|
|
||||||
# Don't use gnulib's system headers.
|
# Don't use gnulib's system headers.
|
||||||
|
|||||||
+2
-2
@@ -27,10 +27,10 @@ EXTRA_DIST += %D%/calc.test
|
|||||||
|
|
||||||
%D%/calc.d: %D%/calc.y $(dependencies)
|
%D%/calc.d: %D%/calc.y $(dependencies)
|
||||||
$(AM_V_GEN)$(MKDIR_P) %D%
|
$(AM_V_GEN)$(MKDIR_P) %D%
|
||||||
$(AM_V_at)$(BISON) $< -o $@
|
$(AM_V_at)$(BISON) $(srcdir)/%D%/calc.y -o $@
|
||||||
|
|
||||||
%D%/calc: %D%/calc.d
|
%D%/calc: %D%/calc.d
|
||||||
$(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ $<
|
$(AM_V_GEN) $(DC) $(DCFLAGS) -of$@ %D%/calc.d
|
||||||
|
|
||||||
dist_d_DATA = %D%/calc.y %D%/Makefile %D%/README.md
|
dist_d_DATA = %D%/calc.y %D%/Makefile %D%/README.md
|
||||||
CLEANFILES += %D%/calc %D%/calc.[do]
|
CLEANFILES += %D%/calc %D%/calc.[do]
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ EXTRA_DIST += %D%/Calc.test
|
|||||||
|
|
||||||
%D%/Calc.java: %D%/Calc.y $(dependencies)
|
%D%/Calc.java: %D%/Calc.y $(dependencies)
|
||||||
$(AM_V_GEN)$(MKDIR_P) %D%
|
$(AM_V_GEN)$(MKDIR_P) %D%
|
||||||
$(AM_V_at)$(BISON) $< -o $@
|
$(AM_V_at)$(BISON) $(srcdir)/%D%/Calc.y -o $@
|
||||||
|
|
||||||
%D%/Calc.class: %D%/Calc.java
|
%D%/Calc.class: %D%/Calc.java
|
||||||
$(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh $<
|
$(AM_V_GEN) $(SHELL) $(top_builddir)/javacomp.sh %D%/Calc.java
|
||||||
|
|
||||||
dist_java_DATA = %D%/Calc.y %D%/Makefile %D%/README.md
|
dist_java_DATA = %D%/Calc.y %D%/Makefile %D%/README.md
|
||||||
CLEANFILES += %D%/*.class %D%/Calc.java
|
CLEANFILES += %D%/*.class %D%/Calc.java
|
||||||
|
|||||||
+1
-1
Submodule gnulib updated: 14a920195e...d654989d8b
@@ -0,0 +1,15 @@
|
|||||||
|
/*.gmo
|
||||||
|
/*.po
|
||||||
|
/LINGUAS
|
||||||
|
/Makefile.in.in
|
||||||
|
/Makevars
|
||||||
|
/Makevars.template
|
||||||
|
/POTFILES.in
|
||||||
|
/Rules-quot
|
||||||
|
/bison-gnulib.pot
|
||||||
|
/boldquot.sed
|
||||||
|
/[email protected]
|
||||||
|
/[email protected]
|
||||||
|
/insert-header.sin
|
||||||
|
/quot.sed
|
||||||
|
/remove-potcdate.sin
|
||||||
+26
-10
@@ -72,7 +72,7 @@ begin_use_class (const char *s, FILE *out)
|
|||||||
{
|
{
|
||||||
if (out == stderr)
|
if (out == stderr)
|
||||||
{
|
{
|
||||||
if (style_debug)
|
if (color_debug)
|
||||||
fprintf (out, "<%s>", s);
|
fprintf (out, "<%s>", s);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -87,7 +87,7 @@ end_use_class (const char *s, FILE *out)
|
|||||||
{
|
{
|
||||||
if (out == stderr)
|
if (out == stderr)
|
||||||
{
|
{
|
||||||
if (style_debug)
|
if (color_debug)
|
||||||
fprintf (out, "</%s>", s);
|
fprintf (out, "</%s>", s);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -252,25 +252,41 @@ complain_init_color (void)
|
|||||||
{
|
{
|
||||||
#if HAVE_LIBTEXTSTYLE
|
#if HAVE_LIBTEXTSTYLE
|
||||||
if (color_mode == color_yes
|
if (color_mode == color_yes
|
||||||
|
|| color_mode == color_html
|
||||||
|| (color_mode == color_tty && isatty (STDERR_FILENO)))
|
|| (color_mode == color_tty && isatty (STDERR_FILENO)))
|
||||||
{
|
{
|
||||||
style_file_prepare ("BISON_DIAGNOSTICS_STYLE", NULL,
|
style_file_prepare ("BISON_STYLE", NULL, pkgdatadir (),
|
||||||
pkgdatadir (),
|
"bison-default.css");
|
||||||
"diagnostics.css");
|
|
||||||
/* As a fallback, use the default in the current directory. */
|
/* As a fallback, use the default in the current directory. */
|
||||||
struct stat statbuf;
|
struct stat statbuf;
|
||||||
if ((style_file_name == NULL || stat (style_file_name, &statbuf) < 0)
|
if ((style_file_name == NULL || stat (style_file_name, &statbuf) < 0)
|
||||||
&& stat ("diagnostics.css", &statbuf) == 0)
|
&& stat ("bison-default.css", &statbuf) == 0)
|
||||||
style_file_name = "diagnostics.css";
|
style_file_name = "bison-default.css";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* No styling. */
|
/* No styling. */
|
||||||
style_file_name = NULL;
|
style_file_name = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Workaround clang's warning (starting at Clang 3.5) about the stub
|
||||||
|
code of html_styled_ostream_create:
|
||||||
|
|
||||||
|
| src/complain.c:274:7: error: code will never be executed [-Werror,-Wunreachable-code]
|
||||||
|
| ? html_styled_ostream_create (file_ostream_create (stderr),
|
||||||
|
| ^~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
||||||
|
#if defined __clang__
|
||||||
|
# pragma clang diagnostic push
|
||||||
|
# pragma clang diagnostic ignored "-Wunreachable-code"
|
||||||
|
#endif
|
||||||
errstream =
|
errstream =
|
||||||
styled_ostream_create (STDERR_FILENO, "(stderr)", TTYCTL_AUTO,
|
color_mode == color_html
|
||||||
style_file_name);
|
? html_styled_ostream_create (file_ostream_create (stderr),
|
||||||
|
style_file_name)
|
||||||
|
: styled_ostream_create (STDERR_FILENO, "(stderr)", TTYCTL_AUTO,
|
||||||
|
style_file_name);
|
||||||
|
#if defined __clang__
|
||||||
|
# pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -521,7 +537,7 @@ deprecated_directive (location const *loc, char const *old, char const *upd)
|
|||||||
_("deprecated directive: %s, use %s"),
|
_("deprecated directive: %s, use %s"),
|
||||||
quote (old), quote_n (1, upd));
|
quote (old), quote_n (1, upd));
|
||||||
/* Register updates only if -Wdeprecated is enabled. */
|
/* Register updates only if -Wdeprecated is enabled. */
|
||||||
if (warnings_flag[warning_deprecated] != severity_disabled)
|
if (warning_is_enabled (Wdeprecated))
|
||||||
fixits_register (loc, upd);
|
fixits_register (loc, upd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -52,6 +52,11 @@ fixit_new (location const *loc, char const* fix)
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
fixit_cmp (const fixit *a, const fixit *b)
|
||||||
|
{
|
||||||
|
return location_cmp (a->location, b->location);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
fixit_free (fixit *f)
|
fixit_free (fixit *f)
|
||||||
@@ -85,7 +90,7 @@ fixits_register (location const *loc, char const* fix)
|
|||||||
(gl_listelement_dispose_fn) fixit_free,
|
(gl_listelement_dispose_fn) fixit_free,
|
||||||
true);
|
true);
|
||||||
fixit *f = fixit_new (loc, fix);
|
fixit *f = fixit_new (loc, fix);
|
||||||
gl_list_add_last (fixits, f);
|
gl_sortedlist_add (fixits, (gl_listelement_compar_fn) fixit_cmp, f);
|
||||||
if (feature_flag & feature_fixit_parsable)
|
if (feature_flag & feature_fixit_parsable)
|
||||||
fixit_print (f, stderr);
|
fixit_print (f, stderr);
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-6
@@ -45,7 +45,7 @@ bool no_lines_flag = false;
|
|||||||
bool token_table_flag = false;
|
bool token_table_flag = false;
|
||||||
location yacc_loc = EMPTY_LOCATION_INIT;
|
location yacc_loc = EMPTY_LOCATION_INIT;
|
||||||
bool update_flag = false; /* for -u */
|
bool update_flag = false; /* for -u */
|
||||||
bool style_debug = false; /* --style=debug. */
|
bool color_debug = false;
|
||||||
|
|
||||||
bool nondeterministic_parser = false;
|
bool nondeterministic_parser = false;
|
||||||
bool glr_parser = false;
|
bool glr_parser = false;
|
||||||
@@ -596,14 +596,17 @@ getargs_colors (int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
const char *arg = argv[i];
|
const char *arg = argv[i];
|
||||||
if (STRPREFIX_LIT ("--color=", arg))
|
if (STRPREFIX_LIT ("--color=", arg))
|
||||||
handle_color_option (arg + strlen ("--color="));
|
{
|
||||||
|
const char *color = arg + strlen ("--color=");
|
||||||
|
if (STREQ (color, "debug"))
|
||||||
|
color_debug = true;
|
||||||
|
else
|
||||||
|
handle_color_option (color);
|
||||||
|
}
|
||||||
else if (STRPREFIX_LIT ("--style=", arg))
|
else if (STRPREFIX_LIT ("--style=", arg))
|
||||||
{
|
{
|
||||||
const char *style = arg + strlen ("--style=");
|
const char *style = arg + strlen ("--style=");
|
||||||
if (STREQ (style, "debug"))
|
handle_style_option (style);
|
||||||
style_debug = true;
|
|
||||||
else
|
|
||||||
handle_style_option (style);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
complain_init_color ();
|
complain_init_color ();
|
||||||
|
|||||||
+1
-1
@@ -41,7 +41,7 @@ extern bool no_lines_flag; /* for -l */
|
|||||||
extern bool token_table_flag; /* for -k */
|
extern bool token_table_flag; /* for -k */
|
||||||
extern location yacc_loc; /* for -y */
|
extern location yacc_loc; /* for -y */
|
||||||
extern bool update_flag; /* for -u */
|
extern bool update_flag; /* for -u */
|
||||||
extern bool style_debug; /* --style=debug. */
|
extern bool color_debug; /* --color=debug. */
|
||||||
/* GLR_PARSER is true if the input file says to use the GLR
|
/* GLR_PARSER is true if the input file says to use the GLR
|
||||||
(Generalized LR) parser, and to output some additional information
|
(Generalized LR) parser, and to output some additional information
|
||||||
used by the GLR algorithm. */
|
used by the GLR algorithm. */
|
||||||
|
|||||||
+1
-1
@@ -203,7 +203,7 @@ typedef struct
|
|||||||
int expected_rr_conflicts;
|
int expected_rr_conflicts;
|
||||||
|
|
||||||
const char *action;
|
const char *action;
|
||||||
location action_location;
|
location action_loc;
|
||||||
} rule;
|
} rule;
|
||||||
|
|
||||||
/* The used rules (size NRULES). */
|
/* The used rules (size NRULES). */
|
||||||
|
|||||||
+1
-1
@@ -30,7 +30,7 @@
|
|||||||
#include "getargs.h"
|
#include "getargs.h"
|
||||||
#include "location.h"
|
#include "location.h"
|
||||||
|
|
||||||
location const empty_location = EMPTY_LOCATION_INIT;
|
location const empty_loc = EMPTY_LOCATION_INIT;
|
||||||
|
|
||||||
/* If BUF is null, add BUFSIZE (which in this case must be less than
|
/* If BUF is null, add BUFSIZE (which in this case must be less than
|
||||||
INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
|
INT_MAX) to COLUMN; otherwise, add mbsnwidth (BUF, BUFSIZE, 0) to
|
||||||
|
|||||||
+1
-1
@@ -102,7 +102,7 @@ typedef struct
|
|||||||
# define GRAM_LTYPE location
|
# define GRAM_LTYPE location
|
||||||
|
|
||||||
# define EMPTY_LOCATION_INIT {{NULL, 0, 0, 0}, {NULL, 0, 0, 0}}
|
# define EMPTY_LOCATION_INIT {{NULL, 0, 0, 0}, {NULL, 0, 0, 0}}
|
||||||
extern location const empty_location;
|
extern location const empty_loc;
|
||||||
|
|
||||||
/* Set *LOC and adjust scanner cursor to account for token TOKEN of
|
/* Set *LOC and adjust scanner cursor to account for token TOKEN of
|
||||||
size SIZE. */
|
size SIZE. */
|
||||||
|
|||||||
+2
-2
@@ -372,8 +372,8 @@ user_actions_output (FILE *out)
|
|||||||
{
|
{
|
||||||
fprintf (out, "%s(%d, [b4_syncline(%d, ",
|
fprintf (out, "%s(%d, [b4_syncline(%d, ",
|
||||||
rules[r].is_predicate ? "b4_predicate_case" : "b4_case",
|
rules[r].is_predicate ? "b4_predicate_case" : "b4_case",
|
||||||
r + 1, rules[r].action_location.start.line);
|
r + 1, rules[r].action_loc.start.line);
|
||||||
string_output (out, rules[r].action_location.start.file);
|
string_output (out, rules[r].action_loc.start.file);
|
||||||
fprintf (out, ")dnl\n[ %s]])\n\n", rules[r].action);
|
fprintf (out, ")dnl\n[ %s]])\n\n", rules[r].action);
|
||||||
}
|
}
|
||||||
fputs ("])\n\n", out);
|
fputs ("])\n\n", out);
|
||||||
|
|||||||
+363
-339
File diff suppressed because it is too large
Load Diff
+37
-34
@@ -1,4 +1,4 @@
|
|||||||
/* A Bison parser, made by GNU Bison 3.3.2.153-f5a4-dirty. */
|
/* A Bison parser, made by GNU Bison 3.4. */
|
||||||
|
|
||||||
/* Bison interface for Yacc-like parsers in C
|
/* Bison interface for Yacc-like parsers in C
|
||||||
|
|
||||||
@@ -108,32 +108,33 @@ extern int gram_debug;
|
|||||||
PERCENT_NO_LINES = 285,
|
PERCENT_NO_LINES = 285,
|
||||||
PERCENT_NONDETERMINISTIC_PARSER = 286,
|
PERCENT_NONDETERMINISTIC_PARSER = 286,
|
||||||
PERCENT_OUTPUT = 287,
|
PERCENT_OUTPUT = 287,
|
||||||
PERCENT_REQUIRE = 288,
|
PERCENT_PURE_PARSER = 288,
|
||||||
PERCENT_SKELETON = 289,
|
PERCENT_REQUIRE = 289,
|
||||||
PERCENT_START = 290,
|
PERCENT_SKELETON = 290,
|
||||||
PERCENT_TOKEN_TABLE = 291,
|
PERCENT_START = 291,
|
||||||
PERCENT_VERBOSE = 292,
|
PERCENT_TOKEN_TABLE = 292,
|
||||||
PERCENT_YACC = 293,
|
PERCENT_VERBOSE = 293,
|
||||||
BRACED_CODE = 294,
|
PERCENT_YACC = 294,
|
||||||
BRACED_PREDICATE = 295,
|
BRACED_CODE = 295,
|
||||||
BRACKETED_ID = 296,
|
BRACED_PREDICATE = 296,
|
||||||
CHAR = 297,
|
BRACKETED_ID = 297,
|
||||||
COLON = 298,
|
CHAR = 298,
|
||||||
EPILOGUE = 299,
|
COLON = 299,
|
||||||
EQUAL = 300,
|
EPILOGUE = 300,
|
||||||
ID = 301,
|
EQUAL = 301,
|
||||||
ID_COLON = 302,
|
ID = 302,
|
||||||
PERCENT_PERCENT = 303,
|
ID_COLON = 303,
|
||||||
PIPE = 304,
|
PERCENT_PERCENT = 304,
|
||||||
PROLOGUE = 305,
|
PIPE = 305,
|
||||||
SEMICOLON = 306,
|
PROLOGUE = 306,
|
||||||
TAG = 307,
|
SEMICOLON = 307,
|
||||||
TAG_ANY = 308,
|
TAG = 308,
|
||||||
TAG_NONE = 309,
|
TAG_ANY = 309,
|
||||||
INT = 310,
|
TAG_NONE = 310,
|
||||||
PERCENT_PARAM = 311,
|
INT = 311,
|
||||||
PERCENT_UNION = 312,
|
PERCENT_PARAM = 312,
|
||||||
PERCENT_EMPTY = 313
|
PERCENT_UNION = 313,
|
||||||
|
PERCENT_EMPTY = 314
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -159,9 +160,9 @@ union GRAM_STYPE
|
|||||||
/* "integer" */
|
/* "integer" */
|
||||||
int INT;
|
int INT;
|
||||||
/* int.opt */
|
/* int.opt */
|
||||||
int yytype_80;
|
int yytype_81;
|
||||||
/* named_ref.opt */
|
/* named_ref.opt */
|
||||||
named_ref* yytype_92;
|
named_ref* yytype_93;
|
||||||
/* "%param" */
|
/* "%param" */
|
||||||
param_type PERCENT_PARAM;
|
param_type PERCENT_PARAM;
|
||||||
/* token_decl */
|
/* token_decl */
|
||||||
@@ -177,7 +178,7 @@ union GRAM_STYPE
|
|||||||
/* string_as_id */
|
/* string_as_id */
|
||||||
symbol* string_as_id;
|
symbol* string_as_id;
|
||||||
/* string_as_id.opt */
|
/* string_as_id.opt */
|
||||||
symbol* yytype_99;
|
symbol* yytype_100;
|
||||||
/* generic_symlist */
|
/* generic_symlist */
|
||||||
symbol_list* generic_symlist;
|
symbol_list* generic_symlist;
|
||||||
/* generic_symlist_item */
|
/* generic_symlist_item */
|
||||||
@@ -187,15 +188,15 @@ union GRAM_STYPE
|
|||||||
/* token_decls */
|
/* token_decls */
|
||||||
symbol_list* token_decls;
|
symbol_list* token_decls;
|
||||||
/* token_decl.1 */
|
/* token_decl.1 */
|
||||||
symbol_list* yytype_78;
|
symbol_list* yytype_79;
|
||||||
/* token_decls_for_prec */
|
/* token_decls_for_prec */
|
||||||
symbol_list* token_decls_for_prec;
|
symbol_list* token_decls_for_prec;
|
||||||
/* token_decl_for_prec.1 */
|
/* token_decl_for_prec.1 */
|
||||||
symbol_list* yytype_82;
|
symbol_list* yytype_83;
|
||||||
/* symbol_decls */
|
/* symbol_decls */
|
||||||
symbol_list* symbol_decls;
|
symbol_list* symbol_decls;
|
||||||
/* symbol_decl.1 */
|
/* symbol_decl.1 */
|
||||||
symbol_list* yytype_85;
|
symbol_list* yytype_86;
|
||||||
/* "%error-verbose" */
|
/* "%error-verbose" */
|
||||||
uniqstr PERCENT_ERROR_VERBOSE;
|
uniqstr PERCENT_ERROR_VERBOSE;
|
||||||
/* "%<flag>" */
|
/* "%<flag>" */
|
||||||
@@ -204,6 +205,8 @@ union GRAM_STYPE
|
|||||||
uniqstr PERCENT_FILE_PREFIX;
|
uniqstr PERCENT_FILE_PREFIX;
|
||||||
/* "%name-prefix" */
|
/* "%name-prefix" */
|
||||||
uniqstr PERCENT_NAME_PREFIX;
|
uniqstr PERCENT_NAME_PREFIX;
|
||||||
|
/* "%pure-parser" */
|
||||||
|
uniqstr PERCENT_PURE_PARSER;
|
||||||
/* "%yacc" */
|
/* "%yacc" */
|
||||||
uniqstr PERCENT_YACC;
|
uniqstr PERCENT_YACC;
|
||||||
/* "[identifier]" */
|
/* "[identifier]" */
|
||||||
@@ -215,7 +218,7 @@ union GRAM_STYPE
|
|||||||
/* "<tag>" */
|
/* "<tag>" */
|
||||||
uniqstr TAG;
|
uniqstr TAG;
|
||||||
/* tag.opt */
|
/* tag.opt */
|
||||||
uniqstr yytype_72;
|
uniqstr yytype_73;
|
||||||
/* tag */
|
/* tag */
|
||||||
uniqstr tag;
|
uniqstr tag;
|
||||||
/* variable */
|
/* variable */
|
||||||
|
|||||||
+22
-4
@@ -49,7 +49,7 @@
|
|||||||
#include "xmemdup0.h"
|
#include "xmemdup0.h"
|
||||||
|
|
||||||
static int current_prec = 0;
|
static int current_prec = 0;
|
||||||
static location current_lhs_location;
|
static location current_lhs_loc;
|
||||||
static named_ref *current_lhs_named_ref;
|
static named_ref *current_lhs_named_ref;
|
||||||
static symbol *current_lhs_symbol;
|
static symbol *current_lhs_symbol;
|
||||||
static symbol_class current_class = unknown_sym;
|
static symbol_class current_class = unknown_sym;
|
||||||
@@ -94,6 +94,9 @@
|
|||||||
static void handle_name_prefix (location const *loc,
|
static void handle_name_prefix (location const *loc,
|
||||||
char const *directive, char const *value);
|
char const *directive, char const *value);
|
||||||
|
|
||||||
|
/* Handle a %pure-parser directive. */
|
||||||
|
static void handle_pure_parser (location const *loc, char const *directive);
|
||||||
|
|
||||||
/* Handle a %require directive. */
|
/* Handle a %require directive. */
|
||||||
static void handle_require (location const *loc, char const *version);
|
static void handle_require (location const *loc, char const *version);
|
||||||
|
|
||||||
@@ -181,6 +184,7 @@
|
|||||||
PERCENT_NONDETERMINISTIC_PARSER
|
PERCENT_NONDETERMINISTIC_PARSER
|
||||||
"%nondeterministic-parser"
|
"%nondeterministic-parser"
|
||||||
PERCENT_OUTPUT "%output"
|
PERCENT_OUTPUT "%output"
|
||||||
|
PERCENT_PURE_PARSER "%pure-parser"
|
||||||
PERCENT_REQUIRE "%require"
|
PERCENT_REQUIRE "%require"
|
||||||
PERCENT_SKELETON "%skeleton"
|
PERCENT_SKELETON "%skeleton"
|
||||||
PERCENT_START "%start"
|
PERCENT_START "%start"
|
||||||
@@ -219,7 +223,7 @@
|
|||||||
%type <uniqstr>
|
%type <uniqstr>
|
||||||
BRACKETED_ID ID ID_COLON
|
BRACKETED_ID ID ID_COLON
|
||||||
PERCENT_ERROR_VERBOSE PERCENT_FILE_PREFIX PERCENT_FLAG PERCENT_NAME_PREFIX
|
PERCENT_ERROR_VERBOSE PERCENT_FILE_PREFIX PERCENT_FLAG PERCENT_NAME_PREFIX
|
||||||
PERCENT_YACC
|
PERCENT_PURE_PARSER PERCENT_YACC
|
||||||
TAG tag tag.opt variable
|
TAG tag tag.opt variable
|
||||||
%printer { fputs ($$, yyo); } <uniqstr>
|
%printer { fputs ($$, yyo); } <uniqstr>
|
||||||
%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
|
%printer { fprintf (yyo, "[%s]", $$); } BRACKETED_ID
|
||||||
@@ -343,6 +347,7 @@ prologue_declaration:
|
|||||||
| "%nondeterministic-parser" { nondeterministic_parser = true; }
|
| "%nondeterministic-parser" { nondeterministic_parser = true; }
|
||||||
| "%output" STRING { spec_outfile = $2; }
|
| "%output" STRING { spec_outfile = $2; }
|
||||||
| "%param" { current_param = $1; } params { current_param = param_none; }
|
| "%param" { current_param = $1; } params { current_param = param_none; }
|
||||||
|
| "%pure-parser" { handle_pure_parser (&@$, $1); }
|
||||||
| "%require" STRING { handle_require (&@2, $2); }
|
| "%require" STRING { handle_require (&@2, $2); }
|
||||||
| "%skeleton" STRING { handle_skeleton (&@2, $2); }
|
| "%skeleton" STRING { handle_skeleton (&@2, $2); }
|
||||||
| "%token-table" { token_table_flag = true; }
|
| "%token-table" { token_table_flag = true; }
|
||||||
@@ -651,7 +656,7 @@ rhses.1:
|
|||||||
%token PERCENT_EMPTY "%empty";
|
%token PERCENT_EMPTY "%empty";
|
||||||
rhs:
|
rhs:
|
||||||
%empty
|
%empty
|
||||||
{ grammar_current_rule_begin (current_lhs_symbol, current_lhs_location,
|
{ grammar_current_rule_begin (current_lhs_symbol, current_lhs_loc,
|
||||||
current_lhs_named_ref); }
|
current_lhs_named_ref); }
|
||||||
| rhs symbol named_ref.opt
|
| rhs symbol named_ref.opt
|
||||||
{ grammar_current_rule_symbol_append ($2, @2, $3); }
|
{ grammar_current_rule_symbol_append ($2, @2, $3); }
|
||||||
@@ -910,6 +915,7 @@ handle_file_prefix (location const *loc,
|
|||||||
deprecated_directive (dir_loc, directive, "%file-prefix");
|
deprecated_directive (dir_loc, directive, "%file-prefix");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_name_prefix (location const *loc,
|
handle_name_prefix (location const *loc,
|
||||||
char const *directive, char const *value)
|
char const *directive, char const *value)
|
||||||
@@ -944,6 +950,16 @@ handle_name_prefix (location const *loc,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
handle_pure_parser (location const *loc, char const *directive)
|
||||||
|
{
|
||||||
|
bison_directive (loc, directive);
|
||||||
|
deprecated_directive (loc, directive, "%define api.pure");
|
||||||
|
muscle_percent_define_insert ("api.pure", *loc, muscle_keyword, "",
|
||||||
|
MUSCLE_PERCENT_DEFINE_GRAMMAR_FILE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_require (location const *loc, char const *version)
|
handle_require (location const *loc, char const *version)
|
||||||
{
|
{
|
||||||
@@ -1006,6 +1022,7 @@ handle_skeleton (location const *loc, char const *skel)
|
|||||||
skeleton_arg (skeleton_user, grammar_prio, *loc);
|
skeleton_arg (skeleton_user, grammar_prio, *loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_yacc (location const *loc, char const *directive)
|
handle_yacc (location const *loc, char const *directive)
|
||||||
{
|
{
|
||||||
@@ -1026,6 +1043,7 @@ handle_yacc (location const *loc, char const *directive)
|
|||||||
deprecated_directive (loc, directive, "%fixed-output-files");
|
deprecated_directive (loc, directive, "%fixed-output-files");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gram_error (location const *loc, char const *msg)
|
gram_error (location const *loc, char const *msg)
|
||||||
{
|
{
|
||||||
@@ -1050,7 +1068,7 @@ void
|
|||||||
current_lhs (symbol *sym, location loc, named_ref *ref)
|
current_lhs (symbol *sym, location loc, named_ref *ref)
|
||||||
{
|
{
|
||||||
current_lhs_symbol = sym;
|
current_lhs_symbol = sym;
|
||||||
current_lhs_location = loc;
|
current_lhs_loc = loc;
|
||||||
if (sym)
|
if (sym)
|
||||||
symbol_location_as_lhs_set (sym, loc);
|
symbol_location_as_lhs_set (sym, loc);
|
||||||
/* In order to simplify memory management, named references for lhs
|
/* In order to simplify memory management, named references for lhs
|
||||||
|
|||||||
+38
-37
@@ -62,7 +62,7 @@ grammar_start_symbol_set (symbol *sym, location loc)
|
|||||||
{
|
{
|
||||||
start_flag = true;
|
start_flag = true;
|
||||||
startsymbol = sym;
|
startsymbol = sym;
|
||||||
startsymbol_location = loc;
|
startsymbol_loc = loc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,12 +131,12 @@ record_merge_function_type (int merger, uniqstr type, location declaration_loc)
|
|||||||
quote (merge_function->name), type,
|
quote (merge_function->name), type,
|
||||||
merge_function->type);
|
merge_function->type);
|
||||||
indent += SUB_INDENT;
|
indent += SUB_INDENT;
|
||||||
complain_indent (&merge_function->type_declaration_location, complaint,
|
complain_indent (&merge_function->type_declaration_loc, complaint,
|
||||||
&indent,
|
&indent,
|
||||||
_("previous declaration"));
|
_("previous declaration"));
|
||||||
}
|
}
|
||||||
merge_function->type = uniqstr_new (type);
|
merge_function->type = uniqstr_new (type);
|
||||||
merge_function->type_declaration_location = declaration_loc;
|
merge_function->type_declaration_loc = declaration_loc;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--------------------------------------.
|
/*--------------------------------------.
|
||||||
@@ -295,7 +295,7 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
char const *rhs_type =
|
char const *rhs_type =
|
||||||
first_rhs->content->type_name ? first_rhs->content->type_name : "";
|
first_rhs->content->type_name ? first_rhs->content->type_name : "";
|
||||||
if (!UNIQSTR_EQ (lhs_type, rhs_type))
|
if (!UNIQSTR_EQ (lhs_type, rhs_type))
|
||||||
complain (&r->location, Wother,
|
complain (&r->rhs_loc, Wother,
|
||||||
_("type clash on default action: <%s> != <%s>"),
|
_("type clash on default action: <%s> != <%s>"),
|
||||||
lhs_type, rhs_type);
|
lhs_type, rhs_type);
|
||||||
else
|
else
|
||||||
@@ -308,7 +308,7 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
if (is_cxx)
|
if (is_cxx)
|
||||||
{
|
{
|
||||||
code_props_rule_action_init (&r->action_props, "{ $$ = $1; }",
|
code_props_rule_action_init (&r->action_props, "{ $$ = $1; }",
|
||||||
r->location, r,
|
r->rhs_loc, r,
|
||||||
/* name */ NULL,
|
/* name */ NULL,
|
||||||
/* type */ NULL,
|
/* type */ NULL,
|
||||||
/* is_predicate */ false);
|
/* is_predicate */ false);
|
||||||
@@ -318,7 +318,7 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
}
|
}
|
||||||
/* Warn if there is no default for $$ but we need one. */
|
/* Warn if there is no default for $$ but we need one. */
|
||||||
else
|
else
|
||||||
complain (&r->location, Wother,
|
complain (&r->rhs_loc, Wother,
|
||||||
_("empty rule for typed nonterminal, and no action"));
|
_("empty rule for typed nonterminal, and no action"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,9 +335,9 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
{
|
{
|
||||||
warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
|
warnings warn_flag = midrule_warning ? Wmidrule_values : Wother;
|
||||||
if (n)
|
if (n)
|
||||||
complain (&l->location, warn_flag, _("unused value: $%d"), n);
|
complain (&l->sym_loc, warn_flag, _("unused value: $%d"), n);
|
||||||
else
|
else
|
||||||
complain (&l->location, warn_flag, _("unset value: $$"));
|
complain (&l->rhs_loc, warn_flag, _("unset value: $$"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -357,9 +357,10 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
&& !r->percent_empty_loc.start.file
|
&& !r->percent_empty_loc.start.file
|
||||||
&& warning_is_enabled (Wempty_rule))
|
&& warning_is_enabled (Wempty_rule))
|
||||||
{
|
{
|
||||||
complain (&r->location, Wempty_rule,
|
complain (&r->rhs_loc, Wempty_rule, _("empty rule without %%empty"));
|
||||||
_("empty rule without %%empty"));
|
location loc = r->rhs_loc;
|
||||||
fixits_register (&r->location, " %empty ");
|
loc.end = loc.start;
|
||||||
|
fixits_register (&loc, " %empty ");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See comments in grammar_current_rule_prec_set for how POSIX
|
/* See comments in grammar_current_rule_prec_set for how POSIX
|
||||||
@@ -369,12 +370,12 @@ grammar_rule_check_and_complete (symbol_list *r)
|
|||||||
&& r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"'
|
&& r->ruleprec->tag[0] != '\'' && r->ruleprec->tag[0] != '"'
|
||||||
&& r->ruleprec->content->status != declared
|
&& r->ruleprec->content->status != declared
|
||||||
&& !r->ruleprec->content->prec)
|
&& !r->ruleprec->content->prec)
|
||||||
complain (&r->location, Wother,
|
complain (&r->rhs_loc, Wother,
|
||||||
_("token for %%prec is not defined: %s"), r->ruleprec->tag);
|
_("token for %%prec is not defined: %s"), r->ruleprec->tag);
|
||||||
|
|
||||||
/* Check that the (main) action was not typed. */
|
/* Check that the (main) action was not typed. */
|
||||||
if (r->action_props.type)
|
if (r->action_props.type)
|
||||||
complain (&r->location, Wother,
|
complain (&r->rhs_loc, Wother,
|
||||||
_("only midrule actions can be typed: %s"), r->action_props.type);
|
_("only midrule actions can be typed: %s"), r->action_props.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -387,8 +388,8 @@ void
|
|||||||
grammar_current_rule_end (location loc)
|
grammar_current_rule_end (location loc)
|
||||||
{
|
{
|
||||||
/* Put an empty link in the list to mark the end of this rule */
|
/* Put an empty link in the list to mark the end of this rule */
|
||||||
grammar_symbol_append (NULL, grammar_end->location);
|
grammar_symbol_append (NULL, grammar_end->rhs_loc);
|
||||||
current_rule->location = loc;
|
current_rule->rhs_loc = loc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -408,11 +409,11 @@ grammar_midrule_action (void)
|
|||||||
|
|
||||||
/* Make a DUMMY nonterminal, whose location is that of the midrule
|
/* Make a DUMMY nonterminal, whose location is that of the midrule
|
||||||
action. Create the MIDRULE. */
|
action. Create the MIDRULE. */
|
||||||
location dummy_location = current_rule->action_props.location;
|
location dummy_loc = current_rule->action_props.location;
|
||||||
symbol *dummy = dummy_symbol_get (dummy_location);
|
symbol *dummy = dummy_symbol_get (dummy_loc);
|
||||||
symbol_type_set(dummy,
|
symbol_type_set(dummy,
|
||||||
current_rule->action_props.type, current_rule->action_props.location);
|
current_rule->action_props.type, current_rule->action_props.location);
|
||||||
symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location);
|
symbol_list *midrule = symbol_list_sym_new (dummy, dummy_loc);
|
||||||
|
|
||||||
/* Remember named_ref of previous action. */
|
/* Remember named_ref of previous action. */
|
||||||
named_ref *action_name = current_rule->action_props.named_ref;
|
named_ref *action_name = current_rule->action_props.named_ref;
|
||||||
@@ -422,7 +423,7 @@ grammar_midrule_action (void)
|
|||||||
++nrules;
|
++nrules;
|
||||||
++nritems;
|
++nritems;
|
||||||
/* Attach its location and actions to that of the DUMMY. */
|
/* Attach its location and actions to that of the DUMMY. */
|
||||||
midrule->location = dummy_location;
|
midrule->rhs_loc = dummy_loc;
|
||||||
code_props_rule_action_init (&midrule->action_props,
|
code_props_rule_action_init (&midrule->action_props,
|
||||||
current_rule->action_props.code,
|
current_rule->action_props.code,
|
||||||
current_rule->action_props.location,
|
current_rule->action_props.location,
|
||||||
@@ -443,14 +444,14 @@ grammar_midrule_action (void)
|
|||||||
grammar = midrule;
|
grammar = midrule;
|
||||||
|
|
||||||
/* End the dummy's rule. */
|
/* End the dummy's rule. */
|
||||||
midrule->next = symbol_list_sym_new (NULL, dummy_location);
|
midrule->next = symbol_list_sym_new (NULL, dummy_loc);
|
||||||
midrule->next->next = current_rule;
|
midrule->next->next = current_rule;
|
||||||
|
|
||||||
previous_rule_end = midrule->next;
|
previous_rule_end = midrule->next;
|
||||||
|
|
||||||
/* Insert the dummy nonterminal replacing the midrule action into
|
/* Insert the dummy nonterminal replacing the midrule action into
|
||||||
the current rule. Bind it to its dedicated rule. */
|
the current rule. Bind it to its dedicated rule. */
|
||||||
grammar_current_rule_symbol_append (dummy, dummy_location,
|
grammar_current_rule_symbol_append (dummy, dummy_loc,
|
||||||
action_name);
|
action_name);
|
||||||
grammar_end->midrule = midrule;
|
grammar_end->midrule = midrule;
|
||||||
midrule->midrule_parent_rule = current_rule;
|
midrule->midrule_parent_rule = current_rule;
|
||||||
@@ -509,11 +510,11 @@ grammar_current_rule_dprec_set (int dprec, location loc)
|
|||||||
"%dprec");
|
"%dprec");
|
||||||
else if (current_rule->dprec != 0)
|
else if (current_rule->dprec != 0)
|
||||||
duplicate_rule_directive ("%dprec",
|
duplicate_rule_directive ("%dprec",
|
||||||
current_rule->dprec_location, loc);
|
current_rule->dprec_loc, loc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
current_rule->dprec = dprec;
|
current_rule->dprec = dprec;
|
||||||
current_rule->dprec_location = loc;
|
current_rule->dprec_loc = loc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,11 +529,11 @@ grammar_current_rule_merge_set (uniqstr name, location loc)
|
|||||||
"%merge");
|
"%merge");
|
||||||
if (current_rule->merger != 0)
|
if (current_rule->merger != 0)
|
||||||
duplicate_rule_directive ("%merge",
|
duplicate_rule_directive ("%merge",
|
||||||
current_rule->merger_declaration_location, loc);
|
current_rule->merger_declaration_loc, loc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
current_rule->merger = get_merge_function (name);
|
current_rule->merger = get_merge_function (name);
|
||||||
current_rule->merger_declaration_location = loc;
|
current_rule->merger_declaration_loc = loc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -622,7 +623,7 @@ packgram (void)
|
|||||||
{
|
{
|
||||||
symbol_list *lhs = p;
|
symbol_list *lhs = p;
|
||||||
record_merge_function_type (lhs->merger, lhs->content.sym->content->type_name,
|
record_merge_function_type (lhs->merger, lhs->content.sym->content->type_name,
|
||||||
lhs->merger_declaration_location);
|
lhs->merger_declaration_loc);
|
||||||
/* If the midrule's $$ is set or its $n is used, remove the '$' from the
|
/* If the midrule's $$ is set or its $n is used, remove the '$' from the
|
||||||
symbol name so that it's a user-defined symbol so that the default
|
symbol name so that it's a user-defined symbol so that the default
|
||||||
%destructor and %printer apply. */
|
%destructor and %printer apply. */
|
||||||
@@ -647,10 +648,10 @@ packgram (void)
|
|||||||
rules[ruleno].dprec = lhs->dprec;
|
rules[ruleno].dprec = lhs->dprec;
|
||||||
rules[ruleno].merger = lhs->merger;
|
rules[ruleno].merger = lhs->merger;
|
||||||
rules[ruleno].precsym = NULL;
|
rules[ruleno].precsym = NULL;
|
||||||
rules[ruleno].location = lhs->location;
|
rules[ruleno].location = lhs->rhs_loc;
|
||||||
rules[ruleno].useful = true;
|
rules[ruleno].useful = true;
|
||||||
rules[ruleno].action = lhs->action_props.code;
|
rules[ruleno].action = lhs->action_props.code;
|
||||||
rules[ruleno].action_location = lhs->action_props.location;
|
rules[ruleno].action_loc = lhs->action_props.location;
|
||||||
rules[ruleno].is_predicate = lhs->action_props.is_predicate;
|
rules[ruleno].is_predicate = lhs->action_props.is_predicate;
|
||||||
rules[ruleno].expected_sr_conflicts = lhs->expected_sr_conflicts;
|
rules[ruleno].expected_sr_conflicts = lhs->expected_sr_conflicts;
|
||||||
rules[ruleno].expected_rr_conflicts = lhs->expected_rr_conflicts;
|
rules[ruleno].expected_rr_conflicts = lhs->expected_rr_conflicts;
|
||||||
@@ -713,18 +714,18 @@ reader (void)
|
|||||||
symbols_new ();
|
symbols_new ();
|
||||||
|
|
||||||
/* Construct the accept symbol. */
|
/* Construct the accept symbol. */
|
||||||
accept = symbol_get ("$accept", empty_location);
|
accept = symbol_get ("$accept", empty_loc);
|
||||||
accept->content->class = nterm_sym;
|
accept->content->class = nterm_sym;
|
||||||
accept->content->number = nvars++;
|
accept->content->number = nvars++;
|
||||||
|
|
||||||
/* Construct the error token */
|
/* Construct the error token */
|
||||||
errtoken = symbol_get ("error", empty_location);
|
errtoken = symbol_get ("error", empty_loc);
|
||||||
errtoken->content->class = token_sym;
|
errtoken->content->class = token_sym;
|
||||||
errtoken->content->number = ntokens++;
|
errtoken->content->number = ntokens++;
|
||||||
|
|
||||||
/* Construct a token that represents all undefined literal tokens.
|
/* Construct a token that represents all undefined literal tokens.
|
||||||
It is always token number 2. */
|
It is always token number 2. */
|
||||||
undeftoken = symbol_get ("$undefined", empty_location);
|
undeftoken = symbol_get ("$undefined", empty_loc);
|
||||||
undeftoken->content->class = token_sym;
|
undeftoken->content->class = token_sym;
|
||||||
undeftoken->content->number = ntokens++;
|
undeftoken->content->number = ntokens++;
|
||||||
|
|
||||||
@@ -801,7 +802,7 @@ check_and_convert_grammar (void)
|
|||||||
/* If the user did not define her ENDTOKEN, do it now. */
|
/* If the user did not define her ENDTOKEN, do it now. */
|
||||||
if (!endtoken)
|
if (!endtoken)
|
||||||
{
|
{
|
||||||
endtoken = symbol_get ("$end", empty_location);
|
endtoken = symbol_get ("$end", empty_loc);
|
||||||
endtoken->content->class = token_sym;
|
endtoken->content->class = token_sym;
|
||||||
endtoken->content->number = 0;
|
endtoken->content->number = 0;
|
||||||
/* Value specified by POSIX. */
|
/* Value specified by POSIX. */
|
||||||
@@ -823,11 +824,11 @@ check_and_convert_grammar (void)
|
|||||||
|
|
||||||
$accept: %start $end. */
|
$accept: %start $end. */
|
||||||
{
|
{
|
||||||
symbol_list *p = symbol_list_sym_new (accept, empty_location);
|
symbol_list *p = symbol_list_sym_new (accept, empty_loc);
|
||||||
p->location = grammar->location;
|
p->rhs_loc = grammar->rhs_loc;
|
||||||
p->next = symbol_list_sym_new (startsymbol, empty_location);
|
p->next = symbol_list_sym_new (startsymbol, empty_loc);
|
||||||
p->next->next = symbol_list_sym_new (endtoken, empty_location);
|
p->next->next = symbol_list_sym_new (endtoken, empty_loc);
|
||||||
p->next->next->next = symbol_list_sym_new (NULL, empty_location);
|
p->next->next->next = symbol_list_sym_new (NULL, empty_loc);
|
||||||
p->next->next->next->next = grammar;
|
p->next->next->next->next = grammar;
|
||||||
nrules += 1;
|
nrules += 1;
|
||||||
nritems += 3;
|
nritems += 3;
|
||||||
|
|||||||
+1
-1
@@ -32,7 +32,7 @@ typedef struct merger_list
|
|||||||
struct merger_list* next;
|
struct merger_list* next;
|
||||||
uniqstr name;
|
uniqstr name;
|
||||||
uniqstr type;
|
uniqstr type;
|
||||||
location type_declaration_location;
|
location type_declaration_loc;
|
||||||
} merger_list;
|
} merger_list;
|
||||||
|
|
||||||
/* From the parser. */
|
/* From the parser. */
|
||||||
|
|||||||
+1
-1
@@ -382,7 +382,7 @@ reduce_grammar (void)
|
|||||||
reduce_print ();
|
reduce_print ();
|
||||||
|
|
||||||
if (!bitset_test (N, accept->content->number - ntokens))
|
if (!bitset_test (N, accept->content->number - ntokens))
|
||||||
complain (&startsymbol_location, fatal,
|
complain (&startsymbol_loc, fatal,
|
||||||
_("start symbol %s does not derive any sentence"),
|
_("start symbol %s does not derive any sentence"),
|
||||||
startsymbol->tag);
|
startsymbol->tag);
|
||||||
|
|
||||||
|
|||||||
+5
-5
@@ -57,8 +57,8 @@ static void handle_action_at (symbol_list *rule, char *cp, location at_loc);
|
|||||||
/* A string to be pushed to obstack after dollar/at has been handled. */
|
/* A string to be pushed to obstack after dollar/at has been handled. */
|
||||||
static char *ref_tail_fields;
|
static char *ref_tail_fields;
|
||||||
|
|
||||||
static location the_location;
|
static location current_loc;
|
||||||
static location *loc = &the_location;
|
static location *loc = ¤t_loc;
|
||||||
|
|
||||||
/* A string representing the most recent translation. */
|
/* A string representing the most recent translation. */
|
||||||
static char *last_string;
|
static char *last_string;
|
||||||
@@ -187,7 +187,7 @@ ref -?[0-9]+|{id}|"["{id}"]"|"$"
|
|||||||
}
|
}
|
||||||
"@$" {
|
"@$" {
|
||||||
obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
|
obstack_sgrow (&obstack_for_string, "]b4_at_dollar[");
|
||||||
muscle_percent_define_ensure("locations", the_location, true);
|
muscle_percent_define_ensure("locations", *loc, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -507,12 +507,12 @@ parse_ref (char *cp, symbol_list *rule, int rule_length,
|
|||||||
dollar_or_at);
|
dollar_or_at);
|
||||||
}
|
}
|
||||||
else if (midrule_rhs_index)
|
else if (midrule_rhs_index)
|
||||||
complain_indent (&rule->location, complaint, &indent,
|
complain_indent (&rule->rhs_loc, complaint, &indent,
|
||||||
_("symbol not found in production before $%d: "
|
_("symbol not found in production before $%d: "
|
||||||
"%.*s"),
|
"%.*s"),
|
||||||
midrule_rhs_index, len, cp);
|
midrule_rhs_index, len, cp);
|
||||||
else
|
else
|
||||||
complain_indent (&rule->location, complaint, &indent,
|
complain_indent (&rule->rhs_loc, complaint, &indent,
|
||||||
_("symbol not found in production: %.*s"),
|
_("symbol not found in production: %.*s"),
|
||||||
len, cp);
|
len, cp);
|
||||||
|
|
||||||
|
|||||||
+5
-3
@@ -161,7 +161,7 @@ eqopt ({sp}=)?
|
|||||||
int context_state PACIFY_CC (= 0);
|
int context_state PACIFY_CC (= 0);
|
||||||
|
|
||||||
/* Location of most recent identifier, when applicable. */
|
/* Location of most recent identifier, when applicable. */
|
||||||
location id_loc PACIFY_CC (= empty_location);
|
location id_loc PACIFY_CC (= empty_loc);
|
||||||
|
|
||||||
/* Where containing code started, when applicable. Its initial
|
/* Where containing code started, when applicable. Its initial
|
||||||
value is relevant only when yylex is invoked in the SC_EPILOGUE
|
value is relevant only when yylex is invoked in the SC_EPILOGUE
|
||||||
@@ -252,7 +252,6 @@ eqopt ({sp}=)?
|
|||||||
"%prec" return PERCENT_PREC;
|
"%prec" return PERCENT_PREC;
|
||||||
"%precedence" return BISON_DIRECTIVE (PRECEDENCE);
|
"%precedence" return BISON_DIRECTIVE (PRECEDENCE);
|
||||||
"%printer" return BISON_DIRECTIVE (PRINTER);
|
"%printer" return BISON_DIRECTIVE (PRINTER);
|
||||||
"%pure-parser" RETURN_PERCENT_FLAG ("api.pure");
|
|
||||||
"%require" return BISON_DIRECTIVE (REQUIRE);
|
"%require" return BISON_DIRECTIVE (REQUIRE);
|
||||||
"%right" return PERCENT_RIGHT;
|
"%right" return PERCENT_RIGHT;
|
||||||
"%skeleton" return BISON_DIRECTIVE (SKELETON);
|
"%skeleton" return BISON_DIRECTIVE (SKELETON);
|
||||||
@@ -265,6 +264,10 @@ eqopt ({sp}=)?
|
|||||||
"%verbose" return BISON_DIRECTIVE (VERBOSE);
|
"%verbose" return BISON_DIRECTIVE (VERBOSE);
|
||||||
"%yacc" RETURN_VALUE (PERCENT_YACC, uniqstr_new (yytext));
|
"%yacc" RETURN_VALUE (PERCENT_YACC, uniqstr_new (yytext));
|
||||||
|
|
||||||
|
/* Deprecated since Bison 2.3b (2008-05-27), but the warning is
|
||||||
|
issued only since Bison 3.4. */
|
||||||
|
"%pure"[-_]"parser" RETURN_VALUE (PERCENT_PURE_PARSER, uniqstr_new (yytext));
|
||||||
|
|
||||||
/* Deprecated since Bison 3.0 (2013-07-25), but the warning is
|
/* Deprecated since Bison 3.0 (2013-07-25), but the warning is
|
||||||
issued only since Bison 3.3. */
|
issued only since Bison 3.3. */
|
||||||
"%error-verbose" RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
|
"%error-verbose" RETURN_VALUE (PERCENT_ERROR_VERBOSE, uniqstr_new (yytext));
|
||||||
@@ -282,7 +285,6 @@ eqopt ({sp}=)?
|
|||||||
"%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec");
|
"%no"[-_]"default"[-_]"prec" DEPRECATED ("%no-default-prec");
|
||||||
"%no"[-_]"lines" DEPRECATED ("%no-lines");
|
"%no"[-_]"lines" DEPRECATED ("%no-lines");
|
||||||
"%output"{eqopt} DEPRECATED ("%output");
|
"%output"{eqopt} DEPRECATED ("%output");
|
||||||
"%pure"[-_]"parser" DEPRECATED ("%pure-parser");
|
|
||||||
"%token"[-_]"table" DEPRECATED ("%token-table");
|
"%token"[-_]"table" DEPRECATED ("%token-table");
|
||||||
|
|
||||||
"%"{id} {
|
"%"{id} {
|
||||||
|
|||||||
+6
-5
@@ -34,7 +34,7 @@ symbol_list_sym_new (symbol *sym, location loc)
|
|||||||
|
|
||||||
res->content_type = SYMLIST_SYMBOL;
|
res->content_type = SYMLIST_SYMBOL;
|
||||||
res->content.sym = sym;
|
res->content.sym = sym;
|
||||||
res->location = res->sym_loc = loc;
|
res->sym_loc = loc;
|
||||||
res->named_ref = NULL;
|
res->named_ref = NULL;
|
||||||
|
|
||||||
res->midrule = NULL;
|
res->midrule = NULL;
|
||||||
@@ -42,13 +42,14 @@ symbol_list_sym_new (symbol *sym, location loc)
|
|||||||
res->midrule_parent_rhs_index = 0;
|
res->midrule_parent_rhs_index = 0;
|
||||||
|
|
||||||
/* Members used for LHS only. */
|
/* Members used for LHS only. */
|
||||||
|
res->rhs_loc = empty_loc;
|
||||||
res->ruleprec = NULL;
|
res->ruleprec = NULL;
|
||||||
res->percent_empty_loc = empty_location;
|
res->percent_empty_loc = empty_loc;
|
||||||
code_props_none_init (&res->action_props);
|
code_props_none_init (&res->action_props);
|
||||||
res->dprec = 0;
|
res->dprec = 0;
|
||||||
res->dprec_location = empty_location;
|
res->dprec_loc = empty_loc;
|
||||||
res->merger = 0;
|
res->merger = 0;
|
||||||
res->merger_declaration_location = empty_location;
|
res->merger_declaration_loc = empty_loc;
|
||||||
res->expected_sr_conflicts = -1;
|
res->expected_sr_conflicts = -1;
|
||||||
res->expected_rr_conflicts = -1;
|
res->expected_rr_conflicts = -1;
|
||||||
|
|
||||||
@@ -73,7 +74,7 @@ symbol_list_type_new (uniqstr type_name, location loc)
|
|||||||
res->content.sem_type->location = loc;
|
res->content.sem_type->location = loc;
|
||||||
res->content.sem_type->status = undeclared;
|
res->content.sem_type->status = undeclared;
|
||||||
|
|
||||||
res->location = res->sym_loc = loc;
|
res->sym_loc = loc;
|
||||||
res->named_ref = NULL;
|
res->named_ref = NULL;
|
||||||
res->next = NULL;
|
res->next = NULL;
|
||||||
|
|
||||||
|
|||||||
+6
-4
@@ -50,7 +50,6 @@ typedef struct symbol_list
|
|||||||
*/
|
*/
|
||||||
semantic_type *sem_type;
|
semantic_type *sem_type;
|
||||||
} content;
|
} content;
|
||||||
location location;
|
|
||||||
|
|
||||||
/* Named reference. */
|
/* Named reference. */
|
||||||
named_ref *named_ref;
|
named_ref *named_ref;
|
||||||
@@ -74,6 +73,9 @@ typedef struct symbol_list
|
|||||||
| when several RHSs are bound to a single lhs via "|"). |
|
| when several RHSs are bound to a single lhs via "|"). |
|
||||||
`--------------------------------------------------------------*/
|
`--------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Location of the RHS. */
|
||||||
|
location rhs_loc;
|
||||||
|
|
||||||
/* Precedence/associativity. */
|
/* Precedence/associativity. */
|
||||||
symbol *ruleprec;
|
symbol *ruleprec;
|
||||||
|
|
||||||
@@ -82,13 +84,13 @@ typedef struct symbol_list
|
|||||||
code_props action_props;
|
code_props action_props;
|
||||||
|
|
||||||
/* The location of the first %empty for this rule, or \a
|
/* The location of the first %empty for this rule, or \a
|
||||||
empty_location. */
|
empty_loc. */
|
||||||
location percent_empty_loc;
|
location percent_empty_loc;
|
||||||
|
|
||||||
int dprec;
|
int dprec;
|
||||||
location dprec_location;
|
location dprec_loc;
|
||||||
int merger;
|
int merger;
|
||||||
location merger_declaration_location;
|
location merger_declaration_loc;
|
||||||
|
|
||||||
/* Counts of the number of expected conflicts for this rule, or -1 if none
|
/* Counts of the number of expected conflicts for this rule, or -1 if none
|
||||||
given. */
|
given. */
|
||||||
|
|||||||
+15
-15
@@ -46,7 +46,7 @@ symbol *undeftoken = NULL;
|
|||||||
symbol *endtoken = NULL;
|
symbol *endtoken = NULL;
|
||||||
symbol *accept = NULL;
|
symbol *accept = NULL;
|
||||||
symbol *startsymbol = NULL;
|
symbol *startsymbol = NULL;
|
||||||
location startsymbol_location;
|
location startsymbol_loc;
|
||||||
|
|
||||||
/* Precedence relation graph. */
|
/* Precedence relation graph. */
|
||||||
static symgraph **prec_nodes;
|
static symgraph **prec_nodes;
|
||||||
@@ -198,7 +198,7 @@ semantic_type_new (uniqstr tag, const location *loc)
|
|||||||
|
|
||||||
uniqstr_assert (tag);
|
uniqstr_assert (tag);
|
||||||
res->tag = tag;
|
res->tag = tag;
|
||||||
res->location = loc ? *loc : empty_location;
|
res->location = loc ? *loc : empty_loc;
|
||||||
res->status = undeclared;
|
res->status = undeclared;
|
||||||
for (int i = 0; i < CODE_PROPS_SIZE; ++i)
|
for (int i = 0; i < CODE_PROPS_SIZE; ++i)
|
||||||
code_props_none_init (&res->props[i]);
|
code_props_none_init (&res->props[i]);
|
||||||
@@ -339,12 +339,12 @@ symbol_type_set (symbol *sym, uniqstr type_name, location loc)
|
|||||||
tag_seen = true;
|
tag_seen = true;
|
||||||
if (sym->content->type_name)
|
if (sym->content->type_name)
|
||||||
complain_symbol_redeclared (sym, "%type",
|
complain_symbol_redeclared (sym, "%type",
|
||||||
sym->content->type_location, loc);
|
sym->content->type_loc, loc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
uniqstr_assert (type_name);
|
uniqstr_assert (type_name);
|
||||||
sym->content->type_name = type_name;
|
sym->content->type_name = type_name;
|
||||||
sym->content->type_location = loc;
|
sym->content->type_loc = loc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -426,12 +426,12 @@ symbol_precedence_set (symbol *sym, int prec, assoc a, location loc)
|
|||||||
sym_content *s = sym->content;
|
sym_content *s = sym->content;
|
||||||
if (s->prec)
|
if (s->prec)
|
||||||
complain_symbol_redeclared (sym, assoc_to_string (a),
|
complain_symbol_redeclared (sym, assoc_to_string (a),
|
||||||
s->prec_location, loc);
|
s->prec_loc, loc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
s->prec = prec;
|
s->prec = prec;
|
||||||
s->assoc = a;
|
s->assoc = a;
|
||||||
s->prec_location = loc;
|
s->prec_loc = loc;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,10 +587,10 @@ symbol_merge_properties (symbol *sym, symbol *str)
|
|||||||
{
|
{
|
||||||
if (str->content->type_name)
|
if (str->content->type_name)
|
||||||
symbol_type_set (sym,
|
symbol_type_set (sym,
|
||||||
str->content->type_name, str->content->type_location);
|
str->content->type_name, str->content->type_loc);
|
||||||
else
|
else
|
||||||
symbol_type_set (str,
|
symbol_type_set (str,
|
||||||
sym->content->type_name, sym->content->type_location);
|
sym->content->type_name, sym->content->type_loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -604,10 +604,10 @@ symbol_merge_properties (symbol *sym, symbol *str)
|
|||||||
{
|
{
|
||||||
if (str->content->prec)
|
if (str->content->prec)
|
||||||
symbol_precedence_set (sym, str->content->prec, str->content->assoc,
|
symbol_precedence_set (sym, str->content->prec, str->content->assoc,
|
||||||
str->content->prec_location);
|
str->content->prec_loc);
|
||||||
else
|
else
|
||||||
symbol_precedence_set (str, sym->content->prec, sym->content->assoc,
|
symbol_precedence_set (str, sym->content->prec, sym->content->assoc,
|
||||||
sym->content->prec_location);
|
sym->content->prec_loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1034,11 +1034,11 @@ symbols_pack (void)
|
|||||||
symbols_token_translations_init ();
|
symbols_token_translations_init ();
|
||||||
|
|
||||||
if (startsymbol->content->class == unknown_sym)
|
if (startsymbol->content->class == unknown_sym)
|
||||||
complain (&startsymbol_location, fatal,
|
complain (&startsymbol_loc, fatal,
|
||||||
_("the start symbol %s is undefined"),
|
_("the start symbol %s is undefined"),
|
||||||
startsymbol->tag);
|
startsymbol->tag);
|
||||||
else if (startsymbol->content->class == token_sym)
|
else if (startsymbol->content->class == token_sym)
|
||||||
complain (&startsymbol_location, fatal,
|
complain (&startsymbol_loc, fatal,
|
||||||
_("the start symbol %s is a token"),
|
_("the start symbol %s is a token"),
|
||||||
startsymbol->tag);
|
startsymbol->tag);
|
||||||
}
|
}
|
||||||
@@ -1209,14 +1209,14 @@ print_precedence_warnings (void)
|
|||||||
&& !prec_nodes[i]->succ)
|
&& !prec_nodes[i]->succ)
|
||||||
{
|
{
|
||||||
if (is_assoc_useless (s))
|
if (is_assoc_useless (s))
|
||||||
complain (&s->content->prec_location, Wprecedence,
|
complain (&s->content->prec_loc, Wprecedence,
|
||||||
_("useless precedence and associativity for %s"), s->tag);
|
_("useless precedence and associativity for %s"), s->tag);
|
||||||
else if (s->content->assoc == precedence_assoc)
|
else if (s->content->assoc == precedence_assoc)
|
||||||
complain (&s->content->prec_location, Wprecedence,
|
complain (&s->content->prec_loc, Wprecedence,
|
||||||
_("useless precedence for %s"), s->tag);
|
_("useless precedence for %s"), s->tag);
|
||||||
}
|
}
|
||||||
else if (is_assoc_useless (s))
|
else if (is_assoc_useless (s))
|
||||||
complain (&s->content->prec_location, Wprecedence,
|
complain (&s->content->prec_loc, Wprecedence,
|
||||||
_("useless associativity for %s, use %%precedence"), s->tag);
|
_("useless associativity for %s, use %%precedence"), s->tag);
|
||||||
}
|
}
|
||||||
free (used_assoc);
|
free (used_assoc);
|
||||||
|
|||||||
+3
-3
@@ -122,7 +122,7 @@ struct sym_content
|
|||||||
uniqstr type_name;
|
uniqstr type_name;
|
||||||
|
|
||||||
/** Its \c \%type's location. */
|
/** Its \c \%type's location. */
|
||||||
location type_location;
|
location type_loc;
|
||||||
|
|
||||||
/** Any \c \%destructor (resp. \%printer) declared specificially for this
|
/** Any \c \%destructor (resp. \%printer) declared specificially for this
|
||||||
symbol.
|
symbol.
|
||||||
@@ -134,7 +134,7 @@ struct sym_content
|
|||||||
code_props props[CODE_PROPS_SIZE];
|
code_props props[CODE_PROPS_SIZE];
|
||||||
|
|
||||||
symbol_number number;
|
symbol_number number;
|
||||||
location prec_location;
|
location prec_loc;
|
||||||
int prec;
|
int prec;
|
||||||
assoc assoc;
|
assoc assoc;
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ extern symbol *accept;
|
|||||||
/** The user start symbol. */
|
/** The user start symbol. */
|
||||||
extern symbol *startsymbol;
|
extern symbol *startsymbol;
|
||||||
/** The location of the \c \%start declaration. */
|
/** The location of the \c \%start declaration. */
|
||||||
extern location startsymbol_location;
|
extern location startsymbol_loc;
|
||||||
|
|
||||||
/** Whether a symbol declared with a type tag. */
|
/** Whether a symbol declared with a type tag. */
|
||||||
extern bool tag_seen;
|
extern bool tag_seen;
|
||||||
|
|||||||
+43
-11
@@ -196,16 +196,8 @@ one.y:11.3-8: previous declaration
|
|||||||
bison: file 'one.y' was updated (backup: 'one.y~')
|
bison: file 'one.y' was updated (backup: 'one.y~')
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CHECK([cat one.y], [],
|
AT_CHECK([sed -e '1,8d' one.y], [],
|
||||||
[[%code top {
|
[[%%
|
||||||
/* Load config.h, and adjust to the compiler.
|
|
||||||
We used to do it here, but each time we add a new line,
|
|
||||||
we have to adjust all the line numbers in error messages.
|
|
||||||
It's simpler to use a constant include to a varying file. */
|
|
||||||
#include <testsuite.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
%%
|
|
||||||
exp:
|
exp:
|
||||||
%empty {} @&t@
|
%empty {} @&t@
|
||||||
;
|
;
|
||||||
@@ -267,6 +259,46 @@ AT_BISON_OPTION_POPDEFS
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## -------------------- ##
|
||||||
|
## Add missing %empty. ##
|
||||||
|
## -------------------- ##
|
||||||
|
|
||||||
|
AT_SETUP([Add missing %empty])
|
||||||
|
|
||||||
|
AT_DATA([input.y],
|
||||||
|
[[%%
|
||||||
|
exp: a b c d e
|
||||||
|
a: {}
|
||||||
|
b:{
|
||||||
|
};
|
||||||
|
c:
|
||||||
|
d
|
||||||
|
:
|
||||||
|
e:
|
||||||
|
%%
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_BISON_CHECK([--update -Wall input.y], [], [], [ignore])
|
||||||
|
AT_CHECK([cat input.y], [],
|
||||||
|
[[%%
|
||||||
|
exp: a b c d e
|
||||||
|
a: %empty {}
|
||||||
|
b: %empty {
|
||||||
|
};
|
||||||
|
c: %empty @&t@
|
||||||
|
d
|
||||||
|
: %empty @&t@
|
||||||
|
e: %empty @&t@
|
||||||
|
%%
|
||||||
|
]])
|
||||||
|
|
||||||
|
# No warnings.
|
||||||
|
AT_BISON_CHECK([-Wall input.y])
|
||||||
|
|
||||||
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
## ------------------ ##
|
## ------------------ ##
|
||||||
## Initial location. ##
|
## Initial location. ##
|
||||||
## ------------------ ##
|
## ------------------ ##
|
||||||
@@ -1838,7 +1870,7 @@ AT_DATA_GRAMMAR([input.y],
|
|||||||
[[
|
[[
|
||||||
%define parse.error verbose
|
%define parse.error verbose
|
||||||
%debug
|
%debug
|
||||||
%pure-parser
|
%define api.pure
|
||||||
%code {
|
%code {
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
# include <stdlib.h>
|
# include <stdlib.h>
|
||||||
|
|||||||
@@ -118,8 +118,14 @@ fi
|
|||||||
## Other. ##
|
## Other. ##
|
||||||
## ------- ##
|
## ------- ##
|
||||||
|
|
||||||
|
# Empty if no D compiler was found.
|
||||||
: ${DC='@DC@'}
|
: ${DC='@DC@'}
|
||||||
: ${DCFLAGS='@DCFLAGS@'}
|
: ${DCFLAGS='@DCFLAGS@'}
|
||||||
|
if test x"$DC" = x; then
|
||||||
|
BISON_DC_WORKS=false
|
||||||
|
else
|
||||||
|
BISON_DC_WORKS=true
|
||||||
|
fi
|
||||||
|
|
||||||
# Empty if no javac was found
|
# Empty if no javac was found
|
||||||
: ${CONF_JAVAC='@CONF_JAVAC@'}
|
: ${CONF_JAVAC='@CONF_JAVAC@'}
|
||||||
|
|||||||
+1
-1
@@ -893,7 +893,7 @@ error-reduce:
|
|||||||
|
|
||||||
consistent-error:
|
consistent-error:
|
||||||
'a'
|
'a'
|
||||||
| /*empty*/ %prec 'a'
|
| %empty %prec 'a'
|
||||||
;
|
;
|
||||||
|
|
||||||
// Provide another context in which all rules are useful so that this
|
// Provide another context in which all rules are useful so that this
|
||||||
|
|||||||
+5
-5
@@ -278,17 +278,17 @@ AT_DATA([[input.y]],
|
|||||||
[[%expect 1
|
[[%expect 1
|
||||||
%%
|
%%
|
||||||
exp: e 'e';
|
exp: e 'e';
|
||||||
e: 'e' | /* Nothing. */;
|
e: 'e' | %empty;
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([-o input.c input.y], 0, [],
|
AT_BISON_CHECK([-o input.c input.y], 0, [],
|
||||||
[[input.y:4.9: warning: rule useless in parser due to conflicts [-Wother]
|
[[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [],
|
AT_BISON_CHECK([-fcaret -o input.c input.y], 0, [],
|
||||||
[[input.y:4.9: warning: rule useless in parser due to conflicts [-Wother]
|
[[input.y:4.10-15: warning: rule useless in parser due to conflicts [-Wother]
|
||||||
4 | e: 'e' | /* Nothing. */;
|
4 | e: 'e' | %empty;
|
||||||
| ^
|
| ^~~~~~
|
||||||
]])
|
]])
|
||||||
|
|
||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ AT_BANNER([[Diagnostics.]])
|
|||||||
|
|
||||||
# AT_TEST($1: TITLE, $2: GRAMMAR, $3: EXIT-STATUS, $4: OUTPUT-WITH-STYLE)
|
# AT_TEST($1: TITLE, $2: GRAMMAR, $3: EXIT-STATUS, $4: OUTPUT-WITH-STYLE)
|
||||||
# -----------------------------------------------------------------------
|
# -----------------------------------------------------------------------
|
||||||
|
# Run Bison on GRAMMAR with debugging style enabled, and expect
|
||||||
|
# OUTPUT-WITH-STYLE as diagnostics.
|
||||||
m4_pushdef([AT_TEST],
|
m4_pushdef([AT_TEST],
|
||||||
[
|
[
|
||||||
AT_SETUP([$1])
|
AT_SETUP([$1])
|
||||||
@@ -43,7 +45,7 @@ AT_CHECK([perl -p -e 's{</?\w+>}{}g' <experr.orig >experr])
|
|||||||
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret -Wall input.y], [$3], [], [experr])
|
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret -Wall input.y], [$3], [], [experr])
|
||||||
|
|
||||||
AT_CHECK([cp experr.orig experr])
|
AT_CHECK([cp experr.orig experr])
|
||||||
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret --style=debug -Wall input.y], [$3], [], [experr])
|
AT_CHECK([LC_ALL=en_US.UTF-8 bison -fcaret --color=debug -Wall input.y], [$3], [], [experr])
|
||||||
|
|
||||||
AT_BISON_OPTION_POPDEFS
|
AT_BISON_OPTION_POPDEFS
|
||||||
|
|
||||||
@@ -221,7 +223,7 @@ input.y: <warning>warning:</warning> fix-its can be applied. Rerun with option
|
|||||||
|
|
||||||
# Locations coming from m4 need the byte-column for diagnostics.
|
# Locations coming from m4 need the byte-column for diagnostics.
|
||||||
|
|
||||||
AT_TEST([[Locations from M4]],
|
AT_TEST([[Tabulations and multibyte characters from M4]],
|
||||||
[[%define api.prefix {sun}
|
[[%define api.prefix {sun}
|
||||||
%define api.prefix {🌞}
|
%define api.prefix {🌞}
|
||||||
%%
|
%%
|
||||||
|
|||||||
@@ -591,7 +591,7 @@ AT_DATA_GRAMMAR([glr-regr7.y],
|
|||||||
start:
|
start:
|
||||||
stack1 start
|
stack1 start
|
||||||
| stack2 start
|
| stack2 start
|
||||||
| /* empty */
|
| %empty
|
||||||
;
|
;
|
||||||
stack1: 'a' ;
|
stack1: 'a' ;
|
||||||
stack2: 'a' ;
|
stack2: 'a' ;
|
||||||
@@ -680,11 +680,11 @@ InterfaceDeclaration : OptConstantWord %dprec 1
|
|||||||
| OptSignalWord %dprec 2
|
| OptSignalWord %dprec 2
|
||||||
;
|
;
|
||||||
|
|
||||||
OptConstantWord : /* empty */
|
OptConstantWord : %empty
|
||||||
| T_CONSTANT
|
| T_CONSTANT
|
||||||
;
|
;
|
||||||
|
|
||||||
OptSignalWord : /* empty */
|
OptSignalWord : %empty
|
||||||
{ printf("empty: %d/%d\n", @$.first_column, @$.last_column); }
|
{ printf("empty: %d/%d\n", @$.first_column, @$.last_column); }
|
||||||
| T_SIGNAL
|
| T_SIGNAL
|
||||||
;
|
;
|
||||||
|
|||||||
+5
-14
@@ -2556,8 +2556,8 @@ input.y:23.1-9: warning: deprecated directive: '%no_lines', use '%no-lines' [-Wd
|
|||||||
fix-it:"input.y":{23:1-23:10}:"%no-lines"
|
fix-it:"input.y":{23:1-23:10}:"%no-lines"
|
||||||
input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated]
|
input.y:24.1-9: warning: deprecated directive: '%output =', use '%output' [-Wdeprecated]
|
||||||
fix-it:"input.y":{24:1-24:10}:"%output"
|
fix-it:"input.y":{24:1-24:10}:"%output"
|
||||||
input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%pure-parser' [-Wdeprecated]
|
input.y:25.1-12: warning: deprecated directive: '%pure_parser', use '%define api.pure' [-Wdeprecated]
|
||||||
fix-it:"input.y":{25:1-25:13}:"%pure-parser"
|
fix-it:"input.y":{25:1-25:13}:"%define api.pure"
|
||||||
input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated]
|
input.y:26.1-12: warning: deprecated directive: '%token_table', use '%token-table' [-Wdeprecated]
|
||||||
fix-it:"input.y":{26:1-26:13}:"%token-table"
|
fix-it:"input.y":{26:1-26:13}:"%token-table"
|
||||||
input.y:27.1-14: warning: %define variable 'parse.error' redefined [-Wother]
|
input.y:27.1-14: warning: %define variable 'parse.error' redefined [-Wother]
|
||||||
@@ -2590,16 +2590,8 @@ AT_CHECK([diff input.y.orig input.y~])
|
|||||||
AT_CHECK([test ! -f output.c])
|
AT_CHECK([test ! -f output.c])
|
||||||
|
|
||||||
# Check the update.
|
# Check the update.
|
||||||
AT_CHECK([cat input.y], [],
|
AT_CHECK([sed -e '1,8d' input.y], [],
|
||||||
[[%code top {
|
[[
|
||||||
/* Load config.h, and adjust to the compiler.
|
|
||||||
We used to do it here, but each time we add a new line,
|
|
||||||
we have to adjust all the line numbers in error messages.
|
|
||||||
It's simpler to use a constant include to a varying file. */
|
|
||||||
#include <testsuite.h>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
%default-prec
|
%default-prec
|
||||||
%define parse.error verbose
|
%define parse.error verbose
|
||||||
%expect-rr 0
|
%expect-rr 0
|
||||||
@@ -2611,7 +2603,7 @@ AT_CHECK([cat input.y], [],
|
|||||||
%no-default-prec
|
%no-default-prec
|
||||||
%no-lines
|
%no-lines
|
||||||
%output "output.c"
|
%output "output.c"
|
||||||
%pure-parser
|
%define api.pure
|
||||||
%token-table
|
%token-table
|
||||||
%glr-parser
|
%glr-parser
|
||||||
%%
|
%%
|
||||||
@@ -2686,7 +2678,6 @@ AT_DATA_GRAMMAR([[input.y]],
|
|||||||
%no-default-prec
|
%no-default-prec
|
||||||
%no-lines
|
%no-lines
|
||||||
%output "foo"
|
%output "foo"
|
||||||
%pure-parser
|
|
||||||
%token-table
|
%token-table
|
||||||
%% exp : '0'
|
%% exp : '0'
|
||||||
]])
|
]])
|
||||||
|
|||||||
+4
-3
@@ -390,7 +390,7 @@ m4_define([AT_DATA_SOURCE_PROLOGUE],
|
|||||||
|
|
||||||
# AT_DATA_GRAMMAR_PROLOGUE
|
# AT_DATA_GRAMMAR_PROLOGUE
|
||||||
# ------------------------
|
# ------------------------
|
||||||
# The prologue that should be included in any grammar which parser is
|
# The prologue that should be included in any grammar whose parser is
|
||||||
# meant to be compiled.
|
# meant to be compiled.
|
||||||
m4_define([AT_DATA_GRAMMAR_PROLOGUE],
|
m4_define([AT_DATA_GRAMMAR_PROLOGUE],
|
||||||
[[%code top {
|
[[%code top {
|
||||||
@@ -400,7 +400,7 @@ m4_define([AT_DATA_GRAMMAR_PROLOGUE],
|
|||||||
|
|
||||||
# AT_DATA_SOURCE(NAME, CONTENT)
|
# AT_DATA_SOURCE(NAME, CONTENT)
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Generate the file NAME, which CONTENT is preceded by
|
# Generate the file NAME, whose CONTENT is preceded by
|
||||||
# AT_DATA_SOURCE_PROLOGUE.
|
# AT_DATA_SOURCE_PROLOGUE.
|
||||||
m4_define([AT_DATA_SOURCE],
|
m4_define([AT_DATA_SOURCE],
|
||||||
[AT_DATA([$1],
|
[AT_DATA([$1],
|
||||||
@@ -411,7 +411,7 @@ $2])
|
|||||||
|
|
||||||
# AT_DATA_GRAMMAR(NAME, CONTENT)
|
# AT_DATA_GRAMMAR(NAME, CONTENT)
|
||||||
# ------------------------------
|
# ------------------------------
|
||||||
# Generate the file NAME, which CONTENT is preceded by
|
# Generate the file NAME, whose CONTENT is preceded by
|
||||||
# AT_DATA_GRAMMAR_PROLOGUE.
|
# AT_DATA_GRAMMAR_PROLOGUE.
|
||||||
m4_define([AT_DATA_GRAMMAR], [AT_LANG_DISPATCH([$0], $@)])
|
m4_define([AT_DATA_GRAMMAR], [AT_LANG_DISPATCH([$0], $@)])
|
||||||
|
|
||||||
@@ -977,6 +977,7 @@ AT_CHECK(m4_join([ ],
|
|||||||
# with trailing ".o" removed, and ".cc" appended.
|
# with trailing ".o" removed, and ".cc" appended.
|
||||||
m4_define([AT_COMPILE_D],
|
m4_define([AT_COMPILE_D],
|
||||||
[AT_KEYWORDS(d)
|
[AT_KEYWORDS(d)
|
||||||
|
AT_SKIP_IF([[! $BISON_DC_WORKS]])
|
||||||
AT_CHECK(m4_join([ ],
|
AT_CHECK(m4_join([ ],
|
||||||
[$DC $DCFLAGS $3],
|
[$DC $DCFLAGS $3],
|
||||||
[m4_bmatch([$1], [[.]], [-c])],
|
[m4_bmatch([$1], [[.]], [-c])],
|
||||||
|
|||||||
@@ -90,7 +90,17 @@ m4_define([_AT_SYNCLINES_COMPILE],
|
|||||||
# syncline.c:4:2: error: #error "4"
|
# syncline.c:4:2: error: #error "4"
|
||||||
# #error "4"
|
# #error "4"
|
||||||
# ^~~~~
|
# ^~~~~
|
||||||
|
#
|
||||||
|
# GCC 9 displays a left-hand margin with the line number:
|
||||||
|
#
|
||||||
|
# syncline.c: In function 'foo':
|
||||||
|
# syncline.c:4:2: error: #error "4"
|
||||||
|
# 4 | #error "4"
|
||||||
|
# | ^~~~~
|
||||||
AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
|
AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
|
||||||
|
# Remove left-hand margin.
|
||||||
|
s/^[\d ]{6}\| //gm;
|
||||||
|
|
||||||
# 1. Remove useless lines.
|
# 1. Remove useless lines.
|
||||||
|
|
||||||
# distcc clutter.
|
# distcc clutter.
|
||||||
|
|||||||
Reference in New Issue
Block a user