aboutsummaryrefslogtreecommitdiff
path: root/src/tokenizer.c
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-03-19 16:59:11 +0000
committerGinger Bill <bill@gingerbill.org>2017-03-19 16:59:11 +0000
commit5562364a98f01a0c0221a70345656d45de0d2009 (patch)
tree3ea4409ec3fcd1b7469c96d0e6ff03b437f8f823 /src/tokenizer.c
parent32150e401e39bd68f9882c3983829e744603dac1 (diff)
Add branch labels for loops; using list
Diffstat (limited to 'src/tokenizer.c')
-rw-r--r--src/tokenizer.c36
1 files changed, 18 insertions, 18 deletions
diff --git a/src/tokenizer.c b/src/tokenizer.c
index cfc1423f0..6c7f76c02 100644
--- a/src/tokenizer.c
+++ b/src/tokenizer.c
@@ -484,15 +484,9 @@ gb_inline i32 digit_value(Rune r) {
return 16; // NOTE(bill): Larger than highest possible
}
-gb_inline void scan_mantissa(Tokenizer *t, i32 base, bool allow_underscore) {
- if (allow_underscore) {
- while (digit_value(t->curr_rune) < base || t->curr_rune == '_') {
- advance_to_next_rune(t);
- }
- } else {
- while (digit_value(t->curr_rune) < base) {
- advance_to_next_rune(t);
- }
+gb_inline void scan_mantissa(Tokenizer *t, i32 base) {
+ while (digit_value(t->curr_rune) < base || t->curr_rune == '_') {
+ advance_to_next_rune(t);
}
}
@@ -506,7 +500,7 @@ Token scan_number_to_token(Tokenizer *t, bool seen_decimal_point) {
if (seen_decimal_point) {
token.kind = Token_Float;
- scan_mantissa(t, 10, true);
+ scan_mantissa(t, 10);
goto exponent;
}
@@ -515,31 +509,37 @@ Token scan_number_to_token(Tokenizer *t, bool seen_decimal_point) {
advance_to_next_rune(t);
if (t->curr_rune == 'b') { // Binary
advance_to_next_rune(t);
- scan_mantissa(t, 2, true);
+ scan_mantissa(t, 2);
if (t->curr - prev <= 2) {
token.kind = Token_Invalid;
}
} else if (t->curr_rune == 'o') { // Octal
advance_to_next_rune(t);
- scan_mantissa(t, 8, true);
+ scan_mantissa(t, 8);
if (t->curr - prev <= 2) {
token.kind = Token_Invalid;
}
} else if (t->curr_rune == 'd') { // Decimal
advance_to_next_rune(t);
- scan_mantissa(t, 10, true);
+ scan_mantissa(t, 10);
+ if (t->curr - prev <= 2) {
+ token.kind = Token_Invalid;
+ }
+ } else if (t->curr_rune == 'z') { // Dozenal
+ advance_to_next_rune(t);
+ scan_mantissa(t, 12);
if (t->curr - prev <= 2) {
token.kind = Token_Invalid;
}
} else if (t->curr_rune == 'x') { // Hexadecimal
advance_to_next_rune(t);
- scan_mantissa(t, 16, true);
+ scan_mantissa(t, 16);
if (t->curr - prev <= 2) {
token.kind = Token_Invalid;
}
} else {
seen_decimal_point = false;
- scan_mantissa(t, 10, true);
+ scan_mantissa(t, 10);
if (t->curr_rune == '.' || t->curr_rune == 'e' || t->curr_rune == 'E') {
seen_decimal_point = true;
@@ -551,7 +551,7 @@ Token scan_number_to_token(Tokenizer *t, bool seen_decimal_point) {
return token;
}
- scan_mantissa(t, 10, true);
+ scan_mantissa(t, 10);
fraction:
if (t->curr_rune == '.') {
@@ -564,7 +564,7 @@ fraction:
goto end;
}
token.kind = Token_Float;
- scan_mantissa(t, 10, true);
+ scan_mantissa(t, 10);
}
exponent:
@@ -574,7 +574,7 @@ exponent:
if (t->curr_rune == '-' || t->curr_rune == '+') {
advance_to_next_rune(t);
}
- scan_mantissa(t, 10, false);
+ scan_mantissa(t, 10);
}
end: