class Arg(object):
- def __init__(self, name, type):
+ def __init__(self, name, thetype):
self.name = name
- self.type = type
+ self.type = thetype
def field(self):
return self.simcall_types[self.type]
def accessors(self):
res = []
res.append('')
+ regex = re.compile(r"^boost::intrusive_ptr<(.*?)>(.*)$") # to compute the raw type
# Arguments getter/setters
for i in range(len(self.args)):
arg = self.args[i]
+ rawtype = regex.sub(r'\1*\2', arg.rettype())
res.append('static inline %s simcall_%s__get__%s(smx_simcall_t simcall) {' % (
arg.rettype(), self.name, arg.name))
res.append(
' return simgrid::simix::unmarshal<%s>(simcall->args[%i]);' % (arg.rettype(), i))
res.append('}')
+ res.append('static inline %s simcall_%s__getraw__%s(smx_simcall_t simcall) {' % (
+ rawtype, self.name, arg.name))
+ res.append(
+ ' return simgrid::simix::unmarshal_raw<%s>(simcall->args[%i]);' % (rawtype, i))
+ res.append('}')
res.append('static inline void simcall_%s__set__%s(smx_simcall_t simcall, %s arg) {' % (
self.name, arg.name, arg.rettype()))
res.append(' simgrid::simix::marshal<%s>(simcall->args[%i], arg);' % (arg.rettype(), i))
# Return value getter/setters
if self.res.type != 'void':
+ rawtype = regex.sub(r'\1*\2', self.res.rettype())
res.append(
'static inline %s simcall_%s__get__result(smx_simcall_t simcall){' % (self.res.rettype(), self.name))
res.append(' return simgrid::simix::unmarshal<%s>(simcall->result);' % self.res.rettype())
res.append('}')
+ res.append(
+ 'static inline %s simcall_%s__getraw__result(smx_simcall_t simcall){' % (rawtype, self.name))
+ res.append(' return simgrid::simix::unmarshal_raw<%s>(simcall->result);' % rawtype)
+ res.append('}')
res.append(
'static inline void simcall_%s__set__result(smx_simcall_t simcall, %s result){' % (self.name, self.res.rettype()))
res.append(' simgrid::simix::marshal<%s>(simcall->result, result);' % (self.res.rettype()))
'/* */\n')
fd.write(
'/* change simcalls specification in src/simix/simcalls.in */\n')
+ fd.write(
+ '/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved. */\n')
fd.write(
'/**********************************************************************/\n\n')
fd.write('/*\n')
def handle(fd, func, simcalls, guarded_simcalls):
- def nonempty(e):
+ def nonempty(e):
return e != ''
fd.write('\n'.join(filter(nonempty, (func(simcall) for simcall in simcalls))))
- for guard, list in guarded_simcalls.items():
+ for guard, ll in guarded_simcalls.items():
fd.write('\n#if %s\n' % (guard))
- fd.write('\n'.join(func(simcall) for simcall in list))
+ fd.write('\n'.join(func(simcall) for simcall in ll))
fd.write('\n#endif\n')
if __name__ == '__main__':
- import sys
simcalls, simcalls_dict = parse('simcalls.in')
ok = True
fd.write('#include <xbt/base.h>\n')
fd.write('#include "smx_private.h"\n')
- fd.write('#if HAVE_MC\n')
+ fd.write('#if SIMGRID_HAVE_MC\n')
fd.write('#include "src/mc/mc_forward.hpp"\n')
fd.write('#endif\n')
fd.write('\n')