ScriptEase:ISDK Newsletter

April 1, 2004

In This Issue

""

SE:ISDK/C 5.01b upgrade
 

ISDK/C 5.01a Errata
 

ISDK/Java 5.01a Errata

Other Newsletters

DevSpace Developer Support

For more information and resources, visit ScriptEase: ISDK DevSpace online.

Download Center

For latest updates and extensions, visit the ISDK Download Center.

"" SE:ISDK 5.01b upgrade now available

No folks, this is not an April Fool's joke! As part of our effort to consantly improve the SE:ISDK, version 5.01b errata release is now available for C/C++ and Java & J2ME. In addition to fixing all known 5.01a errata items, this 5.01b release includes a number of improvements. It's worth the upgrade.

Improvements

  • SE_GF_NOCALLBACKS flag added for seGetXXX/sePutXXX API calls, which allows for member access without triggering dynamic callbacks. The SE_GF_NOCALLBACKS flag differs from the SE_GF_DIRECT flag in that SE_GF_NOCALLBACKS will still search the object's prototype chain, while SE_GF_DIRECT will not.
  • SE_GF_CALL_HINT flag added for seGetXXX API calls, which passes a hint to the dynamic get callback indicating that the retrieved value will be called as a function.
  • New memory allocation support features added. API users now have the option of specifying an allocator_cookie pointer, which will be passed to the jseMalloc(), jseReMalloc(), and jseFree() macros. allocator_cookie allows your memory routines to apply per-context. Also, the API user can now register a seMemoryNeeded() callback, in the event that the engine cannot allocate sufficient memory. This callback allows your code to execute any reclaim processes it has to free up memory.
  • seGetPointer() and sePutPointer() no longer store pointers as numbers internally. On some 64-bit systems, the conversion from pointer to number back to pointer would not yeild the original value.
  • More internal tests added to support 64-bit handling.
  • New proprietary regular expression library. Our new regular-expression library natively supports unicode and strings with embedded null characters, robustly handles either very large expressions or medium sized expressions in small memory, and is about 2/3 the size of PCRE (both in image and in runtime). The PCRE library can still be used by defining SE_PCRE_REGEXP_ENGINE in jseopt.h.
  • SE_RELEASE_BUILD flag added to jseopt.h, which by default corresponds to the commonly used NDEBUG flag. The SE_RELEASE_BUILD flag can be set independently of NDEBUG, and allows developers to build their code with NDEBUG, but keep ScriptEase-specific debugging code active.
  • SE_DEBUGPRINTF flag added to jseopt.h. This flag enables control over the DebugPrintf() call, which by default writes to jsedebug.log file.
  • JSE_MEMDOUBLE_LIMIT flag added to jseopt.h. The seGCAlloc function has an SE_ALLOC_FASTSLOPPY flag to turn on an algorithm that doubles allocated memory each time more memory is needed. This sets a limit beyond which we stop doubling and instead just allocate JSE_MEMDOUBLE_LIMIT
  • SE_LOCK_PROTOTYPE_CACHE flag added to jseopt.h. The prototypes for Object, Array, String, and Function are cached to be used when autoconversion forces a contructor to be called (for example "string".substr() should act as if the String("string") contructor was called). It is possible (although unlikely) that one of the cached prototypes could change, forcing the prototypes to be refreshed. If you are certain that the Object, Array, String, and Function prototypes will never change, then set this flag to prevent the caches from being refreshed. This will improve performance, especially in applications where the global object is changed often, or the global object has dynamic callbacks assigned.
  • The SE_FUNCTION_GLOBAL member specifier has been added for JSE_MULTIPLE_GLOBAL builds. When JSE_MULTIPLE_GLOBAL is defined all function keep a reference to the global object that will be used while within that function. SE_FUNCTION_GLOBAL allows access to a function's global object, so the object can be changed or set to NULL (i.e. do not change the global) through the seGetXXX/sePutXXX API calls.

Upgrade Now

This is a very robust release. All 5.01a users should upgrade to 5.01b. To receive your SE:ISDK/C 5.01b upgrades contact http://support.nombasxxx.com/ with information about platforms and version needed.

Have a question about how to use ScriptEase:ISDK? Let Dr. Scripter know at http://support.nombasxxx.com/


 Errata

   ISDK/C 5.01a

  • Date parser not recognizing 12 AM or "UTC": When parsing a date/time with "12:00 AM UTC" the date parser is not recognizing this as midnight, but is instead registering that time as noon. Also, although the ECMAScript specification sets "GMT" as the tag for declaring universal time, it has become common to also use "UTC". [Details]
  • Function constructor causes swapping for created functions: When JSE_MULTIPLE_GLOBAL is defined (the default), any anonymous function created at runtime with the Function constructor will preserve the global from when the Function library was loaded (usually at program initialization). This will cause the global to change to the original global whenever that anonymous function is later called. [Details]
  • String match function should return null on no match: According to the commonly recognized ECMAScript Edition 3 Errata, string.match should return NULL if there are no items matched. This differs from the ECMAScript document, and from our 5.01a code, which would return a zero-length array. [Details]
  • memory leak with array.toSource : A memory buffer remains unreleased for each call to Array.prototype.toSource. This would happen any time ToSource is applied to an instance of an Array, or to any object containing an instance of an Array. [Details]
  • string.split returns undefined element 0 if no match: If String.prototype.split(delimeter) is called, but there is no delimeter matched, then this function should return a 1-element array with the original string as element 0. Instead it is wrongly returning and undefined type as element 0. [Details]
  • hang on assigning to undefined variable if global object is SE_DYNA_UNDEF: If the global object is dynamic (i.e. setSetCallbacks has been called on SE_GLOBAL), and if jseopt.h defines JSE_CACHE_GLOBAL_VARS, and if a property of the global is of type undefined, then assigning to that property will result in an assertion being raised (if a debug build) or in the engine haning in an infinite loop. [Details]
  • Clib.fread() leaves unread parts of buffers uninitialized: If Clib.fread(...buffer_size...) reads less than buffer_size bytes, then the buffer size will be created large enough for buffer_size bytes and the parts of the buffer beyond what are read will be uninitialized and may contain random data. Instead, the buffer should not be expanded beyond the number of bytes that are read. [Details]

 Errata

   ISDK/Java 5.01a

  • Date parser not recognizing 12 AM or "UTC": When parsing a date/time with "12:00 AM UTC" the date parser is not recognizing this as midnight, but is instead registering that time as noon. Also, although the ECMAScript specification sets "GMT" as the tag for declaring universal time, it has become common to also use "UTC". [Details]
  • Function constructor causes swapping for created functions: When JSE_MULTIPLE_GLOBAL is defined (the default), any anonymous function created at runtime with the Function constructor will preserve the global from when the Function library was loaded (usually at program initialization). This will cause the global to change to the original global whenever that anonymous function is later called. [Details]
  • String match function should return null on no match : According to the commonly recognized ECMAScript Edition 3 Errata, string.match should return NULL if there are no items matched. This differs from the ECMAScript document, and from our 5.01a code, which would return a zero-length array. [Details]
  • string.split returns undefined element 0 if no match : If String.prototype.split(delimeter) is called, but there is no delimeter matched, then this function should return a 1-element array with the original string as element 0. Instead it is wrongly returning and undefined type as element 0. [Details]
  • a recursive array to a string can crash : In an array contains a recursive element that recursively refers back to the array, and if the array is then converted to a string, then the scriptease engine will crash. The following script demonstrates the problem: [Details]

ScriptEase: ISDK is a product of Nombas,
      Inc. Visit us at ../index.htm