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
- end
end
redef class Text
end
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).to_i.to_b
+ end
+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
+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
+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
+end
+
redef class AFloatExpr
# The value of the literal float once computed.
var value: nullable Float