April
1, 2004
In
This Issue
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.
|
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]
|