
		    TODO Virtual Machine & JS API
		    =============================

* Write tests for the built-in File object.

* js_interp_reinit(): restore the interpreter to the same state where
  it was after the js_create_interp() call.  Or, js_clone_interp() to
  create a clone of a running interpreter.  Or, speedup the compiler
  definition: on-demand, something else?

* src/regexp.h file:

   #define regcomp my_regcomp
   #define regexec my_regexec
   #define regfree my_regfree

* Cleanup the error message and error code passing in the JSIOStream
  interface.

* compilation / configuration

  - `--with-*' options to enable / disable features like: crc32,
    regexp, compiler, getcwd, popen

* There are still some memory leaks that occur when the dynamic memory
  allocation fails and we have some previously allocated stuffs on
  stack variables.  Find a nice solution for this.

* Dynamic stack expansion in case of stack overflow and shrinking when
  the stack usage is less that some fraction of the stack space.

* System

  methods: readln(), printf()

* object Function

  implement

* object Date

  methods: parse, getTimezoneOffset, UTC
  constructor with 1 argument

* object Object

  properties: constructor
  methods: toString

  Check that all built-in objects implement toString().  The other
  methods and all properties are currently unimplemented.

* Added the flags JS_ATTRIB_READONLY, JS_ATTRIB_DONTENUM, etc. for the
  object properties.

* Built-ins

  Allow users to overwrite the default methods.  Basicly, we have all
  that is needed for this.  I just want to think this one for a while,
  because the default __proto__ lookup will slow the built-in method
  dispatching.

* String.format() might be handy

* byte-code operands

  - `load_array' and `store_array' to work with built-in objects with
    integer array indexes
  - `nth' to work with built-in objects
  - cmp_{eq,ne}: object OP string/number

* operand delete_property: support for the with-chains

* RegExp.multiline property

* String.{,un}pack(): implement all missing type specifiers

* allow user-defined global methods for the JavaScript extension

* Tcl extension

* Garbage collection should be re-implemented.  Incremental?
  Generational?  Maybe, maybe not.

* Garbage collection (slot recycling) for constants.  The current
  implementation leaks the constant slots when functions (and
  therefore the constants) are freed.

* tests for built-in objects and methods.  Do this at the same time
  when the documentation is updated.

* byte-code operand profiling shows the following facts:

	operand		#hits	relative hits
	----------------------------------------
	store_property  1048    21.38
	load_property	741     15.12
	call_method	531     10.83
	store_local	272     5.55
	...

  maybe the implementation of the object properties could be
  optimized