1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
indexing
description:
"Eiffel integer constants with underscores"
library: "Gobo Eiffel Tools Library"
author: "Eric Bezault <ericb@gobosoft.com>"
copyright: "Copyright (c) 1999, Eric Bezault and others"
license: "Eiffel Forum Freeware License v1 (see forum.txt)"
date: "$Date: 2001/02/11 14:34:12 $"
revision: "$Revision: 1.1 $"
class ET_UNDERSCORED_INTEGER_CONSTANT
inherit
ET_INTEGER_CONSTANT
UT_CHARACTER_CODES
export {NONE} all end
creation
make
feature {NONE} -- Initialization
make (a_literal: like literal; a_position: like position) is
-- Create a new Integer constant.
require
a_literal_not_void: a_literal /= Void
-- valid_literal: regexp: (_*[0-9]+_*)+
a_position_not_void: a_position /= Void
do
literal := a_literal
position := a_position
ensure
literal_set: literal = a_literal
position_set: position = a_position
end
feature -- Basic operations
compute_value is
-- Compute value of current integer constant.
-- Make result available in `value' or set
-- `has_value_error' to true if an overflow or
-- underflow occurred during computation.
local
v, d: INTEGER
i, nb: INTEGER
c: CHARACTER
do
has_value_error := False
nb := literal.count
from i := 1 until i > nb loop
c := literal.item (i)
if c /= '_' then
d := c.code - Zero_code
v := 10 * v + d
end
i := i + 1
end
if is_negative then
value := - v
else
value := v
end
end
invariant
-- valid_literal: regexp: (_*[0-9]+_*)+
end -- class ET_UNDERSCORED_INTEGER_CONSTANT
|