rename `NativeString` to `CString`
[nit.git] / src / nitni / nitni_base.nit
index cc0ffa2..41197ef 100644 (file)
@@ -31,6 +31,8 @@ redef class MMethod
                if nit_name == "+" then return "_plus"
                if nit_name == "-" then return "_minus"
                if nit_name == "unary -" then return "_unary_minus"
+               if nit_name == "unary +" then return "_unary_plus"
+               if nit_name == "unary ~" then return "_unary_tilde"
                if nit_name == "*" then return "_star"
                if nit_name == "/" then return "_slash"
                if nit_name == "%" then return "_percent"
@@ -38,24 +40,23 @@ redef class MMethod
                if nit_name == "[]=" then return "_index_assign"
                if nit_name == "==" then return "_equal"
                if nit_name == "<" then return "_less"
-               if nit_name == ">" then return "_geater"
+               if nit_name == ">" then return "_greater"
                if nit_name == "<=" then return "_less_or_equal"
                if nit_name == ">=" then return "_greater_or_equal"
                if nit_name == "!=" then return "_not_equal"
                if nit_name == "<<" then return "_left"
                if nit_name == ">>" then return "_right"
                if nit_name == "<=>" then return "_starship"
+               if nit_name == "|" then return "_pipe"
+               if nit_name == "^" then return "_caret"
+               if nit_name == "&" then return "_amp"
+               if nit_name == "~" then return "_tilde"
 
                if nit_name.chars.last == '=' then return "{nit_name.substring(0, nit_name.length-1)}__assign"
                return nit_name
        end
 end
 
-redef class MModule
-       # Mangled name of this module in C
-       fun cname: String do return name
-end
-
 redef class MMethodDef
        # Name of the function to callback this method from C,
        # also used in other functions names used for this method.
@@ -66,21 +67,25 @@ redef class MType
        # Representation of this type in pure C on the FFI extern side
        #   Object -> Object
        #   Pointer -> void*
-       fun cname: String is abstract
+       fun cname: String do return cname_normal_class
 
        # Representation of this type in C for the internal of the system
        # Hides extern types.
-       fun cname_blind: String is abstract
+       fun cname_blind: String do return "struct nitni_instance *"
 
        # Representation of this type in mangled C
        #   Object -> Object
        #   Pointer -> Pointer
        fun mangled_cname: String is abstract
 
-       # Does this types has a primitive reprensentation
+       # Does this type have a primitive representation?
+       #
        #   type Object is_primitive? false
        #   type Pointer is_primitive? true
-       fun is_cprimitive: Bool is abstract
+       fun is_cprimitive: Bool do return false
+
+       # Name of this type in C for normal classes (not extern and not primitive)
+       protected fun cname_normal_class: String do return mangled_cname
 end
 
 redef class MClassType
@@ -88,48 +93,57 @@ redef class MClassType
        do
                var name = mclass.name
                if name == "Bool" then return "int"
-               if name == "Char" then return "char"
+               if name == "Char" then return "uint32_t"
                if name == "Float" then return "double"
                if name == "Int" then return "long"
-               if name == "NativeString" then return "char*"
+               if name == "Byte" then return "unsigned char"
+               if name == "Int8" then return "int8_t"
+               if name == "Int16" then return "int16_t"
+               if name == "UInt16" then return "uint16_t"
+               if name == "Int32" then return "int32_t"
+               if name == "UInt32" then return "uint32_t"
+               if name == "CString" then return "char*"
                if mclass.kind == extern_kind then
                        var ctype = mclass.ctype
                        assert ctype != null
                        return ctype
                end
-               return mangled_cname
+               return cname_normal_class
        end
 
        redef fun cname_blind do
                var name = mclass.name
                if name == "Bool" then return "int"
-               if name == "Char" then return "char"
+               if name == "Char" then return "uint32_t"
                if name == "Float" then return "double"
                if name == "Int" then return "long"
-               if name == "NativeString" then return "char*"
+               if name == "Byte" then return "unsigned char"
+               if name == "Int8" then return "int8_t"
+               if name == "Int16" then return "int16_t"
+               if name == "UInt16" then return "uint16_t"
+               if name == "Int32" then return "int32_t"
+               if name == "UInt32" then return "uint32_t"
+               if name == "CString" then return "char*"
                if mclass.kind == extern_kind then return "void*"
-               return "struct nitni_instance *"
+               return super
        end
 
        redef fun mangled_cname do return mclass.name
 
        redef fun is_cprimitive do return mclass.kind == extern_kind or
-                       (once ["Bool", "Char", "Float", "Int", "NativeString"]).has(mclass.name)
+                       (once ["Bool", "Char", "Float", "Int", "CString",
+                              "Byte", "Int8", "Int16", "UInt16", "Int32", "UInt32"]).has(mclass.name)
 end
 
 redef class MNullableType
-       redef fun cname do return mangled_cname
-       redef fun cname_blind do return "struct nitni_instance *"
        redef fun mangled_cname do return "nullable_{mtype.mangled_cname}"
-       redef fun is_cprimitive do return false
 end
 
-redef class MVirtualType
-       redef fun mangled_cname: String do return to_s
+redef class MFormalType
+       redef fun mangled_cname do return to_s
 end
 
 redef class MGenericType
-       redef fun cname do return mangled_cname
        redef fun mangled_cname
        do
                var base = super