end
j += 1
end
- var stop_prop: MMMethod
+ var stop_prop: MMMethod = null
if j < n.explicit_super_init_calls.length then
stop_prop = n.explicit_super_init_calls[j]
end
# == and != are guarded and possibly inlined
meth compile_call(v: CompilerVisitor, cargs: Array[String]): String
do
- var i = concrete_property
+ var i = self
assert i isa MMSrcMethod
if i.node isa AInternMethPropdef or
(i.local_class.name == (once "Array".to_symbol) and name == (once "[]".to_symbol))
var ee = once "==".to_symbol
var ne = once "!=".to_symbol
if name == ne then
- var eqp = signature.recv.select_method(ee)
+ var eqp = signature.recv.local_class.select_method(ee)
var eqcall = eqp.compile_call(v, cargs)
return "TAG_Bool(!UNTAG_Bool({eqcall}))"
end
end
end
-redef class MMConcreteProperty
+redef class MMLocalProperty
# Compile the property as a C property
meth compile_property_to_c(v: CompilerVisitor) do end
end
protected meth decl_csignature(v: CompilerVisitor, args: Array[String]): String
do
var params = new Array[String]
- var params_new: Array[String]
+ var params_new: Array[String] = null
if global.is_init then
params_new = new Array[String]
end
redef meth do_compile_inside(v, method, params)
do
var orig_meth: MMLocalProperty = method.global.intro
- var orig_sig = orig_meth.signature.adaptation_to(method.signature.recv)
+ var orig_sig = orig_meth.signature_for(method.signature.recv)
if n_signature != null then
var sig = n_signature
assert sig isa ASignature
var old_return_value = v.return_value
var old_has_return = v.has_return
- var itpos: String
+ var itpos: String = null
if self isa AConcreteInitPropdef then
itpos = "VAL2OBJ({params[0]})->vft[{method.local_class.global.init_table_pos_id}].i"
# v.add_instr("printf(\"{method.full_name}: inittable[%d] = %d\\n\", {itpos}, init_table[{itpos}]);")
do
var c = method.local_class.name
var n = method.name
- var s: String
+ var s: String = null
if c == once "Int".to_symbol then
if n == once "object_id".to_symbol then
s = "{p[0]}"
end
else if c == once "Float".to_symbol then
if n == once "object_id".to_symbol then
- s = "TAG_Int((int)UNBOX_Float({p[0]}))"
+ s = "TAG_Int((bigint)UNBOX_Float({p[0]}))"
else if n == once "unary -".to_symbol then
s = "BOX_Float(-UNBOX_Float({p[0]}))"
else if n == once "output".to_symbol then
v.add_instr("printf(\"%f\\n\", UNBOX_Float({p[0]}));")
else if n == once "to_i".to_symbol then
- s = "TAG_Int((int)UNBOX_Float({p[0]}))"
+ s = "TAG_Int((bigint)UNBOX_Float({p[0]}))"
else if n == once "+".to_symbol then
s = "BOX_Float(UNBOX_Float({p[0]})+UNBOX_Float({p[1]}))"
else if n == once "-".to_symbol then
v.add_instr("(void)memcpy(UNBOX_NativeString({p[1]})+UNTAG_Int({p[4]}), UNBOX_NativeString({p[0]})+UNTAG_Int({p[3]}), UNTAG_Int({p[2]}));")
end
else if n == once "object_id".to_symbol then
- s = "TAG_Int((int){p[0]})"
+ s = "TAG_Int((bigint){p[0]})"
else if n == once "sys".to_symbol then
s = "(G_sys)"
else if n == once "is_same_type".to_symbol then
redef meth compile_stmt(v)
do
var e = v.compile_expr(n_expr)
- var prop = n_expr.stype.select_method(once "iterator".to_symbol)
+ var prop = n_expr.stype.local_class.select_method(once "iterator".to_symbol)
if prop == null then
printl("No iterator")
return
v.free_var(e)
var iter = v.get_var
v.add_assignment(iter, prop.compile_call(v, [e]))
- var prop2 = ittype.select_method(once "is_ok".to_symbol)
+ var prop2 = ittype.local_class.select_method(once "is_ok".to_symbol)
if prop2 == null then
printl("No is_ok")
return
end
- var prop3 = ittype.select_method(once "item".to_symbol)
+ var prop3 = ittype.local_class.select_method(once "item".to_symbol)
if prop3 == null then
printl("No item")
return
end
- var prop4 = ittype.select_method(once "next".to_symbol)
+ var prop4 = ittype.local_class.select_method(once "next".to_symbol)
if prop4 == null then
printl("No next")
return
end
end
+redef class AAsCastExpr
+ redef meth compile_expr(v)
+ do
+ var e = v.compile_expr(n_expr)
+ n_type.stype.compile_type_check(v, e, self)
+ return e
+ end
+end
+
redef class ATrueExpr
redef meth compile_expr(v)
do
redef class AStringFormExpr
redef meth compile_expr(v)
do
- var prop = stype.select_method(once "with_native".to_symbol)
+ var prop = stype.local_class.select_method(once "with_native".to_symbol)
compute_string_info
return prop.compile_constructor_call(v, ["BOX_NativeString(\"{_cstring}\")", "TAG_Int({_cstring_length})"])
end
redef class ASuperstringExpr
redef meth compile_expr(v)
do
- var prop = stype.select_method(once "init".to_symbol)
+ var prop = stype.local_class.select_method(once "init".to_symbol)
var recv = prop.compile_constructor_call(v, new Array[String])
- var prop2 = stype.select_method(once "append".to_symbol)
+ var prop2 = stype.local_class.select_method(once "append".to_symbol)
- var prop3 = stype.select_method(once "to_s".to_symbol)
+ var prop3 = stype.local_class.select_method(once "to_s".to_symbol)
for ne in n_exprs do
var e = v.ensure_var(v.compile_expr(ne))
if ne.stype != stype then
redef class AArrayExpr
redef meth compile_expr(v)
do
- var prop = stype.select_method(once "with_capacity".to_symbol)
+ var prop = stype.local_class.select_method(once "with_capacity".to_symbol)
var recv = prop.compile_constructor_call(v,["TAG_Int({n_exprs.length})"])
- var prop2 = stype.select_method(once "add".to_symbol)
+ var prop2 = stype.local_class.select_method(once "add".to_symbol)
for ne in n_exprs do
var e = v.compile_expr(ne)
prop2.compile_call(v, [recv, e])
redef class ARangeExpr
redef meth compile_expr(v)
do
- var prop = stype.select_method(propname)
+ var prop = stype.local_class.select_method(propname)
var e = v.compile_expr(n_expr)
var e2 = v.compile_expr(n_expr2)
return prop.compile_constructor_call(v, [e, e2])