Skip to content
Snippets Groups Projects

Draft: Fortran Support

5 files
+ 47
19
Compare changes
  • Side-by-side
  • Inline

Files

+ 16
1
@@ -346,7 +346,21 @@ class TemplateManager:
self._stack_variable_inits[name] = init
self._stack_variable_dims[name] = arr_dim
return name
def remove_stack_variable(self, variable_type: str, variable_name: str = "") -> str:
"""
Removes a stack variable and returns the removed variable name
"""
assert len(self._stack_variables[variable_type]) == 1 or variable_name, "Ambiguous replacement of stack variable without name specifier!"
removed_var = variable_name
if not variable_name:
removed_var = self._stack_variables[variable_type][0]
if removed_var in self._stack_variable_inits:
del self._stack_variable_inits[removed_var]
del self._stack_variable_dims[removed_var]
self._stack_variables[variable_type].remove(removed_var)
return removed_var
def reserve_stack_name(self, variable_type: str) -> str:
if variable_type not in self._stack_variables:
self._stack_variables[variable_type] = []
@@ -369,6 +383,7 @@ class TemplateManager:
return f"{typename} {name}{dims} {init};\n"
else:
dims = f"(0:{self._stack_variable_dims[name] - 1})" if self._stack_variable_dims[name] >= 1 else "" # Set array dimension, including explicit starting index!
if self._stack_variable_dims[name] == -1: dims = "(:)" # Deferred shape
init = init.replace("{", "(/").replace("}", "/)")
type_prefix = f"type({typename})"
if typename.startswith("int"): type_prefix = "integer"
Loading