X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/595e59c568ff5f8510de201bfd800951cdc2adcb..38f7ddbf61f574a934f191ef2d8358d9f8be1f96:/src/simix/simcalls.py diff --git a/src/simix/simcalls.py b/src/simix/simcalls.py index 706dc92cd6..f846463b9c 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,14 +80,21 @@ 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] + 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)) @@ -95,10 +102,15 @@ class Simcall(object): # 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())) @@ -218,6 +230,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 +247,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