# 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 ""
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)
# 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
# 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.
<keyword>redef</keyword>
<keyword>var</keyword>
<keyword>package</keyword>
+ <keyword>type</keyword>
+ <keyword>universal</keyword>
</context>
<context id="module-handlers" style-ref="module-handler">
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
--- /dev/null
+true
+false
+false
+true
+true
+false
+false
+true
--- /dev/null
+
+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
+