mirror of
https://gitlab.com/scemama/irpf90.git
synced 2024-12-22 04:13:33 +01:00
toucher OK
Version:1.1.5
This commit is contained in:
parent
3be940cc9b
commit
ffbcc750e8
@ -33,8 +33,7 @@ def process_deps(file,l):
|
|||||||
######################################################################
|
######################################################################
|
||||||
def process_types(file,var):
|
def process_types(file,var):
|
||||||
assert isinstance(var,Variable)
|
assert isinstance(var,Variable)
|
||||||
vars = var.others
|
vars = [var.name] + var.others
|
||||||
vars.insert(0,var.name)
|
|
||||||
for var in vars:
|
for var in vars:
|
||||||
name = var
|
name = var
|
||||||
var = variables[var]
|
var = variables[var]
|
||||||
@ -49,7 +48,7 @@ def do_print(var):
|
|||||||
name = var.name
|
name = var.name
|
||||||
file = open("%s%s.l"%(mandir,var.name), "w")
|
file = open("%s%s.l"%(mandir,var.name), "w")
|
||||||
print >>file, '.TH "IRPF90 entities" l %s "IRPF90 entities" %s'%(name,name)
|
print >>file, '.TH "IRPF90 entities" l %s "IRPF90 entities" %s'%(name,name)
|
||||||
if var.same_as is not None:
|
if var.same_as != var.name:
|
||||||
var = variables[var.same_as]
|
var = variables[var.same_as]
|
||||||
print >>file, ".SH Declaration"
|
print >>file, ".SH Declaration"
|
||||||
print >>file, ".nf"
|
print >>file, ".nf"
|
||||||
@ -71,6 +70,7 @@ def do_print(var):
|
|||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
def run():
|
def run():
|
||||||
|
import parsed_text
|
||||||
file = open("irpf90_entities","w")
|
file = open("irpf90_entities","w")
|
||||||
for v in variables.keys():
|
for v in variables.keys():
|
||||||
do_print_short(file,variables[v])
|
do_print_short(file,variables[v])
|
||||||
|
@ -101,8 +101,6 @@ def get_parsed_text():
|
|||||||
if x not in variables:
|
if x not in variables:
|
||||||
error.fail(line,"Variable %s unknown"%(x,))
|
error.fail(line,"Variable %s unknown"%(x,))
|
||||||
main = variables[x].same_as
|
main = variables[x].same_as
|
||||||
if main is None:
|
|
||||||
main = x
|
|
||||||
return main
|
return main
|
||||||
main_vars = make_single( map(fun, vars) )
|
main_vars = make_single( map(fun, vars) )
|
||||||
check_touch(line,vars,main_vars)
|
check_touch(line,vars,main_vars)
|
||||||
@ -204,11 +202,7 @@ def move_variables():
|
|||||||
result = []
|
result = []
|
||||||
old_varlist = []
|
old_varlist = []
|
||||||
varlist = []
|
varlist = []
|
||||||
if len(text) > 0:
|
|
||||||
lenmax = 80 - len(text[0][1].filename)
|
|
||||||
format = "%"+str(lenmax)+"s ! %s:%4s"
|
|
||||||
for vars,line in text:
|
for vars,line in text:
|
||||||
line.text = format%(line.text.ljust(lenmax),line.filename,str(line.i))
|
|
||||||
if vars != []:
|
if vars != []:
|
||||||
vars = make_single(vars)
|
vars = make_single(vars)
|
||||||
if type(line) in [ Begin_provider, Subroutine, Function ]:
|
if type(line) in [ Begin_provider, Subroutine, Function ]:
|
||||||
@ -240,11 +234,58 @@ parsed_text = move_variables()
|
|||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
def build_needs():
|
def build_needs():
|
||||||
pass
|
# Needs
|
||||||
|
for filename, text in parsed_text:
|
||||||
|
for vars,line in text:
|
||||||
|
if isinstance(line,Begin_provider):
|
||||||
|
buffer = map(strip,line.text.replace(']',',').split(','))
|
||||||
|
var = variables[buffer[1].lower()]
|
||||||
|
var.needs = []
|
||||||
|
var.to_provide = vars
|
||||||
|
elif isinstance(line,End_provider):
|
||||||
|
var.needs = make_single(var.needs)
|
||||||
|
var.to_provide = make_single(var.to_provide)
|
||||||
|
var = None
|
||||||
|
if var is not None:
|
||||||
|
var.needs += vars
|
||||||
|
for v in variables.keys():
|
||||||
|
main = variables[v].same_as
|
||||||
|
if main != v:
|
||||||
|
variables[v].needs = variables[main].needs
|
||||||
|
variables[v].to_provide = variables[main].to_provide
|
||||||
|
|
||||||
|
# Needed_by
|
||||||
|
for v in variables.keys():
|
||||||
|
variables[v].needed_by = []
|
||||||
|
for v in variables.keys():
|
||||||
|
main = variables[v].same_as
|
||||||
|
if main != v:
|
||||||
|
variables[v].needed_by = variables[main].needed_by
|
||||||
|
for v in variables.keys():
|
||||||
|
var = variables[v]
|
||||||
|
for x in var.needs:
|
||||||
|
variables[x].needed_by.append(var.same_as)
|
||||||
|
for v in variables.keys():
|
||||||
|
var = variables[v]
|
||||||
|
var.needed_by = make_single(var.needed_by)
|
||||||
|
|
||||||
|
|
||||||
|
build_needs()
|
||||||
|
|
||||||
|
######################################################################
|
||||||
|
def put_info():
|
||||||
|
for filename, text in parsed_text:
|
||||||
|
if len(text) > 0:
|
||||||
|
lenmax = 80 - len(text[0][1].filename)
|
||||||
|
format = "%"+str(lenmax)+"s ! %s:%4s"
|
||||||
|
for vars,line in text:
|
||||||
|
line.text = format%(line.text.ljust(lenmax),line.filename,str(line.i))
|
||||||
|
|
||||||
|
######################################################################
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
for i in range(len(parsed_text)):
|
for i in range(len(parsed_text)):
|
||||||
print '!-------- %s -----------'%(parsed_text[i][0])
|
print '!-------- %s -----------'%(parsed_text[i][0])
|
||||||
for line in parsed_text[i][1]:
|
for line in parsed_text[i][1]:
|
||||||
print line[1]
|
print line[1]
|
||||||
print line[0]
|
print line[0]
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
from irpf90_t import *
|
from irpf90_t import *
|
||||||
from util import *
|
from util import *
|
||||||
import error
|
import error
|
||||||
|
from command_line import command_line
|
||||||
|
|
||||||
class Variable(object):
|
class Variable(object):
|
||||||
|
|
||||||
@ -63,7 +64,7 @@ class Variable(object):
|
|||||||
def same_as(self):
|
def same_as(self):
|
||||||
if '_same_as' not in self.__dict__:
|
if '_same_as' not in self.__dict__:
|
||||||
if isinstance(self.line,Begin_provider):
|
if isinstance(self.line,Begin_provider):
|
||||||
result = None
|
result = self.name
|
||||||
else:
|
else:
|
||||||
buffer = self.text[0].text.replace(']',',').split(',')
|
buffer = self.text[0].text.replace(']',',').split(',')
|
||||||
if len(buffer) < 3:
|
if len(buffer) < 3:
|
||||||
@ -141,20 +142,6 @@ class Variable(object):
|
|||||||
return self._line
|
return self._line
|
||||||
line = property(line)
|
line = property(line)
|
||||||
|
|
||||||
############################################################
|
|
||||||
def needs(self):
|
|
||||||
if '_needs' not in self.__dict__:
|
|
||||||
self._needs = []
|
|
||||||
return self._needs
|
|
||||||
needs = property(needs)
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
def needed_by(self):
|
|
||||||
if '_needed_by' not in self.__dict__:
|
|
||||||
self._needed_by = []
|
|
||||||
return self._needed_by
|
|
||||||
needed_by = property(needed_by)
|
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
def header(self):
|
def header(self):
|
||||||
if '_header' not in self.__dict__:
|
if '_header' not in self.__dict__:
|
||||||
@ -166,9 +153,37 @@ class Variable(object):
|
|||||||
return self._header
|
return self._header
|
||||||
header = property(header)
|
header = property(header)
|
||||||
|
|
||||||
|
############################################################
|
||||||
|
def toucher(self):
|
||||||
|
if '_toucher' not in self.__dict__:
|
||||||
|
if self.same_as != self.name:
|
||||||
|
self._toucher = ""
|
||||||
|
else:
|
||||||
|
if '_needed_by' not in self.__dict__:
|
||||||
|
import parsed_text
|
||||||
|
name = self.name
|
||||||
|
result = [ "subroutine touch_%s"%(name) ,
|
||||||
|
" use %s"%(self.fmodule),
|
||||||
|
" implicit none" ]
|
||||||
|
if command_line.do_debug:
|
||||||
|
length = str(len("touch_%s"%(name)))
|
||||||
|
result += [ " character*(%s), parameter :: irp_here = 'touch_%s'"%(length,name),
|
||||||
|
" call irp_enter(irp_here)" ]
|
||||||
|
result += [ " %s_is_built = .False."%(name) ]
|
||||||
|
result += map( lambda x: "!DEC$ ATTRIBUTES FORCEINLINE :: touch_%s"%(x), self.needed_by )
|
||||||
|
result += map( lambda x: " call touch_%s"%(x), self.needed_by )
|
||||||
|
if command_line.do_debug:
|
||||||
|
result += [ " call irp_leave(irp_here)" ]
|
||||||
|
result += [ "end subroutine touch_%s"%(name) , "" ]
|
||||||
|
self._toucher = result
|
||||||
|
return self._toucher
|
||||||
|
toucher = property(toucher)
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
from preprocessed_text import preprocessed_text
|
from preprocessed_text import preprocessed_text
|
||||||
from variables import variables
|
from variables import variables
|
||||||
for v in variables.keys():
|
for v in variables.keys():
|
||||||
print v
|
print v
|
||||||
|
for line in variables['elec_coord'].toucher:
|
||||||
|
print line
|
||||||
|
@ -1 +1 @@
|
|||||||
version = "1.1.4"
|
version = "1.1.5"
|
||||||
|
Loading…
Reference in New Issue
Block a user