src: Update literal to simplify the code
authorLucas Bajolet <r4pass@hotmail.com>
Fri, 31 Jul 2015 20:36:27 +0000 (16:36 -0400)
committerLucas Bajolet <r4pass@hotmail.com>
Mon, 3 Aug 2015 14:50:28 +0000 (10:50 -0400)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

src/literal.nit

index f9eafa0..541f752 100644 (file)
@@ -77,101 +77,66 @@ end
 redef class AIntExpr
        # The value of the literal int once computed.
        var value: nullable Int
-end
 
-redef class ADecIntExpr
        redef fun accept_literal(v)
        do
-               value = self.n_number.text.remove_underscores.to_i
+               if not text.is_int then
+                       v.toolcontext.error(hot_location, "Error: invalid literal `{text}`")
+                       return
+               end
+               value = text.to_i
        end
+
+       private fun text: String is abstract
+end
+
+redef class ADecIntExpr
+       redef fun text do return self.n_number.text
 end
 
 redef class AHexIntExpr
-       redef fun accept_literal(v)
-       do
-               var s = self.n_hex_number.text.substring_from(2).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid hexadecimal literal")
-                       return
-               end
-               value = s.to_hex
-       end
+       redef fun text do return self.n_hex_number.text
 end
 
 redef class ABinIntExpr
-       redef fun accept_literal(v)
-       do
-               var s = self.n_bin_number.text.substring_from(2).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid binary literal")
-                       return
-               end
-               value = s.to_bin
-       end
+       redef fun text do return self.n_bin_number.text
 end
 
 redef class AOctIntExpr
-       redef fun accept_literal(v)
-       do
-               var s = self.n_oct_number.text.substring_from(2).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid octal literal")
-                       return
-               end
-               value = s.to_oct
-       end
+       redef fun text do return self.n_oct_number.text
 end
 
 redef class AByteExpr
        # The value of the literal int once computed.
        var value: nullable Byte
-end
 
-redef class ADecByteExpr
        redef fun accept_literal(v)
        do
-               var t = self.n_bytenum.text
-               value = t.substring(0, t.length - 2).remove_underscores.to_i.to_b
+               var s = text.substring(0, text.length - 2)
+               if not s.is_int then
+                       v.toolcontext.error(hot_location, "Error: invalid byte literalĀ `{text}`")
+                       return
+               end
+               value = s.to_i.to_b
        end
+
+       private fun text: String is abstract
+end
+
+redef class ADecByteExpr
+       redef fun text do return self.n_bytenum.text
 end
 
 redef class AHexByteExpr
-       redef fun accept_literal(v)
-       do
-               var t = self.n_hex_bytenum.text
-               var s = t.substring(2, t.length - 4).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid hexadecimal literal")
-                       return
-               end
-               value = s.to_hex.to_b
-       end
+       redef fun text do return self.n_hex_bytenum.text
 end
 
 redef class ABinByteExpr
-       redef fun accept_literal(v)
-       do
-               var t = self.n_bin_bytenum.text
-               var s = t.substring(2, t.length - 4).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid binary literal")
-                       return
-               end
-               value = s.to_bin.to_b
-       end
+       redef fun text do return self.n_bin_bytenum.text
 end
 
 redef class AOctByteExpr
-       redef fun accept_literal(v)
-       do
-               var t = self.n_oct_bytenum.text
-               var s = t.substring(2, t.length - 4).remove_underscores
-               if s.is_empty then
-                       v.toolcontext.error(location, "Error: invalid octal literal")
-                       return
-               end
-               value = s.to_oct.to_b
-       end
+       redef fun text do return self.n_oct_bytenum.text
 end
 
 redef class AFloatExpr