module Carbon::Core::Main
Public Class Methods
define_main_function(mod, index, pass)
click to toggle source
# File lib/carbon/core/main.rb, line 8 def define_main_function(mod, index, pass) main_params = [LLVM::Int32.type, LLVM::Int8.type.pointer.pointer] main = mod.functions.add("main", main_params, LLVM::Int32.type) define_main_definition(mod, main, index, pass) end
Private Class Methods
define_main_definition(mod, func, index, pass)
click to toggle source
# File lib/carbon/core/main.rb, line 16 def define_main_definition(mod, func, index, pass) if pass.function.parameters.size == 2 define_main_definition_params(mod, func, index, pass) else define_main_definition_noparams(mod, func, index, pass) end end
define_main_definition_noparams(mod, func, index, pass)
click to toggle source
# File lib/carbon/core/main.rb, line 37 def define_main_definition_noparams(mod, func, index, pass) func.basic_blocks.append("entry").build do |b| if index.fetch(pass).first.return != Carbon::Void b.ret(b.call(mod.functions[pass.to_s])) else b.call(mod.function[pass.to_s]) b.ret(LLVM::Int(0)) end end end
define_main_definition_params(mod, func, index, pass)
click to toggle source
# File lib/carbon/core/main.rb, line 24 def define_main_definition_params(mod, func, index, pass) argc, argv = func.params argc.name, argv.name = "argc", "argv" func.basic_blocks.append("entry").build do |b| if index.fetch(pass).first.return != Carbon::Void b.ret(b.call(mod.functions[pass.to_s], argc, argv)) else b.call(mod.function[pass.to_s], argc, argv) b.ret(LLVM::Int(0)) end end end