Skip to content

Commit 4f642da

Browse files
authored
Break down some complex functions in pegen.c for readability (pythonGH-25292)
1 parent c0e11a3 commit 4f642da

File tree

1 file changed

+91
-79
lines changed

1 file changed

+91
-79
lines changed

Parser/pegen.c

Lines changed: 91 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,136 +1856,147 @@ _get_defaults(Parser *p, asdl_seq *names_with_defaults)
18561856
return seq;
18571857
}
18581858

1859-
/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */
1860-
arguments_ty
1861-
_PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default,
1862-
SlashWithDefault *slash_with_default, asdl_arg_seq *plain_names,
1863-
asdl_seq *names_with_default, StarEtc *star_etc)
1864-
{
1865-
asdl_arg_seq *posonlyargs;
1859+
static int
1860+
_make_posonlyargs(Parser *p,
1861+
asdl_arg_seq *slash_without_default,
1862+
SlashWithDefault *slash_with_default,
1863+
asdl_arg_seq **posonlyargs) {
18661864
if (slash_without_default != NULL) {
1867-
posonlyargs = slash_without_default;
1865+
*posonlyargs = slash_without_default;
18681866
}
18691867
else if (slash_with_default != NULL) {
18701868
asdl_arg_seq *slash_with_default_names =
1871-
_get_names(p, slash_with_default->names_with_defaults);
1869+
_get_names(p, slash_with_default->names_with_defaults);
18721870
if (!slash_with_default_names) {
1873-
return NULL;
1871+
return -1;
18741872
}
1875-
posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1873+
*posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences(
18761874
p,
18771875
(asdl_seq*)slash_with_default->plain_names,
18781876
(asdl_seq*)slash_with_default_names);
1879-
if (!posonlyargs) {
1880-
return NULL;
1881-
}
18821877
}
18831878
else {
1884-
posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1885-
if (!posonlyargs) {
1886-
return NULL;
1887-
}
1879+
*posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
18881880
}
1881+
return *posonlyargs == NULL ? -1 : 0;
1882+
}
18891883

1890-
asdl_arg_seq *posargs;
1884+
static int
1885+
_make_posargs(Parser *p,
1886+
asdl_arg_seq *plain_names,
1887+
asdl_seq *names_with_default,
1888+
asdl_arg_seq **posargs) {
18911889
if (plain_names != NULL && names_with_default != NULL) {
18921890
asdl_arg_seq *names_with_default_names = _get_names(p, names_with_default);
18931891
if (!names_with_default_names) {
1894-
return NULL;
1895-
}
1896-
posargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1897-
p,
1898-
(asdl_seq*)plain_names,
1899-
(asdl_seq*)names_with_default_names);
1900-
if (!posargs) {
1901-
return NULL;
1892+
return -1;
19021893
}
1894+
*posargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1895+
p,(asdl_seq*)plain_names, (asdl_seq*)names_with_default_names);
19031896
}
19041897
else if (plain_names == NULL && names_with_default != NULL) {
1905-
posargs = _get_names(p, names_with_default);
1906-
if (!posargs) {
1907-
return NULL;
1908-
}
1898+
*posargs = _get_names(p, names_with_default);
19091899
}
19101900
else if (plain_names != NULL && names_with_default == NULL) {
1911-
posargs = plain_names;
1901+
*posargs = plain_names;
19121902
}
19131903
else {
1914-
posargs = _Py_asdl_arg_seq_new(0, p->arena);
1915-
if (!posargs) {
1916-
return NULL;
1917-
}
1904+
*posargs = _Py_asdl_arg_seq_new(0, p->arena);
19181905
}
1906+
return *posargs == NULL ? -1 : 0;
1907+
}
19191908

