[brlcad-commits] SF.net SVN: brlcad:[50774] brlcad/trunk/src/libbu/lex.c
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <cr...@us...> - 2012-05-30 23:23:37
|
Revision: 50774 http://brlcad.svn.sourceforge.net/brlcad/?rev=50774&view=rev Author: crdueck Date: 2012-05-30 23:23:30 +0000 (Wed, 30 May 2012) Log Message: ----------- rewrote section to improve readability and remove a goto loop, ws changes Modified Paths: -------------- brlcad/trunk/src/libbu/lex.c Modified: brlcad/trunk/src/libbu/lex.c =================================================================== --- brlcad/trunk/src/libbu/lex.c 2012-05-30 22:23:17 UTC (rev 50773) +++ brlcad/trunk/src/libbu/lex.c 2012-05-30 23:23:30 UTC (rev 50774) @@ -33,6 +33,7 @@ { register char *cp; register char *sp; + register char tc; register char *unit; int number; @@ -41,46 +42,36 @@ BU_CK_VLS(rtstr); cp = bu_vls_addr(rtstr); -top: - if (bu_lex_reading_comment) { - for (;;) { - register char tc; - tc = *cp; cp++; - if (!tc) { - return 0; - } - if (tc != '*') continue; - if (*cp != '/') continue; - cp++; /* Skip the '/' */ - break; - } - bu_lex_reading_comment = 0; - } + while (1) { + if (bu_lex_reading_comment) { + do { + /* looking at two consecutive chars */ + tc = *cp; cp++; + if (!tc) { + return 0; + } + } while (!(tc == '*' && *cp == '/')); + cp++; /* skip the '/' */ + bu_lex_reading_comment = 0; + } + /* skip leading blanks */ + while (*cp && isspace(*cp)) cp++; + /* is this a comment? '#' to end of line is */ + if (!*cp || *cp == '#') { + return 0; - /* - * skip leading blanks - */ - for (; *cp && isspace(*cp); cp++); - /* - * Is this a comment? '#' to end of line is. - */ - if (!*cp || *cp == '#') { - return 0; + } + /* is this a 'C' multi-line comment? */ + if (*cp == '/' && *(cp+1) == '*') { + cp += 2; + bu_lex_reading_comment = 1; + } else /* we are done reading comments */ { + break; + } } - /* - * Is this a 'C' multi-line comment? - */ - if (*cp == '/' && *(cp+1)=='*') { - cp += 2; - bu_lex_reading_comment = 1; - goto top; - } - /* - * cp points to the first non-blank character. - */ + /* cp points to the first non-blank character */ sp = cp; /* start pointer */ while (*cp) { - register char tc; tc = *cp; cp++; /* @@ -100,7 +91,7 @@ if (number == 1) number = 2; continue; } - if (number==2 && tc == '.') { + if (number == 2 && tc == '.') { /* * [0-9][0-9]*. */ @@ -126,7 +117,7 @@ } if (!isalnum(tc) && tc != '.' && tc != '_') break; } - if (number == 6) --cp; /* subtract off the + or - */ + if (number == 6) --cp; /* subtract off the + or - */ if (number == 3) --cp; /* subtract off the . */ /* * All spaces have been skipped. (sp) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |