comparison src/syntax.c @ 29823:5a736b07dbf2

(scan_sexps_forward): Check the comstyle of single-char comment-starters. Clarify control-flow around the Scomment case.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Tue, 20 Jun 2000 22:48:26 +0000
parents 819dfcbd36c7
children 5dec8ee96c0c
comparison
equal deleted inserted replaced
29822:d24cc3dc6bbc 29823:5a736b07dbf2
2565 INC_FROM; 2565 INC_FROM;
2566 code = prev_from_syntax & 0xff; 2566 code = prev_from_syntax & 0xff;
2567 2567
2568 if (code == Scomment) 2568 if (code == Scomment)
2569 { 2569 {
2570 state.comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax);
2570 state.incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ? 2571 state.incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ?
2571 1 : -1); 2572 1 : -1);
2572 state.comstr_start = prev_from; 2573 state.comstr_start = prev_from;
2573 } 2574 }
2574 else if (code == Scomment_fence) 2575 else if (code == Scomment_fence)
2640 } 2641 }
2641 symdone: 2642 symdone:
2642 curlevel->prev = curlevel->last; 2643 curlevel->prev = curlevel->last;
2643 break; 2644 break;
2644 2645
2646 case Scomment:
2647 if (commentstop || boundary_stop) goto done;
2645 startincomment: 2648 startincomment:
2646 if (commentstop == 1) 2649 /* The (from == BEGV) test was to enter the loop in the middle so
2647 goto done;
2648 goto commentloop;
2649
2650 case Scomment:
2651 if (! state.incomment)
2652 abort ();
2653 if (commentstop || boundary_stop) goto done;
2654 commentloop:
2655 /* The (from == BEGV) test is to enter the loop in the middle so
2656 that we find a 2-char comment ender even if we start in the 2650 that we find a 2-char comment ender even if we start in the
2657 middle of it. We don't want to do that if we're just at the 2651 middle of it. We don't want to do that if we're just at the
2658 beginning of the comment (think of (*) ... (*)). 2652 beginning of the comment (think of (*) ... (*)). */
2659 Actually, the current code still doesn't handle such cases right
2660 when the comment style allows nesting. */
2661 found = forw_comment (from, from_byte, end, 2653 found = forw_comment (from, from_byte, end,
2662 state.incomment, state.comstyle, 2654 state.incomment, state.comstyle,
2663 (from == BEGV || from < state.comstr_start + 3) 2655 (from == BEGV || from < state.comstr_start + 3)
2664 ? 0 : prev_from_syntax, 2656 ? 0 : prev_from_syntax,
2665 &out_charpos, &out_bytepos, &state.incomment); 2657 &out_charpos, &out_bytepos, &state.incomment);
2666 from = out_charpos; from_byte = out_bytepos; 2658 from = out_charpos; from_byte = out_bytepos;
2667 /* Beware! prev_from and friends are invalid now. 2659 /* Beware! prev_from and friends are invalid now.
2668 Luckily, the `done' doesn't use them and the INC_FROM 2660 Luckily, the `done' doesn't use them and the INC_FROM
2669 sets them to a sane value without looking at them. */ 2661 sets them to a sane value without looking at them. */
2670 if (!found) goto done; 2662 if (!found) goto done;
2671 INC_FROM; 2663 INC_FROM;
2672 state.incomment = 0; 2664 state.incomment = 0;
2673 state.comstyle = 0; /* reset the comment style */ 2665 state.comstyle = 0; /* reset the comment style */
2674 if (boundary_stop) goto done; 2666 if (boundary_stop) goto done;
2675 break; 2667 break;
2676 2668