ObjectScript command line debugger: when invoking a script from the command line, you can use the --breakpoint (or -b) argument, followed by file and line number, to set one or more breakpoints.
ObjectScript build: it should now be possible to compile with JDK 1.5.0 (Java 5.0)
ObjectScript arrays: add pkg.array API with methods, such as newByteArray(len), to construct java arrays. Java arrays are not copied when passed to java code, so therefore if the java method writes into the array, the script code can see the result.
ObjectScript syntax: add qualified this syntax (ie. Foo.this). Also, add super which resolves to the overriden function, in the case that a derived class overrides a function from a base class. The super keyword can also resolve other overriden methods, as in super.bar().
ObjectScript running in eclipse environment: some tweaks to allow the script environment to resolve .os files provided by a client plugin.
ObjectScript bug fixes: fix a ConcurrentModificationException in the classloader, and an exception in script console if you try to CTRL-RTARROW past the end of the line.
ObjectScript running in eclipse environment: more fixes to deal with eclipse's classloaders. Now there is OscriptInterpreter.registerClassLoader(ClassLoader) API, which eclipse plugins can use to register a ClassLoader with ObjectScript which is able to load classes from that plugin.
ObjectScript type casting: introduced the syntax ((type)val) for casting, and now you can cast to ExactNumber, InexactNumber, int, float, short, char, or byte. For other types, this will simply assert the type, similar to the way instanceof tests the type.
ObjectScript running in eclipse environment: running ObjectScript in an eclipse environment has some problems because of the custom class loaders that eclipse uses, and the URL's that are returned from ClassLoader#getResource(). Add ResourceResolver interface which can be implemented to call an eclipse API to resolve the URL to a native URL.
Chimera bug fix: fix an error when opening editor help page
ObjectScript bug fixes: fix for constructs like var a = a
ObjectScript xcode: Xcode support
ObjectScript optimization: optimizations to function call
ObjectScript array methods: add some(fxn), every(fxn), map(fxn), filter(fxn) and forEach(fxn) methods.
Chimera file chooser, file browser: access to filesystem is now down from a worker thread. This prevents slow filesystems (ie. network drives) from causing the user interface to freeze.
ObjectScript jar files: add pkg.system.mountJarFile.
ObjectScript file systems: automatically detects when new drive letters are mapped under windows.
Chimera file chooser: file chooser and file browser now have different icons for jar-filessytems and other virtual filesystems
Chimera prompt and console: fix some accesses to swing components from the wrong thread. Fixes a talkback at startup (from progress bar) and a potential (but not actually observed) problem in console.
ObjectScript undefined: extend error checking to prevent return of undefined to also prevent throw of undefined
Chimera dialog bounds: fix a problem that could result in dialogs with zero width/height (which results in the dialog not being visible)
Chimera external plugins: work around what appears to be a bug in Sun's regular expression library for java v1.4.1_02, which resulted in an unhandled exception at startup.
ObjectScript editor: fix a problem that resulted in getting stuck in an infinite loop when trying to close a editor view without saving changes.
ObjectScript optimization: now compiler always generates the shared-member- index-table (SMIT), in preperation for some upcoming optimizations.
ObjectDevel filesystem: in some cases, pkg.fs.File#exists() could return incorrect results on windows.
ObjectDevel debugger: debugger toolbar should be visible when there is one or more breakpoint set, rather than when the debugger service is accessed. This fixes a potentially odd behavior when right clicking in the editor window (which would access the debugger service to determine if a breakpoint is set).
Chimera plugins: support for loading externally distributed plugins.
Chimera prompt: fix a problem with showing multiple info/error/warning messages from the AWT thread.. the second dialog would result in deadlock.
Chimera window manager: when using the "pager" plugin, windows were inadvertantly made visible after the dialog is created, but before the code that created the dialog called dialog.setVisible(true). This was resulting in some flicker, and other weird GUI behavior. This is fixed now.
ObjectScript reflection: add methods to Function to reflectively determine the number of args to a script function.
ObjectScript performance: change compiler to generate one class file per script file, rather than one per function. This reduces cache size and startup time.
ObjectDevel editor: fix for java 1.5 "recommendation" dialog appearing too many times.
ObjectDevel editor: popup menu can now be context-sensitive, via pkg.editor.Mode#addPopupMenuActionFxn().
Chimera file browser: popup menu can now be context-sensitive, via services["file browser"].addActionFxn().
Chimera file browser, file chooser: fix for problem which would cause expanded paths in the file browser or file chooser to collapse when a file in a parent directory is created/deleted.
Chimera file chooser: make behavior of enabling/disabling the open/save button work a bit better... now the button will update before the focus leaves the file-name text field (combo box). Also, the selected nodes in the tree stay in sync with the file-name field.
Chimera views: remember foreground view, and restore at next startup, so the selected view at exit is presevered when you restart.
Chimera views: when a view is brought to the foreground, such as when a new file is opened in the editor, if the containing dock (window) is minimized, it will be unminimized.
Chimera prompt: fix for empty error/warning/info dialogs
ObjectScript compiler: fix a bug that effects objects that implement callAsFunction, callAsConstructor, or callAsExtends.
ObjectDevel console tab completion: now tab completion can also resolve members of a variable/pkg/etc, which makes the console's tab completion much more useful.
ObjectDevel debugger: now uses same UI (pkg.debug.DebuggerPanel) for debug view (post mortum debug, ie. when you click on [debug] in the exception printed in the console) as it does for stepping through code. Also, both debugger views now use tab completion.
ObjectDevel editor: cursor positions are remembered when you close the document and/or exit the application.
Chimera file browser: now recent items list gets updated when editor or debugger opens files.
Chimera registry: use AWT thread to dispatch events, to remove a potential source of deadlock (and/or registry timeout errors).
ObjectScript string -> inexact number: fixed a bug in string parsing code that would make "-1234.0" convert to the inexact number 1234.0.
ObjectDevel editor file save: use an icon in the file name tab to indicate whether the file needs saving. Also, use a dialog to indicate file save errors, rather than a status line message that will disappear after a short time. Also, now the editor can treat saving a read only file as a "Save As" and display a file chooser.
ObjectDevel editor file save: improve performance saving to a slow network share by using a BufferedOutputStream.
ObjectDevel show api: if the file had syntax errors, this would cause a talkback. Now it catches the ParseException and displays an error dialog to the user.
Chimera recent items: fix some bugs with "Recent Items" menu, for example when multiple files with same name are opened.
Chimera file browser: fixed bug that would cause, in certain cases, the same mouse click event to expand a directory in the tree view, and open the file that ends up under the mouse pointer after the subtree is expanded.
Chimera file chooser: is a little more intuitive now to create a new file... no longer need "new file" button.
Misc trac: migrate to trac issue tracking system, and update web page.
ObjectScript function returns: setting the property oscript.undefined.return to "warning" will make returning an initialized variable print a warning, rather than throw an exception. Likewise setting oscript.undefined.assign to "warning" will make assigning undefined (ie. result of calling function with no return, etc) to a variable a warning instead of error. These two properties provide backwards compatibly for code written prior to v2.3. It is expected that these flags will be removed eventually.
Chimera open jar file: will automatically mount the file
ObjectScript bug fixes: fix a couple bugs introduced in v2.3.
ObjectScript function returns: fuctions that do not explicitly return a value now return undefined instead of null. This is to help prevent errors with trying to use the return value from a function that does not return a value. Also, explicitly returning undefined (for example, returning an uninitialized var) is prohibited.
ObjectScript memory optimizations: reduce load on garbage collector by minimizing temporary memory allocations.
ObjectScript case insensitive drive letters: a hack to work around a bug caused by drive letters being reported as capital letters by File#listRoots() but lowercase by File#getPath()
Chimera desktop mode: fix problem that resulted in the desktop pane opening with a height of zero.
ObjectScript cache: load/store optimizations to improve startup performance..
Chimera pkgify chimera-util: it used to be that chimera-util, which was created pre-packet system, would create a number of globals that were useful to the rest of the system. Now they've all been converted to use the package system.
ObjectScript line numbers: in certain cases the incorrect line number would be reported in an exception backtrace.
ObjectScript user guide: enhance osbook to allow osdoc generated API references to be generated and inserted into the HTML when osbook is run.
ObjectScript memberSet: now only returns public members, which can be accessed by getMember. Also, memberSet is now implemneted for script and java packages.
ObjectDevel console scrolling speed: speed up scrolling drastically, by not discarding the offscreen buffer when Console#doLayout(), if the new dimensions are the same as the current dimensions.
ObjectDevel java.lang: package is now mixed in by default.
Chimera deferred loading: new mechanism (pkg.registry.deferredRegister()) for deferring plugin loading (as in loading/compiling the src, rather than activating the plugin) until the first time a service provided by the plugin is accessed. This speeds up startup.
Chimera headless chimera: reorganize some of the bootstrap code to simplify setting up a chimera environment with not GUI.
Chimera recent items: Add a "Recent Items" menu, to easily access files that last few files that have been opened.
ObjectScript pkg.runtime: new package, with exec(), etc
ObjectScript function: new shorthand syntax for declaring an anonymous function: '{ blah blah } (note that is a single-quote, not a backtick) is the same as function(args...) { blah blah }
ObjectScript benchmarks: benchmarks updated to include BeanShell and JudoScript.
ObjectScript array: add new Array utility methods: sort, splice, slice, concat, join, push, pop, shift, unshift
ObjectScript compiler: fix some bugs related to running finally or releasing monitors when jumping out of a loop body (for example break/continue/return)
ObjectScript pkg.fs.children: (and oscript.fs.AbstractFileSystem.children) to return a Collection, rather than Iterator
ObjectDevel pkg.cl.grep: add a grep utility usable from the console. Type services["Object Browser"].browse(pkg.cl) in the console to see documentation. Also, this is used to implement the "search" option if you right-click on .os files or directories in the file browser.
ObjectDevel console: significant console improvements and bug fixes, including: history buffer is now persistent across restart, smarter history navigation (ie. up/down arrow will go to prev/ next line in history that starts with the same characters as the current line), fix ctrl-v/ctrl-c which would insert a v/c charcter into the current line, and last but not least: TAB COMPLETION!
ObjectDevel error handling: while it isn't possible to recover from a corrupt cache without user intervention, at least now the user sees an error message prompting him/her to remove the bad cache. A corrupted cache can happen if flushing the symbol table is interrupted (ie. by java VM exiting/crashing). It is not recoverable because we have no control over whether class files referencing entries in the corrupted symbol table have already been loaded, which means the only thing that can be done is System.exit(-1).
ObjectDevel debugger: breakpoint-view is now unclosable when there are breakpoints set. Also made things much more sane when the user tries to clear the last breakpoint while still stopped at a breakpoint, or while stepping through src code.
ObjectDevel debugger: click in gutter will toggle breakpoint at that line. Also, add "Clear All Breakpoints" and "Clear All Breakpoints in File" menu options.
ObjectDevel function tree: is now sorted, and (hopefully) always fully expands when opening a new document.
Chimera talkback: ignore java.lang.ThreadDeath, instead of treating it as an unhandled error.
Chimera file browser: change sort to put directories ahead of regular files, to make it easier to navigate the filesystem
Chimera toolbars: the tool-bar area is now much better behaved, wrapping toolbars to another row if there is not enough room left to display on the current row.
ObjectDevel debuger: new debugger UI, lets you select current stack- frame from the call-stack, and browse variables declared within scope.
Chimera bug fix: fix for a bug that was causing ArrayOutOfBoundExceptions in the AWT thread when views are renamed.
ObjectScript compiler: fix for a regression that was causing many nodes to not compile correctly and reverting to interpretation, causing things to run much slower than normal. If you are using 2.0 or later, it is recommended to update to 2.0.2.
Chimera window manager: fix for race condition that could result in an java.util.ConcurrentModificationException talkback
ObjectDevel macosx: fix for problem that caused "Can't create document" message to be printed to screen at startup. Also some tweaks to the Info.plist so that the version string will be encoded in the string displayed by the finder's get-info window.
ObjectDevel window manager: more sane initial window positions. Will properly take into account window insets (ie. dock, application-bar, etc) if you have java v1.4+.
ObjectScript filesystem: temporary files show up in tmp filesystem under /.tmp, and different temporary files will now no longer equals() another temporary file with the same name. (The latter causing problems opening backtrace.txt files from the talkback report view.)
ObjectScript misc: remove some debug printouts that got inadvertently in the v2.0 release. Also fix for some re-org changes that didn't get properly merged, that was causing a talkback from talkback (!!).
ObjectScript refactor: interpreter and compiler syntax-tree visitors to use "transformers" to handle some nodes in the syntax-tree by translating into a different but equivalent tree. Since there is both an interpreter and compiler, using translation allows us to implement new language features in terms of existing features without having to do major work in both the compiler and the interpreter. The existing ForLoopStatement is now translated into a while loop, which simplifies the current codebase.
ObjectScript grammar: Alternate for loop syntax: for( var o : set ) where set is some object that has an iterator() method, for example a java collection class, an array, etc.
ObjectScript grammar: add mixin keyword. Mixin "mixes in" an object into the current scope, causing all the members of that object to be members of the current scope, allowing for a couple of interesting uses. (1) as a java style "import", but which also works to import methods of a class or object, etc. and (2) as a way to get the benefits of multiple inheritance while avoiding some of the problems associated with multiple inheritance.
ObjectScript grammar: add regular expression support. ObjectScript's regular expressions literals can be declared with /regexp/flags syntax, and are instances of the RegExp type. The APIs of RegExp, and new methods added to String are modelled after JavaScript's regular expression system, and so should be familiar to users who have used JavaScript.
ObjectScript data: all types have a memberSet() method, which returns a java.util.Set view of the symols (names) of all the members of that object.
ObjectScript data: add reset() method to ScriptPackage objects, to flush the cache of members that have already been loaded. This is handy for development and debugging script code.
ObjectScript performance: revamp how stack traces are generated, and how the info used to generate a stack trace is tracked. This fixes many problems with the existing system, including completely wrong line number info in some cases (such as recursion, or where there is a finally block). Plus with a little careful optimization, it is actually lower overhead than the previous system.
ObjectScript performance: in certain cases, scope storage can be allocated from the stack, rather than the heap. It is only when a function object holds a reference to a scope, that the scope may need to be valid once program execution has left that scope. In other cases, storage can be allocated from the stack avoiding the need for allocating from the heap (aka new).
ObjectScript java integration: java package objects are more strict about member lookups. Before, if a member lookup is done on a package, and the member isn't a class, the member is assumed to be a package, and an new package object is created. This was due to limitations in the APIs provided by the java runtime environment, specifically that there is no way to conclusively determine if a given package exists without loading a class from that package, which is a bit of a catch-22. This limitation prevents one from mixing in a java package. The solution is to explicitly declare the existance or some package, using the new pkg.system.declareJavaPackage("java.package.name") interface in cases where the runtime environment might not yet know about that package (for example, if no classes from that package have yet been loaded, which would be common from java code loaded from script).
ObjectScript java integration: accessing java collection classes using array notation. A java object implementing java.util.Map can be accessed as an associative array with the key as the array index. (This works on both sides of an =.) Also, a java java.util.List can be accessed with a numerical index, ie. an index of n will access nth element in list.
ObjectScript java integration: java bean property access. A java object following the java bean convention of "getter" and "setter" methods called getFoo and (optionally) setFoo can have that property accessed as foo. (If there is no setter method, the property is read-only, and trying to write will throw an exception.)
This is in addition to the existing support for accessing public fields of a java object.
ObjectScript java integration: when converting a java object to a script object (such as a return value from java method), always convert a float or double to InexactNumber, rather than deciding based on the actual value. In the past, a float or double that was a whole number would be converted to an ExactNumber.
ObjectScript java integration: BSF support
ObjectScript compiler: fix bug in bytecode generation that would result in a finally block not being evaluated when return/ break/continue'ing from within try block.
ObjectDevel editor bookmarks: You can create bookmarks within the open editor frames, and cycle between them. A line with a bookmark is marked with a bookmark icon in the glyph-gutter. A bookmark will track position in the document, to compensate for text inserted/ removed from before the bookmark offset. The "toggle bookmark" (in toolbar, edit menu, etc) will create a bookmark if one does not already exist on the current line, or remove it if there is one.
ObjectDevel fix indentation rules: fix some bugs in the rule for deciding how much to indent in the presence of open/close parens ((, )).
Chimera registry browser: changed the interface slightly for numerical and string fields; button text changes from "Ok" to "Accept" to better describe what happens when button is pressed. Also, now the button is greyed out when the current text field contents reflects the value of the corresponding registry entry.
Chimera debug: main now keeps log of last 500 debug, error, warning and info messages. The talkback plugin now includes this in talkback and bug report messages to the developers, to help us debug problems.
Chimera core: Renaming views now works sanely when there is only a single view in the dock, which should make the help plugin better behaved (since it renames the current view every time it displays a new page)
Chimera Add "New File" button to FileChooser dialog.
ObjectScript Performance: update JavaClassWrapper to use SymbolTable instead of Hashtable. Also, re-write ScriptPackage to use SymbolTable, and be more efficient about accessing the file system (100x faster than old ScriptPackage!)
ObjectScript refactored script <-> bridge into JavaBridge... see updated embedding guide
ObjectScript a few minor bug fixes
ObjectDevel Add windows release file, using exe4jc to generate a windows .exe
ObjectDevel Packaging changes: omit ObjectDevel.app from .tar.gz, include web page (including documentation) with .dmg and .zip.
ObjectDevel Fix webstart problem, caused by error signing a .jar file.
Chimera make main-window sizing a bit more sane when switching from desktop to window mode
ObjectScript XML-RPC support, using the Apache XML-RPC library. The XmlRpcHandler wraps a script object, to allow a script object to be served using Apache's XmlRpcServer or WebServer. And XmlRpcClient allows script code to transparently access services served by XML-RPC. See the XML-RPC Section in the ObjectScript User's Guide.
ObjectScript Make the .cache a bit more robust, by always flushing the symbol table after a node evaluator is created, but before the node evaluator is flushed. This prevents a situation where a node evaluator is saved, but uses symbols that have not been saved in the symbol table.
ObjectScript Bug fix in compiler for "finally" blocks, fixes problem where in some circumstances the the finally block would not be executed, and the exception would not be re-throw.
ObjectDevel "New" -> "Script Application" (from menubar) will create a script application embedded in a .jar file. You can add any source files to the application (mounted under /jar) via the file browser. The jar file uses oscript.MainRunner as the main-class attribute in the manifest, so it is a runnable jar file.
Chimera Change "window" mode to use a JWindow instead of JFrame for the main window (ie. the one the toolbars and menubar are displayed in). This has the advantage that the main window is always in focus, which makes it behave more like "desktop" mode in that the user doesn't have to switch focus to a different window to, for example, click on a toolbar button. Depending how users like this behavior, it might be made into a different mode so the user could select whichever behavior they prefer. Or if everyone likes it, I'll just leave it as-is.
Chimera Chimera Overview/Developer's Guide
Chimera Bug fixes. Fixed a ConcurrentModificationException that could happen when closing a window. Also, fixed a problem in the prompt service which caused the progress windows to not be completely removed.
ObjectScript update to latest version of BCEL (v5.1)
ObjectScript fix problem with try/catch/finally not being compiled correctly
ObjectScript parse now detects break or continue that are not within a loop body, and flags a parse error
ObjectScript Use LocalFileSystem for cache. Instead of creating a file cache.jar for the cache, a directory .cache is created. This results in faster startup and shutdown times as the cache gets larger.
Chimera fix for repaint problem when programatically adding multiple views to a dock
Chimera wizard framework, to make it easy to create wizards to collect data from the user over a sequence of screens
Chimera (File Browser) fix for a problem which results in file browser view's that have a non-"/" root not updating in response to changes to the filesystem
ObjectDevel Visual GUI Layout wizard, which uses the JUI tool to allow the user to build panels using a WYSIWYG GUI builder
ObjectDevel 'New Plugin' wizard, to simplify creation of new plug-ins.
ObjectDevel (Script Console) Ctrl-C/Ctrl-V (or for macs, Cmd-C/Cmd-V) copy/paste key-bindings for console window. Interrupt, which used to be mapped to Ctrl-C is now mapped to Ctrl-. (or Cmd-.).
ObjectDevel (Editor) fix for a StringIndexOutOfBounds exception which was introduced by some c-mode ENTER handling optimizations that went into v1.3
Chimera Better handling of exceptions thrown during startup, so WebStart or ObjectDevel.app users at least see an error message, instead of seeing the application mysteriously quit. Problem with errors during startup is that the normal error handling mechanism (talkback) isn't available yet, so instead we show a JOptionPane.
Chimera add File -> Close menu option, to close the view that has focus. Also bound menu item to Ctrl-W (or Cmd-W for MacOSX)
Chimera if there are multiple error/warning/info/progress dialogs displayed, they are coelesced into a single dialog on screen. This reduces user interface clutter.
Chimera work around for issue with desktop-mode which caused windows whose bounds are restored (from config.jar) to not be painted until they are moved or resized.
Chimera (WindowManager) FileChooser displays same popup menu as file browser window. Uses "file browser" service to construct popup based on file the popup is shown for. This can be used to create new file or directory from the FileChooser dialog.
ObjectScript fix for bug where functions that just take a single, variable length parameter, when called with no args, would result in any reference to that parameter throwing a NoSuchMemberException:
function example(args...)
  writeln("args: " + args);
