X-Git-Url: http://nitlanguage.org diff --git a/src/literal.nit b/src/literal.nit index bc361ab..b183301 100644 --- a/src/literal.nit +++ b/src/literal.nit @@ -69,41 +69,20 @@ redef class AExpr # Return null if not an integer. fun as_int: nullable Int do - if not self isa AIntExpr then return null - return self.value.as(not null) - end - - # Get `self` as a single identifier. - # Return null if not a single identifier. - fun as_id: nullable String - do - if self isa AMethidExpr then - return self.collect_text - end - if not self isa ACallExpr then return null - if not self.n_expr isa AImplicitSelfExpr then return null - if not self.n_args.n_exprs.is_empty then return null - return self.n_id.text + if not self isa AIntegerExpr then return null + return self.value.as(not null).to_i end end - -redef class AIntExpr +redef class AIntegerExpr # The value of the literal int once computed. - var value: nullable Int -end + var value: nullable Numeric -redef class ADecIntExpr - redef fun accept_literal(v) - do - self.value = self.n_number.text.to_i - end -end - -redef class AHexIntExpr - redef fun accept_literal(v) - do - self.value = self.n_hex_number.text.substring_from(2).to_hex + redef fun accept_literal(v) do + value = n_integer.text.to_num + if value == null then + v.toolcontext.error(hot_location, "Error: invalid literal `{n_integer.text}`") + end end end @@ -123,7 +102,7 @@ redef class ACharExpr do var txt = self.n_char.text.unescape_nit if txt.length != 3 then - v.toolcontext.error(self.hot_location, "Invalid character literal {txt}") + v.toolcontext.error(self.hot_location, "Syntax Error: invalid character literal `{txt}`.") return end self.value = txt.chars[1]