def test_calls(self): KSP.set_compiled(True) self.method() self.assertEqual( unpack_lines(Output().get()), call_out.format(method=Function.get_func_name(self.method))) Output().refresh() x = kInt(name='x') self.method(x) self.assertEqual(x._get_compiled(), '$x') self.assertEqual(x._get_runtime(), 3) self.assertEqual( unpack_lines(Output().get()), call_with_out.format(method=Function.get_func_name(self.method))) Output().refresh() self.inlined = True self.method(x, inline=True) self.assertEqual(unpack_lines(Output().get()), inlined_out) Output().refresh() arr = kArrInt([1, 2, 3, 4, 5]) @func def foo(loc: kArg(int, 5) = arr): with For(arr=loc) as seq: for item in seq: self.method(item) foo() # test for excluding from generation without # "calling" it @func def bar(var: int): self.method() bar(1, inline=True) generated_exec = KspObject.generate_all_executables() self.maxDiff = None self.assertEqual( unpack_lines(generated_exec), executables.format(method=Function.get_func_name(self.method), foo=Function.get_func_name(foo))) Output().refresh() @func def foobar(arg=kLoc(int)): self.method(arg) KSP.in_init(True) foobar() KSP.in_init(False) self.assertEqual(unpack_lines(Output().get()), invoked_in_init)
def wrapper(*a, inline=False, **kv): f_self, maped, outs = fargs.map(*a, *kv) odict = OrderedDict(**maped) args = list() for arg, val in odict.items(): args.append(val) args = _func_stack.push(*args) passed = dict() for arg, name in zip(args, odict): passed[name] = arg _f_obj.cash_args((args, passed)) if f_self: passed['self'] = f_self blocked = None if not inline and not KSP.in_init(): FuncCallsStack.put(_f_obj) FuncCallsStack.append(_f_obj._call_stack) _f_obj.called = True Output().put(f'call {_f_obj.name()}') FunctionCallback.open() if not Output().blocked: Output().blocked = True blocked = True out = f(**passed) if not inline and not KSP.in_init(): if _f_obj in _f_obj._call_stack: raise Exception(f'recursive call of {_f_obj} detected') FuncCallsStack.pop() FunctionCallback.close() if blocked: Output().blocked = False if outs: for name, val in outs.items(): maped[name] <<= passed[name] _func_stack.pop() return out
def close(self): super().close() KSP.in_init(False)
def open(self): super().open() KSP.in_init(True)
def _generate_code(self): print('generating code') refresh_all() KSP.set_compiled(True) KSP.in_init(True) if self._compact: IName.set_compact(True) # try: self.main() # except AttributeError: # raise RuntimeError( # '''all KSP objects attemped to appear in the code # has to be placed inside function, which is assigned # to script main attribute''') try: kLog() if kLog()._path: KSP.in_init(False) persistence_changed(kLog()._log_arr_pers) KSP.in_init(True) except TypeError as e: if str(e).startswith('__init__()'): pass else: raise e print('getting lines of regular operations') regular = Output().get() print('getting inits of declared objects') obj_init = KspObject.generate_all_inits() print('getting inits of NativeControls params') ctrls = KspNativeControlMeta.generate_init_code() print('getting lines of init callback, pasted as decorated funcs') init_cb = InitCallback.generate_body()[1:-1] KSP.in_init(False) print('generating other callbacks') cbs = Callback.get_all_bodies() print('generating functions bodies') funcs = list() for f in Function._functions.values(): funcs = f._generate_executable() break # funcs = KspObject.generate_all_executables() out = list() print('joining the code') localtime = time.asctime(time.localtime(time.time())) out.append('{ Compiled on %s }' % localtime) out.append('on init') if self._title: out.append(f'set_script_title("{self._title}")') out.extend(FuncStack()._init_lines) out.extend(obj_init) out.extend(ctrls) out.extend(regular) out.extend(init_cb) out.append('end on') out.extend(funcs) out.extend(cbs) print('wrapping long lines') out = self._check_length(out) KSP.set_compiled(False) print('sucsessfully generated') return out
def setUp(self): # super().setUp() self.int = 3 self.inlined = False KSP.in_init(False)