# This is the implementation of gc_filter for Rhapsody generated Ada code # The following markers are recognized: # --#[ --> opens a block of user code # --#] --> closes a block of user code # some code --## --> user code on current line # --## --> user code on next line namespace eval gc_filter { variable next_state 0 proc change_gc_state {line} { variable marker_level variable next_state incr next_state -1 if {[regexp -- {--\s*#\[\s*([^\s]+)} $line dummy marker]} { variable marker_found 1 switch -- $marker { default { incr marker_level if {$marker_level == 1} { return 1 } } } } elseif {[regexp -- {--\s*#\]\s*([^\s]*)} $line dummy marker]} { variable marker_found 1 switch -- $marker { default { if {$marker_level} { incr marker_level -1 if {!$marker_level} { return 1 } } } } } elseif {[regexp -- {^\s*--\s*##\s*([^\s]*)} $line dummy marker]} { variable marker_found 1 switch -- $marker { auto_generated { # code in auto_generated is not user code # add more marker to ignore if neeed } default { variable next_state 2 return 1 } } } elseif {[regexp -- {--\s*##\s*([^\s]*)} $line dummy marker]} { variable marker_found 1 switch -- $marker { auto_generated { # code in auto_generated is not user code # add more marker to ignore if neeed } default { variable next_state 1 return 1 } } } if {$next_state == 0 && !$marker_level} { return 1 } return 0 } }