def run(self, obj, args=None): obj = obj.get_expression() variables = obj.get_variables() validate_variables(variables) if args is None: args = {} return self.env.run_collect(obj, assign_values(variables, args))
def build_collect(self, exprs, args): variables = self.get_used_variables(exprs, args) validate_variables(variables) deps = { v: args[v].get_variables() for v in variables } variables = sort_by_deps(deps) write_functions = [ expr.type.write_function for expr in exprs ] self.write_header() for v in variables: args[v].declare_all(self) for expr in exprs: expr.declare_all(self) for f in write_functions: f.declare_all(self) self.main_begin() self.init_fifo() self.init_variables(variables, args) for expr, f in zip(exprs, write_functions): self.writer.line( "{}(output, {});", f.build(self), expr.build(self)) self.writer.line("fclose(output);") self.main_end()