+ def check(self):
+ # smx_user.c simcall_BODY_
+ # smx_*.c void SIMIX_pre_host_on(smx_simcall_t simcall, smx_host_t h)
+ self.check_body()
+ self.check_pre()
+
+ def check_body(self):
+ if self.simcalls_BODY is None:
+ f = open('smx_user.c')
+ self.simcalls_BODY = set(re.findall('simcall_BODY_(.*?)\(', f.read()))
+ f.close()
+ if self.name not in self.simcalls_BODY:
+ print '# ERROR: No function calling simcall_BODY_%s'%self.name
+ print '# Add something like this to smx_user.c:'
+ print '''%s simcall_%s(%s)
+{
+ return simcall_BODY_%s(%s);
+}\n'''%(self.res.ret()
+ ,self.name
+ ,', '.join('%s %s'%(arg.ret(), arg.name)
+ for arg in self.args)
+ ,self.name
+ ,', '.join(arg.name for arg in self.args))
+ return False
+ return True
+
+ def check_pre(self):
+ if self.simcalls_PRE is None:
+ self.simcalls_PRE = set()
+ for fn in glob.glob('smx_*') + glob.glob('../mc/*'):
+ f = open(fn)
+ self.simcalls_PRE |= set(re.findall('SIMIX_pre_(.*?)\(', f.read()))
+ f.close()
+ if self.name not in self.simcalls_PRE:
+ print '# ERROR: No function called SIMIX_pre_%s'%self.name
+ print '# Add something like this to smx_.*.c:'
+ print '''%s SIMIX_pre_%s(smx_simcall_t simcall%s)
+{
+ // Your code handling the simcall
+}\n'''%(self.res.ret()
+ ,self.name
+ ,''.join(', %s %s'%(arg.ret(), arg.name)
+ for arg in self.args))
+ return False
+ return True
+