example(1,2,3);    // OK
example();         // throws NoSuchMemberException
ObjectScript fix for potential deadlock when loading a java class, if static code in that class calls (indirectly) script code which access java class
ObjectDevel, Chimera support for accelerator keys in menubar
ObjectDevel, Chimera better MacOSX integration. Icon for finder to use for .os files, and double clicking on an .os file will open it in the Editor. Also, about/preferences/quit menubar entries are correctly located under the application menu to conform to MacOSX user interface guidelines.
webpage lively up download page, add release notes, etc.
ObjectScript if the first two characters of a script file are "#!", then the rest of the characters until the end of line are ignored. This allows script src files be used as unix shell scripts.
ObjectScript add pkg.system and pkg.fs APIs, which are just wrappers for internal APIs of the scripting engine. It is recommended that wherever possible, this APIs be used instead of directly using the internal APIs that they wrap, to ensure that changes in implementation details of the scripting engine don't cause your code to break.
ObjectScript Proxy type. By subclassing Proxy and implementing a resolve method, you can override how members of an object are resolved. See Proxy Objects.
Chimera (Registry Browser) fix for bug where tree structure updates would not be recognized if the browser is shown with a root path other than "/"
Chimera (FileChooser)
  • no longer forces directories to be selected by filter
  • enables/disables the open/save button based on selected file matching filter
  • support selecting files by double clicking... double click on directory still expands directory
Chimera support for icons in menubar
ObjectDevel .os to .html syntax colorifier; osbook, a tool to generate the user's guide .html files from .xml
ObjectDevel (Editor) revamped ENTER key binding to deal correctly with open and close parens, and also for better performance
ObjectDevel script-path window for editing script-path. The script-path controls where the scripting engine looks to find script src files.
ObjectDevel support for building bundled .app for MacOSX (if anyone wants to help with a .exe bundler for windows, I would appreciate it)

Last modified: Thu Oct 20 16:02:56 PDT 2005