Skip to content

Commit

Permalink
Implement check_bound and var_in_symtab
Browse files Browse the repository at this point in the history
  • Loading branch information
certik committed Mar 17, 2019
1 parent 3c4096b commit 42ca043
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion lfortran/asr/asr_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,30 @@ def visit_Module(self, node):
self.visit(sym)

def visit_Function(self, node):
def var_in_symtab(v, symtab):
assert isinstance(v, asr.Variable)
assert v.name in symtab.symbols
assert v == symtab.symbols[v.name]
def check_bound(b):
if b is None:
pass
elif isinstance(b, asr.Num):
assert isinstance(b.type, asr.Integer)
elif isinstance(b, asr.Variable):
#var_in_symtab(b, node.symtab)
pass
else:
raise NotImplementedError()
for arg in node.args:
assert arg.name in node.symtab.symbols
var_in_symtab(arg, node.symtab)
assert arg.dummy == True
for d in arg.type.dims:
# After #55 is fixed, this will be checked by ASR itself,
# or by calling a check() method
assert isinstance(d, asr.dimension)
lb, ub = d.start, d.end
check_bound(lb)
check_bound(ub)
assert node.return_var.name in node.symtab.symbols
assert node.return_var.dummy == True
assert node.return_var.intent is None
Expand Down

0 comments on commit 42ca043

Please sign in to comment.