lib: Update libs to use correctly ascii and code_point
authorLucas Bajolet <r4pass@hotmail.com>
Mon, 21 Sep 2015 20:26:07 +0000 (16:26 -0400)
committerLucas Bajolet <r4pass@hotmail.com>
Mon, 21 Sep 2015 20:26:07 +0000 (16:26 -0400)
Signed-off-by: Lucas Bajolet <r4pass@hotmail.com>

45 files changed:
contrib/brainfuck/brainfuck.nit
contrib/friendz/src/grid.nit
contrib/nitcc/src/autom.nit
contrib/nitcc/src/nitcc_semantic.nit
contrib/nitcc/src/re2nfa.nit
contrib/pep8analysis/src/location.nit
contrib/pep8analysis/src/model/operands.nit
contrib/pep8analysis/src/parser/lexer.nit
examples/rosettacode/vignere_cipher.nit
lib/base64.nit
lib/bcm2835/bcm2835.nit
lib/binary/binary.nit
lib/binary/serialization.nit
lib/bitmap/bitmap.nit
lib/buffered_ropes.nit
lib/console.nit
lib/core/bytes.nit
lib/core/fixed_ints.nit
lib/core/kernel.nit
lib/core/stream.nit
lib/core/text/abstract_text.nit
lib/core/text/flat.nit
lib/core/text/native.nit
lib/core/text/ropes.nit
lib/crypto.nit
lib/json/json_lexer.nit
lib/json/static.nit
lib/mnit/numbers.nit
lib/saxophonit/lexer.nit
lib/saxophonit/saxophonit.nit
src/compiler/abstract_compiler.nit
src/doc/doc_phases/doc_console.nit
src/interpreter/naive_interpreter.nit
src/location.nit
src/parser/lexer_work.nit
src/toolcontext.nit
tests/base_primitive_null.nit
tests/sav/error_class_glob.res
tests/sav/nitce/fixme/base_gen_reassign_alt4.res
tests/sav/nitce/fixme/base_gen_reassign_alt5.res
tests/sav/nitce/fixme/base_gen_reassign_alt6.res
tests/sav/nituml_args3.res
tests/sav/nituml_args4.res
tests/test_string_unicode.nit
tests/test_unicode_4bytes.nit

index f7de908..4216952 100644 (file)
@@ -18,29 +18,24 @@ module brainfuck
 # Interpreter for Brainfuck source code.
 class BFInterpreter
        # Data cells
-       var dr = new Array[Char]
+       var dr = new Array[Byte]
        # Data pointer
        var dp = 0
        # Instruction pointer
        var ip = 0
 
        # The program being interpreted
-       var program: String
-
-       # Contains the set of valid instructions, used in next
-       var valid_instr: Set[Char] is noinit
+       var program: Bytes
 
        # Create an interpreter for `program`.
        init do
-               valid_instr = new HashSet[Char]
-               valid_instr.add_all "><[].,+-".chars
-               dr.add 0.ascii
+               dr.add 0u8
        end
 
        # Create an interpreter for the file located at `path`.
        init from_file(path: String) do
                var ifs = new FileReader.open(path)
-               init(ifs.read_all)
+               init(ifs.read_all_bytes)
        end
 
        # Starts the interpretation of the loaded program
@@ -48,50 +43,43 @@ class BFInterpreter
                loop
                        if ip >= program.length then break
                        eval
-                       next
-               end
-       end
-
-       # Go to the next executable instruction
-       fun next do
-               ip += 1
-               while ip < program.length and not valid_instr.has(program[ip]) do
                        ip += 1
                end
        end
 
+
        # Evaluates the current instruction
        fun eval do
                var instr = program[ip]
-               if instr == '.' then printn dr[dp]
-               if instr == '[' then
-                       if dr[dp] == 0.ascii then
+               if instr == '.'.ascii then printn dr[dp].ascii
+               if instr == '['.ascii then
+                       if dr[dp] == 0u8 then
                                ip = find_matching_rbra
                                return
                        end
                end
-               if instr == ']' then
-                       if dr[dp] != 0.ascii then
+               if instr == ']'.ascii then
+                       if dr[dp] != 0u8 then
                                ip = find_matching_lbra
                                return
                        end
                end
-               if instr == '>' then
+               if instr == '>'.ascii then
                        dp += 1
-                       if dp >= dr.length then dr.add(0.ascii)
+                       if dp >= dr.length then dr.add(0u8)
                end
-               if instr == '<' then
+               if instr == '<'.ascii then
                        dp -= 1
                        if dp < 0 then abort
                end
-               if instr == '+' then
-                       dr[dp] = (dr[dp].ascii + 1).ascii
+               if instr == '+'.ascii then
+                       dr[dp] = dr[dp] + 1u8
                end
-               if instr == '-' then
-                       dr[dp] = (dr[dp].ascii - 1).ascii
+               if instr == '-'.ascii then
+                       dr[dp] = dr[dp] - 1u8
                end
-               if instr == ',' then
-                       dr[dp] = getc
+               if instr == ','.ascii then
+                       dr[dp] = getc.ascii
                end
        end
 
@@ -101,14 +89,14 @@ class BFInterpreter
                var lbracnt = 0
                loop
                        if pos > program.length then abort
-                       if program[pos] == ']' then
+                       if program[pos] == ']'.ascii then
                                if lbracnt > 0 then
                                        lbracnt -= 1
                                else
                                        break
                                end
                        end
-                       if program[pos] == '[' then lbracnt += 1
+                       if program[pos] == '['.ascii then lbracnt += 1
                        pos += 1
                end
                return pos
@@ -120,14 +108,14 @@ class BFInterpreter
                var rbracnt = 0
                loop
                        if pos < 0 then abort
-                       if program[pos] == '[' then
+                       if program[pos] == '['.ascii then
                                if rbracnt > 0 then
                                        rbracnt -= 1
                                else
                                        break
                                end
                        end
-                       if program[pos] == ']' then rbracnt += 1
+                       if program[pos] == ']'.ascii then rbracnt += 1
                        pos -= 1
                end
                return pos
index 3a141f6..6f1c883 100644 (file)
@@ -249,13 +249,13 @@ class Grid
                                else if c >= 'A' and c <= 'I' then
                                        var t = self.get(x,y)
                                        assert t != null
-                                       t.update(c.ascii-'A'.ascii+1)
+                                       t.update(c.code_point-'A'.code_point+1)
                                        t.fixed = true
                                        x += 1
                                else if c >= 'a' and c <= 'i' then
                                        var t = self.get(x,y)
                                        assert t != null
-                                       t.update(c.ascii-'a'.ascii+1)
+                                       t.update(c.code_point-'a'.code_point+1)
                                        x += 1
                                else if c >= '1' and c <= '9' then
                                        rle = c.to_i
