X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/8a391a6fd88bb216ecf48d5e8489d41fcbd55983..f063625862eb4dfe006653ce98a4291fb4c1810e:/src/simix/simcalls.py diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 99d27d869c..9fecf1eb35 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -8,7 +8,7 @@ import re import glob - +import sys class Arg(object): @@ -129,22 +129,23 @@ class Simcall(object): def case(self): res = [] - args = ["simgrid::simix::unmarshal<%s>(simcall->args[%d])" % (arg.rettype(), i) + indent = ' ' + args = ["simgrid::simix::unmarshal<%s>(simcall.args[%d])" % (arg.rettype(), i) for i, arg in enumerate(self.args)] - res.append('case SIMCALL_%s:' % (self.name.upper())) + res.append(indent + 'case SIMCALL_%s:' % (self.name.upper())) if self.need_handler: - call = "simcall_HANDLER_%s(simcall%s%s)" % (self.name, + call = "simcall_HANDLER_%s(&simcall%s%s)" % (self.name, ", " if len(args) > 0 else "", ', '.join(args)) else: call = "SIMIX_%s(%s)" % (self.name, ', '.join(args)) if self.call_kind == 'Func': - res.append(" simgrid::simix::marshal<%s>(simcall->result, %s);" % (self.res.rettype(), call)) + res.append(indent + " simgrid::simix::marshal<%s>(simcall.result, %s);" % (self.res.rettype(), call)) else: - res.append(" " + call + ";") + res.append(indent + " " + call + ";") if self.call_kind != 'Blck': - res.append(' SIMIX_simcall_answer(simcall);') - res.append(' break;') + res.append(indent + ' simcall_answer();') + res.append(indent + ' break;') res.append('') return '\n'.join(res) @@ -193,7 +194,8 @@ def parse(fn): continue match = re.match( r'^(\S+)\s+([^\)\(\s]+)\s*\(*(.*)\)\s*(\[\[.*\]\])?\s*;\s*?$', line) - assert match, line + if not match: + raise AssertionError(line) ret, name, args, attrs = match.groups() sargs = [] if not re.match(r"^\s*$", args): @@ -217,7 +219,7 @@ def parse(fn): elif attr == "nohandler": handler = False else: - assert False, "Unknown attribute %s in: %s" % (attr, line) + raise AssertionError("Unknown attribute %s in: %s" % (attr, line)) sim = Simcall(name, handler, Arg('result', ret), sargs, ans) if resdi is None: simcalls.append(sim) @@ -264,8 +266,9 @@ def handle(fd, func, simcalls, guarded_simcalls): for guard, ll in guarded_simcalls.items(): fd.write('\n#if %s\n' % (guard)) fd.write('\n'.join(func(simcall) for simcall in ll)) - fd.write('\n#endif\n') + fd.write('\n#endif') + fd.write('\n') if __name__ == '__main__': simcalls, simcalls_dict = parse('simcalls.in') @@ -274,10 +277,9 @@ if __name__ == '__main__': ok &= all(map(Simcall.check, simcalls)) for k, v in simcalls_dict.items(): ok &= all(map(Simcall.check, v)) - # FIXME: we should not hide it - # if not ok: - # print ("Some checks fail!") - # sys.exit(1) + if not ok: + print ("Some checks fail!") + sys.exit(1) # # popping_accessors.hpp @@ -286,7 +288,7 @@ if __name__ == '__main__': fd.write('#include "src/simix/popping_private.hpp"') handle(fd, Simcall.accessors, simcalls, simcalls_dict) fd.write( - "\n\n/* The prototype of all simcall handlers, automatically generated for you */\n\n") + "\n/* The prototype of all simcall handlers, automatically generated for you */\n\n") handle(fd, Simcall.handler_prototype, simcalls, simcalls_dict) fd.close() @@ -302,7 +304,6 @@ if __name__ == '__main__': handle(fd, Simcall.enum, simcalls, simcalls_dict) - fd.write('\n') fd.write(' NUM_SIMCALLS\n') fd.write('} e_smx_simcall_t;\n') fd.close() @@ -330,7 +331,7 @@ if __name__ == '__main__': fd.write(' "SIMCALL_NONE",\n') handle(fd, Simcall.string, simcalls, simcalls_dict) - fd.write('\n};\n\n') + fd.write('};\n\n') fd.write('/** @private\n') fd.write( @@ -339,22 +340,23 @@ if __name__ == '__main__': fd.write(' * This function is generated from src/simix/simcalls.in\n') fd.write(' */\n') fd.write( - 'void SIMIX_simcall_handle(smx_simcall_t simcall, int value) {\n') + 'void simgrid::kernel::actor::ActorImpl::simcall_handle(int value) {\n') fd.write( - ' XBT_DEBUG("Handling simcall %p: %s", simcall, SIMIX_simcall_name(simcall->call));\n') + ' XBT_DEBUG("Handling simcall %p: %s", &simcall, SIMIX_simcall_name(simcall.call));\n') fd.write(' SIMCALL_SET_MC_VALUE(simcall, value);\n') fd.write( - ' if (simcall->issuer->context_->iwannadie)\n') + ' if (context_->iwannadie)\n') fd.write(' return;\n') - fd.write(' switch (simcall->call) {\n') + fd.write(' switch (simcall.call) {\n') handle(fd, Simcall.case, simcalls, simcalls_dict) fd.write(' case NUM_SIMCALLS:\n') fd.write(' break;\n') fd.write(' case SIMCALL_NONE:\n') - fd.write(' THROWF(arg_error, 0, "Asked to do the noop syscall on %s@%s", simcall->issuer->get_cname(),\n') - fd.write(' sg_host_get_name(simcall->issuer->get_host()));\n') + fd.write(' throw std::invalid_argument(simgrid::xbt::string_printf("Asked to do the noop syscall on %s@%s",\n') + fd.write(' get_cname(),\n') + fd.write(' sg_host_get_name(get_host())));\n') fd.write(' default:\n') fd.write(' THROW_IMPOSSIBLE;\n') fd.write(' }\n') @@ -371,9 +373,12 @@ if __name__ == '__main__': fd.write('#include "xbt/ex.h"\n') fd.write('#include \n') fd.write('#include \n') + fd.write('#include \n') fd.write("/** @cond */ // Please Doxygen, don't look at this\n") fd.write(''' +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix); + template inline static R simcall(e_smx_simcall_t call, T const&... t) { @@ -384,11 +389,11 @@ inline static R simcall(e_smx_simcall_t call, T const&... t) (int)self->simcall.call); self->yield(); } else { - SIMIX_simcall_handle(&self->simcall, 0); + self->simcall_handle(0); } return simgrid::simix::unmarshal(self->simcall.result); } ''') handle(fd, Simcall.body, simcalls, simcalls_dict) - fd.write(" /** @endcond */\n") + fd.write("/** @endcond */\n") fd.close()