def testPackageManager_import(self): # PackageManager.import_ imports symbol to symbol container of the specific package. # The package_name argument is omitted, # the method imports symbol to PackageManager.current_package.symbol_container. # IMPORT is interned to PakageManager.package_container['COMMON-LISP-USER']. PackageManager.intern(symbol_designator=String('IMPORT'), package_designator=String('COMMON-LISP-USER')) # Add value to the variable space. PackageManager.package_container['COMMON-LISP-USER'].env['VARIABLE']['IMPORT'] = String('VALUE') PackageManager.import_(symbol_designator=Symbol('COMMON-LISP-USER::IMPORT')) symbol, status = PackageManager.find_symbol(symbol_designator=String('IMPORT')) self.assertTrue(symbol is Symbol('IMPORT')) self.assertTrue(status is Keyword(':INTERNAL')) self.assertTrue(PackageManager.current_package.env['VARIABLE']['IMPORT'] is String('VALUE')) # The package_designator argument is supplied to the specified package. # IMPORT-WITH-PACKAGE is interned to COMMON-LISP package. PackageManager.intern(symbol_designator=String('IMPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP')) # Add value to the variable space. PackageManager.package_container['COMMON-LISP'].env['VARIABLE']['IMPORT-WITH-PACKAGE'] = String('VALUE') PackageManager.import_(symbol_designator=Symbol('COMMON-LISP::IMPORT-WITH-PACKAGE'), package_designator=Symbol('COMMON-LISP-USER')) symbol, status = PackageManager.find_symbol(symbol_designator=String('IMPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Symbol('IMPORT-WITH-PACKAGE')) self.assertTrue(status is Keyword(':INTERNAL')) self.assertTrue(PackageManager.package_container['COMMON-LISP-USER'].env['VARIABLE']['IMPORT-WITH-PACKAGE'] is String('VALUE'))
def testPackageManager_find_symbol(self): # PackageManager.find_symbol returns symbol represented by symbol_designator and status. # The package_designator argument is omitted, # PackageManager.current_package.symbol_container is checked. # FIND-SYMBOL is interned to PackageManager.current_package in advance. PackageManager.intern(symbol_designator=String('FIND-SYMBOL')) symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL')) self.assertTrue(symbol is Symbol('FIND-SYMBOL')) self.assertTrue(status, Keyword(':INTERNAL')) # If symbol_designator dose not exist in PackageManager.current_package, # it must return Null object as symbol and status. symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-NOT-EXIST')) self.assertTrue(symbol is Null()) self.assertTrue(status is Null()) # The package_designator argument is supplied to the specified package. # FIND-SYMBOL-WITH-PACKAGE is interned to COMMON-LISP-USER package in advance. PackageManager.intern(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Symbol('FIND-SYMBOL-WITH-PACKAGE')) self.assertTrue(status is Keyword(':INTERNAL')) # If symbol_designator dose not exist in the specified package, # it must return Null object as symbol and status. symbol, status = PackageManager.find_symbol(symbol_designator=String('FIND-SYMBOL-WITH-PACKAGE-NOT-EXIST'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Null()) self.assertTrue(status is Null())
def __call__(self, forms, var_env, func_env, macro_env): """Behavior of FindSymbolSystemFunction. """ args = self.eval_forms(forms, var_env, func_env, macro_env) symbol_designator = args.car package_designator = args.cdr.car if package_designator is Null(): return PackageManager.find_symbol(symbol_designator=symbol_designator) else: return PackageManager.find_symbol(symbol_designator=symbol_designator, package_designator=package_designator)
def testPackageManager_use_package(self): # PackageManager.use_package inherited symbol in package_designator_to_use. # The package_designator argument is omitted, # symbol is inherited, and interned to PackageManager.current_package.symbol_container. # USE-PACKAGE-INTERNAL and USE-PACKAGE-EXTERNAL are interned to COMMON-LISP-USER. PackageManager.intern(symbol_designator=String('USE-PACKAGE-INTERNAL'), package_designator=String('COMMON-LISP-USER')) PackageManager.intern(symbol_designator=String('USE-PACKAGE-EXTERNAL'), package_designator=String('COMMON-LISP-USER')) # Only status of USE-PACKAGE-EXTERNAL is changed to :EXTERNAL. PackageManager.export(symbol_designator=Symbol('USE-PACKAGE-EXTERNAL'), package_designator=Symbol('COMMON-LISP-USER')) PackageManager.use_package(package_designator_to_use=Symbol('COMMON-LISP-USER')) # When status is :EXTERNAL, the symbol is inherited. symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-EXTERNAL')) self.assertTrue(symbol is Symbol('USE-PACKAGE-EXTERNAL')) self.assertTrue(status is Keyword(':INHERITED')) # When statis is not :EXTERNAL, the symbol is not inherited. symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-INTERNAL')) self.assertTrue(symbol is Null()) self.assertTrue(status is Null()) # The package_designator argument is supplied to the specified package. # USE-PACKAGE-INTERNAL-WITH-PACKAGE and USE-PACKAGE-EXTERNAL-WITH-PACKAGE are interned to COMMON-LISP. PackageManager.intern(String('USE-PACKAGE-INTERNAL-WITH-PACKAGE')) PackageManager.intern(String('USE-PACKAGE-EXTERNAL-WITH-PACKAGE')) # Only status of USE-PACKAGE-EXTERNAL-WITH-PACKAGE is changed to :EXTERNAL. PackageManager.export(Symbol('USE-PACKAGE-EXTERNAL-WITH-PACKAGE')) PackageManager.use_package(package_designator_to_use=Symbol('COMMON-LISP'), package_designator=Symbol('COMMON-LISP-USER')) # When status is :EXTERNAL, the symbol is inherited. symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-EXTERNAL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Symbol('USE-PACKAGE-EXTERNAL-WITH-PACKAGE')) self.assertTrue(status is Keyword(':INHERITED')) # When statis is not :EXTERNAL, the symbol is not inherited. symbol, status = PackageManager.find_symbol(symbol_designator=String('USE-PACKAGE-INTERNAL-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Null()) self.assertTrue(status is Null())
def testPackageManager_export(self): # PackageManager.export changes symbol status in symbol container to :EXTERNAL. # The package_designator argument is omitted, # status in PackageManager.current_package.symbol_container is changed. # EXPORT is interned to PackageManager.current_package in advance. PackageManager.intern(symbol_designator=String('EXPORT')) PackageManager.export(symbol_designator=Symbol('EXPORT')) symbol, status = PackageManager.find_symbol(symbol_designator=String('EXPORT')) self.assertTrue(symbol is Symbol('EXPORT')) self.assertTrue(status is Keyword(':EXTERNAL')) # The package_designator argument is supplied to the specified package. # EXPORT-WITH-PACKAGE is interned to COMMON-LISP-USER pacakge in advance. PackageManager.intern(symbol_designator=String('EXPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) PackageManager.export(symbol_designator=Symbol('EXPORT-WITH-PACKAGE'), package_designator=Symbol('COMMON-LISP-USER')) symbol, status = PackageManager.find_symbol(symbol_designator=String('EXPORT-WITH-PACKAGE'), package_designator=String('COMMON-LISP-USER')) self.assertTrue(symbol is Symbol('EXPORT-WITH-PACKAGE')) self.assertTrue(status is Keyword(':EXTERNAL'))