nitlanguage
/
nit.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
typing: AForBlock propagates error to the main AForExpr
[nit.git]
/
src
/
nitni
/
nitni_base.nit
diff --git
a/src/nitni/nitni_base.nit
b/src/nitni/nitni_base.nit
index
4f31aaf
..
a43e1d7
100644
(file)
--- a/
src/nitni/nitni_base.nit
+++ b/
src/nitni/nitni_base.nit
@@
-22,7
+22,6
@@
module nitni_base
import parser
import modelbuilder # builder only for externcalls
import parser
import modelbuilder # builder only for externcalls
-private import compiler::abstract_compiler
redef class MMethod
# Short name of this method in C (without the class name)
redef class MMethod
# Short name of this method in C (without the class name)
@@
-32,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 == "+" 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"
if nit_name == "*" then return "_star"
if nit_name == "/" then return "_slash"
if nit_name == "%" then return "_percent"
@@
-39,25
+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 "_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 "_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
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 c_name # FIXME this is a hack to keep the internal FFI
- # API independent of the compilers while still using the `MModule::c_name` service.
-end
-
redef class MMethodDef
# Name of the function to callback this method from C,
# also used in other functions names used for this method.
redef class MMethodDef
# Name of the function to callback this method from C,
# also used in other functions names used for this method.
@@
-72,17
+71,18
@@
redef class MType
# Representation of this type in C for the internal of the system
# Hides extern types.
# 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
# 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
# type Object is_primitive? false
# type Pointer is_primitive? true
- fun is_cprimitive: Bool is abstract
+ fun is_cprimitive: Bool do return false
end
redef class MClassType
end
redef class MClassType
@@
-90,44
+90,58
@@
redef class MClassType
do
var name = mclass.name
if name == "Bool" then return "int"
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 == "Float" then return "double"
if name == "Int" then return "long"
+ 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 == "NativeString" then return "char*"
if mclass.kind == extern_kind then
var ctype = mclass.ctype
assert ctype != null
return ctype
end
if name == "NativeString" 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"
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 == "Float" then return "double"
if name == "Int" then return "long"
+ 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 == "NativeString" then return "char*"
if mclass.kind == extern_kind then return "void*"
if name == "NativeString" then return "char*"
if mclass.kind == extern_kind then return "void*"
- return "struct nitni_instance *"
+ return super
end
end
+ # Name of this type in C for normal classes (not extern and not primitive)
+ protected fun cname_normal_class: String do return mangled_cname
+
redef fun mangled_cname do return mclass.name
redef fun is_cprimitive do return mclass.kind == extern_kind or
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", "NativeString",
+ "Byte", "Int8", "Int16", "UInt16", "Int32", "UInt32"]).has(mclass.name)
end
redef class MNullableType
redef fun cname do return mangled_cname
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 mangled_cname do return "nullable_{mtype.mangled_cname}"
- redef fun is_cprimitive do return false
end
redef class MVirtualType
end
redef class MVirtualType
- redef fun mangled_cname: String do return to_s
+ redef fun mangled_cname do return to_s
end
redef class MGenericType
end
redef class MGenericType