From 49ebc03568941f379d399f60d0c53cde05cc9f7c Mon Sep 17 00:00:00 2001
From: ahmedsamyh <ahmedsamyh10@gmail.com>
Date: Sat, 16 Nov 2024 23:24:42 +0500
Subject: [PATCH] # TODO: Handle floating point numbers

---
 main.momo                                 |  9 +++------
 main.py                                   | 15 +++++++++++----
 tests/08-floating-point-numbers.momo      |  3 +++
 tests/08-floating-point-numbers.momo.test |  4 ++++
 4 files changed, 21 insertions(+), 10 deletions(-)
 create mode 100644 tests/08-floating-point-numbers.momo
 create mode 100644 tests/08-floating-point-numbers.momo.test

diff --git a/main.momo b/main.momo
index 356da73..f1e547b 100644
--- a/main.momo
+++ b/main.momo
@@ -1,6 +1,3 @@
-() {} [] ->
-- + / * %
-= !
->= > < <= != ==
-, : ; .
-
+69.0
+100.15134324
+420.11
diff --git a/main.py b/main.py
index 1b00a67..4178323 100644
--- a/main.py
+++ b/main.py
@@ -177,12 +177,19 @@ class Parser:
         assert self.current_char().isdigit(), "Called consume_number() at the wrong character!"
         number: str = self.consume_char()
 
-        # TODO: Handle floating point numbers
         # TODO: Handle numbers in other formats (Eg, binary, hexadecimal, etc)
         number_loc: Loc = Loc(self.filename, self.line, self.row())
-
-        while self.current_char().isdigit() and not self.eof():
-            number += self.consume_char()
+        dot_handled: bool = False
+
+        while (self.current_char().isdigit() or self.current_char() == '.') and not self.eof():
+            if self.current_char() == '.':
+                if dot_handled:
+                    self.fatal("Number can only have one dots!")
+                number += self.consume_char()
+                dot_handled = True
+            else:
+                assert self.current_char().isdigit(), "This should never happen"
+                number += self.consume_char()
 
         return (number, number_loc)
 
diff --git a/tests/08-floating-point-numbers.momo b/tests/08-floating-point-numbers.momo
new file mode 100644
index 0000000..f1e547b
--- /dev/null
+++ b/tests/08-floating-point-numbers.momo
@@ -0,0 +1,3 @@
+69.0
+100.15134324
+420.11
diff --git a/tests/08-floating-point-numbers.momo.test b/tests/08-floating-point-numbers.momo.test
new file mode 100644
index 0000000..a254459
--- /dev/null
+++ b/tests/08-floating-point-numbers.momo.test
@@ -0,0 +1,4 @@
+"Token (Number, '69.0', ./tests/08-floating-point-numbers.momo:1:1)"
+"Token (Number, '100.15134324', ./tests/08-floating-point-numbers.momo:2:1)"
+"Token (Number, '420.11', ./tests/08-floating-point-numbers.momo:3:1)"
+'None'
-- 
2.39.5