Merge branch 'master' of ssh://git.samba.org/data/git/samba into noejs
authorJelmer Vernooij <jelmer@samba.org>
Thu, 18 Sep 2008 18:29:05 +0000 (20:29 +0200)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 18 Sep 2008 18:29:05 +0000 (20:29 +0200)
Conflicts:
source4/main.mk

124 files changed:
pidl/pidl
source4/Makefile
source4/configure.ac
source4/lib/appweb/README [deleted file]
source4/lib/appweb/config.m4 [deleted file]
source4/lib/appweb/config.mk [deleted file]
source4/lib/appweb/ejs-2.0/.bashrc [deleted file]
source4/lib/appweb/ejs-2.0/.exrc [deleted file]
source4/lib/appweb/ejs-2.0/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/.loginrc [deleted file]
source4/lib/appweb/ejs-2.0/ejs/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/ejs/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsArray.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsDate.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsError.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsObject.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsStndClasses.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsString.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/classes/ejsXml.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejs.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejs.h [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsClass.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsGarbage.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsLex.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsParser.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsVar.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/ejsVar.h [deleted file]
source4/lib/appweb/ejs-2.0/ejs/lib/event.js [deleted file]
source4/lib/appweb/ejs-2.0/ejs/lib/global.js [deleted file]
source4/lib/appweb/ejs-2.0/ejs/lib/startup.js [deleted file]
source4/lib/appweb/ejs-2.0/ejs/lib/timer.js [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/README.TXT [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/UNIX/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/UNIX/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/UNIX/ejsFile.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/UNIX/ejsFileSystem.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/UNIX/ejsHTTP.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/WIN/.ignore [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/WIN/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/WIN/ejsFile.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/WIN/ejsFileSystem.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/WIN/ejsHTTP.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsGC.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsGlobal.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsSystem.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsSystemApp.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsSystemDebug.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsSystemLog.c [deleted file]
source4/lib/appweb/ejs-2.0/ejs/system/ejsSystemMemory.c [deleted file]
source4/lib/appweb/ejs-2.0/exml/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/exml/exml.h [deleted file]
source4/lib/appweb/ejs-2.0/exml/exmlParser.c [deleted file]
source4/lib/appweb/ejs-2.0/exml/files [deleted file]
source4/lib/appweb/ejs-2.0/mpr/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/mpr/UNIX/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/mpr/UNIX/mprFile.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/UNIX/mprPlatform.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/UNIX/mprTime.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/VXWORKS/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/mpr/VXWORKS/mprFile.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/VXWORKS/mprPlatform.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/VXWORKS/mprTime.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/WIN/Makefile [deleted file]
source4/lib/appweb/ejs-2.0/mpr/WIN/mprFile.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/WIN/mprPlatform.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/WIN/mprTime.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/files [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mpr.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mpr.h [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprAlloc.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprArray.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprBuf.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprGenFile.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprGenTime.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprLock.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprLog.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprOs.h [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprPrintf.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprString.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprSymbol.c [deleted file]
source4/lib/appweb/ejs-2.0/mpr/mprUnix.h [deleted file]
source4/lib/appweb/ejs/config.h [deleted file]
source4/lib/appweb/ejs/ejs.h [deleted file]
source4/lib/appweb/ejs/ejsInternal.h [deleted file]
source4/lib/appweb/ejs/ejsLex.c [deleted file]
source4/lib/appweb/ejs/ejsLib.c [deleted file]
source4/lib/appweb/ejs/ejsParser.c [deleted file]
source4/lib/appweb/ejs/ejsProcs.c [deleted file]
source4/lib/appweb/esp/esp.c [deleted file]
source4/lib/appweb/esp/esp.h [deleted file]
source4/lib/appweb/esp/espEnv.h [deleted file]
source4/lib/appweb/esp/espProcs.c [deleted file]
source4/lib/appweb/mpr/miniMpr.c [deleted file]
source4/lib/appweb/mpr/miniMpr.h [deleted file]
source4/lib/appweb/mpr/var.c [deleted file]
source4/lib/appweb/mpr/var.h [deleted file]
source4/librpc/config.mk
source4/main.mk
source4/param/loadparm.c
source4/samba4-skip
source4/scripting/ejs/config.mk [deleted file]
source4/scripting/ejs/mprutil.c [deleted file]
source4/scripting/ejs/smbcalls.c [deleted file]
source4/scripting/ejs/smbcalls.h [deleted file]
source4/scripting/ejs/smbcalls_auth.c [deleted file]
source4/scripting/ejs/smbcalls_config.c [deleted file]
source4/scripting/ejs/smbcalls_creds.c [deleted file]
source4/scripting/ejs/smbcalls_ldb.c [deleted file]
source4/scripting/ejs/smbcalls_options.c [deleted file]
source4/scripting/ejs/smbcalls_string.c [deleted file]
source4/scripting/ejs/smbcalls_sys.c [deleted file]
source4/scripting/ejs/smbscript.c [deleted file]
source4/scripting/libjs/base.js [deleted file]
source4/selftest/samba4_tests.sh
source4/web_server/config.mk
testprogs/ejs/bugs.js [deleted file]
testprogs/ejs/ldb.js [deleted file]
testprogs/ejs/minschema.js [deleted file]
testprogs/ejs/sprintf.js [deleted file]

index e58442ba1b696edb0eb84b0cad392ac720dd1aa7..577db0a53fda2852f408263bb1e20d6656f1d744 100755 (executable)
--- a/pidl/pidl
+++ b/pidl/pidl
@@ -17,7 +17,7 @@ pidl - An IDL compiler written in Perl
 
 pidl --help
 
-pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [--typelib=[OUTPUT]] [<idlfile>.idl]...
+pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [--typelib=[OUTPUT]] [<idlfile>.idl]...
 
 =head1 DESCRIPTION
 
@@ -478,7 +478,6 @@ my($opt_ndr_parser);
 my($opt_tdr_parser);
 my($opt_ws_parser);
 my($opt_swig);
-my($opt_ejs);
 my($opt_python);
 my($opt_quiet) = 0;
 my($opt_outputdir) = '.';
@@ -521,7 +520,6 @@ Samba 4 output:
  --ndr-parser[=OUTFILE]  create a C NDR parser [ndr_BASENAME.c]
  --client[=OUTFILE]      create a C NDR client [ndr_BASENAME_c.c]
  --tdr-parser[=OUTFILE]  create a C TDR parser [tdr_BASENAME.c]
- --ejs[=OUTFILE]         create ejs wrapper file [BASENAME_ejs.c]
  --python[=OUTFILE]      create python wrapper file [py_BASENAME.c]
  --swig[=OUTFILE]        create swig wrapper file [BASENAME.i]
  --server[=OUTFILE]      create server boilerplate [ndr_BASENAME_s.c]
@@ -567,7 +565,6 @@ my $result = GetOptions (
            'ndr-parser:s' => \$opt_ndr_parser,
            'client:s' => \$opt_client,
            'ws-parser:s' => \$opt_ws_parser,
-           'ejs' => \$opt_ejs,
                'python' => \$opt_python,
            'diff' => \$opt_diff,
            'swig:s' => \$opt_swig,
@@ -664,7 +661,6 @@ sub process_file($)
            defined($opt_server) or 
            defined($opt_header) or
            defined($opt_ndr_parser) or
-           defined($opt_ejs) or 
            defined($opt_python) or 
            defined($opt_dump_ndr_tree) or
            defined($opt_samba3_header) or 
@@ -709,14 +705,6 @@ sub process_file($)
                  FileSave($filename, $code);
        }
 
-       if (defined($opt_ejs)) {
-               require Parse::Pidl::Samba4::EJS;
-               my $generator = new Parse::Pidl::Samba4::EJS(); 
-               my ($hdr,$prsr) = $generator->Parse($ndr, $h_filename);
-               FileSave("$outputdir/ndr_$basename\_ejs.c", $prsr);
-               FileSave("$outputdir/ndr_$basename\_ejs.h", $hdr);
-       }
-
        if (defined($opt_python)) {
                require Parse::Pidl::Samba4::Python;
                my $generator = new Parse::Pidl::Samba4::Python(); 
index 7a5ec4c0d024279309a32b943d7b84e7107743df..bc470742c66c1f4df2baebeb25fc06333c4920bc 100644 (file)
@@ -13,7 +13,6 @@ pidldir := $(srcdir)/../pidl
 BASEDIR = $(prefix)
 TORTUREDIR = $(libdir)/torture
 SWATDIR = $(datadir)/swat
-JSDIR = $(datadir)/js
 SETUPDIR = $(datadir)/setup
 NCALRPCDIR = $(localstatedir)/ncalrpc
 
@@ -98,7 +97,6 @@ ntvfssrcdir := ntvfs
 ntptrsrcdir := ntptr
 librpcsrcdir := librpc
 libclisrcdir := libcli
-ejsscriptsrcdir := scripting/ejs
 pyscriptsrcdir := $(srcdir)/scripting/python
 kdcsrcdir := kdc
 ntp_signdsrcdir := ntp_signd
@@ -164,7 +162,6 @@ showlayout::
        @echo '  lockdir:     $(lockdir)'
        @echo '  logfilebase: $(logfilebase)'
        @echo '  setupdir:    $(SETUPDIR)'
-       @echo '  jsdir:       $(JSDIR)'
        @echo '  swatdir:     $(SWATDIR)'
        @echo '  mandir:      $(mandir)'
        @echo '  torturedir:  $(TORTUREDIR)'
@@ -234,7 +231,7 @@ installman:: manpages installdirs
        @$(SHELL) $(srcdir)/script/installman.sh $(DESTDIR)$(mandir) $(MANPAGES)
 
 installmisc:: installdirs
-       @$(SHELL) $(srcdir)/script/installmisc.sh $(srcdir) $(DESTDIR)$(JSDIR) $(DESTDIR)$(SETUPDIR) $(DESTDIR)$(bindir)
+       @$(SHELL) $(srcdir)/script/installmisc.sh $(srcdir) $(DESTDIR)$(SETUPDIR) $(DESTDIR)$(bindir)
 
 installpc:: installdirs
        @$(SHELL) $(srcdir)/script/installpc.sh $(builddir) $(DESTDIR)$(PKGCONFIGDIR) $(PC_FILES)
index a445dc62a653bd9914220da919d98edd5d2d3735..fa2d8d99506c47437705bf18979cc2a8edbeaf06 100644 (file)
@@ -104,7 +104,6 @@ m4_include(../lib/nss_wrapper/config.m4)
 m4_include(auth/config.m4)
 m4_include(kdc/config.m4)
 m4_include(ntvfs/sysdep/config.m4)
-m4_include(lib/appweb/config.m4)
 m4_include(nsswitch/config.m4)
 
 #################################################
diff --git a/source4/lib/appweb/README b/source4/lib/appweb/README
deleted file mode 100644 (file)
index bdc9434..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-The lib/appweb directory is a partial import of the appweb ejs and esp
-code from http://www.appwebserver.org/
-
-Many thanks to the mbedthis people, and especially Michael O'Brien for
-his assistance in getting this code integrated into Samba4.
-
diff --git a/source4/lib/appweb/config.m4 b/source4/lib/appweb/config.m4
deleted file mode 100644 (file)
index 69b4048..0000000
+++ /dev/null
@@ -1 +0,0 @@
-AC_CHECK_HEADERS(math.h)
diff --git a/source4/lib/appweb/config.mk b/source4/lib/appweb/config.mk
deleted file mode 100644 (file)
index 4d27b69..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#######################
-# Start SUBSYSTEM MPR
-[SUBSYSTEM::MPR]
-# End SUBSYSTEM MPR
-#######################
-
-MPR_OBJ_FILES = $(addprefix $(appwebsrcdir)/mpr/, miniMpr.o var.o)
-
-#######################
-# Start SUBSYSTEM EJS
-[SUBSYSTEM::EJS]
-PUBLIC_DEPENDENCIES = MPR
-# End SUBSYSTEM EJS
-#######################
-
-EJS_OBJ_FILES = $(addprefix $(appwebsrcdir)/ejs/, ejsLib.o ejsLex.o ejsParser.o ejsProcs.o)
-
-#######################
-# Start SUBSYSTEM ESP
-[SUBSYSTEM::ESP]
-PUBLIC_DEPENDENCIES = EJS
-# End SUBSYSTEM ESP
-#######################
-
-ESP_OBJ_FILES = $(addprefix $(appwebsrcdir)/esp/, esp.o espProcs.o)
diff --git a/source4/lib/appweb/ejs-2.0/.bashrc b/source4/lib/appweb/ejs-2.0/.bashrc
deleted file mode 100644 (file)
index c05ee0e..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-#
-#      .bashrc -- Login shell startup script for windows using Mbedthis winTools
-#
-#      Copyright (c) Mbedthis Software, 2003-2005. All Rights Reserved.
-#
-
-TERM=ansi
-#
-#      Set the desired .NET Framework
-#
-# FRAMEWORK=v1.0.3705
-FRAMEWORK=v1.1.4322
-# FRAMEWORK=v2.0.40607
-
-#
-#      Set the desired Microsoft C Compiler version
-#
-# PREFERRED_CC=VS2005
-# PREFERRED_CC=VS2003
-# PREFERRED_CC=VS.NET
-PREFERRED_CC=VS6
-
-#
-#      Set to 1 if VXWORKS support is required
-#
-#      VXWORKS=1
-
-HOME=`pwd`
-if [ ! -x winTools -o ! -x winTools/cygpath.exe ]
-then
-       echo "Can't find build tools. Install build tools in $HOME/winTools"
-fi
-
-ROOT=`winTools/cygpath -u $HOMEDRIVE` 
-: ${ROOT:=C:/}
-APPWEB_PATH="${HOME}/bin/DEBUG:${HOME}/bin/RELEASE:${HOME}/bin:${HOME}/winTools"
-CDPATH=".:${HOME}:${HOME}/http:${HOME}/http/modules:${HOME}/packages"
-PS1="$ "
-
-export CDPATH INCLUDE LIB LIBPATH PATH PS1 TERM
-
-echo -e "\n\n###################################################"
-echo "Mbedthis AppWeb, Cygwin build tools."
-echo "Using compiler: $PREFERRED_CC, .NET framework: $FRAMEWORK"
-echo -e "###################################################"
-
-################################################################################
-
-#
-#      Setup for Visual Studio and SDK
-#
-if [ $PREFERRED_CC == "VS2005" ]
-then
-       #
-       #       Visual Studio .NET 2005 defines. 
-       #
-       CYNET="${ROOT}/Program Files/Microsoft Visual Studio 8"
-       DOSNET="C:/Program Files/Microsoft Visual Studio 8"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC/BIN:$CYNET/VC/VCPackages:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin:$CYNET/SDK/v2.0/bin:`cygpath -W`/Microsoft.NET/Framework/v2.0.40607:$CYNET/SDK/v2.0/bin:$PATH"
-       INCLUDE="$DOSNET/VC/ATLMFC/INCLUDE;$DOSNET/VC/INCLUDE;$DOSNET/VC/PlatformSDK/include;$DOSNET/SDK/v2.0/include;$INCLUDE"
-       LIB="$DOSNET/VC/ATLMFC/LIB;$DOSNET/VC/LIB;$DOSNET/VC/PlatformSDK/lib;$DOSNET/SDK/v2.0/lib;$LIB"
-       LIBPATH=c:/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK
-fi
-
-if [ $PREFERRED_CC == "VS2003" ]
-then
-       #
-       #       Visual Studio .NET 2003 defines. 
-       #
-       CYNET="${ROOT}/Program Files/Microsoft Visual Studio .NET 2003"
-       DOSNET="C:/Program Files/Microsoft Visual Studio .NET 2003"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC7/BIN:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin/prerelease:$CYNET/Common7/Tools/bin:$CYNET/FrameworkSDK/bin:${ROOT}/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$CYNET/SDK/v1.1/bin:$PATH"
-       INCLUDE="$DOSNET/VC7/ATLMFC/INCLUDE;$DOSNET/VC7/INCLUDE;$DOSNET/VC7/PlatformSDK/include/prerelease;$DOSNET/VC7/PlatformSDK/include;$DOSNET/FrameworkSDK/include;$INCLUDE"
-       LIB="$DOSNET/VC7/ATLMFC/LIB;$DOSNET/VC7/LIB;$DOSNET/VC7/PlatformSDK/lib/prerelease;$DOSNET/VC7/PlatformSDK/lib;$DOSNET/FrameworkSDK/lib;$LIB"
-fi
-
-
-if [ $PREFERRED_CC == "VS.NET" ]
-then
-       #
-       #       Visual Studio .NET defines. 
-       #
-       CYNET="${ROOT}/Program Files/Microsoft Visual Studio .NET"
-       DOSNET="C:/Program Files/Microsoft Visual Studio .NET"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC7/BIN:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin/prerelease:$CYNET/Common7/Tools/bin:$CYNET/FrameworkSDK/bin:${ROOT}/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$CYNET/SDK/v1.0/bin:$PATH"
-       INCLUDE="$DOSNET/VC7/ATLMFC/INCLUDE;$DOSNET/VC7/INCLUDE;$DOSNET/VC7/PlatformSDK/include/prerelease;$DOSNET/VC7/PlatformSDK/include;$DOSNET/FrameworkSDK/include;$INCLUDE"
-       LIB="$DOSNET/VC7/ATLMFC/LIB;$DOSNET/VC7/LIB;$DOSNET/VC7/PlatformSDK/lib/prerelease;$DOSNET/VC7/PlatformSDK/lib;$DOSNET/FrameworkSDK/lib;$LIB"
-fi
-
-
-if [ $PREFERRED_CC == "VS6" ]
-then
-       #       Visual Studio 6 defines. 
-       #
-       CYNET="${ROOT}/Program Files/Microsoft Visual Studio"
-       DOSNET="C:/Program Files/Microsoft Visual Studio"
-       PATH="$APPWEB_PATH:$CYNET/Common/MSDev98/bin:$CYNET/VC98/BIN:$CYNET/Common/IDE:$CYNET/Common/Tools/WinNT:$CYNET/Common/Tools:$PATH"
-       INCLUDE="$DOSNET/VC98/ATLMFC/INCLUDE;$DOSNET/VC98/INCLUDE;$DOSNET/VC98/MFC/INCLUDE;$INCLUDE"
-       LIB="$DOSNET/VC98/LIB;$DOSNET/VC98/MFC/LIB;$LIB"
-fi
-
-if [ $VXWORKS ]
-then
-       #
-       #       Required by VxWorks
-       #
-       WIND_BASE=C:/tornado
-       WIND_HOST_TYPE=x86-win32
-       WIND_REGISTRY=coalsack
-       WIND_LMHOST=coalsack
-       BLD_VX_HOST=i386-wrs-vxworks
-       VX_TOOLS=`cygpath $WIND_BASE`/host/$WIND_HOST_TYPE
-       export WIND_BASE WIND_HOST_TYPE WIND_REGISTRY WIND_LMHOST BLD_VX_HOST
-
-       #
-       #       Use cygwin make and tools by preference
-       #
-       PATH="$APPWEB_PATH:$VX_TOOLS/bin:$PATH"
-fi
-
-#
-#      Make required directories for CYGWIN
-#
-if [ ! -x /bin/bash.exe ]
-then
-       DIR=`cygpath -w "$HOME/winTools"`
-       echo -e "\nCreating /bin"
-       echo Mounting \"${DIR}\" as /bin\a
-       mount -f -b "$DIR" /bin
-fi
-
-if [ ! -x /tmp ]
-then
-       mkdir -p tmp
-       DIR=`cygpath -w "$HOME/tmp"`
-       echo -e "\nCreating /tmp"
-       echo Mounting \"${DIR}\" as /tmp\a
-       mount -f -b "$DIR" /tmp
-fi
-echo
-
-################################################################################
-#
-#      Do a bit of validation 
-#
-type cl 2>/dev/null >/dev/null
-if [ $? -ne 0 ]
-then
-       echo "Can't find compiler: cl. Check WIN/bashrc settings for PATH"
-fi
-set -o vi
-
-################################################################################
diff --git a/source4/lib/appweb/ejs-2.0/.exrc b/source4/lib/appweb/ejs-2.0/.exrc
deleted file mode 100644 (file)
index dd37846..0000000
+++ /dev/null
@@ -1 +0,0 @@
-set ts=4 sw=4
diff --git a/source4/lib/appweb/ejs-2.0/.ignore b/source4/lib/appweb/ejs-2.0/.ignore
deleted file mode 100644 (file)
index 866f06c..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-*.class
-*.dll
-*.exe
-*.exp
-*.jar
-*.lib
-*.lnk
-*.map
-*.new
-*.old
-*.pdb
-*.res
-*.sln
-*.suo
-*.sym
-*.tmp
-*.sav
-.ICEauthority
-.bash_history
-.changes
-.cvsignore
-.esd_auth
-.fonts.cache-1
-.viminfo
-make.dep
-thumbs.db
-vc70.pdb
-*.ncb
-*.opt
-*.idb
-*.pch
-*.dep
-*.aps
-all
-tmp
-make.vars
-sh.vars
-config.make
-config.h
-config.sh
-configure
-make.os
-.firstBuild
-.viminfo
-.ssh
-_viminfo
-buildConfig.h
-buildConfig.make
-buildConfig.sh
-.ccache
-appWeb.kdev*
-subversion
-.vimrc
-.subversion
-.ignore
-njs
-msvc
diff --git a/source4/lib/appweb/ejs-2.0/.loginrc b/source4/lib/appweb/ejs-2.0/.loginrc
deleted file mode 100644 (file)
index 90b76a2..0000000
+++ /dev/null
@@ -1,218 +0,0 @@
-#
-#      .loginrc -- Michael's login shell startup script (used only for Windows)
-#
-#      NOTE: this should not be distributed with releases.
-#
-#      Copyright (c) Mbedthis Software, 2003-2005. All Rights Reserved.
-#
-HOME=`pwd`
-
-TERM=ansi
-CYROOT=/cygdrive/c
-JDK="/cygdrive/c/program files/java/jdk1.5.0_07/bin"
-H=$CYROOT
-R=usr/svn/appWeb/main
-CDPATH=".:${H}/usr/svn/appWeb:${H}/${R}/http:${H}/${R}/http/modules:${H}/${R}:${H}/usr/svn/appWeb/releases:${H}/usr/svn/packages:${H}/usr/svn/bling/player/trunk:${H}/usr/svn/bling/player/trunk/src:${H}/usr/svn/bling/player/trunk/appdir:${H}/usr/svn:${H}:${H}/usr/svn:${H}/usr"
-APPWEB_PATH="${H}/${R}/bin/DEBUG:${H}/${R}/bin/RELEASE:${H}/${R}/bin:${H}/usr/bin"
-PATH="${H}/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$PATH:${H}/tcl/bin:${JDK}"
-
-CLASSPATH="c:/usr/svn/j/ggperf"
-PS1='`cygpath -m $PWD`> '
-SVN_EDITOR=C:/cygwin/bin/vim.exe
-
-umask 022
-
-export TERM CDPATH INCLUDE LIB LIBPATH PATH PS1 SVN_EDITOR MSCL CLASSPATH
-
-################################################################################
-#
-#      Set the dev environment PATH and other critical environment variables
-#
-
-# export BLD_ALTERNATE_CONFIG=WIN/buildConfig
-
-#
-#      Desired .NET Framework
-#
-# FRAMEWORK=v1.0.3705
-# FRAMEWORK=v1.1.4322
-FRAMEWORK=v2.0.50727
-
-#
-#      Desired C Compiler
-#
-# MSCL=VS2005
-# MSCL=VS2003
-# MSCL=VS.NET
-MSCL=VS6
-VXWORKS=1
-
-echo "Using compiler: $MSCL, .NET framework: $FRAMEWORK"
-
-#
-#      Setup for Visual Studio and SDK
-#
-if [ $MSCL == "VS2005" ]
-then
-       #
-       #       Visual Studio .NET 2005 defines. 
-       #
-       CYNET="$H/Program Files/Microsoft Visual Studio 8"
-       DOSNET="C:/Program Files/Microsoft Visual Studio 8"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC/BIN:$CYNET/VC/VCPackages:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin:$CYNET/SDK/v2.0/bin:$CYROOT/WINDOWS/Microsoft.NET/Framework/v2.0.40607:$CYNET/SDK/v2.0/bin:$PATH"
-       INCLUDE="$DOSNET/VC/ATLMFC/INCLUDE;$DOSNET/VC/INCLUDE;$DOSNET/VC/PlatformSDK/include;$DOSNET/SDK/v2.0/include;$INCLUDE"
-       LIB="$DOSNET/VC/ATLMFC/LIB;$DOSNET/VC/LIB;$DOSNET/VC/PlatformSDK/lib;$DOSNET/SDK/v2.0/lib;$LIB"
-       LIBPATH=c:/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK
-
-       #       MOB -- old
-       #       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC/BIN:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin/prerelease:$CYNET/Common7/Tools/bin:$CYNET/FrameworkSDK/bin:$H/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$PATH"
-       #       INCLUDE="$DOSNET/VC/ATLMFC/INCLUDE;$DOSNET/VC/INCLUDE;$DOSNET/VC/PlatformSDK/include/prerelease;$DOSNET/VC/PlatformSDK/include;$DOSNET/FrameworkSDK/include;$INCLUDE"
-       #       LIB="$DOSNET/VC/ATLMFC/LIB;$DOSNET/VC/LIB;$DOSNET/VC/PlatformSDK/lib/prerelease;$DOSNET/VC/PlatformSDK/lib;$DOSNET/FrameworkSDK/lib;$LIB"
-fi
-
-if [ $MSCL == "VS2003" ]
-then
-       #
-       #       Visual Studio .NET 2003 defines. 
-       #
-       CYNET="$H/Program Files/Microsoft Visual Studio .NET 2003"
-       DOSNET="C:/Program Files/Microsoft Visual Studio .NET 2003"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC7/BIN:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin/prerelease:$CYNET/Common7/Tools/bin:$CYNET/FrameworkSDK/bin:$H/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$CYNET/SDK/v1.1/bin:$PATH"
-       INCLUDE="$DOSNET/VC7/ATLMFC/INCLUDE;$DOSNET/VC7/INCLUDE;$DOSNET/VC7/PlatformSDK/include/prerelease;$DOSNET/VC7/PlatformSDK/include;$DOSNET/FrameworkSDK/include;$INCLUDE"
-       LIB="$DOSNET/VC7/ATLMFC/LIB;$DOSNET/VC7/LIB;$DOSNET/VC7/PlatformSDK/lib/prerelease;$DOSNET/VC7/PlatformSDK/lib;$DOSNET/FrameworkSDK/lib;$LIB"
-fi
-
-
-if [ $MSCL == "VS.NET" ]
-then
-       #
-       #       Visual Studio .NET defines. 
-       #
-       CYNET="$H/Program Files/Microsoft Visual Studio .NET"
-       DOSNET="C:/Program Files/Microsoft Visual Studio .NET"
-       PATH="$APPWEB_PATH:$CYNET/Common7/IDE:$CYNET/VC7/BIN:$CYNET/Common7/Tools:$CYNET/Common7/Tools/bin/prerelease:$CYNET/Common7/Tools/bin:$CYNET/FrameworkSDK/bin:$H/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$CYNET/SDK/v1.0/bin:$PATH"
-       INCLUDE="$DOSNET/VC7/ATLMFC/INCLUDE;$DOSNET/VC7/INCLUDE;$DOSNET/VC7/PlatformSDK/include/prerelease;$DOSNET/VC7/PlatformSDK/include;$DOSNET/FrameworkSDK/include;$INCLUDE"
-       LIB="$DOSNET/VC7/ATLMFC/LIB;$DOSNET/VC7/LIB;$DOSNET/VC7/PlatformSDK/lib/prerelease;$DOSNET/VC7/PlatformSDK/lib;$DOSNET/FrameworkSDK/lib;$LIB"
-fi
-
-
-if [ $MSCL == "VS6" ]
-then
-       #       Visual Studio 6 defines. 
-       #
-       CYNET="$H/Program Files/Microsoft Visual Studio"
-       DOSNET="C:/Program Files/Microsoft Visual Studio"
-       PATH="$APPWEB_PATH:$CYNET/Common/MSDev98/bin:$CYNET/VC98/BIN:$CYNET/Common/IDE:$CYNET/Common/Tools/WinNT:$CYNET/Common/Tools:$PATH"
-       # OLD PATH="$APPWEB_PATH:$CYNET/Common/IDE:$CYNET/VC98/BIN:$CYNET/Common/MSDev98/bin:$CYNET/Common/Tools:$CYNET/Common/Tools/bin/prerelease:$CYNET/Common/Tools/bin:$CYNET/FrameworkSDK/bin:$H/WINDOWS/Microsoft.NET/Framework/$FRAMEWORK:$PATH"
-       INCLUDE="$DOSNET/VC98/ATLMFC/INCLUDE;$DOSNET/VC98/INCLUDE;$DOSNET/VC98/MFC/INCLUDE;$INCLUDE"
-       LIB="$DOSNET/VC98/LIB;$DOSNET/VC98/MFC/LIB;$LIB"
-fi
-
-if [ $VXWORKS ]
-then
-       #
-       #       Required by VxWorks
-       #
-       WIND_BASE=C:/tornado
-       WIND_HOST_TYPE=x86-win32
-       WIND_REGISTRY=coalsack
-       WIND_LMHOST=coalsack
-       BLD_VX_HOST=i386-wrs-vxworks
-       export WIND_BASE WIND_HOST_TYPE WIND_REGISTRY WIND_LMHOST BLD_VX_HOST
-
-       VX_TOOLS=`cygpath $WIND_BASE`/host/$WIND_HOST_TYPE
-       #
-       #       Use cygwin make and tools by preference
-       #
-       PATH="$APPWEB_PATH:$PATH:$VX_TOOLS/bin"
-fi
-
-#
-#      Make required directories for CYGWIN
-#
-if [ ! -x /bin/bash.exe ]
-then
-       DIR=`cygpath -w "$HOME/winTools"`
-       echo -e "\nCreating /bin"
-       echo Mounting \"${DIR}\" as /bin\a
-       mount -f -b "$DIR" /bin
-fi
-
-if [ ! -x /tmp ]
-then
-       mkdir -p tmp
-       DIR=`cygpath -w "$HOME/tmp"`
-       echo -e "\nCreating /tmp"
-       echo Mounting \"${DIR}\" as /tmp\a
-       mount -f -b "$DIR" /tmp
-fi
-echo
-
-
-################################################################################
-#
-#      Do a bit of validation (MOB -- extend)
-#
-type cl 2>/dev/null >/dev/null
-if [ $? -ne 0 ]
-then
-       echo "Can't find compiler: cl. Check WIN/bashrc settings for PATH"
-fi
-
-################################################################################
-#
-#      Some convenient functions
-#
-pvi () {
-
-       pattern=$1
-       shift
-       files=$*
-       if [ -z "${files}" ]
-       then
-               files='*.c *.cpp *.h Makefile *.html *.aspx *.cs'
-       fi
-       vi -c "/${pattern}" $(grep -l "${pattern}" ${files})
-}
-
-################################################################################
-
-g() {
-       pattern=$1
-       shift
-       files=$*
-       if [ -z "${files}" ]
-       then
-               files=`echo *.c *.cpp *.h Makefile *.html *.aspx *.cs`
-       fi
-       eval grep "${pattern}" ${files}
-}
-
-################################################################################
-
-usedvi() {
-       pvi $1 $HOME/mr/*.c $HOME/mr/*.h $HOME/mr/WIN/*.c $HOME/lib/*/*.c 
-}
-
-################################################################################
-
-alias ls='ls -CF $*'
-alias lc='ls -CF $*'
-alias lr='ls -R $*'
-alias xwin='startxwin.sh'
-alias htmlview='"C:/Program Files/Internet Explorer/iexplore.exe" $*'
-set -o vi
-
-if [ `uname -o` = "Cygwin" ]
-then
-       alias vim='"C:/Program Files/vim/vim64/vim.exe" $*'
-       alias gvim='"C:/Program Files/vim/vim64/gvim.exe" $*'
-fi
-
-brew() {
-       "C:/Program Files/BREW SDK v2.1.3/Bin/BREW_Emulator.exe"
-}
-
-js() {
-       cscript /nologo $*
-}
diff --git a/source4/lib/appweb/ejs-2.0/ejs/.ignore b/source4/lib/appweb/ejs-2.0/ejs/.ignore
deleted file mode 100644 (file)
index 47f4ac6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ejs
-future
diff --git a/source4/lib/appweb/ejs-2.0/ejs/Makefile b/source4/lib/appweb/ejs-2.0/ejs/Makefile
deleted file mode 100644 (file)
index ea6be8c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#
-#      Makefile for Embedded Javascript (EJS) 
-#
-#      Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
-#
-
-#
-#      Ejs may be linked into shared handlers so we must build the objects both
-#      shared and static if --shared was specified to configure.
-#
-COMPILE                        := *.c
-EXPORT_OBJECTS := yes
-PRE_DIRS               := classes system db
-MAKE_IFLAGS            := -I../mpr -I../exml
-
-include                make.dep
-
-ifeq                   ($(BLD_PRODUCT),ejs)
-POST_DIRS              := package
-endif
-
-ifeq                   ($(BLD_FEATURE_TEST),1)
-POST_DIRS              += test
-endif
-
-ifeq                   ($(BLD_FEATURE_EJS_DB),1)
-LIBS                   += sqlite
-endif
-
-TARGETS                        += $(BLD_BIN_DIR)/libejs$(BLD_LIB)
-TARGETS                        += $(BLD_BIN_DIR)/ejs$(BLD_EXE)
-
-ifeq                   ($(BLD_FEATURE_EJS),1)
-compileExtra: $(TARGETS)
-endif
-
-$(BLD_BIN_DIR)/libejs$(BLD_LIB): files \
-       $(shell BLD_OBJ=$(BLD_OBJ) \; BLD_OBJ_DIR=$(BLD_OBJ_DIR) \; \
-               eval echo `cat files`)
-       @bld --library $(BLD_BIN_DIR)/libejs \
-               --objectsDir $(BLD_OBJ_DIR) --objectList files \
-               --libs "exml mpr $(LIBS)"
-
-$(BLD_BIN_DIR)/ejs$(BLD_EXE): $(BLD_BIN_DIR)/libejs$(BLD_LIB) \
-               $(BLD_BIN_DIR)/libmpr$(BLD_LIB) \
-               $(BLD_BIN_DIR)/libejs$(BLD_LIB) $(FILES)
-       @bld --executable $(BLD_BIN_DIR)/ejs$(BLD_EXE) \
-               --rpath "$(BLD_PREFIX)/bin" \
-               --preferStatic --smartLibs "ejs exml mpr $(LIBS)" \
-               --objectsDir $(BLD_OBJ_DIR) \
-               --objects "$(BLD_OBJ_DIR)/ejsCmd$(BLD_OBJ)"
-
-cleanExtra:
-       @echo "rm -f $(TARGETS)" | $(BLDOUT)
-       @rm -f $(TARGETS)
-       @rm -f $(BLD_BIN_DIR)/libejs.*
-
-## Local variables:
-## tab-width: 4
-## End:
-## vim: tw=78 sw=4 ts=4
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/.ignore b/source4/lib/appweb/ejs-2.0/ejs/classes/.ignore
deleted file mode 100644 (file)
index fb5a290..0000000
+++ /dev/null
@@ -1 +0,0 @@
-.updated
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/Makefile b/source4/lib/appweb/ejs-2.0/ejs/classes/Makefile
deleted file mode 100644 (file)
index ce12bb3..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-#      Makefile to build the EJS Classes
-#
-#      Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
-#
-
-COMPILE                        := *.c
-EXPORT_OBJECTS := yes
-MAKE_IFLAGS            := -I.. -I../../mpr -I../../exml
-
-include        make.dep
-
-compileExtra: .updated
-
-.updated: $(FILES)
-       @touch .updated
-
-## Local variables:
-## tab-width: 4
-## End:
-## vim: tw=78 sw=4 ts=4
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsArray.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsArray.c
deleted file mode 100644 (file)
index feb64b1..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *     @file   ejsArray.c
- *     @brief  Array class
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/************************************ Code ************************************/
-
-int ejsDefineArrayClass(Ejs *ep)
-{
-       if (ejsDefineClass(ep, "Array", "Object", ejsArrayConstructor) == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Routine to create the base array type
- */
-
-EjsVar *ejsCreateArrayInternal(EJS_LOC_DEC(ep, loc), int size)
-{
-       EjsProperty     *pp;
-       EjsVar          *obj, *vp;
-
-       /* MOB -- need to supply hash size -- max(size, 503)); */
-
-       obj = ejsCreateSimpleObjInternal(EJS_LOC_PASS(ep, loc), "Array");
-       if (obj == 0) {
-               mprAssert(0);
-               return obj;
-       }
-       obj->isArray = 1;
-
-       /*      MOB -- call constructor here and replace this code */
-
-       pp = ejsSetPropertyToInteger(ep, obj, "length", size);
-       ejsMakePropertyEnumerable(pp, 0);
-
-       vp = ejsGetVarPtr(pp);
-       vp->isArrayLength = 1;
-
-       return obj;
-}
-
-/******************************************************************************/
-
-EjsVar *ejsAddArrayElt(Ejs *ep, EjsVar *op, EjsVar *element, 
-       EjsCopyDepth copyDepth)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-       char                    idx[16];
-       int                             length;
-
-       mprAssert(op->isArray);
-
-       length = ejsGetPropertyAsInteger(ep, op, "length");
-
-       mprItoa(idx, sizeof(idx), length);
-       pp = ejsCreateProperty(ep, op, idx);
-       vp = ejsGetVarPtr(pp);
-
-       ejsWriteVar(ep, vp, element, copyDepth);
-
-       ejsSetPropertyToInteger(ep, op, "length", length + 1);
-
-       return vp;
-}
-
-/******************************************************************************/
-/*
- *     Constructor
- */
-
-int ejsArrayConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-       char                    idx[16];
-       int                             i, max;
-
-       thisObj->isArray = 1;
-       max = 0;
-
-       if (argc > 0) {
-               if (argc == 1 && ejsVarIsNumber(argv[0])) {
-                       /*
-                        *      x = new Array(size);
-                        */
-                       max = (int) ejsVarToInteger(argv[0]);
-
-               } else {
-                       /*
-                        *      x = new Array(element0, element1, ..., elementN):
-                        */
-                       max = argc;
-                       for (i = 0; i < max; i++) {
-                               mprItoa(idx, sizeof(idx), i);
-                               pp = ejsCreateSimpleProperty(ep, thisObj, idx);
-                               vp = ejsGetVarPtr(pp);
-                               ejsWriteVar(ep, vp, argv[i], EJS_SHALLOW_COPY);
-                       }
-               }
-       }
-
-       pp = ejsCreateSimpleProperty(ep, thisObj, "length");
-       ejsMakePropertyEnumerable(pp, 0);
-       vp = ejsGetVarPtr(pp);
-       ejsWriteVarAsInteger(ep, vp, max);
-       vp->isArrayLength = 1;
-
-       return 0;
-}
-
-/******************************************************************************/
-
-#else
-void ejsArrayDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsDate.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsDate.c
deleted file mode 100755 (executable)
index 096316a..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- *     @file   ejsStndClasses.c
- *     @brief  EJS support methods
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS && 0
-
-/******************************************************************************/
-/*
- *     Date constructor
-
- *
- *     Date();
- *     Date(milliseconds);
- *     Date(dateString);
- *     Date(year, month, date);
- *     Date(year, month, date, hour, minute, second);
- */
-
-int ejsDateConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       return 0;
-}
-
-/******************************************************************************/
-
-static int load(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       const char      *fileName;
-       XmlState        *parser;
-       Exml            *xp;
-       MprFile         *file;
-
-       if (argc != 1 || !ejsVarIsString(argv[0])) {
-               ejsError(ep, EJS_ARG_ERROR, "Bad args. Usage: load(fileName);");
-               return -1;
-       }
-       fileName = argv[0]->string;
-       
-       /* FUTURE -- not romable 
-               Need rom code in MPR not MprServices
-       */
-       file = mprOpen(ep, fileName, O_RDONLY, 0664);
-       if (file == 0) {
-               ejsError(ep, EJS_IO_ERROR, "Can't open: %s", fileName);
-               return -1;
-       }
-
-       xp = initParser(ep, thisObj, fileName);
-       parser = exmlGetParseArg(xp);
-
-       exmlSetInputStream(xp, readFileData, (void*) file);
-
-       if (exmlParse(xp) < 0) {
-               if (! ejsGotException(ep)) {
-                       ejsError(ep, EJS_IO_ERROR, "Can't parse XML file: %s\nDetails %s", 
-                               fileName, exmlGetErrorMsg(xp));
-               }
-               termParser(xp);
-               mprClose(file);
-               return -1;
-       }
-
-       ejsSetReturnValue(ep, parser->nodeStack[0].obj);
-
-       termParser(xp);
-       mprClose(file);
-
-       return 0;
-}
-
-/******************************************************************************/
-
-int ejsDefineDateClass(Ejs *ep)
-{
-       EjsVar  *dateClass;
-
-       dateClass = ejsDefineClass(ep, "Date", "Object", ejsDateConstructor);
-       if (dateClass == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-
-       ejsDefineCMethod(ep, dateClass, "getDate", xxxProc, EJS_NO_LOCAL);
-
-       /* Returns  "Friday" or 4 ? */
-       ejsDefineCMethod(ep, dateClass, "getDay", xxxProc, EJS_NO_LOCAL);
-
-       ejsDefineCMethod(ep, dateClass, "getMonth", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getFullYear", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getYear", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getHours", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getMinutes", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getSeconds", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getMilliseconds", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getTime", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "getTimeZoneOffset", xxxProc, EJS_NO_LOCAL);
-
-       ejsDefineCMethod(ep, dateClass, "parse", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setDate", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setMonth", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setFullYear", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setYear", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setMinutes", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setSeconds", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setMilliseconds", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "setTime", xxxProc, EJS_NO_LOCAL);
-
-       ejsDefineCMethod(ep, dateClass, "toString", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "toGMTString", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "toUTCString", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "toLocaleString", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "UTC", xxxProc, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, dateClass, "valueOf", xxxProc, EJS_NO_LOCAL);
-       /*
-               UTC: getUTCDate, getUTCDay, getUTCMonth, getUTCFullYear, getUTCHours,
-                       getUTCMinutes, getUTCSeconds, getUTCMilliseconds
-                       setUTCDate, setUTCDay, setUTCMonth, setUTCFullYear, setUTCHours,
-                       setUTCMinutes, setUTCSeconds, setUTCMilliseconds
-        */
-
-       return ejsObjHasErrors(dateClass) ? MPR_ERR_CANT_INITIALIZE : 0;
-}
-
-/******************************************************************************/
-/*
-       Time is since 1970/01/01 GMT
-
-       Normal: Fri Feb 10 2006 05:06:44 GMT-0800 (Pacific Standard Time)
-       UTC: Sat, 11 Feb 2006 05:06:44 GMT
-
-       //      Using without New
-
-       println(Date());
-
-       var myDate = new Date();
-       myDate.setFullYear(2010, 0, 14);
-
-       var today = new Date();
-
-       if (myDate > today) {
-       } else {
-       }
-
-
-        X=Date() should be equivalent to X=(new Date()).toString()
-
- */
-/******************************************************************************/
-
-#else
-void ejsStndClassesDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsError.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsError.c
deleted file mode 100755 (executable)
index 99445af..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- *     @file   ejsError.c
- *     @brief  Error class
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/************************************ Code ************************************/
-/*
- *     Parse the args and return the message. Convert non-string args using
- *     .toString.
- */
-
-static char *getMessage(Ejs *ep, int argc, EjsVar **argv)
-{
-       if (argc == 0) {
-               return "";
-
-       } else if (argc == 1) {
-               if (! ejsVarIsString(argv[0])) {
-                       if (ejsRunMethod(ep, argv[0], "toString", 0) < 0) {
-                               return 0;
-                       }
-                       return ep->result->string;
-
-               } else {
-                       return argv[0]->string;
-               }
-
-       } else {
-               /* Don't call ejsError here or it will go recursive. */
-               return 0;
-       }
-}
-
-
-/******************************************************************************/
-/*
- *     Error Constructor and also used for constructor for sub classes. 
- *
- *     Usage: new Error([message])
- */
-
-int ejsErrorCons(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       char    *msg, *stack;
-
-       msg = getMessage(ep, argc, argv);
-       if (msg == 0) {
-               return -1;
-       }
-
-       ejsSetPropertyToString(ep, thisObj, "name", ejsGetBaseClassName(thisObj));
-       ejsSetPropertyToString(ep, thisObj, "message", msg);
-
-       ejsSetPropertyToUndefined(ep, thisObj, "stack");
-
-       stack = ejsFormatStack(ep);
-       if (stack) {
-               ejsSetPropertyToString(ep, thisObj, "stack", stack);
-               mprFree(stack);
-       }
-
-       if (ejsObjHasErrors(thisObj)) {
-               return -1;
-       }
-
-       return 0;
-}
-
-/******************************************************************************/
-
-int ejsDefineErrorClasses(Ejs *ep)
-{
-       if (ejsDefineClass(ep, "Error", "Object", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "AssertError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "EvalError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "InternalError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "IOError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "MemoryError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "RangeError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "ReferenceError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "SyntaxError", "Error", ejsErrorCons) == 0 ||
-               ejsDefineClass(ep, "TypeError", "Error", ejsErrorCons) == 0) {
-
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-#else
-void ejsErrorDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsObject.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsObject.c
deleted file mode 100644 (file)
index 4f2e23b..0000000
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- *     @file   ejsObject.c
- *     @brief  Object class
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/****************************** Forward Declarations **************************/
-/*
- *     Support routines
- */
-
-static void formatVar(Ejs *ep, MprBuf *bp, EjsVar *vp);
-
-/******************************************************************************/
-/*
- *     Routine to create an object of the desired class. Class name may 
- *     contain "." 
- *
- *     The created object will be a stand-alone class NOT entered into the 
- *     properties of any other object. Callers must do this if required. ClassName 
- *     may contain "." and is interpreted relative to "obj" if supplied.
- *
- *     Note: this does not call the constructors for the various objects and base
- *     classes.
- */
-
-EjsVar *ejsCreateSimpleObjInternal(EJS_LOC_DEC(ep, loc), const char *className)
-{
-       EjsVar  *baseClass;
-
-       if (className && *className) {
-               baseClass = ejsGetClass(ep, 0, className);
-               if (baseClass == 0) {
-                       mprError(ep, MPR_LOC, "Can't find base class %s", className);
-                       return 0;
-               }
-       } else {
-               baseClass = 0;
-       }
-
-       return ejsCreateSimpleObjUsingClassInt(EJS_LOC_PASS(ep, loc), 
-               baseClass);
-}
-
-/******************************************************************************/
-/*
- *     Create an object based upon the specified base class object. It will be a 
- *     stand-alone class not entered into the properties of any other object. 
- *     Callers must do this if required. 
- *
- *     Note: this does not call the constructors for the various objects and base
- *     classes.
- */
-
-EjsVar *ejsCreateSimpleObjUsingClassInt(EJS_LOC_DEC(ep, loc), 
-       EjsVar *baseClass)
-{
-       EjsVar          *vp;
-
-       mprAssert(baseClass);
-
-       if (baseClass == 0) {
-               mprError(ep, MPR_LOC, "Missing base class\n");
-               return 0;
-       }
-
-       vp = ejsCreateObjVarInternal(EJS_LOC_PASS(ep, loc));
-       if (vp == 0) {
-               return vp;
-       }
-
-       ejsSetBaseClass(vp, baseClass);
-
-       /*
-        *      This makes all internal method accesses faster
-        *      NOTE: this code is duplicated in ejsCreateSimpleClass
-        */
-       mprAssert(vp->objectState);
-       vp->objectState->methods = baseClass->objectState->methods;
-
-       return vp;
-}
-
-/******************************************************************************/
-
-void ejsSetMethods(Ejs *ep, EjsVar *op)
-{
-       op->objectState->methods = ep->global->objectState->methods;
-}
-
-/******************************************************************************/
-/******************************** Internal Methods ****************************/
-/******************************************************************************/
-
-static EjsVar *createObjProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsGetVarPtr(ejsCreateSimpleProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-
-static int deleteObjProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsDeleteProperty(ep, obj, property);
-}
-
-/******************************************************************************/
-
-static EjsVar *getObjProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsGetVarPtr(ejsGetSimpleProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-/*
- *     Set the value of a property. Create if it does not exist
- */
-
-static EjsVar *setObjProperty(Ejs *ep, EjsVar *obj, const char *property, 
-       const EjsVar *value)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-
-       pp = ejsCreateSimpleProperty(ep, obj, property);
-       if (pp == 0) {
-               mprAssert(pp);
-               return 0;
-       }
-       vp = ejsGetVarPtr(pp);
-       if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) < 0) {
-               mprAssert(0);
-               return 0;
-       }
-       return ejsGetVarPtr(pp);
-}
-
-/******************************************************************************/
-/*********************************** Constructors *****************************/
-/******************************************************************************/
-#if UNUSED
-/*
- *     Object constructor. We don't use this for speed. Think very carefully if
- *     you add an object constructor.
- */
-
-int ejsObjectConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       return 0;
-}
-
-#endif
-/******************************************************************************/
-/******************************** Visible Methods *****************************/
-/******************************************************************************/
-
-static int cloneMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       int             copyDepth;
-
-       copyDepth = EJS_DEEP_COPY;
-
-       if (argc == 1 && ejsVarToBoolean(argv[0])) {
-               copyDepth =  EJS_RECURSIVE_DEEP_COPY;
-       }
-
-       ejsWriteVar(ep, ep->result, thisObj, copyDepth);
-
-       return 0;
-}
-
-/******************************************************************************/
-
-static int toStringMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       MprBuf  *bp;
-       int             saveMaxDepth, saveDepth, saveFlags;
-
-       saveMaxDepth = ep->maxDepth;
-
-       if (argc >= 1) {
-               ep->maxDepth = ejsVarToInteger(argv[0]);
-       } else if (ep->maxDepth == 0) {
-               ep->maxDepth = MAXINT;
-       }
-
-       saveFlags = ep->flags;
-       if (argc >= 2) {
-               if (ejsVarToBoolean(argv[1])) {
-                       ep->flags |= EJS_FLAGS_ENUM_HIDDEN;
-               }
-       }
-       if (argc == 3) {
-               if (ejsVarToBoolean(argv[2])) {
-                       ep->flags |= EJS_FLAGS_ENUM_BASE;
-               }
-       }
-
-       bp = mprCreateBuf(ep, 0, 0);
-
-       saveDepth = ep->depth;
-
-       formatVar(ep, bp, thisObj);
-
-       ep->depth = saveDepth;
-       ep->maxDepth = saveMaxDepth;
-
-       mprAddNullToBuf(bp);
-
-       ejsWriteVarAsString(ep, ep->result, mprGetBufStart(bp));
-       mprFree(bp);
-
-       ep->flags = saveFlags;
-
-       return 0;
-}
-
-/******************************************************************************/
-
-static int valueOfMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       if (argc != 0) {
-               mprAssert(0);
-               return -1;
-       }
-
-       switch (thisObj->type) {
-       default:
-       case EJS_TYPE_UNDEFINED:
-       case EJS_TYPE_NULL:
-       case EJS_TYPE_CMETHOD:
-       case EJS_TYPE_OBJECT:
-       case EJS_TYPE_METHOD:
-       case EJS_TYPE_STRING_CMETHOD:
-               ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY);
-               break;
-
-       case EJS_TYPE_STRING:
-               ejsWriteVarAsInteger(ep, ep->result, atoi(thisObj->string));
-               break;
-
-       case EJS_TYPE_BOOL:
-       case EJS_TYPE_INT:
-#if BLD_FEATURE_INT64
-       case EJS_TYPE_INT64:
-#endif
-#if BLD_FEATURE_FLOATING_POINT
-       case EJS_TYPE_FLOAT:
-#endif
-               ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY);
-               break;
-       } 
-       return 0;
-}
-
-/******************************************************************************/
-
-static int hashGetAccessor(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       ejsSetReturnValueToInteger(ejs, (int) thisObj->objectState);
-       return 0;
-}
-
-/******************************************************************************/
-
-static int classGetAccessor(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       if (thisObj->objectState == 0 || thisObj->objectState->baseClass == 0) {
-               ejsSetReturnValueToString(ejs, "object");
-       } else {
-               ejsSetReturnValueToString(ejs, 
-                       thisObj->objectState->baseClass->objectState->className);
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Format an object. Called recursively to format properties and contained 
- *     objects.
- */
-
-static void formatVar(Ejs *ep, MprBuf *bp, EjsVar *vp)
-{
-       EjsProperty     *pp, *first;
-       EjsVar          *propVar, *baseClass;
-       char            *buf, *value;
-       int                     i;
-
-       if (vp->type == EJS_TYPE_OBJECT) {
-               if (!vp->objectState->visited) {
-
-                       mprPutStringToBuf(bp, vp->isArray ? "[\n" : "{\n");
-
-                       ep->depth++;
-                       vp->objectState->visited = 1;
-
-                       if (ep->depth <= ep->maxDepth) {
-                               first = ejsGetFirstProperty(vp, EJS_ENUM_ALL);
-
-                               if (ep->flags & EJS_FLAGS_ENUM_BASE) {
-                                       baseClass = vp->objectState->baseClass;
-                                       if (baseClass) {
-                                               for (i = 0; i < ep->depth; i++) {
-                                                       mprPutStringToBuf(bp, "  ");
-                                               }
-                                               mprPutStringToBuf(bp, baseClass->objectState->objName);
-                                               mprPutStringToBuf(bp, ": /* Base Class */ ");
-                                               if (baseClass->objectState == vp->objectState) {
-                                                       value = "this";
-                                               } else if (ejsRunMethodCmd(ep, baseClass, "toString", 
-                                                               "%d", ep->maxDepth) < 0) {
-                                                       value = "[object Object]";
-                                               } else {
-                                                       mprAssert(ejsVarIsString(ep->result));
-                                                       value = ep->result->string;
-                                               }
-                                               mprPutStringToBuf(bp, value);
-                                               if (first) {
-                                                       mprPutStringToBuf(bp, ",\n");
-                                               }
-                                       }
-                               }
-
-                               pp = first;
-                               while (pp) {
-                                       if (! pp->dontEnumerate || 
-                                                       ep->flags & EJS_FLAGS_ENUM_HIDDEN) {
-                                               for (i = 0; i < ep->depth; i++) {
-                                                       mprPutStringToBuf(bp, "  ");
-                                               }
-
-                                               if (! vp->isArray) {
-                                                       mprPutStringToBuf(bp, pp->name);
-                                                       mprPutStringToBuf(bp, ": ");
-                                               }
-
-                                               propVar = ejsGetVarPtr(pp);
-                                               if (propVar->type == EJS_TYPE_OBJECT) {
-                                                       if (pp->var.objectState == vp->objectState) {
-                                                               value = "this";
-                                                       } else if (ejsRunMethodCmd(ep, propVar, 
-                                                                       "toString", "%d", ep->maxDepth) < 0) {
-                                                               value = "[object Object]";
-                                                       } else {
-                                                               mprAssert(ejsVarIsString(ep->result));
-                                                               value = ep->result->string;
-                                                       }
-                                                       mprPutStringToBuf(bp, value);
-
-                                               } else {
-                                                       formatVar(ep, bp, &pp->var);
-                                               }
-
-                                               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-                                               if (pp) {
-                                                       mprPutStringToBuf(bp, ",\n");
-                                               }
-                                       } else {
-                                               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-                                       }
-                               }
-                       }
-                       vp->objectState->visited = 0;
-
-                       mprPutCharToBuf(bp, '\n');
-
-                       ep->depth--;
-                       for (i = 0; i < ep->depth; i++) {
-                               mprPutStringToBuf(bp, "  ");
-                       }
-                       mprPutCharToBuf(bp, vp->isArray ? ']' : '}');
-               }
-
-       } else if (vp->type == EJS_TYPE_METHOD) {
-
-               mprPutStringToBuf(bp, "function (");
-               for (i = 0; i < vp->method.args->length; i++) {
-                       mprPutStringToBuf(bp, vp->method.args->items[i]);
-                       if ((i + 1) < vp->method.args->length) {
-                               mprPutStringToBuf(bp, ", ");
-                       }
-               }
-               mprPutStringToBuf(bp, ") {");
-               mprPutStringToBuf(bp, vp->method.body);
-               for (i = 0; i < ep->depth; i++) {
-                       mprPutStringToBuf(bp, "  ");
-               }
-               mprPutStringToBuf(bp, "}");
-
-       } else {
-
-               if (vp->type == EJS_TYPE_STRING) {
-                       mprPutCharToBuf(bp, '\"');
-               }
-
-               /*
-                *      We don't use ejsVarToString for arrays, objects and strings.
-                *      This is because ejsVarToString does not call "obj.toString"
-                *      and it is not required for strings.
-                *      MOB - rc
-                */
-               buf = ejsVarToString(ep, vp);
-               mprPutStringToBuf(bp, buf);
-
-               if (vp->type == EJS_TYPE_STRING) {
-                       mprPutCharToBuf(bp, '\"');
-               }
-       }
-}
-
-/******************************************************************************/
-/*
- *     mixin code. Blends code at the "thisObj" level.
- */ 
-
-static int mixinMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsProperty     *pp;
-       char            *buf;
-       int                     fid, i, rc;
-
-       mprAssert(argv);
-
-       /*
-        *      Create a variable scope block set to the current object
-        */
-       rc = 0;
-       fid = ejsSetBlock(ep, thisObj);
-
-       for (i = 0; i < argc; i++) {
-
-               if (ejsVarIsString(argv[i])) {
-                       rc = ejsEvalScript(ep, argv[i]->string, 0);
-
-               }  else if (ejsVarIsObject(argv[i])) {
-
-                       /*      MOB -- OPT. When we have proper scope chains, we should just
-                               refer to the module and not copy */
-                       pp = ejsGetFirstProperty(argv[i], EJS_ENUM_ALL);
-                       while (pp) {
-                               ejsSetProperty(ep, thisObj, pp->name, ejsGetVarPtr(pp));
-                               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-                       }
-
-               } else {
-                       /* MOB - rc */
-                       buf = ejsVarToString(ep, argv[i]);
-                       rc = ejsEvalScript(ep, buf, 0);
-
-               }
-               if (rc < 0) {
-                       ejsCloseBlock(ep, fid);
-                       return -1;
-               }
-       } 
-       ejsCloseBlock(ep, fid);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Create the object class
- */
-
-int ejsDefineObjectClass(Ejs *ep)
-{
-       EjsMethods      *methods;
-       EjsProperty     *objectProp, *protoProp;
-       EjsVar          *op, *globalClass;
-
-       /*
-        *      Must specially hand-craft the object class as it is the base class
-        *      of all objects.
-        */
-       op = ejsCreateObjVar(ep);
-       if (op == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-       ejsSetClassName(ep, op, "Object");
-
-       /*
-        *      Don't use a constructor for objects for speed
-        */
-       ejsMakeClassNoConstructor(op);
-
-       /*
-        *      MOB -- should mark properties as public / private and class or instance.
-        */
-       ejsDefineCMethod(ep, op, "clone", cloneMethod, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, op, "toString", toStringMethod, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, op, "valueOf", valueOfMethod, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, op, "mixin", mixinMethod, EJS_NO_LOCAL);
-
-       ejsDefineCAccessors(ep, op, "hash", hashGetAccessor, 0, EJS_NO_LOCAL);
-       ejsDefineCAccessors(ep, op, "baseClass", classGetAccessor, 0, EJS_NO_LOCAL);
-
-       /*
-        *      MOB -- make this an accessor
-        */
-       protoProp = ejsSetProperty(ep, op, "prototype", op);
-       if (protoProp == 0) {
-               ejsFreeVar(ep, op);
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       /*
-        *      Setup the internal methods. Most classes will never override these.
-        *      The XML class will. We rely on talloc to free internal. Use "ep" as
-        *      the parent as we need "methods" to live while the interpreter lives.
-        */
-       methods = mprAllocTypeZeroed(ep, EjsMethods);
-       op->objectState->methods = methods;
-
-       methods->createProperty = createObjProperty;
-       methods->deleteProperty = deleteObjProperty;
-       methods->getProperty = getObjProperty;
-       methods->setProperty = setObjProperty;
-
-       objectProp = ejsSetPropertyAndFree(ep, ep->global, "Object", op);
-
-       /*
-        *      Change the global class to use Object's methods 
-        */
-       globalClass = ep->service->globalClass;
-       globalClass->objectState->methods = methods;
-       globalClass->objectState->baseClass = ejsGetVarPtr(protoProp);
-
-       ep->objectClass = ejsGetVarPtr(objectProp);
-
-       if (ejsObjHasErrors(ejsGetVarPtr(objectProp))) {
-               ejsFreeVar(ep, op);
-               return MPR_ERR_CANT_CREATE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-#else
-void ejsObjectDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsStndClasses.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsStndClasses.c
deleted file mode 100644 (file)
index fd6cda7..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *     @file   ejsStndClasses.c
- *     @brief  EJS support methods
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/******************************************************************************/
-/******************************* Function Class *******************************/
-/******************************************************************************/
-
-int ejsDefineFunctionClass(Ejs *ep)
-{
-       if (ejsDefineClass(ep, "Function", "Object", ejsFunctionConstructor) == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Function constructor
- */
-
-int ejsFunctionConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       int             rc;
-
-       if (argc != 1 || !ejsVarIsString(argv[0])) {
-               ejsArgError(ep, "Usage: Function(\"function (arg) { script };\");");
-       }
-
-       rc = ejsEvalScript(ep, argv[0]->string, 0);
-
-       /*
-        *      Note: this will convert the object into a method. It will cease to be
-        *      an object.
-        */
-       if (rc == 0 && ejsVarIsMethod(ep->result)) {
-               /*
-                *      Must make thisObj collectable.
-                */
-               ejsMakeObjPermanent(thisObj, 0);
-               ejsMakeObjLive(thisObj, 1);
-               mprAssert(ejsObjIsCollectable(thisObj));
-               ejsWriteVar(ep, thisObj, ep->result, EJS_SHALLOW_COPY);
-       }
-       return rc;
-}
-
-/******************************************************************************/
-/******************************* Boolean Class ********************************/
-/******************************************************************************/
-
-int ejsDefineBooleanClass(Ejs *ep)
-{
-       if (ejsDefineClass(ep, "Boolean", "Object", ejsBooleanConstructor) == 0){
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Boolean constructor
- */
-
-int ejsBooleanConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       return 0;
-}
-
-/******************************************************************************/
-/******************************** Number Class ********************************/
-/******************************************************************************/
-
-int ejsDefineNumberClass(Ejs *ep)
-{
-       if (ejsDefineClass(ep, "Number", "Object", ejsNumberConstructor) == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Number constructor
- */
-
-int ejsNumberConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       return 0;
-}
-
-/******************************************************************************/
-
-#else
-void ejsStndClassesDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsString.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsString.c
deleted file mode 100644 (file)
index 2339650..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- *     @file   ejsString.c
- *     @brief  EJScript string class
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-/******************************************************************************/
-/*********************************** Constructors *****************************/
-/******************************************************************************/
-/*
- *     String constructor. 
- */
-
-int ejsStringConstructor(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       char    *str;
-
-       if (argc == 0) {
-               ejsSetReturnValueToString(ejs, "");
-
-       } else if (argc == 1) {
-               /* MOB -- rc */
-               str = ejsVarToString(ejs, argv[0]);
-               ejsSetReturnValueToString(ejs, str);
-
-       } else {
-               ejsArgError(ejs, "usage: String([var])");
-               return -1;
-       }
-
-       return 0;
-}
-
-/******************************************************************************/
-/******************************** Visible Methods *****************************/
-/******************************************************************************/
-/*
- *     Return a string containing the character at a given index
- *
- *     String string.charAt(Number)
- */
-
-static int charAt(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsNum          num;
-       char            buf[2];
-
-       if (argc != 1) {
-               ejsArgError(ejs, "usage: charAt(integer)");
-               return -1;
-       }
-
-       num = ejsVarToNumber(argv[0]);
-       if (num < 0 || num >= thisObj->length) {
-               ejsError(ejs, EJS_RANGE_ERROR, "Bad index");
-               return -1;
-       }
-
-       mprAssert(ejsVarIsString(thisObj));
-
-       buf[0] = argv[0]->string[num];
-       buf[1] = '\0';
-       ejsSetReturnValueToString(ejs, buf);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Return an integer containing the character at a given index
- *
- *     Number string.charCodeAt(Number)
- */
-
-static EjsNum charCodeAt(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsNum                  num;
-
-       if (argc != 1) {
-               ejsArgError(ejs, "usage: charCodeAt(integer)");
-               return -1;
-       }
-
-       num = ejsVarToNumber(argv[0]);
-       if (num < 0 || num >= thisObj->length) {
-               ejsError(ejs, EJS_RANGE_ERROR, "Bad index");
-               return -1;
-       }
-       ejsSetReturnValueToNumber(ejs, (EjsNum) argv[0]->string[num]);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Catenate
- *
- *     String string.catenate(var, ...)
- */
-
-static int concat(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       int                             i;
-
-       if (argc == 0) {
-               ejsArgError(ejs, "usage: concat(String, ...)");
-               return -1;
-       }
-
-       mprAssert(ejsVarIsString(thisObj));
-
-       for (i = 0; i < argc; i++) {
-               if (ejsStrcat(ejs, thisObj, argv[i]) < 0) {
-                       ejsMemoryError(ejs);
-                       return -1;
-               }
-       }
-       ejsSetReturnValue(ejs, thisObj);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Return the position of the first occurance of a substring
- *
- *     Number string.indexOf(String subString [, Number start])
- */
-
-static int indexOf(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       char    *pat, *s1, *s2, *origin;
-       int             start, i;
-
-       if (argc == 0 || argc > 2) {
-               ejsArgError(ejs, "usage: indexOf(String [, Number])");
-               return -1;
-       }
-
-       pat = ejsVarToString(ejs, argv[0]);
-
-       if (argc == 2) {
-               start = ejsVarToNumber(argv[1]);
-               if (start > thisObj->length) {
-                       start = thisObj->length;
-               }
-       } else {
-               start = 0;
-       }
-
-       i = start;
-       for (origin = &thisObj->string[i]; i < thisObj->length; i++, origin++) {
-               s1 = origin;
-               for (s2 = pat; *s1 && *s2; s1++, s2++) {
-                       if (*s1 != *s2) {
-                               break;
-                       }
-               }
-               if (*s2 == '\0') {
-                       ejsSetReturnValueToNumber(ejs, (EjsNum) (origin - thisObj->string));
-               }
-       }
-
-       ejsSetReturnValueToNumber(ejs, (EjsNum) -1);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Return the position of the last occurance of a substring
- *
- *     Number string.lastIndexOf(String subString [, Number start])
- */
-
-static int lastIndexOf(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       char    *pat, *s1, *s2, *origin;
-       int             start;
-
-       if (argc == 0 || argc > 2) {
-               ejsArgError(ejs, "usage: indexOf(String [, Number])");
-               return -1;
-       }
-
-       pat = ejsVarToString(ejs, argv[0]);
-
-       if (argc == 2) {
-               start = ejsVarToNumber(argv[1]);
-               if (start > thisObj->length) {
-                       start = thisObj->length;
-               }
-       } else {
-               start = 0;
-       }
-
-       origin = &thisObj->string[thisObj->length - 1];
-       for (; origin >= &thisObj->string[start]; origin--) {
-
-               s1 = origin;
-               for (s2 = pat; *s1 && *s2; s1++, s2++) {
-                       if (*s1 != *s2) {
-                               break;
-                       }
-               }
-               if (*s2 == '\0') {
-                       ejsSetReturnValueToNumber(ejs, (EjsNum) (origin - thisObj->string));
-               }
-       }
-
-       ejsSetReturnValueToNumber(ejs, (EjsNum) -1);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Return a substring
- *
- *     Number string.slice(Number start, Number end)
- */
-
-static int slice(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsNum          start, end;
-
-       if (argc != 2) {
-               ejsArgError(ejs, "usage: slice(Number, Number)");
-               return -1;
-       }
-
-       start = ejsVarToNumber(argv[0]);
-       end = ejsVarToNumber(argv[1]);
-       if (start < 0 || start >= thisObj->length) {
-               ejsError(ejs, EJS_RANGE_ERROR, "Bad start index");
-               return-1;
-       }
-       if (end < 0 || end >= thisObj->length) {
-               ejsError(ejs, EJS_RANGE_ERROR, "Bad end index");
-               return -1;
-       }
-
-       mprAssert(ejsVarIsString(thisObj));
-
-       ejsSetReturnValueToBinaryString(ejs, (uchar*) &thisObj->string[start],
-               end - start);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Split a string
- *
- *     Number string.split(String delimiter [, Number limit])
- */
-
-static int split(Ejs *ejs, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsVar          *array, *vp;
-       char            *delim, *last, *cp;
-       int                     len, limit, alloc;
-
-       if (argc == 0 || argc > 2) {
-               ejsArgError(ejs, "usage: split(String [, Number])");
-               return -1;
-       }
-
-       delim = ejsVarToStringEx(ejs, argv[0], &alloc);
-
-       limit = ejsVarToNumber(argv[1]);
-
-       array = ejsCreateArray(ejs, 0);
-
-       len = strlen(delim);
-
-       last = thisObj->string;
-       for (cp = last; *cp; cp++) {
-               if (*cp == *delim && strncmp(cp, delim, len) == 0) {
-                       if (cp > last) {
-                               vp = ejsCreateBinaryStringVar(ejs, (uchar*) last, (cp - last));
-                               ejsAddArrayElt(ejs, array, vp, EJS_SHALLOW_COPY);
-                               ejsFreeVar(ejs, vp);
-                       }
-               }
-       }
-
-       ejsSetReturnValue(ejs, array);
-       ejsFreeVar(ejs, array);
-
-       if (alloc) {
-               mprFree(delim);
-       }
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Create the object class
- */
-
-int ejsDefineStringClass(Ejs *ejs)
-{
-       EjsVar          *sc;
-
-       sc = ejsDefineClass(ejs, "String", "Object", ejsStringConstructor);
-       if (sc == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-
-       ejsDefineCMethod(ejs, sc, "charAt", charAt, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "charCodeAt", charCodeAt, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "concat", concat, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "indexOf", indexOf, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "lastIndexOf", lastIndexOf, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "slice", slice, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "split", split, EJS_NO_LOCAL);
-#if UNUSED
-       ejsDefineCMethod(ejs, sc, "match", match, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "replace", replace, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "search", search, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "substring", substring, EJS_NO_LOCAL);
-       //      MOB bad name
-       ejsDefineCMethod(ejs, sc, "substr", substr, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "toLowerCase", toLowerCase, EJS_NO_LOCAL);
-       ejsDefineCMethod(ejs, sc, "toUpperCase", toUpperCase, EJS_NO_LOCAL);
-
-       //      Static method
-       ejsDefineCMethod(ejs, sc, "fromCharCode", fromCharCode, 0, EJS_NO_LOCAL);
-#endif
-
-       if (ejsObjHasErrors(sc)) {
-               ejsFreeVar(ejs, sc);
-               return MPR_ERR_CANT_CREATE;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/classes/ejsXml.c b/source4/lib/appweb/ejs-2.0/ejs/classes/ejsXml.c
deleted file mode 100644 (file)
index a2ef8d1..0000000
+++ /dev/null
@@ -1,1327 +0,0 @@
-/*
- *     @file   ejsXml.c
- *     @brief  E4X XML support
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/************************************ Doc *************************************/
-/*
- *     Javascript class definition
- *
- *     class XML {
- *             public XML();
- *             public XML(string xmlString);                   // "<tag... "
- *             public XML(string file);                                // "file"
- *
- *             public void load(string file);
- *             public void save(string file);
- *             public Array children();
- *             public Array attributes();
- *     }
- *
-       [[Internal Properties / Methods]]
-       - prototype                             - Ptr to class prototype (base class)
-       - class                                 - Type of class
-               Object.prototype.toString
-       - Value                                 - 
-       - Get(name)                             - Returns the value
-       - Put(name, value)              - Sets the value
-       - HasProperty(name)             - Bool if property exists
-       - Delete(name)                  - Delete property
-       - DefaultValue(hint)    - Return default primitive (not obj) value
-               toString, if result is obj, then call valueOf
-               if hint is number, then call valueOf, then toString
-       - Construct(arg list)   - Constructor
-       - Call(arg list)                - Function call
-       - HasInstance(value)    - ??
-       - Scope                                 - Frame scope chain
-       - Match(string, index)  - Regexp match
-
-       - Example:
-               XML attribute @name
-               @*
-               *
-               var node = new XML("<order/>");
-               Operators:
-                       var prices = order..price;
-                       var urgentItems = order.item(@level == "rush");
-                       var itemAttrs = order.item[0].@*;                       # @ for attributes
-               XML Literals
-                       order.customer.address = 
-                               <address>.....
-                                       <zip>{zipCode}</zip>                    Where {var} is a JS var
-                                       <tag attribute={prefix}> ...    Also for attributes
-                               </address>
-               Omit namespaces
-               Example:
-                       var html = <html/>;
-                       html.head.title = "My title";
-                       head.body@bgcolor = "#e4e4e4";
-*/
-
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-#include       "exml.h"
-
-/************************************ Data ************************************/
-#if BLD_FEATURE_EJS_E4X
-
-/*
- *     Per tag state
- */
-typedef struct XmlTagState {
-       EjsVar  *obj;
-       EjsVar  *attributes;
-       EjsVar  *comments;
-} XmlTagState;
-
-/*
- *     Parser state
- */
-typedef struct XmlState {
-       Ejs                     *ep;
-       EjsVar          *xmlClass;
-       EjsVar          *xmlListClass;
-       XmlTagState     nodeStack[E4X_MAX_NODE_DEPTH];
-       int                     topOfStack;
-       long            inputSize;
-       long            inputPos;
-       const char      *inputBuf;
-       const char      *fileName;
-} XmlState;
-
-/****************************** Forward Declarations **************************/
-/*
- *     XML methods
- */
-static int     text(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     name(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     load(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     save(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     toString(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     valueOf(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-
-/* MOB -- temp */
-static int     getList(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int setText(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-
-#if FUTURE
-static int     length(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     toXmlString(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-
-static int     appendChild(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     attributes(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     child(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     children(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     comments(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     decendants(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     elements(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     insertChildAfter(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     insertChildBefore(Ejs *ep, EjsVar *thisObj, int argc, 
-                               EjsVar **argv);
-static int     replace(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     setName(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-static int     text(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv);
-#endif
-
-/*
- *     Internal methods
- */
-static EjsVar  *createXmlProperty(Ejs *ep, EjsVar *obj, const char *property);
-static int             deleteXmlProperty(Ejs *ep, EjsVar *obj, const char *property);
-static EjsVar  *getXmlProperty(Ejs *ep, EjsVar *obj, const char *property);
-static EjsVar  *setXmlProperty(Ejs *ep, EjsVar *obj, const char *property, 
-                                       const EjsVar *value);
-static int             loadXmlString(Ejs *ep, EjsVar *thisObj, const char *xmlString);
-
-/*
- *     XMLList methods
- */
-static EjsVar  *createXmlListProperty(Ejs *ep, EjsVar *obj, 
-                                       const char *property);
-static int             deleteXmlListProperty(Ejs *ep, EjsVar *obj, 
-                                       const char *property);
-static EjsVar  *getXmlListProperty(Ejs *ep, EjsVar *obj, const char *property);
-static EjsVar  *setXmlListProperty(Ejs *ep, EjsVar *obj, const char *property, 
-                                       const EjsVar *value);
-
-/*
- *     Misc
- */
-static int     readFileData(Exml *xp, void *data, char *buf, int size);
-static int     readStringData(Exml *xp, void *data, char *buf, int size);
-static int     parserHandler(Exml *xp, int state, const char *tagName, 
-                               const char *attName, const char *value);
-static void termParser(Exml *xp);
-static Exml *initParser(Ejs *ep, EjsVar *thisObj, const char *fileName);
-static int     getNumElements(EjsVar *obj);
-static int     getText(MprBuf *buf, EjsVar *obj);
-static int     xmlToString(Ejs *ep, MprBuf *buf, EjsVar *obj, int indentLevel);
-static void indent(MprBuf *bp, int level);
-static char *cleanTagName(char *name);
-
-/******************************************************************************/
-/*
- *     Define the E4X classes (XML, XMLList)
- */
-
-int ejsDefineXmlClasses(Ejs *ep)
-{
-       EjsMethods      *methods;
-       EjsVar          *xmlClass, *xmlListClass;
-
-       /*
-        *      Create the XML class
-        */
-       xmlClass = ejsDefineClass(ep, "XML", "Object", ejsXmlConstructor);
-       if (xmlClass == 0) {
-               return MPR_ERR_CANT_INITIALIZE;
-       }
-
-       /*
-        *      Define the XML class methods
-        */
-       ejsDefineCMethod(ep, xmlClass, "text", text, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "name", name, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "load", load, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "save", save, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "toString", toString, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "valueOf", valueOf, EJS_NO_LOCAL);
-
-/*     MOB -- temporary only */
-       ejsDefineCMethod(ep, xmlClass, "getList", getList, EJS_NO_LOCAL);
-       ejsDefineCMethod(ep, xmlClass, "setText", setText, EJS_NO_LOCAL);
-
-       /*
-        *      Setup the XML internal methods. 
-        */
-       methods = mprAllocTypeZeroed(ep, EjsMethods);
-       xmlClass->objectState->methods = methods;
-
-       methods->createProperty = createXmlProperty;
-       methods->deleteProperty = deleteXmlProperty;
-       methods->getProperty = getXmlProperty;
-       methods->setProperty = setXmlProperty;
-
-       /*
-        *      Create the XMLList class
-        */
-       xmlListClass = ejsDefineClass(ep, "XMLList", "Array", 
-               ejsXmlListConstructor);
-
-       /*
-        *      Define the XMLList class methods
-        */
-
-       /*
-        *      Setup the XML internal methods. 
-        */
-       methods = mprAllocTypeZeroed(ep, EjsMethods);
-       xmlListClass->objectState->methods = methods;
-
-       methods->createProperty = createXmlListProperty;
-       methods->deleteProperty = deleteXmlListProperty;
-       methods->getProperty = getXmlListProperty;
-       methods->setProperty = setXmlListProperty;
-
-       /* MOB -- need to complete xmlListClass */
-
-       return (ejsObjHasErrors(xmlClass) || ejsObjHasErrors(xmlListClass))
-               ? MPR_ERR_CANT_INITIALIZE : 0;
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Routine to create an XML object using a default constructor
- */
-
-EjsVar *ejsCreateXml(Ejs *ep)
-{
-       EjsVar          *op;
-
-       op = ejsCreateSimpleObj(ep, "XML");
-       if (op == 0) {
-               mprAssert(op);
-               return op;
-       }
-       ejsSetVarName(ep, op, "xmlNode");
-
-       /*
-        *      Invoke class constructors manually (for speed and space)
-        */
-       if (ejsXmlConstructor(ep, op, 0, 0) < 0) {
-               mprFree(op);
-               mprAssert(0);
-               return 0;
-       }
-       return op;
-}
-
-/******************************************************************************/
-/*
- *     XML constructor
- */
-
-int ejsXmlConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsVar          *vp;
-       const char      *str;
-
-       ejsSetVarFlags(thisObj, EJS_XML_FLAGS_ELEMENT);
-
-       if (argc == 1) {
-               vp = argv[0];
-
-               if (ejsVarIsObject(vp)) {
-                       /* Convert DOM to XML. Not implemented */;
-
-               } else if (ejsVarIsString(vp)) {
-                       str = vp->string;
-                       if (str == 0) {
-                               return 0;
-                       }
-                       if (*str == '<') {
-                               /* XML Literal */
-                               return loadXmlString(ep, thisObj, str);
-
-                       } else {
-                               /* Load from file */
-                               return load(ep, thisObj, argc, argv);
-                       }
-               } else {
-                       ejsError(ep, EJS_TYPE_ERROR, "Bad type passed to XML constructor");
-                       return -1;
-               }
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Routine to create an XMLList object
- */
-
-EjsVar *ejsCreateXmlList(Ejs *ep)
-{
-       EjsVar          *op;
-
-       /*      Sanity limit for size of hash table */
-
-       op = ejsCreateSimpleObj(ep, "XMLList");
-       if (op == 0) {
-               mprAssert(0);
-               return op;
-       }
-       if (ejsArrayConstructor(ep, op, 0, 0) < 0 ||
-                       ejsXmlConstructor(ep, op, 0, 0) < 0) {
-               mprFree(op);
-               mprAssert(0);
-               return 0;
-       }
-       return op;
-}
-
-/******************************************************************************/
-/*
- *     XMLList constructor
- */
-
-int ejsXmlListConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       // ejsSetVarFlags(vp, EJS_XML_FLAGS_ELEMENT);
-       return 0;
-}
-
-/******************************************************************************/
-/******************************** Internal Methods ****************************/
-/******************************************************************************/
-
-static EjsVar *createXmlProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsGetVarPtr(ejsCreateSimpleProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-
-static int deleteXmlProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsDeleteProperty(ep, obj, property);
-}
-
-/******************************************************************************/
-/*     MOB -- need ep as an arg */
-static EjsVar *getXmlProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-#if NEW
-       EjsVar  *lp;
-
-       lp = ejsCreateXmlList(ep);
-       if (isdigit(*property)) {
-               /* MOB -- where do we store these. Do we need them ? */
-               lp->targetObject = obj
-               lp->targetProperty = property
-               return getXmlListProperty(lp, property);
-       }
-
-       /*      What about a simple elment. Should it not return the text */
-
-       if (*property == '@') {
-               ap = ejsGetFirstProperty(obj, EJS_ENUM_ALL);
-               while (ap) {
-                       vp = ejsGetVarPtr(ap);
-                       /*      MOB -- are attributes unique ? */
-                       if (vp->flags & EJS_XML_FLAGS_ATTRIBUTE &&
-                                       strcmp(property, ap->name) == 0) {
-                               ejsAppendXml(lp, vp);
-                       }
-                       ap = ejsGetNexttProperty(ap, EJS_ENUM_ALL);
-               }
-       } else {
-               while (ap) {
-                       vp = ejsGetVarPtr(ap);
-                       /*      MOB -- are attributes unique ? */
-                       if (vp->flags & EJS_XML_FLAGS_ELEMENT &&
-                                       strcmp(property, ap->name) == 0) {
-                               ejsAppendXml(lp, vp);
-                       }
-                       ap = ejsGetNexttProperty(ap, EJS_ENUM_ALL);
-               }
-       }
-       return l;
-
-       //      Must always return XML or XMLList event for comments and attributes
-#endif
-       return ejsGetVarPtr(ejsGetSimpleProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-
-static EjsVar *setXmlProperty(Ejs *ep, EjsVar *obj, const char *property, 
-       const EjsVar *value)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-
-       pp = ejsCreateSimpleProperty(ep, obj, property);
-       if (pp == 0) {
-               /* Should never happen */
-               mprAssert(pp);
-               return 0;
-       }
-       vp = ejsGetVarPtr(pp);
-       if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) < 0) {
-               return 0;
-       }
-       return ejsGetVarPtr(pp);
-}
-
-/******************************************************************************/
-/*
- NEW
-
-static EjsVar *setXmlProperty(Ejs *ep, EjsVar *op, const char *property, 
-       EjsVar *value)
-{
-
-       if ((value->objectState->baseClass != XML && 
-                       value->objectState->baseClass != XMLList) || 
-                       value->string[0] != '<') {
-               ejsVarToString(luevalue.toString();
-               ejsRunMethod(ep, value, "toString", 0);
-               value = ejsDupVar(ep->result);
-
-       } else {
-               value = ejsDupVar(value);
-       }
-
-       if (isdigit(*property)) {
-               //      ERROR -- reserved for future versions
-               return 0;
-       }
-
-       if (*property == '@') {
-               if (op->objectState->baseClass == XMLList) {
-                       if (op->obj.LENGTH_PROPERTY == 0) {
-                               c = "";
-                       } else {
-                               // Catenate all result of toString on all elts in list
-                       }
-               } else {
-                       c = c.toString();
-               }
-               // Replace existing attribute of same name or insert
-               return;
-       }
-       for (i = op->obj.LENGTH - 1; i >= 0; i--) {
-               //      Delete item of same name
-       }
-       if (not Found) {
-               Append new Xml object
-                       - set [[name]], [[class]] == "element"
-       }
-
-       mprFree(value);
-}
-
- */
-/******************************************************************************/
-/************************************ Methods *********************************/
-/******************************************************************************/
-
-static int load(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       const char      *fileName;
-       XmlState        *parser;
-       Exml            *xp;
-       MprFile         *file;
-
-       if (argc != 1 || !ejsVarIsString(argv[0])) {
-               ejsError(ep, EJS_ARG_ERROR, "Bad args. Usage: load(fileName);");
-               return -1;
-       }
-       fileName = argv[0]->string;
-       
-       /* MOB -- not romable 
-               Need rom code in MPR not MprServices
-       */
-       file = mprOpen(ep, fileName, O_RDONLY, 0664);
-       if (file == 0) {
-               ejsError(ep, EJS_IO_ERROR, "Can't open: %s", fileName);
-               return -1;
-       }
-
-       /* MOB -- should we empty thisObj of all existing properties ? */
-
-       xp = initParser(ep, thisObj, fileName);
-       parser = exmlGetParseArg(xp);
-
-       exmlSetInputStream(xp, readFileData, (void*) file);
-
-       if (exmlParse(xp) < 0) {
-               if (! ejsGotException(ep)) {
-                       ejsError(ep, EJS_IO_ERROR, "Can't parse XML file: %s\nDetails %s", 
-                               fileName, exmlGetErrorMsg(xp));
-               }
-               termParser(xp);
-               mprClose(file);
-               return -1;
-       }
-
-       ejsSetReturnValue(ep, parser->nodeStack[0].obj);
-
-       termParser(xp);
-       mprClose(file);
-
-       return 0;
-}
-
-/******************************************************************************/
-
-static int loadXmlString(Ejs *ep, EjsVar *thisObj, const char *xmlString)
-{
-       XmlState        *parser;
-       Exml            *xp;
-
-       xp = initParser(ep, thisObj, "string");
-       parser = exmlGetParseArg(xp);
-
-       parser->inputBuf = xmlString;
-       parser->inputSize = strlen(xmlString);
-
-       exmlSetInputStream(xp, readStringData, (void*) 0);
-
-       if (exmlParse(xp) < 0) {
-               if (! ejsGotException(ep)) {
-                       ejsError(ep, EJS_IO_ERROR, "Can't parse XML string\nError %s", 
-                               exmlGetErrorMsg(xp));
-               }
-               termParser(xp);
-               return -1;
-       }
-
-       ejsSetReturnValue(ep, parser->nodeStack[0].obj);
-
-       termParser(xp);
-
-       return 0;
-}
-
-/******************************************************************************/
-
-static int text(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsVar  *vp;
-
-       vp = ejsGetVarPtr(ejsGetSimpleProperty(ep, thisObj, E4X_TEXT_PROPERTY));
-       if (vp == 0) {
-               ejsSetReturnValueToString(ep, "");
-               return 0;
-       }
-       ejsSetReturnValue(ep, vp);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Return the tag name
- */
-
-static int name(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       EjsVar  *vp;
-
-       vp = ejsGetVarPtr(ejsGetSimpleProperty(ep, thisObj, E4X_TAG_NAME_PROPERTY));
-       if (vp == 0) {
-               ejsSetReturnValueToString(ep, "");
-               return 0;
-       }
-       ejsSetReturnValue(ep, vp);
-#if UNDEFINED
-       char    *name;
-       /* MOB -- not ideal as we can't guarantee thisObj is a property */
-       name = ejsGetPropertyPtr(thisObj)->name; 
-       if (name == 0) {
-               name = "";
-       }
-       ejsSetReturnValueToString(ep, name); 
-#endif
-       return 0;
-}
-
-/******************************************************************************/
-/* MOB -- temporary only  */
-
-static int setText(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       if (argc != 1) {
-               ejsArgError(ep, "usage: setText(string)");
-       }
-
-       ejsSetProperty(ep, thisObj, E4X_TEXT_PROPERTY, argv[0]);
-       ejsSetReturnValue(ep, argv[0]);
-       return 0;
-}
-
-/******************************************************************************/
-
-static Exml *initParser(Ejs *ep, EjsVar *thisObj, const char *fileName)
-{
-       XmlState        *parser;
-       Exml            *xp;
-
-       xp = exmlOpen(ep, 512, E4X_BUF_MAX);
-       mprAssert(xp);
-
-       /*
-        *      Create the parser stack
-        */
-       parser = mprAllocTypeZeroed(ep, XmlState);
-       parser->ep = ep;
-       parser->nodeStack[0].obj = thisObj;
-       parser->xmlClass = ejsGetClass(ep, 0, "XML");
-       parser->xmlListClass = ejsGetClass(ep, 0, "XMLList");
-       parser->fileName = fileName;
-
-       exmlSetParseArg(xp, parser);
-       exmlSetParserHandler(xp, parserHandler);
-
-       return xp;
-}
-
-/******************************************************************************/
-
-static void termParser(Exml *xp)
-{
-       mprFree(exmlGetParseArg(xp));
-       exmlClose(xp);
-}
-
-/******************************************************************************/
-/*
- *     XML parsing callback. Called for each elt and attribute/value pair. 
- *     For speed, we handcraft the object model here rather than calling 
- *     putXmlProperty.
- *
- *     "<!-- txt -->"          parseHandler(efd, , EXML_COMMENT);
- *     "<elt"                          parseHandler(efd, , EXML_NEW_ELT);
- *     "...att=value"          parseHandler(efd, , EXML_NEW_ATT);
- *     "<elt ...>"                     parseHandler(efd, , EXML_ELT_DEFINED);
- *     "<elt/>"                        parseHandler(efd, , EXML_SOLO_ELT_DEFINED);
- *     "<elt> ...<"            parseHandler(efd, , EXML_ELT_DATA);
- *     "...</elt>"                     parseHandler(efd, , EXML_END_ELT);
- *
- *     Note: we recurse on every new nested elt.
- */
-
-static int parserHandler(Exml *xp, int state, const char *tagName, 
-       const char *attName, const char *value)
-{
-       XmlState                *parser;
-       XmlTagState             *tos;
-       EjsVar                  *currentNode, *vp, *tagNode, *parent, *vpx;
-       EjsProperty             *pp;
-       Ejs                             *ep;
-       char                    *name;
-
-       parser = (XmlState*) xp->parseArg;
-       ep = parser->ep;
-       tos = &parser->nodeStack[parser->topOfStack];
-       currentNode = tos->obj;
-
-       mprAssert(state >= 0);
-       mprAssert(tagName && *tagName);
-
-       switch (state) {
-       case EXML_PI:
-               /*
-                *      By using a property name with a leading space, we can store
-                *      non-user-visible processing instructions as regular properties.
-                */
-               pp = ejsCreateSimpleNonUniqueProperty(ep, currentNode, E4X_PI_PROPERTY);
-               ejsMakePropertyEnumerable(pp, 1);
-               vp = ejsGetVarPtr(pp);
-               ejsWriteVarAsString(ep, vp, value);
-               ejsSetVarFlags(vp, EJS_XML_FLAGS_PI);
-               break;
-
-       case EXML_COMMENT:
-               /*
-                *      By using a property name with a leading space, we can store
-                *      non- user-visible comments as regular properties.
-                */
-               pp = ejsCreateSimpleNonUniqueProperty(ep, currentNode, 
-                       E4X_COMMENT_PROPERTY);
-               ejsMakePropertyEnumerable(pp, 1);
-               vp = ejsGetVarPtr(pp);
-               ejsWriteVarAsString(ep, vp, value);
-               ejsSetVarFlags(vp, EJS_XML_FLAGS_COMMENT);
-               break;
-
-       case EXML_NEW_ELT:
-               if (parser->topOfStack > E4X_MAX_NODE_DEPTH) {
-                       ejsError(ep, EJS_IO_ERROR, 
-                               "XML nodes nested too deeply in %s at line %d",
-                               parser->fileName, exmlGetLineNumber(xp));
-                       return MPR_ERR_BAD_SYNTAX;
-               }
-
-               name = mprStrdup(xp, tagName);
-               if (name == 0) {
-                       return MPR_ERR_MEMORY;
-               }
-
-               if (cleanTagName(name) < 0) {
-                       ejsError(ep, EJS_TYPE_ERROR, "Bad XML tag name in %s at %d",
-                               parser->fileName, exmlGetLineNumber(xp));
-                       mprFree(name);
-                       return MPR_ERR_BAD_SYNTAX;
-               }
-
-               pp = ejsCreateSimpleNonUniqueProperty(ep, currentNode, name);
-               ejsMakePropertyEnumerable(pp, 1);
-
-               tagNode = ejsGetVarPtr(pp);
-
-               /* MOB -- OPT */
-               vpx = ejsCreateXml(ep);
-               vp = ejsWriteVar(ep, tagNode, vpx, EJS_SHALLOW_COPY);
-               ejsMakeObjLive(vp, 1);
-               ejsFreeVar(ep, vpx);
-
-               /* MOB -- return code */
-               pp = ejsSetPropertyToString(ep, vp, E4X_TAG_NAME_PROPERTY, name);
-               ejsMakePropertyEnumerable(pp, 0);
-
-               ejsSetVarFlags(vp, EJS_XML_FLAGS_ELEMENT);
-               ejsMakePropertyEnumerable(ejsGetPropertyPtr(vp), 1);
-
-               tos = &parser->nodeStack[++(parser->topOfStack)];
-               currentNode = tos->obj = vp;
-               tos->attributes = 0;
-               tos->comments = 0;
-               mprFree(name);
-               break;
-
-       case EXML_NEW_ATT:
-               if (mprAllocSprintf(MPR_LOC_ARGS(xp), &name, 0, "@%s", attName) < 0) {
-                       return MPR_ERR_MEMORY;
-               }
-               pp = ejsCreateProperty(ep, currentNode, name);
-               ejsMakePropertyEnumerable(pp, 1);
-
-               vp = ejsGetVarPtr(pp);
-               ejsWriteVarAsString(ep, vp, value);
-               ejsSetVarFlags(vp, EJS_XML_FLAGS_ATTRIBUTE);
-               mprFree(name);
-               break;
-
-       case EXML_SOLO_ELT_DEFINED:
-               parser->topOfStack--;
-               mprAssert(parser->topOfStack >= 0);
-               tos = &parser->nodeStack[parser->topOfStack];
-               break;
-
-       case EXML_ELT_DEFINED:
-               if (parser->topOfStack > 0) {
-                       parent = parser->nodeStack[parser->topOfStack - 1].obj;
-                       ejsSetProperty(ep, currentNode, E4X_PARENT_PROPERTY, parent);
-               }
-               break;
-
-       case EXML_ELT_DATA:
-       case EXML_CDATA:
-               pp = ejsCreateSimpleNonUniqueProperty(ep, currentNode, 
-                       E4X_TEXT_PROPERTY);
-               ejsMakePropertyEnumerable(pp, 1);
-               vp = ejsGetVarPtr(pp);
-               ejsWriteVarAsString(ep, vp, value);
-               ejsSetVarFlags(vp, EJS_XML_FLAGS_TEXT);
-               break;
-
-       case EXML_END_ELT:
-               /*
-                *      This is the closing element in a pair "<x>...</x>".
-                *      Pop the stack frame off the elt stack
-                */
-               parser->topOfStack--;
-               mprAssert(parser->topOfStack >= 0);
-               tos = &parser->nodeStack[parser->topOfStack];
-               break;
-
-       default:
-               ejsError(ep, EJS_IO_ERROR, "XML error in %s at %d\nDetails %s",
-                       parser->fileName, exmlGetLineNumber(xp), exmlGetErrorMsg(xp));
-               mprAssert(0);
-               return MPR_ERR_BAD_SYNTAX;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-static char *cleanTagName(char *name)
-{
-       char    *cp;
-
-       for (cp = name; *cp; cp++) {
-               if (*cp == ':') {
-                       *cp = '_';
-               } else if (!isalnum(*cp) && *cp != '_' && *cp != '$' && *cp != '@') {
-                       return 0;
-               }
-       }
-       return name;
-}
-
-/******************************************************************************/
-
-static int readFileData(Exml *xp, void *data, char *buf, int size)
-{
-       mprAssert(xp);
-       mprAssert(data);
-       mprAssert(buf);
-       mprAssert(size > 0);
-
-       return mprRead((MprFile*) data, buf, size);
-}
-
-/******************************************************************************/
-
-static int readStringData(Exml *xp, void *data, char *buf, int size)
-{
-       XmlState        *parser;
-       int                     rc, len;
-
-       mprAssert(xp);
-       mprAssert(buf);
-       mprAssert(size > 0);
-
-       parser = (XmlState*) xp->parseArg;
-
-       if (parser->inputPos < parser->inputSize) {
-               len = min(size, (parser->inputSize - parser->inputPos));
-               rc = mprMemcpy(buf, size, &parser->inputBuf[parser->inputPos], len);
-               parser->inputPos += len;
-               return rc;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-static int save(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       const char      *fileName;
-       MprBuf          *buf;
-       MprFile         *file;
-       int                     bytes, len;
-
-       if (argc != 1 || !ejsVarIsString(argv[0])) {
-               ejsError(ep, EJS_ARG_ERROR, "Bad args. Usage: save(fileName);");
-               return -1;
-       }
-       fileName = argv[0]->string;
-       
-       /* MOB -- not romable 
-               Need rom code in MPR not MprServices
-       */
-
-       /*
-        *      Convert to a string 
-        */
-       buf = mprCreateBuf(ep, E4X_BUF_SIZE, E4X_BUF_MAX);
-       if (xmlToString(ep, buf, thisObj, -1) < 0) {
-               mprFree(buf);
-               return -1;
-       }
-
-       file = mprOpen(ep, fileName, 
-               O_CREAT | O_TRUNC | O_WRONLY | O_TEXT, 0664);
-       if (file == 0) {
-               ejsError(ep, EJS_IO_ERROR, "Can't open: %s, %d", fileName, 
-                       mprGetOsError());
-               return -1;
-       }
-
-       len = mprGetBufLength(buf);
-       bytes = mprWrite(file, buf->start, len);
-       if (bytes != len) {
-               ejsError(ep, EJS_IO_ERROR, "Can't write to: %s", fileName);
-               mprClose(file);
-               return -1;
-       }
-       mprWrite(file, "\n", 1);
-       mprFree(buf);
-
-       mprClose(file);
-
-       return 0;
-}
-
-/******************************************************************************/
-
-static int toString(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       MprBuf  *buf;
-
-       buf = mprCreateBuf(ep, E4X_BUF_SIZE, E4X_BUF_MAX);
-
-       if (xmlToString(ep, buf, thisObj, -1) < 0) {
-               mprFree(buf);
-               return -1;
-       }
-       ejsWriteVarAsString(ep, ep->result, (char*) buf->start);
-
-       mprFree(buf);
-
-       return 0;
-}
-
-/******************************************************************************/
-/* MOB -- need to support XMLList */
-
-static int xmlToString(Ejs *ep, MprBuf *buf, EjsVar *obj, int indentLevel)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-       char                    *varBuf;
-       int                             endTag, sawElements;
-       
-       if (indentLevel < 0) {
-               mprPutStringToBuf(buf, "<?xml version=\"1.0\"?>");
-       }
-
-       switch (obj->type) {
-       case EJS_TYPE_STRING:
-               if (obj->flags & EJS_XML_FLAGS_ATTRIBUTE) {
-                       mprPutFmtStringToBuf(buf, " %s=\"%s\"", 
-                               &ejsGetPropertyPtr(obj)->name[1], obj->string);
-                       /* No new line */
-
-               } else if (obj->flags & EJS_XML_FLAGS_COMMENT) {
-                       mprPutCharToBuf(buf, '\n');
-                       indent(buf, indentLevel);
-                       mprPutFmtStringToBuf(buf, "<!-- %s -->", obj->string);
-
-               } else if (obj->flags & EJS_XML_FLAGS_TEXT) {
-                       mprPutStringToBuf(buf, obj->string);
-
-               } else {
-//                     indent(buf, indentLevel);
-                       mprPutStringToBuf(buf, obj->string);
-//                     mprPutCharToBuf(buf, '\n');
-               }
-               break;
-
-       default:
-               /* Primitive types come here */
-               indent(buf, indentLevel);
-               /* MOB -- rc */
-               varBuf = ejsVarToString(ep, obj);
-               mprPutStringToBuf(buf, varBuf); 
-               break;
-
-       case EJS_TYPE_OBJECT:
-               if (obj->objectState->baseClass == ejsGetClass(ep, 0, "XML")) {
-                       if (!obj->objectState->visited) {
-                               obj->objectState->visited = 1;
-
-                               /* MOB -- opt. Flags would be quicker */
-                               if (strcmp(ejsGetPropertyPtr(obj)->name, 
-                                               E4X_PARENT_PROPERTY) == 0) {
-                                       return 0;
-                               }
-                               /* 
-                                *      MOB -- short term fix for tags with no body but with 
-                                *      attributes
-                                */
-                               if (getNumElements(obj) == 0 && 0) {
-                                       /*
-                                        *      XML element is simple with no elements, so return just 
-                                        *      the text.
-                                        */
-                                       if (getText(buf, obj) < 0) {
-                                               ejsError(ep, EJS_IO_ERROR, 
-                                                       "XML is to big to convert to a string");
-                                               obj->objectState->visited = 0;
-                                               return -1;
-                                       }
-
-                               } else if (obj->flags & (EJS_XML_FLAGS_ELEMENT)) {
-                                       /*
-                                        *      XML object is complex (has elements) so return full XML
-                                        *      content.
-                                        */
-                                       mprPutCharToBuf(buf, '\n');
-                                       indent(buf, indentLevel);
-
-                                       /*
-                                        *      When called from toString, obj is not a property
-                                        */
-                                       if (indentLevel >= 0) {
-                                               mprPutFmtStringToBuf(buf, "<%s", 
-                                                       ejsGetPropertyPtr(obj)->name);
-                                               endTag = 0;
-
-                                       } else {
-                                               endTag = 1;
-                                       }
-
-                                       sawElements = 0;
-                                       pp = ejsGetFirstProperty(obj, 0);
-                                       while (pp) {
-                                               vp = ejsGetVarPtr(pp);
-
-                                               if (! (vp->flags & EJS_XML_FLAGS_ATTRIBUTE)) {
-                                                       if (endTag == 0) {
-                                                               endTag++;
-                                                               mprPutStringToBuf(buf, ">"); 
-                                                       }
-                                               } 
-                                               if (vp->flags & EJS_XML_FLAGS_ELEMENT) {
-                                                       if (strcmp(ejsGetPropertyPtr(vp)->name, 
-                                                                       E4X_PARENT_PROPERTY) != 0) {
-                                                               sawElements++;
-                                                       }
-                                               }
-
-                                               if (xmlToString(ep, buf, ejsGetVarPtr(pp), 
-                                                               indentLevel + 1) < 0){
-                                                       return -1;
-                                               }
-
-                                               pp = ejsGetNextProperty(pp, 0);
-                                       }
-                                       if (indentLevel >= 0) {
-                                               if (sawElements) {
-                                                       mprPutCharToBuf(buf, '\n');
-                                                       indent(buf, indentLevel);
-                                               }
-                                               mprPutFmtStringToBuf(buf, "</%s>", 
-                                                       ejsGetPropertyPtr(obj)->name);
-                                       }
-                               }
-                               obj->objectState->visited = 0;
-                       }
-                       return 0;
-               }
-
-               if (obj->objectState->baseClass == ejsGetClass(ep, 0, "XMLList")) {
-                       indent(buf, indentLevel);
-                       /* MOB -- TBD */
-                       return 0;
-               }
-
-               /* 
-                *      All other objects. Allow other objects to override toString 
-                */
-               if (ejsRunMethod(ep, obj->objectState->baseClass, "toString", 
-                               0) < 0) {
-                       return -1;
-               }
-               if (ejsVarIsString(ep->result)) {
-                       indent(buf, indentLevel);
-                       mprPutStringToBuf(buf, obj->string); 
-               }
-               break;
-       } 
-       return 0;
-}
-
-/******************************************************************************/
-
-static void indent(MprBuf *bp, int level)
-{
-       int             i;
-
-       for (i = 0; i < level; i++) {
-               mprPutCharToBuf(bp, '\t');
-       }
-}
-
-/******************************************************************************/
-
-static int valueOf(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       if (argc != 0) {
-               mprAssert(0);
-               return -1;
-       }
-
-       switch (thisObj->type) {
-       default:
-       case EJS_TYPE_UNDEFINED:
-       case EJS_TYPE_NULL:
-       case EJS_TYPE_CMETHOD:
-       case EJS_TYPE_OBJECT:
-       case EJS_TYPE_METHOD:
-       case EJS_TYPE_STRING_CMETHOD:
-               ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY);
-               break;
-
-       case EJS_TYPE_STRING:
-               ejsWriteVarAsInteger(ep, ep->result, atoi(thisObj->string));
-               break;
-
-       case EJS_TYPE_BOOL:
-       case EJS_TYPE_INT:
-#if BLD_FEATURE_INT64
-       case EJS_TYPE_INT64:
-#endif
-#if BLD_FEATURE_FLOATING_POINT
-       case EJS_TYPE_FLOAT:
-#endif
-               ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY);
-               break;
-       } 
-       return 0;
-}
-
-/******************************************************************************/
-
-static int getList(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv)
-{
-       const char      *nodeName;
-       EjsProperty     *pp;
-       EjsVar          *list, *vp;
-
-       if (argc != 1) {
-               nodeName = 0;
-       } else {
-               nodeName = argv[0]->string;
-       }
-
-       list = ejsCreateArray(ep, 0);
-
-       pp = ejsGetFirstProperty(thisObj, EJS_ENUM_ALL);
-       while (pp) {
-               vp = ejsGetVarPtr(pp);
-               if (vp->type == EJS_TYPE_OBJECT) {
-                       if (strcmp(ejsGetPropertyPtr(vp)->name, E4X_PARENT_PROPERTY) != 0) {
-                               if (vp->flags & EJS_XML_FLAGS_ELEMENT &&
-                                               (nodeName == 0 || strcmp(nodeName, pp->name) == 0)) {
-                                       ejsAddArrayElt(ep, list, vp, EJS_SHALLOW_COPY);
-                               }
-                       }
-               }
-               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-       }
-
-       ejsSetReturnValueAndFree(ep, list);
-       return 0;
-}
-
-/******************************************************************************/
-
-static int getNumElements(EjsVar *obj)
-{
-       EjsProperty             *pp;
-       int                     count;
-
-       count = 0;
-       pp = ejsGetFirstProperty(obj, EJS_ENUM_ALL);
-       while (pp) {
-               if (ejsGetVarPtr(pp)->flags & EJS_XML_FLAGS_ELEMENT) {
-                       count++;
-               }
-               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-       }
-       return count;
-}
-
-/******************************************************************************/
-/* MOB - This needs to be a public method */
-
-static int getText(MprBuf *buf, EjsVar *obj)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-
-       pp = ejsGetFirstProperty(obj, EJS_ENUM_ALL);
-       while (pp) {
-               vp = ejsGetVarPtr(pp);
-               if (vp->flags & EJS_XML_FLAGS_TEXT) {
-                       /* MOB -- should test for overflow */
-                       mprPutStringToBuf(buf, vp->string);
-               }
-               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/******************************************************************************/
-/******************************** Internal Methods ****************************/
-/******************************************************************************/
-
-static EjsVar *createXmlListProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsGetVarPtr(ejsCreateProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-
-static int deleteXmlListProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       return ejsDeleteProperty(ep, obj, property);
-}
-
-/******************************************************************************/
-
-static EjsVar *getXmlListProperty(Ejs *ep, EjsVar *obj, const char *property)
-{
-       //      Must always return XML or XMLList event for comments and attributes
-       return ejsGetVarPtr(ejsGetSimpleProperty(ep, obj, property));
-}
-
-/******************************************************************************/
-
-static EjsVar *setXmlListProperty(Ejs *ep, EjsVar *obj, const char *property, 
-       const EjsVar *value)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp;
-
-       pp = ejsGetSimpleProperty(ep, obj, property);
-       if (pp == 0) {
-               mprAssert(pp);
-               return 0;
-       }
-       vp = ejsGetVarPtr(pp);
-       if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) < 0){
-               mprAssert(0);
-               return 0;
-       }
-       return ejsGetVarPtr(pp);
-}
-
-/******************************************************************************/
-/*
- NEW
-
-static EjsVar *putXmlListProperty(EjsVar *op, const char *property, 
-       EjsVar *value)
-{
-
-       if ((value->objectState->baseClass != XML && 
-                       value->objectState->baseClass != XMLList) ||
-                       value->string[0] != '<') {
-               c = value.toString();
-       } else {
-               value = ejsDupVar(value);
-               ??
-       }
-       if (isdigit(*property)) {
-               //      ERROR
-               return 0;
-       }
-       if (*property == '@') {
-               if (op->objectState->baseClass == XMLList) {
-                       if (op->obj.LENGTH_PROPERTY == 0) {
-                               c = "";
-                       } else {
-                               // Catenate all result of toString on all elts in list
-                       }
-               } else {
-                       c = c.toString();
-               }
-               // Replace existing attribute of same name or insert
-               return;
-       }
-       for (i = op->obj.LENGTH - 1; i >= 0; i--) {
-               //      Delete item of same name
-       }
-       if (not Found) {
-               Append new Xml object
-                       - set [[name]], [[class]] == "element"
-       }
-}
-
- */
-
-/******************************************************************************/
-#else
-void ejs4xDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS_E4X */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejs.c b/source4/lib/appweb/ejs-2.0/ejs/ejs.c
deleted file mode 100644 (file)
index 0fcc6f0..0000000
+++ /dev/null
@@ -1,1378 +0,0 @@
-/*
- *     @file   ejs.c
- *     @brief  Embedded JavaScript (EJS) 
- *     @overview Main module interface logic.
- *     @remarks The initialization code must be run single-threaded. Includes:
- *             ejsOpen, ejsClose.
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/************************************* Code ***********************************/
-/*
- *     Initialize the EJS subsystem
- */
-
-EjsService *ejsOpenService(MprCtx ctx)
-{
-       EjsService      *service;
-       Ejs                     *interp;
-
-       service = mprAllocTypeZeroed(ctx, EjsService);
-       if (service == 0) {
-               mprError(ctx, MPR_LOC, "Can't allocate service memory");
-               return 0;
-       }
-
-       interp = ejsCreateInterp(service, 0, 0, 0, 1);
-       if (interp == 0) {
-               mprError(ctx, MPR_LOC, "Can't create master interpreter");
-               mprFree(service);
-               return 0;
-       }
-       service->master = interp;
-
-       /*
-        *      Restore the default GC settings for the master interpreter.
-        *      ejsCreateInterp will have initialized them.
-        */
-       ejsGCInit(interp, EJS_DEFAULT_OBJ_INC, EJS_DEFAULT_PROP_INC,
-               EJS_DEFAULT_VAR_INC, EJS_DEFAULT_STR_INC);
-
-       /*
-        *      Save the default interpreter and global class for all to access
-        *      MOB -- don't store these. Store the service
-        */
-       mprSetKeyValue(interp, "ejsMaster", interp);
-       mprSetKeyValue(interp, "ejsGlobalClass", interp->global);
-
-       /*
-        *      Once the Object class is created, this routine will also make the
-        *      Global class a subclass of Object.
-        */
-       if (ejsDefineObjectClass(interp) < 0) {
-               mprError(ctx, MPR_LOC, "Can't define EJS object class");
-               mprFree(service);
-               return 0;
-       }
-
-       /*
-        *      Create all the standard classes
-        */
-       if (ejsDefineStandardClasses(interp) < 0) {
-               mprError(ctx, MPR_LOC, "Can't define EJS standard classes");
-               mprFree(service);
-               return 0;
-       }
-
-       if (ejsDefineSystemClasses(interp) < 0) {
-               mprError(ctx, MPR_LOC, "Can't define EJS system classes");
-               mprFree(service);
-               return 0;
-       }
-
-       if (ejsCreateObjectModel(interp) < 0) {
-               mprError(ctx, MPR_LOC, "Can't create EJS object model");
-               mprFree(service);
-               return 0;
-       }
-
-#if UNUSED && BLD_FEATURE_ALLOC_STATS
-{
-       EjsVar  v;
-       mprLog(ctx, 0, "Obj %d, Var %d, Prop %d\n", sizeof(EjsObj), sizeof(EjsVar),
-               sizeof(EjsProperty));
-       mprLog(ctx, 0, "GCLink %d\n", sizeof(EjsGCLink));
-       mprLog(ctx, 0, "objectState %d\n", (uint) &v.objectState - (uint) &v);
-}
-#endif
-
-       return service;
-}
-
-/******************************************************************************/
-/*
- *     Close down the EJS Service
- */
-
-void ejsCloseService(EjsService *sp, bool doStats)
-{
-       Ejs             *ep;
-
-       mprAssert(sp);
-
-       ep = sp->master;
-       mprAssert(ep);
-
-       ejsTermSystemClasses(ep);
-
-       if (ep) {
-               ejsFreeVar(ep, sp->globalClass);
-
-#if BLD_FEATURE_ALLOC_STATS
-               if (doStats) {
-                       mprLog(sp, 0, "GC Statistics for the Global Interpreter");
-               }
-#endif
-               ejsDestroyInterp(ep, doStats);
-       }
-
-       mprRemoveKeyValue(sp, "ejsMaster");
-       mprRemoveKeyValue(sp, "ejsGlobalClass");
-
-       mprFree(sp);
-}
-
-/******************************************************************************/
-
-Ejs *ejsGetMasterInterp(EjsService *sp)
-{
-       return sp->master;
-}
-
-/******************************************************************************/
-#if BLD_FEATURE_MULTITHREAD
-
-int ejsSetServiceLocks(EjsService *sp, EjsLockFn lock, EjsUnlockFn unlock, 
-               void *data)
-{
-       mprAssert(sp);
-
-       sp->lock = lock;
-       sp->unlock = unlock;
-       sp->lockData = data;
-       return 0;
-}
-
-#endif
-/******************************************************************************/
-/*
- *     Create and initialize an EJS interpreter. Interpreters have a global object
- *     that has the service global class set as a base class. This way, it 
- *     inherits all the desired global properties, methods and classes.
- *
- *     The primary and alternate handles are provided to C methods depending on 
- *     the flags provided when the C methods are defined. The global variable 
- *     (optionally) defines a predefined global variable space.
- */
-
-Ejs *ejsCreateInterp(EjsService *sp, void *primaryHandle, void *altHandle,
-       EjsVar *global, bool useOwnSlab)
-{
-       EjsProperty     *pp;
-       EjsVar          *baseClass;
-       Ejs                     *ep;
-
-       ep = mprAllocTypeZeroed(sp, Ejs);
-       if (ep == 0) {
-               mprAssert(0);
-               return ep;
-       }
-
-       ep->stkPtr = &ep->stack[EJS_MAX_STACK];
-
-       ep->service = sp;
-       ep->primaryHandle = primaryHandle;
-       ep->altHandle = altHandle;
-
-       if (sp->master) {
-               ep->objectClass = sp->master->objectClass;
-       }
-
-       if (useOwnSlab) {
-               ep->slabs = (EjsSlab*) mprAllocZeroed(ep, sizeof(EjsSlab) * 
-                       EJS_SLAB_MAX);
-                ep->slabAllocContext = ep;
-
-       } else {
-               ep->slabs = sp->master->slabs;
-               ep->slabAllocContext = sp->master;
-               ep->flags |= EJS_FLAGS_SHARED_SLAB;
-       }
-
-       ep->frames = mprCreateItemArray(ep, EJS_INC_FRAMES, EJS_MAX_FRAMES);
-       if (ep->frames == 0) {
-               mprFree(ep);
-               return 0;
-       }
-
-       ejsGCInit(ep, EJS_OBJ_INC, EJS_PROP_INC, EJS_VAR_INC, EJS_STR_INC);
-
-       if (sp->globalClass == 0) {
-               /*
-                *      Only do this for the Global interpreter. Create a global class 
-                *      (prototype) object. This is base class from which all global 
-                *      spaces will inherit. 
-                */
-               sp->globalClass = ejsCreateObjVar(ep);
-               if (sp->globalClass == 0) {
-                       mprFree(ep);
-                       return 0;
-               }
-               ejsSetClassName(ep, sp->globalClass, "Global");
-               global = sp->globalClass;
-       }
-       
-       if (global) {
-               /*
-                *      The default interpreter uses the Global class as its global
-                *      space.
-                */
-               ep->global = ejsDupVar(ep, global, EJS_SHALLOW_COPY);
-               if (ep->global == 0) {
-                       mprFree(ep);
-                       return 0;
-               }
-               if (ep->global->objectState != sp->globalClass->objectState) {
-                       ejsSetBaseClass(ep->global, sp->globalClass);
-               }
-
-       } else {
-               /*
-                *      Use the global class as our global so we can find the object class
-                */
-               baseClass = ejsGetClass(ep, sp->globalClass, "Object");
-               if (baseClass) {
-                       ep->global = ejsCreateSimpleObjUsingClass(ep, baseClass);
-                       if (ep->global == 0) {
-                               mprFree(ep);
-                               return 0;
-                       }
-
-                       /*
-                        *      Override the base class and set to the master Global class
-                        */
-                       ejsSetBaseClass(ep->global, sp->globalClass);
-
-               } else {
-                       ep->global = ejsCreateObjVar(ep);
-               }
-       }
-
-       /*
-        *      The "global" variable points to the global space
-        */
-       pp = ejsSetProperty(ep, ep->global, "global", ep->global);
-       if (pp == 0) {
-               mprFree(ep);
-               return 0;
-       }
-       ejsMakePropertyEnumerable(pp, 0);
-
-       /*
-        *      The "Global" variable points to the Global class
-        */
-       pp = ejsSetProperty(ep, ep->global, "Global", sp->globalClass);
-       if (pp == 0) {
-               mprFree(ep);
-               return 0;
-       }
-       ejsMakePropertyEnumerable(pp, 0);
-
-       ep->local = ejsDupVar(ep, ep->global, EJS_SHALLOW_COPY);
-       if (ep->frames == 0 || ep->global == 0 || ep->local == 0) {
-               mprFree(ep);
-               return 0;
-       }
-       ejsSetVarName(ep, ep->local, "topLevelLocal");
-
-       if (mprAddItem(ep->frames, ep->global) < 0 ||
-                       mprAddItem(ep->frames, ep->local) < 0) {
-               mprFree(ep);
-               return 0;
-       }
-
-       ep->result = ejsCreateUndefinedVar(ep);
-       if (ep->result == 0) {
-               mprFree(ep);
-               return 0;
-       }
-
-       return ep;
-}
-
-/******************************************************************************/
-/*
- *     Close an EJS interpreter
- */
-
-void ejsDestroyInterp(Ejs *ep, bool doStats)
-{
-       ejsCleanInterp(ep, doStats);
-
-       mprFree(ep);
-}
-
-/******************************************************************************/
-/*
- *     Clean an EJS interpreter of all allocated variables, but DONT destroy.
- *     We use this rather than DestroyInterp so we delay freeing the Ejs struct
- *     until after the service is closed.
- */
-
-void ejsCleanInterp(Ejs *ep, bool doStats)
-{
-       int             i;
-
-       if (ep->global) {
-               ejsDeleteProperty(ep, ep->local, "global");
-               ejsDeleteProperty(ep, ep->global, "global");
-               ep->global = 0;
-       }
-       if (ep->local) {
-               ejsFreeVar(ep, ep->local);
-               ep->local = 0;
-       }
-       if (ep->global) {
-               ejsFreeVar(ep, ep->global);
-               ep->global = 0;
-       }
-       if (ep->result) {
-               ejsFreeVar(ep, ep->result);
-               ep->result = 0;
-       }
-       if (ep->castAlloc && ep->castTemp) {
-               mprFree(ep->castTemp);
-               ep->castTemp = 0;
-       }
-       if (ep->frames) {
-               for (i = ep->frames->length - 1; i >= 0; i--) {
-                       mprRemoveItemByIndex(ep->frames, i);
-               }
-               mprFree(ep->frames);
-               ep->frames = 0;
-       }
-
-       if (doStats) {
-
-#if BLD_FEATURE_ALLOC_STATS
-               mprLog(ep, 0, " ");
-               mprLog(ep, 0, "GC Statistics for Interpreter (0x%X)", (uint) ep);
-#endif
-
-               /*
-                *      Cleanup before printing the alloc report
-                */
-               ejsSetGCDebugLevel(ep, 3);
-               ejsCollectGarbage(ep, -1);
-
-#if BLD_DEBUG
-               /*
-                *      If we are the master, dump objects
-                */
-               if (ep->service->master == ep) {
-                       ejsDumpObjects(ep);
-               }
-#endif
-
-#if BLD_FEATURE_ALLOC_STATS
-               /*
-                *      Print an alloc report. 1 == do leak report
-                */
-               ejsPrintAllocReport(ep, 1);
-#endif
-
-       } else {
-               /*
-                *      Must collect garbage here incase sharing interpreters with the
-                *      master. If we don't, the mprFree later in DestroyInterp will free
-                *      all memory and when the master does GC --> crash.
-                */
-               ejsCollectGarbage(ep, -1);
-       }
-}
-
-/******************************************************************************/
-/*
- *     Evaluate an EJS script file. This will evaluate the script at the current
- *     context. Ie. if inside a function, declarations will be local.
- */
-
-int ejsEvalFile(Ejs *ep, const char *path, EjsVar *result)
-{
-       MprFile                 *file;
-       MprFileInfo             info;
-       char                    *script;
-       char                    *saveFileName;
-       int                             rc;
-
-       mprAssert(path && *path);
-
-       if ((file = mprOpen(ep, path, O_RDONLY | O_BINARY, 0666)) == 0) {
-               ejsError(ep, EJS_IO_ERROR, "Can't open %s", path);
-               return -1;
-       }
-       
-       if (mprGetFileInfo(ep, path, &info) < 0) {
-               ejsError(ep, EJS_IO_ERROR, "Can't get file info for %s", path);
-               goto error;
-       }
-       
-       if ((script = (char*) mprAlloc(ep, info.size + 1)) == NULL) {
-               ejsError(ep, "MemoryError", "Cant malloc %d", (int) info.size);
-               goto error;
-       }
-       
-       if (mprRead(file, script, info.size) != (int) info.size) {
-               mprFree(script);
-               ejsError(ep, EJS_IO_ERROR, "Error reading %s", path);
-               goto error;
-       }
-       mprClose(file);
-       script[info.size] = '\0';
-
-       saveFileName = ep->fileName;
-       ep->fileName = mprStrdup(ep, path);
-
-       rc = ejsEvalScript(ep, script, result);
-       mprFree(script);
-
-       mprFree(ep->fileName);
-       ep->fileName = saveFileName;
-
-       return rc;
-
-/*
- *     Error return
- */
-error:
-       mprClose(file);
-       return -1;
-}
-
-/******************************************************************************/
-/*
- *     Create a new variable scope block. This pushes the old local frame down
- *     the stack and creates a new local variables frame.
- */
-
-int ejsOpenBlock(Ejs *ep)
-{
-       EjsProperty             *pp;
-       int                             fid;
-
-       ep->local = ejsCreateSimpleObj(ep, "Object");
-       ejsSetVarName(ep, ep->local, "local");
-
-       if (ep->local == 0) {
-               ejsMemoryError(ep);
-               return -1;
-       }
-
-       if (ep->frames->length > EJS_MAX_FRAMES && !ep->gotException) {
-               ejsError(ep, EJS_RANGE_ERROR, "Recursion too deep: Max depth %d", 
-                       EJS_MAX_FRAMES);
-               return -1;
-       }
-
-       /*
-        *      Must add to frames before ejsSetProperty which will make the object live
-        */
-       fid = mprAddItem(ep->frames, ep->local);
-       if (fid < 0) {
-               ejsMemoryError(ep);
-               return -1;
-       }
-
-       /* Self reference */
-       pp = ejsSetProperty(ep, ep->local, "local", ep->local);
-       ejsMakePropertyEnumerable(pp, 0);
-
-       return fid;
-}
-
-/******************************************************************************/
-/*
- *     Set a new variable scope block. This pushes the old local frame down
- *     the stack and creates a new local variables frame.
- */
-
-int ejsSetBlock(Ejs *ep, EjsVar *local)
-{
-       ep->local = ejsDupVar(ep, local, EJS_SHALLOW_COPY);
-       ejsMakeObjPermanent(ep->local, 1);
-       return mprAddItem(ep->frames, ep->local);
-}
-
-/******************************************************************************/
-/*
- *     Close a variable scope block opened via ejsOpenBlock. Pop back the old
- *     local variables frame.
- */
-
-int ejsCloseBlock(Ejs *ep, int fid)
-{
-       mprAssert(ep->local >= 0);
-       mprAssert(fid >= 0);
-
-       mprAssert(ep->local == (EjsVar*) mprGetItem(ep->frames, fid));
-
-       if (ep->local) {
-               /* Allow GC */
-               ejsMakeObjPermanent(ep->local, 0);
-               ejsFreeVar(ep, ep->local);
-       }
-
-       mprRemoveItemByIndex(ep->frames, fid);
-
-       ep->local = (EjsVar*) mprGetItem(ep->frames, 
-               mprGetItemCount(ep->frames) - 1);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Create a new variable scope block and evaluate a script. All frames
- *     created during this context will be automatically deleted when complete.
- *     vp is optional. i.e. created local variables will be discarded
- *     when this routine returns.
- */
-
-int ejsEvalBlock(Ejs *ep, char *script, EjsVar *vp)
-{
-       int                     rc, fid;
-
-       mprAssert(script);
-
-       fid = ejsOpenBlock(ep);
-       if (fid < 0) {
-               return fid;
-       }
-
-       rc = ejsEvalScript(ep, script, vp);
-
-       ejsCloseBlock(ep, fid);
-
-       return rc;
-}
-
-/******************************************************************************/
-/*
- *     Parse and evaluate a EJS. The script is evaluated at the current context.
- *     Return the result in *vp. The result is "owned" by EJ and the caller 
- *     must not free it. Returns -1 on errors and zero for success. 
- */
-
-int ejsEvalScript(Ejs *ep, const char *script, EjsVar *vp)
-{
-       int                     state;
-       
-       ejsClearVar(ep, ep->result);
-       ep->gotException = 0;
-
-       if (script == 0) {
-               return 0;
-       }
-
-       /*
-        *      Allocate a new evaluation block, and save the old one
-        */
-       if (ejsLexOpenScript(ep, script) < 0) {
-               return MPR_ERR_MEMORY;
-       }
-
-       /*
-        *      Do the actual parsing and evaluation
-        */
-       ep->scriptStatus = 0;
-
-       do {
-               state = ejsParse(ep, EJS_STATE_BEGIN, EJS_FLAGS_EXE);
-
-               if (state == EJS_STATE_RET) {
-                       state = EJS_STATE_EOF;
-               }
-       } while (state != EJS_STATE_EOF && state != EJS_STATE_ERR);
-
-       ejsLexCloseScript(ep);
-
-       if (state == EJS_STATE_ERR) {
-               return -1;
-       }
-
-       if (vp) {
-               /* Caller must not free. */
-               *vp = *ep->result;
-       }
-
-       return ep->scriptStatus;
-}
-
-/******************************************************************************/
-
-void ejsSetFileName(Ejs *ep, const char *fileName)
-{
-       mprFree(ep->fileName);
-       ep->fileName = mprStrdup(ep, fileName);
-}
-
-/******************************************************************************/
-/*
- *     Format the stack backtrace
- */
-
-char *ejsFormatStack(Ejs* ep)
-{
-       EjsInput        *ip;
-       char            *errbuf;
-       int                     frame, len;
-
-       mprAssert(ep);
-
-       ip = ep->input;
-
-       errbuf = 0;
-
-       len = 0;
-       frame = 0;
-       while (ip && frame < EJS_MAX_BACKTRACE) {
-               char *traceLine, *newErrbuf, *line;
-               for (line = ip->line; *line && isspace(*line); line++) {
-                       ;
-               }
-               mprAllocSprintf(MPR_LOC_ARGS(ep), &traceLine, MPR_MAX_STRING,
-                       " [%02d] %s, %s, line %d -> %s\n",
-                       frame++, 
-                       ip->fileName ? ip->fileName : "script",
-                       ip->procName ? ip->procName: "global", 
-                       ip->lineNumber, line);
-               if (traceLine == 0) {
-                       break;
-               }
-               newErrbuf = mprRealloc(ep, errbuf, len + strlen(traceLine) + 1);
-               if (newErrbuf == NULL) {
-                       break;
-               }
-               errbuf = newErrbuf;
-               memcpy(&errbuf[len], traceLine, strlen(traceLine) + 1);
-               len += strlen(traceLine);
-               mprFree(traceLine);
-               ip = ip->next;
-       }
-       return errbuf;
-}
-
-/******************************************************************************/
-/*
- *     Internal use method to set the error message
- *
- *     Error, ArgError, AssertError, IOError, MemoryError, RangeError, 
- *             ReferenceError, SyntaxError, TypeError, MemoryError
- */
-
-void ejsError(Ejs* ep, const char *errorType, const char* fmt, ...)
-{
-       va_list         fmtArgs;
-       EjsVar          *error;
-       char            *msg, *stack;
-
-       va_start(fmtArgs, fmt);
-       mprAllocVsprintf(MPR_LOC_ARGS(ep), &msg, MPR_MAX_STRING, fmt, fmtArgs);
-       va_end(fmtArgs);
-
-       /*
-        *      Create a new Error exception object. If bad error type, default to 
-        *      "Error"
-        */
-       if (ejsGetClass(ep, 0, errorType) == 0) {
-               errorType = "Error";
-       }
-       ep->gotException = 1;
-       
-       error = ejsCreateObj(ep, 0, errorType, msg);
-       if (error == 0) {
-               return;
-       }
-       mprFree(msg);
-
-       stack = ejsFormatStack(ep);
-       ejsSetPropertyToString(ep, error, "stack", stack);
-       mprFree(stack);
-
-       ejsWriteVar(ep, ep->result, error, EJS_SHALLOW_COPY);
-       ejsFreeVar(ep, error);
-}
-
-/******************************************************************************/
-
-void ejsSyntaxError(Ejs *ep, const char *msg)
-{
-       if (msg == 0) {
-               msg = " ";
-       }
-       ejsError(ep, EJS_SYNTAX_ERROR, msg);
-}
-
-/******************************************************************************/
-
-void ejsMemoryError(Ejs *ep)
-{
-       ejsError(ep, EJS_MEMORY_ERROR, "Memory allocation error");
-}
-
-/******************************************************************************/
-
-void ejsArgError(Ejs *ep, const char *msg)
-{
-       mprAssert(msg && *msg);
-
-       ejsError(ep, EJS_ARG_ERROR, msg);
-}
-
-/******************************************************************************/
-
-void ejsInternalError(Ejs *ep, const char *msg)
-{
-       mprAssert(msg && *msg);
-
-       ejsError(ep, EJS_INTERNAL_ERROR, msg);
-}
-
-/******************************************************************************/
-/*
- *     Public routine to set the error message. Caller MUST NOT free.
- */
-
-char *ejsGetErrorMsg(Ejs *ep)
-{
-       EjsVar          *error;
-       const char      *message, *stack, *name;
-       char            *buf;
-
-       error = ep->result;
-
-       if (! ejsVarIsObject(error)) {
-               name = message = stack = 0;
-       } else {
-               name = ejsGetPropertyAsString(ep, error, "name");
-               message = ejsGetPropertyAsString(ep, error, "message");
-               stack = ejsGetPropertyAsString(ep, error, "stack");
-       }
-       if (name == 0 || message == 0) {
-               buf = mprStrdup(ep, "Unspecified execution error\n");
-       } else {
-               mprAllocSprintf(MPR_LOC_ARGS(ep), &buf, 0, 
-                       "%s Exception: %s\nStack:\n%s\n",
-                       name, message, stack ? stack : " " );
-       }
-       mprFree(ep->errorMsg);
-       ep->errorMsg = buf;
-       return buf;
-}
-
-/******************************************************************************/
-/*
- *     Get the current line number
- */
-
-int ejsGetLineNumber(Ejs *ep)
-{
-       if (ep->input == 0) {
-               return -1;
-       }
-       return ep->input->lineNumber;
-}
-
-/******************************************************************************/
-/*
- *     Return the local object
- */
-
-EjsVar *ejsGetLocalObj(Ejs *ep)
-{
-       return ep->local;
-}
-
-/******************************************************************************/
-/*
- *     Return the global object
- */
-
-EjsVar *ejsGetGlobalObj(Ejs *ep)
-{
-       return ep->global;
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value
- */
-
-void ejsSetReturnValue(Ejs *ep, EjsVar *vp)
-{
-       mprAssert(ep);
-       mprAssert(vp);
-
-       if (vp == 0) {
-               return;
-       }
-       ejsWriteVar(ep, ep->result, vp, EJS_SHALLOW_COPY);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value and free the arg.
- */
-
-void ejsSetReturnValueAndFree(Ejs *ep, EjsVar *vp)
-{
-       mprAssert(ep);
-       mprAssert(vp);
-
-       ejsWriteVar(ep, ep->result, vp, EJS_SHALLOW_COPY);
-       ejsFreeVar(ep, vp);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to a string value.
- */
-
-void ejsSetReturnValueToString(Ejs *ep, const char *value)
-{
-       mprAssert(ep);
-       mprAssert(value);
-
-       ejsWriteVarAsString(ep, ep->result, value);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to a binary string value.
- */
-
-void ejsSetReturnValueToBinaryString(Ejs *ep, const uchar *value, int len)
-{
-       mprAssert(ep);
-       mprAssert(value);
-
-       ejsWriteVarAsBinaryString(ep, ep->result, value, len);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to a integer value.
- */
-
-void ejsSetReturnValueToInteger(Ejs *ep, int value)
-{
-       mprAssert(ep);
-
-       ejsWriteVarAsInteger(ep, ep->result, value);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to an EjsNum value.
- */
-
-void ejsSetReturnValueToNumber(Ejs *ep, EjsNum value)
-{
-       mprAssert(ep);
-
-       ejsWriteVarAsNumber(ep, ep->result, value);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to a boolean value.
- */
-
-void ejsSetReturnValueToBoolean(Ejs *ep, int value)
-{
-       mprAssert(ep);
-
-       ejsWriteVarAsBoolean(ep, ep->result, value);
-}
-
-/******************************************************************************/
-/*
- *     Set the expression return value to a boolean value.
- */
-
-void ejsSetReturnValueToUndefined(Ejs *ep)
-{
-       mprAssert(ep);
-
-       ejsWriteVarAsUndefined(ep, ep->result);
-}
-
-/******************************************************************************/
-/*
- *     Get the expression return value
- */
-
-EjsVar *ejsGetReturnValue(Ejs *ep)
-{
-       mprAssert(ep);
-
-       return ep->result;
-}
-
-/******************************************************************************/
-
-void *ejsGetUserData(Ejs *ep)
-{
-       mprAssert(ep);
-
-       return ep->userData;
-}
-
-/******************************************************************************/
-/*
- *     Get a variable given a full variable spec possibly containing "." or "[]".
- */
-
-EjsVar *ejsGetVar(Ejs *ep, const char *fullName)
-{
-       mprAssert(ep);
-       mprAssert(fullName && *fullName);
-
-       return ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);
-}
-
-/******************************************************************************/
-/*
- *     Get a string var given a full variable spec possibly containing "." or "[]".
- */
-
-const char *ejsGetStr(Ejs *ep, const char *fullName, const char *defaultValue)
-{
-       EjsVar  *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);
-       if (vp == 0 || !ejsVarIsString(vp)) {
-               return defaultValue;
-       }
-       /* MOB -- what about VarToStr */
-       return vp->string;
-}
-
-/******************************************************************************/
-/*
- *     Get an int var given a full variable spec possibly containing "." or "[]".
- */
-
-int ejsGetInt(Ejs *ep, const char *fullName, int defaultValue)
-{
-       EjsVar  *vp;
-
-       mprAssert(ep);
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);
-       if (vp == 0 || !ejsVarIsInteger(vp)) {
-               return defaultValue;
-       }
-       /* MOB -- should use VarToInt */
-       return vp->integer;
-}
-
-/******************************************************************************/
-/*
- *     Get an bool var given a full variable spec possibly containing "." or "[]".
- */
-
-int ejsGetBool(Ejs *ep, const char *fullName, int defaultValue)
-{
-       EjsVar  *vp;
-
-       mprAssert(ep);
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 0);
-       if (vp == 0 || !ejsVarIsBoolean(vp)) {
-               return defaultValue;
-       }
-       /* MOB -- should use VarToBool */
-       return vp->boolean;
-}
-
-/******************************************************************************/
-/*
- *     Set a variable that may be an arbitrarily complex object or array reference.
- *     Will always define in the top most variable frame.
- */
-
-int ejsSetVar(Ejs *ep, const char *fullName, const EjsVar *value)
-{
-       EjsVar          *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);
-       if (vp == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) == 0) {
-               return MPR_ERR_CANT_WRITE;
-       }
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Set a variable that may be an arbitrarily complex object or array reference.
- *     Will always define in the top most variable frame.
- */
-
-int ejsSetStr(Ejs *ep, const char *fullName, const char *value)
-{
-       EjsVar          *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);
-       if (vp == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       if (ejsWriteVarAsString(ep, vp, value) == 0) {
-               return MPR_ERR_CANT_WRITE;
-       }
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Set a variable that may be an arbitrarily complex object or array reference.
- *     Will always define in the top most variable frame.
- */
-
-int ejsSetInt(Ejs *ep, const char *fullName, int value)
-{
-       EjsVar          *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);
-       if (vp == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       /*      Can't fail */
-       ejsWriteVarAsInteger(ep, vp, value);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Set a variable that may be an arbitrarily complex object or array reference.
- *     Will always define in the top most variable frame.
- */
-
-int ejsSetBool(Ejs *ep, const char *fullName, bool value)
-{
-       EjsVar          *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);
-       if (vp == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       /* Can't fail */
-       ejsWriteVarAsBoolean(ep, vp, value);
-
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Set a variable that may be an arbitrarily complex object or array reference.
- *     Will always define in the top most variable frame. Free the value passed in.
- */
-
-int ejsSetVarAndFree(Ejs *ep, const char *fullName, EjsVar *value)
-{
-       EjsVar          *vp;
-
-       mprAssert(fullName && *fullName);
-
-       vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, fullName, 1);
-       if (vp == 0) {
-               return MPR_ERR_CANT_CREATE;
-       }
-
-       if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) == 0) {
-               ejsFreeVar(ep, value);
-               return MPR_ERR_CANT_WRITE;
-       }
-
-       ejsFreeVar(ep, value);
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Delete a variable
- */
-
-int ejsDeleteVar(Ejs *ep, const char *fullName)
-{
-       EjsVar          *vp;
-       EjsVar          *obj;
-       char            *propertyName;
-
-       vp = ejsFindProperty(ep, &obj, &propertyName, ep->global, ep->local, 
-               fullName, 0);
-       if (vp == 0) {
-               return -1;
-       }
-
-       mprAssert(propertyName);
-       mprAssert(propertyName);
-
-       return ejsDeleteProperty(ep, obj, propertyName);
-}
-
-/******************************************************************************/
-/*
- *     Utility routine to crack JavaScript arguments. Return the number of args
- *     seen. This routine only supports %s and %d type args.
- *
- *     Typical usage:
- *
- *             if (ejsParseArgs(argc, argv, "%s %d", &name, &age) < 2) {
- *                     // Insufficient args
- *                     return -1;
- *             }
- */ 
-
-int ejsParseArgs(int argc, char **argv, const char *fmt, ...)
-{
-       va_list         vargs;
-       const char      *cp;
-       char            **sp, *s;
-       int                     *bp, *ip, argn;
-
-       va_start(vargs, fmt);
-
-       if (argv == 0) {
-               return 0;
-       }
-
-       for (argn = 0, cp = fmt; cp && *cp && argn < argc && argv[argn]; ) {
-               if (*cp++ != '%') {
-                       continue;
-               }
-
-               s = argv[argn];
-               switch (*cp) {
-               case 'b':
-                       bp = va_arg(vargs, int*);
-                       if (bp) {
-                               if (strcmp(s, "true") == 0 || s[0] == '1') {
-                                       *bp = 1;
-                               } else {
-                                       *bp = 0;
-                               }
-                       } else {
-                               *bp = 0;
-                       }
-                       break;
-
-               case 'd':
-                       ip = va_arg(vargs, int*);
-                       *ip = atoi(s);
-                       break;
-
-               case 's':
-                       sp = va_arg(vargs, char**);
-                       *sp = s;
-                       break;
-
-               default:
-                       mprAssert(0);
-               }
-               argn++;
-       }
-
-       va_end(vargs);
-       return argn;
-}
-
-/******************************************************************************/
-/*
- *     Define the standard classes
- */
-
-int ejsDefineStandardClasses(Ejs *master)
-{
-       if (ejsDefineArrayClass(master) != 0 ||
-                       ejsDefineBooleanClass(master) != 0 || 
-                       ejsDefineErrorClasses(master) != 0 || 
-                       ejsDefineFunctionClass(master) != 0 || 
-                       ejsDefineNumberClass(master) != 0 ||
-#if FUTURE
-                       ejsDefineDateClass(master) != 0 ||
-#endif
-#if BLD_FEATURE_EJS_E4X
-                       ejsDefineXmlClasses(master) != 0 ||
-#endif
-#if BLD_FEATURE_EJS_DB && NOT_HERE
-                       ejsDefineDbClasses(master) != 0 ||
-#endif
-                       ejsDefineStringClass(master) != 0) {
-               return MPR_ERR_MEMORY;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Define the EJS System Object Model
- */
-
-int ejsDefineSystemClasses(Ejs *master)
-{
-       if (ejsDefineSystemClass(master) != 0 ||
-                       ejsDefineAppClass(master) != 0 ||
-                       ejsDefineMemoryClass(master) != 0 ||
-                       ejsDefineLogClass(master) != 0 ||
-                       ejsDefineDebugClass(master) != 0 ||
-                       ejsDefineGCClass(master) != 0 ||
-                       ejsDefineFileSystemClass(master) != 0 ||
-#if BREW
-                       ejsDefineFileClass(master) != 0 ||
-                       ejsDefineHTTPClass(master) != 0 ||
-#endif
-                       ejsDefineGlobalProperties(master) != 0) {
-               return MPR_ERR_MEMORY;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Terminate the system object model and classes
- */
-
-int ejsTermSystemClasses(Ejs *master)
-{
-#if BREW
-       ejsTermHTTPClass(master);
-#endif
-       return 0;
-}
-
-/******************************************************************************/
-/*
- *     Define the EJS object model
- */
-
-int ejsCreateObjectModel(Ejs *ejs)
-{
-       EjsProperty             *pp;
-
-       pp = ejsSetPropertyToNewObj(ejs, ejs->global, "system", "System", 0);
-       if (pp == 0) {
-               return MPR_ERR_MEMORY;
-       }
-
-       if (ejsSetPropertyToNewObj(ejs, ejsGetVarPtr(pp), "app", "System.App", 
-                       0) == 0) {
-               return MPR_ERR_MEMORY;
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-void ejsTrace(Ejs *ep, const char *fmt, ...)
-{
-       va_list         args;
-       char            buf[MPR_MAX_LOG_STRING];
-       int                     len;
-
-       va_start(args, fmt);
-       len = mprVsprintf(buf, sizeof(buf) - 1, fmt, args);
-       va_end(args);
-
-       mprLog(ep, 0, buf, len);
-
-       va_end(args);
-}
-
-/******************************************************************************/
-
-bool ejsGotException(Ejs *ep)
-{
-       return (bool) ep->gotException;
-}
-
-/******************************************************************************/
-
-void ejsSetPrimaryHandle(Ejs *ep, void *primaryHandle)
-{
-       mprAssert(ep);
-
-       ep->primaryHandle = primaryHandle;
-}
-
-/******************************************************************************/
-
-void ejsSetAlternateHandle(Ejs *ep, void *alternateHandle)
-{
-       mprAssert(ep);
-
-       ep->altHandle = alternateHandle;
-}
-
-/******************************************************************************/
-
-#else
-void ejsDummy() {}
-
-#endif /* BLD_FEATURE_EJS */
-
-/******************************************************************************/
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejs.h b/source4/lib/appweb/ejs-2.0/ejs/ejs.h
deleted file mode 100644 (file)
index a926446..0000000
+++ /dev/null
@@ -1,849 +0,0 @@
-/*
- *     ejs.h - EJScript Language (ECMAScript) header.
- */
-
-/********************************* Copyright **********************************/
-/*
- *     @copy   default.g
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     Portions Copyright (c) GoAhead Software, 1995-2000. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#ifndef _h_EJS
-#define _h_EJS 1
-
-#include       "mpr.h"
-#include       "ejsVar.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/********************************* Prototypes *********************************/
-/*
- *     Constants
- */
-#if BLD_FEATURE_SQUEEZE
-       #define EJS_GC_WORK_QUOTA               160             /* Allocations required before 
-                                                                                          garbage colllection */
-
-       #define EJS_PARSE_INCR                  256             /* Growth factor */
-       #define EJS_MAX_RECURSE                 25              /* Sanity for maximum recursion */
-       #define EJS_SMALL_OBJ_HASH_SIZE 11              /* Small object hash size */
-       #define EJS_LIST_INCR                   8               /* Growth increment for lists */
-       #define EJS_MAX_BACKTRACE               10              /* Recursion limit for assert */
-
-#else
-       #define EJS_GC_WORK_QUOTA               500
-
-       #define EJS_PARSE_INCR                  1024
-       #define EJS_MAX_RECURSE                 100
-       #define EJS_SMALL_OBJ_HASH_SIZE 11
-       #define EJS_LIST_INCR                   16
-       #define EJS_MAX_BACKTRACE               25
-
-#endif
-
-/*
- *     Allocation increments for the default interpreter
- */
-#define EJS_DEFAULT_VAR_INC                    8               /* Var allocation increment */
-#define EJS_DEFAULT_PROP_INC           96              /* Property allocation increment */
-#define EJS_DEFAULT_OBJ_INC                    24              /* Object allocation increment */
-#define EJS_DEFAULT_STR_INC                    64              /* Object allocation increment */
-
-#define EJS_MIN_TIME_FOR_GC                    300             /**< Need 1/3 sec for GC */
-#define EJS_GC_MIN_WORK_QUOTA          50              /**< Min to stop thrashing */
-
-/*
- *     Allocation increments for all non-default interpreters
- */
-#define EJS_VAR_INC                                    32
-#define EJS_PROP_INC                           64
-#define EJS_OBJ_INC                                    64
-#define EJS_STR_INC                                    64
-
-#define EJS_INC_FRAMES                         8               /* Frame stack increment */
-#define EJS_MAX_FRAMES                         64              /* Max frame stack */
-
-/*
- *     Lexical analyser tokens
- */
-#define EJS_TOK_ERR                                    -1              /* Any error */
-#define EJS_TOK_LPAREN                         1               /* ( */
-#define EJS_TOK_RPAREN                         2               /* ) */
-#define EJS_TOK_IF                                     3               /* if */
-#define EJS_TOK_ELSE                           4               /* else */
-#define EJS_TOK_LBRACE                         5               /* { */
-#define EJS_TOK_RBRACE                         6               /* } */
-#define EJS_TOK_LOGICAL                                7               /* ||, &&, ! */
-#define EJS_TOK_EXPR                           8               /* +, -, /, % */
-#define EJS_TOK_SEMI                           9               /* ; */
-#define EJS_TOK_LITERAL                                10              /* literal string */
-#define EJS_TOK_METHOD_NAME                    11              /* methodName( */
-#define EJS_TOK_NEWLINE                                12              /* newline white space */
-#define EJS_TOK_ID                                     13              /* Identifier */
-#define EJS_TOK_EOF                                    14              /* End of script */
-#define EJS_TOK_COMMA                          15              /* Comma */
-#define EJS_TOK_VAR                                    16              /* var */
-#define EJS_TOK_ASSIGNMENT                     17              /* = */
-#define EJS_TOK_FOR                                    18              /* for */
-#define EJS_TOK_INC_DEC                                19              /* ++, -- */
-#define EJS_TOK_RETURN                         20              /* return */
-#define EJS_TOK_PERIOD                         21              /* . */
-#define EJS_TOK_LBRACKET                       22              /* [ */
-#define EJS_TOK_RBRACKET                       23              /* ] */
-#define EJS_TOK_NEW                                    24              /* new */
-#define EJS_TOK_DELETE                         25              /* delete */
-#define EJS_TOK_IN                                     26              /* in */
-#define EJS_TOK_FUNCTION                       27              /* function */
-#define EJS_TOK_NUMBER                         28              /* Number */
-#define EJS_TOK_CLASS                          29              /* class */
-#define EJS_TOK_EXTENDS                                30              /* extends */
-#define EJS_TOK_PUBLIC                         31              /* public */
-#define EJS_TOK_PRIVATE                                32              /* private */
-#define EJS_TOK_PROTECTED                      33              /* private */
-#define EJS_TOK_TRY                                    34              /* try */
-#define EJS_TOK_CATCH                          35              /* catch */
-#define EJS_TOK_FINALLY                                36              /* finally */
-#define EJS_TOK_THROW                          37              /* throw */
-#define EJS_TOK_COLON                          38              /* : */
-#define EJS_TOK_GET                                    39              /* get */
-#define EJS_TOK_SET                                    40              /* set */
-#define EJS_TOK_MODULE                         41              /* module */
-#define EJS_TOK_EACH                           42              /* each */
-
-/*
- *     Expression operators
- */
-#define EJS_EXPR_LESS                          1               /* < */
-#define EJS_EXPR_LESSEQ                                2               /* <= */
-#define EJS_EXPR_GREATER                       3               /* > */
-#define EJS_EXPR_GREATEREQ                     4               /* >= */
-#define EJS_EXPR_EQ                                    5               /* == */
-#define EJS_EXPR_NOTEQ                         6               /* != */
-#define EJS_EXPR_PLUS                          7               /* + */
-#define EJS_EXPR_MINUS                         8               /* - */
-#define EJS_EXPR_DIV                           9               /* / */
-#define EJS_EXPR_MOD                           10              /* % */
-#define EJS_EXPR_LSHIFT                                11              /* << */
-#define EJS_EXPR_RSHIFT                                12              /* >> */
-#define EJS_EXPR_MUL                           13              /* * */
-#define EJS_EXPR_ASSIGNMENT                    14              /* = */
-#define EJS_EXPR_INC                           15              /* ++ */
-#define EJS_EXPR_DEC                           16              /* -- */
-#define EJS_EXPR_BOOL_COMP                     17              /* ! */
-
-/*
- *     Conditional operators
- */
-#define EJS_COND_AND                           1               /* && */
-#define EJS_COND_OR                                    2               /* || */
-#define EJS_COND_NOT                           3               /* ! */
-
-/**
- *     EJ Parsing States. Error and Return are be negative.
- */
-#define EJS_STATE_ERR                          -1              /**< Error state */
-#define EJS_STATE_RET                          -2              /**< Return statement */
-#define EJS_STATE_EOF                          -3              /**< End of file */
-#define EJS_STATE_COND                         2               /* Parsing a conditional stmt */
-#define EJS_STATE_COND_DONE                    3
-#define EJS_STATE_RELEXP                       4               /* Parsing a relational expr */
-#define EJS_STATE_RELEXP_DONE          5
-#define EJS_STATE_EXPR                         6               /* Parsing an expression */
-#define EJS_STATE_EXPR_DONE                    7
-#define EJS_STATE_STMT                         8               /* Parsing General statement */
-#define EJS_STATE_STMT_DONE                    9
-#define EJS_STATE_STMT_BLOCK_DONE      10              /* End of block "}" */
-#define EJS_STATE_ARG_LIST                     11              /* Method arg list */
-#define EJS_STATE_ARG_LIST_DONE                12
-#define EJS_STATE_DEC_LIST                     16              /* Declaration list */
-#define EJS_STATE_DEC_LIST_DONE                17
-#define EJS_STATE_DEC                          18              /* Declaration statement */
-#define EJS_STATE_DEC_DONE                     19
-
-#define EJS_STATE_BEGIN                                EJS_STATE_STMT
-
-/*
- *     General parsing flags.
- */
-#define EJS_FLAGS_EXE                          0x1             /* Execute statements */
-#define EJS_FLAGS_LOCAL                                0x2             /* Get local vars only */
-#define EJS_FLAGS_GLOBAL                       0x4             /* Get global vars only */
-#define EJS_FLAGS_CREATE                       0x8             /* Create var */
-#define EJS_FLAGS_ASSIGNMENT           0x10    /* In assignment stmt */
-#define EJS_FLAGS_DELETE                       0x20    /* Deleting a variable */
-#define EJS_FLAGS_NEW                          0x80    /* In a new stmt() */
-#define EJS_FLAGS_EXIT                         0x100   /* Must exit */
-#define EJS_FLAGS_LHS                          0x200   /* Left-hand-side of assignment */
-#define EJS_FLAGS_FORIN                                0x400   /* In "for (v in ..." */
-#define EJS_FLAGS_CLASS_DEC                    0x800   /* "class name [extends] name " */
-#define EJS_FLAGS_TRY                          0x2000  /* In a try {} block */
-#define EJS_FLAGS_CATCH                                0x4000  /* "catch (variable)" */
-#define EJS_FLAGS_DONT_GC                      0x8000  /* Don't garbage collect */
-#define EJS_FLAGS_NO_ARGS                      0x10000 /* Accessors don't use args */
-#define EJS_FLAGS_ENUM_HIDDEN          0x20000 /* Enumerate hidden fields */
-#define EJS_FLAGS_ENUM_BASE                    0x40000 /* Enumerate base classes */
-#define EJS_FLAGS_TRACE_ARGS           0x80000 /* Support for printv */
-#define EJS_FLAGS_SHARED_SLAB          0x100000/* Using a shared slab */
-
-/*
- *     Exceptions 
- */
-#define EJS_ARG_ERROR          "ArgError"              /**< Method argument error */
-#define EJS_ASSERT_ERROR       "AssertError"   /**< Assertion error */
-#define EJS_EVAL_ERROR         "EvalError"             /**< General evalation error */
-#define EJS_INTERNAL_ERROR     "InternalError" /**< Internal error */
-#define EJS_IO_ERROR           "IOError"               /**< IO or data error */
-#define EJS_MEMORY_ERROR       "MemoryError"   /**< Memory allocation error */
-#define EJS_RANGE_ERROR                "RangeError"    /**< Data out of range (div by 0) */
-#define EJS_REFERENCE_ERROR    "ReferenceError"/**< Object or property reference */
-#define EJS_SYNTAX_ERROR       "SyntaxError"   /**< Javascript syntax error */
-#define EJS_TYPE_ERROR         "TypeError"             /**< Wrong type supplied */
-
-/*
- *     E4X 
- */
-#if BLD_FEATURE_EJS_E4X
-#if BLD_FEATURE_SQUEEZE
-#define E4X_BUF_SIZE                           512             /* Initial buffer size for tokens */
-#define E4X_BUF_MAX                                    (32 * 1024) /* Max size for tokens */
-#define E4X_MAX_NODE_DEPTH                     24              /* Max nesting of tags */
-#else
-#define E4X_BUF_SIZE                           4096
-#define E4X_BUF_MAX                                    (128 * 1024)
-#define E4X_MAX_NODE_DEPTH                     128
-#endif
-
-#define E4X_MAX_ELT_SIZE                       (E4X_BUF_MAX-1)
-#define E4X_TEXT_PROPERTY                      "-txt"
-#define E4X_TAG_NAME_PROPERTY          "-tag"
-#define E4X_COMMENT_PROPERTY           "-com"
-#define E4X_ATTRIBUTES_PROPERTY        "-att"
-#define E4X_PI_PROPERTY                                "-pi"
-#define E4X_PARENT_PROPERTY                    "-parent"
-#endif
-
-#if BLD_FEATURE_MULTITHREAD
-/**
- *     Multithreaded lock function
- */
-typedef void (*EjsLockFn)(void *lockData);
-/**
- *     Multithreaded unlock function
- */
-typedef void (*EjsUnlockFn)(void *lockData);
-#endif
-
-/*
- *     Token limits
- */
-#define EJS_MAX_LINE                           128             /* Maximum input line buffer */
-#define EJS_MAX_TOKEN                          640             /* Max input parse token */
-#define EJS_TOKEN_STACK                                3               /* Put back token stack */
-
-/*
- *     Putback token 
- */
-
-typedef struct EjsToken {
-       char            tokbuf[EJS_MAX_TOKEN];
-       int                     tid;                                            /* Token ID */
-} EjsToken;
-
-/*
- *     EJ evaluation block structure
- */
-typedef struct EjsInput {
-       EjsToken        putBack[EJS_TOKEN_STACK];       /* Put back token stack */
-       int                     putBackIndex;                           /* Top of stack index */
-       char            line[EJS_MAX_LINE];                     /* Current line */
-       char            *fileName;                                      /* File or script name */
-       int                     lineLength;                                     /* Current line length */
-       int                     lineNumber;                                     /* Parse line number */
-       int                     lineColumn;                                     /* Column in line */
-       struct EjsInput *next;                                  /* Used for backtraces */
-       const char  *procName;                                  /* Gives name in backtrace */
-       const char      *script;                                        /* Input script for parsing */
-       char            *scriptServp;                           /* Next token in the script */
-       int                     scriptSize;                                     /* Length of script */
-       char            tokbuf[EJS_MAX_TOKEN];          /* Current token */
-       int                     tid;                                            /* Token ID */
-       char            *tokEndp;                                       /* Pointer past end of token */
-       char            *tokServp;                                      /* Pointer to next token char */
-       struct EjsInput *nextInput;                             /* Free list of input structs */
-} EjsInput;
-
-/*
- *     Method call structure
- */
-typedef struct EjsProc {
-       MprArray        *args;                                          /* Args for method */
-       EjsVar          *fn;                                            /* Method definition */
-       char            *procName;                                      /* Method name */
-} EjsProc;
-
-
-/**
- *     @overview EJScript Service structure
- *     @description The EJScript service manages the overall language runtime. It 
- *             is the factory that creates interpreter instances via ejsCreateInterp.
- *             The EJScript service creates a master interpreter that holds the
- *             standard language classes and properties. When user interpreters are
- *             created, they reference (without copying) the master interpreter to
- *             gain access to the standard classes and types.
- *     @stability Prototype.
- *  @library libejs.
- *     @see ejsOpenService, ejsCloseService, ejsCreateInterp, ejsDestoryInterp
- */
-typedef struct EjsService {
-       EjsVar          *globalClass;                           /* Global class */
-       struct Ejs  *master;                                    /* Master Interp inherited by all */
-#if BLD_FEATURE_MULTITHREAD
-       EjsLockFn       lock;
-       EjsUnlockFn     unlock;
-       void            *lockData;
-#endif
-} EjsService;
-
-
-/*
- *     Memory statistics
- */
-typedef struct EjsMemStats {
-       uint            maxMem;
-       uint            usedMem;
-} EjsMemStats;
-
-
-/*
- *     Garbage collection block alignment
- */
-#define EJS_ALLOC_ALIGN(ptr) \
-       (((ptr) + sizeof(void*) - 1) & ~(sizeof(void*) - 1))
-
-/*
- *     Default GC tune factors
- */
-#define EJS_GC_START_THRESHOLD (32 * 1024)
-
-/*
- *     The Garbage collector is a generational collector. It ages blocks and 
- *     optimizes the mark / sweep algorithm to focus on new and recent blocks
- */
-typedef enum EjsGeneration {
-       EJS_GEN_NEW                     = 0,
-       EJS_GEN_RECENT_1                = 1,
-       EJS_GEN_RECENT_2                = 2,
-       EJS_GEN_OLD                     = 3,
-       EJS_GEN_PERMANENT               = 4,
-       EJS_GEN_MAX                     = 5,
-} EjsGeneration;
-
-/*
- *     Garbage collector control
- */
-typedef struct EjsGC {
-       bool            enable;
-       bool            enableDemandCollect;
-       bool            enableIdleCollect;
-       /*
-        *      maxMemory should be set to be 95% of the real max memory limit
-        */
-       uint            maxMemory;                      /* Above this, Throw Memory exception. */
-       int                     workQuota;                      /* Quota of work before GC */
-       int                     workDone;                       /* Count of allocations */
-       int                     degraded;                       /* Have exceeded maxMemory */
-
-       /*
-        *      Debug Levels 0-N (increases verbosity)
-        *              1 -- Sweep and collection count
-        *              2 -- Trace objects deleted
-        *              3 -- Trace objects marked
-        *              4 -- Print alloc report when needing a demand allocation
-        *
-        */
-       int                     debugLevel;                     /* In debug mode */
-       int                     collecting;                     /* Running garbage collection */
-       uint            collectionCount;        /* Number of times GC ran */
-#if BLD_DEBUG
-       int                     gcIndent;                       /* Indent formatting */
-       int                     objectsInUse;           /* Objects currently reachable */
-       int                     propertiesInUse;        /* Properties currently reachable */
-#endif
-} EjsGC;
-
-/*
- *     Slab memory allocation 
- */
-typedef struct EjsSlab {
-       uint            allocIncrement;         /* Growth increment in slab */
-       uint            size;                           /* Size of allocations */
-       EjsGCLink       freeList;                       /* Free list (only next ptr is used) */
-       EjsObj          *lastRecentBlock;       /* Saved for GC age generations phase */
-       EjsGCLink       allocList[EJS_GEN_MAX]; /* Allocated block list */
-
-#if BLD_FEATURE_ALLOC_STATS
-       uint            totalAlloc;                     /* Total count of allocation calls */
-       uint            freeCount;                      /* Number of blocks on the slab freelist */
-       uint            allocCount;                     /* Number of allocated blocks */
-       uint            peakAllocated;          /* Peak allocated */ 
-       uint            peakFree;                       /* Peak on the free list */ 
-       uint            totalReclaimed;         /* Total blocks reclaimed on sweeps */
-       uint            totalSweeps;            /* Total sweeps */
-#endif
-} EjsSlab;
-
-
-/**
- *     @overview EJ interpreter control structure.
- *     @description EJ allocates one control structure per active interpreter.
- *             The \ref ejsCreateInterp routine creates the Ejs structure and returns
- *             a reference to be used in subsequent EJ API calls.
- *  @stability Prototype.
- *  @library libejs.
- *     @see ejsCreateInterp, ejsDestroyInterp, ejsOpenService
- */
-struct Ejs {
-       void            *altHandle;                                     /* Alternate callback handle */
-       bool            castAlloc;                                      /* True if castTemp is allocated */
-       char            *castTemp;                                      /* Temporary string for casting */
-       char            *currentClass;                          /* Current class name */
-       EjsVar          *currentObj;                            /* Ptr to current object */
-       EjsVar          *thisObject;                            /* Ptr to current "this" */
-       EjsProperty     *currentProperty;                       /* Ptr to current property */
-       EjsGC           gc;                                                     /* Garbage collector control */
-       char            *errorMsg;                                      /* Error message */
-       char            *fileName;                                      /* File or script name */
-       int                     lineNumber;                                     /* File line number */
-       int                     scriptStatus;                           /* Status to exit() */
-       int                     flags;                                          /* Flags */
-       MprArray        *frames;                                        /* List of variable frames */
-       EjsVar          *global;                                        /* Global object */
-       EjsVar          *objectClass;                           /* Object class */
-       int                     gotException;                           /* Exception thrown */
-       EjsInput        *input;                                         /* Input evaluation block */
-       int                     depth;                                          /* Recursion depth */
-       EjsVar          *local;                                         /* Local object */
-       int                     maxDepth;                                       /* Maximum depth for formatting */
-       void            *primaryHandle;                         /* primary callback handle */
-       EjsProc         *proc;                                          /* Current method */
-       int                     recurseCount;                           /* Recursion counter */
-       EjsVar          *result;                                        /* Variable result */
-       int                     tid;                                            /* Current token id */
-       char            *token;                                         /* Pointer to token string */
-       EjsVar          tokenNumber;                            /* Parsed number */
-       EjsService      *service;                                       /* Service object */
-       void            *userData;                                      /* Method user data */
-
-       EjsSlab         *slabs;                                         /* Memory allocation slabs */
-       MprCtx          slabAllocContext;                       /* Allocation context */
-       EjsInput        *inputList;                                     /* Free list of input structs */
-
-#if BLD_FEATURE_MULTITHREAD
-       EjsLockFn       lock;                                           /* Lock method */
-       EjsUnlockFn     unlock;                                         /* Unlock method */
-       void            *lockData;                                      /* Lock data argument */
-#endif
-#define EJS_MAX_STACK  (10 * 1024)
-       char            stack[EJS_MAX_STACK];           /* Local variable stack */
-       char            *stkPtr;                                        /* Local variable stack ptr */
-       void            *inputMarker;                           /* Recurse protection */
-};
-
-
-typedef struct EjsModule
-{
-       int                     dummy;
-} EjsModule;
-
-
-/*
- *     Method callback when using Alternate handles. GaCompat uses these and
- *     passes the web server request structure via the altHandle. 
- */
-typedef void *EjsHandle;
-typedef int (*EjsAltCMethod)(Ejs *ejs, EjsHandle altHandle,
-               EjsVar *thisObj, int argc, EjsVar **argv);
-typedef int (*EjsAltStringCMethod)(Ejs *ejs, EjsHandle altHandle,
-               EjsVar *thisObj, int argc, char **argv);
-
-
-/*
- *     API Constants
- */
-#define EJS_USE_OWN_SLAB       1
-
-/******************************** Internal API ********************************/
-/*
- *     Ejs Lex
- */
-extern int              ejsLexOpenScript(Ejs *ejs, const char *script);
-extern void     ejsLexCloseScript(Ejs *ejs);
-extern int              ejsInitInputState(EjsInput *ip);
-extern void     ejsLexSaveInputState(Ejs *ejs, EjsInput* state);
-extern void     ejsLexFreeInputState(Ejs *ejs, EjsInput* state);
-extern void     ejsLexRestoreInputState(Ejs *ejs, EjsInput* state);
-extern int              ejsLexGetToken(Ejs *ejs, int state);
-extern void             ejsLexPutbackToken(Ejs *ejs, int tid, char *string);
-
-/*
- *     Parsing
- */
-extern int              ejsParse(Ejs *ejs, int state, int flags);
-extern int              ejsGetFlags(Ejs *ejs);
-
-/*
- *     Create variable scope blocks
- */
-extern int              ejsOpenBlock(Ejs *ejs);
-extern int              ejsSetBlock(Ejs *ejs, EjsVar *local);
-extern int              ejsCloseBlock(Ejs *ejs, int vid);
-extern int              ejsEvalBlock(Ejs *ejs, char *script, EjsVar *vp);
-extern void             ejsSetFileName(Ejs *ejs, const char *fileName);
-
-/*
- *     Class definitions
- */
-extern EjsVar  *ejsCreateSimpleClass(Ejs *ejs, EjsVar *baseClass, 
-                                       const char *className);
-extern int              ejsDefineObjectClass(Ejs *ejs);
-extern int              ejsDefineArrayClass(Ejs *ejs);
-extern int              ejsDefineBooleanClass(Ejs *ejs);
-extern int              ejsDefineErrorClasses(Ejs *ejs);
-extern int              ejsDefineFileClass(Ejs *ejs);
-extern int              ejsDefineFileSystemClass(Ejs *ejs);
-extern int              ejsDefineHTTPClass(Ejs *ejs);
-extern int              ejsDefineFunctionClass(Ejs *ejs);
-extern int              ejsDefineNumberClass(Ejs *ejs);
-extern int              ejsDefineStringClass(Ejs *ejs);
-extern int              ejsDefineDateClass(Ejs *ejs);
-extern int              ejsDefineStandardClasses(Ejs *ejs);
-
-#if BLD_FEATURE_EJS_E4X
-extern int              ejsDefineXmlClasses(Ejs *ejs);
-extern EjsVar  *ejsCreateXml(Ejs *ejs);
-#endif
-
-#if BLD_FEATURE_EJS_DB
-extern int             ejsDefineDbClasses(Ejs *ejs);
-#endif
-
-/*
- *     System class definitions
- */
-extern int              ejsDefineSystemClasses(Ejs *ejs);
-extern int              ejsDefineSystemClass(Ejs *ejs);
-extern int              ejsDefineAppClass(Ejs *ejs);
-extern int              ejsDefineDebugClass(Ejs *ejs);
-extern int              ejsDefineLogClass(Ejs *ejs);
-extern int              ejsDefineMemoryClass(Ejs *ejs);
-extern int              ejsDefineGCClass(Ejs *ejs);
-extern int              ejsDefineGlobalProperties(Ejs *ejs);
-
-extern int              ejsTermSystemClasses(Ejs *ejs);
-extern void     ejsTermHTTPClass(Ejs *ejs);
-
-extern int              ejsCreateObjectModel(Ejs *ejs);
-
-/*
- *     Class constructors
- */
-extern int              ejsArrayConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **argv);
-extern int              ejsXmlConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **argv);
-extern int              ejsXmlListConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **argv);
-extern int              ejsBooleanConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **agv);
-extern int              ejsFunctionConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **agv);
-extern int              ejsNumberConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **argv);
-extern int              ejsStringConstructor(Ejs *ejs, EjsVar *thisObj, int argc, 
-                                       EjsVar **argv);
-extern int              ejsDateConstructor(Ejs *ejs, EjsVar *thisObj, 
-                                       int argc, EjsVar **argv);
-
-/*
- *     Garbage collection
- */
-extern void     ejsGCInit(Ejs *ejs, int objInc, int propInc, int varInc, 
-                                       int strInc);
-extern int              ejsIsTimeForGC(Ejs *ep, int timeTillNextEvent);
-
-extern bool     ejsSetGCDebugLevel(Ejs *ep, int debugLevel);
-extern void     ejsSweepAll(Ejs *ep);
-
-extern EjsObj  *ejsAllocObj(EJS_LOC_DEC(ejs, loc));
-extern EjsProperty *ejsAllocProperty(EJS_LOC_DEC(ejs, loc));
-extern EjsVar  *ejsAllocVar(EJS_LOC_DEC(ejs, loc));
-extern void     ejsFree(Ejs *ejs, void *ptr, int slabIndex);
-
-extern int             ejsCollectGarbage(Ejs *ejs, int slabIndex);
-extern int             ejsIncrementalCollectGarbage(Ejs *ejs);
-
-#if BLD_DEBUG
-extern void    ejsDumpObjects(Ejs *ejs);
-#endif
-
-#if BLD_FEATURE_ALLOC_STATS
-extern void     ejsPrintAllocReport(Ejs *ejs, bool printLeakReport);
-#endif
-
-extern void            ejsCleanInterp(Ejs *ejs, bool doStats);
-extern void    ejsSetInternalMethods(Ejs *ejs, EjsVar *op);
-extern void    ejsSetPrimaryHandle(Ejs *ep, void *primaryHandle);
-extern void    ejsSetAlternateHandle(Ejs *ep, void *alternateHandle);
-extern void    *ejsGetUserData(Ejs *ejs);
-
-/*
- *     Could possibly make these routines public
-  */
-
-extern int             ejsSetGCMaxMemory(Ejs *ep, uint maxMemory);
-extern uint    ejsGetUsedMemory(Ejs *ejs);
-extern uint    ejsGetAllocatedMemory(Ejs *ejs);
-extern uint    ejsGetAvailableMemory(Ejs *ejs);
-extern char    *ejsFormatStack(Ejs* ep);;
-
-/********************************* Prototypes *********************************/
-#if BLD_FEATURE_MULTITHREAD
-extern int             ejsSetServiceLocks(EjsService *sp, EjsLockFn lock, 
-                                       EjsUnlockFn unlock, void *data);
-#endif
-
-/*
- *     Ejs service and interpreter management
- */
-extern EjsService *ejsOpenService(MprCtx ctx);
-extern void    ejsCloseService(EjsService *sp, bool doStats);
-
-extern Ejs             *ejsCreateInterp(EjsService *sp, void *primaryHandle, 
-                                       void *altHandle, EjsVar *global, bool useOwnSlab);
-extern void            ejsDestroyInterp(Ejs *ejs, bool doStats);
-
-extern Ejs             *ejsGetMasterInterp(EjsService *sp);
-extern EjsVar  *ejsGetGlobalClass(Ejs *ejs);
-
-/*
- *     Module support
- */
-extern EjsModule *ejsCreateModule(const char *name, const char *version, 
-       int (*start)(EjsModule*), int (*stop)(EjsModule*));
-
-/*
- *     Native Objects
- */
-
-void ejsSetNativeData(EjsVar *obj, void *data);
-void ejsSetNativeHelpers(Ejs *ejs, EjsVar *nativeClass,
-               int      (*createInstance)(Ejs *ejs, EjsVar *thisObj, int argc, 
-                       EjsVar **argv), 
-               void (*disposeInstance)(Ejs *ejs, EjsVar *thisObj),
-               bool (*hasProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop),
-               int  (*deleteProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop),
-               int      (*getProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop,
-                                       EjsVar *dest),
-               int      (*setProperty)(Ejs *ejs, EjsVar *thisObj, const char *prop, 
-                               EjsVar *value),
-               int  (*doOperator)(Ejs *ejs, EjsVar *thisObj, EjsOp *op, EjsVar
-                               *result, EjsVar *lhs, EjsVar *rhs, int *code)
-       );
-
-/*
- *     Evaluation methods
- */
-extern int             ejsEvalFile(Ejs *ejs, const char *path, EjsVar *result);
-extern int             ejsEvalScript(Ejs *ejs, const char *script, EjsVar *result);
-extern int             ejsRunMethod(Ejs *ejs, EjsVar *obj, 
-                                       const char *methodName, MprArray *args);
-extern int             ejsRunMethodCmd(Ejs *ejs, EjsVar *obj, 
-                                       const char *methodName, const char *cmdFmt, ...);
-extern EjsVar  *ejsGetReturnValue(Ejs *ejs);
-
-extern EjsVar  *ejsGetLocalObj(Ejs *ejs);
-extern EjsVar  *ejsGetGlobalObj(Ejs *ejs);
-
-/*
- *     Define a class in the specified interpreter. If used with the default 
- *     interpeter, then the class is defined for all interpreters.
- */
-extern EjsVar  *ejsDefineClass(Ejs *ejs, const char *className, 
-                                       const char *extends, EjsCMethod constructor);
-extern EjsVar  *ejsGetClass(Ejs *ejs, EjsVar *parentClass, 
-                                       const char *className);
-
-extern const char *ejsGetClassName(EjsVar *obj);
-extern const char *ejsGetBaseClassName(EjsVar *obj);
-
-extern bool    ejsIsSubClass(EjsVar *target, EjsVar *baseClass);
-extern EjsVar  *ejsGetBaseClass(EjsVar *obj);
-extern void            ejsSetBaseClass(EjsVar *obj, EjsVar *baseClass);
-
-
-#define ejsCreateSimpleObj(ejs, className) \
-                               ejsCreateSimpleObjInternal(EJS_LOC_ARGS(ejs), className)
-extern EjsVar  *ejsCreateSimpleObjInternal(EJS_LOC_DEC(ejs, loc), 
-                                       const char *className);
-
-#define ejsCreateSimpleObjUsingClass(ejs, baseClass) \
-                               ejsCreateSimpleObjUsingClassInt(EJS_LOC_ARGS(ejs), \
-                                       baseClass)
-extern EjsVar  *ejsCreateSimpleObjUsingClassInt(EJS_LOC_DEC(ejs, loc), 
-                                       EjsVar *baseClass);
-
-/*
- *     This will create an object and call all required constructors
- */
-extern EjsVar  *ejsCreateObj(Ejs *ejs, EjsVar *obj, 
-                                               const char *className, const char *constructorArgs);
-
-#define ejsCreateObjUsingArgv(ejs, obj, className, args) \
-                               ejsCreateObjUsingArgvInternal(EJS_LOC_ARGS(ejs), obj, \
-                                       className, args)
-extern EjsVar  *ejsCreateObjUsingArgvInternal(EJS_LOC_DEC(ejs, loc), 
-                                       EjsVar *obj, const char *className, MprArray *args);
-
-#define ejsCreateArray(ejs, size) \
-                               ejsCreateArrayInternal(EJS_LOC_ARGS(ejs), size)
-extern EjsVar  *ejsCreateArrayInternal(EJS_LOC_DEC(ejs, loc), 
-                                       int size);
-
-/*
- *     Array methods. MOB -- need other array methods
- */
-/* MOB -- spell out  element */
-extern EjsVar  *ejsAddArrayElt(Ejs *ejs, EjsVar *op, EjsVar *element, 
-                                       EjsCopyDepth copyDepth);
-/*
- *     Required: Array methods
- *
-       array = obj.getMethods();
-       array = obj.getProperties();
-
-       array.property.isPublic();
-       array.property.isPrivate();
-       array.property.isMethod();
-       array.property.isEnumerable();
-       array.property.isReadOnly();
-       array.property.allowsNonUnique();
-       array.property.getParent();
-*/
-
-/* MOB -- should we have an API that takes a EjsCopyDepth */
-extern void            ejsSetReturnValue(Ejs *ejs, EjsVar *vp);
-extern void            ejsSetReturnValueAndFree(Ejs *ejs, EjsVar *vp);
-extern void            ejsSetReturnValueToBoolean(Ejs *ejs, bool value);
-extern void            ejsSetReturnValueToBinaryString(Ejs *ejs, 
-                                       const uchar *value, int len);
-extern void            ejsSetReturnValueToInteger(Ejs *ejs, int value);
-extern void            ejsSetReturnValueToNumber(Ejs *ejs, EjsNum value);
-extern void            ejsSetReturnValueToString(Ejs *ejs, const char *value);
-extern void            ejsSetReturnValueToUndefined(Ejs *ejs);
-
-/*
- *     Variable access and control. The fullName arg can contain "[]" and "."
- */
-extern bool            ejsGetBool(Ejs *ejs, const char *fullName, bool defaultValue);
-extern int             ejsGetInt(Ejs *ejs, const char *fullName, int defaultValue);
-extern const char *ejsGetStr(Ejs *ejs, const char *fullName, 
-                                       const char *defaultValue);
-extern EjsVar  *ejsGetVar(Ejs *ejs, const char *fullName);
-
-extern int             ejsSetBool(Ejs *ejs, const char *fullName, bool value);
-extern int             ejsSetInt(Ejs *ejs, const char *fullName, int value);
-extern int             ejsSetStr(Ejs *ejs, const char *fullName, const char *value);
-extern int             ejsSetVar(Ejs *ejs, const char *fullName, const EjsVar *value);
-extern int             ejsSetVarAndFree(Ejs *ejs, const char *fullName, EjsVar *value);
-
-extern int             ejsDeleteVar(Ejs *ejs, const char *fullName);
-
-/*
- *     Error handling
- */
-extern void            ejsError(Ejs *ejs, const char *errorType, const char *fmt, 
-                                       ...) PRINTF_ATTRIBUTE(3,4);
-/* MOB -- this should take no arguments */
-extern void            ejsArgError(Ejs *ejs, const char *msg);
-extern void            ejsInternalError(Ejs *ejs, const char *msg);
-extern void            ejsMemoryError(Ejs *ejs);
-extern void            ejsSyntaxError(Ejs *ejs, const char *msg);
-
-/*
- *     Utility methods
- */
-extern int             ejsParseArgs(int argc, char **argv, const char *fmt, ...);
-
-extern void    ejsExit(Ejs *ejs, int status);
-extern bool            ejsIsExiting(Ejs *ejs);
-extern void            ejsClearExiting(Ejs *ejs);
-
-extern bool            ejsGotException(Ejs *ejs);
-
-/* MOB -- rename Method to Function */
-extern void    ejsFreeMethodArgs(Ejs *ep, MprArray *args);
-extern int             ejsStrcat(Ejs *ep, EjsVar *dest, EjsVar *src);
-
-/*
- *     Debugging routines
- */
-extern char    *ejsGetErrorMsg(Ejs *ejs);
-extern int             ejsGetLineNumber(Ejs *ejs);
-extern void            ejsTrace(Ejs *ejs, const char *fmt, ...);
-
-/*
- *     Multithreaded lock routines
- */
-#if BLD_FEATURE_MULTITHREAD
-#define ejsLock(sp)    if (sp->lock) { (sp->lock)(sp->lockData); } else
-#define ejsUnlock(sp)  if (sp->unlock) { (sp->unlock)(sp->lockData); } else
-#else
-#define ejsLock(sp)            
-#define ejsUnlock(sp)  
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* _h_EJS */
-
-/*****************************************************************************/
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejsClass.c b/source4/lib/appweb/ejs-2.0/ejs/ejsClass.c
deleted file mode 100644 (file)
index 58609ad..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-/*
- *     @file   ejsClass.c
- *     @brief  EJS class support
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************* Includes ***********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/************************************ Code ************************************/
-/*
- *     Internal API
- *
- *     Routine to create a simple class object. This routine will create a
- *     stand-alone class object. Callers must insert this into the relevant
- *     "global" object for name resolution. From these class objects, instance
- *     objects may be created via the javascript "new" command.
- *
- *     Users should use ejsDefineClass
- */
-
-EjsVar *ejsCreateSimpleClass(Ejs *ep, EjsVar *baseClass, const char *className)
-{
-       EjsProperty     *pp;
-       EjsVar          *classObj;
-
-       /*
-        *      Create an instance of an Object to act as the static class object
-        */
-       classObj = ejsCreateSimpleObjUsingClass(ep, baseClass);
-       if (classObj == 0) {
-               mprAssert(classObj);
-               return 0;
-       }
-       ejsSetClassName(ep, classObj, className);
-
-       /*
-        *      Set the propotype property to point to this class.
-        *      Note: this is a self reference so the alive bit will not be turned on.
-        */
-       pp = ejsSetProperty(ep, classObj, "prototype", classObj);
-       ejsMakePropertyEnumerable(pp, 0);
-
-       return classObj;
-}
-
-/******************************************************************************/
-/*
- *     Define a class in the given interpreter. If parentClass is specified, the
- *     class is defined in the parent. Otherwise, the class will be defined
- *     locally/globally. ClassName and extends are full variable specs 
- *     (may contain ".")
- */
-
-EjsVar *ejsDefineClass(Ejs *ep, const char *className, const char *extends, 
-       EjsCMethod constructor)
-{
-       EjsVar          *parentClass, *classObj, *baseClass, *vp;
-       char            *name;
-       char            *cp;
-
-       /*
-        *      If the className is a qualified name (with "."), then get the 
-        *      parent class name.
-        */
-       name = mprStrdup(ep, className);
-       cp = strrchr(name, '.');
-       if (cp != 0) {
-               *cp++ = '\0';
-               className = cp;
-               parentClass = ejsFindProperty(ep, 0, 0, ep->global, ep->local, name, 0);
-               if (parentClass == 0 || parentClass->type != EJS_TYPE_OBJECT) {
-                       mprError(ep, MPR_LOC, "Can't find class's parent class %s", name);
-                       mprFree(name);
-                       return 0;
-               }
-
-       } else {
-               /*
-                *      Simple class name without a "." so create the class locally 
-                *      if a local scope exists, otherwise globally.
-                */
-               parentClass = (ep->local) ? ep->local : ep->global;
-       }
-
-       if (parentClass == 0) {
-               mprError(ep, MPR_LOC, "Can't find parent class");
-               mprFree(name);
-               return 0;
-       }
-
-       /* OPT should use function that doesn't parse [] . */
-       baseClass = ejsGetClass(ep, 0, extends);
-       if (baseClass == 0) {
-               mprAssert(baseClass);
-               mprFree(name);
-               return 0;
-       }
-
-       classObj = ejsCreateSimpleClass(ep, baseClass, className);
-       if (classObj == 0) {
-               mprAssert(classObj);
-               mprFree(name);
-               return 0;
-       }
-
-       if (constructor) {
-               ejsDefineCMethod(ep, classObj, className, constructor, 0);
-       }
-
-       ejsSetPropertyAndFree(ep, parentClass, className, classObj);
-
-       vp = ejsGetPropertyAsVar(ep, parentClass, className);
-       mprFree(name);
-
-       return vp;
-}
-
-/******************************************************************************/
-/*
- *     Find a class and return the property defining the class. ClassName may 
- *     contain "." and is interpreted relative to obj. Obj is typically some
- *     parent object, ep->local or ep->global. If obj is null, then the global 
- *     space is used.
- */
-
-EjsVar *ejsGetClass(Ejs *ep, EjsVar *obj, const char *className)
-{
-       EjsVar          *vp;
-
-       mprAssert(ep);
-
-       /*
-        *      Search first for a constructor of the name of class
-        *      global may not be defined yet.
-        */
-       if (obj) {
-               vp = ejsFindProperty(ep, 0, 0, obj, 0, className, 0);
-
-       } else {
-               mprAssert(ep->global);
-               vp = ejsFindProperty(ep, 0, 0, ep->global, ep->local, className, 0);
-       }
-       if (vp == 0 || vp->type != EJS_TYPE_OBJECT) {
-               return 0;
-       }
-
-       /*
-        *      Return a reference to the prototype (self) reference. This
-        *      ensures that even if "obj" is deleted, this reference will remain
-        *      usable.
-        */
-       return ejsGetPropertyAsVar(ep, vp, "prototype");
-}
-
-/******************************************************************************/
-/*
- *     Return the class name of a class or object
- */
-
-const char *ejsGetClassName(EjsVar *vp)
-{
-       EjsObj  *obj;
-
-       mprAssert(vp);
-       mprAssert(vp->type == EJS_TYPE_OBJECT);
-       mprAssert(vp->objectState->baseClass);
-
-       if (vp == 0 || !ejsVarIsObject(vp)) {
-               return 0;
-       }
-       obj = vp->objectState;
-
-       return obj->className;
-}
-
-/******************************************************************************/
-/*
- *     Return the class name of an objects underlying class
- *     If called on an object, it returns the base class. 
- *     If called on a class, it returns the base class for the class. 
- */
-
-const char *ejsGetBaseClassName(EjsVar *vp)
-{
-       EjsObj  *obj;
-
-       mprAssert(vp);
-       mprAssert(vp->type == EJS_TYPE_OBJECT);
-       mprAssert(vp->objectState->baseClass);
-
-       if (vp == 0 || !ejsVarIsObject(vp)) {
-               return 0;
-       }
-       obj = vp->objectState;
-       if (obj->baseClass == 0) {
-               return 0;
-       }
-       mprAssert(obj->baseClass->objectState);
-
-       return obj->baseClass->objectState->className;
-}
-
-/******************************************************************************/
-
-EjsVar *ejsGetBaseClass(EjsVar *vp)
-{
-       if (vp == 0 || !ejsVarIsObject(vp) || vp->objectState == 0) {
-               mprAssert(0);
-               return 0;
-       }
-       return vp->objectState->baseClass;
-}
-
-/******************************************************************************/
-
-void ejsSetBaseClass(EjsVar *vp, EjsVar *baseClass)
-{
-       if (vp == 0 || !ejsVarIsObject(vp) || vp->objectState == 0) {
-               mprAssert(0);
-               return;
-       }
-       vp->objectState->baseClass = baseClass;
-}
-
-/******************************************************************************/
-
-#else
-void ejsProcsDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim:tw=78
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c b/source4/lib/appweb/ejs-2.0/ejs/ejsCmd.c
deleted file mode 100644 (file)
index 74b57de..0000000
+++ /dev/null
@@ -1,468 +0,0 @@
-/*
- *     @file   ejsCmd.c
- *     @brief  Embedded JavaScript (EJS) command line program.
- *     @overview 
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     Copyright (c) Michael O'Brien, 1994-1995. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS && !BREW
-
-/************************************ Defines *********************************/
-
-#define EJS_MAX_CMD_LINE       (16 * 1024)
-#define EJS_MAX_SCRIPT         (4 * 1024 * 1024)
-#define EJS_MAX_RESULT_SIZE    (4 * 1024 * 1024)
-#define EJS_PROMPT                     "ejs> "
-
-/****************************** Forward Declarations **************************/
-
-static int     parseFile(EjsService *ejsService, Ejs *ejs, const char *fileName, 
-       const char *testName, MprFile *testLogFile);
-static int     ifConsole();
-
-static int     interactiveUse(MprApp *app, Ejs *ejs, FILE *input, 
-                               char *fileName);
-static char *readCmd(MprApp *app, FILE *input);
-
-static int     memoryFailure(MprApp *app, uint size, uint total, bool granted);
-
-static int     isConsole = 0;
-static int     traceCmds = 0;
-static int     stats = 0;
-static int     verbose = 0;
-
-/************************************ Main ************************************/
-
-int main(int argc, char *argv[]) 
-{
-       MprApp                  *app;
-       const char              *programName;
-       MprFile                 *testLogFile;
-       EjsService              *ejsService;
-       Ejs                             *ejs;
-       char                    *commandLine;
-       const char              *testName;
-       char                    *argp, *cmd, *testLog;
-       int                             i, rc, nextArg, err, len, firstArg, iterations, debugLevel;
-
-       app = mprInit(memoryFailure);
-
-       isConsole = ifConsole();
-       programName = mprGetBaseName(argv[0]);
-       debugLevel = 0;
-
-       ejsService = ejsOpenService(app);
-       if (ejsService == 0) {
-               mprError(app, MPR_LOC, "Can't initialize the EJS service.");
-               return -1;
-       }
-
-       err = 0;
-       iterations = 1;
-       stats = 0;
-       testLog = getenv("TEST_LOG");
-       testLogFile = 0;
-       testName = 0;
-
-       for (nextArg = 1; nextArg < argc; nextArg++) {
-               argp = argv[nextArg];
-               if (*argp != '-') {
-                       break;
-               }
-               if (strcmp(argp, "--debug") == 0) {
-                       if (nextArg >= argc) {
-                               err++;
-                       } else {
-                               debugLevel = atoi(argv[++nextArg]);
-                       }
-
-               } else if (strcmp(argp, "--stats") == 0) {
-                       stats++;
-
-               } else if (strcmp(argp, "--trace") == 0) {
-                       traceCmds++;
-
-               } else if (strcmp(argp, "--iterations") == 0) {
-                       if (nextArg >= argc) {
-                               err++;
-                       } else {
-                               iterations = atoi(argv[++nextArg]);
-                       }
-
-               } else if (strcmp(argp, "--log") == 0) {
-                       /* Get file to log test results to when using ejs as a test shell */
-                       if (nextArg >= argc) {
-                               err++;
-                       } else {
-                               testLog = argv[++nextArg];
-                       }
-
-               } else if (strcmp(argp, "--testName") == 0) {
-                       if (nextArg >= argc) {
-                               err++;
-                       } else {
-                               testName = argv[++nextArg];
-                       }
-
-               } else if (strcmp(argp, "-v") == 0) {
-                       verbose++;
-
-               } else if (strcmp(argp, "-vv") == 0) {
-                       verbose += 2;
-
-               } else if (strcmp(argp, "--verbose") == 0) {
-                       verbose += 2;
-
-               } else {
-                       err++;
-                       break;
-               }
-               if (err) {
-                       mprErrorPrintf(app, 
-                               "Usage: %s [options] files...   or\n"
-                               "       %s < file               or\n"
-                               "       %s                      or\n"
-                               "  Switches:\n"
-                               "    --iterations num     # Number of iterations to eval file\n"
-                               "    --stats              # Output stats on exit\n"
-                               "    --testName name      # Set the test name",
-                               programName, programName, programName);
-                       return -1;
-               }
-       }
-
-       if (testName) {
-               i = 0;
-               commandLine = 0;
-               len = mprAllocStrcat(MPR_LOC_ARGS(app), &commandLine, 0, " ", 
-                       mprGetBaseName(argv[i++]), NULL);
-               for (; i < argc; i++) {
-                       len = mprReallocStrcat(MPR_LOC_ARGS(app), &commandLine, 0, len, 
-                               " ", argv[i], NULL);
-               }
-               mprPrintf(app, "  %s\n", commandLine);
-       }
-       if (testLog) {
-               testLogFile = mprOpen(app, testLog, 
-                       O_CREAT | O_APPEND | O_WRONLY | O_TEXT, 0664);
-               if (testLogFile == 0) {
-                       mprError(app, MPR_LOC, "Can't open %s", testLog);
-                       return MPR_ERR_CANT_OPEN;
-               }
-               mprFprintf(testLogFile, "\n  %s\n", commandLine);
-       }
-
-       ejs = ejsCreateInterp(ejsService, 0, 0, 0, 0);
-       if (ejs == 0) {
-               mprError(app, MPR_LOC, "Can't create EJS interpreter");
-               ejsCloseService(ejsService, stats);
-               if (testLogFile) {
-                       mprClose(testLogFile);
-               }
-               mprTerm(app, stats);
-               exit(-1);
-       }
-
-       if (debugLevel > 0) {
-               ejsSetGCDebugLevel(ejs, debugLevel);
-       }
-
-       rc = 0;
-
-       if (nextArg < argc) {
-               /*
-                *      Process files supplied on the command line
-                */
-               firstArg = nextArg;
-               for (i = 0; i < iterations; i++) {
-                       for (nextArg = firstArg; nextArg < argc; nextArg++) {
-                               rc = parseFile(ejsService, ejs, argv[nextArg], testName, 
-                                       testLogFile);
-                               if (rc < 0) {
-                                       return rc;
-                               }
-                       }
-               }
-               if (testName) {
-                       if (verbose == 1) {
-                               mprPrintf(app, "\n");
-                       } 
-                       if (verbose <= 1) {
-                               mprPrintf(app, "  # PASSED all tests for \"%s\"\n", testName);
-                       }
-               }
-
-       } else if (! isConsole) {
-               /*
-                *      Read a script from stdin
-                */
-               cmd = readCmd(app, stdin);
-
-               ejsSetFileName(ejs, "stdin");
-
-               rc = ejsEvalScript(ejs, cmd, 0);
-               if (rc < 0) {
-                       mprPrintf(app, "ejs: Error: %s\n", ejsGetErrorMsg(ejs));
-               }
-               mprFree(cmd);
-
-       } else {
-               /*
-                *      Interactive use. Read commands from the command line.
-                */
-               rc = interactiveUse(app, ejs, stdin, "stdin");
-       }
-
-       /*
-        *      Cleanup. Do stats if required.
-        */
-       if (ejs) {
-               ejsCleanInterp(ejs, 0);
-               ejsCleanInterp(ejs->service->master, 0);
-               ejsDestroyInterp(ejs, 0);
-       }
-
-       ejsCloseService(ejsService, stats);
-
-       if (testLogFile) {
-               mprClose(testLogFile);
-       }
-
-       mprTerm(app, stats);
-       return rc;
-}
-
-/******************************************************************************/
-
-static int parseFile(EjsService *ejsService, Ejs *ejs, const char *fileName, 
-       const char *testName, MprFile *testLogFile)
-{
-       int             rc;
-
-       if (testName && verbose == 1) {
-               mprPrintf(ejs, ".");
-       }
-       if (verbose > 1) {
-               mprPrintf(ejs, "File: %s\n", fileName);
-       }
-
-       rc = ejsEvalFile(ejs, fileName, 0);
-
-       if (testName) {
-               char    fileBuf[MPR_MAX_FNAME], *cp;
-               mprStrcpy(fileBuf, sizeof(fileBuf), fileName);
-               if ((cp = strstr(fileBuf, ".ejs")) != 0) {
-                       *cp = '\0';
-               }
-               if (rc == 0) {
-                       if (verbose > 1) {
-                               mprPrintf(ejs, "  # PASSED test \"%s.%s\"\n", testName, 
-                                       fileBuf);
-                       }
-                       if (testLogFile) {
-                               mprFprintf(testLogFile, "  # PASSED test \"%s.%s\"\n", 
-                                       testName, fileBuf);
-                       }
-
-               } else {
-
-                       mprPrintf(ejs, "FAILED test \"%s.%s\"\nDetails: %s\n", 
-                               testName, fileBuf, ejsGetErrorMsg(ejs));
-
-                       if (testLogFile) {
-                               mprFprintf(testLogFile, 
-                                       "FAILED test \"%s.%s\"\nDetails: %s\n", 
-                                       testName, fileBuf, ejsGetErrorMsg(ejs));
-                       }
-               }
-       } else if (rc < 0) {
-               mprPrintf(ejs, "ejs: %sIn file \"%s\"\n", 
-                       ejsGetErrorMsg(ejs), fileName);
-       }
-       return rc;
-}
-
-/******************************************************************************/
-
-static char *readCmd(MprApp *app, FILE *input)
-{
-       char    line[EJS_MAX_CMD_LINE];
-       char    *cmd;
-       int             len, cmdLen;
-
-       cmd = 0;
-       cmdLen = 0;
-
-       line[sizeof(line) - 1] = '\0';
-
-       while (1) {
-
-               if (fgets(line, sizeof(line) - 1, input) == NULL) {
-                       break;
-               }
-
-               len = strlen(line);
-
-               if (line[len - 1] == '\\') {
-                       line[len - 1] = '\0';
-               }
-               cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT, 
-                       cmdLen, 0, line, NULL);
-       }
-       return cmd;
-}
-
-/******************************************************************************/
-
-static int interactiveUse(MprApp *app, Ejs *ejs, FILE *input, char *fileName)
-{
-       EjsVar  result;
-       char    line[EJS_MAX_CMD_LINE];
-       char    *cmd, *buf;
-       int             len, cmdLen, rc;
-
-       cmd = 0;
-       cmdLen = 0;
-
-       line[sizeof(line) - 1] = '\0';
-
-       ejsSetFileName(ejs, "console");
-
-       while (! ejsIsExiting(ejs)) {
-
-               if (isConsole) {
-                       write(1, EJS_PROMPT, strlen(EJS_PROMPT));
-               }
-
-               if (fgets(line, sizeof(line) - 1, input) == NULL) {
-                       break;
-               }
-
-               len = strlen(line);
-               while (len > 0 && 
-                               (line[len - 1] == '\n' || line[len - 1] == '\r')) {
-                       len--;
-                       line[len] = '\0';
-               }
-
-               if (line[len - 1] == '\\') {
-                       line[len - 1] = '\0';
-                       cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT, 
-                               cmdLen, 0, line, NULL);
-
-               } else {
-
-                       cmdLen = mprReallocStrcat(MPR_LOC_ARGS(app), &cmd, EJS_MAX_SCRIPT, 
-                               cmdLen, 0, line, NULL);
-                       
-
-                       if (traceCmds) {
-                               mprPrintf(ejs, "# %s\n", cmd);
-                       }
-
-                       if (cmd[0] == 0x4 || cmd[0] == 0x26 || strcmp(cmd, "quit") == 0) {
-                               ejsExit(ejs, 0);
-
-                       } else if ((rc = ejsEvalScript(ejs, cmd, &result)) < 0) {
-
-                               mprPrintf(app, "ejs: Error: %s\n", ejsGetErrorMsg(ejs));
-
-                               if (! isConsole) {
-                                       return rc;
-                               }
-
-                       } else {
-                               if (isConsole || traceCmds) {
-                                       buf = ejsVarToString(ejs, &result);
-                                       mprPrintf(ejs, "%s\n", buf);
-                               }
-                       }
-                       mprFree(cmd);
-                       cmd = 0;
-                       cmdLen = 0;
-               }
-       }
-       return 0;
-}
-
-/******************************************************************************/
-
-static int ifConsole()
-{
-#if WIN
-       INPUT_RECORD    irec[1];
-       int                             records = 0;
-
-       if (PeekConsoleInput(GetStdHandle(STD_INPUT_HANDLE), irec, 1, 
-                       &records) != 0) {
-               return 1;
-       }
-#else
-       return isatty(0);
-#endif
-       return 0;
-}
-
-/******************************************************************************/
-
-static int memoryFailure(MprApp *app, uint size, uint total, bool granted)
-{
-       if (!granted) {
-               mprPrintf(app, "Can't allocate memory block of size %d\n", size);
-               mprPrintf(app, "Total memory used %d\n", total);
-               exit(255);
-       }
-       mprPrintf(app, "Memory request for %d bytes exceeds memory red-line\n",
-               size);
-       mprPrintf(app, "Total memory used %d\n", total);
-       return 0;
-}
-
-/******************************************************************************/
-
-#else
-void ejsCmdLineDummy() {}
-
-/******************************************************************************/
-#endif /* BLD_FEATURE_EJS */
-
-/*
- * Local variables:
- * tab-width: 4
- * c-basic-offset: 4
- * End:
- * vim600: sw=4 ts=4 fdm=marker
- * vim<600: sw=4 ts=4
- */
diff --git a/source4/lib/appweb/ejs-2.0/ejs/ejsGarbage.c b/source4/lib/appweb/ejs-2.0/ejs/ejsGarbage.c
deleted file mode 100755 (executable)
index 264da05..0000000
+++ /dev/null
@@ -1,1214 +0,0 @@
-/*
- *     @file   ejsGarbage.c
- *     @brief  EJS Garbage collector.
- *     @overview This implements a generational mark and sweep collection scheme.
- */
-/********************************* Copyright **********************************/
-/*
- *     @copy   default
- *     
- *     Copyright (c) Mbedthis Software LLC, 2003-2006. All Rights Reserved.
- *     
- *     This software is distributed under commercial and open source licenses.
- *     You may use the GPL open source license described below or you may acquire 
- *     a commercial license from Mbedthis Software. You agree to be fully bound 
- *     by the terms of either license. Consult the LICENSE.TXT distributed with 
- *     this software for full details.
- *     
- *     This software is open source; you can redistribute it and/or modify it 
- *     under the terms of the GNU General Public License as published by the 
- *     Free Software Foundation; either version 2 of the License, or (at your 
- *     option) any later version. See the GNU General Public License for more 
- *     details at: http://www.mbedthis.com/downloads/gplLicense.html
- *     
- *     This program is distributed WITHOUT ANY WARRANTY; without even the 
- *     implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
- *     
- *     This GPL license does NOT permit incorporating this software into 
- *     proprietary programs. If you are unable to comply with the GPL, you must
- *     acquire a commercial license to use this software. Commercial licenses 
- *     for this software and support services are available from Mbedthis 
- *     Software at http://www.mbedthis.com 
- *     
- *     @end
- */
-/********************************** Includes **********************************/
-
-#include       "ejs.h"
-
-#if BLD_FEATURE_EJS
-
-/****************************** Forward Declarations **************************/
-
-static void    mark(Ejs *ep);
-static void            markObjByVar(Ejs *ep, EjsVar *op);
-static void    markObj(EjsObj *obj);
-static void    markPerm(Ejs *ep, uint gen);
-static int             sweep(Ejs *ep, uint gen);
-static EjsGCLink *ejsAlloc(EJS_LOC_DEC(ep, loc), int slabIndex);
-static void    ejsGracefulDegrade(Ejs *ep);
-static void    resetMarks(Ejs *ep, EjsSlab *slab);
-
-#if FUTURE
-static void    ageGenerations(Ejs *ep);
-#endif
-
-#if BLD_DEBUG && (!BREW || BREW_SIMULATOR)
-uint breakAddr;
-#endif
-
-/************************************* Code ***********************************/
-
-void ejsGCInit(Ejs *ep, int objInc, int propInc, int varInc, int strInc)
-{
-       EjsSlab         *slab;
-
-       if (ep->service && ep->service->globalClass) {
-               ep->service->globalClass->objectState->gcMarked = 1;
-       }
-
-       slab = &ep->slabs[EJS_SLAB_OBJ];
-       slab->allocIncrement = objInc;
-       slab->size = EJS_ALLOC_ALIGN(sizeof(EjsObj));
-
-       slab = &ep->slabs[EJS_SLAB_PROPERTY];
-       slab->allocIncrement = propInc;
-       slab->size = EJS_ALLOC_ALIGN(sizeof(EjsProperty));
-
-       slab = &ep->slabs[EJS_SLAB_VAR];
-       slab->allocIncrement = varInc;
-       slab->size = EJS_ALLOC_ALIGN(sizeof(EjsVar));
-
-       /*
-        *      Initialize GC.
-        *      Enable GC both idle and demand collections.
-        *      Set no limits and garbage collect if the slabs are
-        *      empty and we have used more than the THRESHOLD of ram.
-        */
-       ep->gc.debugLevel = 0;
-       ep->gc.enable = 1;
-       ep->gc.enableIdleCollect = 1;
-       ep->gc.enableDemandCollect = 1;
-       ep->gc.workQuota = EJS_GC_WORK_QUOTA;
-       ep->gc.maxMemory = 0;
-}
-
-
-/******************************************************************************/
-#if BLD_FEATURE_ALLOC_STATS
-
-void ejsPrintAllocReport(Ejs *ep, bool printLeakReport)
-{
-       EjsSlab         *slab;
-       char            *name;
-       int                     slabIndex, isObj;
-       
-       for (slabIndex = 0; slabIndex < EJS_SLAB_MAX; slabIndex++) {
-               slab = &ep->slabs[slabIndex];
-               if (slabIndex == EJS_SLAB_VAR) {
-                       name = "var";
-               } else if (slabIndex == EJS_SLAB_PROPERTY) {
-                       name = "prop";
-               } else {
-                       name = "obj";
-               }
-               mprLog(ep, 0, " ");
-               mprLog(ep, 0, "  GC \"%s\" local slab", name);
-               mprLog(ep, 0, "  Total blocks           %14d", 
-                       slab->allocCount + slab->freeCount);
-               mprLog(ep, 0, "  Block size             %14d", slab->size);
-               mprLog(ep, 0, "  Slab RAM allocated     %14d", 
-                       (slab->allocCount + slab->freeCount) * slab->size);
-               mprLog(ep, 0, "  Slab RAM in use        %14d", 
-                       slab->allocCount * slab->size);
-               mprLog(ep, 0, "  Blocks in use          %14d", slab->allocCount);
-               mprLog(ep, 0, "  Free blocks            %14d", slab->freeCount);
-               mprLog(ep, 0, "  Peak allocated         %14d", slab->peakAllocated);
-               mprLog(ep, 0, "  Peak free              %14d", slab->peakFree);
-               mprLog(ep, 0, "  Total allocations      %14d", slab->totalAlloc);
-               mprLog(ep, 0, "  Total blocks reclaimed %14d", slab->totalReclaimed);
-               mprLog(ep, 0, "  Total sweeps           %14d", slab->totalSweeps);
-               mprLog(ep, 0, "  Allocation inc         %14d", slab->allocIncrement);
-       }
-
-       mprLog(ep, 0, " ");
-       mprLog(ep, 0, "  Total EJS memory in use    %10d", ejsGetUsedMemory(ep));
-       mprLog(ep, 0, "  Total EJS memory allocated %10d", 
-               ejsGetAllocatedMemory(ep));
-
-       if (printLeakReport) {
-               mprLog(ep, 0, " ");
-               for (slabIndex = 0; slabIndex < EJS_SLAB_MAX; slabIndex++) {
-                       int             size;
-
-                       slab = &ep->slabs[slabIndex];
-
-                       isObj = 0;
-                       mprLog(ep, 0, " ");
-                       if (slabIndex == EJS_SLAB_VAR) {
-                               name = "var";
-                               size = sizeof(EjsVar);
-                       } else if (slabIndex == EJS_SLAB_PROPERTY) {
-                               name = "prop";
-                               size = sizeof(EjsProperty);
-                       } else {
-                               name = "obj";
-                               size = sizeof(EjsObj);
-                               isObj++;
-                       }
-#if BLD_FEATURE_ALLOC_LEAK_TRACK
-{
-                       EjsGCLink       *lp;
-                       EjsObj          *obj;
-                       int                     count;
-
-                       mprLog(ep, 0, "EJS Leak Report for \"%s\"", name);
-                       count = 0;
-
-                       for (lp = slab->allocList[0].next; lp; lp = lp->next) {
-                               mprLog(ep, 0, "  %-20s           %10d", lp->allocatedBy, size);
-                               if (isObj) {
-                                       obj = (EjsObj*) lp;
-                                       mprLog(ep, 0, "  %-20s           %10d %s %s", 
-                                               lp->allocatedBy, size,
-                                               obj->permanent ? "permanent" : "", 
-                                               obj->alive ? "alive" : ""
-                                       );
-                               } else {
-                                       mprLog(ep, 0, "  %-20s           %10d", lp->allocatedBy, 
-                                               size);
-                               }
-                               count++;
-                       }
-                       mprLog(ep, 0, "  Total blocks               %14d", count);
-}
-#endif
-               }
-               mprLog(ep, 0, " ");
-       }
-}
-
-#endif
-/******************************************************************************/
-/*
- *     Slab allocator
- */
-
-static EjsGCLink *ejsAlloc(EJS_LOC_DEC(ep, loc), int slabIndex)
-{
-       EjsSlab         *slab;
-       EjsGCLink       *block;
-       EjsGC           *gc;
-       uint            allocatedMemory;
-       int                     i;
-
-       mprStackCheck(ep);
-
-       if (slabIndex < 0 || slabIndex >= EJS_SLAB_MAX) {
-               mprAssert(0);
-               return 0;
-       }
-
-       /*
-        *      See if the slab has some free blocks
-        */
-       slab = &ep->slabs[slabIndex];
-       if ((block = slab->freeList.next) == 0) {
-
-               allocatedMemory = ejsGetAllocatedMemory(ep);
-               gc = &ep->gc;
-
-               /*
-                *      No blocks available. If demand collection is enabled, try
-                *      to garbage collect first. We collect if we have done a good 
-                *      work quota or we are over the max memory limit.
-                */
-               if (slabIndex != EJS_SLAB_VAR && 
-                               ep->gc.enable && ep->gc.enableDemandCollect) {
-                       if ((ep->gc.workDone > ep->gc.workQuota) || 
-                          (gc->maxMemory > 0 && allocatedMemory > gc->maxMemory)) {
-
-#if DEBUG_USE_ONLY
-                               if (ep->gc.debugLevel > 0) {
-                                       mprLog(ep, 0, "Need GC, EJS RAM %d, MPR RAM %d\n",
-                                               allocatedMemory, mprGetAllocatedMemory(ep));
-                                       if (ep->gc.debugLevel > 4) {
-                                               ejsPrintAllocReport(ep, 0);
-                                       }
-                               }
-#endif
-                               if (ejsCollectGarbage(ep, slabIndex) == 0) {
-                                       block = slab->freeList.next;
-                               }
-                       }
-               }
-
-               if (block == 0) {
-                       if (gc->maxMemory > 0 && allocatedMemory > gc->maxMemory) {
-                               /*
-                                *      We are above the max memory limit. We will fail this
-                                *      memory allocation, but allow subsequent allocations to 
-                                *      permit error recovery. We gracefully degrade by setting 
-                                *      slab chunk sizes to 1. This minimizes real memory
-                                *      consumption. This allows us to create 
-                                *      an exception block to be created by upper layers.
-                                */
-                               if (! gc->degraded) {
-                                       ejsGracefulDegrade(ep);
-                                       return 0;
-                               }
-                       }
-
-                       /*
-                        *      Still non available, so allocate more memory for a set of blocks
-                        *      OPT -- should bypass mprAlloc. Need mprMalloc.
-                        */
-                       block = mprAlloc(ep->slabAllocContext, 
-                               slab->size * slab->allocIncrement);
-                       if (block == 0) {
-                               /*
-                                *      Now we're in trouble. We should really never get here
-                                *      as the graceful degrade will have signaled a memory 
-                                *      allocation failure.
-                                */
-                               mprAssert(block != 0);
-                               return 0;
-                       }
-
-                       /*
-                        *      Chain all the blocks together onto the slab free list
-                        */
-                       for (i = slab->allocIncrement - 1; i >= 0; i--) {
-                               block->next = slab->freeList.next;
-#if BLD_DEBUG
-                               block->magic = EJS_MAGIC_FREE;
-#endif
-                               slab->freeList.next = block;
-                               block = (EjsGCLink*) ((char*) block + slab->size);
-                       }
-
-                       block = slab->freeList.next;
-
-#if BLD_FEATURE_ALLOC_STATS
-                       slab->freeCount += slab->allocIncrement;
-                       if (slab->freeCount > slab->peakFree) {
-                               slab->peakFree = slab->freeCount;
-                       }
-#endif
-               }
-       }
-
-       /*
-        *      We use block to point to the user data in the block. We only
-        *      store the magic number (if debug). No other data is stored in the
-        *      user block.
-        */
-#if BLD_DEBUG
-       mprAssert(block->magic == EJS_MAGIC_FREE);
-#endif
-
-       /*
-        *      Remove from the free list
-        */
-       slab->freeList.next = block->next;
-
-       /*
-        *      Zero block
-        */
-       memset(block, 0, slab->size);
-
-#if BLD_DEBUG
-       block->magic = EJS_MAGIC;
-#endif
-
-#if BLD_FEATURE_ALLOC_STATS
-       slab->totalAlloc++;
-       if (++slab->allocCount > slab->peakAllocated) {
-               slab->peakAllocated = slab->allocCount;
-       }
-       slab->freeCount--;
-#endif
-
-#if BLD_DEBUG && (!BREW || BREW_SIMULATOR)
-       if ((uint) block == breakAddr) {
-               mprBreakpoint(MPR_LOC, "Watched Block");
-       }
-#endif
-       return block;
-}
-
-
-/******************************************************************************/
-
-EjsObj *ejsAllocObj(EJS_LOC_DEC(ep, loc))
-{
-       EjsObj          *obj;
-       EjsSlab         *slab;
-
-       obj = (EjsObj*) ejsAlloc(EJS_LOC_PASS(ep, loc), EJS_SLAB_OBJ);
-
-       /*
-        *      Add to the allocated block list for the New generation.
-        */
-       if (obj) {
-               slab = &ep->slabs[EJS_SLAB_OBJ];
-               obj->gc.next = slab->allocList[EJS_GEN_NEW].next;
-
-#if BLD_FEATURE_ALLOC_LEAK_TRACK
-               obj->gc.allocatedBy = loc;
-#endif
-
-               obj->ejs = ep;
-               slab->allocList[EJS_GEN_NEW].next = (EjsGCLink*) obj;
-
-               ep->gc.workDone++;
-       }
-
-       return obj;
-}
-
-
-/******************************************************************************/
-
-EjsProperty *ejsAllocProperty(EJS_LOC_DEC(ep, loc))
-{
-       EjsProperty             *prop;
-
-       prop = (EjsProperty*) ejsAlloc(EJS_LOC_PASS(ep, loc), EJS_SLAB_PROPERTY);
-       mprAssert(prop);
-
-       if (prop) {
-               prop->var.type = EJS_TYPE_NULL;
-               prop->var.isProperty = 1;
-#if BLD_FEATURE_ALLOC_LEAK_TRACK
-               prop->var.gc.allocatedBy = loc;
-#endif
-       }
-       return prop;
-}
-
-
-/******************************************************************************/
-
-EjsVar *ejsAllocVar(EJS_LOC_DEC(ep, loc))
-{
-       EjsVar  *vp;
-
-       vp = (EjsVar*) ejsAlloc(EJS_LOC_PASS(ep, loc), EJS_SLAB_VAR);
-       mprAssert(vp);
-
-       if (vp) {
-#if BLD_FEATURE_ALLOC_LEAK_TRACK
-               EjsSlab *slab;
-               vp->gc.allocatedBy = loc;
-               slab = &ep->slabs[EJS_SLAB_VAR];
-               vp->gc.next = slab->allocList[EJS_GEN_NEW].next;
-               slab->allocList[EJS_GEN_NEW].next = (EjsGCLink*) vp;
-#endif
-#if BLD_DEBUG
-               vp->propertyName = 0;
-#endif
-       }
-       return vp;
-}
-
-
-/******************************************************************************/
-/*
- *     Return the block back to the relevant slab
- */
-
-void ejsFree(Ejs *ep, void *ptr, int slabIndex)
-{
-       EjsSlab         *slab;
-       EjsGCLink       *block;
-
-       mprAssert(ep);
-       mprAssert(ptr);
-
-       if (slabIndex < 0 || slabIndex >= EJS_SLAB_MAX) {
-               mprAssert(slabIndex >= 0 && slabIndex < EJS_SLAB_MAX);
-               return;
-       }
-       slab = &ep->slabs[slabIndex];
-
-#if BLD_FEATURE_ALLOC_LEAK_TRACK
-       if (slabIndex == EJS_SLAB_VAR) {
-               EjsVar          *vp, *np, *prev;
-
-               /*
-                *      Remove the block rom the alloc list. WARNING: this is slow
-                *      and should not be used in production code.
-                */
-               vp = (EjsVar*) ptr;
-               prev = 0;
-               for (np = (EjsVar*) slab->allocList[0].next; np; 
-                               np = (EjsVar*) np->gc.next) {
-                       if (vp == np) {
-                               if (prev) {
-                                       prev->gc.next = (EjsGCLink*) np->gc.next;
-                               } else {
-                                       slab->allocList[0].next = (EjsGCLink*) np->gc.next;
-                               }
-                               break;
-                       }
-                       prev = np;
-               }
-               if (np == 0) {
-                       mprAssert(0);
-               }
-       }
-#endif
-
-       /*
-        *      Insert into the free list. Only use the next ptr
-        */
-       block = (EjsGCLink*) ptr;
-
-#if BLD_DEBUG
-#if !BREW || BREW_SIMULATOR
-       if ((uint) block == breakAddr) {
-               mprBreakpoint(MPR_LOC, "Watched Block");
-       }
-#endif
-       mprAssert(block->magic == EJS_MAGIC);
-       block->magic = EJS_MAGIC_FREE;
-#endif
-
-       block->next = slab->freeList.next;
-       slab->freeList.next = block;
-
-#if BLD_FEATURE_ALLOC_STATS
-       slab->allocCount--;
-       if (++slab->freeCount >= slab->peakFree) {
-               slab->peakFree = slab->freeCount;
-       }
-       slab->totalReclaimed++;
-       if (slabIndex != 2) {
-               slabIndex = slabIndex;
-       }
-#endif
-}
-
-/******************************************************************************/
-/*
- *     Mark an object as being in-use. Traverse all properties for referenced 
- *     objects and base classes.
- */
-
-static void markObjByVar(Ejs *ep, EjsVar *obj)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp, *baseClass;
-
-       mprAssert(ep);
-       mprAssert(obj);
-
-       obj->objectState->gcMarked = 1;
-
-#if BLD_DEBUG
-       if (ep->gc.debugLevel >= 3) {
-               int indent = min(ep->gc.gcIndent * 2, 32);
-               mprLog(ep, 0, "%.*s %-24s %.*s 0x%08X", 
-                       indent, "                                 ",
-                       obj->propertyName,
-                       32 - indent, "................................ ",
-                       (uint) obj->objectState);
-               ep->gc.gcIndent++;
-       }
-       ep->gc.objectsInUse++;
-#endif
-
-       /*
-        *      Traverse all referenced objects
-        *      OPT -- optimize by directly accessing the object links and not using
-        *      ejsGetFirst/NextProperty. Then just examine objects
-        *      OPT -- first property in global is global. Should optimize this.
-        */
-       pp = ejsGetFirstProperty(obj, EJS_ENUM_ALL);
-       while (pp) {
-               vp = ejsGetVarPtr(pp);
-               if (vp->type == EJS_TYPE_OBJECT) {
-                       if (!vp->objectState->gcMarked) {
-#if FUTURE
-                               /*
-                                *      OPT -- we can use the dirty bit on objects to avoid 
-                                *      visiting permanent objects that are clean. If so, don't
-                                *      forget the else case below.
-                                */
-                               obj = vp->objectState;
-                               if ((!obj->alive && !obj->permanent) || obj->dirty)
-#endif
-                               markObjByVar(ep, vp);
-                       }
-
-               } else {
-#if BLD_DEBUG
-                       if (ep->gc.debugLevel >= 3) {
-                               int indent = min(ep->gc.gcIndent * 2, 32);
-                               mprLog(ep, 0, "%.*s %-24s %.*s %s", 
-                                       indent, "                                 ",
-                                       vp->propertyName,
-                                       32 - indent, "................................ ",
-                                       ejsGetVarTypeAsString(vp));
-                       }
-                       ep->gc.propertiesInUse++;
-#endif
-               }
-               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-       }
-
-       /*
-        *      Traverse the base class
-        */
-       baseClass = obj->objectState->baseClass;
-       if (baseClass) {
-               mprAssert(baseClass->type == EJS_TYPE_OBJECT);
-               mprAssert(baseClass->objectState);
-               if (baseClass->objectState) {
-                       if (! baseClass->objectState->gcMarked) {
-                               markObjByVar(ep, baseClass);
-                       }
-               }
-       }
-#if BLD_DEBUG
-       if (ep->gc.debugLevel >= 3) {
-               ep->gc.gcIndent--;
-       }
-#endif
-}
-
-
-/******************************************************************************/
-/*
- *     Mark phase. Examine all variable frames and the return result.
- */
-
-static void mark(Ejs *ep)
-{
-       EjsVar  *vp;
-       int             i;
-
-#if BLD_DEBUG
-       if (ep->gc.debugLevel >= 3) {
-               mprLog(ep, 0, " ");
-               mprLog(ep, 0, "GC: Marked Blocks:");
-       }
-#endif
-
-       if (ep->frames) {
-               for (i = 0; i < mprGetItemCount(ep->frames); i++) {
-
-                       vp = (EjsVar*) mprGetItem(ep->frames, i);
-                       mprAssert(vp->type == EJS_TYPE_OBJECT);
-
-                       if (! vp->objectState->gcMarked) {
-                               markObjByVar(ep, vp);
-                       }
-               }
-       }
-
-       vp = ep->result;
-       if (vp && vp->type == EJS_TYPE_OBJECT && ! vp->objectState->gcMarked) {
-               markObjByVar(ep, vp);
-       }
-
-       vp = ep->currentObj;
-       if (vp && vp->type == EJS_TYPE_OBJECT && ! vp->objectState->gcMarked) {
-               markObjByVar(ep, vp);
-       }
-
-       vp = ejsGetVarPtr(ep->currentProperty);
-       if (vp && vp->type == EJS_TYPE_OBJECT && ! vp->objectState->gcMarked) {
-               markObjByVar(ep, vp);
-       }
-
-       /*
-        *      OPT -- we could mark master as "mark permanent" somehow and
-        *      then we would not need to walk the master objects.
-        */
-       if (ep->slabAllocContext == ep->service->master) {
-               if (ep->service->master->global) {
-                       markObjByVar(ep, ep->service->master->global);
-               }
-       }
-
-#if BLD_DEBUG
-       if (ep->gc.debugLevel >= 3) {
-               mprLog(ep, 0, " ");
-       }
-#endif
-}
-
-
-/******************************************************************************/
-#if UNUSED
-
-static void resetMark(EjsVar *obj)
-{
-       EjsProperty             *pp;
-       EjsVar                  *vp, *baseClass;
-
-       obj->objectState->gcMarked = 0;
-       obj->objectState->visited = 1;
-
-       pp = ejsGetFirstProperty(obj, EJS_ENUM_ALL);
-       while (pp) {
-               vp = ejsGetVarPtr(pp);
-               if (vp->type == EJS_TYPE_OBJECT && !vp->objectState->visited) {
-                       resetMark(vp);                  
-               }
-               pp = ejsGetNextProperty(pp, EJS_ENUM_ALL);
-       }
-
-       baseClass = obj->objectState->baseClass;
-       if (baseClass) {
-               mprAssert(baseClass->type == EJS_TYPE_OBJECT);
-               mprAssert(baseClass->objectState);
-               if (baseClass->objectState) {
-                       if (! baseClass->objectState->visited) {
-                               resetMark(baseClass);
-                       }
-               }
-       }
-       obj->objectState->visited = 0;
-}
-
-/******************************************************************************/
-/*
- *     Mark phase. Examine all variable frames and the return result.
- */
-
-static void resetAllMarks(Ejs *ep)
-{
-       EjsVar  *vp;
-       int             i;
-
-       for (i = 0; i < mprGetItemCount(ep->frames); i++) {
-               vp = (EjsVar*) mprGetItem(ep->frames, i);
-               resetMark(vp);
-       }
-
-       if (ep->result && ep->result->type == EJS_TYPE_OBJECT &&
-                       ! ep->result->objectState->gcMarked) {
-               resetMark(ep->result);
-       }
-}
-
-#endif
-/******************************************************************************/
-/*
- *     Sweep up the garbage
- */
-
-static void resetMarks(Ejs *ep, EjsSlab *slab)
-{
-       EjsVar          *vp;
-       EjsObj          *obj;
-       int                     gen, i;
-
-       for (gen = EJS_GEN_NEW; gen < EJS_GEN_MAX; gen++) {
-               obj = (EjsObj*) slab->allocList[gen].next;
-               for (; obj; obj = (EjsObj*) obj->gc.next) {
-                       obj->gcMarked = 0;
-                       obj->visited = 0;
-               }
-       }
-
-       if (ep->frames) {
-               for (i = 0; i < mprGetItemCount(ep->frames); i++) {
-
-                       vp = (EjsVar*) mprGetItem(ep->frames, i);
-                       mprAssert(vp->type == EJS_TYPE_OBJECT);
-
-                       vp->objectState->gcMarked = 0;
-                       vp->objectState->visited = 0;
-               }
-       }
-
-       if (ep->result && ep->result->type == EJS_TYPE_OBJECT) {
-               ep->result->objectState->gcMarked = 0;
-       }
-}
-
-/******************************************************************************/
-/*
- *     Mark all permanent and non-alive objects
- */
-
-static void markPerm(Ejs *ep, uint gen)
-{
-       EjsSlab         *slab;
-       EjsObj          *obj;
-
-       slab = &ep->slabs[EJS_SLAB_OBJ];
-
-       for (obj = (EjsObj*) slab->allocList[gen].next; obj; ) {
-
-               if (! obj->gcMarked) {
-                       if (!obj->alive || obj->permanent) {
-                               markObj(obj);
-                       }
-               }
-               obj = (EjsObj*) obj->gc.next;
-
-       }
-}
-
-/******************************************************************************/
-
-static void markObj(EjsObj *obj)
-{
-       EjsProperty             *pp;
-       EjsPropLink             *lp, *head;
-       EjsObj                  *op;
-
-       mprAssert(obj);
-
-       obj->gcMarked = 1;
-
-       head = &obj->link;
-       for (lp = head->next; lp != head; lp = lp->next) {
-
-               pp = ejsGetPropertyFromLink(lp);
-
-               if (pp->var.type == EJS_TYPE_OBJECT) {
-                       op = pp->var.objectState;
-                       if (op != 0 && !op->gcMarked) {
-                               markObj(op);
-                       }
-               }
-       }
-}
-
-/******************************************************************************/
-/*
- *     Sweep up the garbage. Return the number of objects freed.
- */
-
-static int sweep(Ejs *ep, uint gen)
-{
-       EjsSlab         *slab;
-       EjsObj          *obj, *next, *prev;
-       int                     count;
-
-       slab = &ep->slabs[EJS_SLAB_OBJ];
-
-       /*
-        *      Examine allocated objects in the specified generation (only).
-        *      NOTE: we only sweep object allocated to this interpreter and so
-        *      we do not sweep any permanent objects in the default interpreter.
-        */
-       prev = 0;
-       count = 0;
-       for (obj = (EjsObj*) slab->allocList[gen].next; obj; obj = next) {
-
-               next = (EjsObj*) obj->gc.next;
-
-#if BLD_DEBUG && (!BREW || BREW_SIMULATOR)
-               if ((uint) obj == breakAddr) {
-                       mprBreakpoint(MPR_LOC, "Watched Block");
-               }
-#endif
-
-               /*
-                *      If object has not been marked inuse and is not a permanent
-                *      object, then free it.
-                */
-               if (! obj->gcMarked && obj->alive && !obj->permanent) {
-
-#if BLD_DEBUG
-                       if (ep->gc.debugLevel >= 2) {
-                               if (obj->objName) {
-                                       mprLog(ep, 0, "GC: destroy %-18s   %10d, %8X", 
-                                               obj->objName, (uint) obj, (uint) obj);
-                               } else {
-                                       mprLog(ep, 0, "GC: destroy UNKNOWN %x", (uint) obj);
-                               }
-                       }
-#endif
-                       if (ejsDestroyObj(ep, obj) < 0) {
-                               prev = obj;
-                               obj->gcMarked = 0;
-                               continue;
-                       }
-
-                       if (prev) {
-                               prev->gc.next = (EjsGCLink*) next;
-                       } else {
-                               slab->allocList[gen].next = (EjsGCLink*) next;
-                       }
-                       count++;
-
-               } else {
-                       prev = obj;
-                       /* Reset for next time */
-                       obj->gcMarked = 0;
-               } 
-       }
-
-       if (gen == (EJS_GEN_OLD - 1)) {
-               slab->lastRecentBlock = prev;
-       }
-#if BLD_FEATURE_ALLOC_STATS
-       slab->totalSweeps++;
-#endif
-#if BLD_DEBUG
-       if (ep->gc.debugLevel > 0) {
-               mprLog(ep, 0, "GC: Sweep freed %d objects", count);
-       }
-#endif
-       return count;
-}
-
-/******************************************************************************/
-/*
- *     Sweep all variables
- */
-
-void ejsSweepAll(Ejs *ep)
-{
-       EjsSlab         *slab;
-       EjsObj          *obj, *next, *prev;
-       int                     gen;
-
-       slab = &ep->slabs[EJS_SLAB_OBJ];
-
-       for (gen = EJS_GEN_NEW; gen < EJS_GEN_MAX; gen++) {
-               prev = 0;
-               for (obj = (EjsObj*) slab->allocList[gen].next; obj; obj = next) {
-                       next = (EjsObj*) obj->gc.next;
-                       ejsDestroyObj(ep, obj);
-               }
-               break;
-       }
-}
-
-/************************************************