Exemple #1
0
    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'))
Exemple #2
0
 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)
Exemple #3
0
    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)