import auto_super_init
import frontend
import common_ffi
+import platform
# Add compiling options
redef class ToolContext
# Simple indirection to `Toolchain::write_and_make`
protected fun write_and_make(compiler: AbstractCompiler)
do
- var platform = compiler.mainmodule.target_platform(toolcontext)
+ var platform = compiler.mainmodule.target_platform
var toolchain
if platform == null then
toolchain = new MakefileToolchain(toolcontext)
hfile.write "#include \"{hfilename}\"\n"
for key in f.required_declarations do
if not compiler.provided_declarations.has_key(key) then
- print "No provided declaration for {key}"
+ var node = compiler.requirers_of_declarations.get_or_null(key)
+ if node != null then
+ node.debug "No provided declaration for {key}"
+ else
+ print "No provided declaration for {key}"
+ end
abort
end
hfile.write compiler.provided_declarations[key]
private var provided_declarations = new HashMap[String, String]
+ private var requirers_of_declarations = new HashMap[String, ANode]
+
# Builds the .c and .h files to be used when generating a Stack Trace
# Binds the generated C function names to Nit function names
fun build_c_to_nit_bindings
nmodule.finalize_ffi(visitor, modelbuilder)
nmodule.finalize_nitni(visitor)
end
-
- # Does this compiler support the FFI?
- fun supports_ffi: Bool do return false
end
# A file unit (may be more than one file if
# Request the presence of a global declaration
fun require_declaration(key: String)
do
- self.writer.file.required_declarations.add(key)
+ var reqs = self.writer.file.required_declarations
+ if reqs.has(key) then return
+ reqs.add(key)
+ var node = current_node
+ if node != null then compiler.requirers_of_declarations[key] = node
end
# Add a declaration in the local-header
var args = [arguments.first]
for auto_super_init in auto_super_inits do
args.clear
- for i in [0..auto_super_init.intro.msignature.arity+1[ do
+ for i in [0..auto_super_init.msignature.arity+1[ do
args.add(arguments[i])
end
- v.send(auto_super_init, args)
+ v.compile_callsite(auto_super_init, args)
end
end
v.stmt(self.n_block)
end
# stantard call-next-method
- return v.supercall(v.frame.mpropdef.as(MMethodDef), recv.mtype.as(MClassType), args)
+ return v.supercall(mpropdef.as(not null), recv.mtype.as(MClassType), args)
end
end