From: <bi...@us...> - 2008-09-24 20:11:01
|
Revision: 3389 http://oorexx.svn.sourceforge.net/oorexx/?rev=3389&view=rev Author: bigrixx Date: 2008-09-24 20:10:47 +0000 (Wed, 24 Sep 2008) Log Message: ----------- [ 2126990 ] Add a means to dynamically load an external library. Modified Paths: -------------- main/trunk/interpreter/classes/PackageClass.cpp main/trunk/interpreter/classes/PackageClass.hpp main/trunk/interpreter/execution/CPPCode.cpp main/trunk/interpreter/memory/Setup.cpp Modified: main/trunk/interpreter/classes/PackageClass.cpp =================================================================== --- main/trunk/interpreter/classes/PackageClass.cpp 2008-09-24 18:58:16 UTC (rev 3388) +++ main/trunk/interpreter/classes/PackageClass.cpp 2008-09-24 20:10:47 UTC (rev 3389) @@ -503,6 +503,7 @@ return source->findRoutine(name); } + /** * Resolve a routine in the context of a package. * @@ -579,3 +580,21 @@ package->sendMessage(OREF_INIT, init_args, initCount); return package; /* return the new method */ } + + +/** + * Dynamically load a library package + * + * @param name The required package name. + * + * @return True if the package was loaded and resolved, false if + * the package could not be loaded. + */ +RexxObject *PackageClass::loadLibrary(RexxString *name) +{ + name = stringArgument(name, "name"); + // have we already loaded this package? + // may need to bootstrap it up first. + LibraryPackage *package = PackageManager::loadLibrary(name); + return package == NULL ? TheFalseObject : TheTrueObject; +} Modified: main/trunk/interpreter/classes/PackageClass.hpp =================================================================== --- main/trunk/interpreter/classes/PackageClass.hpp 2008-09-24 18:58:16 UTC (rev 3388) +++ main/trunk/interpreter/classes/PackageClass.hpp 2008-09-24 20:10:47 UTC (rev 3389) @@ -85,6 +85,7 @@ RexxObject *addPublicRoutine(RexxString *name, RoutineClass *routine); RexxObject *addClass(RexxString *name, RexxClass *clazz); RexxObject *addPublicClass(RexxString *name, RexxClass *clazz); + RexxObject *loadLibrary(RexxString *name); PackageClass *newRexx(RexxObject **init_args, size_t argCount); Modified: main/trunk/interpreter/execution/CPPCode.cpp =================================================================== --- main/trunk/interpreter/execution/CPPCode.cpp 2008-09-24 18:58:16 UTC (rev 3388) +++ main/trunk/interpreter/execution/CPPCode.cpp 2008-09-24 20:10:47 UTC (rev 3389) @@ -647,6 +647,7 @@ CPPM(PackageClass::addClass), CPPM(PackageClass::addPublicClass), CPPM(PackageClass::getName), +CPPM(PackageClass::loadLibrary), CPPM(PackageClass::newRexx), Modified: main/trunk/interpreter/memory/Setup.cpp =================================================================== --- main/trunk/interpreter/memory/Setup.cpp 2008-09-24 18:58:16 UTC (rev 3388) +++ main/trunk/interpreter/memory/Setup.cpp 2008-09-24 20:10:47 UTC (rev 3389) @@ -606,6 +606,7 @@ defineKernelMethod(CHAR_ADDCLASS ,ThePackageBehaviour, CPPM(PackageClass::addClass), 2); defineKernelMethod(CHAR_ADDPUBLICCLASS ,ThePackageBehaviour, CPPM(PackageClass::addPublicClass), 2); defineKernelMethod(CHAR_NAME ,ThePackageBehaviour, CPPM(PackageClass::getName), 0); + defineKernelMethod("LOADLIBRARY" ,ThePackageBehaviour, CPPM(PackageClass::loadLibrary), 1); /* set the scope of the methods to */ /* this classes oref */ ThePackageBehaviour->setMethodDictionaryScope(ThePackageClass); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |