def make_il(self, il_code, symbol_table, c): """Make code for this node.""" # This is of function pointer type, so func.arg is the function type. func = self.func.make_il(il_code, symbol_table, c) if not func.ctype.is_pointer() or not func.ctype.arg.is_function(): descrip = "called object is not a function pointer" raise CompilerError(descrip, self.func.r) elif (func.ctype.arg.ret.is_incomplete() and not func.ctype.arg.ret.is_void()): # TODO: C11 spec says a function cannot return an array type, # but I can't determine how a function would ever be able to return # an array type. descrip = "function returns non-void incomplete type" raise CompilerError(descrip, self.func.r) if func.ctype.arg.no_info: final_args = self._get_args_without_prototype( il_code, symbol_table, c) else: final_args = self._get_args_with_prototype( func.ctype.arg, il_code, symbol_table, c) ret = ILValue(func.ctype.arg.ret) il_code.add(control_cmds.Call(func, final_args, ret)) return ret
def make_il(self, il_code, symbol_table, c): """Make code for this node.""" # This is of function pointer type, so func.arg is the function type. func = self.func.make_il(il_code, symbol_table, c) if not func.ctype.is_pointer() or not func.ctype.arg.is_function(): descrip = "called object is not a function pointer" raise CompilerError(descrip, self.func.r) if not func.ctype.arg.args: final_args = self._get_args_without_prototype( il_code, symbol_table, c) else: final_args = self._get_args_with_prototype( func.ctype.arg, il_code, symbol_table, c) ret = ILValue(func.ctype.arg.ret) il_code.add(control_cmds.Call(func, final_args, ret)) return ret