mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-15 04:43:53 +00:00
vendor/bc: import release 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.
This commit is contained in:
parent
23aff12408
commit
e63540eed2
6
NEWS.md
6
NEWS.md
|
@ -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
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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,
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
@ -127,6 +128,23 @@ static bool bc_parse_isDelimiter(const BcParse *p) {
|
|||
return good;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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).
|
||||
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -43,6 +43,7 @@ misc4
|
|||
misc5
|
||||
misc6
|
||||
misc7
|
||||
misc8
|
||||
void
|
||||
rand
|
||||
recursive_arrays
|
||||
|
|
8
tests/bc/misc8.txt
Normal file
8
tests/bc/misc8.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
define a(){
|
||||
return 5
|
||||
}define b(){
|
||||
return 6
|
||||
}
|
||||
24
|
||||
a()
|
||||
b()
|
3
tests/bc/misc8_results.txt
Normal file
3
tests/bc/misc8_results.txt
Normal file
|
@ -0,0 +1,3 @@
|
|||
24
|
||||
5
|
||||
6
|
|
@ -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; }
|
||||
|
|
Loading…
Reference in a new issue