Skip to content

Commit 1eec976

Browse files
committed
Recalculate offset and locals size
This must be done if a local array is discovered to use lbound and/or ubound because it calls another function that uses it.
1 parent ab37ae9 commit 1eec976

1 file changed

Lines changed: 11 additions & 4 deletions

File tree

api/optimize.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from api.debug import __DEBUG__
1414
from api.errmsg import warning_not_used
1515
import api.utils
16+
import api.symboltable
1617

1718

1819
class ToVisit(object):
@@ -266,11 +267,17 @@ def _check_if_any_arg_is_an_array_and_needs_lbound_or_ubound(self, params: symbo
266267
if arg.value.lbound_used and arg.value.ubound_used:
267268
continue
268269

269-
self._update_bound_status(arg.value, param)
270+
self._update_bound_status(arg.value, param, params.parent)
270271

271-
def _update_bound_status(self, arg: symbols.VARARRAY, param: symbols.PARAMDECL):
272+
def _update_bound_status(self, arg: symbols.VARARRAY, param: symbols.PARAMDECL, func: symbols.FUNCTION):
273+
old_lbound_used = arg.lbound_used
274+
old_ubound_used = arg.ubound_used
272275
arg.lbound_used = arg.lbound_used or param.lbound_used
273276
arg.ubound_used = arg.ubound_used or param.ubound_used
274277

275-
if arg.lbound_used and arg.ubound_used:
276-
return
278+
if old_lbound_used != arg.lbound_used or old_ubound_used != arg.ubound_used:
279+
if arg.scope == SCOPE.global_:
280+
return
281+
282+
if arg.scope == SCOPE.local and not arg.byref:
283+
arg.scopeRef.owner.locals_size = api.symboltable.SymbolTable.compute_offsets(arg.scopeRef)

0 commit comments

Comments
 (0)