339 |
case '(': |
case '(': |
340 |
return SCM_RECORD_POSITIONS_P |
return SCM_RECORD_POSITIONS_P |
341 |
? scm_lreadrecparen (tok_buf, port, s_list, copy) |
? scm_lreadrecparen (tok_buf, port, s_list, copy) |
342 |
: scm_lreadparen (tok_buf, port, s_list, copy); |
: scm_lreadparen (tok_buf, port, s_list, copy SCM_ELISP_CLOSE); |
343 |
case ')': |
case ')': |
344 |
scm_input_error (FUNC_NAME, port,"unexpected \")\"", SCM_EOL); |
scm_input_error (FUNC_NAME, port,"unexpected \")\"", SCM_EOL); |
345 |
goto tryagain; |
goto tryagain; |
346 |
|
|
347 |
|
#ifdef SCM_ELISP_READ_EXTENSIONS |
348 |
|
case '[': |
349 |
|
p = scm_lreadparen (tok_buf, port, "vector", copy, ']'); |
350 |
|
return SCM_NULLP (p) ? scm_nullvect : scm_vector (p); |
351 |
|
#endif |
352 |
case '\'': |
case '\'': |
353 |
p = scm_sym_quote; |
p = scm_sym_quote; |
354 |
goto recquote; |
goto recquote; |
408 |
switch (c) |
switch (c) |
409 |
{ |
{ |
410 |
case '(': |
case '(': |
411 |
p = scm_lreadparen (tok_buf, port, "vector", copy); |
p = scm_lreadparen (tok_buf, port, "vector", copy SCM_ELISP_CLOSE); |
412 |
return SCM_NULLP (p) ? scm_nullvect : scm_vector (p); |
return SCM_NULLP (p) ? scm_nullvect : scm_vector (p); |
413 |
|
|
414 |
case 't': |
case 't': |
634 |
{ |
{ |
635 |
case '(': |
case '(': |
636 |
case ')': |
case ')': |
637 |
|
#ifdef SCM_ELISP_READ_EXTENSIONS |
638 |
|
case '[': |
639 |
|
case ']': |
640 |
|
#endif |
641 |
case '"': |
case '"': |
642 |
case ';': |
case ';': |
643 |
case SCM_WHITE_SPACES: |
case SCM_WHITE_SPACES: |
695 |
#endif |
#endif |
696 |
|
|
697 |
SCM |
SCM |
698 |
scm_lreadparen (SCM *tok_buf, SCM port, char *name, SCM *copy) |
scm_lreadparen (SCM *tok_buf, SCM port, char *name, SCM *copy |
699 |
|
#ifdef SCM_ELISP_READ_EXTENSIONS |
700 |
|
, char term_char |
701 |
|
#else |
702 |
|
#define term_char ')' |
703 |
|
#endif |
704 |
|
) |
705 |
#define FUNC_NAME "scm_lreadparen" |
#define FUNC_NAME "scm_lreadparen" |
706 |
{ |
{ |
707 |
SCM tmp; |
SCM tmp; |
710 |
int c; |
int c; |
711 |
|
|
712 |
c = scm_flush_ws (port, name); |
c = scm_flush_ws (port, name); |
713 |
if (')' == c) |
if (term_char == c) |
714 |
return SCM_EOL; |
return SCM_EOL; |
715 |
scm_ungetc (c, port); |
scm_ungetc (c, port); |
716 |
if (SCM_EQ_P (scm_sym_dot, (tmp = scm_lreadr (tok_buf, port, copy)))) |
if (SCM_EQ_P (scm_sym_dot, (tmp = scm_lreadr (tok_buf, port, copy)))) |
717 |
{ |
{ |
718 |
ans = scm_lreadr (tok_buf, port, copy); |
ans = scm_lreadr (tok_buf, port, copy); |
719 |
closeit: |
closeit: |
720 |
if (')' != (c = scm_flush_ws (port, name))) |
if (term_char != (c = scm_flush_ws (port, name))) |
721 |
scm_input_error (FUNC_NAME, port, "missing close paren", SCM_EOL); |
scm_input_error (FUNC_NAME, port, "missing close paren", SCM_EOL); |
722 |
return ans; |
return ans; |
723 |
} |
} |
724 |
ans = tl = scm_cons (tmp, SCM_EOL); |
ans = tl = scm_cons (tmp, SCM_EOL); |
725 |
while (')' != (c = scm_flush_ws (port, name))) |
while (term_char != (c = scm_flush_ws (port, name))) |
726 |
{ |
{ |
727 |
scm_ungetc (c, port); |
scm_ungetc (c, port); |
728 |
if (SCM_EQ_P (scm_sym_dot, (tmp = scm_lreadr (tok_buf, port, copy)))) |
if (SCM_EQ_P (scm_sym_dot, (tmp = scm_lreadr (tok_buf, port, copy)))) |
736 |
return ans; |
return ans; |
737 |
} |
} |
738 |
#undef FUNC_NAME |
#undef FUNC_NAME |
739 |
|
#ifndef SCM_ELISP_READ_EXTENSIONS |
740 |
|
#undef term_char |
741 |
|
#endif |
742 |
|
|
743 |
|
|
744 |
SCM |
SCM |