Index: tools/Makefile.am
===================================================================
--- tools/Makefile.am	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,27 +1,0 @@
-######################## -*- Mode: Makefile-Automake -*- ######################
-##
-## Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-##
-## The contents of this file are covered under the licence agreement in the
-## file "LICENCE" distributed with Cforall.
-##
-## Makefile.am --
-##
-## Author           : Peter A. Buhr
-## Created On       : Wed Jun 28 12:07:10 2017
-## Last Modified By : Peter A. Buhr
-## Last Modified On : Wed Jun 28 23:11:56 2017
-## Update Count     : 15
-###############################################################################
-
-AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
-ACLOCAL_AMFLAGS  = -I automake
-
-noinst_PROGRAMS = busy catchsig repeat watchdog
-AM_CFLAGS = -Wall -Wextra -Werror=return-type -O2 -g
-busy_LDFLAGS     = -pthread
-
-nodist_busy_SOURCES     = busy.c
-nodist_catchsig_SOURCES = catchsig.c
-nodist_repeat_SOURCES   = repeat.c
-nodist_watchdog_SOURCES = watchdog.c
Index: tools/auto-complete.md
===================================================================
--- tools/auto-complete.md	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,54 +1,0 @@
-Shell Auto Completion
-=====================
-
-tests/test.py
--------------
-
-### Bash
-
-Short version: copy this into your .profile file:
-
-    _cfa_test() (
-        (case $3 in
-        (--continue|--debug|--install|--timout-with-gdb)
-            echo yes no;;
-        (--arch)
-            echo x86 x64;;
-        (-I|--include|-E|--exclude)
-            $1 --list-comp | tr ' ' '\n' | sed -e 's@/[^/]\+$@/@;t;d';;
-        (*)
-            $1 --list-comp;;
-        esac) | grep -Ewoe "$2[^[:space:]]*"
-    )
-    complete -C _cfa_test tests/test.py
-
-The long version includes reading the bash manual, check for the complete
-built-in and readline programmable completion for details on how these
-commands are used. You can copy-paste the results directily into your
-terminal to test them or put them in one of the initalization files so they
-are loaded at start-up.
-
-This particular script does not handle the comma seperated options.
-
-### Zsh
-
-1 - Add the following somewhere:
-    #compdef test.py
-
-    _test_py() {
-        local -a options
-        options=$($words[1] --list-comp)
-        _alternative "files:filenames:($options)"
-    }
-
-    _test_py "$@"
-
-2 - Add the path to that file to the "fpath" environment variable.
-
-3 - In ~/.zshrc add
-    autoload -U compinit
-    compinit
-
-*How it works:* I don't know ;P
-
-
Index: tools/baseline.py
===================================================================
--- tools/baseline.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,45 +1,0 @@
-#!/usr/bin/python3
-
-import sys
-
-import urllib.request
-import re
-import json
-
-if len(sys.argv) != 3 :
- 	sys.exit("Expected architecture and file name as arguments")
-
-build_cache = {}
-
-def build(number):
-	if number in build_cache:
-		return build_cache[number]
-
-	url = "https://cforall.uwaterloo.ca/jenkins/job/Cforall/job/master/%s/api/json?" % number
-	f = urllib.request.urlopen(url)
-	j = json.loads(f.read().decode("utf-8"))
-	res = re.search("([^:]+):(x86|x64)", j['description'])
-
-	build_cache.update({number : (res.group(1), res.group(2))})
-	return build_cache[number]
-
-content = {}
-try:
-	with open(sys.argv[2]) as f:
-		f.readline()
-		f.readline()
-
-		for l in f:
-			data = [d.replace('"', '') for d in l.split(',')]
-			number = data[2]
-			_, arch = build(number)
-			if arch == sys.argv[1]:
-				if not data[1] in content:
-					content.update({data[1] : []})
-
-				content[data[1]].append(float(data[0]))
-except IOError as e:
-	sys.exit(e.strerror)
-
-print(','.join(content.keys()))
-print(','.join([str(sum(vals) / len(vals)) for vals in content.values()]))
Index: tools/build/cfa.m4
===================================================================
--- tools/build/cfa.m4	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,103 +1,0 @@
-
-m4_define([M4CFA_PARSE_PREFIX], [
-	if test "x$prefix" = "xNONE"; then
-		cfa_prefix=${ac_default_prefix}
-	else
-		cfa_prefix=${prefix}
-	fi
-	cfa_prefix="$(readlink -m ${cfa_prefix})/"
-	AC_DEFINE_UNQUOTED(CFA_PREFIX, "${cfa_prefix}", [Location of cfa install.])
-	AC_SUBST(CFA_PREFIX, ${cfa_prefix})
-
-	if test "$includedir" = '${prefix}/include'; then
-		cfa_incdir="${cfa_prefix}include/${cfa_name}"
-	else
-		cfa_incdir=${includedir}
-	fi
-	cfa_incdir="$(readlink -m ${cfa_incdir})/"
-	AC_DEFINE_UNQUOTED(CFA_INCDIR, "${cfa_incdir}", [Location of include files.])
-	AC_SUBST(CFA_INCDIR, ${cfa_incdir})
-
-	if test "$bindir" = '${exec_prefix}/bin'; then
-		cfa_bindir="${cfa_prefix}bin"
-	else
-		cfa_bindir=${bindir}
-	fi
-	cfa_bindir="$(readlink -m ${cfa_bindir})/"
-	AC_DEFINE_UNQUOTED(CFA_BINDIR, "${cfa_bindir}", [Location of cfa command.])
-	AC_SUBST(CFA_BINDIR, ${cfa_bindir})
-
-	if test "$libdir" = '${exec_prefix}/lib'; then
-		if test "${ARCHITECTURE}" != ""; then
-			cfa_libdir="${cfa_prefix}lib/${cfa_name}/${ARCHITECTURE}-${CONFIGURATION}/"
-		else
-			cfa_libdir="${cfa_prefix}lib/${cfa_name}/"
-		fi
-	else
-		cfa_libdir="${libdir}/${ARCHITECTURE}${CONFIGURATION}"
-	fi
-	cfa_libdir="$(readlink -m ${cfa_libdir})/"
-	AC_DEFINE_UNQUOTED(CFA_LIBDIR, "${cfa_libdir}", [Location of cc1 and cfa-cpp commands.])
-	AC_SUBST(CFA_LIBDIR, ${cfa_libdir})
-])
-
-m4_define([M4CFA_PROGRAM_NAME], [
-	if test "${program_transform_name}" = ""; then
-	AC_MSG_ERROR([Program transform not supported.
-			Use --with-cfa-name='[[Desired name here]]' instead])
-	fi
-
-	#Define the new name of the installed command
-	AC_ARG_WITH(cfa-name,
-		[  --with-cfa-name=NAME     NAME too which cfa will be installed],
-		cfa_name=$withval, cfa_name="cfa")
-
-	AC_SUBST(CFA_NAME, ${cfa_name})
-])
-
-AC_DEFUN([M4CFA_CANNON_CPU], [
-	case $1 in
-		"host") arch_name=${host_cpu};;
-		*) arch_name=$1;;
-	esac
-
-	case $arch_name in
-		"x64"        ) cannon_arch_name="x64";;
-		"x86-64"     ) cannon_arch_name="x64";;
-		"x86_64"     ) cannon_arch_name="x64";;
-		"aarch64"    ) cannon_arch_name="arm64";;
-		"arm64"      ) cannon_arch_name="arm64";;
-		"ARM64"      ) cannon_arch_name="arm64";;
-		"x86"        ) cannon_arch_name="x86";;
-		"i386"       ) cannon_arch_name="x86";;
-		"i486"       ) cannon_arch_name="x86";;
-		"i686"       ) cannon_arch_name="x86";;
-		"Intel 80386") cannon_arch_name="x86";;
-		"arm"        ) cannon_arch_name="arm32";;
-		"ARM"        ) cannon_arch_name="arm32";;
-		"arm32"      ) cannon_arch_name="arm32";;
-		"ARM32"      ) cannon_arch_name="arm32";;
-		"armv7l"     ) cannon_arch_name="arm32";;
-		*)
-		>&2 echo "Unknown architecture " $arch_name;
-		exit 1
-		;;
-	esac
-])
-
-# http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=blob_plain;f=m4/ax_check_compile_flag.m4
-AC_DEFUN([M4CFA_CHECK_COMPILE_FLAG],
-[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF
-AS_VAR_PUSHDEF([CACHEVAR],[m4cfa_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
-AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
-	m4cfa_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
-	_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
-	AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])],
-		[AS_VAR_SET(CACHEVAR,[yes])],
-		[AS_VAR_SET(CACHEVAR,[no])])
-	_AC_LANG_PREFIX[]FLAGS=$m4cfa_check_save_flags])
-AS_VAR_IF(CACHEVAR,yes,
-	[m4_default([$2], :)],
-	[m4_default([$3], :)])
-AS_VAR_POPDEF([CACHEVAR])dnl
-])dnl M4CFA_CHECK_COMPILE_FLAGS
Index: tools/build/cfa.make
===================================================================
--- tools/build/cfa.make	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,58 +1,0 @@
-AM_T_CFA = $(am__t_CFA_@AM_T@)
-am__t_CFA_ =
-am__t_CFA_0 =
-am__t_CFA_1 = /usr/bin/time --quiet -f "$@ %E" # trailling space is necessary
-
-
-CFACOMPILE = $(AM_T_CFA)$(CFACC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCFACOMPILE = $(AM_T_CFA)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-	$(LIBTOOLFLAGS) --mode=compile $(CFACC) $(DEFS) \
-	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(AM_CFLAGS) $(CFAFLAGS) $(CFLAGS)
-
-AM_V_CFA = $(am__v_CFA_@AM_V@)
-am__v_CFA_ = $(am__v_CFA_@AM_DEFAULT_V@)
-am__v_CFA_0 = @echo "  CFA     " $@;
-am__v_CFA_1 =
-
-.cfa.o:
-	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-	$(am__mv) $$depbase.Tpo $$depbase.Po
-
-.cfa.lo:
-	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\
-	$(LTCFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-	$(am__mv) $$depbase.Tpo $$depbase.Plo
-
-UPPCC = u++
-UPPCOMPILE = $(UPPCC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_UPPFLAGS) $(UPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_CFLAGS) $(CFLAGS)
-
-AM_V_UPP = $(am__v_UPP_@AM_V@)
-am__v_UPP_ = $(am__v_UPP_@AM_DEFAULT_V@)
-am__v_UPP_0 = @echo "  UPP     " $@;
-am__v_UPP_1 =
-
-AM_V_GOC = $(am__v_GOC_@AM_V@)
-am__v_GOC_ = $(am__v_GOC_@AM_DEFAULT_V@)
-am__v_GOC_0 = @echo "  GOC     " $@;
-am__v_GOC_1 =
-
-AM_V_PY = $(am__v_PY_@AM_V@)
-am__v_PY_ = $(am__v_PY_@AM_DEFAULT_V@)
-am__v_PY_0 = @echo "  PYTHON  " $@;
-am__v_PY_1 =
-
-AM_V_RUST = $(am__v_RUST_@AM_V@)
-am__v_RUST_ = $(am__v_RUST_@AM_DEFAULT_V@)
-am__v_RUST_0 = @echo "  RUST    " $@;
-am__v_RUST_1 =
-
-AM_V_NODEJS = $(am__v_NODEJS_@AM_V@)
-am__v_NODEJS_ = $(am__v_NODEJS_@AM_DEFAULT_V@)
-am__v_NODEJS_0 = @echo "  NODEJS  " $@;
-am__v_NODEJS_1 =
-
-AM_V_JAVAC = $(am__v_JAVAC_@AM_V@)
-am__v_JAVAC_ = $(am__v_JAVAC_@AM_DEFAULT_V@)
-am__v_JAVAC_0 = @echo "  JAVAC   " $@;
-am__v_JAVAC_1 =
Index: tools/build/clean_hdr.awk
===================================================================
--- tools/build/clean_hdr.awk	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,31 +1,0 @@
-#!/usr/bin/awk -f
-
-BEGIN {
-	pattern = "^" path "[0-9A-z]*\\.(cc|h)"
-	complete_pattern = "^\\(" path "[0-9A-z]*\\.(cc|h)"
-	show = 0
-}
-
-$1 !~ /^(Makefile.*|Making.*|CXX)/ {
-	if( $1 ~ pattern ) {
-		show = 1
-	}
-
-	if( $1 ~ complete_pattern ) {
-		print
-	}
-
-	if( show > 0 )
-	{
-		print
-	}
-}
-
-$1 ~ /^---/ {
-	show = 0
-}
-
-$1 ~ /^CXX/ {
-	$1 = "  IWYU   "
-	print > "/dev/stderr"
-}
Index: tools/build/clean_hdrs
===================================================================
--- tools/build/clean_hdrs	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,28 +1,0 @@
-#!/bin/bash
-#                              -*- Mode: SH -*-
-#
-# Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
-#
-# The contents of this file are covered under the licence agreement in the
-# file "LICENCE" distributed with Cforall.
-#
-# clean_hdrs --
-#
-# Author           : Thierry Delisle
-# Created On       : Tue Jul 11 16:26:46 2017
-# Last Modified By :
-# Last Modified On :
-# Update Count     : 0
-#
-
-set -x
-if [ -z "$IWYU_HOME" ]; then
-    echo "Need to set IWYU_HOME"
-    exit 1
-fi
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
-
-cd src
-rm -f result.log
-make CXX="${IWYU_HOME}/build/include-what-you-use 2>&1" -ks 2> /dev/null | awk -f ${DIR}/clean_hdr.awk > result.log -v path=$@
-python ${IWYU_HOME}/src/fix_includes.py --nosafe_headers --comments --blank_lines < result.log
Index: tools/build/distcc_hash
===================================================================
--- tools/build/distcc_hash	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,7 +1,0 @@
-#!/bin/bash
-
-tools=$( dirname "${BASH_SOURCE[0]}" )
-path=$(readlink -f ${tools}/../../$1)
-
-hash=$(openssl dgst -sha256 <<< $path)
-echo "${hash: -10}"
Index: tools/build/push2dist.sh
===================================================================
--- tools/build/push2dist.sh	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#!/bin/bash
-
-hash="$1"
-bwlim="$2"
-valid=$(distcc -j 2> /dev/null)
-# if test "${valid}" != 0
-
-hosts_long=$(distcc --show-hosts 2> /dev/null)
-hosts="localhost"
-while read -r host; do
-	if [[ "${host}" =~ @?([A-Za-z0-9.\-]+)/.* ]]
-	then
-		hosts="${BASH_REMATCH[1]} ${hosts}"
-	else
-		>&2 echo "Could not parse host '${host}' (must use ssh hosts)"
-		exit 1
-	fi
-done <<< "${hosts_long}"
-
-# echo "Copying to machines : ${hosts} (hash=${hash})"
-
-files="../../../driver/cfa ../../../driver/cfa-cpp ../../../driver/cc1 ../../../driver/as defines.hfa $(find . -name '*.c*' | tr '\n' ' ')"
-# echo "Files ${files}"
-
-function push() {
-	ssh ${host} "mkdir -p ~/.cfadistcc/${hash}/"
-	rsync --bwlimit=${bwlim} -a ${dV} ${files} ${host}:~/.cfadistcc/${hash}/.
-}
-
-for host in ${hosts}
-do
-	push &
-done
-
-wait
Index: tools/build/time_make
===================================================================
--- tools/build/time_make	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,28 +1,0 @@
-#!/bin/sh
-#                              -*- Mode: SH -*-
-#
-# Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
-#
-# The contents of this file are covered under the licence agreement in the
-# file "LICENCE" distributed with Cforall.
-#
-# time_make --
-#
-# Author           : Thierry Delisle
-# Created On       : Tue Jul 11 15:55:44 2017
-# Last Modified By :
-# Last Modified On :
-# Update Count     : 0
-#
-
-set -x
-COMPILER=${CXX}
-SAFE_COMPILER=$(echo "${CXX}" | sed 's/+/\\+/g')
-TMP_FILE=$(mktemp)
-FILE=times.out
-
-make -s clean -C src
-make CXX="/usr/bin/time -f \"%E %C\" -o ${TMP_FILE} -a ${COMPILER}" -C src
-sed -r "s/([0-9]+:[0-9]+\.[0-9]+) ${SAFE_COMPILER} .* ([a-Z0-9/_\-]+\.o).*/\1 \2/" ${TMP_FILE} | \
-sed 's/driver_cfa_cpp-//' | \
-sort -r -o ${FILE}
Index: tools/busy.c
===================================================================
--- tools/busy.c	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <pthread.h>
-
-struct S {
-	int i, j, k, l, m, n;
-};
-
-void * CallingMalloc( void * arg __attribute__((unused)) ) {
-	for ( volatile int i = 0; i < 10000; i += 1 ) {
-		volatile int      * ip  = (volatile int      *)malloc( sizeof(   int  ) *   1 );
-		volatile int      * aip = (volatile int      *)malloc( sizeof(   int  ) * 100 );
-		volatile struct S * sp  = (volatile struct S *)malloc( sizeof(struct S) * 200 );
-
-		sp->i = 0;
-		sp->j = 1;
-		sp->k = 2;
-		sp->l = 3;
-		sp->m = 4;
-		sp->n = 5;
-		for(int j = 0; j < 100; j++) {
-			aip[j] = j;
-		}
-		*ip = i;
-
-		free( (void*)sp );
-		free( (void*)aip );
-		free( (void*)ip );
-	}
-	return NULL;
-}
-
-int main(int argc, const char * const argv[]) {
-	char * endptr;
-	int nThreads = 15;
-	switch(argc) {
-	case 1:
-		break;
-	case 2:
-		nThreads = strtol(argv[1], &endptr, 10);
-		if( *endptr != 0 || nThreads <= 0 ) {
-			fprintf(stderr, "Invalid number of threads %s\n", argv[1]);
-			return 1;
-		}
-		break;
-	default:
-		fprintf(stderr, "Usage: %s [no of threads]\n", argv[0]);
-		return 1;
-	}
-	printf("Running %d threads\n", nThreads);
-	while(true) {
-		pthread_t t[nThreads];
-		for(int i = 0; i < nThreads; i++) {
-			pthread_create( &t[i], NULL, CallingMalloc, NULL );
-		}
-
-		for(int i = 0; i < nThreads; i++) {
-			pthread_join( t[i], NULL );
-		}
-	}
-	return 0;
-}
Index: tools/catchsig.c
===================================================================
--- tools/catchsig.c	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,41 +1,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-
-void sig_handler(int signo)
-{
-	fprintf(stderr, "received %d\n", signo);
-	exit(0);
-}
-
-void sig(int signo) {
-	if (signal(signo, sig_handler) == SIG_ERR)
-	{
-		fprintf(stderr,"Error\n");
-		exit(1);
-	}
-}
-
-int main(void)
-{
-	printf("Starting...\n");
-	sig(SIGHUP);
-	sig(SIGINT);
-	sig(SIGQUIT);
-	sig(SIGILL);
-	sig(SIGABRT);
-	sig(SIGFPE);
-	sig(SIGSEGV);
-	sig(SIGPIPE);
-	sig(SIGALRM);
-	sig(SIGTERM);
-	sig(SIGUSR1);
-	sig(SIGUSR2);
-	sig(SIGCHLD);
-	sig(SIGCONT);
-	sig(SIGTSTP);
-	sig(SIGTTIN);
-	sig(SIGTTOU);
-	while(1);
-	return 0;
-}
Index: tools/cfa.nanorc
===================================================================
--- tools/cfa.nanorc	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,65 +1,0 @@
-## Cforall syntax colouring.
-## WIP
-
-syntax "cfa" "\.(c|h)fa"
-
-# Macros
-color brightred "\<[A-Z_][0-9A-Z_]+\>"
-
-# Types
-color green "\<(forall|trait|(o|d|f|t)type|mutex|_Bool|volatile|virtual)\>"
-color green "\<(float|double|bool|char|int|short|long|enum|void|auto)\>"
-color green "\<((s?size)|one|zero|((u_?)?int(8|16|32|64|ptr)))_t\>"
-color green "\<(static|const|extern|(un)?signed|inline)\>"
-color green "\<(typeof|vtable|sizeof|alignof)\>"
-
-# Declarations
-color brightgreen "\<(struct|union|typedef|trait|coroutine|generator)\>"
-color brightgreen "\<(monitor|thread|with|exception)\>"
-
-# Control Flow Structures
-color brightyellow "\<(if|else|while|do|for|switch|choose|case|default)\>"
-color brightyellow "\<(disable|enable|waitfor|when|timeout|suspend)\>"
-color brightyellow "\<(try|catch(Resume)?|finally)\>"
-
-# Control Flow Statements
-color magenta "\<(goto|return|break|continue|fallthr(u|ough)|throw(Resume)?)\>"
-
-# Escaped Keywords, now Identifiers.
-color white "``\w+"
-
-# Operator Names
-color blue "\^?\?\{\}|\?\[\?\]|\?\(\)" "\?(\+\+|--)" "(\+\+?|--?|\*|~|!)\?"
-color blue "\?(=|\+|-|\*|/|%|\&|\||\^|<<?|>>?)=?\?" "\?!=\?"
-
-## The <...> in attributes can be coloured as strings. (??)
-## color red "\<<?[[:alpha:]][[:alnum:]_]*>?![[:lower:]]+\>"
-
-## Update/Redistribute
-# GCC builtins
-color cyan "__attribute__[[:space:]]*\(\(([^)]|[^)]\))*\)\)"
-##color cyan "__(aligned|asm|builtin|hidden|inline|packed|restrict|section|typeof|weak)__"
-
-# Preprocesser Directives
-color brightcyan "^[[:space:]]*#[[:space:]]*(include(_next)?|define|(ifn?|un)def|if|el(if|se)|endif|error|warning|pragma)"
-
-# Values
-# Booleans
-color blue "\<(true|false)\>"
-# Characters
-color brightmagenta "'([^'\]|(\\")|(\\['abfnrtv\\]))'"
-color brightmagenta "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'"
-# Strings and Angle Strings
-color yellow ""([^"]|\\")*"" "<[^[:blank:]=]*>"
-# Multiline Strings: This regex is VERY expencive and often too strong.
-###color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*""
-
-# Comments
-color brightblue "//.*"
-color brightblue start="/\*" end="\*/"
-
-# Reminders
-color ,yellow "\<(FIXME|TODO|XXX)\>"
-
-# Trailing Whitespace
-color ,green "[[:space:]]+$"
Index: tools/error.c
===================================================================
--- tools/error.c	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,10 +1,0 @@
-#include <signal.h>
-#include <unistd.h>
-
-int main() {
-	// while(1);
-	sleep(2);
-	// raise(SIGABRT);
-	raise(SIGSEGV);
-	return 0;
-}
Index: tools/expanded-line-count.sh
===================================================================
--- tools/expanded-line-count.sh	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,53 +1,0 @@
-#!/bin/bash
-
-# This is a quick script I used to check the length of a cfa file post-
-# preprocessing. It takes compilation flags and strips out ones that might
-# cause problems, adds the -E flag and passes all of them to gcc.
-#
-# To check the standard library go to a target's src directory and enter:
-# > make CFA=expanded-line-count.sh
-#
-# Output is placed in:
-OUTPUT_FILE=std-lib-wc.txt
-
-has_quote() (echo "$1" | grep -q '"')
-
-filter_args() (
-    for arg; do
-        case "$arg" in
-        (-I*|-D*|-W*|-f*)
-            if has_quote "$arg"; then continue; fi
-            echo "$arg"
-            ;;
-        (-*|*.Tpo|*.Po|*.lo|*.o)
-            continue
-            ;;
-        (*)
-            if has_quote "$arg"; then continue; fi
-            echo "$arg"
-            ;;
-        esac
-    done
-)
-ARGS=($(filter_args "$@"))
-
-find_name() (
-    next=false
-    for arg; do
-        if $next; then
-            echo $arg
-            break
-        elif [ "-o" == "$arg" ]; then
-            next=true
-        fi
-    done
-)
-FILE_NAME="$(find_name "$@")"
-
-deps_file() (sed -e "s|.libs/|.deps/|" -e "s|.o$|.Tpo|" <<< $1)
-
-LINES=$(~/cfa-cc/driver/cfa -E "${ARGS[@]}" | wc -l)
-touch $(deps_file $FILE_NAME)
-
-echo "Record of pre-processed file lengths:" >$OUTPUT_FILE
-echo $FILE_NAME=$LINES | tee -a $OUTPUT_FILE
Index: tools/gdb/.gdbinit
===================================================================
--- tools/gdb/.gdbinit	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,9 +1,0 @@
-# These signal are necessary for Cforall, so tell gdb to ignore them
-# and pass to through to the program.
-handle SIGALRM nostop noprint pass
-handle SIGUSR1 nostop noprint pass
-# Load macros to make gdb understand uC++ user-threads
-source /home/tdelisle/workspace/gdb/utils-gdb.gdb
-source /home/tdelisle/workspace/gdb/utils-gdb.py
-# Have gdb indent complex values to make them readable.
-set print pretty
Index: tools/gdb/README
===================================================================
--- tools/gdb/README	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,19 +1,0 @@
-These instructions assume the install <prefix> for uC++ is /usr/local/u++-7.0.0.
-If installed elsewhere, change <prefix>.
-
-Copy <prefix>/.gdbinit to your home directory. If installed elsewhere, change
-the <prefix> within .gdbinit. Thereafter, gdb automatically loads the .gdbinit
-file from the home directory making the following new gdb commands available.
-
-New commands:
-
-    clusters                        : print all clusters
-    processors                      : print all processors on all clusters
-    processors  <clusterName>       : print all processors on cluster
-    task                            : print userCluster tasks, application tasks only
-    task <clusterName>              : print cluster tasks, application tasks only
-    task all                        : print all clusters, all tasks
-    task <id>                       : switch stack to task id on userCluster
-    task 0x<address>	            : switch stack to task on any cluster
-    task <id> <clusterName>         : switch stack to task on specified cluster
-    prevtask                        : return to last switched task
Index: tools/gdb/utils-gdb.gdb
===================================================================
--- tools/gdb/utils-gdb.gdb	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,69 +1,0 @@
-# 'server' keyword disables confirmation dialog when re-loading/re-defining
-# 'reset' restores the registers to the stack values at breakpoint to allow the movement commands to work correctly
-server define hook-continue
-reset
-end
-
-server define hook-next
-reset
-end
-
-server define hook-nexti
-reset
-end
-
-server define hook-step
-reset
-end
-
-server define hook-stepi
-reset
-end
-
-server define hook-finish
-reset
-end
-
-server define hook-advance
-reset
-end
-
-server define hook-jump
-reset
-end
-
-server define hook-signal
-reset
-end
-
-server define hook-until
-reset
-end
-
-server define hook-reverse-next
-reset
-end
-
-server define hook-reverse-step
-reset
-end
-
-server define hook-reverse-stepi
-reset
-end
-
-server define hook-reverse-continue
-reset
-end
-
-server define hook-reverse-finish
-reset
-end
-
-server define hook-run
-reset
-end
-
-server define hook-thread
-reset
-end
Index: tools/gdb/utils-gdb.py
===================================================================
--- tools/gdb/utils-gdb.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,736 +1,0 @@
-#
-# Copyright (C) Lynn Tran, Jiachen Zhang 2018
-#
-# utils-gdb.py --
-#
-# Author           : Lynn Tran
-# Created On       : Mon Oct 1 22:06:09 2018
-# Last Modified By : Peter A. Buhr
-# Last Modified On : Sat Jan 19 14:16:10 2019
-# Update Count     : 11
-#
-
-"""
-To run this extension, the python name has to be as same as one of the loaded library
-Additionally, the file must exist in a folder which is in gdb's safe path
-"""
-import collections
-import gdb
-import re
-
-# set these signal handlers with some settings (nostop, noprint, pass)
-gdb.execute('handle SIGALRM nostop noprint pass')
-gdb.execute('handle SIGUSR1 nostop noprint pass')
-
-CfaTypes = collections.namedtuple('CfaTypes', 'cluster_ptr processor_ptr thread_ptr int_ptr uintptr thread_state yield_state')
-
-class ThreadInfo:
-	tid = 0
-	cluster = None
-	value = None
-
-	def __init__(self, cluster, value):
-		self.cluster = cluster
-		self.value = value
-
-	def is_system(self):
-		return False
-
-# A named tuple representing information about a stack
-StackInfo = collections.namedtuple('StackInfo', 'sp fp pc')
-
-# A global variable to keep track of stack information as one switches from one
-# task to another task
-STACK = []
-
-not_supported_error_msg = "Not a supported command for this language"
-
-def is_cforall():
-	return True
-
-def get_cfa_types():
-	# GDB types for various structures/types in CFA
-	return CfaTypes(cluster_ptr = gdb.lookup_type('struct cluster').pointer(),
-		processor_ptr = gdb.lookup_type('struct processor').pointer(),
-		thread_ptr = gdb.lookup_type('struct thread$').pointer(),
-		int_ptr = gdb.lookup_type('int').pointer(),
-		uintptr = gdb.lookup_type('uintptr_t'),
-		thread_state = gdb.lookup_type('enum __Coroutine_State'),
-		yield_state = gdb.lookup_type('enum __Preemption_Reason'))
-
-def get_addr(addr):
-	"""
-	NOTE: sketchy solution to retrieve address. There is a better solution...
-	@addr: str of an address that can be in a format 0xfffff <type of the object
-	at this address>
-	Return: str of just the address
-	"""
-	str_addr = str(addr)
-	ending_addr_index = str_addr.find('<')
-	if ending_addr_index == -1:
-		return str(addr)
-	return str_addr[:ending_addr_index].strip()
-
-def print_usage(obj):
-	print(obj.__doc__)
-
-def parse(args):
-	"""
-	Split the argument list in string format, where each argument is separated
-	by whitespace delimiter, to a list of arguments like argv
-	@args: str of arguments
-	Return:
-		[] if args is an empty string
-		list if args is not empty
-	"""
-	# parse the string format of arguments and return a list of arguments
-	argv = args.split(' ')
-	if len(argv) == 1 and argv[0] == '':
-		return []
-	return argv
-
-def single_field(obj):
-	"""
-	If the struct only has one field return it, otherwise error
-	"""
-
-	_type = obj.type
-	if len(_type.fields()) != 1:
-		return None
-
-	return obj[_type.fields()[0].name]
-
-
-def start_from_dlist(dlist):
-	fs = dlist.type.fields()
-	if len(fs) != 1:
-		print("Error, can't understand dlist type for", dlist, dlist.name, dlist.type)
-		return None
-
-	return dlist[fs[0]]
-
-def fix_dlink(ptr):
-	"""
-	Remove the higher order bit from the pointer
-	"""
-	ptype = ptr.type
-	size = ptype.sizeof
-	if size == 8:
-		bit = 1 << ((size*8)-1)
-		mask = bit - 1
-	elif size == 4:
-		bit = 0
-		mask = 1
-	else:
-		print("Unexpected pointer size while fixing dlink", size)
-
-	cfa_t = get_cfa_types()
-	uptr = ptr.cast(cfa_t.uintptr)
-	return ptr if 0 == uptr & mask else gdb.Value(b'\x00'*size, ptype)
-
-class ClusterIter:
-	def __init__(self, root):
-		self.curr = None
-		self.root = root
-
-	def __iter__(self):
-		return self
-
-	def __next__(self):
-		# Clusters form a cycle
-		# If we haven't seen the root yet, then the root is the first
-		if not self.curr:
-			self.curr = self.root
-			return self.curr
-
-		# if we already saw the root, then go forward
-		self.curr = self.curr['_X4nodeS26__cluster____dbg_node_cltr_1']['_X4nextPS7cluster_1']
-
-		# if we reached the root again, then we are done
-		if self.curr == self.root:
-			raise StopIteration
-
-		# otherwise return the next
-		return self.curr
-
-def all_clusters():
-	"""
-	Return: a list of all the clusters as an iterator.
-	obtained from gdb.Value of globalClusters.root (is an address)
-	"""
-	if not is_cforall():
-		return []
-
-	cluster_root = gdb.parse_and_eval('_X11mainClusterPS7cluster_1')
-	if cluster_root.address == 0x0:
-		print('No clusters, program terminated')
-		return []
-
-	return ClusterIter(cluster_root)
-
-class ProcIter:
-	def __init__(self, root):
-		self.curr = None
-		self.root = root
-
-	def __iter__(self):
-		return self
-
-	def check(self):
-		# check if this is the last value
-		if not fix_dlink(self.curr):
-			raise StopIteration
-
-	def __next__(self):
-		cfa_t = get_cfa_types()
-
-		# Processors form a cycle
-		# If we haven't seen the root yet, then the root is the first
-		if not self.curr:
-			my_next = self.root
-			self.curr = my_next.cast(cfa_t.processor_ptr)
-
-			#check if this is an empty list
-			self.check()
-
-			return self.curr
-
-		# if we already saw the root, then go forward
-		my_next = self.curr['_X4linkS5dlink_S9processor__1']['_X4nextPY13__tE_generic__1']
-		self.curr = my_next.cast(cfa_t.processor_ptr)
-
-		#check if we reached the end
-		self.check()
-
-		# otherwise return the next
-		return self.curr
-
-def proc_list(cluster):
-	"""
-	Return: for a given processor, return the active and idle processors, as 2 iterators
-	"""
-	cfa_t = get_cfa_types()
-	proclist = cluster['_X5procsS19__cluster_proc_list_1']
-
-	idle = start_from_dlist(proclist['_X5idlesS5dlist_S9processorS5dlink_S9processor___1'])['_X4nextPY13__tE_generic__1']
-	active = start_from_dlist(proclist['_X7activesS5dlist_S9processorS5dlink_S9processor___1'])['_X4nextPY13__tE_generic__1']
-	return ProcIter(active.cast(cfa_t.processor_ptr)), ProcIter(idle.cast(cfa_t.processor_ptr))
-
-def all_processors():
-	procs = []
-	for c in all_clusters():
-		active, idle = proc_list(c)
-		for p in active:
-			procs.append(p)
-
-		for p in idle:
-			procs.append(p)
-
-	print(procs)
-	return procs
-
-def tls_for_pthread(pthrd):
-	prev = gdb.selected_thread()
-	inf = gdb.selected_inferior()
-
-	thrd = inf.thread_from_thread_handle( pthrd )
-	thrd.switch()
-	tls = gdb.parse_and_eval('&_X9kernelTLSS16KernelThreadData_1')
-
-	prev.switch()
-	return tls
-
-def tls_for_proc(proc):
-	return proc['_X10local_dataPS16KernelThreadData_1']
-
-def thread_for_pthread(pthrd):
-	return tls_for_pthread(pthrd)['_X11this_threadVPS7thread$_1']
-
-def thread_for_proc(proc):
-	return tls_for_proc(proc)['_X11this_threadVPS7thread$_1']
-
-
-
-def find_curr_thread():
-	# btstr = gdb.execute('bt', to_string = True).splitlines()
-	# if len(btstr) == 0:
-	#     print('error')
-	#     return None
-	# return btstr[0].split('this=',1)[1].split(',')[0].split(')')[0]
-	return None
-
-def lookup_cluster(name = None):
-	"""
-	Look up one or more cluster given a name
-	@name: str
-	Return: gdb.Value
-	"""
-	if not is_cforall():
-		return None
-
-	clusters = all_clusters()
-	if not clusters:
-		return None
-
-	if not name:
-		return clusters.root
-
-	# lookup for the task associated with the id
-	found = [c for c in clusters if c['_X4namePKc_1'].string() == name]
-
-	if not found:
-		print("Cannot find a cluster with the name: {}.".format(name))
-		return None
-
-	return found
-
-
-def lookup_threads_by_cluster(cluster):
-		# Iterate through a circular linked list of threads and accumulate them in an array
-		threads = []
-
-		cfa_t = get_cfa_types()
-		head = single_field(cluster['_X7threadsS5dlist_S7thread$S18__thread_user_link__1'])
-		root = head['_X4nextPY13__tE_generic__1'].cast(cfa_t.thread_ptr)
-
-		if root == 0x0 or root.address == 0x0:
-			print('There are no tasks for cluster: {}'.format(cluster))
-			return threads
-
-		curr = root
-		tid = 0
-		sid = -1
-
-		while True:
-			t = ThreadInfo(cluster, curr)
-			if t.is_system():
-				t.tid = sid
-				sid -= 1
-			else:
-				t.tid = tid
-				tid += 1
-
-			threads.append(t)
-
-			curr = fix_dlink(single_field(curr['cltr_link'])['_X4nextPY13__tE_generic__1']).cast(cfa_t.thread_ptr)
-			if curr == root or curr == 0x0:
-				break
-
-		return threads
-
-def system_thread(thread):
-	return False
-
-def adjust_stack(pc, fp, sp):
-	# pop sp, fp, pc from global stack
-	gdb.execute('set $pc = {}'.format(pc))
-	gdb.execute('set $rbp = {}'.format(fp))
-	gdb.execute('set $sp = {}'.format(sp))
-
-############################ COMMAND IMPLEMENTATION #########################
-
-class Clusters(gdb.Command):
-	"""Cforall: Display currently known clusters
-Usage:
-	info clusters                 : print out all the clusters
-"""
-
-	def __init__(self):
-		super(Clusters, self).__init__('info clusters', gdb.COMMAND_USER)
-
-	def print_cluster(self, cluster_name, cluster_address):
-		print('{:>20}  {:>20}'.format(cluster_name, cluster_address))
-
-	#entry point from gdb
-	def invoke(self, arg, from_tty):
-		if not is_cforall():
-			return
-
-		if arg:
-			print("info clusters does not take arguments")
-			print_usage(self)
-			return
-
-		self.print_cluster('Name', 'Address')
-
-		for c in all_clusters():
-			self.print_cluster(c['_X4namePKc_1'].string(), str(c))
-
-		print("")
-
-############
-class Processors(gdb.Command):
-	"""Cforall: Display currently known processors
-Usage:
-	info processors                 : print out all the processors
-	info processors <cluster_name>  : print out all processors in a given cluster
-"""
-
-	def __init__(self):
-		super(Processors, self).__init__('info processors', gdb.COMMAND_USER)
-
-	def print_processor(self, processor, in_stats):
-		should_stop = processor['_X12do_terminateVb_1']
-		if not should_stop:
-			status = in_stats
-		else:
-			stop_count  = processor['_X10terminatedS9semaphore_1']['_X5counti_1']
-			status_str  = 'Last Thread' if stop_count >= 0 else 'Terminating'
-			status      = '{}({},{})'.format(status_str, should_stop, stop_count)
-
-		print('{:>20}  {:>11}  {:<7}  {:<}'.format(
-			processor['_X4namePKc_1'].string(),
-			status,
-			str(processor['_X18pending_preemptionb_1']),
-			str(processor)
-		))
-		tls = tls_for_proc( processor )
-		thrd = thread_for_proc( processor )
-		if thrd != 0x0:
-			tname = '{} {}'.format(thrd['self_cor']['name'].string(), str(thrd))
-		else:
-			tname = None
-
-		print('{:>20}  {}'.format('Thread', tname))
-		print('{:>20}  {}'.format('TLS', tls))
-
-	#entry point from gdb
-	def invoke(self, arg, from_tty):
-		if not is_cforall():
-			return
-
-		if not arg:
-			clusters = all_clusters()
-		else:
-			clusters = [lookup_cluster(arg)]
-
-		if not clusters:
-			print("No Cluster matching arguments found")
-			return
-
-		print('{:>20}  {:>11}  {:<7}  {}'.format('Processor', '', 'Pending', 'Object'))
-		print('{:>20}  {:>11}  {:<7}  {}'.format('Name', 'Status', 'Yield', 'Address'))
-		for c in clusters:
-			print('Cluster {}'.format(c['_X4namePKc_1'].string()))
-
-			active, idle = proc_list(c)
-			# print the processor information
-			for p in active:
-				self.print_processor(p, 'Active')
-
-			for p in idle:
-				self.print_processor(p, 'Idle')
-
-			print()
-
-		print()
-
-############
-class Threads(gdb.Command):
-	"""Cforall: Display currently known threads
-Usage:
-	cfathreads                           : print Main Cluster threads, application threads only
-	cfathreads all                       : print all clusters, all threads
-	cfathreads <clusterName>             : print cluster threads, application threads only
-	"""
-	def __init__(self):
-		# The first parameter of the line below is the name of the command. You
-		# can call it 'uc++ task'
-		super(Threads, self).__init__('info cfathreads', gdb.COMMAND_USER)
-
-	def print_formatted(self, marked, tid, name, state, address):
-		# print(marked, tid, name, state, address)
-		print('{:>1}  {:>4}  {:>20}  {:>10}  {:>20}'.format('*' if marked else ' ', tid, name, state, address))
-
-	def print_thread(self, thread, tid, marked):
-		# print("print", thread, tid, marked)
-		cfa_t = get_cfa_types()
-		ys = str(thread['preempted'].cast(cfa_t.yield_state))
-		if ys == '_X15__NO_PREEMPTIONKM19__Preemption_Reason_1':
-			state = str(thread['state'].cast(cfa_t.thread_state))
-		elif ys == '_X18__ALARM_PREEMPTIONKM19__Preemption_Reason_1':
-			state = 'preempted'
-		elif ys == '_X19__MANUAL_PREEMPTIONKM19__Preemption_Reason_1':
-			state = 'yield'
-		elif ys == '_X17__POLL_PREEMPTIONKM19__Preemption_Reason_1':
-			state = 'poll'
-		else:
-			print("error: thread {} in undefined preemption state {}".format(thread, ys))
-			state = 'error'
-		self.print_formatted(marked, tid, thread['self_cor']['name'].string(), state, str(thread))
-
-	def print_threads_by_cluster(self, cluster, print_system = False):
-		# Iterate through a circular linked list of tasks and print out its
-		# name along with address associated to each cluster
-		threads = lookup_threads_by_cluster(cluster)
-		if not threads:
-			return
-
-		running_thread = find_curr_thread()
-		if running_thread is None:
-			print('Could not identify current thread')
-
-		self.print_formatted(False, '', 'Name', 'State', 'Address')
-		for t in threads:
-			if not t.is_system() or print_system:
-				self.print_thread(t.value, t.tid, t.value == running_thread if running_thread else False)
-
-		print()
-
-	def print_all_threads(self):
-		for c in all_clusters():
-			self.print_threads_by_cluster(c, False)
-
-	def invoke(self, arg, from_tty):
-		"""
-		@arg: str
-		@from_tty: bool
-		"""
-		if not is_cforall():
-			return
-
-		if not arg:
-			cluster = lookup_cluster()
-			if not cluster:
-				print("Could not find Main Cluster")
-				return
-
-			# only tasks and main
-			self.print_threads_by_cluster(cluster, False)
-
-		elif arg == 'all':
-			# all threads, all clusters
-			self.print_all_threads()
-
-		else:
-			cluster = lookup_cluster(arg)
-			if not cluster:
-				print("No matching cluster")
-				return
-
-			# all tasks, specified cluster
-			self.print_threads_by_cluster(cluster, True)
-
-
-############
-class Thread(gdb.Command):
-	"""Cforall: Switch to specified user threads
-Usage:
-	cfathread <id>                       : switch stack to thread id on main cluster
-	cfathread 0x<address>	             : switch stack to thread on any cluster
-	cfathread <id> <clusterName>         : switch stack to thread on specified cluster
-	"""
-	def __init__(self):
-		# The first parameter of the line below is the name of the command. You
-		# can call it 'uc++ task'
-		super(Thread, self).__init__('cfathread', gdb.COMMAND_USER)
-
-	############################ AUXILIARY FUNCTIONS #########################
-
-	def switchto(self, thread):
-		"""Change to a new task by switching to a different stack and manually
-		adjusting sp, fp and pc
-		@task_address: str
-			2 supported format:
-				in hex format
-					<hex_address>: literal hexadecimal address
-					Ex: 0xffffff
-				in name of the pointer to the task
-					"task_name": pointer of the variable name of the cluster
-						Ex: T* s -> task_name = s
-			Return: gdb.value of the cluster's address
-		"""
-		try:
-			if not gdb.lookup_symbol('__cfactx_switch'):
-				print('__cfactx_switch symbol is unavailable')
-				return
-		except:
-			print('here 3')
-
-		cfa_t = get_cfa_types()
-
-		state = thread['state'].cast(cfa_t.thread_state)
-		try:
-			if state == gdb.parse_and_eval('Halted'):
-				print('Cannot switch to a terminated thread')
-				return
-
-			if state == gdb.parse_and_eval('Start'):
-				print('Cannjot switch to a thread not yet run')
-				return
-		except:
-			print("here 2")
-			return
-
-
-		context = thread['context']
-
-
-
-		# must be at frame 0 to set pc register
-		gdb.execute('select-frame 0')
-		if gdb.selected_frame().architecture().name() != 'i386:x86-64':
-			print('gdb debugging only supported for i386:x86-64 for now')
-			return
-
-		# gdb seems to handle things much better if we pretend we just entered the context switch
-		# pretend the pc is __cfactx_switch and adjust the sp, base pointer doesn't need to change
-		# lookup for sp,fp and uSwitch
-		xsp = context['SP'] + 40 # 40 = 5 64bit registers : %r15, %r14, %r13, %r12, %rbx WARNING: x64 specific
-		xfp = context['FP']
-
-		# convert string so we can strip out the address
-		try:
-			xpc = get_addr(gdb.parse_and_eval('__cfactx_switch').address)
-		except:
-			print("here")
-			return
-
-		# push sp, fp, pc into a global stack
-		global STACK
-		sp = gdb.parse_and_eval('$sp')
-		fp = gdb.parse_and_eval('$fp')
-		pc = gdb.parse_and_eval('$pc')
-		stack_info = StackInfo(sp = sp, fp = fp, pc = pc)
-		STACK.append(stack_info)
-
-		# update registers for new task
-		# print('switching to {} ({}) : [{}, {}, {}]'.format(thread['self_cor']['name'].string(), str(thread), str(xsp), str(xfp), str(xpc)))
-		print('switching to thread {} ({})'.format(str(thread), thread['self_cor']['name'].string()))
-		gdb.execute('set $rsp={}'.format(xsp))
-		gdb.execute('set $rbp={}'.format(xfp))
-		gdb.execute('set $pc={}'.format(xpc))
-
-	def find_matching_gdb_thread_id():
-		"""
-		Parse the str from info thread to get the number
-		"""
-		info_thread_str = gdb.execute('info thread', to_string=True).splitlines()
-		for thread_str in info_thread_str:
-			if thread_str.find('this={}'.format(task)) != -1:
-				thread_id_pattern = r'^\*?\s+(\d+)\s+Thread'
-				# retrive gdb thread id
-				return re.match(thread_id_pattern, thread_str).group(1)
-
-			# check if the task is running or not
-			if task_state == gdb.parse_and_eval('uBaseTask::Running'):
-				# find the equivalent thread from info thread
-				gdb_thread_id = find_matching_gdb_thread_id()
-				if gdb_thread_id is None:
-					print('cannot find the thread id to switch to')
-					return
-				# switch to that thread based using thread command
-				gdb.execute('thread {}'.format(gdb_thread_id))
-
-	def switchto_id(self, tid, cluster):
-		"""
-		@cluster: cluster object
-		@tid: int
-		"""
-		threads = lookup_threads_by_cluster( cluster )
-
-		for t in threads:
-			if t.tid == tid:
-				self.switchto(t.value)
-				return
-
-		print("Cound not find thread by id '{}'".format(tid))
-
-	def invoke(self, arg, from_tty):
-		"""
-		@arg: str
-		@from_tty: bool
-		"""
-		if not is_cforall():
-			return
-
-		argv = parse(arg)
-		if argv[0].isdigit():
-			cname = " ".join(argv[1:]) if len(argv) > 1 else None
-			cluster = lookup_cluster(cname)
-			if not cluster:
-				print("Could not find cluster '{}'".format(cname if cname else "Main Cluster"))
-				return
-
-			try:
-				tid = int(argv[0])
-			except:
-				print("'{}' not a valid thread id".format(argv[0]))
-				print_usage(self)
-				return
-
-				# by id, userCluster
-			self.switchto_id(tid, cluster)
-
-		elif argv[0].startswith('0x') or argv[0].startswith('0X'):
-			self.switchto(argv[0]) # by address, any cluster
-
-############
-class PrevThread(gdb.Command):
-	"""Switch back to previous task on the stack"""
-	usage_msg = 'prevtask'
-
-	def __init__(self):
-		super(PrevThread, self).__init__('prevtask', gdb.COMMAND_USER)
-
-	def invoke(self, arg, from_tty):
-		"""
-		@arg: str
-		@from_tty: bool
-		"""
-		global STACK
-		if len(STACK) != 0:
-			# must be at frame 0 to set pc register
-			gdb.execute('select-frame 0')
-
-			# pop stack
-			stack_info = STACK.pop()
-			pc = get_addr(stack_info.pc)
-			sp = stack_info.sp
-			fp = stack_info.fp
-
-			# pop sp, fp, pc from global stack
-			adjust_stack(pc, fp, sp)
-
-			# must be at C++ frame to access C++ vars
-			gdb.execute('frame 1')
-		else:
-			print('empty stack')
-
-class ResetOriginFrame(gdb.Command):
-	"""Reset to the origin frame prior to continue execution again"""
-	usage_msg = 'resetOriginFrame'
-	def __init__(self):
-		super(ResetOriginFrame, self).__init__('reset', gdb.COMMAND_USER)
-
-	def invoke(self, arg, from_tty):
-		"""
-		@arg: str
-		@from_tty: bool
-		"""
-		global STACK
-		if len(STACK) != 0:
-			stack_info = STACK.pop(0)
-			STACK.clear()
-			pc = get_addr(stack_info.pc)
-			sp = stack_info.sp
-			fp = stack_info.fp
-
-			# pop sp, fp, pc from global stack
-			adjust_stack(pc, fp, sp)
-
-			# must be at C++ frame to access C++ vars
-			gdb.execute('frame 1')
-		#else:
-			#print('reset: empty stack') #probably does not have to print msg
-
-Clusters()
-Processors()
-ResetOriginFrame()
-PrevThread()
-Threads()
-Thread()
-
-# Local Variables: #
-# mode: Python #
-# End: #
Index: tools/jenkins/archive-gen.sh
===================================================================
--- tools/jenkins/archive-gen.sh	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#!/bin/bash
-
-script="$(dirname "$0")/setup.sh.in"
-if [ ! -f $script ]; then
-	>&2 echo "Cannot find $script"
-	exit 1
-fi
-
-if [ -f "setup.sh" ]; then
-	>&2 echo "setup.sh already exists, would overwrite it"
-	exit 1
-fi
-
-echo "#!/bin/bash" > setup.sh
-echo "" >> setup.sh
-chmod a+x setup.sh
-
-echo "arch=\"$(uname -m)\"" >> setup.sh
-echo "name=\"$(uname -n)\"" >> setup.sh
-echo "" >> setup.sh
-echo "# ---- copied from $script ----" >> setup.sh
-echo "" >> setup.sh
-
-cat $script >> setup.sh
Index: tools/jenkins/setup.sh.in
===================================================================
--- tools/jenkins/setup.sh.in	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,226 +1,0 @@
-# check if stdout is a terminal...
-if test -t 1; then
-
-	# see if it supports colors...
-	ncolors=$(tput colors)
-
-	if test -n "$ncolors" && test $ncolors -ge 8; then
-		bold="$(tput bold)"
-		underline="$(tput smul)"
-		standout="$(tput smso)"
-		normal="$(tput sgr0)"
-		black="$(tput setaf 0)"
-		red="$(tput setaf 1)"
-		green="$(tput setaf 2)"
-		yellow="$(tput setaf 3)"
-		blue="$(tput setaf 4)"
-		magenta="$(tput setaf 5)"
-		cyan="$(tput setaf 6)"
-		white="$(tput setaf 7)"
-	fi
-fi
-
-function error
-{
-	>&2 echo "${red}$1${normal}"
-}
-
-# helper function to get the runpath (-Wl,-rpath in gcc)
-function getrunpath()
-{
-	local elfout=$(readelf -d $1 | grep -E "RPATH|RUNPATH")
-	regex='\[/([[:alpha:][:digit:]@/_.-]+)\]'
-	if [[ $elfout =~ $regex ]]; then
-		local myRPath=${BASH_REMATCH[1]}
-	else
-		error "Could not find RUNPATH for test $2"
-	fi
-	echo "$myRPath"
-}
-
-# helper function to list the dependencies of each executable
-function getdeps()
-{
-	local deps=$(ldd $1)
-	retlcldeps=()
-	retsysdeps=()
-	while IFS= read -r line; do
-		regex1='(libcfa[[:alpha:][:digit:].]+)'
-		regex2='/([[:alpha:][:digit:]@/_.-]+)'
-		regex3='linux-vdso.so.1|linux-gate.so.1'
-		if [[ $line =~ $regex1 ]]; then
-			retlcldeps+=(${BASH_REMATCH[1]})
-		elif [[ $line =~ $regex2 ]]; then
-			retsysdeps+=(${BASH_REMATCH[1]})
-		elif [[ $line =~ $regex3 ]]; then
-			# echo "ignoring '$line}': intrinsic"
-			:
-		else
-			error "Could not find dependency '$line' for test $2"
-		fi
-	done <<< "$deps"
-}
-
-# make a symlink, with better errors
-function makelink()
-{
-	local source=$1
-	local target=$2
-	if [ ! -f $source ]; then
-		error "Source of link $source does not exist"
-	fi
-
-	if [ ! -e $target ] && [ ! -L $target ]; then
-		ln -s $source $target
-		return
-	fi
-
-	if [ ! -L $target ]; then
-		error "Cannot create link $target for $source, existing regular file"
-	else
-		want=$(readlink -f $source)
-		have=$(readlink -f $target)
-		if [ $want == $have ]; then
-			return
-		fi
-		error "Target link $(basename $target) for $source already exists and has incorrect target $have"
-	fi
-}
-
-# ========================================
-# make sure this computer is acceptable
-myarch=$(uname -m)
-if [ ! -z $arch ] && [ "$myarch" != "$arch" ]; then
-	error "Wrong architecture, is : $myarch, need: $arch"
-	exit 1
-fi
-
-myname=$(uname -n)
-if [ ! -z $name ] && [ "$myname" != "$name" ]; then
-	>&2 echo "${yellow}Unexpected machine name, is: $myname, expected: $name${normal}"
-fi
-
-# ========================================
-# make sure we use the right paths
-srcdir=$(readlink -f $(dirname "$0"))
-outdir=$(readlink -f $(pwd))
-
-rnpaths=()
-sysdeps=()
-lcldeps=()
-
-# find all the tests
-programs=($(find $srcdir/tests/crashes -name exe))
-if [ ${#programs[@]} -eq 0 ]; then
-	error "ERROR no executables found in archive"
-	exit 1
-fi
-
-# ========================================
-# for each tests
-echo "generating command files ..."
-for pgm in "${programs[@]}"
-do
-	# find the test's name
-	regex='tests/crashes/(short|full-debug|full-nodebug)/([[:alpha:][:digit:]@/_.-]+)/exe'
-	if [[ $pgm =~ $regex ]]; then
-		name=${BASH_REMATCH[2]}
-	else
-		error "Executable '$pgm' has ill-formed path"
-	fi
-
-	# get a path to the executable
-	exe=$(readlink -f "$pgm")
-
-	# check the executable exist
-	if [ ! -x $exe ]; then
-		error "Executable for '$name' does not have execute permission"
-		continue
-	fi
-
-	ldd $exe > /dev/null 2>&1
-	if [ $? -ne 0 ]; then
-		error "Executable for '$name' is not valid for this architecture"
-		continue
-	fi
-
-	# get the corresponding core file
-	core="$(dirname "$exe")/core"
-	if [ ! -f "$core" ]; then
-		error "No core found for test '$name'"
-	fi
-
-	# create the command file
-	file="${name//\//.}.com"
-	echo "$file"
-	echo "set solib-absolute-prefix $outdir" > $file
-	echo "file $exe" >> $file
-	echo "core-file $core" >> $file
-
-	# find the system dependencies
-	getdeps $exe $name
-	sysdeps+=("${retsysdeps[@]}")
-	lcldeps+=("${retlcldeps[@]}")
-
-	# find it's expected runpath
-	rnpaths+=("$(getrunpath $exe $name)")
-done <<< "$programs"
-
-echo "done"
-
-# ========================================
-# eliminate duplicates from the list of dependencies
-
-# get unique elements of array
-function getuniques()
-{
-	echo "$*" | tr ' ' '\n' | sort -u | tr '\n' ' '
-}
-
-rnpaths=($(getuniques ${rnpaths[@]}))
-sysdeps=($(getuniques ${sysdeps[@]}))
-lcldeps=($(getuniques ${lcldeps[@]}))
-
-# ========================================
-# create symlinks to cforall dependencies
-echo "setting up local dependencies ..."
-
-for rpath in "${rnpaths[@]}"
-do
-	# find the debug level
-	if [[ $rpath =~ 'nodebug' ]]; then
-		level="-nodebug"
-	elif [[ $rpath =~ 'debug' ]]; then
-		level="-debug"
-	else
-		error "Executable(s) with ill-formed rpath"
-	fi
-
-	# create the right directory
-	mkdir -p "$outdir/$rpath"
-
-	# for each dependencies create them
-	# this might create unnecessary pairs, but I don't care
-	for lib in "${lcldeps[@]}"
-	do
-		echo "$lib$level"
-		source=$(find "$srcdir" -name "$lib*" -a -path "*$level*")
-		target="$outdir/$rpath/$lib"
-		makelink $source $target
-	done
-done
-
-echo "done"
-
-# ========================================
-# create symlinks to system dependencies
-echo "setting up system dependencies ..."
-
-for dep in "${sysdeps[@]}"
-do
-	echo $dep
-	mkdir -p "$outdir/$(dirname $dep)"
-	makelink "/$dep" "$outdir/$dep"
-done
-
-echo "done"
Index: tools/langserver/src/json.hpp
===================================================================
--- tools/langserver/src/json.hpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,11 +1,0 @@
-#pragma once
-
-#include <nlohmann/json.hpp>
-
-namespace json {
-      static inline auto parse(const std::vector<char> & buff) {
-            return nlohmann::json::parse(buff.begin(), buff.end());
-      }
-
-      using obj = nlohmann::json;
-}
Index: tools/langserver/src/log.cpp
===================================================================
--- tools/langserver/src/log.cpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,24 +1,0 @@
-#include "log.hpp"
-
-#include <iostream>
-#include <fstream>
-
-#include <unistd.h>
-#include <sys/types.h>
-#include <pwd.h>
-
-int g_argc;
-char** g_argv;
-
-static std::ofstream create() {
-      struct passwd *pw = getpwuid(getuid());
-      const char *homedir = pw->pw_dir;
-
-      std::string target = std::string(homedir) + "/.cfa-ls.log";
-      return std::ofstream{ target };
-}
-
-std::ostream & log() {
-      static std::ofstream log = create();
-      return log;
-}
Index: tools/langserver/src/log.hpp
===================================================================
--- tools/langserver/src/log.hpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,7 +1,0 @@
-#pragma once
-
-#include <iostream>
-
-extern std::ostream & log();
-extern int g_argc;
-extern char** g_argv;
Index: tools/langserver/src/main.cpp
===================================================================
--- tools/langserver/src/main.cpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,120 +1,0 @@
-#include <cstdio>
-
-#include <iostream>
-#include <string>
-#include <vector>
-
-#include <unistd.h>
-
-#include "json.hpp"
-#include "log.hpp"
-#include "server.hpp"
-
-static void request(std::vector<char> & buf);
-static void reply(const json::obj & );
-
-json::obj noop( const json::obj & ) {
-	return {};
-}
-
-std::unordered_map<std::string, json::obj (*)( const json::obj & )> actions {
-	{ "initialize", server::init },
-	{ "initialized", noop }
-};
-
-int main(int argc, char * argv[]) {
-	g_argc = argc;
-	g_argv = argv;
-
-	log() << "Language Server called with args:" << std::endl;
-	for(int i = 0; i < argc; i++) {
-		log() << "\t- " << argv[i] << std::endl;
-	}
-
-	// std::cout.setf(std::ios::unitbuf);
-
-	// char buff[1000];
-	// int r = 0;
-	// while(0 != (r = read(STDIN_FILENO, buff, 1000))) {
-	// 	for(int i = 0; i < r; i++) {
-	// 		log() << buff[i];
-	// 	}
-	// }
-	// log() << std::endl;
-
-	// return 0;
-
-	std::vector<char> buffer;
-	while(true) {
-		request(buffer);
-		if(buffer.size() == 0) break;
-
-		auto top = json::parse(buffer);
-
-		auto action = actions.find( top["method"] );
-		if(action != actions.end()) {
-			log() << "Executing request '" << action->first << "'" << std::endl;
-			json::obj response = {
-				{"id", top["id"] }
-			};
-
-			try{
-				response["result"] = action->second( top["params"] );
-			} catch( const json::obj & error ) {
-				response["result"] = "";
-				response["error"] = error;
-			}
-
-			reply(response);
-		}
-		else {
-			log() << "WARNING no action for method '" << top["method"].dump(4) << "'" << std::endl;
-		}
-	}
-
-	log() << "Language Server closing after end of file" << std::endl;
-
-	return 0;
-}
-
-static void request(std::vector<char> & buffer) {
-	std::string lenstr;
-	std::getline( std::cin, lenstr );
-	if(std::cin.eof()) { buffer.clear(); return; };
-
-	if (lenstr.rfind("Content-Length: ", 0) != 0) {
-		log() << "Expected content length bug got '" << lenstr << "' instead " << std::endl;
-		std::exit(EXIT_FAILURE);
-	}
-
-	size_t idx = sizeof("Content-Length:");
-	size_t end;
-	size_t len = std::stoul(lenstr.substr(idx), &end);
-	if(lenstr.length() != (idx + end + 1)) {
-		log() << "Inconsistent size of integer in content length: " << lenstr.length() << " vs " << (idx + end) << std::endl;
-	}
-
-	log() << "New request of " << len << " bytes" << std::endl;
-	buffer.resize( len + 2 );
-	std::cin.read(buffer.data(), buffer.size());
-
-	for(char c : buffer) {
-		log() << c;
-	}
-	log() << std::endl;
-	return;
-}
-
-static void reply( const json::obj & response) {
-	if(response["result"].is_null()) {
-		log() << "No response needed" << std::endl;
-		return;
-	}
-
-	log() << "Responding with : " << response.dump(4) << std::endl;
-	const std::string & r = response.dump();
-	std::cout << "Content-Length: " << r.length() << "\r\n\r\n";
-	std::cout.flush();
-	std::cout  << r << "\r\n";
-	std::cout.flush();
-}
Index: tools/langserver/src/server.cpp
===================================================================
--- tools/langserver/src/server.cpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,47 +1,0 @@
-#include "server.hpp"
-#include "log.hpp"
-
-namespace server {
-      class server {
-      public:
-            void check_ready() {
-                  if(!ready) {
-                        throw json::obj({
-                              { "code", -32002 },
-                              { "message", "Server not initialized" }
-                        });
-                  }
-            }
-
-            void init() { ready = true; };
-      private:
-            bool ready = false;
-
-      };
-
-      static server g_server;
-
-      json::obj init( const json::obj & ) {
-            g_server.init();
-		return {
-			{ "capabilities", {
-                        {"textDocumentSync", {
-                              {"openClose", true},
-                              {"change", 1}
-                        }},
-                        {"documentHighlightProvider", {
-                              {"workDoneProgress", false}
-                        }},
-                        {"completionProvider", {
-                              {"triggerCharacters", json::obj::array()},
-                              {"allCommitCharacters", json::obj::array()},
-                              {"resolveProvider", true}
-                        }}
-                  } },
-			{ "serverInfo", {
-				{ "name", "Cforall Language Server" },
-				{ "version", "0.1" }
-			}}
-		};
-	}
-}
Index: tools/langserver/src/server.hpp
===================================================================
--- tools/langserver/src/server.hpp	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,7 +1,0 @@
-#pragma once
-
-#include "json.hpp"
-
-namespace server {
-	json::obj init(const json::obj & );
-};
Index: tools/perf/png.py
===================================================================
--- tools/perf/png.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,123 +1,0 @@
-#!/usr/bin/python3
-
-import argparse, json, math, sys, time
-import multiprocessing
-from PIL import Image
-import numpy as np
-
-class Timed:
-	def __init__(self, text):
-		print(text, end='', flush=True)
-
-	def pretty(self, durr):
-		seconds = int(durr)
-		days, seconds = divmod(seconds, 86400)
-		hours, seconds = divmod(seconds, 3600)
-		minutes, seconds = divmod(seconds, 60)
-		if days > 0:
-			return '%dd%dh%dm%ds' % (days, hours, minutes, seconds)
-		elif hours > 0:
-			return '%dh%dm%ds' % (hours, minutes, seconds)
-		elif minutes > 0:
-			return '%dm%ds' % (minutes, seconds)
-		else:
-			return '%ds' % (seconds,)
-
-	def __enter__(self):
-		self.start = time.time()
-		return self
-
-	def __exit__(self, *args):
-		self.end = time.time()
-		print(self.pretty(self.end - self.start))
-
-
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--infile', type=argparse.FileType('r'), default=sys.stdin)
-parser.add_argument('--outfile', type=str, default='out.png')
-
-args = parser.parse_args()
-
-pool = multiprocessing.Pool()
-
-with Timed("Loading json..."):
-	obj = json.load(args.infile)
-
-min_tsc = int(obj['min-tsc'])
-max_tsc = int(obj['max-tsc'])
-
-def tsc_to_s(tsc):
-	return float(tsc - min_tsc)  / 2500000000.0
-
-max_sec = tsc_to_s(max_tsc)
-print([min_tsc, max_tsc, max_sec])
-
-min_cpu = int(obj['min-cpu'])
-max_cpu = int(obj['max-cpu'])
-cnt_cpu = max_cpu - min_cpu + 1
-nbins = math.ceil(max_sec * 10)
-
-class Bar:
-	def __init__(self):
-		pass
-
-with Timed("Creating bins..."):
-	bins = []
-	for _ in range(0, int(nbins)):
-		bar = Bar()
-		bins.append([bar, *[*([0] * cnt_cpu), bar] * cnt_cpu])
-		# bins.append([0] * cnt_cpu)
-
-	bins = np.array(bins)
-
-
-
-def flatten(val):
-	secs = tsc_to_s(val[1])
-	ratio = secs / max_sec
-	b = int(ratio * (nbins - 1))
-	## from/to
-	from_ = val[2] - min_cpu
-	to_   = val[3] - min_cpu
-	idx = int(1 + ((cnt_cpu + 1) * to_) + from_)
-	return [b, idx, 1]
-	## val per cpu
-	# cnt = val[2]
-	# idx = val[3] - min_cpu
-	# # idx = from_
-	# return [b, idx, cnt]
-
-
-with Timed("Compressing data..."):
-	compress = map(flatten, obj['values'])
-
-highest  = 1
-with Timed("Grouping data..."):
-	for x in compress:
-		bins[x[0]][x[1]] += x[2]
-		highest = max(highest, bins[x[0]][x[1]])
-
-print(highest)
-# highest  = 10000000000
-
-with Timed("Normalizing data..."):
-	def normalize(v):
-		if type(v) is Bar:
-			return np.uint32(0xff008000)
-		v = v * 255 / float(highest)
-		if v > 256:
-			v = 255
-		u8 = np.uint8(v)
-		u32 = np.uint32(u8)
-
-		return (0xff << 24) | (u32 << 16) | (u32 << 8) | (u32 << 0)
-	normalizef = np.vectorize(normalize, [np.uint32])
-
-	bins = normalizef(bins)
-
-print(bins.shape)
-with Timed("Saving image..."):
-	im = Image.fromarray(bins, mode='RGBA')
-	im.show()
-	im.save(args.outfile)
Index: tools/perf/process_halts.sh
===================================================================
--- tools/perf/process_halts.sh	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,34 +1,0 @@
-#!/bin/bash -e
-
-SAVE_TEMPS=false
-while (( "$#" )); do
-	case "$1" in
-	-s|--save-temps)
-		SAVE_TEMPS=true
-		shift
-		;;
-	*) # preserve positional arguments
-		PARAMS="$PARAMS $1"
-		shift
-		;;
-	esac
-done
-# set positional arguments in their proper place
-eval set -- "$PARAMS"
-
-if $SAVE_TEMPS; then
-	tmpfile=$(mktemp --tmpdir=$(pwd))
-	echo "Saving to $tmpfile"
-else
-	tmpfile=$(mktemp)
-	function finish {
-		rm -rf "$tmpfile"
-	}
-	trap finish EXIT
-fi
-# split the wanted and unwanted output
-awk "BEGIN{RS = \"[\n\r]\"}/^Processor|^PH:[0-9]+ - [0-9]+ [0-9]+/ {print \$0 > \"$tmpfile\"; next}{print \$0; fflush()}"
-
-# pass the data to the python scirpt
-DIR=$( dirname "${BASH_SOURCE[0]}")
-cat $tmpfile | $DIR/view_halts.py ${PARAMS}
Index: tools/perf/process_stat_array.py
===================================================================
--- tools/perf/process_stat_array.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,165 +1,0 @@
-#!/usr/bin/python3
-
-import argparse, json, math, os, sys, re
-from PIL import Image
-import numpy as np
-
-def dir_path(string):
-    if os.path.isdir(string):
-        return string
-    else:
-        raise NotADirectoryError(string)
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--path', type=dir_path, default=".cfadata", help= 'paste path to biog.txt file')
-parser.add_argument('--out', type=argparse.FileType('w'), default=sys.stdout)
-
-try :
-	args = parser.parse_args()
-except NotADirectoryError:
-	print("Must use option --path to existing directory or have .cfadata in current directory", file=sys.stderr)
-	sys.exit(1)
-
-root, _, filenames = next(os.walk(args.path))
-
-merged = []
-counters = {}
-
-max_cpu = 0
-min_cpu = 1000000
-max_tsc = 0
-min_tsc = 18446744073709551615
-
-#open the files
-for filename in filenames:
-	try:
-		m = re.search('[A-z]+0x([0-9a-f]+)\.data', filename)
-		me = m.group(1)
-		counters[me] = 0
-		with open(os.path.join(root, filename), 'r') as file:
-			for line in file:
-				raw = [int(x.strip()) for x in line.split(',')]
-
-				## from/to
-				high = (raw[1] >> 32)
-				low  = (raw[1] & 0xffffffff)
-				data = [me, raw[0], high, low]
-				max_cpu = max(max_cpu, high, low)
-				min_cpu = min(min_cpu, high, low)
-
-				## number
-				# high = (raw[1] >> 8)
-				# low  = (raw[1] & 0xff)
-				# data = [me, raw[0], high, low]
-				# max_cpu = max(max_cpu, low)
-				# min_cpu = min(min_cpu, low)
-
-
-				max_tsc = max(max_tsc, raw[0])
-				min_tsc = min(min_tsc, raw[0])
-				merged.append(data)
-
-	except Exception as e:
-		print(e)
-		pass
-
-
-print({"max-cpu": max_cpu, "min-cpu": min_cpu, "max-tsc": max_tsc, "min-tsc": min_tsc})
-
-# Sort by timestamp (the second element)
-# take second element for sort
-def takeSecond(elem):
-    return elem[1]
-
-merged.sort(key=takeSecond)
-
-json.dump({"values":merged, "max-cpu": max_cpu, "min-cpu": min_cpu, "max-tsc": max_tsc, "min-tsc": min_tsc}, args.out)
-
-# vmin = merged[ 0][1]
-# vmax = float(merged[-1][1] - vmin) / 2500000000.0
-# # print(vmax)
-
-# bins = []
-# for _ in range(0, int(math.ceil(vmax * 10))):
-# 	bins.append([0] * (32 * 32))
-
-# # print(len(bins))
-# bins = np.array(bins)
-
-# rejected = 0
-# highest  = 0
-
-# for x in merged:
-# 	b = int(float(x[1] - vmin) / 250000000.0)
-# 	from_ = x[2]
-# 	if from_ < 0 or from_ > 32:
-# 		rejected += 1
-# 		continue;
-# 	to_   = x[3]
-# 	if to_ < 0 or to_ > 32:
-# 		rejected += 1
-# 		continue;
-# 	idx = (to_ * 32) + from_
-# 	bins[b][idx] = bins[b][idx] + 1
-# 	highest = max(highest, bins[b][idx])
-
-# bins = np.array(map(lambda x: np.int8(x * 255.0 / float(highest)), bins))
-
-# print([highest, rejected])
-# print(bins.shape)
-
-# im = Image.fromarray(bins)
-# im.save('test.png')
-
-# vmax = merged[-1][1]
-
-# diff = float(vmax - vmin) / 2500000000.0
-# print([vmin, vmax])
-# print([vmax - vmin, diff])
-
-# print(len(merged))
-
-# for b in bins:
-# 	print(b)
-
-# single = []
-# curr = 0
-
-# # merge the data
-# # for (me, time, value) in merged:
-# for (me, value) in merged:
-# 	# check now much this changes
-# 	old = counters[me]
-# 	change = value - old
-# 	counters[me] = value
-
-# 	# add change to the current
-# 	curr = curr + change
-# 	single.append( value )
-
-# 	pass
-
-# print(single)
-
-# single = sorted(single)[:len(single)-100]
-# ms = max(single)
-# single = [float(x) / 2500.0 for x in single]
-
-#print
-# for t, v in single:
-# 	print([t, v])
-# print(len(single))
-# print(max(single))
-# print(min(single))
-
-# bins = [0, 5.37751600e+04, 1.06903320e+05, 1.60031480e+05, 2.13159640e+05, 2.66287800e+05, 3.19415960e+05, 3.72544120e+05, 4.25672280e+05, 4.78800440e+05, 5.31928600e+05, 5.85056760e+05, 6.38184920e+05, 6.91313080e+05, 7.44441240e+05, 7.97569400e+05, 8.50697560e+05, 9.03825720e+05, 9.56953880e+05, 1.01008204e+06, 1.06321020e+06, 1.11633836e+06, 1.16946652e+06, 1.22259468e+06, 1.27572284e+06, 1.32885100e+06, 1.38197916e+06, 1.43510732e+06, 1.48823548e+06, 1.54136364e+06, 1.59449180e+06, 1.64761996e+06, 1.70074812e+06, 1.75387628e+06, 1.80700444e+06, 1.86013260e+06, 1.91326076e+06, 1.96638892e+06, 2.01951708e+06, 2.07264524e+06, 2.12577340e+06, 2.17890156e+06, 2.23202972e+06, 2.28515788e+06, 2.33828604e+06, 2.39141420e+06, 2.44454236e+06, 2.49767052e+06, 2.55079868e+06, 2.60392684e+06, 3.0e+06]
-# # bins = [float(x) / 2500.0 for x in bins]
-# # print([round(b, 2) for b in bins])
-
-# import numpy
-# # hist1, _ = numpy.histogram(single, density=True, bins=50)
-# hist2, _ = numpy.histogram(single, density=True, bins=bins)
-# # print(hist1)
-# print([1000.0 * h for h in hist2])
-# # for v in single:
-# # 	print([v])
Index: tools/perf/sample.py
===================================================================
--- tools/perf/sample.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,29 +1,0 @@
-#!/usr/bin/python3
-
-import argparse, json, random, sys
-
-parser = argparse.ArgumentParser()
-parser.add_argument('--infile', type=argparse.FileType('r'), default=sys.stdin)
-parser.add_argument('--outfile', type=argparse.FileType('w'), default=sys.stdout)
-
-args = parser.parse_args()
-
-data = json.load(args.infile)
-
-
-
-print(len(data['values']))
-print(int(len(data['values']) / 1000))
-
-sample = random.sample(data['values'], int(len(data['values']) / 1000))
-print(len(sample))
-
-# Sort by timestamp (the second element)
-# take second element for sort
-def takeSecond(elem):
-    return elem[1]
-
-sample.sort(key=takeSecond)
-
-data['values'] = sample
-json.dump(data, args.outfile)
Index: tools/perf/view_halts.py
===================================================================
--- tools/perf/view_halts.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,129 +1,0 @@
-#!/usr/bin/python3
-import numpy as np
-import re
-import sys, getopt
-import fileinput
-import argparse
-
-#--------------------------------------------------------------------------------
-# Parse arguments
-parser = argparse.ArgumentParser(description='Produce a graph representing CPU activity over time.')
-parser.add_argument('-i', '--input' , dest='infile' , type=argparse.FileType('r'), default=sys.stdin, help='input file containing processor activity; if none specified then will use stdin.')
-parser.add_argument('-o', '--output', dest='outfile', type=argparse.FileType('w'), default=None, help='output file with any image format extension such as .png or .svg; if none specified then plt.show() will be used')
-args = parser.parse_args()
-
-print("----- Processing Halts Output -----")
-if not args.outfile:
-	print("ERROR : no output file specified and interactive mode not supported", file=sys.stderr)
-	sys.exit(1)
-
-#--------------------------------------------------------------------------------
-# Process data
-class Proc:
-	def __init__(self, id, name, address):
-		self.name    = name
-		self.address = address
-		self.id      = id
-
-class Point:
-	def __init__(self, time, on):
-		self.time = time
-		self.on = on
-
-processors = {}
-data = {}
-
-#--------------------------------------------------------------------------------
-# Parse data
-for line in args.infile:
-	match = re.match("Processor : ([0-9]+) - (.*) \((0x[0-9a-f]+)\)", line)
-	if match :
-		id = int(match.group(1))
-		processors[id] = Proc(id, match.group(2), match.group(3))
-		continue
-
-	match = re.match("PH:([0-9]+) - ([0-9]+) ([0-9]+)", line)
-	if match :
-		id = int(match.group(1))
-		if not id in data:
-			data[id] = []
-		data[id].append(Point(int(match.group(2)), int(match.group(3))))
-		continue
-
-	print("WARNING : line '%s' filterred not matched" % line, file=sys.stderr)
-
-#--------------------------------------------------------------------------------
-# Check data
-if not data:
-	print("ERROR : no data extracted from '%s'" % args.infile, file=sys.stderr)
-
-for d in data:
-	if not d in processors:
-		print("WARNING : unkown processor '%s'" % d, file=sys.stderr)
-
-	prevT = data[d][0].time
-	prevO = data[d][0].on
-	for p in data[d][1:]:
-		if prevT > p.time:
-			print("WARNING : Time is inconsistant for Proc '%s'" % d, file=sys.stderr)
-
-		if prevO == p.on:
-			print("WARNING : State is inconsistant for Proc '%s' at %s-%s" % (d, prevT, p.time), file=sys.stderr)
-
-		prevT = p.time
-		prevO = p.on
-
-
-#--------------------------------------------------------------------------------
-# Convert data to series
-offset = min(data)
-series = dict()
-for d in data:
-	series[d] = ([], [], [])
-	for p in data[d]:
-		series[d][0].append( p.time )
-		series[d][1].append(p.on + d - offset)
-		series[d][2].append(d - offset)
-
-#--------------------------------------------------------------------------------
-# setup matplotlib
-import matplotlib as mpl
-mpl.use('Agg')
-import matplotlib.pyplot as plt
-import matplotlib.ticker as ticker
-plt.style.use('dark_background')
-
-#--------------------------------------------------------------------------------
-# setup plot
-dots_per_inch = 200
-height_inches = 5
-width_inches = 12
-fig = plt.figure(figsize=(width_inches, height_inches), dpi=dots_per_inch)
-print('number of series={}'.format(len(series)))
-for s, xy in series.items():
-	if s in processors:
-		name = '"{}" ({})'.format(processors[s].name, processors[s].address)
-	else:
-		name = s
-	print( '    plotting series {} with {} points'.format(name, len(xy[0])) )
-	plt.fill_between(xy[0], xy[1], xy[2], step="post", alpha=0.4)
-	plt.step(xy[0], xy[1], where='post')
-
-#--------------------------------------------------------------------------------
-# y axis major, minor
-ax = plt.gca()
-ax.grid(which='major', axis='y', linestyle='-', color='lightgray')
-ax.yaxis.set_minor_locator(ticker.AutoMinorLocator())
-ax.grid(which='minor', axis='y', linestyle='dotted', color='gray')
-
-#--------------------------------------------------------------------------------
-# x axis major, minor
-ax.grid(which='major', axis='x', linestyle='-', color='lightgray')
-ax.xaxis.set_minor_locator(ticker.AutoMinorLocator())
-ax.grid(which='minor', axis='x', linestyle='dotted', color='gray')
-
-#--------------------------------------------------------------------------------
-# do the plot
-plt.tight_layout()
-print("saving figure image %s\n" % args.outfile.name)
-plt.savefig(args.outfile.name)
Index: tools/prettyprinter/Makefile.am
===================================================================
--- tools/prettyprinter/Makefile.am	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,39 +1,0 @@
-######################## -*- Mode: Makefile-Automake -*- ######################
-##
-## Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-##
-## The contents of this file are covered under the licence agreement in the
-## file "LICENCE" distributed with Cforall.
-##
-## Makefile.am --
-##
-## Author           : Peter A. Buhr
-## Created On       : Wed Jun 28 12:07:10 2017
-## Last Modified By : Peter A. Buhr
-## Last Modified On : Mon Jul 22 11:33:01 2024
-## Update Count     : 25
-###############################################################################
-
-AUTOMAKE_OPTIONS = foreign    # do not require all the GNU file names
-ACLOCAL_AMFLAGS  = -I automake
-
-BUILT_SOURCES = parser.hh
-
-AM_YFLAGS = -d -t -v -Wno-yacc
-
-SRC = ParserTypes.h \
-      filter.cc \
-      filter.h \
-      lex.ll \
-      main.cc \
-      parser.yy \
-      token.cc \
-      token.h
-
-tools_prettyprinter_PROGRAMS = pretty
-tools_prettyprinterdir = ../
-pretty_SOURCES = ${SRC}
-pretty_LDADD = ${LEXLIB} -ldl			# yywrap
-pretty_CXXFLAGS = -Wno-deprecated -Wall -Wextra -Werror=return-type -DYY_NO_INPUT -O2 -g -std=c++14
-
-MOSTLYCLEANFILES = parser.output
Index: tools/prettyprinter/ParserTypes.h
===================================================================
--- tools/prettyprinter/ParserTypes.h	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,31 +1,0 @@
-//                              -*- Mode: C++ -*- 
-// 
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// parse.h - Various declarations that are needed so that the generated parser
-//           and lexer compile with C++, and to share information between the
-//           parser, lexer, and driver program
-// 
-// Author           : Richard C. Bilson and Rodolfo G. Esteves
-// Created On       : Sun Dec 16 15:00:49 2001
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 23:05:34 2021
-// Update Count     : 176
-// 
-
-#pragma once
-
-extern "C" int yylex();
-
-#include <string>
-#include <list>
-#include "token.h"
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/filter.cc
===================================================================
--- tools/prettyprinter/filter.cc	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,243 +1,0 @@
-// 
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// filter.cc -- 
-// 
-// Author           : Peter A. Buhr
-// Created On       : Tue Apr  9 22:33:44 2002
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 29 08:56:46 2017
-// Update Count     : 73
-// 
-
-#include <iostream>
-#include <string>
-#include <list>
-using namespace std;
-#include "filter.h"
-#include "parser.hh" 
-
-
-void (* filter)( Token * tree ) = 0;
-
-
-void freeTree( Token * tree ) {							// postfix tree traversal
-	if ( tree == NULL ) return;
-	if ( tree->down != NULL ) freeTree( tree->down );
-	if ( tree->left != NULL ) freeTree( tree->left );
-	//cerr << "free token: \"" << tree->getText() << "\" : " << tree->getKind() << endl;
-	delete tree;
-} // freeTree
-
-
-void Identity( Token * tree ) {							// prefix tree traversal
-	if ( tree == NULL ) return;
-	// print only the terminals
-	if ( tree->isTerminal() ) cout << tree->getWS() << tree->getText();
-	if ( tree->down != NULL ) Identity( tree->down );
-	if ( tree->left != NULL ) Identity( tree->left );
-} // Identity
-
-
-static void Parse_Tree1( Token * tree, int indent ) {	// prefix tree traversal
-	cout << string( indent, ' ' );
-	if ( tree->isTerminal() ) {							// terminals
-		cout << "\"" << tree->getText() << "\"";
-	} else {											// non-terminals
-		cout << tree->getText();
-	} // if
-	cout << " : " << tree->getKind()
-		//<< " \"" << tree->getWS() << " \""
-		 << endl;
-	if ( tree->down != NULL ) Parse_Tree1( tree->down, indent + 2 );
-	if ( tree->left != NULL ) Parse_Tree1( tree->left, indent );
-} // Parse_Tree1
-
-void Parse_Tree( Token * tree ) {
-	if ( tree == NULL ) return;
-	Parse_Tree1( tree, 0 );
-} // Parse_Tree
-
-
-void Nocode( Token * tree ) {							// prefix tree traversal
-	static bool declprt = true;
-	if ( tree == NULL ) return;
-
-	if ( tree->isTerminal() ) {							// terminals
-		cout << tree->getWS() << tree->getText();
-	} else {											// non-terminals
-		switch ( tree->getKind() ) {
-		  case _RHS: {
-			  int first = 0;							// first RHS after ':' or '|' treated specially
-			  int push = 0, pop = 0;
-			  for ( Token * i = tree->down; i != 0; i = i->left ) {
-				  switch ( i->getKind() ) {
-					case _ACTION:
-					  cout << string( (push * 4 + pop * 3) / 7, '\t' );
-					  push = pop = 0;
-					  cout << i->down->getComment();	// ignore code but print its comment, if any
-					  break;
-					case _PREC:
-					  Nocode( i->down );				// print verbatim
-					  break;
-					case '|':							// start of alternative and special case
-					  first = 0;
-					case ';':							// print with whitespace
-					  cout << string( (push * 4 + pop * 3) / 7, '\t' );
-					  push = pop = 0;
-					  cout << i->getWS() << i->getText();
-					  break;
-					default:
-					  if ( i->getKind() == IDENTIFIER ) {
-						  if ( i->getText() == "push" ) {
-							  push += 1;
-							  if ( first == 0 ) {		   // first RHS after ':' or '|' ?
-								  cout << i->getComment(); // ignore rhs but print its comment, if any
-							  } // if 
-							  break;
-						  } else if ( i->getText() == "pop" ) {
-							  pop += 1;
-							  if ( first == 0 ) {		   // first RHS after ':' or '|' ?
-								  cout << i->getComment(); // ignore rhs but print its comment, if any
-							  } // if 
-							  break;
-						  } // if
-					  } // if
-					  // If there is a comment or this is the first RHS after ':' or '|', then include the whitespace
-					  // before the token. Otherwise, fold the token onto the same line separated with a blank.
-					  string t1( i->getText() );
-					  if ( i->isComment() || first == 0 ) {
-						  first = t1.length();
-						  cout << i->getWS() << t1;
-					  } else {
-						  if ( first + t1.length() <= 100 ) { // check for long lines during folding
-							  first += t1.length();
-							  cout << " " << t1;
-						  } else {
-							  first = t1.length();
-							  cout << endl << "\t\t\t\t" << t1;
-						  } // if
-					  } // if
-				  } // switch
-			  } // for
-			  break;
-		  }
-		  case _LITERALBLOCK:							// ignore code but print its comment, if any
-			cout << tree->down->getComment();
-			break;
-		  case _DECLARATION: {							// ignore certain declarations
-			  int kind = tree->down->getKind();			// get kind of declaration
-			  if ( kind != UNION && kind != TYPE ) {
-				  declprt = true;
-				  Nocode( tree->down );					// print verbatim
-			  } else if ( declprt ) {					// ignore declaration but print its comment, if any
-				  declprt = false;
-				  cout << tree->down->getComment();
-			  } // if
-			  break;
-		  }
-		  case _USERSECTION_OPT:						// ignore but add newline at the end
-			cout << endl;
-			break;
-		  default:
-			if ( tree->down != NULL ) Nocode( tree->down );
-		} // switch
-	} // if
-	if ( tree->left != NULL ) Nocode( tree->left );
-} // Nocode
-
-
-void LaTeX( Token * tree ) {							// prefix tree traversal
-	if ( tree == NULL ) return;
-
-	if ( tree->isTerminal() ) {							// terminals
-		cout << tree->getWS() << tree->getText();
-		if ( tree->getKind() == IDENTIFIER ) {
-			string id( tree->getText() );
-			cout << "\\(\\index{" << id << "@\\protect\\LGbegin\\protect\\lgrinde\\)" << id << "\\(\\protect\\endlgrinde\\protect\\LGend{}}\\)";
-		} // if
-	} else {											// non-terminals
-		switch ( tree->getKind() ) {
-		  case _RHS: {
-			  int first = 0;							// first RHS after ':' or '|' treated specially
-			  int push = 0, pop = 0;
-			  for ( Token * i = tree->down; i != 0; i = i->left ) {
-				  switch ( i->getKind() ) {
-					case _ACTION:
-					  cout << i->down->getComment();	// ignore code but print its comment, if any
-					  break;
-					case _PREC:
-					  LaTeX( i->down );					// print verbatim
-					  break;
-					case '|':							// start of alternative and special case
-					  first = 0;
-					  push = pop = 0;
-					case ';':							// print with whitespace
-					  cout << i->getWS() << i->getText();
-					  break;
-					default:
-					  if ( i->getKind() == IDENTIFIER ) {
-						  if ( i->getText() == "push" ) {
-							  push += 1;
-							  break;
-						  } else if ( i->getText() == "pop" ) {
-							  pop += 1;
-							  break;
-						  } // if
-					  } // if
-					  // If there is a comment or this is the first RHS after ':' or '|', then include the whitespace
-					  // before the token. Otherwise, fold the token onto the same line separated with a blank.
-					  string t1( i->getText() );
-					  if ( i->isComment() || first == 0 ) {
-						  first = t1.length();
-						  cout << i->getWS() << t1;
-						  if ( i->getKind() == IDENTIFIER ) {
-							  string id( tree->getText() );
-							  cout << "\\(\\index{" << id << "@\"\\verb=" << id << "=}\\)";
-						  } // if
-					  } else {
-						  if ( first + t1.length() <= 100 ) { // check for long lines during folding
-							  first += t1.length();
-							  cout << " " << t1;
-						  } else {
-							  first = t1.length();
-							  cout << endl << "\t\t\t\t" << t1;
-						  } // if
-					  } // if
-				  } // switch
-			  } // for
-			  break;
-		  }
-		  case _LITERALBLOCK:							// ignore code but print its comment, if any
-			cout << tree->down->getComment();
-			break;
-		  case _DECLARATION: {							// ignore certain declarations
-			  int kind = tree->down->getKind();			// get kind of declaration
-			  if ( kind != UNION && kind != TYPE ) {
-				  LaTeX( tree->down );					// print verbatim
-			  } // if
-			  break;
-		  }
-		  case _USERSECTION_OPT:						// ignore but add newline at the end
-			cout << endl;
-			break;
-		  default:
-			if ( tree->down != NULL ) LaTeX( tree->down );
-		} // switch
-	} // if
-	if ( tree->left != NULL ) LaTeX( tree->left );
-} // LaTeX
-
-
-void HTML( Token * tree ) {								// prefix tree traversal
-	cerr << "ERROR: html style not implemented" << endl;
-} // HTML
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/filter.h
===================================================================
--- tools/prettyprinter/filter.h	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,33 +1,0 @@
-// 
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// filter.h -- 
-// 
-// Author           : Peter A. Buhr
-// Created On       : Tue Apr  9 22:31:18 2002
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 10:12:55 2017
-// Update Count     : 11
-// 
-
-#pragma once
-
-#include "ParserTypes.h"
-
-extern void (* filter)( Token * tree );					// pointer to filter for parse tree
-void freeTree( Token * tree );							// free storage for parse tree
-
-void Identity( Token * tree );							// parse-tree filters
-void Parse_Tree( Token * tree );
-void Nocode( Token * tree );
-void LaTeX( Token * tree );
-void HTML( Token * tree );
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/lex.ll
===================================================================
--- tools/prettyprinter/lex.ll	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,179 +1,0 @@
-/* 
- * Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
- *
- * The contents of this file are covered under the licence agreement in the
- * file "LICENCE" distributed with Cforall.
- * 
- * lex.ll --
- * 
- * Author           : Peter A. Buhr
- * Created On       : Sat Dec 15 11:45:59 2001
- * Last Modified By : Peter A. Buhr
- * Last Modified On : Thu May 31 08:49:58 2018
- * Update Count     : 274
- */
-
-%option stack
-%option yylineno
-%option nounput
-
-%{
-#include <list>
-#include <string>
-#include <iostream>
-using namespace std;
-#include "ParserTypes.h" 
-#include "parser.hh" 
-
-#define RETURN_TOKEN( kind ) yylval.tokenp = new Token( yytext, ws_list, kind ); return kind;
-
-list<string> ws_list;
-string comment_str;
-string code_str;
-
-// Stop warning due to incorrectly generated flex code.
-#pragma GCC diagnostic ignored "-Wsign-compare"
-%}
-
-integer [0-9]+
-identifier [a-zA-Z_$][0-9a-zA-Z_$]*
-
-simple_escape ['"?\\]
-escape_sequence [\\]{simple_escape}
-c_char [^'\\\n]|{escape_sequence}
-s_char [^"\\\n]|{escape_sequence}
-
-%x C_COMMENT STR C_CODE
-
-/* ---------------------------- Token Section ---------------------------- */
-%%
-<INITIAL,C_CODE>"/*" {									// C style comments */
-#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-		cerr << "\"/*\" : " << yytext << endl;
-#endif
-		if ( YYSTATE == C_CODE ) code_str += yytext;
-		else comment_str += yytext;
-		yy_push_state(C_COMMENT);
-}
-<C_COMMENT>(.|"\n")	{									// C style comments
-#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-		cerr << "<C_COMMENT>(.|\\n) : " << yytext << endl;
-#endif
-		if ( yy_top_state() == C_CODE ) code_str += yytext;
-		else comment_str += yytext;
-}
-<C_COMMENT>"*/"	{										// C style comments
-#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-	cerr << "<C_COMMENT>\"*/\" : " << yytext << endl;
-#endif
-	if ( yy_top_state() == C_CODE ) code_str += yytext;
-	else {
-		comment_str += yytext;
-		//cerr << "C COMMENT : " << endl << comment_str << endl;
-		ws_list.push_back( comment_str );
-		comment_str = "";
-	}
-	yy_pop_state();
-}
-
-<INITIAL,C_CODE>"//"[^\n]* {							// C++ style comments
-#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-	cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
-#endif
-	if ( YYSTATE == C_CODE ) code_str += yytext;
-	else {
-		comment_str += yytext;
-		//cerr << "C++ COMMENT : " << endl << comment_str << endl;
-		ws_list.push_back( comment_str );
-		comment_str = "";
-	}
-}
-
-";"				{ RETURN_TOKEN( ';' ) }
-":"				{ RETURN_TOKEN( ':' ) }
-"|"				{ RETURN_TOKEN( '|' ) }
-","				{ RETURN_TOKEN( ',' ) }
-"<"				{ RETURN_TOKEN( '<' ) }
-">"				{ RETURN_TOKEN( '>' ) }
-
-[[:space:]]+ {											// [ \t\n]+
-	ws_list.push_back( yytext );
-	//cerr << "WS : " << "\"" << yytext << "\"" << endl;
-}
-
-<INITIAL>"{"	{ RETURN_TOKEN( '{' ) }
-<INITIAL>"}"	{ RETURN_TOKEN( '}' ) }
-<C_CODE>"{"	{
-#if defined(DEBUG_ALL) | defined(DEBUG_C)
-	cerr << "<C_CODE>. : " << yytext << endl;
-#endif
-	code_str += yytext;
-	RETURN_TOKEN( '{' )
-}
-<C_CODE>"}"	{
-#if defined(DEBUG_ALL) | defined(DEBUG_C)
-	cerr << "<C_CODE>. : " << yytext << endl;
-#endif
-	code_str += yytext;
-	RETURN_TOKEN( '}' )
-}
-
-"%%"			{ RETURN_TOKEN( MARK ) }
-"%{"			{ RETURN_TOKEN( LCURL ) }
-<C_CODE>"%}"	{ RETURN_TOKEN( RCURL ) }
-
-^"%define"[^\n]*"\n" { RETURN_TOKEN( DEFINE ) }
-^"%expect"		{ RETURN_TOKEN( EXPECT ) }
-^"%left"		{ RETURN_TOKEN( LEFT ) }
-^"%locations"	{ RETURN_TOKEN( LOCATIONS ) }
-^"%nonassoc"	{ RETURN_TOKEN( NONASSOC ) }
-^"%precedence"	{ RETURN_TOKEN( PRECEDENCE ) }
-^"%pure_parser" { RETURN_TOKEN( PURE_PARSER ) }
-^"%right"		{ RETURN_TOKEN( RIGHT ) }
-^"%semantic_parser"	{ RETURN_TOKEN( SEMANTIC_PARSER ) }
-^"%start"		{ RETURN_TOKEN( START ) }
-^"%thong" 		{ RETURN_TOKEN( THONG ) }
-^"%token"		{ RETURN_TOKEN( TOKEN ) }
-^"%type"		{ RETURN_TOKEN( TYPE ) }
-^"%union"		{ RETURN_TOKEN( UNION ) }
-
-"%prec" 		{ RETURN_TOKEN( PREC ) }
-
-{integer}		{ RETURN_TOKEN( INTEGER ); }
-[']{c_char}[']	{ RETURN_TOKEN( CHARACTER ); }
-{identifier}	{ RETURN_TOKEN( IDENTIFIER ); }
-
-<C_CODE>["]{s_char}*["]	{								// hide braces "{}" in strings
-#if defined(DEBUG_ALL) | defined(DEBUG_C)
-	cerr << "<C_CODE>. : " << yytext << endl;
-#endif
-	code_str += yytext;
-}
-
-<C_CODE>(.|\n) {										// must be last rule of C_CODE
-#if defined(DEBUG_ALL) | defined(DEBUG_C)
-	cerr << "<C_CODE>. : " << yytext << endl;
-#endif
-	code_str += yytext;
-}
-
-				/* unknown characters */
-.				{ printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
-%%
-void lexC(void) {
-	BEGIN(C_CODE);
-}
-
-string lexYacc(void) {
-	BEGIN(INITIAL);
-	//cerr << "CODE: " << endl << code_str << endl;
-	string temp( code_str );
-	code_str = "";
-	return temp;
-}
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/main.cc
===================================================================
--- tools/prettyprinter/main.cc	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,119 +1,0 @@
-// 
-// Cforall Version 1.0.0 Copyright (C) 2017 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// main.cc -- 
-// 
-// Author           : Peter A. Buhr
-// Created On       : Wed Jun 28 22:57:26 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 29 13:09:32 2017
-// Update Count     : 58
-// 
-
-#include <iostream>
-#include <fstream>
-#include <string>
-using namespace std;
-#include <unistd.h>										// close
-#include <getopt.h>										// getopt
-#include "filter.h"
-
-extern FILE * yyin;
-extern int yydebug;
-extern int yyparse( void );
-
-bool parse_cmdline( int argc, char * argv[] ) {
-	enum { Html, Identity, Latex, Nocode, ParseTree, };
-
-	static struct option long_opts[] = {
-		{ "html", no_argument, nullptr, Html },
-		{ "identity", no_argument, nullptr, Identity },
-		{ "latex", no_argument, nullptr, Latex },
-		{ "nocode", no_argument, nullptr, Nocode },
-		{ "parse-tree", no_argument, nullptr, ParseTree },
-		{ nullptr, 0, nullptr, 0 }
-	}; // long_opts
-	int long_index;
-
-	opterr = 0;											// (global) prevent getopt from printing error messages
-
-	int c;
-	while ( (c = getopt_long( argc, argv, "hilnp", long_opts, &long_index )) != -1 ) {
-		switch ( c ) {
-		  case Html:
-		  case 'h':
-			filter = HTML;
-			break;
-		  case Identity:
-		  case 'i':
-			filter = ::Identity;
-			break;
-		  case Latex:
-		  case 'l':
-			filter = LaTeX;
-			break;
-		  case Nocode:
-		  case 'n':
-			filter = ::Nocode;
-			break;
-		  case ParseTree:
-		  case 'p':
-			filter = Parse_Tree;
-		  case '?':
-			if ( optopt ) {								// short option ?
-				cerr << "Unknown option: -" << (char)optopt << endl;
-			} else {									// long option
-				cerr << "Unknown option: " << argv[optind - 1] << endl;
-			} // if
-			return false;
-		  default:
-			abort();
-		} // switch
-	} // while
-
-	if ( optind != argc ) {								// input files ?
-		if ( optind == argc - 1 ) {						// any commands after the flags ? => input file name
-			yyin = fopen( argv[ optind ], "r" );
-			if ( yyin == nullptr ) {
-				cerr << "Open failure for input file \"" << argv[ optind ] << "\"" << endl;
-				return false;
-			} // if
-		} else {
-			cerr << "Too many input files " << argv[ optind + 1 ] << endl;
-			return false;
-		} // if
-	} // if
-	return true;
-} // parse_cmdline
-
-int main( int argc, char *argv[] ) {
-	yyin = stdin;										// defaults
-	filter = Nocode;
-
-	if ( ! parse_cmdline( argc, argv ) ) {
-		cerr << "Usage: " << argv[0]
-			 << " ["
-			 << "-h/--html | "
-			 << "-i/--identity | "
-			 << "-l/--latex | "
-			 << "-n/--nocode | "
-			 << "-p/--parse-tree"
-			 << "] [input-file]"
-			 << endl;
-		exit( EXIT_FAILURE );							// TERMINATE
-	} // if
-
-	//yydebug = 1;
-	yyparse();
-
-	if ( yyin != stdin ) fclose( yyin );				// close file, do not delete cin!
-} // main
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/parser.yy
===================================================================
--- tools/prettyprinter/parser.yy	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,519 +1,0 @@
-//  
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-//  
-// parser.yy --
-//  
-// Author           : Rodolfo G. Esteves
-// Created On       : Sat Dec 15 13:44:21 2001
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 22:50:03 2021
-// Update Count     : 1053
-// 
-
-%{
-#define YYDEBUG_LEXER_TEXT( yylval )					// lexer loads this up each time
-#define YYDEBUG 1										// get the pretty debugging code to compile
-#define YYERROR_VERBOSE									// more information in syntax errors
-
-#include <iostream>
-using namespace std;
-#include "ParserTypes.h"
-#include "filter.h"
-
-extern list<string> ws_list;							// lex variable containing accumulated whitespace
-void lexC( void );
-string lexYacc( void );
-
-void yyerror( string s ) {
-	extern int yylineno;
-
-	cerr << "Error in line: " << yylineno << ": " << s << endl;
-	return;
-}
-
-Token *declstart;
-Token *rulestart;
-Token *nameliststart;
-%}
-
-%union {
-	Token *tokenp;
-}
-
-%token<tokenp>	','
-%token<tokenp>	'<'
-%token<tokenp>	'>'
-%token<tokenp>	'{'
-%token<tokenp>	'}'
-%token<tokenp>	':'
-%token<tokenp>	';'
-%token<tokenp>	'|'
-
-%token<tokenp>	MARK									// %%
-%token<tokenp>	LCURL									// %{
-%token<tokenp>	RCURL									// %}
-
-%token<tokenp>	INTEGER									// integer constant
-%token<tokenp>	CHARACTER								// character constant
-%token<tokenp>	IDENTIFIER								// identifier
-%token<tokenp>	CODE									// C code
-
-%token<tokenp>	DEFINE									// %define
-%token<tokenp>	EXPECT									// %expect
-%token<tokenp>	LEFT									// %left
-%token<tokenp>	LOCATIONS								// %locations
-%token<tokenp>	NONASSOC								// %nonassoc
-%token<tokenp>	PRECEDENCE								// %precedence
-%token<tokenp>	PURE_PARSER								// %pure_parser
-%token<tokenp>	RIGHT									// %right
-%token<tokenp>	SEMANTIC_PARSER							// %semantic_parser
-%token<tokenp>	START									// %start
-%token<tokenp>	THONG									// %thong
-%token<tokenp>	TOKEN									// %token
-%token<tokenp>	TYPE									// %type
-%token<tokenp>	UNION									// %union
-
-%token<tokenp>	PREC									// %prec
-
-%token			END_TERMINALS							// ALL TERMINAL TOKEN NAMES MUST APPEAR BEFORE THIS
-
-%type<tokenp>	sections
-%token			_SECTIONS
-%type<tokenp>	mark
-%type<tokenp>	defsection_opt
-%token			_DEFSECTION_OPT
-%type<tokenp>	declarations
-%type<tokenp>	literalblock
-%token			_LITERALBLOCK
-%type<tokenp>	declaration
-%token			_DECLARATION
-%type<tokenp>	union
-%type<tokenp>	rword
-%type<tokenp>	tag_opt
-%token			_TAG_OPT
-%type<tokenp>	namenolist
-%token			_NAMENOLIST
-%type<tokenp>	nameno
-%token			_NAMENO
-%type<tokenp>	namelist
-%token			_NAMELIST
-%type<tokenp>	name
-%type<tokenp>	rulesection
-%token			_RULESECTION
-%type<tokenp>	rules
-%token			_RULE
-%type<tokenp>	lhs
-%token			_LHS
-%type<tokenp>	rhs
-%token			_RHS
-%type<tokenp>	prod
-%type<tokenp>	prec
-%token			_PREC
-%type<tokenp>	action
-%token			_ACTION
-%type<tokenp>	usersection_opt
-%token			_USERSECTION_OPT
-%type<tokenp>	ccode_opt
-%type<tokenp>	blocks
-
-%start grammar
-
-%%
-grammar :
-	sections
-		{
-			filter( $1 );								// filter parse tree
-			freeTree( $1 );								// free parse-tree storage (optional: used with purify)
-		}
-	;
-
-sections :
-	defsection_opt mark rulesection usersection_opt
-		{
-			$$ = new Token( "sections", _SECTIONS );
-			$1->left = $2;
-			$2->left = $3;
-			$3->left = $4;
-			$$->down = $1;
-		}
-	;
-
-mark :
-	MARK
-	| error												// missing %%
-		{
-			cerr << "no input grammar, missing %% mark" << endl;
-			exit( -1 );
-		}
-	;
-
-defsection_opt :
-	// empty
-		{
-			//cerr << "defsection_opt1: " << endl;
-			$$ = new Token( "declaration_opt", _DEFSECTION_OPT );
-		}
-	| declarations
-		{
-			//cerr << "defsection_opt2: " << $1->text << "(" << $1 << ")" << endl;
-			$$ = new Token( "declaration_opt", _DEFSECTION_OPT );
-			$$->down = declstart;
-		}
-	;
-
-declarations :
-	literalblock
-		{
-			//cerr << "declarations1: " << $1->text << "(" << $1 << ")" << endl;
-			$$ = declstart = $1;
-		}
-	| declaration
-		{
-			//cerr << "declarations2: " << $1->text << "(" << $1 << ")" << endl;
-			$$ = declstart = new Token( "declaration", _DECLARATION );
-			$$->down = $1;
-		}
-	| declarations literalblock
-		{
-			//cerr << "declarations3: "<< $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			$1->left = $2;
-			$$ = $2;
-		}
-	| declarations declaration
-		{
-			//cerr << "declarations4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			$$ = new Token( "declaration", _DECLARATION );
-			$1->left = $$;
-			$$->down = $2;
-		}
-	;
-
-literalblock :
-	LCURL
-		{ lexC(); }
-	  ccode_opt
-		{ $<tokenp>$ = new Token( lexYacc(), CODE ); }
-	  RCURL
-		{
-			//cerr << "literalblock: " << $1->text << "(" << $1 << ") " << $<tokenp>4->text << " " << $5->text << "(" << $5 << ")" << endl;
-			$1->left = $<tokenp>4;
-			$<tokenp>4->left = $5;
-			$$ = new Token( "literalblock", _LITERALBLOCK );
-			$$->down = $1;
-		}
-	;
-
-declaration :
-	union
-	| START IDENTIFIER
-		{
-			$1->left = $2;
-			$$ = $1;
-		}
-	| rword tag_opt namenolist
-		{
-		    Token *n = new Token( "namenolist", _NAMENOLIST );
-		    n->down = nameliststart;
-		    $1->left = $2;
-		    $2->left = n;
-		    $$ = $1;
-		}
-	| TYPE tag_opt namelist
-		{
-		    Token *n = new Token( "namelist", _NAMELIST );
-		    n->down = nameliststart;
-		    $1->left = $2;
-		    $2->left = n;
-		    $$ = $1;
-		}
-	| PURE_PARSER
-	| SEMANTIC_PARSER
-	| EXPECT INTEGER									// bison
-		{
-		    $1->left = $2;
-		    $$ = $1;
-		}
-	| DEFINE											// bison
-	| LOCATIONS
-	| THONG												// bison
-	;
-
-union :
-	UNION '{'
-		{ lexC(); }
-	  ccode_opt
-		{
-		    // Remove the trailing '}' which is added in lex.
-		    string temp( lexYacc() );
-		    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
-		}
-	  '}'
-		{
-		    $1->left = $2;
-		    $2->left = $<tokenp>5;
-		    $<tokenp>5->left = $6;
-		    $$ = $1;
-		}
-	;
-
-rword :
-	TOKEN
-	| LEFT
-	| RIGHT
-	| NONASSOC
-	| PRECEDENCE
-	;
-
-tag_opt :
-	// empty
-		{
-		    //cerr << "tag_opt" << endl;
-		    $$ = new Token( "tag_opt", _TAG_OPT );
-		}
-	| '<' IDENTIFIER '>'
-		{
-		    $1->left = $2;
-		    $2->left = $3;
-		    $$ = new Token( "tag_opt", _TAG_OPT );
-		    $$->down = $1;
-		}
-	;
-
-namenolist :
-	nameno
-		{
-			//cerr << "namenolist1: " << $1->text << "(" << $1 << ")" << endl;
-			$$ = nameliststart = $1;
-		}
-	| namenolist nameno
-		{
-		    //cerr << "namenolist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $1->left = $2;
-		    $$ = $2;
-		}
-	| namenolist ',' nameno
-		{
-		    //cerr << "namenolist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-		    $1->left = $2;
-		    $2->left = $3;
-		    $$ = $3;
-		}
-	;
-
-nameno :
-	name
-		{
-		    $$ = new Token( "nameno", _NAMENO );
-		    $$->down = $1;
-		}
-	| name INTEGER
-		{
-		    $$ = new Token( "nameno", _NAMENO );
-		    $1->left = $2;
-		    $$->down = $1;
-		}
-	;
-
-namelist :
-	name
-		{
-		    //cerr << "namelist1: " << $1->text << "(" << $1 << ")" << endl;
-		    $$ = nameliststart = $1;
-		}
-	| namelist name
-		{
-		    //cerr << "namelist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $1->left = $2;
-		    $$ = $2;
-		}
-	| namelist ',' name
-		{
-		    //cerr << "namelist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-		    $1->left = $2;
-		    $2->left = $3;
-		    $$ = $3;
-		}
-	;
-
-name :
-	IDENTIFIER
-	| CHARACTER
-	;
-
-rulesection :
-	rules
-		{
-		    //cerr << "rulesection1: " << $1->text << "(" << $1 << ")" << endl;
-		    $$ = new Token( "rulesection", _RULESECTION );
-		    $$->down = $1;
-		}
-	| error												// no rules
-		{
-			cerr << "no rules in the input grammar" << endl;
-			exit( -1 );
-		}
-	;
-
-// These grammar rules are complex because the Yacc language is LR(2) due to the optional ';' at the end of rules. The
-// following rules convert the LR(2) grammar into LR(1) by lengthening the rules to allow sufficient look
-// ahead. Unfortunately, this change makes handling the semantic actions more complex because there are two lists
-// (rules, rhs) being built but only one list tail can be returned through $$ for chaining.
-
-rules :
-	lhs rhs
-		{
-		    //cerr << "rules1: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $$ = rulestart;
-		}
-	| lhs rhs ';'
-		{
-		    //cerr << "rules2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-		    $2->addDownLeftTail( $3 );
-		    $$ = rulestart;
-		}
-	;
-
-lhs :
-	IDENTIFIER ':'
-		{
-		    //cerr << "lhs: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $$ = new Token( "lhs", _LHS );
-		    //cerr << " lhs: "  << $$->text << "(" << $$ << ")" << endl;
-		    $1->left = $2;
-		    $$->down = $1;
-		}
-	;
-
-rhs	:
-	// empty
-		{
-		    //cerr << "rhs1: " << $<tokenp>0->text << "(" << $<tokenp>0 << ")"  << endl;
-		    rulestart = new Token( "rule", _RULE );
-		    rulestart->down = $<tokenp>0; // initial lhs is already on the stack from "rules"
-		    $$ = new Token( "rhs", _RHS );
-		    //cerr << "  rhs: " << $$->text << "(" << $$ << ")" << endl;
-		    $<tokenp>0->left = $$;
-		}
-	| rhs lhs
-		{
-		    //cerr << "rhs2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    Token *temp = new Token( "rule", _RULE );
-		    rulestart->addLeftTail( temp );
-		    temp->down = $2;
-		    $$ = new Token( "rhs", _RHS );
-		    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-		    $2->left = $$;
-		}
-	| rhs ';' lhs
-		{
-		    //cerr << "rhs3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-		    $1->addDownLeftTail( $2 );
-		    Token *temp = new Token( "rule", _RULE );
-		    rulestart->addLeftTail( temp );
-		    temp->down = $3;
-		    $$ = new Token( "rhs", _RHS );
-		    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-		    $3->left = $$;
-		}
-	| rhs prod
-		{
-		    //cerr << "rhs4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $1->addDownLeftTail( $2 );
-		    $$ = $1;
-		}
-	| rhs '|'
-		{
-		    //cerr << "rhs5: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $1->addDownLeftTail( $2 );
-		    $$ = new Token( "rhs", _RHS );
-		    $1->left = $$;
-		    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-		}
-	;
-
-prod :
-	action
-	| IDENTIFIER
-	| CHARACTER
-	| prec
-	;
-
-prec :
-	PREC name
-		{
-		    //cerr << "prec: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-		    $1->left = $2;
-		    $$ = new Token( "prec", _PREC );
-		    $$->down = $1;
-		}
-	;
-
-action :
-	'{'
-		{ lexC(); }
-	  ccode_opt
-		{
-		    // Remove the trailing '}' added in lex.
-		    string temp( lexYacc() );
-		    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
-		}
-	  '}'
-		{
-		    $1->left = $<tokenp>4;
-		    $<tokenp>4->left = $5;
-		    $$ = new Token( "action", _ACTION );
-		    $$->down = $1;
-		}
-	;
-
-usersection_opt :
-	// empty
-		{
-		    //cerr << "usersection_opt" << endl;
-		    // attach remaining WS to fictitious code
-		    Token *temp = new Token( "", ws_list, CODE );
-		    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
-		    $$->down = temp;
-		}
-	| MARK
-		{ lexC(); }
-	  ccode_opt
-		{
-		    Token *temp = new Token( lexYacc(), CODE );
-		    //cerr << "usersection_opt: " << $1->text << " " << temp->text << endl;
-		    $1->left = temp;
-		    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
-		    $$->down = $1;
-		}
-	;
-
-ccode_opt :
-	// empty
-		{}
-	| blocks
-	;
-
-// This rule matches internal braces "{}" in C code to the level of the braces of a union/action.  These internal braces
-// are returned as Tokens from the lexer but are unused because the braces are already concatenated into the code string
-// built by the lexer. Therefore, the tokens for the braces are immediately deleted.
-
-blocks :
-	'{'
-		{ delete $1; }
-	  ccode_opt '}'
-		{ delete $4; }
-	| blocks '{'
-		{ delete $2; }
-	  ccode_opt '}'
-		{ delete $5; }
-	;
-%%
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/test.tex
===================================================================
--- tools/prettyprinter/test.tex	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,14 +1,0 @@
-\documentclass[11pt]{article}
-\usepackage{fullpage,times,lgrind}
-
-\begin{document}
-
-\lgrindfile{bison}
-
-\end{document}
-
-% Local Variables: %
-% tab-width: 4 %
-% fill-column: 100 %
-% compile-command: "pdflatex test.tex" %
-% End: %
Index: tools/prettyprinter/test.y
===================================================================
--- tools/prettyprinter/test.y	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,51 +1,0 @@
-/* adasd1 */   
-
-%token<tokenp>	A 1 , B 2 C 3			// %%
-%type<tokenp>	A , B C				// %%
-%type	A , B C				// %%
-
-/* adsad2 */
-%locations
-%define parse.error verbose
-%%
-
-rules2	: pop xxx %prec '.' yyy push %prec '.'	/* XX */
-		{ $$ = build_nt (CALL_EXPR, $1, $2, NULL_TREE); }
-		{ $$ = build_nt (CALL_EXPR, $1, $2, NULL_TREE); }
-	| xxx yyy ';'
-	;
-
-rules1	:
-	/* empty */
-	{}
-	| xxx
-	  /* fred */ yyy
-	| xxx
-		{}
-	  yyy ';'
-	|
-	;
-
-mark		: MARK
-		| error					/* missing %% */
-			{
-			    cerr << "no input grammar, missing %% mark" << endl;
-			    exit( -1 );
-			}
-		;
-
-x	: xxx yyy
-
-y	:
-	;
-
-w	:
-	  xxx
-	|
-	  yyy
-	;
-%%
-{
-    {
-    }
-}
Index: tools/prettyprinter/test1.y
===================================================================
--- tools/prettyprinter/test1.y	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,24 +1,0 @@
-%token A
-
-%start rules
-%%
-rules	: /* empty */		/* no rules */
-	| lhs rhs		/* start new rule */
-	| lhs rhs ';'		/* start new rule */
-	|
-	;
-
-lhs	: A | ':' ;
-
-rhs	: /* empty */		/* empty rule */
-        | rhs more ;
-
-more	: lhs			/* start next rule */
-	| ';' lhs		/* start next rule */
-	| foo			/* component of current rule */
-	| '|'			/* empty rule */
-	;
-
-foo	: A | 'l' | 'X'
-
-bar:
Index: tools/prettyprinter/token.cc
===================================================================
--- tools/prettyprinter/token.cc	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,100 +1,0 @@
-// 
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// Pretty Printer, Copyright (C) Richard C. Bilson and Rodolfo G. Esteves 2001
-// 
-// token.cc -- 
-// 
-// Author           : Peter A. Buhr
-// Created On       : Wed Jun 28 22:46:23 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 21 23:07:04 2017
-// Update Count     : 10
-// 
-
-#include <string>
-using namespace std;
-#include "ParserTypes.h" 
-#include "parser.hh"
-#include "filter.h"
-
-Token::Token( const string & text, int kind ) : text(text), kind(kind) {
-	left = down = NULL;
-} // Token::Token
-
-Token::Token( const string & text, list<string> & ws_list, int kind ) : text(text), kind(kind) {
-//    cerr << "Token3 : text \"" << text << "\"";
-//    for ( list<string>::iterator i = ws_list.begin(); i != ws_list.end(); i ++ ) {
-//	cerr << " WSt: \"" << *i << "\"";
-//    }
-//    cerr << endl;
-	left = down = NULL;
-	// O(1) transfer of the current lex whitespace list to the token's whitespace list, and clearing the lex whitespace
-	// list.
-	Token::ws_list.splice( Token::ws_list.end(), ws_list );
-} // Token::Token
-
-void Token::addLeftTail( Token * n ) {
-	Token * p = this;
-	while ( p->left != 0 ) {
-		p = p->left;
-	} // while
-	p->left = n;
-} // Token::addLeftTail
-
-void Token::addDownLeftTail( Token * n ) {
-	if ( down == 0 ) {
-		down = n;
-	} else {
-		down->addLeftTail( n );
-	} // if
-} // Token::addDownLeftTail
-
-bool Token::isTerminal() {
-	return kind < END_TERMINALS;
-} // Token::isTerminal
-
-int Token::getKind() const {
-	return kind;
-} // Token::getKind()
-
-string Token::getText() const {
-	return text;
-} // Token::getText()
-
-string Token::getWS() {
-	string ret;
-	// concatenate whitespace and comment text
-	for ( list<string>::iterator i = ws_list.begin(); i != ws_list.end(); i ++ ) {
-		ret += *i;
-	} // for
-	return ret;
-} // Token::getWS
-
-bool Token::isComment() {
-	return ws_list.size() > 1 || ( ws_list.size() == 1 && (*ws_list.begin())[0] == '/' );
-} // Token::isComment
-
-string Token::getComment() {
-	string ret;
-	// concatenate whitespace and comment text up to the last comment
-	if ( ws_list.size() > 1 ) {
-		list<string>::iterator end = -- ws_list.end();
-		if ( (*end)[0] == '/' ) end ++;
-		for ( list<string>::iterator i = ws_list.begin(); i != end; i ++ ) {
-			ret += *i;
-		} // for
-	} else if ( ws_list.size() == 1 ) {
-		if ( (*ws_list.begin())[0] == '/' ) ret = *ws_list.begin();
-	} // if
-	return ret;
-} // Token::getComment
-
-// Local Variables: //
-// mode: c++ //
-// tab-width: 4 //
-// compile-command: "make install" //
-// End: //
Index: tools/prettyprinter/token.h
===================================================================
--- tools/prettyprinter/token.h	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,40 +1,0 @@
-// 
-// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
-//
-// The contents of this file are covered under the licence agreement in the
-// file "LICENCE" distributed with Cforall.
-// 
-// token.h -- 
-// 
-// Author           : Peter A. Buhr
-// Created On       : Wed Jun 28 22:47:58 2017
-// Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 22 10:12:42 2017
-// Update Count     : 6
-// 
-
-#pragma once
-
-struct Token {
-	std::string text;									// text of terminal or non-terminal token
-	int kind;											// kind of terminal or non-terminal token
-	std::list<std::string> ws_list;						// list of whitespace and comments before terminal token
-	Token *left, *down;									// binary parse tree links
-
-	Token( const std::string &, int );
-	Token( const std::string &, std::list<std::string> &, int );
-	void addLeftTail( Token * );
-	void addDownLeftTail( Token * );
-	bool isTerminal();
-	int getKind() const;
-	std::string getText() const;
-	std::string getWS();
-	bool isComment();
-	std::string getComment();
-};
-
-// Local Variables: //
-// tab-width: 4 //
-// mode: c++ //
-// compile-command: "make install" //
-// End: //
Index: tools/repeat.c
===================================================================
--- tools/repeat.c	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,173 +1,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <string.h>
-
-#include <getopt.h>
-#include <unistd.h>
-
-#include <sys/types.h>
-#include <sys/wait.h>
-
-int repetitions = 0;
-bool stop_on_error = false;
-char * this_cmd = NULL;
-bool print_iterations = false;
-
-void parse_args(int argc, char * argv[]);
-void setup();
-int run();
-
-int main(int argc, char * argv[]) {
-	parse_args(argc, argv);
-	setup();
-	for(int i = 0; i < repetitions; i++) {
-		if(print_iterations) {
-			printf("\r%d / %d", i, repetitions);
-			fflush(stdout);
-		}
-		int retcode = run();
-		if( !WIFEXITED(retcode) ) {
-			printf("FAILURE: %d @ %d\n", retcode, i + 1);
-		}
-		if( !WIFEXITED(retcode) && stop_on_error ) {
-			return retcode;
-		}
-	}
-
-	if(print_iterations) {
-		printf("\r%d / %d\n", repetitions, repetitions);
-	}
-
-	return 0;
-}
-
-void usage( FILE * out, int code ) {
-	fprintf(out, "%s [OPTION] [--] N CMD\n", this_cmd);
-	fprintf(out, "Repeat CMD N times\n\n");
-	fprintf(out, "\t-h,--help\tprint this usage message\n");
-	fprintf(out, "\t-s\t\tstop on error\n");
-	fprintf(out, "\t-i\t\toutput iterations instead of CMD stdout\n");
-	fprintf(out, "\t-x\t\tprint CMD before running it\n");
-	fprintf(out, "\t-a FILE\t\tredirect output of command to append to FILE\n");
-	fprintf(out, "\t-r FILE\t\tredirect output of command to FILE\n");
-	exit(code);
-}
-
-char ** cmd_to_run = NULL;
-bool print_cmd = false;
-bool redirect = false;
-bool redirect_append = false;
-char * redirect_to = "/dev/null";
-pid_t child_pid = 0;
-
-void error() {
-	fprintf(stderr,"\n");
-	usage(stderr, 1);
-}
-
-void parse_args(int argc, char * argv[]) {
-	this_cmd = argv[0];
-
-	enum { Help, };
-	static struct option long_opts[] = {
-		{ "help", no_argument, 0, Help },
-		{ 0, 0, 0, 0 }
-	}; // long_opts
-	int long_index;
-
-	int c;
-	while ( (c = getopt_long( argc, argv, "ahirsx", long_opts, &long_index)) != -1 ) {
-		switch ( c ) {
-			case Help:
-			case 'h':
-				usage(stdout, 0);
-				break;
-		 	case 's':
-				stop_on_error = true;
-				break;
-		 	case 'x':
-				print_cmd = true;
-				break;
-			case 'i':
-				print_iterations = true;
-				break;
-			case 'a':
-				if(redirect) { fprintf(stderr, "Cannot have -a and -r\n"); error(); }
-				redirect_append = true;
-				redirect_to = argv[optind];
-				optind++;
-				break;
-			case 'r':
-				if(redirect_append) { fprintf(stderr, "Cannot have -a and -r\n"); error(); }
-				redirect = true;
-				redirect_to = argv[optind];
-				optind++;
-				break;
-			default:
-				error("");
-				break;
-		} // switch
-	} // while
-
-	if( argc < optind + 2 ) {
-		fprintf(stderr, "Too few arguments\n");
-		error();
-	}
-
-	char * pEnd;
-	char * repeats_c = argv[optind];
-	repetitions = strtol(repeats_c, &pEnd, 10);
-
-	bool is_number = (size_t)(pEnd - repeats_c) == strlen(repeats_c);
-	bool in_range  = repetitions > 0;
-	if( !is_number || !in_range ) {
-		fprintf(
-			stderr,
-			"repetitions option : %s not an number greater than 0\n",
-			repeats_c
-		);
-		error();
-	}
-
-	cmd_to_run = argv + optind + 1;
-}
-
-void setup() {
-
-}
-
-int run() {
-	/* Duplicate this process. */
-	child_pid = fork();
-	if (child_pid != 0) {
-
-		/* This is the parent process. */
-		int status;
-		waitpid(child_pid, &status, 0);
-		child_pid = 0;
-		return status;
-	}
-	else {
-		/* Now execute PROGRAM, searching for it in the path.  */
-		if( print_cmd ) {
-			char ** cmd = cmd_to_run;
-			while (*cmd) {
-				printf("%s ", *cmd);
-				cmd++;
-			}
-			printf("\n");
-		}
-		if(print_iterations || redirect || redirect_append) {
-			__attribute__((unused)) FILE * ignore =
-				freopen(redirect_to, redirect_append ? "a" : "w" , stdout);
-		}
-		execvp ( *cmd_to_run, cmd_to_run);
-		/* The execvp  function returns only if an error occurs.  */
-		fprintf(stderr, "an error occurred in execvp\n");
-		abort ();
-	}
-
-	return 0;
-}
Index: tools/repeat.old
===================================================================
--- tools/repeat.old	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,35 +1,0 @@
-#!/bin/bash
-
-if [ $1 == "-h" -o $1 == "--help" ]; then
-	echo "$(basename $0) [-s|-p] ITERATIONS COMMAND"
-	exit
-fi
-
-ACTION=$1
-ITERATION=$2
-shift 2
-
-_term() { 
-  echo "Caught SIGTERM signal!" 
-  kill -TERM "$child" 2>/dev/null
-  exit
-}
-
-trap _term SIGTERM SIGINT
-
-for (( i = 0; i < ITERATION; i ++ )); do
-	echo -ne "\r$i / $ITERATION"
-	$@ > /dev/null &
-	child=$! 
-	wait "$child"
-	RET=$?
-	if [ $RET -ne 0 ]; then
-		echo "FAILURE: $RET @ $i"
-	fi
-	if [ $ACTION == "-s" -a $RET -ne 0 ]; then
-		exit $RET
-	fi
-done
-echo -ne "\r$ITERATION / $ITERATION"
-
-exit 0
Index: tools/stat.py
===================================================================
--- tools/stat.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,23 +1,0 @@
-#!/usr/bin/python3
-
-import sys
-import numpy
-
-if len(sys.argv) != 2 :
-	sys.exit("Expected file name as only argument")
-
-try:
-	with open(sys.argv[1]) as f:
-		content = f.readlines()
-		content = [x.strip() for x in content]
-		content = [float(x) for x in content]	# expect floating-point strings
-		content.remove(max(content))		# need at least 4 data values because
-		content.remove(min(content))		# the max and min values are removed
-		med = numpy.median(content)
-		avg = numpy.mean  (content)
-		std = numpy.std   (content)
-		print("median {0:.1f} avg {1:.1f} stddev {2:.1f}".format( med, avg, std ))
-
-
-except IOError as e:
-	sys.exit(e.strerror)
Index: tools/test_time.py
===================================================================
--- tools/test_time.py	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,57 +1,0 @@
-#!/usr/bin/env python3
-"""Inspect test results for timing information.
-
-Run on a file that contains results from tests/test.py to see results.
-"""
-
-
-import argparse
-from datetime import timedelta
-import re
-import statistics
-
-
-def parse_args(args=None):
-    parser = argparse.ArgumentParser(
-        description='Summarize performance results from a test run.')
-    parser.add_argument('result_file', type=argparse.FileType('r'))
-    return parser.parse_args(args)
-
-
-def str_to_time(time_str):
-    match = re.search('([0-9]+):([0-9]+)[.]([0-9]+)', time_str)
-    if not match:
-        raise Exception('Badly formatted')
-    minutes, seconds, milli = (int(x) for x in match.groups())
-    return timedelta(minutes=minutes, seconds=seconds, milliseconds=milli)
-
-
-def line_to_entry(line):
-    match = re.search('([^\t ]+) +PASSED +C( n/a|.*) - R( n/a|.*)', line)
-    if not match:
-        return None
-    test_id, compile_str, run_str = match.groups()
-    compile_time = None if ' n/a' == compile_str else str_to_time(compile_str)
-    run_time = None if ' n/a' == run_str else str_to_time(run_str)
-    return test_id, compile_time, run_time
-
-
-def iter_file_entries(open_file):
-    with open_file as file:
-        for line in file.readlines():
-            entry = line_to_entry(line)
-            if entry is not None:
-                yield entry
-
-
-def entry_to_compile_seconds(entry):
-    _id, compile_time, _run_time = entry
-    return compile_time.total_seconds()
-
-
-if '__main__' == __name__:
-    args = parse_args()
-    mean = statistics.geometric_mean(
-        map(entry_to_compile_seconds, iter_file_entries(args.result_file)))
-    print('Source File:', args.result_file.name)
-    print('Geometric Mean:', mean)
Index: tools/vscode/uwaterloo.cforall-0.1.0/.gitignore
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/.gitignore	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,2 +1,0 @@
-node_modules/
-cfa-ls
Index: tools/vscode/uwaterloo.cforall-0.1.0/cforall.configuration.json
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/cforall.configuration.json	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,29 +1,0 @@
-{
-	"comments": {
-		"lineComment": "//",
-		"blockComment": [ "/*", "*/" ]
-	},
-	// symbols used as brackets
-	"brackets": [
-		["{", "}"],
-		["[", "]"],
-		["(", ")"]
-	],
-	// symbols that are auto closed when typing
-	"autoClosingPairs": [
-		["{", "}"],
-		["[", "]"],
-		["(", ")"],
-		["\"", "\""],
-		["'", "'"]
-	],
-	// symbols that that can be used to surround a selection
-	"surroundingPairs": [
-		["{", "}"],
-		["[", "]"],
-		["(", ")"],
-		["\"", "\""],
-		["'", "'"],
-		["$", "$"]
-	]
-}
Index: tools/vscode/uwaterloo.cforall-0.1.0/client/main.js
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/client/main.js	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,56 +1,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-// The module 'vscode' contains the VS Code extensibility API
-// Import the module and reference it with the alias vscode in your code below
-const path = require("path");
-const vscode = require("vscode");
-
-
-const vscode_lc = require('vscode-languageclient');
-
-let client = {}
-
-// this method is called when your extension is activated
-// your extension is activated the very first time the command is executed
-function activate(context) {
-	vscode.window.showInformationMessage('Cforall Extension Starting');
-
-	// The debug options for the server
-	// --inspect=6009: runs the server in Node's Inspector mode so VS Code can attach to the server for debugging
-	let debugOptions = { execArgv: ['--nolazy', '--inspect=6009'] };
-
-	// If the extension is launched in debug mode then the debug server options are used
-	// Otherwise the run options are used
-	let serverOptions = {
-		run: { command: 'cfa-ls', transport: vscode_lc.TransportKind.stdio },
-		debug: {
-			command: 'cfa-ls',
-			transport: vscode_lc.TransportKind.stdio,
-			options: debugOptions
-		}
-	};
-
-	// Options to control the language client
-	let selector = [{ scheme: 'file', language: 'cforall' }];
-	let clientOptions = {
-		// Register the server for cforall documents
-		documentSelector: selector
-	};
-
-	// Create the language client and start the client.
-	client = new vscode_lc.LanguageClient(
-		'cforall',
-		'Cforall Language Server',
-		serverOptions,
-		clientOptions
-	);
-
-	// Start the client. This will also launch the server
-	client.start();
-
-}
-exports.activate = activate;
-
-// this method is called when your extension is deactivated
-function deactivate() { }
-exports.deactivate = deactivate;
Index: tools/vscode/uwaterloo.cforall-0.1.0/images/icon.svg
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/images/icon.svg	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,87 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.2" width="25mm" height="25mm" viewBox="0 0 2500 2500" preserveAspectRatio="xMidYMid" fill-rule="evenodd" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:presentation="http://sun.com/xmlns/staroffice/presentation" xmlns:smil="http://www.w3.org/2001/SMIL20/" xmlns:anim="urn:oasis:names:tc:opendocument:xmlns:animation:1.0" xml:space="preserve">
- <defs class="ClipPathGroup">
-  <clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
-   <rect x="0" y="0" width="2500" height="2500"/>
-  </clipPath>
- </defs>
- <defs class="TextShapeIndex">
-  <g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6"/>
- </defs>
- <defs class="EmbeddedBulletChars">
-  <g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
-  </g>
-  <g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
-  </g>
-  <g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
-  </g>
-  <g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
-  </g>
-  <g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
-  </g>
-  <g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
-  </g>
-  <g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
-  </g>
-  <g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
-  </g>
-  <g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
-   <path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
-  </g>
- </defs>
- <defs class="TextEmbeddedBitmaps"/>
- <g>
-  <g id="id2" class="Master_Slide">
-   <g id="bg-id2" class="Background"/>
-   <g id="bo-id2" class="BackgroundObjects"/>
-  </g>
- </g>
- <g class="SlideGroup">
-  <g>
-   <g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
-    <g class="Page">
-     <g class="com.sun.star.drawing.ClosedBezierShape">
-      <g id="id3">
-       <rect class="BoundingBox" stroke="none" fill="none" x="256" y="501" width="919" height="1289"/>
-       <path fill="rgb(152,76,147)" stroke="none" d="M 1173,1722 L 1173,1722 C 1072,1768 978,1788 867,1788 856,1788 848,1788 837,1787 L 837,1787 C 827,1788 818,1788 808,1788 707,1788 621,1765 534,1715 487,1688 450,1659 412,1619 L 412,1619 C 384,1587 363,1558 341,1521 283,1419 256,1320 256,1203 256,1192 256,1182 257,1171 L 257,1171 C 256,1161 256,1152 256,1142 256,1017 285,910 347,802 372,759 397,724 431,687 L 431,687 C 473,643 514,611 566,580 661,526 753,501 862,501 869,501 875,502 883,502 L 883,502 C 890,502 897,502 904,502 1001,502 1082,516 1173,548 L 1173,817 1173,817 C 1168,814 1163,812 1158,808 1080,763 1003,743 912,743 909,743 907,743 904,743 899,743 895,743 891,743 827,743 773,757 718,789 686,807 662,826 637,853 619,874 606,893 592,917 553,984 535,1050 535,1128 535,1136 535,1143 535,1151 L 535,1151 C 535,1159 535,1165 535,1173 535,1249 552,1314 591,1381 603,1402 615,1419 631,1439 L 631,1439 C 655,1465 679,1484 710,1502 763,1532 814,1546 875,1546 880,1546 884,1546 889,1546 L 889,1546 C 891,1546 892,1546 894,1546 991,1546 1073,1524 1157,1475 1163,1472 1168,1469 1173,1466 L 1173,1722 Z"/>
-      </g>
-     </g>
-     <g class="com.sun.star.drawing.CustomShape">
-      <g id="id4">
-       <rect class="BoundingBox" stroke="none" fill="none" x="1281" y="520" width="540" height="1282"/>
-       <path fill="rgb(152,76,147)" stroke="none" d="M 1576,1800 L 1819,1800 1524,521 1282,521 1576,1800 Z M 1282,1800 L 1282,1800 Z M 1819,521 L 1819,521 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1576,1800 L 1819,1800 1524,521 1282,521 1576,1800 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1282,1800 L 1282,1800 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1819,521 L 1819,521 Z"/>
-      </g>
-     </g>
-     <g class="com.sun.star.drawing.CustomShape">
-      <g id="id5">
-       <rect class="BoundingBox" stroke="none" fill="none" x="1489" y="838" width="527" height="167"/>
-       <path fill="rgb(152,76,147)" stroke="none" d="M 1752,1003 L 1490,1003 1490,839 2014,839 2014,1003 1752,1003 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1752,1003 L 1490,1003 1490,839 2014,839 2014,1003 1752,1003 Z"/>
-      </g>
-     </g>
-     <g class="com.sun.star.drawing.CustomShape">
-      <g id="id6">
-       <rect class="BoundingBox" stroke="none" fill="none" x="1663" y="521" width="540" height="1282"/>
-       <path fill="rgb(152,76,147)" stroke="none" d="M 1958,522 L 2201,522 1906,1801 1664,1801 1958,522 Z M 1664,522 L 1664,522 Z M 2201,1801 L 2201,1801 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1958,522 L 2201,522 1906,1801 1664,1801 1958,522 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 1664,522 L 1664,522 Z"/>
-       <path fill="none" stroke="rgb(152,76,147)" d="M 2201,1801 L 2201,1801 Z"/>
-      </g>
-     </g>
-    </g>
-   </g>
-  </g>
- </g>
-</svg>
Index: tools/vscode/uwaterloo.cforall-0.1.0/package.json
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/package.json	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,76 +1,0 @@
-{
-	"name": "cforall",
-	"version": "0.1.0",
-	"displayName": "C∀ (C-for-all) Language Support",
-	"description": "Cforall - colorizer, grammar and snippets.",
-	"publisher": "uwaterloo",
-	"license": "MIT",
-	"engines": {
-		"vscode": "^1.5.0"
-	},
-	"icon": "images/icon.png",
-	"categories": [
-		"Programming Languages",
-		"Linters",
-		"Other"
-	],
-	"activationEvents": [
-		"onLanguage:cforall"
-	],
-	"main": "./client/main.js",
-	"contributes": {
-		"languages": [
-			{
-				"id": "cforall",
-				"aliases": [
-					"C∀",
-					"CForAll",
-					"Cforall",
-					"cforall"
-				],
-				"extensions": [
-					".cfa",
-					".hfa",
-					".ifa"
-				],
-				"configuration": "./cforall.configuration.json"
-			}
-		],
-		"grammars": [
-			{
-				"language": "cforall",
-				"scopeName": "source.cfa",
-				"path": "./syntaxes/cfa.tmLanguage.json"
-			}
-		],
-		"configuration": {
-			"type": "object",
-			"title": "Example configuration",
-			"properties": {
-				"cforall.maxNumberOfProblems": {
-					"scope": "resource",
-					"type": "number",
-					"default": 100,
-					"description": "Controls the maximum number of problems produced by the server."
-				},
-				"cforall.trace.server": {
-					"scope": "window",
-					"type": "string",
-					"enum": [
-						"off",
-						"messages",
-						"verbose"
-					],
-					"default": "off",
-					"description": "Traces the communication between VS Code and the language server."
-				}
-			}
-		}
-	},
-	"dependencies": {
-		"vscode-languageclient": "^4.1.4"
-	},
-	"devDependencies": {
-		"vscode-languageclient": "^4.1.4"
-	}
-}
Index: tools/vscode/uwaterloo.cforall-0.1.0/server/out/server
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/server/out/server	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,1 +1,0 @@
-../../../ls
Index: tools/vscode/uwaterloo.cforall-0.1.0/snippets/snippets.json
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/snippets/snippets.json	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,3 +1,0 @@
-{
-	
-}
Index: tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,50 +1,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>fileTypes</key>
-	<array>
-		<string>c</string>
-		<string>cf</string>
-		<string>cfa</string>
-		<string>h</string>
-	</array>
-	<key>foldingStartMarker</key>
-	<string>/\*\*|\{\s*$</string>
-	<key>foldingStopMarker</key>
-	<string>\*\*/|^\s*\}</string>
-	<key>keyEquivalent</key>
-	<string>^~G</string>
-	<key>name</key>
-	<string>Cforall</string>
-	<key>patterns</key>
-	<array>
-		<dict>
-			<key>match</key>
-			<string>\b(forall)\b</string>
-			<key>name</key>
-			<string>keyword.control.cfa</string>
-		</dict>
-		<dict>
-			<key>match</key>
-			<string>\b(trait|dtype|otype|ftype|sized|volatile|extern|static|inline|coroutine|thread|thread_local|mutex|monitor)\b</string>
-			<key>name</key>
-			<string>storage.type.cfa</string>
-		</dict>
-		<dict>
-			<key>match</key>
-			<string>\b(this)\b</string>
-			<key>name</key>
-			<string>variable.language.cfa</string>
-		</dict>
-		<dict>
-			<key>include</key>
-			<string>source.c</string>
-		</dict>
-	</array>
-	<key>scopeName</key>
-	<string>source.cf</string>
-	<key>uuid</key>
-	<string>25066DC2-6B1D-11D9-9D5B-000D93589AF6</string>
-</dict>
-</plist>
Index: tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage.json
===================================================================
--- tools/vscode/uwaterloo.cforall-0.1.0/syntaxes/cfa.tmLanguage.json	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,330 +1,0 @@
-{
-	"scopeName": "source.cfa",
-	"patterns": [
-		{ "include": "#comment"},
-		{ "include": "#preprocessor"},
-		{ "include": "#extern"},
-		{ "include": "#declaration"},
-		{ "include": "#constant"},
-		{ "include": "#statement"},
-		{ "include": "#operator"}
-	],
-	"repository": {
-		"preprocessor": {
-			"patterns":[
-				{ "include": "#directive.pragma" },
-				{ "include": "#directive.include" },
-				{ "include": "#directive.define" },
-				{ "include": "#directive.undef" },
-				{ "include": "#directive.ifdef" },
-				{ "include": "#directive.condition.arg" },
-				{ "include": "#directive.condition.noargs" }
-			],
-			"repository": {
-				"directive.punctuation": {
-					"match": "#",
-					"name": "punctuation.definition.directive.cfa"
-				},
-				"directive.pragma": {
-					"name": "meta.preprocessor.pragma.cfa",
-					"match": "^\\s*(#\\s*pragma)\\s+(((?!//|/\\*).)*)",
-					"captures":{
-						"1": {
-							"name": "keyword.control.directive.pragma.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"name": "keyword.control.directive.pragma.argument.cfa"}
-					}
-				},
-				"directive.include.string": {
-					"begin": "<|\"",
-					"end": ">|\"",
-					"beginCaptures": {
-						"0": { "name": "punctuation.definition.string.begin.cfa" }
-					},
-					"endCaptures": {
-						"0": { "name": "punctuation.definition.string.end.cfa" }
-					},
-					"name": "string.quoted.include.cfa"
-				},
-				"directive.include": {
-					"name": "meta.preprocessor.include.cfa",
-					"match": "^\\s*(#\\s*include)\\s+(<.*>|\".*\")",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.include.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"patterns": [{ "include": "#directive.include.string"}]}
-					}
-				},
-				"directive.macro.name": {
-					"name": "entity.name.function.preprocessor.cfa",
-					"match": "[A-z0-9_]+"
-				},
-				"directive.define": {
-					"name": "meta.preprocessor.macro.cfa",
-					"match": "(#\\s*define)\\s+([A-z0-9_]+)(\\(.*\\))?\\s+(.*)?",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.define.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"patterns": [{ "include": "#directive.macro.name"}]},
-						"3": {"name":"meta.preprocessor.macro.args.cfa"},
-						"4": {"name":"meta.preprocessor.macro.definition.cfa", "patterns": [{ "include": "$self" }]}
-					}
-				},
-				"directive.undef": {
-					"name": "meta.preprocessor.macro.cfa",
-					"match": "^\\s*(#\\s*undef)\\s+(\\w+)",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.undef.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"name":"meta.define.B", "patterns": [{ "include": "#directive.macro.name"}]}
-					}
-				},
-				"directive.isdef": {
-					"match": "(defined)\\s*\\(\\s*(\\w+)\\s*\\)",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.conditional.cfa",
-							"match": "defined"
-						},
-						"2": {"patterns": [{ "include": "#directive.macro.name"}]}
-					}
-				},
-				"directive.ifdef": {
-					"name": "meta.preprocessor.cfa",
-					"match": "^\\s*(#\\s*ifdef)\\s+(\\w+)",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.conditional.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"patterns": [{ "include": "#directive.macro.name"}]}
-					}
-				},
-				"directive.condition.arg": {
-					"name": "meta.preprocessor.cfa",
-					"match": "^\\s*(#\\s*if|#\\s*elif)\\s+(.*)",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.conditional.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						},
-						"2": {"patterns":[
-							{ "include": "#expression"},
-							{ "include": "#directive.isdef"}
-						]}
-					}
-				},
-				"directive.condition.noargs": {
-					"name": "meta.preprocessor.cfa",
-					"match": "^\\s*(#\\s*endif|#\\s*else)\\s+",
-					"captures": {
-						"1": {
-							"name": "keyword.control.directive.conditional.cfa",
-							"patterns":[{ "include": "#directive.punctuation"} ]
-						}
-					}
-				}
-			}
-		},
-		"comment": {
-			"patterns":[
-				{ "include": "#comments.line"},
-				{ "include": "#comments.block"}
-			],
-			"repository": {
-				"comments.line":{
-					"name": "comment.line.double-slash.cfa",
-					"match": "(\/\/).*",
-					"captures": {
-						"1": {"name": "punctuation.definition.comment.c", "match": "\/\/"}
-					}
-				},
-				"comments.block":{
-					"name": "comment.block.cfa",
-					"begin": "/\\*",
-					"end": "\\*/",
-					"beginCaptures": {
-						"0": { "name": "punctuation.definition.comment.begin.cfa" }
-					},
-					"endCaptures": {
-						"0": { "name": "punctuation.definition.comment.end.cfa" }
-					}
-				}
-			}
-		},
-		"extern": {
-			"patterns": [{ "include": "#extern.block"}],
-			"repository": {
-				"extern.head.string": {
-					"begin": "\"",
-					"end": "\"",
-					"beginCaptures": {
-						"0": { "name": "punctuation.definition.string.begin.cfa" }
-					},
-					"endCaptures": {
-						"0": { "name": "punctuation.definition.string.end.cfa" }
-					},
-					"name": "string.quoted.extern.cfa"
-				},
-				"extern.head": {
-					"match": "(extern)\\s+(.*)\\s+(\\{)",
-					"captures": {
-						"1": { "name": "storage.modifier.cfa" },
-						"2": { "patterns":[{ "include": "#extern.head.string"}] },
-						"3": { "name": "punctuation.section.block.begin.bracket.curly.extern.cfa" }
-					}
-				},
-				"extern.block": {
-					"name": "meta.block.extern.cfa",
-					"begin": "(extern\\s+.*\\s+\\{)",
-					"end": "(\\})",
-					"beginCaptures": {
-						"0": { "name": "meta.head.extern.cfa", "patterns":[{ "include": "#extern.head" }] }
-					},
-					"endCaptures": {
-						"0": { "name": "punctuation.section.block.end.bracket.curly.extern.cfa" }
-					},
-					"contentName": "meta.body.extern.cfa",
-					"patterns": [{ "include": "$self" }]
-				}
-			}
-		},
-		"declaration": {
-			"patterns": [
-				{"include": "#declaration.type"},
-				{"include": "#declaration.aggregate"}
-			],
-			"repository": {
-				"declaration.type": {
-					"patterns": [
-							{ "match": "(\\b|^|\\s)(void|bool|char|short|int|long|signed|unsigned|float|double)(\\b|$|\\s)", "name": "storage.type.built-in.primitive.cfa"},
-							{ "match": "(\\b|^|\\s)(zero_t|one_t|size_t|ssize_t|intptr_t|uintptr_t|thread\\$|coroutine\\$|generator\\$|monitor\\$)(\\b|$|\\s)", "name": "storage.type.built-in.cfa"},
-							{ "match": "(\\b|^|\\s)(extern|static|inline|volatile|const|thread_local)(\\b|$|\\s)", "name": "storage.modifier.cfa"}
-					]
-				},
-				"declaration.aggregate": {
-					"patterns": [
-						{ "name": "storage.type.struct.cfa"   , "match": "(\\b|^|\\s)struct(\\s+(\\w+))?(\\b|$|\\s)"   , "captures": { "3": { "name": "entity.name.type.struct.cfa"   }} },
-						{ "name": "storage.type.union.cfa"    , "match": "(\\b|^|\\s)union(\\s+(\\w+))?(\\b|$|\\s)"    , "captures": { "3": { "name": "entity.name.type.union.cfa"    }} },
-						{ "name": "storage.type.enum.cfa"     , "match": "(\\b|^|\\s)enum(\\s+(\\w+))?(\\b|$|\\s)"     , "captures": { "3": { "name": "entity.name.type.enum.cfa"     }} },
-						{ "name": "storage.type.trait.cfa"    , "match": "(\\b|^|\\s)trait(\\s+(\\w+))?(\\b|$|\\s)"    , "captures": { "3": { "name": "entity.name.type.trait.cfa"    }} },
-						{ "name": "storage.type.generator.cfa", "match": "(\\b|^|\\s)generator(\\s+(\\w+))?(\\b|$|\\s)", "captures": { "3": { "name": "entity.name.type.generator.cfa"}} },
-						{ "name": "storage.type.coroutine.cfa", "match": "(\\b|^|\\s)coroutine(\\s+(\\w+))?(\\b|$|\\s)", "captures": { "3": { "name": "entity.name.type.coroutine.cfa"}} },
-						{ "name": "storage.type.thread.cfa"   , "match": "(\\b|^|\\s)thread(\\s+(\\w+))?(\\b|$|\\s)"   , "captures": { "3": { "name": "entity.name.type.thread.cfa"   }} },
-						{ "name": "storage.type.monitor.cfa"  , "match": "(\\b|^|\\s)monitor(\\s+(\\w+))?(\\b|$|\\s)"  , "captures": { "3": { "name": "entity.name.type.monitor.cfa"  }} },
-						{ "name": "storage.type.dtype.cfa"    , "match": "(\\b|^|\\s)dtype(\\s+(\\w+))?(\\b|$|\\s)"    , "captures": { "3": { "name": "entity.name.type.dtype.cfa"    }} },
-						{ "name": "storage.type.otype.cfa"    , "match": "(\\b|^|\\s)otype(\\s+(\\w+))?(\\b|$|\\s)"    , "captures": { "3": { "name": "entity.name.type.otype.cfa"    }} },
-						{ "name": "storage.type.ttype.cfa"    , "match": "(\\b|^|\\s)ttyp(\\s+(\\w+))?(\\b|$|\\s)"     , "captures": { "3": { "name": "entity.name.type.ttype.cfa"    }} }
-					]
-				}
-			}
-		},
-		"constant": {
-			"patterns": [
-				{"include": "#constant.pointer"},
-				{"include": "#constant.number"},
-				{"include": "#constant.string.single"},
-				{"include": "#constant.string.double"},
-				{"include": "#constant.endline"}
-			],
-			"repository": {
-				"constant.number": {
-					"patterns":[
-						{"name": "constant.numeric.binary.cfa", "match": "\\b0[b|B][_01\\.e]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
-						{"name": "constant.numeric.hexadecimal.cfa", "match": "\\b0[x|X][_\\dabcdefABCDEF\\.p]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
-						{"name": "constant.numeric.octal.cfa", "match": "\\b0[_0-7\\.]+(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"},
-						{"name": "constant.numeric.decimal.cfa", "match": "\\b[\\d\\.][_\\d\\.e\\+]*(u?(hh|h|z|l\\d+|L\\d+|ll|l)u?)?"}
-					]
-				},
-				"constant.pointer": {
-					"patterns":[
-						{"name": "constant.language.binary.cfa", "match": "\\b0[b|B][_01]+p"},
-						{"name": "constant.language.hexadecimal.cfa", "match": "\\b0[x|X][_\\dabcdefABCDEF]+p"},
-						{"name": "constant.language.octal.cfa", "match": "\\b0[_0-7]+p"},
-						{"name": "constant.language.decimal.cfa", "match": "\\b[\\d][_\\d\\.e\\+]*p"}
-					]
-				},
-				"constant.string.content": {
-					"patterns": [
-						{ "name": "constant.character.escape.cfa" , "match": "\\\\."},
-						{ "name": "constant.other.placeholder.cfa", "match": "%\\+?(\\.(\\d+|\\*))?(hh|h|ll|l|j|z|t|L)?[diuoxXfFeEgGaAcspn%]"}
-					]
-				},
-				"constant.string.double": {
-					"name": "string.quoted.double.cfa",
-					"begin": "\"",
-					"end": "\"",
-					"beginCaptures": {
-						"0": { "name": "punctuation.definition.string.begin.cfa" }
-					},
-					"endCaptures": {
-						"0": { "name": "punctuation.definition.string.end.cfa" }
-					},
-					"patterns": [
-						{ "include": "#constant.string.content"}
-					]
-				},
-				"constant.string.single": {
-					"name": "string.quoted.single.cfa",
-					"begin": "'",
-					"end": "'",
-					"beginCaptures": { "0": { "name": "punctuation.definition.string.begin.cfa" } },
-					"endCaptures"  : { "0": { "name": "punctuation.definition.string.end.cfa"   } },
-					"patterns": [
-						{ "include": "#constant.string.content"}
-					]
-				},
-				"constant.endline": {
-					"name": "constant.character.escape.line-continuation.cfa",
-					"match": "\\\\\\s*(//.*)?"
-				}
-			}
-		},
-		"operator": {
-			"patterns":[
-				{
-					"name": "keyword.operator.declaration.cfa",
-					"match": "\\?\\[\\?\\]|\\^\\?{}|\\?{}|\\?\\(\\)|\\?\\+\\+|\\?--|\\+\\+\\?|--\\?|\\*\\?|\\+\\?|\\-\\?|\\~\\?|\\!\\?|\\?\\\\=\\?|\\?\\\\\\?|\\?\\*=\\?|\\?\\*\\?|\\?/=\\?|\\?/\\?|\\?%=\\?|\\?%\\?|\\?\\+=\\?|\\?\\+\\?|\\?-=\\?|\\?-\\?|\\?<<=\\?|\\?<<\\?|\\?<=\\?|\\?<\\?|\\?>>=\\?|\\?>>\\?|\\?>=\\?|\\?>\\?|\\?==\\?|\\?\\!=\\?|\\?&=\\?|\\?&\\?|\\?\\^=\\?|\\?\\^\\?|\\?\\|=\\?|\\?\\|\\?|\\?=\\?"
-				},
-				{
-					"name": "keyword.operator.cfa",
-					"match": "\\?|\\+\\+|--|\\~|\\!|\\=|\\\\|->|\\*=|\\*|/=|/|%=|%|\\+=|\\+|-=|-|<<=|<<|<=|<|>>=|>>|>=|>|==|\\!=|&&|&=|&|\\^=|\\^|\\|\\||\\|=|\\||="
-				}
-			]
-		},
-		"statement": {
-			"patterns":[
-				{ "match": "\\b(if)\\s*\\("         , "captures": { "1": { "name": "keyword.control.if.cfa"        } } },
-				{ "match": "\\b(for)\\s*\\("        , "captures": { "1": { "name": "keyword.control.for.cfa"       } } },
-				{ "match": "\\b(while)\\s*\\("      , "captures": { "1": { "name": "keyword.control.while.cfa"     } } },
-				{ "match": "\\b(switch)\\s*\\("     , "captures": { "1": { "name": "keyword.control.switch.cfa"    } } },
-				{ "match": "\\b(choose)\\s*\\("     , "captures": { "1": { "name": "keyword.control.choose.cfa"    } } },
-				{ "match": "\\b(waitfor)\\s*\\("    , "captures": { "1": { "name": "keyword.control.waitfor.cfa"   } } },
-				{ "match": "\\b(when)\\s*\\("       , "captures": { "1": { "name": "keyword.control.when.cfa"      } } },
-				{ "match": "\\b(timeout)\\s*\\("    , "captures": { "1": { "name": "keyword.control.timeout.cfa"   } } },
-				{ "match": "\\b(or)\\b"             , "captures": { "1": { "name": "keyword.contol.or.cfa"         } } },
-				{ "match": "\\b(else)\\b"           , "captures": { "1": { "name": "keyword.contol.else.cfa"       } } },
-				{ "match": "\\b(do)\\b"             , "captures": { "1": { "name": "keyword.contol.do.cfa"         } } },
-				{ "match": "\\b(case)\\b"           , "captures": { "1": { "name": "keyword.contol.case.cfa"       } } },
-				{ "match": "\\b(default)\\b"        , "captures": { "1": { "name": "keyword.contol.default.cfa"    } } },
-				{ "match": "\\b(suspend)\\b"        , "captures": { "1": { "name": "keyword.contol.suspend.cfa"    } } },
-				{ "match": "\\b(try)\\b"            , "captures": { "1": { "name": "keyword.contol.try.cfa"        } } },
-				{ "match": "\\b(catch(Resume)?)\\b" , "captures": { "1": { "name": "keyword.contol.catch.cfa"      } } },
-				{ "match": "\\b(finally)\\b"        , "captures": { "1": { "name": "keyword.contol.finally.cfa"    } } },
-				{ "match": "\\b(goto)\\b"           , "captures": { "1": { "name": "keyword.contol.goto.cfa"       } } },
-				{ "match": "\\b(return)\\b"         , "captures": { "1": { "name": "keyword.contol.return.cfa"     } } },
-				{ "match": "\\b(break)\\b"          , "captures": { "1": { "name": "keyword.contol.break.cfa"      } } },
-				{ "match": "\\b(continue)\\b"       , "captures": { "1": { "name": "keyword.contol.continue.cfa"   } } },
-				{ "match": "\\b(fallthr(u|ough))\\b", "captures": { "1": { "name": "keyword.contol.fallthrough.cfa"} } },
-				{ "match": "\\b(throw(Resume)?)\\b" , "captures": { "1": { "name": "keyword.contol.throw.cfa"      } } }
-			]
-		}
-	}
-}
Index: tools/watchdog.c
===================================================================
--- tools/watchdog.c	(revision de7b7a5936cbea95b89884a56c0f081354ea2050)
+++ 	(revision )
@@ -1,175 +1,0 @@
-#include <errno.h>
-#include <fcntl.h>
-#include <getopt.h>
-#include <signal.h>
-#include <stdbool.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/select.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-char * this_cmd = NULL;
-
-void parse_args(int argc, char * argv[]);
-int run();
-void printcmd();
-
-int main(int argc, char * argv[]) {
-	parse_args(argc, argv);
-
-	int retcode = run();
-	if( !WIFEXITED(retcode) ) {
-		printf("Child Error : %d ", retcode); printcmd();
-		return retcode;
-	}
-
-	printf("Child exited normally "); printcmd();
-	return 0;
-}
-
-void usage( FILE * out, int code ) {
-	fprintf(out, "%s [OPTION] [--] N CMD\n", this_cmd);
-	fprintf(out, "Run command, killing it if it doesn't print for more than 5 continuous seconds\n\n");
-	fprintf(out, "\t-h,--help\tprint this usage message\n");
-	exit(code);
-}
-
-char ** cmd_to_run = NULL;
-pid_t child_pid = 0;
-int pipe_fds[2];
-
-void arg_error(void) {
-	fprintf(stderr,"\n");
-	usage(stderr, 1);
-}
-
-void parse_args(int argc, char * argv[]) {
-	this_cmd = argv[0];
-
-	enum { Help, };
-	static struct option long_opts[] = {
-		{ "help", no_argument, 0, Help },
-		{ 0, 0, 0, 0 }
-	}; // long_opts
-	int long_index;
-
-	int c;
-	while ( (c = getopt_long( argc, argv, "h", long_opts, &long_index)) != -1 ) {
-		switch ( c ) {
-			case Help:
-			case 'h':
-				usage(stdout, 0);
-				break;
-			default:
-				arg_error();
-				break;
-		} // switch
-	} // while
-
-	if( argc < optind + 1 ) {
-		fprintf(stderr, "Too few arguments\n");
-		arg_error();
-	}
-
-	cmd_to_run = argv + optind;
-}
-
-static void exit_handler (__attribute__((unused)) int a, __attribute__((unused)) void * b) {
-	close(pipe_fds[0]);
-	if(child_pid != 0) kill(child_pid, SIGKILL);
-}
-
-#define checked(call, ...) ({int ret = call(__VA_ARGS__); if (ret == -1) { perror(#call); exit(1); } ret;})
-
-void run_child();
-void make_noblock(int fd);
-void sink(int fd);
-int waitfd(int fd);
-
-int run() {
-	on_exit(exit_handler, NULL);
-	checked(pipe, pipe_fds);
-
-	printf("Watching command: "); printcmd();
-
-	child_pid = checked(fork);
-	if (child_pid == 0) { run_child(); }
-
-	close(pipe_fds[1]);
-	make_noblock(pipe_fds[0]);
-
-	int status;
-	while(waitpid(child_pid, &status, WNOHANG) == 0) {
-		if(waitfd(pipe_fds[0]) == 0) {
-			printf("Child Deadlocked "); printcmd();
-			exit(127);
-		}
-		sink(pipe_fds[0]);
-	}
-
-	child_pid = 0;
-	return status;
-
-	return 0;
-}
-
-void make_noblock(int fd) {
-	int flags = fcntl(fd, F_GETFL);
-	flags |= O_NONBLOCK;
-	fcntl(fd, F_SETFL, flags );
-}
-
-void sink(int fd) {
-	char buff[100];
-	int len = 100;
-	int rv;
-	do {
-		rv = read( fd, buff, len );
-	}
-	while(rv > 0);
-}
-
-int waitfd(int fd) {
-	fd_set set;
-	FD_ZERO(&set);
-	FD_SET(fd, &set);
-
-	struct timeval timeout;
-	timeout.tv_sec = 5;
-	timeout.tv_usec = 0;
-
-	int rv = select(fd + 1, &set, NULL, NULL, &timeout);
-	if(rv == -1) {
-		perror("select\n");
-		exit(1);
-	}
-	return rv;
-}
-
-void run_child() {
-	/* This is the child process. */
-	while ((dup2(pipe_fds[1], STDOUT_FILENO) == -1) && (errno == EINTR));
-
-	close(pipe_fds[1]);
-	close(pipe_fds[0]);
-
-	execvp ( *cmd_to_run, cmd_to_run);
-
-	/* The execvp  function returns only if an error occurs.  */
-	fprintf(stderr, "an error occurred in execvp\n");
-	abort ();
-}
-
-void printcmd() {
-	if(!cmd_to_run) return;
-	char ** cmd = cmd_to_run;
-	while (*cmd) {
-		printf("%s ", *cmd);
-		cmd++;
-	}
-	printf("\n");
-}
