def builder(self): if '_builder' not in self.__dict__: if not self.is_main: self._builder = [] else: import parsed_text from variables import build_use, call_provides for filename,buffer in parsed_text.parsed_text: if self.line.filename[0].startswith(filename): break text = [] same_as = self.same_as inside = False for vars,line in buffer: if type(line) == Begin_provider: if line.filename[1] == same_as: inside = True vars = [] if inside: text.append( (vars,line) ) text += map( lambda x: ([],Simple_line(line.i,x,line.filename)), call_provides(vars) ) if command_line.do_profile and type(line) == Begin_provider: text.append( ( [], Declaration(line.i," double precision :: irp_rdtsc, irp_rdtsc1, irp_rdtsc2",line.filename) ) ) text.append( ( [], Simple_line(line.i," irp_rdtsc1 = irp_rdtsc()",line.filename) ) ) if type(line) == End_provider: if inside: break name = self.name text = parsed_text.move_to_top(text,Declaration) text = parsed_text.move_to_top(text,Implicit) text = parsed_text.move_to_top(text,Use) text = map(lambda x: x[1], text) for line in filter(lambda x: type(x) not in [ Begin_doc, End_doc, Doc], text): if type(line) == Begin_provider: result = [] if command_line.directives and command_line.inline in ["all","builders"]: result += [ "!DEC$ ATTRIBUTES INLINE :: bld_%s"%(same_as) ] result += [ "subroutine bld_%s"%(name) ] result += build_use([name]+self.needs) elif type(line) == Cont_provider: pass elif type(line) == End_provider: if command_line.do_profile: result += [ " irp_rdtsc2 = irp_rdtsc()" , " call irp_set_timer(%d,(irp_rdtsc2-irp_rdtsc1))"%self.label ] result.append( "end subroutine bld_%s"%(name) ) break else: result.append(line.text) self._builder = result return self._builder
def builder(self): if '_builder' not in self.__dict__: if not self.is_main: self._builder = [] else: import parsed_text from variables import build_use, call_provides for filename, buffer in parsed_text.parsed_text: if self.line.filename[0].startswith(filename): break text = [] same_as = self.same_as inside = False for vars, line in buffer: if type(line) == Begin_provider: if line.filename[1] == same_as: inside = True vars = [] if inside: text.append((vars, line)) text += map( lambda x: ([], Simple_line(line.i, x, line.filename)), call_provides(vars)) if command_line.do_profile and type( line) == Begin_provider: text.append(( [], Declaration( line.i, " double precision :: irp_rdtsc, irp_rdtsc1, irp_rdtsc2", line.filename))) text.append( ([], Simple_line(line.i, " irp_rdtsc1 = irp_rdtsc()", line.filename))) if type(line) == End_provider: if inside: break name = self.name text = parsed_text.move_to_top(text, Declaration) text = parsed_text.move_to_top(text, Implicit) text = parsed_text.move_to_top(text, Use) text = map(lambda x: x[1], text) # inside_omp = False for line in filter( lambda x: type(x) not in [Begin_doc, End_doc, Doc], text): if type(line) == Begin_provider: result = [] if command_line.directives and command_line.inline in [ "all", "builders" ]: result += [ "!DEC$ ATTRIBUTES INLINE :: bld_%s" % (same_as) ] result += ["subroutine bld_%s" % (name)] result += build_use([name] + self.needs) elif type(line) == Cont_provider: pass elif type(line) == End_provider: if command_line.do_profile: result += [ " irp_rdtsc2 = irp_rdtsc()", " call irp_set_timer(%d,(irp_rdtsc2-irp_rdtsc1))" % self.label ] result.append("end subroutine bld_%s" % (name)) break elif type(line) == Openmp: # Detect OpenMP blocks buffer = line.text.lower().split() if buffer[1] == "parallel": # inside_omp = True self._has_openmp = True # if buffer[1] == "end" and buffer[2] == "parallel": # inside_omp = False result.append(line.text) else: # if inside_omp: # if type(line) in [ Provide_all, Provide, Touch, SoftTouch ]: # error.fail(line,str(type(line))+"is not allowed in an OpenMP block.") result.append(line.text) self._builder = result return self._builder
def residual_text(self): if '_residual_text' not in self.__dict__: from variables import build_use, call_provides from parsed_text import move_to_top def remove_providers(text): result = [] inside = False for vars,line in text: if type(line) == Begin_provider: inside = True if not inside: result.append( (vars,line) ) if type(line) == End_provider: inside = False return result def modify_functions(text): result = [] variable_list = [] for vars,line in text: if type(line) in [ Subroutine, Function ]: variable_list = list(vars) elif type(line) == End: result += map(lambda x: ([],Use(line.i,x,line.filename)), build_use(variable_list)) else: variable_list += vars result.append( (vars,line) ) return result def extract_use_dec_text(text): inside = False result = [] dec = [] use = [] for vars,line in text: if type(line) in [ Subroutine, Function, Program]: inside = True if inside: result.append( (vars,line) ) else: if type(line) == Use: use.append( (vars,line) ) elif type(line) == Declaration: dec.append( (vars,line) ) if type(line) == End: inside = False return use, dec, result def provide_variables(text): result = [] for vars,line in text: result.append( ([],line) ) result += map(lambda x: ([],Simple_line(line.i,x,line.filename)), call_provides(vars)) return result result = remove_providers(self.text) result = modify_functions(result) use,dec,result = extract_use_dec_text(result) self._use = make_single(map(lambda x: " "+x[1].text, use)) self._dec = map(lambda x: " "+x[1].text, dec) # self._dec = make_single(map(lambda x: " "+x[1].text, dec)) result = provide_variables(result) result = move_to_top(result,Declaration) result = move_to_top(result,Implicit) result = move_to_top(result,Use) result = map(lambda x: x[1], result) result = map(lambda x: x.text, result) self._residual_text = result return self._residual_text
def residual_text(self): if '_residual_text' not in self.__dict__: from variables import build_use, call_provides from parsed_text import move_to_top def remove_providers(text): result = [] inside = False for vars, line in text: if type(line) == Begin_provider: inside = True if not inside: result.append((vars, line)) if type(line) == End_provider: inside = False return result def modify_functions(text): result = [] variable_list = [] for vars, line in text: if type(line) in [Subroutine, Function]: variable_list = list(vars) elif type(line) == End: result += map( lambda x: ([], Use(line.i, x, line.filename)), build_use(variable_list)) else: variable_list += vars result.append((vars, line)) return result def extract_use_dec_text(text): inside = False result = [] dec = [] use = [] for vars, line in text: if type(line) in [Subroutine, Function, Program]: inside = True if inside: result.append((vars, line)) else: if type(line) == Use: use.append((vars, line)) elif type(line) == Declaration: dec.append((vars, line)) if type(line) == End: inside = False return use, dec, result def provide_variables(text): result = [] for vars, line in text: result.append(([], line)) result += map( lambda x: ([], Simple_line(line.i, x, line.filename)), call_provides(vars)) return result result = remove_providers(self.text) result = modify_functions(result) use, dec, result = extract_use_dec_text(result) self._use = make_single(map(lambda x: " " + x[1].text, use)) self._dec = map(lambda x: " " + x[1].text, dec) # self._dec = make_single(map(lambda x: " "+x[1].text, dec)) result = provide_variables(result) result = move_to_top(result, Declaration) result = move_to_top(result, Implicit) result = move_to_top(result, Use) result = map(lambda x: x[1], result) result = map(lambda x: x.text, result) self._residual_text = result return self._residual_text