@@ -289,16 +289,16 @@ class Grid
                                if k == 0 then
                                        if t.fixed then c = '#'
                                else
-                                       b.add(0x1b.ascii)
+                                       b.add(0x1b.code_point)
                                        b.add('[')
                                        b.append ansicols[k]
-                                       c = (k + 'a'.ascii - 1).ascii
+                                       c = (k + 'a'.code_point - 1).code_point
                                        if t.fixed then c = c.to_upper
                                        b.append("m")
                                end
                                b.add(c)
                                if k != 0 then
-                                       b.add(0x1b.ascii)
+                                       b.add(0x1b.code_point)
                                        b.append("[0m")
 
                                end
index 19e113c..946b420 100644 (file)
@@ -714,7 +714,7 @@ private class DFAGenerator
                        else
                                add("\tredef fun trans(char) do\n")
 
-                               add("\t\tvar c = char.ascii\n")
+                               add("\t\tvar c = char.code_point\n")
                                var haslast = false
                                var last = -1
                                for sym, next in trans do
@@ -791,14 +791,14 @@ class TSymbol
                if f <= 32 then
                        res = "#{f}"
                else
-                       res = f.ascii.to_s
+                       res = f.code_point.to_s
                end
                var l = last
                if f == l then return res
                res += " .. "
                if l == null then return res
                if l <= 32 or l >= 127 then return res + "#{l}"
-               return res + l.ascii.to_s
+               return res + l.code_point.to_s
        end
 end
 
index af417d4..795cee0 100644 (file)
@@ -588,7 +588,7 @@ redef class Token
                if text != null then
                        var nfa = new Automaton.epsilon
                        for c in text.chars do
-                               nfa.concat(new Automaton.atom(c.ascii))
+                               nfa.concat(new Automaton.atom(c.code_point))
                        end
                        return nfa
                end
index d0d90ac..886eaea 100644 (file)
@@ -38,7 +38,7 @@ redef class Nstr
        do
                var a = new Automaton.epsilon
                for c in self.value.chars do
-                       var b = new Automaton.atom(c.ascii)
+                       var b = new Automaton.atom(c.code_point)
                        a.concat(b)
                end
                return a
@@ -46,19 +46,19 @@ redef class Nstr
 end
 
 redef class Nch_dec
-       redef fun value: String do return text.substring_from(1).to_i.ascii.to_s
+       redef fun value: String do return text.substring_from(1).to_i.code_point.to_s
        redef fun make_rfa: Automaton
        do
-               var a = new Automaton.atom(self.value.chars.first.ascii)
+               var a = new Automaton.atom(self.value.chars.first.code_point)
                return a
        end
 end
 
 redef class Nch_hex
-       redef fun value: String do return text.substring_from(2).to_hex.ascii.to_s
+       redef fun value: String do return text.substring_from(2).to_hex.code_point.to_s
        redef fun make_rfa: Automaton
        do
-               var a = new Automaton.atom(self.value.chars.first.ascii)
+               var a = new Automaton.atom(self.value.chars.first.code_point)
                return a
        end
 end
@@ -227,7 +227,7 @@ redef class Nre_class
                        exit(1)
                        abort
                end
-               var a = new Automaton.cla(c1.chars.first.ascii, c2.chars.first.ascii)
+               var a = new Automaton.cla(c1.chars.first.code_point, c2.chars.first.code_point)
                return a
        end
 end
index 6fd9edf..634b695 100644 (file)
@@ -165,7 +165,7 @@ class Location
        # * `"0;32"` for green
        fun colored_line(color: String): String
        do
-               var esc = 27.ascii
+               var esc = 27.code_point
                var def = "{esc}[0m"
                var col = "{esc}[{color}m"
 
index 592e1af..d74d1f1 100644 (file)
@@ -24,12 +24,12 @@ redef class ANumberValue
 end
 
 redef class ACharValue
-       redef fun to_i do return n_char.content.first.ascii
+       redef fun to_i do return n_char.content.first.code_point
 end
 
 redef class AStringValue
        # legal but no not recommended
-       redef fun to_i do return n_string.content.first.ascii
+       redef fun to_i do return n_string.content.first.code_point
 end
 
 redef class AHexValue
index 912336c..718ee98 100644 (file)
@@ -337,7 +337,7 @@ class Lexer
                        if sp >= string_len then
                                dfa_state = -1
                        else
-                               var c = string[sp].ascii
+                               var c = string[sp].code_point
                                if c >= 255 then c = 255
                                sp += 1
 
index 73a3f41..565c19e 100644 (file)
@@ -19,7 +19,7 @@ fun encrypt(src, key: String): String do
                        continue
                end
 
-               out.add(((c.ascii + key[j].ascii - 2 * 'A'.ascii) % 26 + 'A'.ascii).ascii)
+               out.add(((c.ascii + key[j].ascii - 2u8 * 'A'.ascii) % 26u8 + 'A'.ascii).ascii)
                j = (j + 1) % key.length
        end
 
@@ -39,7 +39,7 @@ fun decrypt(src, key: String): String do
                        continue
                end
 
-               out.add(((c.ascii - key[j].ascii + 26) % 26 + 'A'.ascii).ascii)
+               out.add(((c.ascii - key[j].ascii + 26u8) % 26u8 + 'A'.ascii).ascii)
                j = (j + 1) % key.length
        end
 
index 4eae395..cb73b3b 100644 (file)
@@ -42,7 +42,7 @@ redef class NativeString
        #     assert "string".encode_base64 == "c3RyaW5n"
        private fun encode_base64(length: Int, padding: nullable Byte): Bytes do
                var base64_bytes = once base64_chars
-               if padding == null then padding = '='.ascii.to_b
+               if padding == null then padding = '='.ascii
                var steps = length / 3
                var bytes_in_last_step = length % 3
                var result_length = steps * 4
@@ -81,7 +81,7 @@ redef class NativeString
        #
        # REQUIRE: `length % 4 == 0`
        private fun decode_base64(length: Int, padding: nullable Byte): Bytes do
-               if padding == null then padding = '='.ascii.to_b
+               if padding == null then padding = '='.ascii
                var inv = once inverted_base64_chars
                if length == 0 then return new Bytes.empty
                assert length % 4 == 0 else print "base64::decode_base64 only supports strings of length multiple of 4"
index dad9899..48f0ed2 100644 (file)
@@ -442,10 +442,10 @@ class HD44780
                                #write(true, "C0".to_hex)
                                # instead we use the following which may not be portable
 
