def testPackageManager_in_package(self): # PackageManager.in_package changes PackageManager.current_package to package_designator. # PackageManager.current_package is chenged to COMMON-LISP-USER. PackageManager.in_package(package_designator=Symbol('COMMON-LISP-USER')) # Check PackageManager.current_package and *PACKAGE* variable in COMMON-LISP package. self.assertTrue(PackageManager.current_package is PackageManager.package_container['COMMON-LISP-USER']) self.assertTrue(PackageManager.package_container['COMMON-LISP'].env['VARIABLE']['*PACKAGE*'] is PackageManager.current_package) # PackageManager.current_package is chenged to COMMON-LISP as default for other tests. PackageManager.in_package(package_designator=Symbol('COMMON-LISP'))
def __call__(self, forms, var_env, func_env, macro_env): """Behavior of InPackageSystemFunction. """ args = self.eval_forms(forms, var_env, func_env, macro_env) return PackageManager.in_package(package_designator=args.car)
def repl(cls, prompt='=>', inport=InPort(sys.stdin), out=sys.stdout, zen=True): PackageManager.in_package(String("COMMON-LISP-USER")) while True: try: if prompt is not None: # Set prompt. try: prompt = PackageManager.current_package.package_nicknames[ 0] + '=>' except IndexError: prompt = PackageManager.current_package.package_name + '=>' # Wait input. print(prompt, end=' ', file=out, flush=True) # Parse inport. forms = Parser.parse(inport) # Check eof. if forms is Symbol('#<EOF-OJBECT>'): return # Expand token. forms = Expander.expand( forms, var_env=PackageManager.current_package.env['VARIABLE'], func_env=PackageManager.current_package.env['FUNCTION'], macro_env=PackageManager.current_package.env['MACRO']) # Evaluate expression. retval = Evaluator.eval( forms, var_env=PackageManager.current_package.env['VARIABLE'], func_env=PackageManager.current_package.env['FUNCTION'], macro_env=PackageManager.current_package.env['MACRO']) # Print return value. if out is not None: print(retval, end="\n\n", file=out, flush=True) except Interrupt: if zen: # Print the zen of python at random. print(random.choices(cls.the_zen_of_python)[0], end="\n\n", file=out, flush=True) return except Exception as e: print( "------------------------------------------------------------" ) print("{}: {}".format(type(e).__name__, e), end="\n\n", file=out, flush=True)