parent
							
								
									808d92dfb6
								
							
						
					
					
						commit
						38cf75733e
					
				| 
						 | 
				
			
			@ -2,7 +2,8 @@ enum {
 | 
			
		|||
    TOK_NONE, TOK_OPEN, TOK_CLOSE, TOK_DOT, TOK_QUOTE, TOK_SYM, TOK_NUM,
 | 
			
		||||
    TOK_BQ, TOK_COMMA, TOK_COMMAAT, TOK_COMMADOT,
 | 
			
		||||
    TOK_SHARPDOT, TOK_LABEL, TOK_BACKREF, TOK_SHARPQUOTE, TOK_SHARPOPEN,
 | 
			
		||||
    TOK_OPENB, TOK_CLOSEB, TOK_SHARPSYM, TOK_GENSYM, TOK_DOUBLEQUOTE
 | 
			
		||||
    TOK_OPENB, TOK_CLOSEB, TOK_SHARPSYM, TOK_GENSYM, TOK_DOUBLEQUOTE,
 | 
			
		||||
    TOK_SHARPSEMI
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// defines which characters are ordinary symbol characters.
 | 
			
		||||
| 
						 | 
				
			
			@ -221,21 +222,37 @@ static u_int32_t peek(ios_t *f)
 | 
			
		|||
        }
 | 
			
		||||
        else if ((char)ch == '|') {
 | 
			
		||||
            // multiline comment
 | 
			
		||||
            int commentlevel=1;
 | 
			
		||||
            while (1) {
 | 
			
		||||
                ch = ios_getc(f);
 | 
			
		||||
            hashpipe_got:
 | 
			
		||||
            hashpipe_gotc:
 | 
			
		||||
                if (ch == IOS_EOF)
 | 
			
		||||
                    lerror(ParseError, "read: eof within comment");
 | 
			
		||||
                if ((char)ch == '|') {
 | 
			
		||||
                    ch = ios_getc(f);
 | 
			
		||||
                    if ((char)ch == '#')
 | 
			
		||||
                    if ((char)ch == '#') {
 | 
			
		||||
                        commentlevel--;
 | 
			
		||||
                        if (commentlevel == 0)
 | 
			
		||||
                            break;
 | 
			
		||||
                    goto hashpipe_got;
 | 
			
		||||
                        else
 | 
			
		||||
                            continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    goto hashpipe_gotc;
 | 
			
		||||
                }
 | 
			
		||||
                else if ((char)ch == '#') {
 | 
			
		||||
                    ch = ios_getc(f);
 | 
			
		||||
                    if ((char)ch == '|')
 | 
			
		||||
                        commentlevel++;
 | 
			
		||||
                    else
 | 
			
		||||
                        goto hashpipe_gotc;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // this was whitespace, so keep peeking
 | 
			
		||||
            return peek(f);
 | 
			
		||||
        }
 | 
			
		||||
        else if ((char)ch == ';') {
 | 
			
		||||
            toktype = TOK_SHARPSEMI;
 | 
			
		||||
        }
 | 
			
		||||
        else if ((char)ch == ':') {
 | 
			
		||||
            // gensym
 | 
			
		||||
            ch = ios_getc(f);
 | 
			
		||||
| 
						 | 
				
			
			@ -485,6 +502,10 @@ static value_t do_read_sexpr(ios_t *f, value_t label)
 | 
			
		|||
    case TOK_SHARPQUOTE:
 | 
			
		||||
        // femtoLisp doesn't need symbol-function, so #' does nothing
 | 
			
		||||
        return do_read_sexpr(f, label);
 | 
			
		||||
    case TOK_SHARPSEMI:
 | 
			
		||||
        // datum comment
 | 
			
		||||
        (void)do_read_sexpr(f, UNBOUND); // skip one
 | 
			
		||||
        return do_read_sexpr(f, label);
 | 
			
		||||
    case TOK_OPEN:
 | 
			
		||||
        PUSH(NIL);
 | 
			
		||||
        read_list(f, &Stack[SP-1], label);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue