[Pkg-mozext-commits] [adblock-plus] 301/464: Removed SpiderMonkey compilation code, automated downloading of the JS shell instead

David Prévot taffit at moszumanska.debian.org
Tue Jul 22 20:44:27 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository adblock-plus.

commit c7eea730c393a6e58907d9850fb6220a9a7ff07e
Author: Wladimir Palant <trev at adblockplus.org>
Date:   Fri Oct 12 14:16:37 2012 +0200

    Removed SpiderMonkey compilation code, automated downloading of the JS shell instead
---
 .hgignore          |   5 -
 Makefile           |  61 -------
 abp_rewrite.py     |  37 ++++-
 configure          | 114 -------------
 jshydra.cpp        | 242 ----------------------------
 jshydra_bridge.cpp | 302 -----------------------------------
 jshydra_bridge.h   |  34 ----
 jshydra_funcs.cpp  | 457 -----------------------------------------------------
 jshydra_funcs.h    |  39 -----
 jshydra_tokens.h   |  88 -----------
 10 files changed, 32 insertions(+), 1347 deletions(-)

diff --git a/.hgignore b/.hgignore
index 7b91165..7db5146 100644
--- a/.hgignore
+++ b/.hgignore
@@ -1,7 +1,2 @@
-^config\.mk$
-^jshydra$
-\.o$
-^\.deps/
-
 ^mozilla/
 ^jstest/
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 17bfa3e..0000000
--- a/Makefile
+++ /dev/null
@@ -1,61 +0,0 @@
-include config.mk
-
-# Defines for the mozilla build system
-DEPTH := $(MOZ_OBJDIR)/js/src
-topsrcdir := $(MOZ_SRCDIR)/js/src
-srcdir := $(MOZ_SRCDIR)/js/src
-MODULE := js
-
-include $(MOZ_OBJDIR)/js/src/config/autoconf.mk
-include $(MOZ_SRCDIR)/js/src/config/config.mk
-
-jshydra$(BIN_SUFFIX): jshydra.$(OBJ_SUFFIX) jshydra_funcs.$(OBJ_SUFFIX) jshydra_bridge.$(OBJ_SUFFIX) $(MOZ_OBJDIR)/js/src/$(LIB_PREFIX)js_static.$(LIB_SUFFIX)
-ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
-	$(LD) -nologo -out:$@ $^ $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-else
-	g++ -o $@ $^ $(LDFLAGS) $(LIBS) $(EXTRA_LIBS) $(OS_LIBS) -lnspr4
-endif
-
-.deps:
-	@if [ ! -e .deps ]; then mkdir .deps; fi
-
-%.$(OBJ_SUFFIX): %.cpp .deps $(MOZ_OBJDIR)/js/src/$(LIB_PREFIX)js_static.$(LIB_SUFFIX)
-	$(CXX) -o $@ -c $(COMPILE_CXXFLAGS) $<
-
-clean:
-	@rm -rf jshydra$(BIN_SUFFIX) *.$(OBJ_SUFFIX) *.$(LIB_SUFFIX) .deps
-
--include $(wildcard .deps/*.pp)
-
-TESTS := $(notdir $(wildcard autotest/test_*.js))
-check::
-	@cd autotest && for f in $(TESTS); do \
-		eval $$(cat $$f | sed -e '/^\/\/ [A-Za-z]*:/!q' -e 's+^// \([A-Za-z]*\): \(.*\)$$+export \1="\2"+'); \
-		echo -n "$$Name... "; \
-		../mozilla/js/src/shell/js$(BIN_SUFFIX) ../jshydra.js $$f $$Arguments > .$$f.out 2>&1; \
-		if diff -w -q ".$$f.out" "$$f.expected" >/dev/null 2>&1; then \
-			echo ' passed!'; \
-		else \
-		echo ' failed! Log:'; \
-			cat .$$f.out; \
-		fi \
-	done && rm .*.out
-
-.PHONY: check
-
-echo-variable-%:
-	@echo "$($*)"
-
-full-check:: jshydra$(BIN_SUFFIX)
-	@mkdir -p jstest
-	@cp -R $(srcdir)/tests/* jstest
-	@cp check.py jstest
-	@echo "Decompiling JS ASTs.."
-	@set -e; \
-	for f in $$(cd jstest && python check.py | grep -v '^warning:'); do \
-		echo $$f; \
-		./jshydra$(BIN_SUFFIX) scripts/astDecompile.js --trueast "$(srcdir)/tests/$$f" >jstest/$$f; \
-	done
-	python $(srcdir)/tests/jstests.py --tinderbox $(MOZ_OBJDIR)/js/src/js > before.log
-	python jstest/jstests.py --tinderbox $(MOZ_OBJDIR)/js/src/js > after.log
-	diff before.log after.log
diff --git a/abp_rewrite.py b/abp_rewrite.py
index d91aae7..eb6e38e 100644
--- a/abp_rewrite.py
+++ b/abp_rewrite.py
@@ -5,7 +5,37 @@
 # version 2.0 (the "License"). You can obtain a copy of the License at
 # http://mozilla.org/MPL/2.0/.
 
-import sys, os, subprocess
+import sys, os, subprocess, urllib, zipfile
+from StringIO import StringIO
+
+def ensureJSShell(basedir):
+  shell_dir = os.path.join(basedir, 'mozilla')
+  if not os.path.exists(shell_dir):
+    os.makedirs(shell_dir)
+  if sys.platform == 'win32':
+    path = os.path.join(shell_dir, 'js.exe')
+  else:
+    path = os.path.join(shell_dir, 'js')
+  if os.path.exists(path):
+    return path
+
+  platform_map = {
+    'win32': 'win32',
+    'linux2': 'linux-i686',
+    'darwin': 'mac',
+  }
+  if sys.platform not in platform_map:
+    raise Exception('Unknown platform, is there a JS shell version for it?')
+
+  download_url = 'http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/16.0.1-candidates/build1/jsshell-%s.zip' % platform_map[sys.platform]
+  data = StringIO(urllib.urlopen(download_url).read())
+  zip = zipfile.ZipFile(data)
+  zip.extractall(shell_dir)
+  zip.close()
+
+  if not os.path.exists(path):
+    raise Exception('Downloaded package didn\'t contain JS shell executable')
+  return path
 
 def doRewrite():
   if len(sys.argv) < 4:
@@ -23,10 +53,7 @@ def doRewrite():
   if not basedir:
     basedir = '.'
 
-  if os.name == 'nt':
-    application = os.path.join(basedir, 'mozilla', 'js', 'src', 'shell', 'js.exe')
-  else:
-    application = os.path.join(basedir, 'mozilla', 'js', 'src', 'shell', 'js')
+  application = ensureJSShell(basedir)
   command = [application, os.path.join(basedir, 'jshydra.js'), os.path.join(basedir, 'scripts', 'abprewrite.js'), '--arg', 'module=true source_repo=https://hg.adblockplus.org/adblockplus/']
   for module in ('filterNotifier', 'filterClasses', 'subscriptionClasses', 'filterStorage', 'elemHide', 'matcher', 'filterListener', 'synchronizer'):
     sourceFile = os.path.join(sourceDir, 'lib', module + '.js')
diff --git a/configure b/configure
deleted file mode 100755
index b074c97..0000000
--- a/configure
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/bash
-
-# The mozilla-central known-good revision
-REV=5b8812d6950b
-
-usage() {
-echo "Usage: $0 ...
-The following options control the setup for the SpiderMonkey build. Only set these if you wish to reuse source; otherwise, it will be downloaded for you:
---moz-src              Location of the mozilla source directory
---moz-obj	             Location of the object directory for the above tree.
-
-Other arguments:
---moz-repo	           Repository to clone the source from
---enable-parse-test    Enables use of parse tests for jshydra"
-}
-
-VAL=
-arg() {
-	VAL=${1#*=}
-}
-
-srcdir=mozilla
-objdir=""
-repo='http://hg.mozilla.org/mozilla-central'
-
-until [ -z "$1" ]
-do
-	case "$1" in
-	--moz-src=*)
-		arg $1
-		srcdir="$VAL"
-	;;
-	--moz-obj=*)
-		arg $1
-		objdir="$VAL"
-	;;
-	--moz-repo=*)
-		arg $1
-		repo="$VAL"
-	;;
-  --enable-parse-test)
-    parse="TRUE"
-  ;;
-	-h|--help)
-		usage
-		exit 1
-	esac
-	shift
-done
-
-if [ -z "$objdir"]; then objdir=$srcdir; fi
-
-echo "Source directory: $srcdir"
-echo "Object directory: $objdir"
-echo "Source repository: $repo"
-
-cat >config.mk <<EOF
-MOZ_OBJDIR := $objdir
-MOZ_SRCDIR := $srcdir
-EOF
-
-NEEDSBUILD=
-if [ ! -e "$srcdir" ]; then
-	# Time to pull from the repo
-	echo "Cloning from $repo:"
-	hg clone -r $REV $repo $srcdir
-	NEEDSBUILD="true"
-elif hg id -r $REV $srcdir; then
-	# Newer or older?
-	if [[ "$(hg id -n -r $REV $srcdir)" < "$(hg id -n $srcdir)" ]]; then
-		echo "You are using a newer revision than the gold standard."
-		echo "This probably isn't a big deal, but stuff might not work."
-		echo "To get the gold standard, use the following command:"
-		echo "hg up -r $REV -R $srcdir"
-	elif [[ "$(hg id -n -r $REV $srcdir)" > "$(hg id -n $srcdir)" ]]; then
-		echo "You are using an older revision than the gold standard."
-		echo "It is highly recommended that you update to at least this revision."
-		echo "To get the gold standard, use the following command:"
-		echo "hg up -r $REV -R $srcdir"
-	fi
-else
-	# The revision isn't found.. pull and update
-	echo "Updating from $repo:"
-	hg pull -u -r $REV -R $srcdir $repo
-	NEEDSBUILD="true"
-fi
-
-if [ ! -z $parse ]; then
-  cvs -d :pserver:anonymous at cvs-mirror.mozilla.org:/cvsroot co -d jstest \
-    mozilla/js/tests
-fi
-
-AUTOCONF=$(which autoconf-2.13 autoconf2.13 autoconf213 2>/dev/null | grep -v '^no autoconf' | head -1)
-if [ ! -e $objdir ]; then
-	# We need to make the objdir and configure
-	abssrc=$(cd $srcdir && pwd)
-	mkdir -p $objdir/js/src
-	pushd $objdir/js/src
-	pushd $srcdir/js/src
-	$AUTOCONF
-	popd
-	# Now in objdir
-	$abssrc/js/src/configure
-	make
-	popd
-elif [ $srcdir = $objdir ]; then
-	if [ -n "$NEEDSBUILD" ]; then
-		pushd $srcdir/js/src
-    $AUTOCONF
-		./configure
-		make
-		popd
-	fi
-fi
diff --git a/jshydra.cpp b/jshydra.cpp
deleted file mode 100644
index 564ee96..0000000
--- a/jshydra.cpp
+++ /dev/null
@@ -1,242 +0,0 @@
-#include <string.h> // Needed for jsparse.h
-#include "jsapi.h"
-#include "jscntxt.h"
-#include "jsbit.h" // jsparse.h
-#include "jsscript.h" // jsparse.h
-#include "jsinterp.h" // jsparse.h
-#include "jsparse.h"
-#include "jsregexp.h"
-#include <stdio.h>
-#include <sys/stat.h>
-
-#include "jshydra_bridge.h"
-
-#ifndef ATOM_TO_JSVAL
-#define ATOM_TO_JSVAL(atom) IdToJsval(ATOM_TO_JSID(atom))
-#endif
-
-using namespace js;
-
-bool useReflect = false;
-
-void setIntProperty(JSObject *obj, const char *name, int value) {
-    jshydra_defineProperty(cx, obj, name, INT_TO_JSVAL(value));
-}
-void setObjectProperty(JSObject *obj, const char *name, JSObject *value) {
-    jshydra_defineProperty(cx, obj, name, OBJECT_TO_JSVAL(value));
-}
-void setArrayElement(JSObject *array, jsint index, JSObject *value) {
-    jsval argv[1];
-    if (value)
-        argv[0] = OBJECT_TO_JSVAL(value);
-    else
-        argv[0] = JSVAL_NULL;
-    JS_SetElement(cx, array, index, argv);
-}
-
-typedef enum TokenValue {
-    FUNCTION, LIST, TERNARY, BINARY, UNARY, NAME, LEXICAL, APAIR, OBJLITERAL, DOUBLELITERAL, NULLARY, NAMESET, ERROR
-} TokenValue;
-
-TokenValue tokens[] = {
-#define TOK(name, value) value,
-#include "jshydra_tokens.h"
-#undef TOK
-    ERROR //TOK_LIMIT
-};
-
-TokenValue arityFix[] = {NULLARY, UNARY, BINARY, TERNARY, FUNCTION, LIST, NAME};
-
-JSObject *makeNode(JSParseNode *node) {
-    if (!node)
-        return NULL;
-    if (!JS_EnterLocalRootScope(cx))
-        return NULL;
-    JSObject *object = JS_NewObject(cx, &js_node_class, NULL, NULL);
-    setIntProperty(object, "line", node->pn_pos.begin.lineno);
-    setIntProperty(object, "column", node->pn_pos.begin.index);
-    setIntProperty(object, "op", node->pn_op);
-    setIntProperty(object, "type", node->pn_type);
-
-    // Some of our nodes actually need the arity to work right.
-    TokenValue value = tokens[node->pn_type];
-    if (node->pn_type == TOK_COLON ||
-      (node->pn_type >= TOK_OR && node->pn_type <= TOK_DIVOP))
-        value = arityFix[node->pn_arity];
-
-    switch (value) {
-    case FUNCTION: {
-        setIntProperty(object, "flags", node->pn_dflags);
-        JSFunction *func = (JSFunction *) node->pn_funbox->object;
-        if (func->atom)
-            jshydra_defineProperty(cx, object, "name", ATOM_TO_JSVAL(func->atom));
-
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        setArrayElement(array, 0, makeNode(node->pn_body));
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-    case LIST: {
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        int i = 0;
-        JSParseNode *element = node->pn_head;
-        for (; element; element = element->pn_next) {
-            setArrayElement(array, i++, makeNode(element));
-        }
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-    case TERNARY: {
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        setArrayElement(array, 0, makeNode(node->pn_kid1));
-        setArrayElement(array, 1, makeNode(node->pn_kid2));
-        setArrayElement(array, 2, makeNode(node->pn_kid3));
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-  case BINARY: {
-    if (node->pn_pval)
-      jshydra_defineProperty(cx, object, "value", *Jsvalify(node->pn_pval));
-    // This is how for and for each are distinguished...
-    if (node->pn_type == TOK_FOR)
-      setIntProperty(object, "iflags", node->pn_iflags);
-    JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-    setArrayElement(array, 0, makeNode(node->pn_left));
-    setArrayElement(array, 1, makeNode(node->pn_right));
-    setObjectProperty(object, "kids", array);
-    break;
-  }
-    case UNARY: {
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        setArrayElement(array, 0, makeNode(node->pn_kid));
-        setObjectProperty(object, "kids", array);
-    jshydra_defineProperty(cx, object, "number", INT_TO_JSVAL(node->pn_num));
-        break;
-    }
-    case NAME: {
-        JS_DefineProperty(cx, object, "atom", ATOM_TO_JSVAL(node->pn_atom), NULL, NULL, JSPROP_READONLY | JSPROP_ENUMERATE);
-        setIntProperty(object, "flags", node->pn_dflags);
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        // This is only valid for PN_NAME objects--some are not quite PN_NAME.
-        if (!node->pn_used && node->pn_arity == PN_NAME)
-            setArrayElement(array, 0, makeNode(node->pn_expr));
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-    case NAMESET: {
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        setArrayElement(array, 0, makeNode(node->pn_tree));
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-    case LEXICAL: {
-        JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-        setArrayElement(array, 0, makeNode(node->pn_expr));
-        setObjectProperty(object, "kids", array);
-        break;
-    }
-    //case APAIR:
-  case OBJLITERAL: {
-    // The object in the parse tree is not itself sufficient to really act as a
-    // parse node, so we clone the object to get the right prototype stuff.
-    JSObject *regex = js_CloneRegExpObject(cx, node->pn_objbox->object,
-      jshydra_getRegexPrototype(cx));
-    setObjectProperty(object, "value", regex);
-    JSObject *array = JS_NewArrayObject(cx, 0, NULL);
-    setArrayElement(array, 0, makeNode(node->pn_expr));
-    setObjectProperty(object, "kids", array);
-    break;
-  }
-    case DOUBLELITERAL: {
-        jshydra_defineProperty(cx, object, "value", DOUBLE_TO_JSVAL(node->pn_dval));
-        break;
-    }
-    case NULLARY: {
-    jshydra_defineProperty(cx, object, "number", INT_TO_JSVAL(node->pn_num));
-        break;
-                }
-    case ERROR:
-    default:
-        fprintf(stderr, "Unexpected type: %d (arity %d)\n", node->pn_type, node->pn_arity);
-        break;
-    }
-    JS_LeaveLocalRootScopeWithResult(cx, OBJECT_TO_JSVAL(object));
-    return object;
-}
-
-bool parseFile(FILE *file, char *filename, char *argstr) {
-    js::Compiler compiler(cx, NULL, NULL);
-    // Read in the file into a buffer
-    struct stat st;
-    int ok = fstat(fileno(file), &st);
-    if (ok != 0)
-        return false;
-    jschar *buf = (jschar*)malloc(st.st_size * sizeof(jschar));
-    int i = 0, c;
-    while ((c = getc(file)) != EOF)
-        buf[i++] = (jschar)(unsigned char)c;
-    if (!compiler.init(buf, st.st_size, filename, 1, JSVERSION_LATEST))
-        return false;
-    jsval rval, argv[3];
-    if (useReflect) {
-        JS_GetProperty(cx, globalObj, "Reflect", &rval);
-        JSObject *reflect = JSVAL_TO_OBJECT(rval);
-        JSString *str = JS_NewUCStringCopyN(cx, buf, st.st_size);
-        argv[0] = STRING_TO_JSVAL(str);
-        JS_CallFunctionName(cx, reflect, "parse", 1, argv, &rval);
-        argv[0] = rval;
-    } else {
-        JSParseNode *root = compiler.parser.parse(globalObj);
-        JSObject *ast = makeNode(root);
-        argv[0] = OBJECT_TO_JSVAL(ast);
-        jshydra_rootObject(cx, ast);
-    }
-    free(buf);
-    jsval func = jshydra_getToplevelFunction(cx, "process_js");
-    if (JS_TypeOfValue(cx, func) != JSTYPE_FUNCTION) {
-        fprintf(stderr, "No function process_js!\n");
-        return false;
-    }
-    JSString *newfname = JS_NewStringCopyZ(cx, filename);
-    argv[1] = STRING_TO_JSVAL(newfname);
-    JSString *jsArgStr = JS_NewStringCopyZ(cx, argstr);
-    argv[2] = STRING_TO_JSVAL(jsArgStr);
-    return JS_CallFunctionValue(cx, globalObj, func, 3, argv, &rval);
-}
-
-int main(int argc, char **argv) {
-    if (argc < 3) {
-        fprintf(stderr, "Usage: %s script filename...\n", argv[0]);
-        return -1;
-    }
-    jshydra_init(argv[1]);
-    jshydra_includeScript(cx, argv[1]);
-    argc--;
-    argv++;
-    char *argstr = NULL;
-
-    bool failure = false;
-    do {
-        argc--;
-        argv++;
-        if (!strcmp(argv[0], "--arg")) {
-            argc--;
-            argv++;
-            argstr = argv[0];
-            continue;
-        } else if(!strcmp(argv[0], "--trueast")) {
-            useReflect = true;
-            continue;
-        }
-        FILE *input = fopen(argv[0], "r");
-        if (!input) {
-            fprintf(stderr, "No such file %s\n", argv[0]);
-            continue;
-        }
-        failure |= !parseFile(input, argv[0], argstr);
-        if (failure)
-            fprintf(stderr, "Failure happened on input %s\n", argv[0]);
-    } while (argc > 1);
-
-    return !!failure;
-}
diff --git a/jshydra_bridge.cpp b/jshydra_bridge.cpp
deleted file mode 100644
index 408c3cc..0000000
--- a/jshydra_bridge.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-#include "jsapi.h"
-#ifndef XP_WIN
-#include <unistd.h>
-#endif // XP_WIN
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "jshydra_bridge.h"
-#include "jshydra_funcs.h"
-
-static const char *opcodes[] = {
-#define OPDEF(op, val, name, image, len, use, def, prec, format) \
-	#op,
-#include "jsopcode.tbl"
-#undef OPDEF
-	NULL
-};
-
-static const char *tokens[] = {
-#define TOK(name, value) #name,
-#include "jshydra_tokens.h"
-#undef TOK
-	NULL
-};
-
-JSRuntime *rt;
-JSContext *cx;
-JSObject *globalObj;
-
-JSObject *rootArray;
-
-static JSClass global_class = {
-    "global", JSCLASS_GLOBAL_FLAGS,
-    JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
-    JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
-    JSCLASS_NO_OPTIONAL_MEMBERS
-
-};
-
-static char *my_dirname (char *path);
-
-JSClass js_node_class = {
-  "JSHydraNode",  /* name */
-  JSCLASS_CONSTRUCT_PROTOTYPE, /* flags */
-  JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
-  JS_EnumerateStub,JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
-  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
-};
-
-extern JSObject *js_InitReflectClass(JSContext *cx, JSObject *obj);
-
-void jshydra_init(const char *file) {
-  static JSFunctionSpec shell_functions[] = {
-    JS_FN("_print",          Print,          0,     0),
-    JS_FN("include",         Include,        1,     0),
-    JS_FN("write_file",      WriteFile,      1,     0),
-    JS_FN("read_file",       ReadFile,       1,     0),
-    JS_FN("diagnostic",      Diagnostic,     0,     0),
-    JS_FN("require",         Require,        1,     0),
-    JS_FN("hashcode",        Hashcode,       1,     0),
-    {0}
-  };
-
-  //this->fndeclMap = pointer_map_create ();
-  rt = JS_NewRuntime (0x9000000L);
-  cx = JS_NewContext (rt, 8192);
-  JS_BeginRequest(cx);
-  JS_SetVersion(cx, JSVERSION_LATEST);
-  //JS_SetGCZeal(cx, 2);
-
-  //JS_SetContextPrivate (this->cx, this);
-  
-  globalObj = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
-  JS_EnterCrossCompartmentCall(cx, globalObj);
-  JS_InitStandardClasses (cx, globalObj);
-  js_InitReflectClass(cx, globalObj);
-  /* register error handler */
-  JS_SetErrorReporter (cx, ErrorReporter);
-  xassert (JS_DefineFunctions (cx, globalObj, shell_functions));
-  if (jshydra_getToplevelFunction(cx, "include") == JSVAL_VOID) {
-    fprintf (stderr, "Your version of spidermonkey has broken JS_DefineFunctions, upgrade it or ./configure with another version\n");
-    exit(1);
-  }
-  //this->rootedArgDestArray = 
-  //  JS_NewArrayObject (this->cx, 0, NULL);
-  //JS_AddRoot (this->cx, &this->rootedArgDestArray);
-  // this is to be added at function_decl time
-  //this->rootedFreeArray = JS_NewArrayObject (this->cx, 0, NULL);
-  //JS_DefineElement (this->cx, this->rootedArgDestArray, 0,
-   //                 OBJECT_TO_JSVAL (this->rootedFreeArray),
-  //                  NULL, NULL, JSPROP_ENUMERATE);
-  JS_SetVersion (cx, (JSVersion) 170);
-
-
-  /* Initialize namespace for plugin system stuff. */
-  JSObject *sys = jshydra_defineObjectProperty(cx, globalObj, "sys");
-  /* Set version info */
-  //dehydra_defineStringProperty (this, sys, VERSION_STRING, version_string);
-  //dehydra_defineStringProperty (this, sys, FRONTEND, lang_hooks.name);
-  /* Initialize include path. */
-  jshydra_defineArrayProperty (cx, sys, "include_path", 0);
-
-  char *filename_copy = strdup(file);
-  char *dir = my_dirname(filename_copy);
-  jshydra_appendToPath(cx, dir);
-  char *libdir = static_cast<char *>(malloc(strlen(dir) + strlen("libs") + 2));
-  sprintf(libdir, "%s/%s", dir, "libs");
-  jshydra_appendToPath(cx, libdir);
-  free(libdir);
-  free(filename_copy);
-
-  /* Output filename info */
-  //if (aux_base_name) {
-  //  dehydra_defineStringProperty (this, sys, "aux_base_name", aux_base_name);
-  //}
-  xassert (JS_InitClass(cx, globalObj, NULL
-                        ,&js_node_class , NULL, 0, NULL, NULL, NULL, NULL));
-
-  /* Define the token properties. */
-  const char **name = opcodes;
-  jsint index = 0;
-  while (*name) {
-	  jshydra_defineProperty(cx, globalObj, *name++, INT_TO_JSVAL(index++));
-  }
-  index = 0;
-  name = tokens;
-  while (*name)
-	  jshydra_defineProperty(cx, globalObj, *name++, INT_TO_JSVAL(index++));
-
-  rootArray = JS_NewArrayObject(cx, 0, NULL);
-  JS_AddObjectRoot(cx, &rootArray);
-  jshydra_rootObject(cx, globalObj);
-}
-
-/*int dehydra_startup (Dehydra *this) {
-  return dehydra_includeScript (this, "dehydra.js");
-}*/
-
-int jshydra_includeScript (JSContext *cx, const char *script) {
-  jsval strval = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, script));
-  //int key = dehydra_rootObject (this, strval);
-  if (!JS_EnterLocalRootScope(cx))
-	  return -1;
-  jsval rval;
-
-  int ret = !JS_CallFunctionName(cx, globalObj, "include", 1, &strval, &rval);
-  JS_LeaveLocalRootScope(cx);
-  return ret;
-}
-
-JSObject *jshydra_getIncludePath (JSContext *cx)
-{
-  jsval sys_val, path_val;
-  JS_GetProperty(cx, globalObj, "sys", &sys_val);
-  JS_GetProperty(cx, JSVAL_TO_OBJECT(sys_val), "include_path", &path_val);
-  return JSVAL_TO_OBJECT(path_val);
-}
-
-/* Append a directory name to the script include path. */
-void jshydra_appendToPath (JSContext *cx, const char *dir) 
-{
-  JSObject *path = jshydra_getIncludePath(cx);
-  unsigned int length = jshydra_getArrayLength(cx, path);
-  JSString *dir_str = JS_NewStringCopyZ(cx, dir);
-  jsval dir_val = STRING_TO_JSVAL(dir_str);
-  JS_DefineElement(cx, path, length, dir_val, NULL, NULL,
-                   JSPROP_ENUMERATE);
-}
-
-/* Avoiding bug 431100. Spec from man 2 dirname */
-static char *my_dirname (char *path) {
-  char *r = strrchr(path, '/');
-  if (!r) {
-    strcpy (path, ".");
-    return path;
-  } else if (r == path && r[1] == 0) {
-    return path; // '/'
-  } else if (r[1] == 0) {
-    // /foo/ foo/ cases
-    *r = 0;
-    return my_dirname (path);
-  }
-  *r = 0;
-  return path;
-}
-
-/* Search the include path for a file matching the given name. The current
- * directory will be searched last. */
-FILE *jshydra_searchPath (JSContext *cx, const char *filename, char **realname)
-{
-  if (filename && filename[0] != '/') {
-    JSObject *path = jshydra_getIncludePath(cx);
-    int length = jshydra_getArrayLength(cx, path);
-    int i;
-    for (i = 0; i < length; ++i) {
-      jsval val;
-      JS_GetElement(cx, path, i, &val);
-
-      JSString *dir_str = JS_ValueToString(cx, val);
-      if (!dir_str) continue;
-      char *dir = JS_EncodeString(cx, dir_str);
-
-      char *buf = static_cast<char *>(malloc(strlen(dir) + strlen(filename) + 2));
-      /* Doing a little extra work here to get rid of unneeded '/'. */
-      const char *sep = dir[strlen(dir)-1] == '/' ? "" : "/";
-      sprintf(buf, "%s%s%s", dir, sep, filename);
-	  JS_free(cx, dir);
-      FILE *f = fopen(buf, "r");
-      if (f) {
-        *realname = buf;
-        return f;
-      } else {
-        free(buf);
-      }
-    }
-  }
-  
-  FILE *f = fopen(filename, "r");
-  if (f) {
-    *realname = strdup(filename);
-    return f;
-  }
-
-  return NULL;
-}
-
-jsuint jshydra_getArrayLength (JSContext *cx, JSObject *array) {
-  jsuint length = 0;
-  xassert (JS_GetArrayLength (cx, array, &length));
-  return length;
-}
-
-JSObject *definePropertyObject (JSContext *cx, JSObject *obj,
-                                const char *name, JSClass *clasp,
-                                JSObject *proto, uintN flags) {
-  JSObject *nobj = JS_NewObject (cx, clasp, proto, NULL);
-  JS_DefineProperty (cx, obj, name, OBJECT_TO_JSVAL(nobj), NULL, NULL, flags);
-  return nobj;
-}
-
-void jshydra_defineProperty (JSContext *cx, JSObject *obj,
-                             char const *name, jsval value)
-{
-  JS_DefineProperty (cx, obj, name, value,
-                     NULL, NULL, JSPROP_ENUMERATE);
-}
-/*
-void dehydra_defineStringProperty (Dehydra *this, JSObject *obj,
-                                   char const *name, char const *value)
-{
-  JSString *str = JS_NewStringCopyZ (this->cx, value);
-  dehydra_defineProperty (this, obj, name, STRING_TO_JSVAL(str));
-}
-*/
-JSObject *jshydra_defineArrayProperty (JSContext *cx, JSObject *obj,
-                                       char const *name, int length) {
-  JSObject *destArray = JS_NewArrayObject (cx, length, NULL);
-  jshydra_defineProperty (cx, obj, name, OBJECT_TO_JSVAL (destArray));
-  return destArray;  
-}
-
-JSObject *jshydra_defineObjectProperty (JSContext *cx, JSObject *obj,
-                                       char const *name) {
-  return definePropertyObject(
-      cx, obj, name, NULL, NULL,
-      JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_PERMANENT);
-}
-
-/* Load and execute a Javascript file. 
- * Return:    0 on success
- *            1 on failure if a Javascript exception is pending
- *            does not return if a Javascript error is reported
- * The general behavior of (De|Tree)hydra is to print a message and
- * exit if a JS error is reported at the top level. But if this function
- * is called from JS, then the JS_* functions will instead set an
- * exception, which will be propgated back up to the callers for
- * eventual handling or exit. */
-
-jsval jshydra_getToplevelFunction(JSContext *cx, char const *name) {
-  jsval val = JSVAL_VOID;
-  return (JS_GetProperty(cx, globalObj, name, &val)
-          && val != JSVAL_VOID
-          && JS_TypeOfValue(cx, val) == JSTYPE_FUNCTION) ? val : JSVAL_VOID;
-}
-
-void jshydra_rootObject(JSContext *cx, JSObject *obj) {
-  jsval rval, argv[1];
-  argv[0] = OBJECT_TO_JSVAL(obj);
-  JS_CallFunctionName(cx, rootArray, "push", 1, argv, &rval);
-}
-
-JSObject *jshydra_getRegexPrototype(JSContext *cx) {
-  static JSObject *proto = NULL;
-  if (proto == NULL) {
-    char str[1];
-    JSObject *regex = JS_NewRegExpObjectNoStatics(cx, str, 0, 0);
-    proto = JS_GetPrototype(cx, regex);
-  }
-  return proto;
-}
diff --git a/jshydra_bridge.h b/jshydra_bridge.h
deleted file mode 100644
index 0fd7229..0000000
--- a/jshydra_bridge.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-#ifndef JSHYDRA_BRIDGE_H
-#define JSHYDRA_BRIDGE_H
-
-extern JSContext *cx;
-extern JSObject *globalObj;
-
-extern JSClass js_node_class;
-
-void jshydra_init(const char *file);
-FILE *jshydra_searchPath(JSContext *cx, const char *filename, char **realname);
-void jshydra_appendToPath (JSContext *cx, const char *dir);
-int jshydra_includeScript(JSContext *cx, const char *filename);
-
-/* Drop-in replacement for JS_DefineObject, required as a workaround
- * because JS_DefineObject always sets the parent property. */
-JSObject *definePropertyObject (JSContext *cx, JSObject *obj,
-                               const char *name, JSClass *clasp,
-                               JSObject *proto, uintN flags);
-JSObject *jshydra_defineArrayProperty (JSContext *cx, JSObject *obj,
-                                       char const *name, int length);
-JSObject *jshydra_defineObjectProperty (JSContext *cx, JSObject *obj,
-                                        char const *name);
-void jshydra_defineProperty(JSContext *cx, JSObject *obj,
-                            char const *name, jsval value);
-
-jsuint jshydra_getArrayLength(JSContext *cx, JSObject *array);
-jsval jshydra_getToplevelFunction(JSContext *cx, char const *name);
-
-void jshydra_rootObject(JSContext *cx, JSObject *obj);
-JSObject *jshydra_getRegexPrototype(JSContext *cx);
-
-JSObject *jshydra_getRegexPrototype(JSContext *cx);
-#endif
diff --git a/jshydra_funcs.cpp b/jshydra_funcs.cpp
deleted file mode 100644
index d43b667..0000000
--- a/jshydra_funcs.cpp
+++ /dev/null
@@ -1,457 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-#include <string.h>
-#include <errno.h>
-#include <stdarg.h>
-#include <stdlib.h>
-
-#include "jsapi.h"
-#include "jsprf.h"
-#include "jshydra_funcs.h"
-#include "jshydra_bridge.h"
-
-JSBool require_version(JSContext *cx, jsval val) {
-  JSString *version_str = JS_ValueToString(cx, val);
-  if (!version_str) return JS_FALSE;
-  char *version_cstr = JS_EncodeString(cx, version_str);
-  JSVersion version = JS_StringToVersion(version_cstr);
-  JSBool retval;
-  if (version == JSVERSION_UNKNOWN) {
-    JS_ReportError(cx, "Invalid version '%s'", version_cstr);
-    retval = JS_FALSE;
-  } else {
-    JS_SetVersion(cx, version);
-    retval = JS_TRUE;
-  }
-  JS_free(cx, version_cstr);
-  return retval;
-}
-
-JSBool require_option(JSContext *cx, jsval val, uint32 option) {
-  JSBool flag;
-  if (!JS_ValueToBoolean(cx, val, &flag)) return JS_FALSE;
-  if (flag) {
-    JS_SetOptions(cx, JS_GetOptions(cx) | option);
-  } else {
-    JS_SetOptions(cx, JS_GetOptions(cx) & ~option);
-  }
-  return JS_TRUE;
-}
-
-JSBool dispatch_require(JSContext *cx, const char *prop_name, jsval prop_val) {
-  if (strcmp(prop_name, "version") == 0) {
-    return require_version(cx, prop_val);
-  } else if (strcmp(prop_name, "strict") == 0) {
-    return require_option(cx, prop_val, JSOPTION_STRICT);
-  } else if (strcmp(prop_name, "werror") == 0) {
-    return require_option(cx, prop_val, JSOPTION_WERROR);
-  } else if (strcmp(prop_name, "gczeal") == 0) {
-#ifdef JS_GC_ZEAL
-    uintN zeal;
-    if (!JS_ValueToECMAUint32(cx, prop_val, &zeal))
-        return JS_FALSE;
-    JS_SetGCZeal(cx, zeal);
-#else
-#ifdef DEBUG
-    JS_ReportWarning(cx, "gczeal not available: xhydra built with a SpiderMonkey version"
-                     " lacking JS_SetGCZeal");
-#else
-    JS_ReportWarning(cx, "gczeal not available: xhydra built without -DDEBUG");
-#endif //DEBUG
-#endif //JS_GC_ZEAL
-    return JS_TRUE;
-  } else {
-    JS_ReportWarning(cx, "Unrecognized require keyword '%s'", prop_name);
-    return JS_TRUE;
-  }
-}
-
-/* Helper to return the current version as a JS string. */
-jsval get_version(JSContext *cx)
-{
-  const char *version_cstr = JS_VersionToString(JS_GetVersion(cx));
-  if (version_cstr == NULL) {
-    return JSVAL_VOID;
-  }
-  JSString *version_str = JS_NewStringCopyZ(cx, version_cstr);
-  return STRING_TO_JSVAL(version_str);
-}
-
-JSBool Require(JSContext *cx, uintN argc, jsval *vp)
-{
-  JSObject *args;
-  if (!JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "o", &args)) return JS_FALSE;
-  JSIdArray *prop_ids = JS_Enumerate(cx, args);
-  if (!prop_ids) return JS_FALSE;
-
-  /* Apply the options. */
-  JSBool retval = JS_TRUE;
-  int i;
-  for (i = 0; i < prop_ids->length; ++i) {
-    xassert(JS_EnterLocalRootScope(cx));
-    jsval prop;
-    JSBool rv = JS_IdToValue(cx, prop_ids->vector[i], &prop);
-    xassert(rv);
-    JSString *prop_str = JSVAL_TO_STRING(prop);
-    char *prop_name = JS_EncodeString(cx, prop_str);
-    xassert(prop_name);
-    jsval prop_val;
-    rv = JS_GetProperty(cx, args, prop_name, &prop_val);
-    xassert(rv);
-
-    rv = dispatch_require(cx, prop_name, prop_val);
-    if (rv == JS_FALSE) retval = JS_FALSE;
-    JS_free(cx, prop_name);
-    JS_LeaveLocalRootScope(cx);
-  }
-  JS_DestroyIdArray(cx, prop_ids);
-  if (!retval) return retval;
-
-  /* Report the now-current options. */
-  JSObject *rvalo = JS_NewObject(cx, NULL, NULL, NULL);
-  if (!rvalo) return JS_FALSE;
-  JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(rvalo));
-  JS_DefineProperty(
-      cx, rvalo, "version", get_version(cx), NULL, NULL, JSPROP_ENUMERATE);
-  uint32 options = JS_GetOptions(cx);
-  JS_DefineProperty(
-      cx, rvalo, "strict", 
-     (options | JSOPTION_STRICT) ? JSVAL_TRUE : JSVAL_FALSE, 
-      NULL, NULL, JSPROP_ENUMERATE);
-  JS_DefineProperty(
-      cx, rvalo, "werror", 
-     (options | JSOPTION_WERROR) ? JSVAL_TRUE : JSVAL_FALSE, 
-      NULL, NULL, JSPROP_ENUMERATE);
-  return JS_TRUE;
-}
-
-/* Load and run the named script. The last argument is the object to use
-   as "this" when evaluating the script, which is effectively a namespace
-   for the script. */
-static JSBool jshydra_loadScript (JSContext *cx, const char *filename, 
-                                  JSObject *ns) {
-  /* Read the file. There's a JS function for reading scripts, but Dehydra
-     wants to search for the file in different dirs. */
-  long size = 0;
-  char *realname;
-  FILE *f = jshydra_searchPath(cx, filename, &realname);
-  if (!f) {
-    REPORT_ERROR_1(cx, "Cannot find include file '%s'", filename);
-    return JS_FALSE;
-  }
-  char *content = readEntireFile(f, &size);
-  if (!content) {
-    REPORT_ERROR_1(cx, "Cannot read include file '%s'", realname);
-    free(realname);
-    return JS_FALSE;
-  }
-
-  JSObject *script = JS_CompileScript(cx, ns,
-                                      content, size, realname, 1);
-  free(realname);
-  if (script == NULL) {
-    xassert(JS_IsExceptionPending(cx));
-    return JS_FALSE;
-  }
-
-  JS_AddNamedObjectRoot(cx, &script, filename);
-  jsval rval;
-  JSBool rv = JS_ExecuteScript(cx, ns, script, &rval);
-  JS_RemoveObjectRoot(cx, &script);
-  if (!rv) {
-    xassert(JS_IsExceptionPending(cx));
-    return JS_FALSE;
-  }
-  return JS_TRUE;
-}
-
-/* should use this function to load all objects to avoid possibity of objects including themselves */
-JSBool Include(JSContext *cx, uintN argc, jsval *vp)
-{
-  jsval *argv = JS_ARGV(cx, vp);
-  if (!JSVAL_IS_STRING(argv[0]))
-    return JS_FALSE;
-
-  char *filename = JS_EncodeString(cx, JSVAL_TO_STRING(argv[0]));
-  xassert(filename);
-
-  JSObject *ns = globalObj;
-  if (!JS_ConvertArguments(cx, argc, argv, "*/o", &filename, &ns))
-    return JS_FALSE;
-
-  JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(ns));
- 
-  JSObject *includedArray = NULL;
-  jsval val;
-  JS_GetProperty(cx, ns, "_includedArray", &val);
-  if (!JSVAL_IS_OBJECT (val)) {
-    includedArray = JS_NewArrayObject (cx, 0, NULL);
-    jshydra_defineProperty (cx, ns, "_includedArray",
-                            OBJECT_TO_JSVAL (includedArray));
-  } else {
-    includedArray = JSVAL_TO_OBJECT (val);
-    xassert (JS_CallFunctionName (cx, includedArray, "lastIndexOf",
-                                  1, argv, &val));
-    /* Return if file was already included in this namespace. */
-    if (JSVAL_TO_INT (val) != -1) return JS_TRUE;
-  }
-
-  JS_CallFunctionName (cx, includedArray, "push", 1, argv, &JS_RVAL(cx,vp));
-  JSBool rv = jshydra_loadScript (cx, filename, ns);
-  JS_free(cx, filename);
-  return rv;
-}
-
-JSBool Diagnostic(JSContext *cx, uintN argc, jsval *vp)
-{
-  jsval *argv = JS_ARGV(cx, vp);
-  JSBool is_error;
-  const char *msg, *error_string;
-  char *file;
-  jsint line;
-  JSObject *loc_obj = NULL;
-
-  if (!JS_ConvertArguments(cx, argc, argv, "b*/o", &is_error, &msg, &loc_obj))
-    return JS_FALSE;
-  JS_SET_RVAL(cx, vp, JSVAL_VOID);
-  error_string = is_error ? "error" : "warning";
-  if (loc_obj) {
-    jsval jsfile, jsline;
-    if (JS_GetProperty(cx, loc_obj, "file", &jsfile) &&
-        JS_GetProperty(cx, loc_obj, "line", &jsline)) {
-      file = JS_EncodeString(cx, JSVAL_TO_STRING(jsfile));
-      line = JSVAL_TO_INT(jsline);
-      printf("%s:%d: %s: %s\n", file, line, error_string, msg);
-      JS_free(cx, file);
-      return JS_TRUE;
-    }
-  }
-
-  printf("%s: %s\n", error_string, msg);
-  return JS_TRUE;
-}
-
-JSBool Print(JSContext *cx, uintN argc, jsval *vp)
-{
-  uintN i;
-  jsval *argv = JS_ARGV(cx, vp);
-  for (i = 0; i < argc; i++) {
-    JSString *str = JS_ValueToString(cx, argv[i]);
-    if (!str)
-      return JS_FALSE;
-    char *c_str = JS_EncodeString(cx, str);
-    printf("%s", c_str);
-    JS_free(cx, c_str);
-  }
-  printf("\n");
-  JS_SET_RVAL(cx, vp, JSVAL_VOID);
-  return JS_TRUE;
-}
-
-JSBool WriteFile(JSContext *cx, uintN argc, jsval *vp)
-{
-  jsval *argv = JS_ARGV(cx, vp);
-  JSString *str;
-  if (!JS_ConvertArguments(cx, argc, argv, "*S", &str))
-    return JS_FALSE;
-  if (!JSVAL_IS_STRING(argv[0]))
-    return JS_FALSE;
-
-  char *filename = JS_EncodeString(cx, JSVAL_TO_STRING(argv[0]));
-  xassert(filename);
-
-  JSBool rv = JS_FALSE;
-  FILE *f = fopen (filename, "w");
-  if (!f) {
-    REPORT_ERROR_2(cx, "write_file: error opening file '%s': %s",
-                   filename, strerror(errno));
-  } else {
-    char *bytes = JS_EncodeString(cx, str);
-    xassert(bytes);
-    fwrite (bytes, 1, JS_GetStringLength(str), f);
-    fclose (f);
-    JS_free(cx, bytes);
-    JS_SET_RVAL(cx, vp, JSVAL_VOID);
-    rv = JS_TRUE;
-  }
-  JS_free(cx, filename);
-  return rv;
-}
-
-JSBool ReadFile(JSContext *cx, uintN argc, jsval *vp)
-{
-  jsval *argv = JS_ARGV(cx, vp);
-  if (!JSVAL_IS_STRING(argv[0]))
-    return JS_FALSE;
-  char *filename = JS_EncodeString(cx, JSVAL_TO_STRING(argv[0]));
-  xassert(filename);
-  long size = 0;
-  char *buf = readFile (filename, &size);
-  JSBool rv = JS_FALSE;
-  if(!buf) {
-    REPORT_ERROR_2(cx, "read_file: error opening file '%s': %s",
-                   filename, strerror(errno));
-  } else {
-    JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(JS_NewStringCopyN(cx, buf, size)));
-    rv = JS_TRUE;
-  }
-  free(buf);
-  JS_free(cx, filename);
-  return rv;
-}
-
-/* author: tglek
-   Return the primitive if it's a primitive, otherwise compute a seq #
-   The ES4 spec says that it shouldn't be a pointer(with good reason).
-   A counter is morally wrong because in theory it could loop around and bite me,
-   but I lack in moral values and don't enjoy abusing pointers any further */
-JSBool Hashcode(JSContext *cx, uintN argc, jsval *vp)
-{
-  if (!argc)
-    return JS_FALSE;
-  jsval o = *JS_ARGV(cx, vp);
-  if (!JSVAL_IS_OBJECT (o)) {
-    JS_SET_RVAL(cx, vp, o);
-    return JS_TRUE;
-  }
-  JSObject *obj = JSVAL_TO_OBJECT (o);
-  JSBool has_prop;
-  /* Need to check for property first to keep treehydra from getting angry */
-  if (JS_AlreadyHasOwnProperty(cx, obj, "_hashcode", &has_prop) && has_prop) {
-    jsval rval;
-    JS_GetProperty(cx, obj, "_hashcode", &rval);
-    JS_SET_RVAL(cx, vp, rval);
-  } else {
-    static int counter = 0;
-    char str[256];
-    jsval val;
-    JS_snprintf (str, sizeof (str), "%x", ++counter);
-    val = STRING_TO_JSVAL (JS_NewStringCopyZ (cx, str));
-    JS_DefineProperty (cx, obj, "_hashcode", val,
-                       NULL, NULL, JSPROP_PERMANENT | JSPROP_READONLY);
-    JS_SET_RVAL(cx, vp, val);
-  }
-  return JS_TRUE;
-}
-
-/* Read the entire contents of a file.
- *      path   path of the file to read
- *      size   (out) number of bytes of file data read
- *    return   null-terminated file contents, or NULL on error. Caller
- *             should free when done. */
-char *readFile(const char *path, long *size) {
-  FILE *f = fopen(path, "r");
-  if (!f) return NULL;
-  return readEntireFile(f, size);
-}
-
-/* Find a file, searching another dir if necessary.  If the file is
- * found, return a file handle open for reading and store the malloc'd
- * name where the file was found in realname. Otherwise, return
- * NULL. */
-FILE *findFile(const char *filename, const char *dir, char **realname) {
-  FILE *f = fopen(filename, "r");
-  if (f) {
-    *realname = strdup(filename);
-    return f;
-  }
-  if (dir && dir[0] && filename[0] && filename[0] != '/') {
-    char *buf = static_cast<char *>(malloc(strlen(dir) + strlen(filename) + 2));
-    /* Doing a little extra work here to get rid of unneeded '/'. */
-    const char *sep = dir[strlen(dir)-1] == '/' ? "" : "/";
-    sprintf(buf, "%s%s%s", dir, sep, filename);
-    f = fopen(buf, "r");
-    if (f) {
-      *realname = buf;
-      return f;
-    } else {
-      free(buf);
-    }
-  }
-  return NULL;
-}
-
-char *readEntireFile(FILE *f, long *size) {
-  xassert(f);
-  if (fseek(f, 0, SEEK_END)) return NULL;
-  *size = ftell(f);
-  if (fseek(f, 0, SEEK_SET)) return NULL;
-  char *buf = static_cast<char *>(malloc(*size + 1));
-  xassert(*size == fread(buf, 1, *size, f));
-  buf[*size] = 0;
-  fclose(f);
-  return buf;
-}
-
-/* Report an error.
- * If we are currently inside JS, we'll report an error to JS. But
- * otherwise, we'll report it to the user and then exit. */
-void reportError(JSContext *cx, const char *file, int line, 
-                 const char *fmt, ...) 
-{
-  char msg[1024];
-  const int size = sizeof(msg) / sizeof(msg[0]);
-  va_list ap;
-  va_start(ap, fmt);
-  int nw = vsnprintf(msg, size, fmt, ap);
-  va_end(ap);
-  if (nw >= size) msg[size-1] = '\0';
-  
-  if (JS_IsRunning(cx)) {
-    JS_ReportError(cx, "%s (from %s:%d)", msg, file, line);
-  } else {
-    fflush(stdout);
-    fprintf(stderr, "%s:%d: Error: %s\n", file, line, msg);
-    exit(1);
-  }
-}
-
-void
-ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report)
-{
-  int error = JSREPORT_IS_EXCEPTION(report->flags);
-  jsval exn;
-  fflush(stdout);
-  fprintf(stderr, "%s:%d: ", (report->filename ? report->filename : "NULL"),
-          report->lineno);
-  if (JSREPORT_IS_WARNING(report->flags)) fprintf(stderr, "JS Warning");
-  if (JSREPORT_IS_STRICT(report->flags)) fprintf(stderr, "JS STRICT");
-  if (error) fprintf(stderr, "JS Exception");
- 
-  fprintf(stderr, ": %s\n", message);
-  if (report->linebuf) {
-    fprintf(stderr, "%s\n", report->linebuf);
-  }
-  if (error && JS_GetPendingException(cx, &exn)
-      && JS_TypeOfValue (cx, exn) == JSTYPE_OBJECT) {
-    jsval stack;
-    /* reformat the spidermonkey stack */
-    JS_GetProperty(cx, JSVAL_TO_OBJECT (exn), "stack", &stack);
-    if (JS_TypeOfValue (cx, stack) == JSTYPE_STRING) {
-      char *str = JS_EncodeString(cx, JSVAL_TO_STRING (stack));
-	  char *save_str = str;
-      int counter = 0;
-      do {
-        char *eol = strchr (str, '\n');
-        if (eol)
-          *eol = 0;
-        char *at = strrchr (str, '@');
-        if (!at) break;
-        *at = 0;
-        if (!*str) break;
-        fprintf (stderr, "%s:\t#%d: %s\n", at+1, counter++, str);
-        *at = '@';
-        if (eol) {
-          *eol = '\n';
-          str = eol + 1;
-        } else {
-          break;
-        }
-      } while (*str);
-      JS_free(cx, save_str);
-    }
-  }
-  fflush(stderr);
-  
-  if (!JSREPORT_IS_WARNING(report->flags))
-    exit(1);
-}
diff --git a/jshydra_funcs.h b/jshydra_funcs.h
deleted file mode 100644
index 65f5cc1..0000000
--- a/jshydra_funcs.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-#ifndef JSHYDRA_FUNCS_H
-#define JSHYDRA_FUNCS_H
-
-/* JS Natives */
-
-#define DH_JSNATIVE(fname) JSBool fname(JSContext *cx, uintN argc, jsval *vp)
- 
-DH_JSNATIVE(Require);
-DH_JSNATIVE(Include);
- 
-DH_JSNATIVE(Diagnostic);
-DH_JSNATIVE(Print);
- 
-DH_JSNATIVE(WriteFile);
-DH_JSNATIVE(ReadFile);
-DH_JSNATIVE(Hashcode);
-
-void ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report);
-
-/* Related C functions */
-
-char *readFile(const char *path, long *size);
-FILE *findFile(const char *filename, const char *dir, char **realname);
-char *readEntireFile(FILE *f, long *size);
-void  reportError(JSContext *cx, const char *file, int line, 
-                  const char *fmt, ...);
-
-#define REPORT_ERROR_0(cx, fmt) reportError(cx, __FILE__, __LINE__, fmt);
-#define REPORT_ERROR_1(cx, fmt, arg1) reportError(cx, __FILE__, __LINE__, fmt, arg1);
-#define REPORT_ERROR_2(cx, fmt, arg1, arg2) reportError(cx, __FILE__, __LINE__, fmt, arg1, arg1);
-
-#define xassert(cond) \
-  if (!(cond)) { \
-    fprintf(stderr, "%s:%d: Assertion failed:" #cond "\n", __FILE__, __LINE__);\
-    exit(1); \
-  }
-
-#endif
diff --git a/jshydra_tokens.h b/jshydra_tokens.h
deleted file mode 100644
index a50e35c..0000000
--- a/jshydra_tokens.h
+++ /dev/null
@@ -1,88 +0,0 @@
-TOK(TOK_EOF, NULLARY)
-TOK(TOK_EOL, ERROR) /* (not present) */
-TOK(TOK_SEMI, UNARY)
-TOK(TOK_COMMA, LIST)
-TOK(TOK_ASSIGN, BINARY)
-TOK(TOK_HOOK, TERNARY)
-TOK(TOK_COLON, NAME)
-TOK(TOK_OR, BINARY)
-TOK(TOK_AND, BINARY)
-TOK(TOK_BITOR, BINARY)
-TOK(TOK_BITXOR, BINARY)
-TOK(TOK_BITAND, BINARY)
-TOK(TOK_EQOP, BINARY)
-TOK(TOK_RELOP, BINARY)
-TOK(TOK_SHOP, BINARY)
-TOK(TOK_PLUS, BINARY)
-TOK(TOK_MINUS, BINARY)
-TOK(TOK_STAR, BINARY)
-TOK(TOK_DIVOP, BINARY)
-TOK(TOK_UNARYOP, UNARY)
-TOK(TOK_INC, UNARY)
-TOK(TOK_DEC, UNARY)
-TOK(TOK_DOT, NAME)
-TOK(TOK_LB, BINARY)
-TOK(TOK_RB, LIST)
-TOK(TOK_LC, LIST)
-TOK(TOK_RC, LIST)
-TOK(TOK_LP, LIST)
-TOK(TOK_RP, UNARY)
-TOK(TOK_NAME, NAME)
-TOK(TOK_NUMBER, DOUBLELITERAL)
-TOK(TOK_STRING, NAME)
-TOK(TOK_REGEXP, OBJLITERAL)
-TOK(TOK_PRIMARY, NULLARY)
-TOK(TOK_FUNCTION, FUNCTION)
-TOK(TOK_IF, TERNARY)
-TOK(TOK_ELSE, ERROR) /* (not present) */
-TOK(TOK_SWITCH, BINARY)
-TOK(TOK_CASE, BINARY)
-TOK(TOK_DEFAULT, BINARY)
-TOK(TOK_WHILE, BINARY)
-TOK(TOK_DO, BINARY)
-TOK(TOK_FOR, BINARY)
-TOK(TOK_BREAK, NAME)
-TOK(TOK_CONTINUE, NAME)
-TOK(TOK_IN, BINARY)
-TOK(TOK_VAR, LIST)
-TOK(TOK_WITH, BINARY)
-TOK(TOK_RETURN, UNARY)
-TOK(TOK_NEW, LIST)
-TOK(TOK_DELETE, UNARY)
-TOK(TOK_DEFSHARP, UNARY)
-TOK(TOK_USESHARP, NULLARY)
-TOK(TOK_TRY, TERNARY)
-TOK(TOK_CATCH, TERNARY)
-TOK(TOK_FINALLY, ERROR) /* (not present) */
-TOK(TOK_THROW, UNARY)
-TOK(TOK_INSTANCEOF, BINARY)
-TOK(TOK_DEBUGGER, NULLARY)
-// We don't support E4X yet.
-TOK(TOK_XMLSTAGO, ERROR)
-TOK(TOK_XMLETAGO, ERROR)
-TOK(TOK_XMLPTAGC, ERROR)
-TOK(TOK_XMLTAGC, ERROR)
-TOK(TOK_XMLNAME, ERROR)
-TOK(TOK_XMLATTR, ERROR)
-TOK(TOK_XMLSPACE, ERROR)
-TOK(TOK_XMLTEXT, NAME)
-TOK(TOK_XMLCOMMENT, ERROR)
-TOK(TOK_XMLCDATA, ERROR)
-TOK(TOK_XMLPI, ERROR)
-TOK(TOK_AT, ERROR)
-TOK(TOK_DBLCOLON, ERROR)
-TOK(TOK_ANYNAME, ERROR)
-TOK(TOK_DBLDOT, NAME)
-TOK(TOK_FILTER, ERROR)
-TOK(TOK_XMLELEM, LIST)
-TOK(TOK_XMLLIST, ERROR)
-TOK(TOK_YIELD, UNARY)
-TOK(TOK_ARRAYCOMP, LIST)
-TOK(TOK_ARRAYPUSH, UNARY)
-TOK(TOK_LEXICALSCOPE, LEXICAL) // XXX: I don't think this is right?
-TOK(TOK_LET, LIST)
-TOK(TOK_SEQ, ERROR) /* (not present) */
-TOK(TOK_FORHEAD, TERNARY)
-TOK(TOK_ARGSBODY, LIST)
-TOK(TOK_UPVARS,	NAMESET)
-TOK(TOK_RESERVED, LIST) /*[I don't understand this...]*/

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/adblock-plus.git



More information about the Pkg-mozext-commits mailing list