# ------------------------------------------------------------ # Copyright (c) 2020-2020 # Q.W.Page Associates Inc. # www.qwpage.com # All rights reserved. # ------------------------------------------------------------ ::namespace eval ::qw::debugutil {} ::proc ::qw::debugutil::braces_check {sargs} { /* { Checks all braces match and throws exception if they don't match. */ } ::set Data [::sargs::get $sargs .data]; ::if {$Data eq ""} { ::if {![::sargs::exists $sargs .data]} { ::qw::bug 314120200918153410 "[::qw::procname] - no .data argument."; } ::return; } ::set BraceCount 0; ::set LeftCount 0; ::set RightCount 0; ::set Pos 0; ::set Length [::string length $Data]; ::while {$Pos<$Length} { ::switch -- "[::string index $Data $Pos]" { "{" { ::incr BraceCount 1; ::incr LeftCount 1; } "}" { ::incr BraceCount -1; ::incr RightCount 1; } } ::if {$BraceCount<0} { ::qw::error 314120200918113836 "Mismatched braces. Too many right-braces."; } ::incr Pos; } ::if {$BraceCount!=0} { ::qw::error 314120200918113837 "Mismatched braces. left==$LeftCount,right==$RightCount"; } } ::proc ::qw::debugutil::braces_match {sargs} { /* { Checks all braces match and returns 0 if the don't. */ } ::set Data [::sargs::get $sargs .data]; ::if {$Data eq ""} { ::if {![::sargs::exists $sargs .data]} { ::qw::bug 314120200918153411 "[::qw::procname] - no .data argument."; } ::return 1; } ::set BraceCount 0; ::set LeftCount 0; ::set RightCount 0; ::set Pos 0; ::set Length [::string length $Data]; ::while {$Pos<$Length} { ::switch -- "[::string index $Data $Pos]" { "{" { ::incr BraceCount 1; ::incr LeftCount 1; } "}" { ::incr BraceCount -1; ::incr RightCount 1; } } ::if {$BraceCount<0} { ::puts "::qw::debugutil::braces_match 314120200918113841 Mismatched braces. Too many right-braces."; ::return 0; } ::incr Pos; } ::if {$BraceCount!=0} { ::puts "::qw::debugutil::braces_match 314120200918113841 Mismatched braces. left==$LeftCount,right==$RightCount"; ::return 0; } ::return 1; }