Merge branch 'alexis/various-fixes' into wip
authorJean Privat <jean@pryen.org>
Tue, 25 Jan 2011 02:35:09 +0000 (21:35 -0500)
committerJean Privat <jean@pryen.org>
Tue, 25 Jan 2011 02:35:09 +0000 (21:35 -0500)
lib/standard/environ.nit
lib/standard/kernel.nit
misc/gtksourceview/nit.lang
src/syntax/syntax.nit
tests/sav/test_char_is_meths.sav [new file with mode: 0644]
tests/test_char_is_meths.nit [new file with mode: 0644]

index 8a0c667..80afabe 100644 (file)
@@ -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 ""
index 994ddf0..35e46ca 100644 (file)
@@ -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.
index d38655b..b3d09cd 100644 (file)
@@ -72,6 +72,8 @@
       <keyword>redef</keyword>
       <keyword>var</keyword>
       <keyword>package</keyword>
+      <keyword>type</keyword>
+      <keyword>universal</keyword>
     </context>
 
     <context id="module-handlers" style-ref="module-handler">
index 4ec5516..06c3bcb 100644 (file)
@@ -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 (file)
index 0000000..9e83bf7
--- /dev/null
@@ -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 (file)
index 0000000..d8dfb64
--- /dev/null
@@ -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
+