From: Martin R. <ru...@us...> - 2010-04-26 15:55:38
|
Update of /cvsroot/foo/fooelk/src In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv13298/src Modified Files: read.c Log Message: equiv to revision level r279 of original elk: Support for [] delimiters in addition to (), courtesy of Sanel Zukan. Index: read.c =================================================================== RCS file: /cvsroot/foo/fooelk/src/read.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** read.c 26 Apr 2010 15:41:08 -0000 1.2 --- read.c 26 Apr 2010 15:55:30 -0000 1.3 *************** *** 81,85 **** Object General_Read(), Read_Sequence(), Read_Atom(), Read_Special(); Object Read_String(), Read_Sharp(), Read_True(), Read_False(), Read_Void(); ! Object Read_Kludge(), Read_Vector(), Read_Radix(), Read_Char(); void Init_Read () { --- 81,85 ---- Object General_Read(), Read_Sequence(), Read_Atom(), Read_Special(); Object Read_String(), Read_Sharp(), Read_True(), Read_False(), Read_Void(); ! Object Read_Kludge(), Read_Vector_Paren(), Read_Vector_Bracket(), Read_Radix(), Read_Char(); void Init_Read () { *************** *** 93,97 **** Readers['v'] = Readers['V'] = Read_Void; Readers['!'] = Read_Kludge; /* for interpreter files */ ! Readers['('] = Read_Vector; Readers['b'] = Readers['B'] = Readers['o'] = Readers['O'] = --- 93,98 ---- Readers['v'] = Readers['V'] = Read_Void; Readers['!'] = Read_Kludge; /* for interpreter files */ ! Readers['('] = Read_Vector_Paren; ! Readers['['] = Read_Vector_Bracket; Readers['b'] = Readers['B'] = Readers['o'] = Readers['O'] = *************** *** 274,279 **** continue; } ! if (c == '(') { ! ret = Read_Sequence (port, 0, konst); } else if (c == '#') { ret = Read_Sharp (port, konst); --- 275,280 ---- continue; } ! if (c == '(' || c == '[') { ! ret = Read_Sequence (port, 0, konst, c); } else if (c == '#') { ret = Read_Sharp (port, konst); *************** *** 334,342 **** goto eof; goto again; case ')': SET(ret, T_Special, c); return ret; case '(': ! return Read_Sequence (port, 0, konst); case '\'': return READ_QUOTE(Sym_Quote); --- 335,345 ---- goto eof; goto again; + case ']': case ')': SET(ret, T_Special, c); return ret; + case '[': case '(': ! return Read_Sequence (port, 0, konst, c); case '\'': return READ_QUOTE(Sym_Quote); *************** *** 395,399 **** } ! Object Read_Sequence (Object port, int vec, int konst) { Object ret, e, tail, t; GC_Node3; --- 398,402 ---- } ! Object Read_Sequence (Object port, int vec, int konst, int start_chr) { Object ret, e, tail, t; GC_Node3; *************** *** 404,408 **** e = Read_Special (port, konst); if (TYPE(e) == T_Special) { ! if (CHAR(e) == ')') { GC_Unlink; return ret; --- 407,418 ---- e = Read_Special (port, konst); if (TYPE(e) == T_Special) { ! if (CHAR(e) == ')' || CHAR(e) == ']') { ! if ((start_chr == '(' && CHAR(e) == ']') ! || (start_chr == '[' && CHAR(e) == ')')) { ! char buf[64]; ! sprintf(buf, "expression starts with '%c' but ends " ! "with '%c'", start_chr, CHAR(e)); ! Reader_Error (port, buf); ! } GC_Unlink; return ret; *************** *** 421,425 **** } e = Read_Special (port, konst); ! if (TYPE(e) == T_Special && CHAR(e) == ')') { GC_Unlink; return ret; --- 431,435 ---- } e = Read_Special (port, konst); ! if (TYPE(e) == T_Special && (CHAR(e) == ')' || CHAR(e) == ']')) { GC_Unlink; return ret; *************** *** 523,528 **** /*ARGSUSED*/ ! Object Read_Vector (Object port, int chr, int konst) { ! return List_To_Vector (Read_Sequence (port, 1, konst), konst); } --- 533,543 ---- /*ARGSUSED*/ ! Object Read_Vector_Paren (Object port, int chr, int konst) { ! return List_To_Vector (Read_Sequence (port, 1, konst, '('), konst); ! } ! ! /*ARGSUSED*/ ! Object Read_Vector_Bracket (Object port, int chr, int konst) { ! return List_To_Vector (Read_Sequence (port, 1, konst, '['), konst); } |