home *** CD-ROM | disk | FTP | other *** search
- /**
- Run a command in its own in its own private global namespace and interpeter
- context. (kind of like the unix "chroot" for the namespace)
- The root bsh system object is extended (with the extend() command) and
- made visible here, so that system info is effectively inherited.
- Because the root bsh object is extended it is effectively read / copy
- on write... e.g. you can change directories in the child context, do
- imports, etc. and it will not affect the calling context.
- <p>
-
- run() is like source() except that it runs the command in a new,
- subordinate and prune()'d namespace. So it's like "running" a command
- instead of "sourcing" it. Returns the object context in which the command
- was run.
- <p>
-
- Returns the context so that you can gather results.
- <p>
- Paramameter runArgument an argument passed to the child context under the
- name runArgument. e.g. you might pass in the calling This context
- from which to draw variables, etc.
- <p>
-
- @return Returns the context so that you can gather results.
- @param runArgument an argument passed to the child context under the
- name runArgument. e.g. you might pass in the calling This context
- from which to draw variables, etc.
- */
-
- bsh.help.run= "usage: Thread run( filename )";
-
- run( String filename, Object runArgument )
- {
- // Our local namespace is going to be the new root (global)
- // make local copies of the system stuff.
- //
- // Extend the root system object
- // this is problematic... probably need more here...
- bsh=extend(global.bsh);
- bsh.help=extend(bsh.help);
-
- // cut us off... make us the root (global) namespace for this command
- this.namespace.prune();
- this.interpreter.source( filename, this.namespace );
- return this;
- }
-
- run( String filename ) {
- run( filename, null );
- }
-