1920-
asdl_expr_seq *posdefaults;
1909+
static int
1910+
_make_posdefaults(Parser *p,
1911+
SlashWithDefault *slash_with_default,
1912+
asdl_seq *names_with_default,
1913+
asdl_expr_seq **posdefaults) {
19211914
if (slash_with_default != NULL && names_with_default != NULL) {
19221915
asdl_expr_seq *slash_with_default_values =
1923-
_get_defaults(p, slash_with_default->names_with_defaults);
1916+
_get_defaults(p, slash_with_default->names_with_defaults);
19241917
if (!slash_with_default_values) {
1925-
return NULL;
1918+
return -1;
19261919
}
19271920
asdl_expr_seq *names_with_default_values = _get_defaults(p, names_with_default);
19281921
if (!names_with_default_values) {
1929-
return NULL;
1922+
return -1;
19301923
}
1931-
posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences(
1924+
*posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences(
19321925
p,
19331926
(asdl_seq*)slash_with_default_values,
19341927
(asdl_seq*)names_with_default_values);
1935-
if (!posdefaults) {
1936-
return NULL;
1937-
}
19381928
}
19391929
else if (slash_with_default == NULL && names_with_default != NULL) {
1940-
posdefaults = _get_defaults(p, names_with_default);
1941-
if (!posdefaults) {
1942-
return NULL;
1943-
}
1930+
*posdefaults = _get_defaults(p, names_with_default);
19441931
}
19451932
else if (slash_with_default != NULL && names_with_default == NULL) {
1946-
posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
1947-
if (!posdefaults) {
1948-
return NULL;
1949-
}
1933+
*posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
19501934
}
19511935
else {
1952-
posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
1953-
if (!posdefaults) {
1954-
return NULL;
1955-
}
1956-
}
1957-
1958-
arg_ty vararg = NULL;
1959-
if (star_etc != NULL && star_etc->vararg != NULL) {
1960-
vararg = star_etc->vararg;
1936+
*posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
19611937
}
1938+
return *posdefaults == NULL ? -1 : 0;
1939+
}
19621940

1963-
asdl_arg_seq *kwonlyargs;
1941+
static int
1942+
_make_kwargs(Parser *p, StarEtc *star_etc,
1943+
asdl_arg_seq **kwonlyargs,
1944+
asdl_expr_seq **kwdefaults) {
19641945
if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
1965-
kwonlyargs = _get_names(p, star_etc->kwonlyargs);
1966-
if (!kwonlyargs) {
1967-
return NULL;
1968-
}
1946+
*kwonlyargs = _get_names(p, star_etc->kwonlyargs);
19691947
}
19701948
else {
1971-
kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1972-
if (!kwonlyargs) {
1973-
return NULL;
1974-
}
1949+
*kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1950+
}
1951+
1952+
if (*kwonlyargs == NULL) {
1953+
return -1;
19751954
}
19761955

1977-
asdl_expr_seq *kwdefaults;
19781956
if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
1979-
kwdefaults = _get_defaults(p, star_etc->kwonlyargs);
1980-
if (!kwdefaults) {
1981-
return NULL;
1982-
}
1957+
*kwdefaults = _get_defaults(p, star_etc->kwonlyargs);
19831958
}
19841959
else {
1985-
kwdefaults = _Py_asdl_expr_seq_new(0, p->arena);
1986-
if (!kwdefaults) {
1987-
return NULL;
1988-
}
1960+
*kwdefaults = _Py_asdl_expr_seq_new(0, p->arena);
1961+
}
1962+
1963+
if (*kwdefaults == NULL) {
1964+
return -1;
1965+
}
1966+
1967+
return 0;
1968+
}
1969+
1970+
/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */
1971+
arguments_ty
1972+
_PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default,
1973+
SlashWithDefault *slash_with_default, asdl_arg_seq *plain_names,
1974+
asdl_seq *names_with_default, StarEtc *star_etc)
1975+
{
1976+
asdl_arg_seq *posonlyargs;
1977+
if (_make_posonlyargs(p, slash_without_default, slash_with_default, &posonlyargs) == -1) {
1978+
return NULL;
1979+
}
1980+
1981+
asdl_arg_seq *posargs;
1982+
if (_make_posargs(p, plain_names, names_with_default, &posargs) == -1) {
1983+
return NULL;
1984+
}
1985+
1986+
asdl_expr_seq *posdefaults;
1987+
if (_make_posdefaults(p,slash_with_default, names_with_default, &posdefaults) == -1) {
1988+
return NULL;
1989+
}
1990+
1991+
arg_ty vararg = NULL;
1992+
if (star_etc != NULL && star_etc->vararg != NULL) {
1993+
vararg = star_etc->vararg;
1994+
}
1995+
1996+
asdl_arg_seq *kwonlyargs;
1997+
asdl_expr_seq *kwdefaults;
1998+
if (_make_kwargs(p, star_etc, &kwonlyargs, &kwdefaults) == -1) {
1999+
return NULL;
19892000
}
19902001

19912002
arg_ty kwarg = NULL;
@@ -1997,6 +2008,7 @@ _PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default,
19972008
kwdefaults, kwarg, posdefaults, p->arena);
19982009
}
19992010

2011+
20002012
/* Constructs an empty arguments_ty object, that gets used when a function accepts no
20012013
* arguments. */
20022014
arguments_ty

0 commit comments

Comments
 (0)