if l != null then
visitor.add_indent(w)
w.add("/* ")
- w.add(l.file)
+ w.add(l.file.filename)
w.add(":")
w.add(l.line_start.to_s)
w.add(" */\n")
else
p = cparams.join(", ")
end
- if human_name != null then v.add_decl("#define LOCATE_{cname} \"{human_name}\"")
+ if human_name != null then v.add_decl("static const char * const LOCATE_{cname} = \"{human_name}\";")
v.add_decl("{r} {cname}({p});")
v.add_decl("typedef {r} (*{cname}_t)({p});")
v.add_instr("{r} {cname}({p})\{")
v.add_decl("struct \{struct stack_frame_t me;\} fra;")
end
v.add_instr("fra.me.prev = stack_frame_head; stack_frame_head = &fra.me;")
- v.add_instr("fra.me.file = LOCATE_{v.visitor.module.name};")
+ v.add_instr("fra.me.file = LOCATE_{v.visitor.mmmodule.cname};")
v.add_instr("fra.me.line = {ll};")
v.add_instr("fra.me.meth = LOCATE_{v.basecname};")
v.add_instr("fra.me.has_broke = 0;")
var w = new Writer
var prop = property
if prop.global.is_init then args.add("init_table")
- if prop.name == (once ("add".to_symbol)) and prop.local_class.name == (once ("Array".to_symbol)) then
- w.add(prop.cname)
- w.add("(")
- else
- w.add(prop.global.meth_call)
- w.add("(")
- w.add(args.first)
- w.add(")(")
- end
- var first = true
+ w.add(prop.global.meth_call)
+ w.add("(")
+ w.add(args.first)
+ w.add(")(")
w.add_all(args, ", ")
w.add(")")
return w
v.add_location(location)
var w = new_result(v)
w.add("NEW_")
- w.add(stype.local_class.name.to_s)
+ w.add(stype.local_class.cname)
w.add("()")
end
end
v.add_location(location)
var w = new_result(v)
w.add("CHECKNEW_")
- w.add(stype.local_class.name.to_s)
+ w.add(stype.local_class.cname)
w.add("(")
w.add(v.register(expr))
w.add(")")
v.add_location(location)
var w = v.new_instr
w.add("INIT_ATTRIBUTES__")
- w.add(stype.local_class.name.to_s)
+ w.add(stype.local_class.cname)
w.add("(")
w.add(v.register(expr))
w.add(");\n")
v.add_location(location)
if method.is_intern then
compile_intern_method_to_c(v)
- else
+ else if not method.is_init then
compile_extern_method_to_c(v)
end
end
fun compile_extern_method_to_c(v: I2CCompilerVisitor)
do
- var ename = method.extern_name.as(not null)#"{method.module.name}_{method.local_class.name}_{method.local_class.name}_{method.name}_{method.signature.arity}"
+ var ename = method.extern_name.as(not null)
+
var sig = method.signature
assert exprs.length == sig.arity + 1
s = "NEW_NativeArray(UNTAG_Int({regs[1]}), sizeof(val_t))"
else if n == once "calloc_string".to_symbol then
s = "BOX_NativeString((char*)raw_alloc((UNTAG_Int({regs[1]}) * sizeof(char))))"
+ # Add output_class_name native implementation
+ else if n == once "output_class_name".to_symbol then
+ s = "printf(\"%s\\n\", VAL2VFT({regs[0]})[2].cname);"
+ # Add class_name implementation
+ else if n == once "native_class_name".to_symbol then
+ s = "BOX_NativeString(VAL2VFT({regs[0]})[2].cname);"
end
+
if s == null then
var ll = location
if ll != null then v.add_instr("fprintf(stderr, \"{ll.to_s}: \");")
w.add("\", NULL")
end
w.add(", LOCATE_")
- w.add(module_location.name.to_s)
+ w.add(module_location.cname)
var ll = location
if ll != null then
w.add(", ")