X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d6d03a0a88c2673c9e5c604d63912b77bc17fdd4..6dfbeafc01f45baadb4214d15cd0c703887d743e:/src/simix/simcalls.py diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 706dc92cd6..4465a6420c 100755 --- a/src/simix/simcalls.py +++ b/src/simix/simcalls.py @@ -11,9 +11,9 @@ import glob 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] @@ -80,25 +80,40 @@ class Simcall(object): 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] - res.append('static inline %s simcall_%s__get__%s(smx_simcall_t simcall) {' % ( + 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(' 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('{') + 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) {' % ( + res.append('static inline void simcall_%s__set__%s(smx_simcall_t simcall, %s arg)' % ( self.name, arg.name, arg.rettype())) + res.append('{') res.append(' simgrid::simix::marshal<%s>(simcall->args[%i], arg);' % (arg.rettype(), i)) res.append('}') # 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)) + 'static inline %s simcall_%s__get__result(smx_simcall_t simcall)' % (self.res.rettype(), self.name)) + res.append('{') + 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())) @@ -127,7 +142,7 @@ class Simcall(object): return '\n'.join(res) def body(self): - res = [' '] + res = [''] res.append( 'inline static %s simcall_BODY_%s(%s) {' % (self.res.rettype(), self.name, @@ -218,6 +233,8 @@ def header(name): '/* */\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') @@ -233,17 +250,16 @@ def header(name): 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