diff options
author | Stefan Eßer <se@FreeBSD.org> | 2021-11-30 17:33:40 +0000 |
---|---|---|
committer | Stefan Eßer <se@FreeBSD.org> | 2021-11-30 17:33:40 +0000 |
commit | e63540eed295749528548c2e3a90f5a6e57275c8 (patch) | |
tree | 3f13b12f70880dde11aaca408130a2f40012cc95 | |
parent | 23aff1240891b4ba4bb000345824ca0b87b9b3e3 (diff) |
vendor/bc: import release 5.2.1vendor/bc/5.2.1
This release fixes two parse bugs when in POSIX standard mode. One of
these bugs was due to a quirk of the POSIX grammar, and the other was
because bc was too strict.
35 files changed, 206 insertions, 104 deletions
@@ -1,5 +1,11 @@ # News +## 5.2.1 + +This is a production release that fixes two parse bugs when in POSIX standard +mode. One of these bugs was due to a quirk of the POSIX grammar, and the other +was because `bc` was too strict. + ## 5.2.0 This is a production release that adds a new feature, fixes some bugs, and adds diff --git a/configure.sh b/configure.sh index 8a6a7817fd2a..76ffb2b9a18e 100755 --- a/configure.sh +++ b/configure.sh @@ -52,13 +52,15 @@ usage() { printf 'usage:\n' printf ' %s -h\n' "$script" printf ' %s --help\n' "$script" - printf ' %s [-a|-bD|-dB|-c] [-CEfgGHlmMNPtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\n' "$script" + printf ' %s [-a|-bD|-dB|-c] [-CEfgGHlmMNtTvz] [-O OPT_LEVEL] [-k KARATSUBA_LEN]\\\n' "$script" + printf ' [-s SETTING] [-S SETTING]\n' printf ' %s \\\n' "$script" printf ' [--library|--bc-only --disable-dc|--dc-only --disable-bc|--coverage] \\\n' printf ' [--force --debug --disable-extra-math --disable-generated-tests] \\\n' printf ' [--disable-history --disable-man-pages --disable-nls --disable-strip] \\\n' printf ' [--install-all-locales] [--opt=OPT_LEVEL] \\\n' printf ' [--karatsuba-len=KARATSUBA_LEN] \\\n' + printf ' [--set-default-on=SETTING] [--set-default-off=SETTING] \\\n' printf ' [--prefix=PREFIX] [--bindir=BINDIR] [--datarootdir=DATAROOTDIR] \\\n' printf ' [--datadir=DATADIR] [--mandir=MANDIR] [--man1dir=MAN1DIR] \\\n' printf '\n' diff --git a/include/status.h b/include/status.h index 3a23b09dc873..993b5e698fb3 100644 --- a/include/status.h +++ b/include/status.h @@ -480,6 +480,10 @@ typedef enum BcErr { /// Empty statements in POSIX for loop error. BC_ERR_POSIX_FOR, + /// POSIX's grammar does not allow a function definition right after a + /// semicolon. + BC_ERR_POSIX_FUNC_AFTER_SEMICOLON, + /// Non-POSIX exponential (scientific or engineering) number used error. BC_ERR_POSIX_EXP_NUM, diff --git a/include/version.h b/include/version.h index 296dbc79b547..eca73baf508f 100644 --- a/include/version.h +++ b/include/version.h @@ -37,6 +37,6 @@ #define BC_VERSION_H /// The current version. -#define VERSION 5.2.0 +#define VERSION 5.2.1 #endif // BC_VERSION_H diff --git a/locales/de_DE.ISO8859-1.msg b/locales/de_DE.ISO8859-1.msg index 76f2ac4190f6..dc7545e3ed72 100644 --- a/locales/de_DE.ISO8859-1.msg +++ b/locales/de_DE.ISO8859-1.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX erlaubt keine Vergleichsoperatoren auerhalb von if-Anweisungen oder Schleifen" 23 "POSIX bentigt 0 oder 1 Vergleichsoperatoren pro Bedingung" 24 "POSIX erlaubt keinen leeren Ausdruck in einer for-Schleife" -25 "POSIX erlaubt keine exponentielle Notation" -26 "POSIX erlaubt keine Feld-Referenzen als Funktionsparameter" -27 "POSIX erfordert, dass die linke Klammer auf der gleichen Linie wie der Funktionskopf steht" -28 "POSIX erlaubt keine Zuweisung von Strings an Variablen oder Arrays" +25 "POSIX verlangt einen Zeilenumbruch zwischen einem Semikolon und einer Funktionsdefinition" +26 "POSIX erlaubt keine exponentielle Notation" +27 "POSIX erlaubt keine Feld-Referenzen als Funktionsparameter" +28 "POSIX erlaubt keine ungltigen Funktionen" +29 "POSIX erfordert, dass die linke Klammer auf der gleichen Linie wie der Funktionskopf steht" +30 "POSIX erlaubt keine Zuweisung von Strings an Variablen oder Arrays" $ Runtime errors. $set 5 diff --git a/locales/de_DE.UTF-8.msg b/locales/de_DE.UTF-8.msg index c4dad4cd3a60..7956615e849f 100644 --- a/locales/de_DE.UTF-8.msg +++ b/locales/de_DE.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX erlaubt keine Vergleichsoperatoren außerhalb von if-Anweisungen oder Schleifen" 23 "POSIX benötigt 0 oder 1 Vergleichsoperatoren pro Bedingung" 24 "POSIX erlaubt keinen leeren Ausdruck in einer for-Schleife" -25 "POSIX erlaubt keine exponentielle Notation" -26 "POSIX erlaubt keine Feld-Referenzen als Funktionsparameter" -27 "POSIX erfordert, dass die linke Klammer auf der gleichen Linie wie der Funktionskopf steht" -28 "POSIX erlaubt keine Zuweisung von Strings an Variablen oder Arrays" +25 "POSIX verlangt einen Zeilenumbruch zwischen einem Semikolon und einer Funktionsdefinition" +26 "POSIX erlaubt keine exponentielle Notation" +27 "POSIX erlaubt keine Feld-Referenzen als Funktionsparameter" +28 "POSIX erlaubt keine ungültigen Funktionen" +29 "POSIX erfordert, dass die linke Klammer auf der gleichen Linie wie der Funktionskopf steht" +30 "POSIX erlaubt keine Zuweisung von Strings an Variablen oder Arrays" $ Runtime errors. $set 5 diff --git a/locales/en_US.msg b/locales/en_US.msg index 707950a5767d..adc1cc4537b9 100644 --- a/locales/en_US.msg +++ b/locales/en_US.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX does not allow comparison operators outside if statements or loops" 23 "POSIX requires 0 or 1 comparison operators per condition" 24 "POSIX requires all 3 parts of a for loop to be non-empty" -25 "POSIX does not allow exponential notation" -26 "POSIX does not allow array references as function parameters" -27 "POSIX requires the left brace be on the same line as the function header" -28 "POSIX does not allow strings to be assigned to variables or arrays" +25 "POSIX requires a newline between a semicolon and a function definition", +26 "POSIX does not allow exponential notation" +27 "POSIX does not allow array references as function parameters" +28 "POSIX does not allow void functions", +29 "POSIX requires the left brace be on the same line as the function header" +30 "POSIX does not allow strings to be assigned to variables or arrays" $ Runtime errors. $set 5 diff --git a/locales/es_ES.ISO8859-1.msg b/locales/es_ES.ISO8859-1.msg index 8d74f884f811..30c965111de6 100644 --- a/locales/es_ES.ISO8859-1.msg +++ b/locales/es_ES.ISO8859-1.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX no permite operadores de comparacin aparte de \"if\" expresin o bucles" 23 "POSIX requiere 0 o 1 operadores de comparisn para cada condicin" 24 "POSIX requiere todos 3 partes de una bucla que no esta vaco" -25 "POSIX no permite una notacin exponencial" -26 "POSIX no permite una referencia a una matriz como un parmetro de funcin" -27 "POSIX requiere el llave de la izquierda que sea en la misma lnea que los parmetros de la funcin" -28 "POSIX no permite asignar cadenas a variables o matrices" +25 "POSIX requiere una nueva lnea entre un punto y coma y una definicin de funcin" +26 "POSIX no permite una notacin exponencial" +27 "POSIX no permite una referencia a una matriz como un parmetro de funcin" +28 "POSIX no permite funciones void" +29 "POSIX requiere el llave de la izquierda que sea en la misma lnea que los parmetros de la funcin" +30 "POSIX no permite asignar cadenas a variables o matrices" $ Runtime errors. $set 5 diff --git a/locales/es_ES.UTF-8.msg b/locales/es_ES.UTF-8.msg index 26559e6e9b88..1721dd3d8f2a 100644 --- a/locales/es_ES.UTF-8.msg +++ b/locales/es_ES.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX no permite operadores de comparación aparte de \"if\" expresión o bucles" 23 "POSIX requiere 0 o 1 operadores de comparisón para cada condición" 24 "POSIX requiere todos 3 partes de una bucla que no esta vacío" -25 "POSIX no permite una notación exponencial" -26 "POSIX no permite una referencia a una matriz como un parámetro de función" -27 "POSIX requiere el llave de la izquierda que sea en la misma línea que los parámetros de la función" -28 "POSIX no permite asignar cadenas a variables o matrices" +25 "POSIX requiere una nueva línea entre un punto y coma y una definición de función" +26 "POSIX no permite una notación exponencial" +27 "POSIX no permite una referencia a una matriz como un parámetro de función" +28 "POSIX no permite funciones void" +29 "POSIX requiere el llave de la izquierda que sea en la misma línea que los parámetros de la función" +30 "POSIX no permite asignar cadenas a variables o matrices" $ Runtime errors. $set 5 diff --git a/locales/fr_FR.ISO8859-1.msg b/locales/fr_FR.ISO8859-1.msg index 8e894e043bbc..5d772abcc4ef 100644 --- a/locales/fr_FR.ISO8859-1.msg +++ b/locales/fr_FR.ISO8859-1.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX interdit les opérateurs de comparaison en dehors des expressions 'if' ou des boucles" 23 "POSIX impose 0 ou 1 opérateur de comparaison par condition" 24 "POSIX interdit une expression vide dans une boucle 'for'" -25 "POSIX interdit la notation exponentielle" -26 "POSIX interdit les références à un tableau dans les paramètres d'une fonction" -27 "POSIX impose que l'en-tête de la fonction et le '{' soient sur la même ligne" -28 "POSIX interdit pas d'assigner des chaînes de caractères à des variables ou à des tableaux" +25 "POSIX exige une nouvelle ligne entre un point-virgule et une définition de fonction" +26 "POSIX interdit la notation exponentielle" +27 "POSIX interdit les références à un tableau dans les paramètres d'une fonction" +28 "POSIX n'autorise pas les fonctions void" +29 "POSIX impose que l'en-tête de la fonction et le '{' soient sur la même ligne" +30 "POSIX interdit pas d'assigner des chaînes de caractères à des variables ou à des tableaux" $ Runtime errors. $set 5 diff --git a/locales/fr_FR.UTF-8.msg b/locales/fr_FR.UTF-8.msg index 8e894e043bbc..6393ab0e5f70 100644 --- a/locales/fr_FR.UTF-8.msg +++ b/locales/fr_FR.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX interdit les opérateurs de comparaison en dehors des expressions 'if' ou des boucles" 23 "POSIX impose 0 ou 1 opérateur de comparaison par condition" 24 "POSIX interdit une expression vide dans une boucle 'for'" -25 "POSIX interdit la notation exponentielle" -26 "POSIX interdit les références à un tableau dans les paramètres d'une fonction" -27 "POSIX impose que l'en-tête de la fonction et le '{' soient sur la même ligne" -28 "POSIX interdit pas d'assigner des chaînes de caractères à des variables ou à des tableaux" +25 "POSIX exige une nouvelle ligne entre un point-virgule et une définition de fonction." +26 "POSIX interdit la notation exponentielle" +27 "POSIX interdit les références à un tableau dans les paramètres d'une fonction" +28 "POSIX n'autorise pas les fonctions void" +29 "POSIX impose que l'en-tête de la fonction et le '{' soient sur la même ligne" +30 "POSIX interdit pas d'assigner des chaînes de caractères à des variables ou à des tableaux" $ Runtime errors. $set 5 diff --git a/locales/ja_JP.UTF-8.msg b/locales/ja_JP.UTF-8.msg index 4477f2bc548b..3c51aca8194f 100644 --- a/locales/ja_JP.UTF-8.msg +++ b/locales/ja_JP.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX は if 文やループの外の比較演算子を許可しません。" 23 "POSIXは条件ごとに0または1の比較演算子を必要とします。" 24 "POSIXはforループの3つの部分がすべて空でないことを要求します。" -25 "POSIXは指数表記を許可しません。" -26 "POSIX は関数パラメータとして配列参照を許可しません。" -27 "POSIXでは、関数ヘッダと同じ行に左中括弧があることが必要です。" -28 "POSIXでは、変数や配列に文字列を割り当てることはできません。" +25 "POSIXでは、セミコロンと関数定義の間に改行を入れる必要があります。" +26 "POSIXは指数表記を許可しません。" +27 "POSIX は関数パラメータとして配列参照を許可しません。" +28 "POSIXではvoid関数を認めていません。" +29 "POSIXでは、関数ヘッダと同じ行に左中括弧があることが必要です。" +30 "POSIXでは、変数や配列に文字列を割り当てることはできません。" $ ランタイムエラー。 $set 5 diff --git a/locales/ja_JP.eucJP.msg b/locales/ja_JP.eucJP.msg index a907cd7cf0e3..74bd09c27fd5 100644 --- a/locales/ja_JP.eucJP.msg +++ b/locales/ja_JP.eucJP.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX if ʸ롼פγӱ黻ҤĤޤ" 23 "POSIXϾ老Ȥ0ޤ1ӱ黻ҤɬפȤޤ" 24 "POSIXfor롼פ3Ĥʬ٤ƶǤʤȤᤷޤ" -25 "POSIXϻؿɽĤޤ" -26 "POSIX ϴؿѥȤȤĤޤ" -27 "POSIXǤϡؿإåƱԤ˺̤뤳ȤɬפǤ" -28 "POSIXǤϡѿʸƤ뤳ȤϤǤޤ" +25 "POSIXǤϡߥȴؿδ֤˲Ԥɬפޤ" +26 "POSIXϻؿɽĤޤ" +27 "POSIX ϴؿѥȤȤĤޤ" +28 "POSIXǤvoidؿǧƤޤ" +29 "POSIXǤϡؿإåƱԤ˺̤뤳ȤɬפǤ" +30 "POSIXǤϡѿʸƤ뤳ȤϤǤޤ" $ २顼 $set 5 diff --git a/locales/nl_NL.ISO8859-1.msg b/locales/nl_NL.ISO8859-1.msg index 76b8577108e8..2f60de23cca1 100644 --- a/locales/nl_NL.ISO8859-1.msg +++ b/locales/nl_NL.ISO8859-1.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX laat geen vergelijking toe tussen operatoren buiten als verklaringen of lussen" 23 "POSIX vereist 0 of 1 vergelijkingsoperator per conditie" 24 "POSIX vereist dat alle 3 de delen van een lus niet leeg zijn" -25 "POSIX laat geen exponentile notatie toe" -26 "POSIX staat geen arrayreferenties toe als functieparameters" -27 "POSIX vereist dat de linkse beugel op dezelfde regel staat als de functiehoofding" -28 "POSIX staat niet toe dat strings worden toegewezen aan variabelen of arrays" +25 "POSIX vereist een nieuwe regel tussen een puntkomma en een functiedefinitie" +26 "POSIX laat geen exponentile notatie toe" +27 "POSIX staat geen arrayreferenties toe als functieparameters" +28 "POSIX staat geen lege functies toe" +29 "POSIX vereist dat de linkse beugel op dezelfde regel staat als de functiehoofding" +30 "POSIX staat niet toe dat strings worden toegewezen aan variabelen of arrays" $ Runtime fouten. $set 5 diff --git a/locales/nl_NL.UTF-8.msg b/locales/nl_NL.UTF-8.msg index 51acb9867e22..599628a6cc51 100644 --- a/locales/nl_NL.UTF-8.msg +++ b/locales/nl_NL.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX laat geen vergelijking toe tussen operatoren buiten als verklaringen of lussen" 23 "POSIX vereist 0 of 1 vergelijkingsoperator per conditie" 24 "POSIX vereist dat alle 3 de delen van een lus niet leeg zijn" -25 "POSIX laat geen exponentiële notatie toe" -26 "POSIX staat geen arrayreferenties toe als functieparameters" -27 "POSIX vereist dat de linkse beugel op dezelfde regel staat als de functiehoofding" -28 "POSIX staat niet toe dat strings worden toegewezen aan variabelen of arrays" +25 "POSIX vereist een nieuwe regel tussen een puntkomma en een functiedefinitie" +26 "POSIX laat geen exponentiële notatie toe" +27 "POSIX staat geen arrayreferenties toe als functieparameters" +28 "POSIX staat geen lege functies toe" +29 "POSIX vereist dat de linkse beugel op dezelfde regel staat als de functiehoofding" +30 "POSIX staat niet toe dat strings worden toegewezen aan variabelen of arrays" $ Runtime fouten. $set 5 diff --git a/locales/pl_PL.ISO8859-2.msg b/locales/pl_PL.ISO8859-2.msg index d1d77d7e0b57..a36d5fe8beb5 100644 --- a/locales/pl_PL.ISO8859-2.msg +++ b/locales/pl_PL.ISO8859-2.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX nie pozwala na porwnywanie operatorw na zewntrz, jeli deklaracje lub ptle" 23 "POSIX wymaga 0 lub 1 operatora porwnawczego na jeden warunek" 24 "POSIX wymaga, aby wszystkie 3 czci ptli nie byy puste" -25 "POSIX nie pozwala na notacj wykadnicz" -26 "POSIX nie zezwala na odniesienia do tablicy jako parametrw funkcji" -27 "POSIX wymaga, aby lewe usztywnienie znajdowao si na tej samej linii co nagwek funkcji" -28 "POSIX nie pozwala na przypisywanie cigw znakw do zmiennych lub tablic" +25 "POSIX wymaga nowej linii pomidzy rednikiem a definicj funkcji" +26 "POSIX nie pozwala na notacj wykadnicz" +27 "POSIX nie zezwala na odniesienia do tablicy jako parametrw funkcji" +28 "POSIX nie dopuszcza funkcji void" +29 "POSIX wymaga, aby lewe usztywnienie znajdowao si na tej samej linii co nagwek funkcji" +30 "POSIX nie pozwala na przypisywanie cigw znakw do zmiennych lub tablic" $ Bdy Runtime'u. $set 5 diff --git a/locales/pl_PL.UTF-8.msg b/locales/pl_PL.UTF-8.msg index a23a98edd1d2..ee297161a895 100644 --- a/locales/pl_PL.UTF-8.msg +++ b/locales/pl_PL.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX nie pozwala na porównywanie operatorów na zewnątrz, jeśli deklaracje lub pętle" 23 "POSIX wymaga 0 lub 1 operatora porównawczego na jeden warunek" 24 "POSIX wymaga, aby wszystkie 3 części pętli nie były puste" -25 "POSIX nie pozwala na notację wykładniczą" -26 "POSIX nie zezwala na odniesienia do tablicy jako parametrów funkcji" -27 "POSIX wymaga, aby lewe usztywnienie znajdowało się na tej samej linii co nagłówek funkcji" -28 "POSIX nie pozwala na przypisywanie ciągów znaków do zmiennych lub tablic" +25 "POSIX wymaga nowej linii pomiędzy średnikiem a definicją funkcji" +26 "POSIX nie pozwala na notację wykładniczą" +27 "POSIX nie zezwala na odniesienia do tablicy jako parametrów funkcji" +28 "POSIX nie dopuszcza funkcji void" +29 "POSIX wymaga, aby lewe usztywnienie znajdowało się na tej samej linii co nagłówek funkcji" +30 "POSIX nie pozwala na przypisywanie ciągów znaków do zmiennych lub tablic" $ Błędy Runtime'u. $set 5 diff --git a/locales/pt_PT.ISO8859-1.msg b/locales/pt_PT.ISO8859-1.msg index 7a17f0642cc9..6197a73d0fe2 100644 --- a/locales/pt_PT.ISO8859-1.msg +++ b/locales/pt_PT.ISO8859-1.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX no permite operadores de comparao fora das expresses 'if' ou loops" 23 "POSIX requer operadores 0 ou 1 de comparao por condio" 24 "POSIX no permite uma expresso vazia em um loop 'for'" -25 "POSIX no permite notao exponencial" -26 "POSIX no permite referncias de matriz como parmetros de funo" -27 "POSIX requer que o cabealho da funo '{' estejam na mesma linha" -28 "POSIX no permite a atribuio de cadeias de caracteres a variveis ou matrizes" +25 "POSIX requer uma nova linha entre um ponto-e-vrgula e uma definio de funo" +26 "POSIX no permite notao exponencial" +27 "POSIX no permite referncias de matriz como parmetros de funo" +28 "POSIX no permite funes nulas" +29 "POSIX requer que o cabealho da funo '{' estejam na mesma linha" +30 "POSIX no permite a atribuio de cadeias de caracteres a variveis ou matrizes" $ Runtime errors. $set 5 diff --git a/locales/pt_PT.UTF-8.msg b/locales/pt_PT.UTF-8.msg index 2f6a4683a376..768f8807ebfc 100644 --- a/locales/pt_PT.UTF-8.msg +++ b/locales/pt_PT.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX não permite operadores de comparação fora das expressões 'if' ou loops" 23 "POSIX requer operadores 0 ou 1 de comparação por condição" 24 "POSIX não permite uma expressão vazia em um loop 'for'" -25 "POSIX não permite notação exponencial" -26 "POSIX não permite referências de matriz como parâmetros de função" -27 "POSIX requer que o cabeçalho da função '{' estejam na mesma linha" -28 "POSIX não permite a atribuição de cadeias de caracteres a variáveis ou matrizes" +25 "POSIX requer uma nova linha entre um ponto-e-vírgula e uma definição de função" +26 "POSIX não permite notação exponencial" +27 "POSIX não permite referências de matriz como parâmetros de função" +28 "POSIX não permite funções nulas" +29 "POSIX requer que o cabeçalho da função '{' estejam na mesma linha" +30 "POSIX não permite a atribuição de cadeias de caracteres a variáveis ou matrizes" $ Runtime errors. $set 5 diff --git a/locales/ru_RU.CP1251.msg b/locales/ru_RU.CP1251.msg index 6b1d93aa2110..a094e08e4afb 100644 --- a/locales/ru_RU.CP1251.msg +++ b/locales/ru_RU.CP1251.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX , " 23 "POSIX 0 1 " 24 "POSIX , 3 " -25 "POSIX " -26 "POSIX " -27 "POSIX , , " -28 "POSIX " +25 "POSIX " +26 "POSIX " +27 "POSIX " +28 "POSIX " +29 "POSIX , , " +30 "POSIX " $ . $set 5 diff --git a/locales/ru_RU.CP866.msg b/locales/ru_RU.CP866.msg index b693428b9a3c..79070cda2e0c 100644 --- a/locales/ru_RU.CP866.msg +++ b/locales/ru_RU.CP866.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX ࠧ蠥 ࠬ ࠢ 室 ।, ⢥ত 横" 23 "POSIX ॡ 0 1 ࠢ " 24 "POSIX ॡ, ⮡ 3 ⫨ 뫨 묨" -25 "POSIX ᪠ ᯮ樠쭮 樨" -26 "POSIX ᪠ 뫪 ᨢ ⢥ ࠬ 㭪樨" -27 "POSIX ॡ, ⮡ 뫠 ⮩ , 㭪樨" -28 "POSIX ᢠ ப ६ ᨢ" +25 "POSIX ॡ ப 窮 ⮩ । 㭪樨" +26 "POSIX ᪠ ᯮ樠쭮 樨" +27 "POSIX ᪠ 뫪 ᨢ ⢥ ࠬ 㭪樨" +28 "POSIX ࠧ蠥 㭪樨 " +29 "POSIX ॡ, ⮡ 뫠 ⮩ , 㭪樨" +30 "POSIX ᢠ ப ६ ᨢ" $ 訡 믮. $set 5 diff --git a/locales/ru_RU.ISO8859-5.msg b/locales/ru_RU.ISO8859-5.msg index 35af400c5831..4c544e94f846 100644 --- a/locales/ru_RU.ISO8859-5.msg +++ b/locales/ru_RU.ISO8859-5.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX , " 23 "POSIX 0 1 " 24 "POSIX , 3 " -25 "POSIX " -26 "POSIX " -27 "POSIX , , " -28 "POSIX " +25 "POSIX " +26 "POSIX " +27 "POSIX " +28 "POSIX " +29 "POSIX , , " +30 "POSIX " $ . $set 5 diff --git a/locales/ru_RU.KOI8-R.msg b/locales/ru_RU.KOI8-R.msg index 98c667095852..50c716b5ca2e 100644 --- a/locales/ru_RU.KOI8-R.msg +++ b/locales/ru_RU.KOI8-R.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX , " 23 "POSIX 0 1 " 24 "POSIX , 3 " -25 "POSIX " -26 "POSIX " -27 "POSIX , , " -28 "POSIX " +25 "POSIX " +26 "POSIX " +27 "POSIX " +28 "POSIX " +29 "POSIX , , " +30 "POSIX " $ . $set 5 diff --git a/locales/ru_RU.UTF-8.msg b/locales/ru_RU.UTF-8.msg index f7c1dc58c4db..e37bb2182caf 100644 --- a/locales/ru_RU.UTF-8.msg +++ b/locales/ru_RU.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX не разрешает операторам сравнения выходить за пределы, если утверждения или циклы" 23 "POSIX требует 0 или 1 оператора сравнения на условие" 24 "POSIX требует, чтобы все 3 части петли были непустыми" -25 "POSIX не допускает экспоненциальной нотации" -26 "POSIX не допускает ссылки на массив в качестве параметров функции" -27 "POSIX требует, чтобы левая скобка была на той же линии, что и заголовок функции" -28 "POSIX не позволяет присваивать строки переменным или массивам" +25 "POSIX требует наличия новой строки между точкой с запятой и определением функции" +26 "POSIX не допускает экспоненциальной нотации" +27 "POSIX не допускает ссылки на массив в качестве параметров функции" +28 "POSIX не разрешает функции пустоты" +29 "POSIX требует, чтобы левая скобка была на той же линии, что и заголовок функции" +30 "POSIX не позволяет присваивать строки переменным или массивам" $ Ошибки выполнения. $set 5 diff --git a/locales/zh_CN.GB18030.msg b/locales/zh_CN.GB18030.msg index fb80db7de55d..a2210b19ed29 100644 --- a/locales/zh_CN.GB18030.msg +++ b/locales/zh_CN.GB18030.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIXifѭ֮ıȽ" 23 "POSIXҪÿıȽΪ01" 24 "POSIXҪforѭ3ֱǷǿյ" -25 "POSIXʹָ" -26 "POSIXΪ" -27 "POSIXҪߵźͺͷͬһ" -28 "POSIXַ" +25 "POSIXҪڷֺźͺ֮ʹûз" +26 "POSIXʹָ" +27 "POSIXΪ" +28 "POSIXЧ" +29 "POSIXҪߵźͺͷͬһ" +30 "POSIXַ" $ ʱ $set 5 diff --git a/locales/zh_CN.GB2312.msg b/locales/zh_CN.GB2312.msg index fb80db7de55d..a2210b19ed29 100644 --- a/locales/zh_CN.GB2312.msg +++ b/locales/zh_CN.GB2312.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIXifѭ֮ıȽ" 23 "POSIXҪÿıȽΪ01" 24 "POSIXҪforѭ3ֱǷǿյ" -25 "POSIXʹָ" -26 "POSIXΪ" -27 "POSIXҪߵźͺͷͬһ" -28 "POSIXַ" +25 "POSIXҪڷֺźͺ֮ʹûз" +26 "POSIXʹָ" +27 "POSIXΪ" +28 "POSIXЧ" +29 "POSIXҪߵźͺͷͬһ" +30 "POSIXַ" $ ʱ $set 5 diff --git a/locales/zh_CN.GBK.msg b/locales/zh_CN.GBK.msg index fb80db7de55d..a2210b19ed29 100644 --- a/locales/zh_CN.GBK.msg +++ b/locales/zh_CN.GBK.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIXifѭ֮ıȽ" 23 "POSIXҪÿıȽΪ01" 24 "POSIXҪforѭ3ֱǷǿյ" -25 "POSIXʹָ" -26 "POSIXΪ" -27 "POSIXҪߵźͺͷͬһ" -28 "POSIXַ" +25 "POSIXҪڷֺźͺ֮ʹûз" +26 "POSIXʹָ" +27 "POSIXΪ" +28 "POSIXЧ" +29 "POSIXҪߵźͺͷͬһ" +30 "POSIXַ" $ ʱ $set 5 diff --git a/locales/zh_CN.UTF-8.msg b/locales/zh_CN.UTF-8.msg index c327c0b1b98c..92d1bb767cb0 100644 --- a/locales/zh_CN.UTF-8.msg +++ b/locales/zh_CN.UTF-8.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIX不允许在if语句或循环之外的比较运算符" 23 "POSIX要求每个条件的比较运算符为0或1个" 24 "POSIX要求for循环的所有3个部分必须是非空的" -25 "POSIX不允许使用指数符号" -26 "POSIX不允许数组引用作为函数参数" -27 "POSIX要求左边的括号和函数头在同一行上" -28 "POSIX不允许将字符串分配给变量或数组" +25 "POSIX要求在分号和函数定义之间使用换行符" +26 "POSIX不允许使用指数符号" +27 "POSIX不允许数组引用作为函数参数" +28 "POSIX不允许无效函数" +29 "POSIX要求左边的括号和函数头在同一行上" +30 "POSIX不允许将字符串分配给变量或数组" $ 运行时错误。 $set 5 diff --git a/locales/zh_CN.eucCN.msg b/locales/zh_CN.eucCN.msg index fb80db7de55d..a2210b19ed29 100644 --- a/locales/zh_CN.eucCN.msg +++ b/locales/zh_CN.eucCN.msg @@ -77,10 +77,12 @@ $set 4 22 "POSIXifѭ֮ıȽ" 23 "POSIXҪÿıȽΪ01" 24 "POSIXҪforѭ3ֱǷǿյ" -25 "POSIXʹָ" -26 "POSIXΪ" -27 "POSIXҪߵźͺͷͬһ" -28 "POSIXַ" +25 "POSIXҪڷֺźͺ֮ʹûз" +26 "POSIXʹָ" +27 "POSIXΪ" +28 "POSIXЧ" +29 "POSIXҪߵźͺͷͬһ" +30 "POSIXַ" $ ʱ $set 5 diff --git a/src/bc_parse.c b/src/bc_parse.c index 91de31ad5389..8849c1b8e9c7 100644 --- a/src/bc_parse.c +++ b/src/bc_parse.c @@ -79,6 +79,7 @@ static bool bc_parse_inst_isLeaf(BcInst t) { * that can legally end a statement. In bc's case, it could be a newline, a * semicolon, and a brace in certain cases. * @param p The parser. + * @return True if the token is a legal delimiter. */ static bool bc_parse_isDelimiter(const BcParse *p) { @@ -128,6 +129,23 @@ static bool bc_parse_isDelimiter(const BcParse *p) { } /** + * Returns true if we are in top level of a function body. The POSIX grammar + * is defined such that anything is allowed after a function body, so we must + * use this function to detect that case when ending a function body. + * @param p The parser. + * @return True if we are in the top level of parsing a function body. + */ +static bool bc_parse_TopFunc(const BcParse *p) { + + bool good = p->flags.len == 2; + + uint16_t val = BC_PARSE_FLAG_BRACE | BC_PARSE_FLAG_FUNC_INNER; + val |= BC_PARSE_FLAG_FUNC; + + return good && BC_PARSE_TOP_FLAG(p) == val; +} + +/** * Sets a previously defined exit label. What are labels? See the bc Parsing * section of the Development manual (manuals/development.md). * @param p The parser. @@ -881,7 +899,7 @@ static void bc_parse_endBody(BcParse *p, bool brace) { bc_lex_next(&p->l); // If the next token is not a delimiter, that is a problem. - if (BC_ERR(!bc_parse_isDelimiter(p))) + if (BC_ERR(!bc_parse_isDelimiter(p) && !bc_parse_TopFunc(p))) bc_parse_err(p, BC_ERR_PARSE_TOKEN); } @@ -1741,6 +1759,14 @@ static void bc_parse_stmt(BcParse *p) { // Make sure semicolons are eaten. while (p->l.t == BC_LEX_SCOLON) bc_lex_next(&p->l); + + // POSIX's grammar does not allow a function definition after a semicolon + // without a newline, so check specifically for that case and error if + // the POSIX standard flag is set. + if (p->l.last == BC_LEX_SCOLON && p->l.t == BC_LEX_KW_DEFINE && BC_IS_POSIX) + { + bc_parse_err(p, BC_ERR_POSIX_FUNC_AFTER_SEMICOLON); + } } void bc_parse_parse(BcParse *p) { diff --git a/src/data.c b/src/data.c index 82475299ed78..959af600c1af 100644 --- a/src/data.c +++ b/src/data.c @@ -202,7 +202,7 @@ const uchar bc_err_ids[] = { BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, - BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, + BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, BC_ERR_IDX_PARSE, #endif // BC_ENABLED }; @@ -273,6 +273,7 @@ const char* const bc_err_msgs[] = { "POSIX does not allow comparison operators outside if statements or loops", "POSIX requires 0 or 1 comparison operators per condition", "POSIX requires all 3 parts of a for loop to be non-empty", + "POSIX requires a newline between a semicolon and a function definition", #if BC_ENABLE_EXTRA_MATH "POSIX does not allow exponential notation", #else diff --git a/tests/bc/all.txt b/tests/bc/all.txt index 23244773b933..f85491d12424 100644 --- a/tests/bc/all.txt +++ b/tests/bc/all.txt @@ -43,6 +43,7 @@ misc4 misc5 misc6 misc7 +misc8 void rand recursive_arrays diff --git a/tests/bc/misc8.txt b/tests/bc/misc8.txt new file mode 100644 index 000000000000..8bef63316ef8 --- /dev/null +++ b/tests/bc/misc8.txt @@ -0,0 +1,8 @@ +define a(){ + return 5 +}define b(){ + return 6 +} +24 +a() +b() diff --git a/tests/bc/misc8_results.txt b/tests/bc/misc8_results.txt new file mode 100644 index 000000000000..daee0f1b2fbf --- /dev/null +++ b/tests/bc/misc8_results.txt @@ -0,0 +1,3 @@ +24 +5 +6 diff --git a/tests/bc/posix_errors.txt b/tests/bc/posix_errors.txt index d880600f7bb1..584a0198b5b3 100644 --- a/tests/bc/posix_errors.txt +++ b/tests/bc/posix_errors.txt @@ -7,6 +7,7 @@ halt define x(e) { return 0; } define x(e) { return 4*(e+e); } define x(e) { return (e+e)*4; } +define a() { return (5); };define b() { return (6); } limits . if (q!=0) { x=3; } else { x=4; } |