17-June-2001 (Lars Duening) -- upcoming Release 3.2.9
- Changed efuns:
+ allocate(): Accepts an optional initialisation value and can
create multi-dimensional arrays.
+ clones(): If the driver is compiled with DYNAMIC_COSTS, the cost
is proportional to the number of objects in the game.
+ ctime(): Accepts the output of new efun utime() as well.
+ debug_info(): New argument DINFO_TRACE to return the current
or the last error call stack.
Argument (DINFO_DATA, DID_MEMORY) also returns the number
and size of permanent and clib allocations (where
applicable).
Argument (DINFO_DATA, DID_STATUS) also returns
the total number of heartbeat calls.
Single values of (DINFO_DATA) can be returned instead of the
whole array.
+ debug_message(): New second argument determines where to
log the message, and if to prepend a timestamp.
+ exec(): If this_interactive() points to one of the involved
objects, it is switched over as well, like this_player().
+ filter(), map(), sort_array(), walk_mapping(): Protected lvalues
(e.g. &(i[0])) are not allowed as callback parameters.
+ lambda(): Simul efuns with extended varargs weren't compiled
correctly.
+ object_info(): OINFO_MEMORY also returns the program flags
NO_INHERIT, NO_SHADOW and NO_CLONE, and gives a better account
of the memory used for strings and variables.
Single values can be returned instead of the whole array.
+ printf(), sprintf(): A leading zero in the field size will now print
only leading zeros and not interfere with the pad string option.
+ query_udp_port(), send_udp(): Renamed from query_imp_port() and
send_imp().
+ regexp functions: more compatible with 8-bit characters.
+ regexp functions: New metacharacters '+' allows to specifiy 'at
least one match'.
+ regreplace(): Accepts a closure to produce the replacement string
instead of just a constant string.
+ sin(), cos(), tan(), atan(), atan2(), log(), exp(), sqrt(), pow():
Integers are accepted as arguments, too.
+ terminal_colour(): Colour keys can now be mapped using a closure.
+ add_verb(), add_xverb(), efun308(), file_name(), map_array(),
filter_array(), filter_mapping(), map_mapping(), m_sizeof(),
send_imp():
Available only if driver is compiled with support for
deprecated efuns.
- Corrected efuns:
+ call_out(): In release 3.2.8 lvalues were not allowed as arguments -
now they are again.
+ call_resolved(): Now accepts a destructed object as second parameter
as it should.
+ functionlist(): The filter flags didn't really work.
+ input_to(): The option IGNORE_BANG didn't work. In charmode, !-escapes
after the first received data are now recognized.
+ object_info(): The returned OIB_NAME now starts with a '/' in plain
mode.
+ printf(), sprintf(): The formatter "%^" will print "%^", for
compatibility with terminal_colour().
+ sscanf(): the format '%s%d' failed to parse 'ab1cd' correctly.
- New efuns:
+ db_affected_rows(), db_conv_string(), db_close(), db_connect(),
db_exec(), db_fetch(), db_handles(), db_coldefs(), db_insert_id(),
db_error():
Optional: mySQL support.
+ md5_encrypt(): Compute the MD5 message digest for a string.
+ min(), max(): To select the minimum resp. maximum among a bunch
of numbers or strings.
+ sgn(): Return the sign of a numeric argument.
+ utime(): Return the current time in microsecond resolution.
- Master Object:
+ receive_udp(): Renamed from receive_imp().
+ privilege_violation(): Privilege "send_udp" replaced "send_imp".
+ valid_trace(): New second argument to receives the argument
passed to the efun.
+ runtime_error(): Receives an extra argument to distinguish between
normal runtime errors, and those occuring during a heartbeat.
+ include_file(), H_INCLUDE_DIRS: The pathnames can now start
with leading slashes.
+ If a master is forced to reload via SIGUSR1, all inherited objects
(if any) are reloaded as well.
+ Bugfix: slow_shut_down() was not called with previous_object(),
this_player() and this_interactive() being 0.
+ Bugfix: When reactivating a destructed master, the lfuns
inaugurate_master() and reactivate_destructed_master() are found
even when static.
- Fixed Crashers:
+ Catching errors with catch() did not work reliably when the
driver was compiled with gcc.
+ Unlucky combinations of heart_beat() definitions or declarations
(e.g. private and public inheritance in this order) crashed
the driver when the heart_beat() was called.
+ When creating long value save strings, the driver crashed on
corrupted memory.
+ If the object for a prompt-closure is destructed, the driver
could crash under extremely unlucky circumstances.
+ #define'ing the name of an inline closure was not detected.
+ Assignments of computed strings sometimes crashed the driver.
+ Pre-increment or -decrement on an undefined variable, where
the result was used in a typechecked context.
- Language:
+ New operators '>>>' and '>>>=' for logical right shifts.
+ New LPC define __LDMUD__ to identify this driver branch.
+ New LPC defines __VERSION_MAJOR__, __VERSION_MINOR__,
__VERSION_MICRO__, __VERSION_PATCH__ expand to the various parts
of the driver version.
+ Numbers can also be specified as binary patterns with the '0b'
prefix, and as octals with the '0o' prefix.
+ Floating point numbers can now also be specified in the
exponential notation, e.g. '3.14E-5'.
+ Character escape sequences can now specify the character code
directly in decimal ('\[1-9]...'), octal ('\0o...'), sedecimal
('\x...' and '\0x...') and binary ('\0b...').
+ The operators '++' and '--' can now be used on floats, too.
+ Closures bound to destructed objects are now treated uniformly
like destructed objects and are replaced by 0s where required.
+ Lfun and variable closures can now be compared with '==' and '!=',
and are treated correctly in alist and array operations.
+ Inline closures inherit the visibility of their defining function.
+ Experimental: Extended the construct catch() with the keyword
'nolog', which suppresses logging the caught error in the logfiles.
It is meant for objects like wizard tools.
+ It is no longer possible to prematurely end an inline closure
function by inserting a free '}'.
+ Global functions are no longer hidden by local variables.
+ It is now possible to cast to '(mixed)'.
+ If operands of different types are given to '?:', the result
will have the type 'mixed'.
+ Integers and floats can now be compared against each other.
+ Bugfix: Adding mappings of different width throws an error, unless
one of the mappings if empty.
+ Bugfix: Right shift by 32 or more bits was computed incorrectly.
+ Bugfix: The type tracking of multiplications can returns the right
type when seeing 'mixed' operands.
+ Bugfix: All <op>= assignment can now operate on indexed strings
on the left hand side.
+ Bugfix: Additions of floats to 0 yielded the wrong type.
+ Bugfix: For closely consecutive switch case ranges (e.g. 'case
-2..-1: case 1..2:') the compiler generated faulty lookup
tables.
+ Bugfix: Improved the typetracking for operator '&' when used with
mixed variables.
+ Bugfix: A cast of an expression to its own type now longer inserts
a conversion operation.
+ Bugfix: Global variables can no longer be redefined in the same
scope.
- Runtime:
+ New runtime limit LIMIT_CALLOUTS (commandline option
'--max-callouts') for the maximum number of callouts at one time.
+ Attempts to set a single string character to 0 now raise
a runtime error.
+ The internal alarm timing is monitored and restarted in case the
alarm gets lost (happens often on Cygwin).
+ Normal runtime errors are no longer reported on the console.
+ Bugfix: IPv6 name lookup works again, and also with both xerq and erq.
+ Bugfix: The driver now longer gets a confused when a client like
TinyFugue refuses to use CHARMODE.
+ Bugfix: On mapping addition or element assignment, invalid keys (like
destructed objects) were still counted against the allowed mapping
size.
+ Bugfix: Simple reference loops as created by
'b = 0 || &a; b = 0 || &a;' are detected.
+ Bugfix: When destructing an object, references through closures
are removed from the local variables as well.
- Other Changes:
+ New driver option '--pidfile <filename>' to write the pid of the
driver process into a file.
+ New driver option '--erq <filename>' to choose a different name
for the ERQ executable (default is 'erq'). The option can also
be used to specify the full pathname of the executable.
+ The driver mode (plain or compat) can be selected with a commandline
option ('--no-compat' resp. '--compat').
+ New driver options '--min-malloced' and '--min-small-malloced' to
specify the size of the initial block allocations.
+ Removed a couple of fatal race-conditions in the xerq.
+ New configuration option 'use-deprecated' allows
to disable obsolete and deprecated efuns. If enabled, the macro
__DEPRECATED__ is defined.
+ The UDP port is now a standard feature. The option has been renamed
from 'catch_udp_port' to just 'udp_port'.
+ Swapping is now a standard feature, though it still can be
disabled by specifying swapping times of 0.
+ The ERQ_EXECUTE command now recognizes quoted arguments.