From: Jean Privat Date: Tue, 25 Jan 2011 02:35:09 +0000 (-0500) Subject: Merge branch 'alexis/various-fixes' into wip X-Git-Tag: v0.4~17 X-Git-Url: http://nitlanguage.org?hp=f860b2fb89e358b58b2c875676d3c360e232e449 Merge branch 'alexis/various-fixes' into wip --- diff --git a/lib/standard/environ.nit b/lib/standard/environ.nit index 8a0c667..80afabe 100644 --- a/lib/standard/environ.nit +++ b/lib/standard/environ.nit @@ -23,8 +23,6 @@ redef class Symbol # FIXME: There is no proper way to handle NULL C string yet. What a pitty. var nulstr = once ("".to_cstring.get_environ) if res != nulstr then - "env {self}=".output - res.output return new String.from_cstring(res) else return "" diff --git a/lib/standard/kernel.nit b/lib/standard/kernel.nit index 994ddf0..35e46ca 100644 --- a/lib/standard/kernel.nit +++ b/lib/standard/kernel.nit @@ -372,7 +372,7 @@ special Discrete if self == '-' then return -1 - else if self >= '0' and self <= '9' then + else if is_digit then return self.ascii - '0'.ascii else return self.to_lower.ascii - ('a'.ascii + 10) @@ -388,7 +388,7 @@ special Discrete # Char to lower case fun to_lower : Char do - if self >= 'A' and self <= 'Z' then + if is_upper then return (ascii + ('a'.distance('A'))).ascii else return self @@ -398,12 +398,32 @@ special Discrete # Char to upper case fun to_upper : Char do - if self >= 'a' and self <= 'z' then + if is_lower then return (ascii - ('a'.distance('A'))).ascii else return self end end + + fun is_digit : Bool + do + return self >= '0' and self <= '9' + end + + fun is_lower : Bool + do + return self >= 'a' and self <= 'z' + end + + fun is_upper : Bool + do + return self >= 'A' and self <= 'Z' + end + + fun is_letter : Bool + do + return is_lower or is_upper + end end # Pointer classes are used to manipulate extern C structures. diff --git a/misc/gtksourceview/nit.lang b/misc/gtksourceview/nit.lang index d38655b..b3d09cd 100644 --- a/misc/gtksourceview/nit.lang +++ b/misc/gtksourceview/nit.lang @@ -72,6 +72,8 @@ redef var package + type + universal diff --git a/src/syntax/syntax.nit b/src/syntax/syntax.nit index 4ec5516..06c3bcb 100644 --- a/src/syntax/syntax.nit +++ b/src/syntax/syntax.nit @@ -32,6 +32,16 @@ special ModuleLoader redef fun parse_file(context, file, filename, name, dir) do + var name_is_valid = name.to_s.length > 0 and name.to_s[0].is_lower + for char in name.to_s do if not char.is_digit and not char.is_letter and not char == '_' + then + name_is_valid = false + break + end + if not name_is_valid then + context.error( null, "{filename}: Error package name \"{name}\", must start with a lower case letter and contain only letters, digits and '_'." ) + end + var lexer = new Lexer(file, filename) var parser = new Parser(lexer) var node_tree = parser.parse diff --git a/tests/sav/test_char_is_meths.sav b/tests/sav/test_char_is_meths.sav new file mode 100644 index 0000000..9e83bf7 --- /dev/null +++ b/tests/sav/test_char_is_meths.sav @@ -0,0 +1,8 @@ +true +false +false +true +true +false +false +true diff --git a/tests/test_char_is_meths.nit b/tests/test_char_is_meths.nit new file mode 100644 index 0000000..d8dfb64 --- /dev/null +++ b/tests/test_char_is_meths.nit @@ -0,0 +1,13 @@ + +print 'a'.is_lower +print 'B'.is_lower + +print 'a'.is_upper +print 'B'.is_upper + +print 'a'.is_letter +print '1'.is_letter + +print 'a'.is_digit +print '1'.is_digit +