Historical Ejscript Change Log
The change log is now provided on GitHub at: GitHub Ejscript Releases.
Brief Ejscript change log of the the major features and changes for each release.
Note to security researchers:
Please do not mine this list and create security advisories. Please see the Ejscript Issue Database for the official product issue list and for comprehensive CVE dispositions.
Changes in 2.4.1
Fixes
- Fix Path.files with dot-dot in the argument. [issue 66].
Changes in 2.4.0
Fixes
- Fix parsing bad package.json files with missing commas [issue 63].
Changes in 2.3.5
Minor Features
- Convert to use MakeMe instead of Bit to build.
Changes in 2.3.4
Minor Features
- Update MPR and HTTP packs to latest versions [issue 61].
- Sign installation packages [issue 59].
Fixes
- Improved shutdown support. [issue 56].
- Fix package.json title [issue 57].
- Better support for SemVer, remove build numbers [issue 58].
- Fix MPR handling of time zone warping [issue 53].
Changes in 2.3.3
Minor Features
- Add support for multi-line strings using back-tick. E.g. `string` [issue 41].
- Add support for Pak packages. Remove ejs.jem in favor of Pak. Use SemVer for versioning. [issue 50].
- Add App.getpass to read a password from the console [issue 51].
- Add Path.trimComponents [issue 52].
- Add App.home and add ~/.ejs to the module search path. [issue 54].
Fixes
- ejs.unix cp() command. Was incorrectly handling destination paths when options.tree == true. [issue 42].
- Added Add Path.trimDirs to trim directory components. [issue 43].
- Parse bad literal causes compiler crash. [issue 44].
- Fix Http and WebSocket retries to different hosts. Was setting Host header incorrectl [issue 45].
- Fix RegExp.exec with bad start argument. [issue 46].
- ejs.tar for handling directories and hidden headers. [issue 47].
- Fix name of Zlib uncompress destination filename. [issue 48].
- GC when loading modules fails to retain module file. [issue 49].
- Iterating over arrays and object where elements are deleted in the loop body. [issue 53].
Changes in 2.3.2
Minor Features
-
Add support for Ecmascript6 functions in object literals.
E.g. o = { fun() { print("Hello"); }} [issue 40].
Changes in 2.3.1
Minor Features
- Add MPR palloc/pfree APIs to allocate and free permanent memory [issue 28]
- Update API stability classifications [issue 29]
- Update SQLite to 3.7.15.1 [issue 30]
- Improve conditional makefiles to support SSL and SQLite [issue 31]
- Add make deploy [issue 32]
- Add static makefiles and projects [issue 33]
Fixes
- Base directory includes inside ejs.template. [issue 27]
- Define default stack size for VxWorks [issue 34]
- Fix make/bit install for non-root installations [issue 35]
- Add "public" to cookies over SSL for firefox [issue 36]
- Fix Path.relative for paths with a common basename [issue 37]
- Fix RegExp back quoting. Add JSON option regexp to emit native RegExp literals. [issue 38]
Changes in 2.3.0
Minor Features
- Fixed listening on Windows 64 with IPv6 and IPv4 on a single socket. [issue 12]
- Speed up Tar.extract [issue 13]
- Add prototype support for the EST SSL stack. Enabled by default. [issue 18]
- Removed Bit as it is now a stand-alone product [issue 21]
- Added base64() [issue 23]
Fixes
- Fix JSON encoding and parsing of regular expressions [issue 14]
- The mpr.h header has been split into a cross platform operating system layer called bitos.h. The mpr.h header includes this, so there should be no API impact. [issue 19]
- Fix generated makefiles determining the system CPU architecture [issue 15]
- Remove compiler switch -mtune when not required [issue 16]
- Bit support for static projects via configure --static, including generating IDE projects [issue 20]
- Optimize Array.join [issue 25]
- Fix Cmd.write for large data blocks. [issue 26]
- Renamed ejs.mail mail() to sendmail() [issue 24]
- String.replace with multi-line replacements [issue 22]
Changes in 2.2.0
Minor Features
- Added ejs.mail module with basic mail() API [issue 3]
- Added bit --prefix, to set installation path prefixes [issue 10]
- Make bit listen to CFLAGS etc on all runs. Configure will save in platform bit file. [issue 11]
Fixes
- Generated Xcode project scripts were missing /usr/local/bin [issue 2]
- Bit now creates dependencies for nested header includes [issue 4]
- JSON deserializing keys with spaces [issue 5]
- Path.makeDir(attributes) now sets attributes even if the directory already exists. [issue 6]
- Bit --keep install now preserves files under */pkg [issue 7]
- Update Http to listen on both IPv6 and IPv4. [issue 8]
- Fix Logger.level, was asserting [issue 9]
Changes in 2.1.0
Minor Features
- Added static build support (configure --static)
- Changed default for type annotations to not allow nulls. Use Type? to permit nulls
Fixes
- Change xcode projects output directory to be unique
- Xcode debug builds to include BIT_DEBUG
- Http: HTTP/1.0 connection management
- Http: PUT method response to include Etag and Location
- Http: Consuming body of failed requests to preserve keep-alive
- Http: Remove Content-Length in 304 (NotModified) responses
- Remove *def files on windows. Use PUBLIC export decoration
- Rename T() to UT() to avoid winnt.h clash
- Fix base64 encoding for blocks
Changes in 2.0.0
Major Features
- Full async API for Streams, Http, HttpServer and Socket
- Decouple MVC, ORM and web server hosting into separate packages
- Enhanced web framework with HttpServer class and URL routing
- Support for RESTful and unobtrusive JavaScript client-side techniques
- Full ECMA 262 ES5 Object methods
- Type validation and checking. Currently type annotations are not validated in expressions and type casting is done at runtime. Convert this to do type validation at compile time with cast injection into the byte code stream.
- Numerous class library improvements
- Faster performance in general and 2-5x faster web applications
- Fast, concurrent garbage collector
- Application configuration via ejsrc files
- Extensive unit tests
- Command line argument parsing class
- Caching module and API
- Bit Build and Configuration tool
Changes in 1.1.4
Key Fixes
- Return in try blocks
- Idle threads consuming CPU after long delay
- Prune workers not terminating idle threads
Changes in 1.1.3
Key Fixes
- Fixes for building for VxWorks on linux
- Add SSL_OP_NO_TICKET and SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION to force session renegotiation.
- Enable no free threads message to continually be emitted
Changes in 1.1.2
Key Fixes
- Fix parsing XML documents with zero length attributes.
- Initialize blank ejs byte code areas
Changes in 1.1.1
Key Fixes
- Fixed Http HEAD requests
- Support for huge files > 2GB
Changes in 1.1.0
Key Fixes
- Update date documentation
- Array.slice with negative indices
- Formatted printing of floating point numbers
- Date/Time calculations for pre 1970 dates
- Cygwin Math.pow Infinity results
- Allow JSON encoded arrays in Http form data
- Bad timezone on HTTP headers in certain locales
- Exception stack management
- Memory fragmentation
- Http not-modified calculations
- Parsing XML characters > 127
- GC issue with new Function()
- Update tool search support for Windows 7 and VS 10.X
- View checkbox
- Array.concat
- Memory exception assert
- Building with configure --disable-all
- Add missing msvcrt version 10 DLL to windows package
- Path.extension() and extension() for directories with embedded periods
- Escape(quote)
- Compiler spin with }; construct
- Ejscript: XSS issue with embedded script in URLs - thanks Gjoko Krstic at Zero Science Lab
API Changes
- None
Changes in 1.0.3
Minor Features
- Solaris and FreeBSD ports
- Http request and response body tracing
Key Fixes
- Freeing memory on exiting ejs and ejsc. (Fix to mprFree(mpr))
- Path.mimeTypes
- for unicode constants in strings
- Date fixes for dates outside 2038 and prior to 1970
- PPC encoding of floating point numbers in module files
- linking in uClinux
- Documentation updates
- Debian package improvements
API Changes
- None
Changes in 1.0.2
Minor Features
- Solaris and FreeBSD ports
- Http request and response body tracing
Key Fixes
- Freeing memory on exiting ejs and ejsc. (Fix to mprFree(mpr))
- Path.mimeTypes
- for unicode constants in strings
- Date fixes for dates outside 2038 and prior to 1970
- PPC encoding of floating point numbers in module files
- linking in uClinux
- Documentation updates
- Debian package improvements
API Changes
- None
Changes in 1.0.1
Key Fixes
- Math.random()
- String.caseCompare
- WebServer IPv6 addresses
- WebServer timedout requests
- Windows delimiters in Path class
- Build fixes for va_list
- Documentation corrections
- Fix for loading modules on ARM systems
API Changes
- None
Changes in 1.0.0
Fixes
- TextStream.read when last line has no line terminator
- Module loading when module filenames have a "."
- Http with credentials
- Web page reload when using System.cmd for command execution
- Optimize make install and make package when used with svn
- Path.find was not handling nested directories correctly
- XML node update issues
- Number.toString() for typed variable declarations
- Enhanced Math, Number and Date classes
- Improved documentation
- Improved configuration and searching for build components
- XML.toJSON()
- trailing comma in JSON (IE fix)
- diagnostics for configure with verbose mode
- JSON parsing and encoding
- html() escaping
- parsing XML literals
- ByteArray.copyin with negative count
- Config properties to be boolean
API Changes
- Path.extension changed to trim "."
Changes in 1.0.0 Beta 3
Fixes
- Dependency checking when building
- Iteration in for statements inside Constructors
- Strict equality testing with null and undefined
Changes in 1.0.0 Beta 2
Major New Features
- Versioned modules. Added versions to module and require language directives. Loader will load required versions and intelligently load the most recent qualifying module.
- Support side-by-side loading of multiple versions of the same module.
- Support Web Workers. The Worker class can be used to create new interpreter instances in dedicated worker threads..
- New unit test suite manager (utest). Expanded unit tests.
Minor Features
- Module files have checksums. Loading stale modules will throw an error
- Optimize code generation
- Added eval() function
- Auto rebuild application if a new Ejscript version is installed
- Auto rebuild App.mod if App.src changes
Fixes
- library and module search paths and module resolution
- Improved ECMA standard compliance
- Error.stack property
- Hybrid type slot binding
- configure --disable-all
- JSON serialization and deserialization issues
- Http.upload with non-simple paths
- Remove namespace decorations from JSON strings
- Building with ./configure --static
- Path + String operations. Now casts Path to String
- Building ./configure --disable-db
- Compiling with ejsweb compile all. Was missing views. Thanks Damien.
- Optimize memory footprint.
- Partial support execution from ROM (not all features operational).
- some parser asserts
API Changes
- Added Path.find
- Modified Path.remove to remove empty directories
- Removed Path.removeDir to remove directories
- Added Path.removeAll to remove directories with contents
- Added find() in ejs.sys
- Change property Record.numRows to method Record.getNumRows()
- Change property Record.columnNames to method Record.getColumnNames()
- Change property Record.db to method Record.getDb()
- Change property Record.keyName to method Record.getKeyName()
- Change property Record.tableName to method Record.getTableName()
Changes in 1.0.0 Beta 1
Major New Features
- File Upload
- Faster Generational Garbage Collector
- Optimized memory footprint
- Multi-threaded support. Multiple interpreters can execute in their own thread.
- Shared master interpreter across multiples thread.
- Enhanced Http class supporting forms, file upload, HTTP chunking and SSL.
- Socket class.
- Cygwin platform support.
Minor Features
- Enhanced namespace language support
- Fully relative URLs to support running behind a reverse proxy
- Ability to import the Ejscript runtime and snapshot for each application
- Web server updates
- Add EjsPath for setting module search path in Appweb.conf
- Add --search to ejsweb for setting module search path
- Added memory redline callback handling and Memory exceptions
- Optimized memory usage, reduced footprint
- Enhanced module search path controls.
- New unit test framework "utest".
Fixes
- SSL protocol support for the Http class
- Support for unchecked checkboxes
- Module search path handling
- Nested try/catch inside functions
- Use of iterations inside finally blocks
- TextStream dropping bytes
- File upload
- Chunked transfer encoding for input and output
- FileUploadSize
- Http.secure property
- GC issue for collecting frames
- Ejsweb error reporting
- Issue with using default args before a rest arg
- Call expressions split over multiple lines
- JSON encoding
- SQL quoting
- Compiler warning fixes
- Regular expression doc
- TextStream.ReadLines on windows and other platforms
- TextStream reader
- File.size for open files
API Changes
- Modified Native APIs
- mprStart. Removed flags parameter
- Http and Socket classes have new methods and signatures
- Record class supports hasOne, hasMany. The find and findAll methods have new and better defined options
- Stream.read() API definition. Offsets are now by default 0.
Changes in 0.9.9
Major Features
- VxWorks support
- Windows CE support
- Cross compilation support
- Enhanced File I/O and Path support
- Add support for ECMA-262 prototype based inheritance
- Improve compliance with ECMA libraries
- Enhance web MVC framework. Database ORM now supports associations.
- Enhance web dynamic table control. Now supports column sorting and dynamic data updates.
Minor Features
- Added ejs -f -s switches for compatibility with SpiderMonkey shell
- Added App.outputStream, errorStream, inputStream
- Added input(), output() global methods
- Enhanced print() to serialize objects
- Added stable, dev and default branches to Mercurial repository
- Windows CE port
- Support for MAC 10.4 and MAC PPC targets
- Support for OpenWrt platform
- Simplified build output with make TRACE=1 verbose option
- Added literal getters and setters
- Optimize blocks by adding hoisting of block scope objects
- Improved web framework app style sheet theme support
- Added generation of src/App.es for web frameworks
- Enhanced jQuery support for Ajax dynamic table updating
- Support degraded operation if client's browser disables client-side JavaScript
Fixes
- Fixed "while(assignmentExpression)"
- Fixed toString and toJSON overriding
- Fixed several interpreter VM issues
- Fixed stack pop for typeof byte code
- Fixed slot generation when using configure --shared
- Fixed select() event handling on Vxworks
- Fixed searching for ejs.mod in release tree with product installed
- Fixed several byte ordering issues in module files
- Fixed module search when running inside the VS debugger
- Fixed support for Debian Lenny
- Fixed Path comparison operations
- Fixed shared builds not being able to build samples or run ejsweb in some cases
- Fixed mixed type operations with strings and numerics
- Fixed web framework belongsTo, hasMany and hasOne relationships
- Fixed VM byte code comparison operations with null and casting rules
- Fixed VM property lookup to unbound private members
- Fixed some compiler parsing and code analysis issues
- Fixed return/break inside catch blocks
- Fixed closure creation
- Fixed a garbage collection bug
- Fixed HTTP form encoding. Support flattening nested objects
- Fixed JSON encoding and parsing. Add quotes in all cases
- Fixed compiler code generated for block-less if/then clauses. Was not clearing eval stack correctly
- Fixed cast of String to Boolean for empty strings
- Fixed XMLHttp open method setting uri
- Fixed namespace qualified property access
- Fixed property name clashes for views and database records with user defined properties
- Fixed Http.response to be able to be called multiple times
- Fixed checkboxes when unchecked. Was not defining params value
- Fixed XML parsing for CDATA
- Fixed JSON some parsing cases
- Fixed HTTP client when receiving HTTP 100 intermediate responses
API Changes
- App.exe renamed to App.exeDir
- print() serializes objects instead of toString
- Major refactor for: File, Path and FileSystem.
- Native C API refactoring for: MprFile, MprPath, MprFileSystem.
-
- Modified Native APIs
- mprErrorPrintf => mprPrintfError
- mprStaticErrorPrintf => mprStaticPrintfError
- mprAllocStrcat => mprStrcat. Removed delimiter.
- mprReallocStrcat now returns string
- mprAllocSprintf => mprAsprintf and now returns string
- mprAllocVsprintf => mprVasprintf and now returns string
- mprAllocStrcpy => removed
- mprSprintf now returns string and not length
- mprVsprintf now returns string and not length
- mprCreateStaticSpinLock => mprInitSpinLock
- mprAllocObject => mprAllocWithDestructor
- mprAllocObjectZeroed => mprAllocWithDestructorZeroed
- mprAllocMemcpy removed
- mprEscapeCmd, mprUrlEncode, mprUrlDecode, mprEscapeHtml all buffers and return strings
- mprGetAppPath, mprGetAppDir return string
- Most of mprFile APIs are renamed to mprPath
- MprFileSystem, MprFile, MprFileInfo refactored.
- MprFileInfo => MprPath
- Mpr.fileService => Mpr.fileSystem
- mprAccess => mprPathExists
- mprDelete and mprDeleteDir => mprDeletePath
- mprGetBaseName => mprGetPathBase
- mprGetDirName => mprGetPathDir
- mprGetExtension => mprGetPathExtension
- mprGetParentDir => mprGetPathParent
- mprGetDirList => mprGetPathFiles
- mprGetFileInfo => mprGetPathInfo
- mprGetAbsFile => mprGetAbsPath
- mprGetRelFile => mprGetRelPath
- mprCleanFilename => mprNormalizePath
- mprMakeTempFileName => mprGetTempPath
- mprGetFileDelimiter => mprGetPathSeparator
Changes in 0.9.8
Major Features
Minor Features
- Added Cross compilation byte ordering control. New ejsc switches --cross and --endian.
- Fix source code tabbing.
- Added error code to Error class.
- Documentation updates.
Fixes
- Fixed ejsweb migrations.
- Fixed ejsweb to be smarter when creating the web server command string. Now works for installed builds and from a debug tree..
- Fixed poor error message from ejsweb when if fails to run the web server
- Fixed 64 bit MD5 encodings.
- Fixed rendering empty ejs web pages.
- Fixed date unit tests.
- Fixed source distributions for windows. Was missing some VC project files and buildConfig.h.
- Fixed crash when loading custom native modules into the web framework
- Made ejsPath per interpreter
- Modified ejsCreate() API to take a search path argument
- Fixed parsing paths with ".."
Changes in 0.9.7
Major Features
- Added CGI gateway program (ejscgi).
- Added Appweb web server for local and proxied hosting.
- Added Apache reverse proxy support.
- Added Appweb in-memory module.
- Added model validations.
- Added database migrations.
- Added controller life-cycle filter hooks.
- Enhanced ejsweb generator. Added migration, model and scaffold generation. Also migrate application and running in-built web server.
- Added native JSON support.
- Added flash[] inter-action storage.
- Added jQuery support for Ajax and effects.
- Enhanced user controls.
- Added async form and async link support.
Minor Features
- Simplified building for cross-compilation.
- Documentation updates.
- Uninstall on MAC OS X.
- Improved ECMA-262 compliance: Added Function.apply() and Function.call().
- More documentation for the Web Framework.
- Added input view control for smart rendering based on data type.
- Added improved style sheets and themes for use by framework generator.
- Enhanced configure program to intelligently search for dependent components and packages.
- Added block-less function declarations. Can define functions without {} and return. The body is just a simple expression.
- Optimized ejsweb command to directly run pre-compiled byte code.
Fixes
- Renamed compiler from ec to ejsc.
- Renamed web generator from egen to ejsweb.
- Installation and removal fixes.
- Fixed cross compilation build system.
- Fixed setting of LD_LIBRARY_PATH when building cross.
- Fixed Mips compilation switches.
- Fixed System.run. Now uses inbuilt MprCmd instead of popen.
- Fixed native JSON encoding of null, undefined and \\.
- Several VM evaluation fixes.
- Fixed session encoding.
- Fixed cross-request preservation of flash[].
- Fixed textarea control.
- Fixed SQLite datatype mapping.
- Fixed serialize/deserialize. Fixed back quoting and embedded quotes.
- Moved modules to /usr/lib/ejscript/modules and binaries to /usr/local/bin.
- Fixed compiler bug not warning when accessing instance properties from static code.
- Fixed property lookup to use all open namespaces in all blocks.
Changes in 0.9.6
Major Features
- Improved ECMA-262 compatibility.
- Added language compliance controls. Added --lang switches to the configure, ejs, and ec programs. Added "use lang" pragma directive for scripts.
- Extensive updates to the documentation. Especially in language and web framework guides.
Minor Features
- Added typeof operator.
- Added Number and Boolean function constructors.
- Added typeOf() global function for easily determining the type of an object.
- Made ejs support -f switch for compatibility with Mozilla test suites.
Fixes
- Fixed Reflect().typeName not returning correct results.
- Fixed String(number) constructor pattern. Updated doc.
- Fixed parser with typeof operator as the first input token.
- Cleanup error reporting in compiler.
- Fixed prefix and postfix operators on literals. Now warns appropriately.
- Fixed the "in" operator when searching in arrays or instance objects.
Changes in 0.9.5
Major Features
- Garbage collector changed to a non-compacting, generational mark and sweep with pooled object allocations.
- New hierarchical virtual memory allocator offering arena and slab memory allocation services.
- VM Byte codes optimized for direct access and early binding.
- Object memory layout optimized and compacted.
- Class library extended with enhancements for Date, Regular expressions and other types.
- SQLite API.
- Ejscript web framework for "rails" style server side JavaScripting.
- Simple reflection API.
- More unit tests.
- Interfaces including interfaces with bodies.
- Streams classes including TextStream, BinaryStream.
- Enhanced Http. Now supports SSL, authentication, chunked transfers and post data.
Minor Features
- Enhanced and debugged ByteArray class.
- Master interpreter and clone interpreter support.
- XMLHttp class.
- More documentation.
Fixes
- Improve error reporting for ec.
- Fixes for stack trace reporting on exceptions.
- Fixed garbage collection bug for array elements in some cases.
- Fixed some compiler crashes on illegal programs.
- Fixed some code generation issues.
Changes in 0.9.3
Major Features
- Major performance work for memory and CPU utilization.
- Extended Date, Array and String classes.
- Improved documentation.
- Extended suite of unit tests including load, benchmark and valgrind tests.
Minor Features
- Added open, close, read, write file I/O convenience routines. These wrap the more comprehensive File class capabilities.
- Completed the installation and removal packaging for major operating systems.
Fixes
- Continued push to drive quality higher using a continuous integration build farm.
Changes in 0.9.2
Major Features
- Added web ESP (rails-like) framework.
- Added SQLite support.
- Added RegExp regular expression class.
- Added Http client class.
- Added the with statement.
- Lots of bug fixes.
Minor Features
- Updated MPR portable runtime layer.
Fixes
- Too many to count.
Changes in 0.9.1
Major Features
- First-cut product documentation.
- Object, Array, String methods.
- ByteArray.
- ejs.io namespace including: File, BinaryStream, TextStream, IStream.
- Updated ejsmod to support namespaces as packages.
- Extended unit test suite.
- Lots of bug fixes.
Minor Features
- Increased unit test coverage.
Fixes
- Too many to count.
Changes in 0.9.0
Major Features
- Supporting catch (var: type).
- Supporting cast, to, instanceof, in with binary expressions.
- Namespaces including "use namespace" and "use default namespaces".
- Packages are removed in deference to namespaces.
- Added module blocks and "use module".
- Added iterator support for for/in, for each.
- New ejsmod program replaces old bun program. Handles listing, slot and doc generation.
- Ejsmod generates documentation based on javadoc style comments.
- Enhanced assembler listings.
- Improved code generation.
- Completed support for block scope.
- Closures and bound method capture.
- System library documentation.
- Object, Array and String library methods implemented.
- Support class settings.
- E4X support.
- ECMA compliance mode.
- Implemented type checking on function calls in the VM relieving native types of the burden.
- Added parameter type checking and type coercion on function calls.
- Implemented rest args (...rest).
Minor Features
- Increased unit test coverage.
- Code cleanup and refactoring.