-                               for s in [count..40[ do write(false, ' '.ascii)
+                               for s in [count..40[ do write(false, ' '.code_point)
                                count = 0
                        else
-                               write(false, c.ascii)
+                               write(false, c.code_point)
                                count += 1
                        end
                end
index b6909cd..c15cb52 100644 (file)
@@ -107,7 +107,7 @@ redef abstract class Writer
        # Compared to `write_string`, this method supports null bytes in `text`.
        fun write_block(text: Text)
        do
-               write_int64 text.length
+               write_int64 text.bytelen
                write text
        end
 
@@ -197,7 +197,7 @@ redef abstract class Reader
        do
                var length = read_int64
                if length == 0 then return ""
-               return read(length)
+               return read_bytes(length).to_s
        end
 
        # Read a floating point on 32 bits and return it as a `Float`
index d36f9c0..e069304 100644 (file)
 # The serialized data format uses a dictionary structure similar to BSON:
 #
 # ~~~raw
-# object = 0x01                   # null
-#        | 0x02 id attributes     # New object
-#        | 0x03 id                # Ref to object
-#        | 0x04 int64             # Int
-#        | 0x05 int8              # Bool (int8 != 0)
-#        | 0x06 int8              # Char
-#        | 0x07 double(64 bits)   # Float
-#        | 0x08 block             # String
-#        | 0x09 block             # NativeString
-#        | 0x0A flat_array;       # Array[nullable Object]
+# object = 0x01                    # null
+#        | 0x02 id attributes      # New object
+#        | 0x03 id                 # Ref to object
+#        | 0x04 int64              # Int
+#        | 0x05 int8               # Bool (int8 != 0)
+#        | 0x06 utf8 byte sequence # Char
+#        | 0x07 double(64 bits)    # Float
+#        | 0x08 block              # String
+#        | 0x09 block              # NativeString
+#        | 0x0A flat_array;        # Array[nullable Object]
 #
 # block = int64 int8*;
 # cstring = int8* 0x00;
@@ -128,6 +128,9 @@ class BinaryDeserializer
        # Tree of attributes, deserialized but not yet claimed
        private var unclaimed_attributes = new UnrolledList[HashMap[String, nullable Object]]
 
+       # Buffer for one char
+       private var char_buf: NativeString is lazy do return new NativeString(4)
+
        # Read and deserialize the next attribute name and value
        #
        # A `peeked_char` can suffix the next attribute name.
@@ -217,9 +220,17 @@ class BinaryDeserializer
                if kind == kind_bool then return stream.read_bool
                if kind == kind_float then return stream.read_double
                if kind == kind_char then
+                       var bf = char_buf
                        var b = stream.read_byte
-                       if b == null then return 0
-                       return b.to_i.ascii
+                       if b == null then return '�'
+                       var ln = b.u8len
+                       bf[0] = b
+                       for i in [1 .. ln[ do
+                               b = stream.read_byte
+                               if b == null then return '�'
+                               bf[i] = b
+                       end
+                       return bf.to_s_with_length(ln)[0]
                end
                if kind == kind_string then return stream.read_block
                if kind == kind_native_string then return stream.read_block.to_cstring
@@ -382,8 +393,7 @@ redef class Char
        redef fun serialize_to_binary(v)
        do
                v.stream.write_byte kind_char
-               # Fix when UTF-8
-               v.stream.write_byte self.ascii.to_b
+               for i in bytes do v.stream.write_byte i
        end
 end
 
index e408402..0aceff5 100644 (file)
@@ -211,11 +211,11 @@ class Bitmap
                var fw = new FileWriter.open(path)
                # Write bitmap header
                for x in [0..self.bitmap_header.length[ do
-                       fw.write(self.bitmap_header[x].ascii.to_s)
+                       fw.write(self.bitmap_header[x].code_point.to_s)
                end
                # Write dib header
                for x in [0..self.dib_header.length[ do
-                       fw.write(self.dib_header[x].ascii.to_s)
+                       fw.write(self.dib_header[x].code_point.to_s)
                end
                # Write color table (if any)
                # Write data (no padding for now)
@@ -226,9 +226,9 @@ class Bitmap
                                var red = pixel >> 16
                                var green = (pixel & 0x00FF00) >> 8
                                var blue = pixel & 0x000000FF
-                               fw.write(red.ascii.to_s)
-                               fw.write(green.ascii.to_s)
-                               fw.write(blue.ascii.to_s)
+                               fw.write(red.code_point.to_s)
+                               fw.write(green.code_point.to_s)
+                               fw.write(blue.code_point.to_s)
                        end
                end
                fw.close
index 8ed1f6b..fcc90c7 100644 (file)
@@ -109,7 +109,7 @@ private class Leaf
 
        redef fun substrings do return new LeafSubstrings(self)
 
-       redef fun [](i) do return buf[i].to_i.ascii
+       redef fun [](i) do return buf[i].to_i.code_point
 
        init do
                bns = buf.ns
index c0a8772..0020b7a 100644 (file)
@@ -18,7 +18,7 @@ module console
 # A ANSI/VT100 escape sequence.
 abstract class TermEscape
        # The US-ASCII ESC character.
-       protected fun esc: Char do return 27.ascii
+       protected fun esc: Char do return 27.code_point
 
        # The Control Sequence Introducer (CSI).
        protected fun csi: String do return "{esc}["
index 356f386..227759a 100644 (file)
@@ -32,18 +32,18 @@ redef class Byte
        #
        # ~~~nit
        # intrude import core::bytes
-       # assert not '/'.ascii.to_b.is_valid_hexdigit
-       # assert '0'.ascii.to_b.is_valid_hexdigit
-       # assert '9'.ascii.to_b.is_valid_hexdigit
-       # assert not ':'.ascii.to_b.is_valid_hexdigit
-       # assert not '@'.ascii.to_b.is_valid_hexdigit
-       # assert 'A'.ascii.to_b.is_valid_hexdigit
-       # assert 'F'.ascii.to_b.is_valid_hexdigit
-       # assert not 'G'.ascii.to_b.is_valid_hexdigit
-       # assert not '`'.ascii.to_b.is_valid_hexdigit
-       # assert 'a'.ascii.to_b.is_valid_hexdigit
-       # assert 'f'.ascii.to_b.is_valid_hexdigit
-       # assert not 'g'.ascii.to_b.is_valid_hexdigit
+       # assert not '/'.ascii.is_valid_hexdigit
+       # assert '0'.ascii.is_valid_hexdigit
+       # assert '9'.ascii.is_valid_hexdigit
+       # assert not ':'.ascii.is_valid_hexdigit
+       # assert not '@'.ascii.is_valid_hexdigit
+       # assert 'A'.ascii.is_valid_hexdigit
+       # assert 'F'.ascii.is_valid_hexdigit
+       # assert not 'G'.ascii.is_valid_hexdigit
+       # assert not '`'.ascii.is_valid_hexdigit
+       # assert 'a'.ascii.is_valid_hexdigit
+       # assert 'f'.ascii.is_valid_hexdigit
+       # assert not 'g'.ascii.is_valid_hexdigit
        # ~~~
        private fun is_valid_hexdigit: Bool do
                return (self >= 0x30u8 and self <= 0x39u8) or
index 17ef576..36f21a3 100644 (file)
@@ -158,6 +158,9 @@ universal Int8
        redef fun to_i32 is intern
        redef fun to_u32 is intern
 
+       # Returns `self` as a Char according to its ASCII value.
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        redef fun distance(i) do return (self - i).to_i
 
        redef fun <=>(other)
@@ -271,6 +274,9 @@ universal Int16
        redef fun *(i) is intern
        redef fun /(i) is intern
 
+       # Returns `self` as a Char according to its ASCII value.
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        # Modulo of `self` with `i`.
        #
        # Returns the remainder of division of `self` by `i`.
@@ -425,6 +431,9 @@ universal UInt16
        redef fun zero do return 0.to_u16
        redef fun value_of(val) do return val.to_u16
 
+       # Returns `self` as a Char according to its ASCII value.
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        # `i` bits shift to the left
        #
        #     assert 5u16 << 1    == 10u16
@@ -558,6 +567,9 @@ universal Int32
        redef fun *(i) is intern
        redef fun /(i) is intern
 
+       # Returns `self` as a Char according to its ASCII value.
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        # Modulo of `self` with `i`.
        #
        # Returns the remainder of division of `self` by `i`.
@@ -701,6 +713,9 @@ universal UInt32
        redef fun *(i) is intern
        redef fun /(i) is intern
 
+       # Returns `self` as a Char according to its ASCII value.
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        # Modulo of `self` with `i`.
        #
        # Returns the remainder of division of `self` by `i`.
index a8ec1c5..650360a 100644 (file)
@@ -651,6 +651,11 @@ universal Byte
        #     assert 5u8 >> 1    == 2u8
        fun >>(i: Int): Byte `{ return self >> i; `}
 
+       # Returns the character equivalent of `self`
+       #
+       # REQUIRE: `self <= 127u8`
+       fun ascii: Char `{ return (uint32_t)self; `}
+
        redef fun to_i is intern
        redef fun to_f is intern
        redef fun to_b do return self
@@ -862,9 +867,9 @@ universal Int
        do
                assert self >= 0 and self <= 36 # TODO plan for this
                if self < 10 then
-                       return (self + '0'.ascii).ascii
+                       return (self + '0'.code_point).code_point
                else
-                       return (self + ('a'.ascii - 10)).ascii
+                       return (self - 10 + 'a'.code_point).code_point
                end
        end
 
@@ -906,7 +911,7 @@ universal Char
                        printf("%c", self);
                }
        `}
-       redef fun hash do return ascii
+       redef fun hash do return code_point
        redef fun ==(o) is intern
        redef fun !=(o) is intern
 
@@ -920,7 +925,7 @@ universal Char
 
        redef fun distance(c)
        do
-               var d = self.ascii - c.ascii
+               var d = self.code_point - c.code_point
                if d >= 0 then
                        return d
                else
@@ -937,9 +942,9 @@ universal Char
                if self == '-' then
                        return -1
                else if is_digit then
-                       return self.ascii - '0'.ascii
+                       return self.code_point - '0'.code_point
                else
-                       return self.to_lower.ascii - 'a'.ascii + 10
+                       return self.to_lower.code_point - 'a'.code_point + 10
                end
        end
 
@@ -973,7 +978,7 @@ universal Char
        fun to_lower: Char
        do
                if is_upper then
-                       return (ascii + ('a'.distance('A'))).ascii
+                       return (code_point + ('a'.distance('A'))).code_point
                else
                        return self
                end
@@ -988,7 +993,7 @@ universal Char
        fun to_upper: Char
        do
                if is_lower then
-                       return (ascii - ('a'.distance('A'))).ascii
+                       return (code_point - ('a'.distance('A'))).code_point
                else
                        return self
                end
@@ -1049,7 +1054,7 @@ universal Char
        #     assert '\t'.is_whitespace == true
        fun is_whitespace: Bool
        do
-               var i = ascii
+               var i = code_point
                return i <= 0x20 or i == 0x7F
        end
 end
index 4b1e826..b4a0e2b 100644 (file)
@@ -275,7 +275,7 @@ abstract class Reader
        # ~~~
        # var w = new StringReader(" Hello, \n\t World!")
        # assert w.read_word == "Hello,"
-       # assert w.read_char == '\n'.ascii
+       # assert w.read_char == '\n'
        # assert w.read_word == "World!"
        # assert w.read_word == ""
        # ~~~
@@ -441,7 +441,7 @@ abstract class BufferedReader
                        return null
                end
                # TODO: Fix when supporting UTF-8
-               var c = _buffer[_buffer_pos].to_i.ascii
+               var c = _buffer[_buffer_pos].to_i.code_point
                _buffer_pos += 1
                return c
        end
index 6cf79bf..63fb920 100644 (file)
@@ -543,7 +543,7 @@ abstract class Text
 
                if c >= '0' and c <= '9' then
                        res.add('_')
-                       res.append(c.ascii.to_s)
+                       res.append(c.code_point.to_s)
                        res.add('d')
                        start = 1
                end
@@ -555,7 +555,7 @@ abstract class Text
                                continue
                        end
                        if underscore then
-                               res.append('_'.ascii.to_s)
+                               res.append('_'.code_point.to_s)
                                res.add('d')
                        end
                        if c >= '0' and c <= '9' then
@@ -566,13 +566,13 @@ abstract class Text
                                underscore = true
                        else
                                res.add('_')
-                               res.append(c.ascii.to_s)
+                               res.append(c.code_point.to_s)
                                res.add('d')
                                underscore = false
                        end
                end
                if underscore then
-                       res.append('_'.ascii.to_s)
+                       res.append('_'.code_point.to_s)
                        res.add('d')
                end
                return res.to_s
@@ -587,7 +587,7 @@ abstract class Text
        # Three digits are always used to avoid following digits to be interpreted as an element
        # of the octal sequence.
        #
-       #     assert "{0.ascii}{1.ascii}{8.ascii}{31.ascii}{32.ascii}".escape_to_c == "\\000\\001\\010\\037 "
+       #     assert "{0.code_point}{1.code_point}{8.code_point}{31.code_point}{32.code_point}".escape_to_c == "\\000\\001\\010\\037 "
        #
        # The exceptions are the common `\t` and `\n`.
        fun escape_to_c: String
@@ -605,9 +605,9 @@ abstract class Text
                                b.append("\\\'")
                        else if c == '\\' then
                                b.append("\\\\")
-                       else if c.ascii < 32 then
+                       else if c.code_point < 32 then
                                b.add('\\')
-                               var oct = c.ascii.to_base(8, false)
+                               var oct = c.code_point.to_base(8, false)
                                # Force 3 octal digits since it is the
                                # maximum allowed in the C specification
                                if oct.length == 1 then
@@ -680,8 +680,8 @@ abstract class Text
                        else if c == ':' or c == ' ' or c == '#' then
                                b.add('\\')
                                b.add(c)
-                       else if c.ascii < 32 or c == ';' or c == '|' or c == '\\' or c == '=' then
-                               b.append("?{c.ascii.to_base(16, false)}")
+                       else if c.code_point < 32 or c == ';' or c == '|' or c == '\\' or c == '=' then
+                               b.append("?{c.code_point.to_base(16, false)}")
                        else
                                b.add(c)
                        end
@@ -695,7 +695,7 @@ abstract class Text
        #     assert s.length        ==  2
        #     var u = s.unescape_nit
        #     assert u.length        ==  1
-       #     assert u.chars[0].ascii      ==  10 # (the ASCII value of the "new line" character)
+       #     assert u.chars[0].code_point      ==  10 # (the ASCII value of the "new line" character)
        fun unescape_nit: String
        do
                var res = new Buffer.with_cap(self.length)
@@ -787,7 +787,7 @@ abstract class Text
                        if c == '%' then
                                if i + 2 >= length then
                                        # What follows % has been cut off
-                                       buf[l] = '?'.ascii.to_b
+                                       buf[l] = '?'.ascii
                                else
                                        i += 1
                                        var hex_s = substring(i, 2)
@@ -797,11 +797,11 @@ abstract class Text
                                                i += 1
                                        else
                                                # What follows a % is not Hex
-                                               buf[l] = '?'.ascii.to_b
+                                               buf[l] = '?'.ascii
                                                i -= 1
                                        end
                                end
-                       else buf[l] = c.ascii.to_b
+                       else buf[l] = c.ascii
 
                        i += 1
                        l += 1
@@ -905,7 +905,7 @@ abstract class Text
 
                        for i in [0..length[ do
                                var char = chars[i]
-                               h = (h << 5) + h + char.ascii
+                               h = (h << 5) + h + char.code_point
                        end
 
                        hash_cache = h
@@ -1573,9 +1573,15 @@ end
 
 redef class Char
 
+       # Returns a sequence with the UTF-8 bytes of `self`
+       #
+       #     assert 'a'.bytes == [0x61u8]
+       #     assert 'ま'.bytes == [0xE3u8, 0x81u8, 0xBEu8]
+       fun bytes: SequenceRead[Byte] do return to_s.bytes
+
        # Length of `self` in a UTF-8 String
        private fun u8char_len: Int do
-               var c = self.ascii
+               var c = self.code_point
                if c < 0x80 then return 1
                if c <= 0x7FF then return 2
                if c <= 0xFFFF then return 3
index 52de988..4d2ff48 100644 (file)
@@ -1035,7 +1035,7 @@ redef class NativeString
                        end
                        var ok_c: Bool
                        var c = char_at(pos)
-                       var cp = c.ascii
+                       var cp = c.code_point
                        if nxst == 1 then
                                ok_c = cp >= 0 and cp <= 0x7F
                        else if nxst == 2 then
index acc9a12..4028ea0 100644 (file)
@@ -16,7 +16,7 @@ import math
 
 redef class Byte
        # Gives the length of the UTF-8 char starting with `self`
-       private fun u8len: Int do
+       fun u8len: Int do
                if self & 0b1000_0000u8 == 0u8 then
                        return 1
                else if self & 0b1110_0000u8 == 0b1100_0000u8 then
index 3e7b761..c164529 100644 (file)
@@ -468,7 +468,7 @@ class RopeBuffer
                        rp = 0
                end
                # TODO: Fix when supporting UTF-8
-               ns[rp] = c.ascii.to_b
+               ns[rp] = c.ascii
                rp += 1
                _bytelen += 1
                rpos = rp
index 310f725..011347d 100644 (file)
@@ -30,7 +30,7 @@ redef class Char
                x = x % 26
                if x < 0 then x += 26
                var up = false
-               var val = ascii
+               var val = code_point
                if is_upper then
                        up = true
                        val += 32
@@ -38,7 +38,7 @@ redef class Char
                val += x
                if val > 122 then val -= 26
                if up then val -= 32
-               return val.ascii
+               return val.code_point
        end
 end
 
index 88b270b..b6bf2c1 100644 (file)
@@ -47,7 +47,7 @@ end
 private class DFAState0
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 8 then return null
                if c <= 10 then return dfastate_1
                if c <= 31 then return null
@@ -84,7 +84,7 @@ private class DFAState1
                return null
        end
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 8 then return null
                if c <= 10 then return dfastate_1
                if c <= 31 then return null
@@ -95,7 +95,7 @@ end
 private class DFAState2
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 33 then return dfastate_2
                if c <= 34 then return dfastate_29
                if c <= 91 then return dfastate_2
@@ -116,7 +116,7 @@ end
 private class DFAState4
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_5
                return null
@@ -132,7 +132,7 @@ private class DFAState5
                return t
        end
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 45 then return null
                if c <= 46 then return dfastate_24
                if c <= 47 then return null
@@ -177,7 +177,7 @@ end
 private class DFAState9
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 96 then return null
                if c <= 97 then return dfastate_20
                return null
@@ -186,7 +186,7 @@ end
 private class DFAState10
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 116 then return null
                if c <= 117 then return dfastate_17
                return null
@@ -195,7 +195,7 @@ end
 private class DFAState11
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 113 then return null
                if c <= 114 then return dfastate_14
                return null
@@ -224,7 +224,7 @@ end
 private class DFAState14
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 116 then return null
                if c <= 117 then return dfastate_15
                return null
@@ -233,7 +233,7 @@ end
 private class DFAState15
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 100 then return null
                if c <= 101 then return dfastate_16
                return null
@@ -252,7 +252,7 @@ end
 private class DFAState17
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 107 then return null
                if c <= 108 then return dfastate_18
                return null
@@ -261,7 +261,7 @@ end
 private class DFAState18
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 107 then return null
                if c <= 108 then return dfastate_19
                return null
@@ -280,7 +280,7 @@ end
 private class DFAState20
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 107 then return null
                if c <= 108 then return dfastate_21
                return null
@@ -289,7 +289,7 @@ end
 private class DFAState21
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 114 then return null
                if c <= 115 then return dfastate_22
                return null
@@ -298,7 +298,7 @@ end
 private class DFAState22
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 100 then return null
                if c <= 101 then return dfastate_23
                return null
@@ -317,7 +317,7 @@ end
 private class DFAState24
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_28
                return null
@@ -326,7 +326,7 @@ end
 private class DFAState25
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 42 then return null
                if c <= 43 then return dfastate_26
                if c <= 44 then return null
@@ -339,7 +339,7 @@ end
 private class DFAState26
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_27
                return null
@@ -355,7 +355,7 @@ private class DFAState27
                return t
        end
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_27
                return null
@@ -371,7 +371,7 @@ private class DFAState28
                return t
        end
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_28
                if c <= 68 then return null
@@ -394,7 +394,7 @@ end
 private class DFAState30
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 33 then return null
                if c <= 34 then return dfastate_2
                if c <= 46 then return null
@@ -418,7 +418,7 @@ end
 private class DFAState31
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_32
                if c <= 64 then return null
@@ -431,7 +431,7 @@ end
 private class DFAState32
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_33
                if c <= 64 then return null
@@ -444,7 +444,7 @@ end
 private class DFAState33
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_34
                if c <= 64 then return null
@@ -457,7 +457,7 @@ end
 private class DFAState34
        super DFAState
        redef fun trans(char) do
-               var c = char.ascii
+               var c = char.code_point
                if c <= 47 then return null
                if c <= 57 then return dfastate_2
                if c <= 64 then return null
index fdb9f65..966f2c9 100644 (file)
@@ -99,22 +99,22 @@ redef class Text
                                buffer.append "\\\""
                        else if char == '\/' then
                                buffer.append "\\/"
-                       else if char < 16.ascii then
+                       else if char < 16.code_point then
                                if char == '\n' then
                                        buffer.append "\\n"
                                else if char == '\r' then
                                        buffer.append "\\r"
                                else if char == '\t' then
                                        buffer.append "\\t"
-                               else if char == 0x0C.ascii then
+                               else if char == 0x0C.code_point then
                                        buffer.append "\\f"
-                               else if char == 0x08.ascii then
+                               else if char == 0x08.code_point then
                                        buffer.append "\\b"
                                else
-                                       buffer.append "\\u000{char.ascii.to_hex}"
+                                       buffer.append "\\u000{char.code_point.to_hex}"
                                end
                        else if char < ' ' then
-                               buffer.append "\\u00{char.ascii.to_hex}"
+                               buffer.append "\\u00{char.code_point.to_hex}"
                        else
                                buffer.add char
                        end
@@ -435,9 +435,9 @@ redef class Nstring
                                i += 1
                                char = text[i]
                                if char == 'b' then
-                                       char = 0x08.ascii
+                                       char = 0x08.code_point
                                else if char == 'f' then
-                                       char = 0x0C.ascii
+                                       char = 0x0C.code_point
                                else if char == 'n' then
                                        char = '\n'
                                else if char == 'r' then
@@ -450,7 +450,7 @@ redef class Nstring
                                        if code >= 128 then
                                                char = '?'
                                        else
-                                               char = code.ascii
+                                               char = code.code_point
                                        end
                                        i += 4
                                end
index 1b7a017..e7462b4 100644 (file)
@@ -41,7 +41,7 @@ redef class Display
        do
                var str = number.to_s
                for c in str.chars do
-                       var d = c.ascii-'0'.ascii
+                       var d = c.code_point-'0'.code_point
                        assert d >= 0 and d <= 9
                        var img = imgs.imgs[d]
                        blit(img, x, y)
index acfe9fa..92f293b 100644 (file)
@@ -49,9 +49,9 @@ class XophonLexer
        # read the next byte. Else, return `-1`.
        fun expect_delimiter: Int do
                if accept('"') then
-                       return '"'.ascii
+                       return '"'.code_point
                else if accept('\'') then
-                       return '\''.ascii
+                       return '\''.code_point
                else
                        fire_unexpected_char(". Expecting `\"` or `'`")
                        return -1
@@ -71,7 +71,7 @@ class XophonLexer
        # If the last read byte is forbidden, fire a fatal error instead.
        fun expect_xml_char(buffer: Buffer): Bool do
                if is_xml_char then
-                       buffer.chars.push(last_char.ascii)
+                       buffer.chars.push(last_char.code_point)
                        read_char
                        return true
                else if eof then
@@ -91,7 +91,7 @@ class XophonLexer
                        buffer.chars.push(' ')
                        read_char
                        return true
-               else if last_char == '<'.ascii then
+               else if last_char == '<'.code_point then
                        return fire_fatal_error("`<` is forbidden in attribute values.")
                else
                        return expect_xml_char(buffer)
@@ -127,10 +127,10 @@ class XophonLexer
        # Is the last read byte matches the `NameStartChar` production?
        fun is_name_start_char: Bool do
                # TODO: Handle code points above 0x7F.
-               return ['A'.ascii .. 'Z'.ascii].has(last_char) or
-                               ['a'.ascii .. 'z'.ascii].has(last_char) or
-                               last_char == '_'.ascii or
-                               last_char == ':'.ascii or
+               return ['A'.code_point .. 'Z'.code_point].has(last_char) or
+                               ['a'.code_point .. 'z'.code_point].has(last_char) or
+                               last_char == '_'.code_point or
+                               last_char == ':'.code_point or
                                last_char > 127
        end
 
@@ -138,8 +138,8 @@ class XophonLexer
        fun is_name_char: Bool do
                # TODO: Handle code points above 0x7F.
                return is_name_start_char or
-                               last_char == '-'.ascii or
-                               last_char == '.'.ascii or
+                               last_char == '-'.code_point or
+                               last_char == '.'.code_point or
                                is_digit
        end
 
@@ -150,10 +150,10 @@ class XophonLexer
                if not is_name_start_char then
                        return fire_unexpected_char(" at the beginning of a name")
                end
-               buffer.chars.push(last_char.ascii)
+               buffer.chars.push(last_char.code_point)
                read_char
                while is_name_char do
-                       buffer.chars.push(last_char.ascii)
+                       buffer.chars.push(last_char.code_point)
                        read_char
                end
                return true
@@ -187,14 +187,14 @@ class XophonLexer
 
        # Is the last read byte matches the `[0-9]` production?
        fun is_digit: Bool do
-               return ['0'.ascii .. '9'.ascii].has(last_char)
+               return ['0'.code_point .. '9'.code_point].has(last_char)
        end
 
        # Accept a `[0-9]+` token.
        fun accept_digits(buffer: Buffer): Bool do
                if is_digit then
                        loop
-                               buffer.chars.push(last_char.ascii)
+                               buffer.chars.push(last_char.code_point)
                                read_char
                                if not is_digit then return true
                        end
@@ -210,16 +210,16 @@ class XophonLexer
 
        # Is `last_char` matches the `[0-9a-fA-F]` production?
        fun is_hex: Bool do
-               return ['0'.ascii .. '9'.ascii].has(last_char) or
-                               ['A'.ascii .. 'Z'.ascii].has(last_char) or
-                               ['a'.ascii .. 'Z'.ascii].has(last_char)
+               return ['0'.code_point .. '9'.code_point].has(last_char) or
+                               ['A'.code_point .. 'Z'.code_point].has(last_char) or
+                               ['a'.code_point .. 'Z'.code_point].has(last_char)
        end
 
        # Expect a `[0-9a-fA-F]+` token.
        fun expect_hex(buffer: Buffer): Bool do
                if is_hex then
                        loop
-                               buffer.chars.push(last_char.ascii)
+                               buffer.chars.push(last_char.code_point)
                                read_char
                                if not is_hex then return true
                        end
@@ -247,7 +247,7 @@ class XophonLexer
                else if last_char < 0 then
                        fire_fatal_error("Internal error: Already at the end of the file.")
                        return
-               else if last_char == '\n'.ascii then
+               else if last_char == '\n'.code_point then
                        locator.line_number += 1
                        locator.column_number = 1
                else
@@ -264,7 +264,7 @@ class XophonLexer
                # XML 1.0 end-of-line handling
                # Note: Regardless the XML version, any EOL defined by the
                # recommandation MUST be reported as a single LINE FEED.
-               if was_cr and last_char == '\n'.ascii then
+               if was_cr and last_char == '\n'.code_point then
                        # EOL already reported. => Skip this byte.
                        s = input.read_byte
                        if s == null then
@@ -273,10 +273,10 @@ class XophonLexer
                                last_char = s.to_i
                        end
                end
-               was_cr = last_char == '\r'.ascii
+               was_cr = last_char == '\r'.code_point
                if was_cr then
                        # Regardless the following byte, '\r' always introduce an EOL.
-                       last_char = '\n'.ascii
+                       last_char = '\n'.code_point
                end
        end
 
@@ -303,7 +303,7 @@ class XophonLexer
        fun is_int(c: Int): Bool do return last_char == c
 
        # Does the last read byte equal `c`?
-       fun is_char(c: Char): Bool do return last_char == c.ascii
+       fun is_char(c: Char): Bool do return last_char == c.code_point
 
        # Expect the specified byte.
        fun accept_int(expected: Int): Bool do
@@ -317,7 +317,7 @@ class XophonLexer
 
        # Accept the specified byte.
        fun accept(expected: Char): Bool do
-               return accept_int(expected.ascii)
+               return accept_int(expected.code_point)
        end
 
        # Ensure the last read byte is equal to `expected`.
@@ -330,7 +330,7 @@ class XophonLexer
        # Return `true` if and only if the last read byte as the expected value.
        fun expect_int(expected: Int, context: String): Bool do
                return accept_int(expected) or
-                               fire_unexpected_char("{context}. Expecting `{expected.ascii}`.")
+                               fire_unexpected_char("{context}. Expecting `{expected.code_point}`.")
        end
 
        # Ensure the last read byte is equal to `expected`.
@@ -363,7 +363,7 @@ class XophonLexer
                        if not accept(chars[i]) then
                                if is_xml_char then
                                        return fire_fatal_error("Unexpected " +
-                                                       "`{expected.substring(0, i)}{last_char.ascii.to_s}`" +
+                                                       "`{expected.substring(0, i)}{last_char.code_point.to_s}`" +
                                                        "{context}. Expecting `{expected}`.")
                                else if eof then
                                        return fire_fatal_error("Unexpected end of file{context}. " +
@@ -386,7 +386,7 @@ class XophonLexer
        # Return `false`.
        fun fire_unexpected_char(rest_of_message: String): Bool do
                if is_xml_char then
-                       return fire_fatal_error("Unexpected character `{last_char.ascii.to_s}`{rest_of_message}.")
+                       return fire_fatal_error("Unexpected character `{last_char.code_point.to_s}`{rest_of_message}.")
                else if eof then
                        return fire_fatal_error("Unexpected end of file{rest_of_message}.")
                else
index 2693086..d5ddeb3 100644 (file)
@@ -656,14 +656,14 @@ class XophonReader
                if lexer.accept('#') then
                        if lexer.accept('x') then
                                if lexer.expect_hex(ref) then
-                                       buffer.chars.add(ref.to_hex.ascii)
+                                       buffer.chars.add(ref.to_hex.code_point)
                                        return lexer.expect(';', "")
                                else
                                        return lexer.fire_unexpected_char(
                                                        ". Expecting an hexadecimal digit")
                                end
                        else if lexer.accept_digits(ref) then
-                               buffer.chars.add(ref.to_i.ascii)
+                               buffer.chars.add(ref.to_i.code_point)
                                return lexer.expect(';', "")
                        else
                                return lexer.fire_unexpected_char(" in a character reference. " +
index d60ebb9..b79e9ba 100644 (file)
@@ -1552,10 +1552,10 @@ abstract class AbstractCompilerVisitor
        do
                var t = mmodule.char_type
 
-               if value.ascii < 128 then
+               if value.code_point < 128 then
                        return new RuntimeVariable("'{value.to_s.escape_to_c}'", t, t)
                else
-                       return new RuntimeVariable("{value.ascii}", t, t)
+                       return new RuntimeVariable("{value.code_point}", t, t)
                end
        end
 
index e4f6bb1..b118019 100644 (file)
@@ -551,8 +551,8 @@ private class Pager
                                b.append("\\\\")
                        else if c == '`' then
                                b.append("'")
-                       else if c.ascii < 32 then
-                               b.append("\\{c.ascii.to_base(8, false)}")
+                       else if c.code_point < 32 then
+                               b.append("\\{c.code_point.to_base(8, false)}")
                        else
                                b.add(c)
                        end
index b484f15..da7b288 100644 (file)
@@ -972,8 +972,6 @@ redef class AMethPropdef
                                return v.bool_instance(recvval >= args[1].to_i)
                        else if pname == "<=>" then
                                return v.int_instance(recvval <=> args[1].to_i)
-                       else if pname == "ascii" then
-                               return v.char_instance(recvval.ascii)
                        else if pname == "to_f" then
                                return v.float_instance(recvval.to_f)
                        else if pname == "to_b" then
@@ -1045,9 +1043,7 @@ redef class AMethPropdef
                        end
                else if cname == "Char" then
                        var recv = args[0].val.as(Char)
-                       if pname == "ascii" then
-                               return v.int_instance(recv.ascii)
-                       else if pname == "successor" then
+                       if pname == "successor" then
                                return v.char_instance(recv.successor(args[1].to_i))
                        else if pname == "predecessor" then
                                return v.char_instance(recv.predecessor(args[1].to_i))
index 786ffc2..0c5b55d 100644 (file)
@@ -246,7 +246,7 @@ class Location
        # * `"0;32"` for green
        fun colored_line(color: String): String
        do
-               var esc = 27.ascii
+               var esc = 27.code_point
                var def = "{esc}[0m"
                var col = "{esc}[{color}m"
 
index 94810af..e061613 100644 (file)
@@ -173,7 +173,7 @@ class Lexer
                                # This does not corrupt the lexer and works perfectly on any character.
                                #
                                # TL;DR: Java fucked up, need retarded solution to cope for retarded decision
-                               var c = string[sp].ascii
+                               var c = string[sp].code_point
                                if c >= 256 then c = 255
                                sp += 1
 
index 8be85d4..98b746a 100644 (file)
@@ -84,7 +84,7 @@ class Message
        # A colored version of the message including the original source line
        fun to_color_string: String
        do
-               var esc = 27.ascii
+               var esc = 27.code_point
                #var red = "{esc}[0;31m"
                #var bred = "{esc}[1;31m"
                #var green = "{esc}[0;32m"
index 2ba5388..130d8fd 100644 (file)
@@ -49,7 +49,7 @@ class A
                o = _c
                (o == null).output
                (not o == '\0').output
-               #alt3#_c.ascii.output
+               #alt3#_c.code_point.output
        end
 end
 
index b41f1d6..3d8ae36 100644 (file)
@@ -6,7 +6,7 @@
 ../lib/core/kernel.nit:431,1--486,3: Error: `kernel#Numeric` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
 ../lib/core/kernel.nit:492,1--515,3: Error: `kernel#Bool` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
 ../lib/core/kernel.nit:517,1--599,3: Error: `kernel#Float` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
-../lib/core/kernel.nit:601,1--697,3: Error: `kernel#Byte` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
-../lib/core/kernel.nit:699,1--884,3: Error: `kernel#Int` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
-../lib/core/kernel.nit:886,1--1039,3: Error: `kernel#Char` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
-../lib/core/kernel.nit:1041,1--1048,3: Error: `kernel#Pointer` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
+../lib/core/kernel.nit:601,1--702,3: Error: `kernel#Byte` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
+../lib/core/kernel.nit:704,1--890,3: Error: `kernel#Int` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
+../lib/core/kernel.nit:892,1--1060,3: Error: `kernel#Char` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
+../lib/core/kernel.nit:1062,1--1069,3: Error: `kernel#Pointer` does not specialize `module_0#Object`. Possible duplication of the root class `Object`?
index 8e5869f..d556892 100644 (file)
@@ -1,4 +1,4 @@
-Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:720)
+Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:725)
 11
 21
 31
index 8e5869f..d556892 100644 (file)
@@ -1,4 +1,4 @@
-Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:720)
+Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:725)
 11
 21
 31
index 8e5869f..d556892 100644 (file)
@@ -1,4 +1,4 @@
-Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:720)
+Runtime error: Cast failed. Expected `OTHER`, got `Float` (../lib/core/kernel.nit:725)
 11
 21
 31
index 6584bce..700f951 100644 (file)
@@ -51,19 +51,19 @@ Float [
 Numeric -> Float [dir=back arrowtail=open style=dashed];
 
 Byte [
- label = "{Byte||+ %(i: Byte): Byte\l+ \<\<(i: Int): Byte\l+ \>\>(i: Int): Byte\l}"
+ label = "{Byte||+ %(i: Byte): Byte\l+ \<\<(i: Int): Byte\l+ \>\>(i: Int): Byte\l+ ascii(): Char\l}"
 ]
 Discrete -> Byte [dir=back arrowtail=open style=dashed];
 Numeric -> Byte [dir=back arrowtail=open style=dashed];
 
 Int [
- label = "{Int||+ %(i: Int): Int\l+ \<\<(i: Int): Int\l+ \>\>(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+ label = "{Int||+ %(i: Int): Int\l+ \<\<(i: Int): Int\l+ \>\>(i: Int): Int\l+ code_point(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
 ]
 Discrete -> Int [dir=back arrowtail=open style=dashed];
 Numeric -> Int [dir=back arrowtail=open style=dashed];
 
 Char [
- label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l+ is_whitespace(): Bool\l}"
+ label = "{Char||+ to_i(): Int\l+ ascii(): Byte\l+ code_point(): Int\l+ is_ascii(): Bool\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l+ is_whitespace(): Bool\l}"
 ]
 Discrete -> Char [dir=back arrowtail=open style=dashed];
 
index 90afcec..f01534c 100644 (file)
@@ -51,19 +51,19 @@ Float [
 Numeric -> Float [dir=back arrowtail=open style=dashed];
 
 Byte [
- label = "{Byte||+ %(i: Byte): Byte\l+ \<\<(i: Int): Byte\l+ \>\>(i: Int): Byte\l}"
+ label = "{Byte||+ %(i: Byte): Byte\l+ \<\<(i: Int): Byte\l+ \>\>(i: Int): Byte\l+ ascii(): Char\l}"
 ]
 Discrete -> Byte [dir=back arrowtail=open style=dashed];
 Numeric -> Byte [dir=back arrowtail=open style=dashed];
 
 Int [
- label = "{Int||+ %(i: Int): Int\l+ \<\<(i: Int): Int\l+ \>\>(i: Int): Int\l+ ascii(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
+ label = "{Int||+ %(i: Int): Int\l+ \<\<(i: Int): Int\l+ \>\>(i: Int): Int\l+ code_point(): Char\l+ digit_count(b: Int): Int\l+ digit_count_base_10(): Int\l+ to_c(): Char\l+ abs(): Int\l}"
 ]
 Discrete -> Int [dir=back arrowtail=open style=dashed];
 Numeric -> Int [dir=back arrowtail=open style=dashed];
 
 Char [
- label = "{Char||+ to_i(): Int\l+ ascii(): Int\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l+ is_whitespace(): Bool\l}"
+ label = "{Char||+ to_i(): Int\l+ ascii(): Byte\l+ code_point(): Int\l+ is_ascii(): Bool\l+ to_lower(): Char\l+ to_upper(): Char\l+ is_digit(): Bool\l+ is_lower(): Bool\l+ is_upper(): Bool\l+ is_letter(): Bool\l+ is_whitespace(): Bool\l}"
 ]
 Discrete -> Char [dir=back arrowtail=open style=dashed];
 
index 9dee4a7..4b09f4d 100644 (file)
@@ -17,5 +17,5 @@
 var a = "éè"
 print(a.length)
 for i in [0..a.length[ do
-       print("{i} is {a.chars[i]} ({a.chars[i].ascii})")
+       print("{i} is {a.chars[i]} ({a.chars[i].code_point})")
 end
index de412ac..3739f9c 100644 (file)
@@ -16,5 +16,5 @@ intrude import core::text::flat
 import core
 
 var s = "𐏓􏿿".as(FlatString)
-print s.items.char_at(0).ascii.to_hex
-print s.items.char_at(4).ascii.to_hex
+print s.items.char_at(0).code_point.to_hex
+print s.items.char_at(4).code_point.to_hex