• A few more changes the HTTP server, in order to better conform to HTTP 0.9 ...


  • Once more revisited the HTTP server. Keep alive connections should now work well.


  • Changed the type creation / destructions hook from an identifier in the general dictionary to a List (not used by any program yet)

  • Corrected the 'parallel' and 'share' controls that had been corrupted by R6 patch.
  • Completely revisited the HTTP server (now works with Amaya and IE)


  • Corrected the 'restore' command line parameter of the compiler which did not work at all.

  • Changed return for 'function' and 'type' from Void to a pointer to the newly constructed function, resp type.
  • Added 'Expression_failedtocompile_rewrite' hook function.
  • Cosmetic change in the compiler in order to display a more informative error message when an argument type is not defined.
  • Added type creation / destruction hooks (not used for the moment).

  • Now Int64 module loads Intn as a submodule in order to provide basic operations (+, -, ...)
  • Corrected the typo 'implicit' to 'implicit'.
  • Corrected the HTTP server strings encoding/decoding mechanism.
  • Corrected the 'note' tag of the HTTP server which had been corrupted by a previous patch.

  • New version of 'expression' function.

  • Added the 'implicit' control.

  • Added 'Type' documentation.


  • There was a bug in the C 'Expression_constant' function when applying on identifiers. As a result, it failed to compile a valid template (see listing in the forum).
    I separated, in all the existing code, checking if an expression is a constant, and checking if an expression is an identifier.

  • There is now a forum.


  • The memory extension that frees large sets of unused memory is buggy.
    As a result the Pliant interpreter was unable to launch at debugging level 2 using the default precompiled environment.
    I simply disabled it.
  • The code generator was sharing some temporary variables whereas it should not because some pointers to fields in these temporary variables are used later.

    In the following example the function 'test' is compiled wrong because:
    dt1:date builds a temporary object 't1' with type 'Date'.
    then dt1:date:days returns a pointer 'p1' to 't1' because 'days' is the only field of the 'Date' type.
    dt2:date builds a temporary object 't2' with type 'Date'.
    then dt2:date:days returns a pointer 'p2' to 't2'.
    The trouble is that the optimizer decides to share the temporary objects 't1' and 't2' because it does not see that unreferencing the pointers 'p1' and 'p2' truly means using 't1' and 't2'.
    As a result, the 'test' function will return 0.

    module "/pliant/v1.pli"
    module "/pliant/debugger/listing.pli"
    var DateTime dt1 := datetime 1999 2 2 14 0 0 0.0 
    var DateTime dt2 := datetime 1999 1 27 23 0 0 0.0 
    listing true
    function test -> i
      arg Int i
      i := dt1:date:days-dt2:date:days
    console (cast test Str)+"[lf]"


  • Removed some bugs in the Pliant HTTP server.

  • Added minor features to the Pliant HTTP server.

  • Various minor changes in the PDEE modules.