MCPcopy Create free account
hub / github.com/F-Stack/f-stack / db_lex

Function db_lex

freebsd/ddb/db_lex.c:162–381  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

160}
161
162static int
163db_lex(int flags)
164{
165 int c, n, radix_mode;
166 bool lex_wspace, lex_hex_numbers;
167
168 switch (flags & DRT_RADIX_MASK) {
169 case DRT_DEFAULT_RADIX:
170 radix_mode = -1;
171 break;
172 case DRT_OCTAL:
173 radix_mode = 8;
174 break;
175 case DRT_DECIMAL:
176 radix_mode = 10;
177 break;
178 case DRT_HEXADECIMAL:
179 radix_mode = 16;
180 break;
181 }
182
183 lex_wspace = ((flags & DRT_WSPACE) != 0);
184 lex_hex_numbers = ((flags & DRT_HEX) != 0);
185
186 c = db_read_char();
187 for (n = 0; c <= ' ' || c > '~'; n++) {
188 if (c == '\n' || c == -1)
189 return (tEOL);
190 c = db_read_char();
191 }
192 if (lex_wspace && n != 0) {
193 db_unread_char(c);
194 return (tWSPACE);
195 }
196
197 if ((c >= '0' && c <= '9') ||
198 (lex_hex_numbers &&
199 ((c >= 'a' && c <= 'f') ||
200 (c >= 'A' && c <= 'F')))) {
201 /* number */
202 int r, digit = 0;
203
204 if (radix_mode != -1)
205 r = radix_mode;
206 else if (c != '0')
207 r = db_radix;
208 else {
209 c = db_read_char();
210 if (c == 'O' || c == 'o')
211 r = 8;
212 else if (c == 'T' || c == 't')
213 r = 10;
214 else if (c == 'X' || c == 'x')
215 r = 16;
216 else {
217 r = db_radix;
218 db_unread_char(c);
219 }

Callers 1

db_read_token_flagsFunction · 0.85

Calls 5

db_read_charFunction · 0.85
db_unread_charFunction · 0.85
db_errorFunction · 0.85
db_flush_lexFunction · 0.85
db_printfFunction · 0.85

Tested by

no test coverage detected