Skip to content

Commit 6cc576b

Browse files
committed
Break down some complex functions in pegen.c for readability
1 parent f32d022 commit 6cc576b

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
@@ -1853,136 +1853,147 @@ _get_defaults(Parser *p, asdl_seq *names_with_defaults)
18531853
return seq;
18541854
}
18551855

1856-
/* Constructs an arguments_ty object out of all the parsed constructs in the parameters rule */
1857-
arguments_ty
1858-
_PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default,
1859-
SlashWithDefault *slash_with_default, asdl_arg_seq *plain_names,
1860-
asdl_seq *names_with_default, StarEtc *star_etc)
1861-
{
1862-
asdl_arg_seq *posonlyargs;
1856+
static int
1857+
_make_posonlyargs(Parser *p,
1858+
asdl_arg_seq *slash_without_default,
1859+
SlashWithDefault *slash_with_default,
1860+
asdl_arg_seq **posonlyargs) {
18631861
if (slash_without_default != NULL) {
1864-
posonlyargs = slash_without_default;
1862+
*posonlyargs = slash_without_default;
18651863
}
18661864
else if (slash_with_default != NULL) {
18671865
asdl_arg_seq *slash_with_default_names =
1868-
_get_names(p, slash_with_default->names_with_defaults);
1866+
_get_names(p, slash_with_default->names_with_defaults);
18691867
if (!slash_with_default_names) {
1870-
return NULL;
1868+
return -1;
18711869
}
1872-
posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1870+
*posonlyargs = (asdl_arg_seq*)_PyPegen_join_sequences(
18731871
p,
18741872
(asdl_seq*)slash_with_default->plain_names,
18751873
(asdl_seq*)slash_with_default_names);
1876-
if (!posonlyargs) {
1877-
return NULL;
1878-
}
18791874
}
18801875
else {
1881-
posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1882-
if (!posonlyargs) {
1883-
return NULL;
1884-
}
1876+
*posonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
18851877
}
1878+
return *posonlyargs == NULL ? -1 : 0;
1879+
}
18861880

1887-
asdl_arg_seq *posargs;
1881+
static int
1882+
_make_posargs(Parser *p,
1883+
asdl_arg_seq *plain_names,
1884+
asdl_seq *names_with_default,
1885+
asdl_arg_seq **posargs) {
18881886
if (plain_names != NULL && names_with_default != NULL) {
18891887
asdl_arg_seq *names_with_default_names = _get_names(p, names_with_default);
18901888
if (!names_with_default_names) {
1891-
return NULL;
1892-
}
1893-
posargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1894-
p,
1895-
(asdl_seq*)plain_names,
1896-
(asdl_seq*)names_with_default_names);
1897-
if (!posargs) {
1898-
return NULL;
1889+
return -1;
18991890
}
1891+
*posargs = (asdl_arg_seq*)_PyPegen_join_sequences(
1892+
p,(asdl_seq*)plain_names, (asdl_seq*)names_with_default_names);
19001893
}
19011894
else if (plain_names == NULL && names_with_default != NULL) {
1902-
posargs = _get_names(p, names_with_default);
1903-
if (!posargs) {
1904-
return NULL;
1905-
}
1895+
*posargs = _get_names(p, names_with_default);
19061896
}
19071897
else if (plain_names != NULL && names_with_default == NULL) {
1908-
posargs = plain_names;
1898+
*posargs = plain_names;
19091899
}
19101900
else {
1911-
posargs = _Py_asdl_arg_seq_new(0, p->arena);
1912-
if (!posargs) {
1913-
return NULL;
1914-
}
1901+
*posargs = _Py_asdl_arg_seq_new(0, p->arena);
19151902
}
1903+
return *posargs == NULL ? -1 : 0;
1904+
}
19161905

1917-
asdl_expr_seq *posdefaults;
1906+
static int
1907+
_make_posdefaults(Parser *p,
1908+
SlashWithDefault *slash_with_default,
1909+
asdl_seq *names_with_default,
1910+
asdl_expr_seq **posdefaults) {
19181911
if (slash_with_default != NULL && names_with_default != NULL) {
19191912
asdl_expr_seq *slash_with_default_values =
1920-
_get_defaults(p, slash_with_default->names_with_defaults);
1913+
_get_defaults(p, slash_with_default->names_with_defaults);
19211914
if (!slash_with_default_values) {
1922-
return NULL;
1915+
return -1;
19231916
}
19241917
asdl_expr_seq *names_with_default_values = _get_defaults(p, names_with_default);
19251918
if (!names_with_default_values) {
1926-
return NULL;
1919+
return -1;
19271920
}
1928-
posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences(
1921+
*posdefaults = (asdl_expr_seq*)_PyPegen_join_sequences(
19291922
p,
19301923
(asdl_seq*)slash_with_default_values,
19311924
(asdl_seq*)names_with_default_values);
1932-
if (!posdefaults) {
1933-
return NULL;
1934-
}
19351925
}
19361926
else if (slash_with_default == NULL && names_with_default != NULL) {
1937-
posdefaults = _get_defaults(p, names_with_default);
1938-
if (!posdefaults) {
1939-
return NULL;
1940-
}
1927+
*posdefaults = _get_defaults(p, names_with_default);
19411928
}
19421929
else if (slash_with_default != NULL && names_with_default == NULL) {
1943-
posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
1944-
if (!posdefaults) {
1945-
return NULL;
1946-
}
1930+
*posdefaults = _get_defaults(p, slash_with_default->names_with_defaults);
19471931
}
19481932
else {
1949-
posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
1950-
if (!posdefaults) {
1951-
return NULL;
1952-
}
1953-
}
1954-
1955-
arg_ty vararg = NULL;
1956-
if (star_etc != NULL && star_etc->vararg != NULL) {
1957-
vararg = star_etc->vararg;
1933+
*posdefaults = _Py_asdl_expr_seq_new(0, p->arena);
19581934
}
1935+
return *posdefaults == NULL ? -1 : 0;
1936+
}
19591937

1960-
asdl_arg_seq *kwonlyargs;
1938+
static int
1939+
_make_kwargs(Parser *p, StarEtc *star_etc,
1940+
asdl_arg_seq **kwonlyargs,
1941+
asdl_expr_seq **kwdefaults) {
19611942
if (star_etc != NULL && star_etc->kwonlyargs != NULL) {
1962-
kwonlyargs = _get_names(p, star_etc->kwonlyargs);
1963-
if (!kwonlyargs) {
1964-
return NULL;
1965-
}
1943+
*kwonlyargs = _get_names(p, star_etc->kwonlyargs);
19661944
}
19671945
else {
1968-
kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1969-
if (!kwonlyargs) {
1970-
return NULL;
1971-
}
1946+
*kwonlyargs = _Py_asdl_arg_seq_new(0, p->arena);
1947+
}
1948+
1949+
if (*kwonlyargs == NULL) {
1950+
return -1;
19721951
}
19731952

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

19881999
arg_ty kwarg = NULL;
@@ -1994,6 +2005,7 @@ _PyPegen_make_arguments(Parser *p, asdl_arg_seq *slash_without_default,
19942005
kwdefaults, kwarg, posdefaults, p->arena);
19952006
}
19962007

2008+
19972009
/* Constructs an empty arguments_ty object, that gets used when a function accepts no
19982010
* arguments. */
19992011
arguments_ty

0 commit comments

Comments
 (0)