summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--05/main.c1
-rw-r--r--05/tokenize.b17
-rw-r--r--05/util.b22
3 files changed, 40 insertions, 0 deletions
diff --git a/05/main.c b/05/main.c
index 1348a5b..a5f47ba 100644
--- a/05/main.c
+++ b/05/main.c
@@ -2,3 +2,4 @@
char * = "How are you"" d""o""i""ng today?\n";
hi
_TEST _ING _1
+4.2
diff --git a/05/tokenize.b b/05/tokenize.b
index e6bd48e..5f87c71 100644
--- a/05/tokenize.b
+++ b/05/tokenize.b
@@ -310,6 +310,13 @@ function tokenize
data = significand
exponent += 1023 ; float format
data |= exponent < 52
+
+ *1out = TOKEN_CONSTANT_FLOAT
+ out += 1
+ ; suffix
+ *1out = read_number_suffix(file, line_number, &in)
+ out += 1
+ goto token_output
:float_no_integer
byte 0xcc
:float_zero
@@ -500,6 +507,7 @@ function print_tokens
if *1p > 20 goto print_token_keyword
if *1p == TOKEN_CONSTANT_INT goto print_token_int
if *1p == TOKEN_CONSTANT_CHAR goto print_token_char
+ if *1p == TOKEN_CONSTANT_FLOAT goto print_token_float
if *1p == TOKEN_STRING_LITERAL goto print_token_string_literal
if *1p == TOKEN_IDENTIFIER goto print_token_identifier
fputs(2, .str_print_bad_token)
@@ -521,6 +529,12 @@ function print_tokens
s = p + 8
puts(*8s)
goto print_token_data
+ :print_token_float
+ p += 8
+ puts(.str_constant_float)
+ putx(*8p)
+ p += 8
+ goto print_tokens_loop
:print_token_info
p += 1
putc('~)
@@ -545,6 +559,9 @@ function print_tokens
:str_constant_int
string integer
byte 0
+ :str_constant_float
+ string float
+ byte 0
:str_constant_char
string character
byte 0
diff --git a/05/util.b b/05/util.b
index 51a98da..fc1aa1e 100644
--- a/05/util.b
+++ b/05/util.b
@@ -308,6 +308,28 @@ function fputn_signed
fputn(fd, n)
return
+function fputx
+ argument fd
+ argument n
+ local m
+ local x
+ m = 60
+ :fputx_loop
+ x = n > m
+ x &= 0xf
+ x += .hex_digits
+ fputc(fd, *1x)
+ m -= 4
+ if m >= 0 goto fputx_loop
+ return
+:hex_digits
+ string 0123456789abcdef
+
+function putx
+ argument n
+ fputx(1, n)
+ return
+
function putn
argument n
fputn(1, n)