Index: .gitignore
===================================================================
--- .gitignore	(revision b7c89aa056ef3d9dc8449e3fffed9f66627276e5)
+++ .gitignore	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -56,4 +56,5 @@
 src/Parser/parser.h
 src/Parser/parser.hh
+src/demangler
 
 tools/prettyprinter/parser.output
Index: doc/theses/aaron_moss/phd/.gitignore
===================================================================
--- doc/theses/aaron_moss/phd/.gitignore	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/.gitignore	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,8 @@
+thesis.pdf
+thesis.aux
+thesis.bbl
+thesis.blg
+thesis.log
+thesis.out
+thesis.toc
+templates/
Index: doc/theses/aaron_moss/phd/Makefile
===================================================================
--- doc/theses/aaron_moss/phd/Makefile	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/Makefile	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,23 @@
+LATEX = pdflatex -interaction=nonstopmode
+BIBTEX = bibtex
+
+BASE = thesis
+DOCUMENT = ${BASE}.pdf
+AUX = ${BASE}.aux ${BASE}.bbl ${BASE}.blg ${BASE}.log ${BASE}.out ${BASE}.toc
+
+.PHONY : all rebuild-refs clean
+
+all : ${DOCUMENT}
+
+clean : 
+	@rm -frv ${DOCUMENT} ${AUX}
+
+${DOCUMENT} :
+	${LATEX} ${BASE}
+	${LATEX} ${BASE}
+
+rebuild-refs : 
+	${LATEX} ${BASE}
+	${BIBTEX} ${BASE}
+	${LATEX} ${BASE}
+	${LATEX} ${BASE}
Index: doc/theses/aaron_moss/phd/aaron-thesis.bib
===================================================================
--- doc/theses/aaron_moss/phd/aaron-thesis.bib	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/aaron-thesis.bib	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,57 @@
+%    Predefined journal names:
+%  acmcs: Computing Surveys		acta: Acta Infomatica
+@string{acta="Acta Infomatica"}
+%  cacm: Communications of the ACM
+%  ibmjrd: IBM J. Research & Development ibmsj: IBM Systems Journal
+%  ieeese: IEEE Trans. on Soft. Eng.	ieeetc: IEEE Trans. on Computers
+%  ieeetcad: IEEE Trans. on Computer-Aided Design of Integrated Circuits
+%  ipl: Information Processing Letters	jacm: Journal of the ACM
+%  jcss: J. Computer & System Sciences	scp: Science of Comp. Programming
+%  sicomp: SIAM J. on Computing		tocs: ACM Trans. on Comp. Systems
+%  tods: ACM Trans. on Database Sys.	tog: ACM Trans. on Graphics
+%  toms: ACM Trans. on Math. Software	toois: ACM Trans. on Office Info. Sys.
+%  toplas: ACM Trans. on Prog. Lang. & Sys.
+%  tcs: Theoretical Computer Science
+@string{ieeepds="IEEE Transactions on Parallel and Distributed Systems"}
+@string{ieeese="IEEE Transactions on Software Engineering"}
+@string{spe="Software---\-Practice and Experience"}
+@string{ccpe="Concurrency and Computation: Practice and Experience"}
+@string{sigplan="SIGPLAN Notices"}
+@string{joop="Journal of Object-Oriented Programming"}
+@string{popl="Conference Record of the ACM Symposium on Principles of Programming Languages"}
+@string{osr="Operating Systems Review"}
+@string{pldi="Programming Language Design and Implementation"}
+@string{toplas="Transactions on Programming Languages and Systems"}
+@string{mathann="Mathematische Annalen"}
+
+@mastersthesis{Bilson03,
+    keywords	= {Cforall, parametric polymorphism, overloading},
+    contributer	= {pabuhr@plg},
+    author	= {Richard C. Bilson},
+    title	= {Implementing Overloading and Polymorphism in \textsf{C}$\mathbf{\forall}$},
+    school	= {School of Computer Science, University of Waterloo},
+    year	= 2003,
+    address	= {Waterloo, Ontario, Canada, N2L 3G1},
+    note	= {\href{http://plg.uwaterloo.ca/theses/BilsonThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-BilsonThesis.pdf}},
+}
+
+@phdthesis{Ditchfield92,
+    keywords	= {C, parametric polymorphism, overloading},
+    contributer	= {pabuhr@plg},
+    author	= {Glen Jeffrey Ditchfield},
+    title	= {Contextual Polymorphism},
+    school	= {Department of Computer Science, University of Waterloo},
+    year	= 1992,
+    address	= {Waterloo, Ontario, Canada, N2L 3G1},
+    note	= {\href{http://plg.uwaterloo.ca/theses/DitchfieldThesis.pdf}{http://\-plg.uwaterloo.ca/\-theses/\-DitchfieldThesis.pdf}}
+}
+
+@article{Moss18,
+    keywords	= {concurrency, C++},
+    contributer	= {pabuhr@plg},
+    author	= {Aaron Moss and Robert Schluntz and Peter A. Buhr},
+    title	= {\textsf{C}$\mathbf{\forall}$ : Adding Modern Programming Language Features to C},
+    year	= 2018,
+    journal	= spe,
+    note	= {Accepted, to appear},
+}
Index: doc/theses/aaron_moss/phd/background.tex
===================================================================
--- doc/theses/aaron_moss/phd/background.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/background.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Background}
+
+This is the background. Basically, need to cite Ditchfield\cite{Ditchfield92}, Bilson\cite{Bilson03}, and Moss~\etal\cite{Moss18}
Index: doc/theses/aaron_moss/phd/conclusion.tex
===================================================================
--- doc/theses/aaron_moss/phd/conclusion.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/conclusion.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Conclusion}
+
+Wrap it up! Done, done done!
Index: doc/theses/aaron_moss/phd/frontpgs.tex
===================================================================
--- doc/theses/aaron_moss/phd/frontpgs.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/frontpgs.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,174 @@
+% T I T L E   P A G E
+% -------------------
+
+% The title page is counted as page `i' but we need to suppress the
+% page number. Also, we don't want any headers or footers.
+\pagestyle{empty}
+\pagenumbering{roman}
+
+% The contents of the title page are specified in the "titlepage"
+% environment.
+\begin{titlepage}
+	\begin{center}
+	\vspace*{1.0cm}
+
+	\Huge
+	{\bf \CFA{} Type System Implementation }
+
+	\vspace*{1.0cm}
+
+	\normalsize
+	by \\
+
+	\vspace*{1.0cm}
+
+	\Large
+	Aaron Moss \\
+
+	\vspace*{3.0cm}
+
+	\normalsize
+	A thesis \\
+	presented to the University of Waterloo \\ 
+	in fulfillment of the \\
+	thesis requirement for the degree of \\
+	Doctor of Philosophy \\
+	in \\
+	Computer Science \\
+
+	\vspace*{2.0cm}
+
+	Waterloo, Ontario, Canada, 2019 \\
+
+	\vspace*{1.0cm}
+
+	\copyright\ Aaron Moss 2019 \\
+	\end{center}
+\end{titlepage}
+
+% The rest of the front pages should contain no headers and be numbered using Roman numerals starting with `ii'
+\pagestyle{plain}
+\setcounter{page}{2}
+
+\cleardoublepage % Ends the current page and causes all figures and tables that have so far appeared in the input to be printed.
+% In a two-sided printing style, it also makes the next page a right-hand (odd-numbered) page, producing a blank page if necessary.
+
+% E X A M I N I N G   C O M M I T T E E
+% -------------------------------------
+
+\begin{center}\textbf{Examining Committee Membership}\end{center}
+	\noindent
+  The following served on the Examining Committee for this thesis. The decision of the Examining Committee is by majority vote.
+	\bigskip
+	
+% 	\noindent
+%   \begin{tabbing}
+%   Internal-External Member: \=  \kill % using longest text to define tab length
+%   External Examiner: \>  Bruce Bruce \\ 
+%   \> Professor, Dept. of Philosophy of Zoology, University of Wallamaloo \\
+%   \end{tabbing} 
+% 	\bigskip
+	
+	\noindent
+  \begin{tabbing}
+  Internal-External Member: \=  \kill % using longest text to define tab length
+  Supervisor: \> Peter Buhr \\
+  \> Professor, School of Computer Science, University of Waterloo \\
+  \end{tabbing}
+	\bigskip
+	
+	\noindent
+  \begin{tabbing}
+  Internal-External Member: \=  \kill % using longest text to define tab length
+  Internal Members: \> Gregor Richards \\
+  \> Professor, School of Computer Science, University of Waterloo \\
+  \> Ond\v{r}ej Lhot\a'ak \\
+  \> Professor, School of Computer Science, University of Waterloo \\
+  \end{tabbing}
+% 	\bigskip
+	
+% 	\noindent
+%   \begin{tabbing}
+%   Internal-External Member: \=  \kill % using longest text to define tab length
+%   Internal-External Member: \> Deepa Thotta \\
+%   \> Professor, Dept. of Philosophy, University of Waterloo \\
+%   \end{tabbing}
+% 	\bigskip
+	
+% 	\noindent
+%   \begin{tabbing}
+%   Internal-External Member: \=  \kill % using longest text to define tab length
+%   Other Member(s): \> Leeping Fang \\
+%   \> Professor, Dept. of Fine Art, University of Waterloo \\
+%   \end{tabbing}
+  
+  \cleardoublepage
+
+% D E C L A R A T I O N   P A G E
+% -------------------------------
+  % The following is a sample Delaration Page as provided by the GSO
+  % December 13th, 2006.  It is designed for an electronic thesis.
+  \noindent
+I hereby declare that I am the sole author of this thesis. This is a true copy of the thesis, including any required final revisions, as accepted by my examiners.
+
+  \bigskip
+  
+  \noindent
+I understand that my thesis may be made electronically available to the public.
+
+\cleardoublepage
+
+% A B S T R A C T
+% ---------------
+
+\begin{center}\textbf{Abstract}\end{center}
+
+This is the abstract.
+
+\cleardoublepage
+
+% A C K N O W L E D G E M E N T S
+% -------------------------------
+
+% \begin{center}\textbf{Acknowledgements}\end{center}
+
+% I would like to thank all the little people who made this thesis possible.
+% \cleardoublepage
+
+% D E D I C A T I O N
+% -------------------
+
+% \begin{center}\textbf{Dedication}\end{center}
+
+% This is dedicated to the one I love.
+% \cleardoublepage
+
+% T A B L E   O F   C O N T E N T S
+% ---------------------------------
+\renewcommand\contentsname{Table of Contents}
+\tableofcontents
+\cleardoublepage
+\phantomsection    % allows hyperref to link to the correct page
+
+% L I S T   O F   T A B L E S
+% ---------------------------
+% \addcontentsline{toc}{chapter}{List of Tables}
+% \listoftables
+% \cleardoublepage
+% \phantomsection		% allows hyperref to link to the correct page
+
+% L I S T   O F   F I G U R E S
+% -----------------------------
+% \addcontentsline{toc}{chapter}{List of Figures}
+% \listoffigures
+% \cleardoublepage
+% \phantomsection		% allows hyperref to link to the correct page
+
+% GLOSSARIES (Lists of definitions, abbreviations, symbols, etc. provided by the glossaries-extra package)
+% -----------------------------
+% \printglossaries
+% \cleardoublepage
+% \phantomsection		% allows hyperref to link to the correct page
+
+% Change page numbering back to Arabic numerals
+\pagenumbering{arabic}
Index: doc/theses/aaron_moss/phd/generic-types.tex
===================================================================
--- doc/theses/aaron_moss/phd/generic-types.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/generic-types.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Generic Types}
+
+Talk about generic types. Pull from Moss~\etal\cite{Moss18}.
Index: doc/theses/aaron_moss/phd/introduction.tex
===================================================================
--- doc/theses/aaron_moss/phd/introduction.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/introduction.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Introduction}
+
+This is the introduction.
Index: doc/theses/aaron_moss/phd/macros.tex
===================================================================
--- doc/theses/aaron_moss/phd/macros.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/macros.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,10 @@
+% Common macros for this thesis
+% Based on LaTeXmacros/common.tex
+
+\newcommand{\CFAIcon}{\textsf{C}\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}} % Cforall symbolic name
+\newcommand{\CFA}{\protect\CFAIcon}		% safe for section/caption
+
+\newcommand{\ie}{\textit{i.e.}}
+\newcommand{\eg}{\textit{e.g.}}
+\newcommand{\etc}{\textit{etc.}}
+\newcommand{\etal}{\textit{et~al.}}
Index: doc/theses/aaron_moss/phd/resolution-heuristics.tex
===================================================================
--- doc/theses/aaron_moss/phd/resolution-heuristics.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/resolution-heuristics.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Resolution Heuristics}
+
+Talk about the resolution heuristics. This is the bulk of the thesis.
Index: doc/theses/aaron_moss/phd/thesis.tex
===================================================================
--- doc/theses/aaron_moss/phd/thesis.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/thesis.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,149 @@
+% Specify the document class, default style attributes, and page dimensions
+% For hyperlinked PDF, suitable for viewing on a computer, use this:
+\documentclass[letterpaper,12pt,titlepage,oneside,final]{book}
+
+% For PDF, suitable for double-sided printing, change the PrintVersion variable below
+% to "true" and use this \documentclass line instead of the one above:
+%\documentclass[letterpaper,12pt,titlepage,openright,twoside,final]{book}
+
+% common macros for this thesis
+\input{macros}
+
+\newcommand{\href}[1]{#1} % does nothing, but defines the command so the
+% print-optimized version will ignore \href tags (redefined by hyperref pkg).
+
+% This package allows if-then-else control structures.
+\usepackage{ifthen}
+\newboolean{PrintVersion}
+\setboolean{PrintVersion}{false} 
+% CHANGE THIS VALUE TO "true" as necessary, to improve printed results for hard copies
+% by overriding some options of the hyperref package below.
+
+\usepackage{amsmath,amssymb,amstext} % Lots of math symbols and environments
+\usepackage[pdftex]{graphicx} % For including graphics N.B. pdftex graphics driver 
+
+% Hyperlinks make it very easy to navigate an electronic document.
+% In addition, this is where you should specify the thesis title
+% and author as they appear in the properties of the PDF document.
+% Use the "hyperref" package 
+% N.B. HYPERREF MUST BE THE LAST PACKAGE LOADED; ADD ADDITIONAL PKGS ABOVE
+\usepackage[pdftex,pagebackref=false]{hyperref} % with basic options
+% N.B. pagebackref=true provides links back from the References to the body text. This can cause trouble for printing.
+
+\hypersetup{
+	plainpages=false,       % needed if Roman numbers in frontpages
+	unicode=false,          % non-Latin characters in Acrobat’s bookmarks
+	pdftoolbar=true,        % show Acrobat’s toolbar?
+	pdfmenubar=true,        % show Acrobat’s menu?
+	pdffitwindow=false,     % window fit to page when opened
+	pdfstartview={FitH},    % fits the width of the page to the window
+	pdftitle={Cforall\ Type\ System\ Implementation},    % title
+    pdfauthor={Aaron\ Moss}, % author
+    pdfsubject={Cforall},  % subject
+%    pdfkeywords={keyword1} {key2} {key3}, % list of keywords, and uncomment this line if desired
+	pdfnewwindow=true,      % links in new window
+	colorlinks=true,        % false: boxed links; true: colored links
+	linkcolor=blue,         % color of internal links
+	citecolor=green,        % color of links to bibliography
+	filecolor=magenta,      % color of file links
+	urlcolor=cyan           % color of external links
+}
+\ifthenelse{\boolean{PrintVersion}}{   % for improved print quality, change some hyperref options
+\hypersetup{	% override some previously defined hyperref options
+%    colorlinks,%
+	citecolor=black,%
+	filecolor=black,%
+	linkcolor=black,%
+	urlcolor=black}
+}{} % end of ifthenelse (no else)
+
+% \usepackage[automake,toc,abbreviations]{glossaries-extra} % Exception to the rule of hyperref being the last add-on package
+
+% Setting up the page margins...
+% uWaterloo thesis requirements specify a minimum of 1 inch (72pt) margin at the
+% top, bottom, and outside page edges and a 1.125 in. (81pt) gutter
+% margin (on binding side). While this is not an issue for electronic
+% viewing, a PDF may be printed, and so we have the same page layout for
+% both printed and electronic versions, we leave the gutter margin in.
+% Set margins to minimum permitted by uWaterloo thesis regulations:
+\setlength{\marginparwidth}{0pt} % width of margin notes
+% N.B. If margin notes are used, you must adjust \textwidth, \marginparwidth
+% and \marginparsep so that the space left between the margin notes and page
+% edge is less than 15 mm (0.6 in.)
+\setlength{\marginparsep}{0pt} % width of space between body text and margin notes
+\setlength{\evensidemargin}{0.125in} % Adds 1/8 in. to binding side of all 
+% even-numbered pages when the "twoside" printing option is selected
+\setlength{\oddsidemargin}{0.125in} % Adds 1/8 in. to the left of all pages
+% when "oneside" printing is selected, and to the left of all odd-numbered
+% pages when "twoside" printing is selected
+\setlength{\textwidth}{6.375in} % assuming US letter paper (8.5 in. x 11 in.) and 
+% side margins as above
+\raggedbottom
+
+% The following statement specifies the amount of space between
+% paragraphs. Other reasonable specifications are \bigskipamount and \smallskipamount.
+\setlength{\parskip}{\medskipamount}
+
+% The following statement controls the line spacing.  The default
+% spacing corresponds to good typographic conventions and only slight
+% changes (e.g., perhaps "1.2"), if any, should be made.
+\renewcommand{\baselinestretch}{1} % this is the default line space setting
+
+% By default, each chapter will start on a recto (right-hand side)
+% page.  We also force each section of the front pages to start on 
+% a recto page by inserting \cleardoublepage commands.
+% In many cases, this will require that the verso page be
+% blank and, while it should be counted, a page number should not be
+% printed.  The following statements ensure a page number is not
+% printed on an otherwise blank verso page.
+\let\origdoublepage\cleardoublepage
+\newcommand{\clearemptydoublepage}{%
+  \clearpage{\pagestyle{empty}\origdoublepage}}
+\let\cleardoublepage\clearemptydoublepage
+
+%======================================================================
+%   L O G I C A L    D O C U M E N T
+%======================================================================
+\begin{document}
+
+%----------------------------------------------------------------------
+% FRONT MATERIAL
+%----------------------------------------------------------------------
+\input{frontpgs}
+
+%----------------------------------------------------------------------
+% MAIN BODY
+%----------------------------------------------------------------------
+\input{introduction}
+\input{background}
+\input{generic-types}
+\input{type-environment}
+\input{resolution-heuristics}
+\input{conclusion}
+
+% B I B L I O G R A P H Y
+% -----------------------
+
+% The following statement selects the style to use for references.  It controls the sort order of the entries in the bibliography and also the formatting for the in-text labels.
+\bibliographystyle{plain}
+% This specifies the location of the file containing the bibliographic information.  
+% It assumes you're using BibTeX (if not, why not?).
+\cleardoublepage % This is needed if the book class is used, to place the anchor in the correct page,
+                 % because the bibliography will start on its own page.
+                 % Use \clearpage instead if the document class uses the "oneside" argument
+\phantomsection  % With hyperref package, enables hyperlinking from the table of contents to bibliography             
+% The following statement causes the title "References" to be used for the bibliography section:
+\renewcommand*{\bibname}{References}
+
+% Add the References to the Table of Contents
+\addcontentsline{toc}{chapter}{\textbf{References}}
+
+\bibliography{aaron-thesis}
+% Tip 5: You can create multiple .bib files to organize your references. 
+% Just list them all in the \bibliogaphy command, separated by commas (no spaces).
+
+% The following statement causes the specified references to be added to the bibliography% even if they were not 
+% cited in the text. The asterisk is a wildcard that causes all entries in the bibliographic database to be included (optional).
+% \nocite{*}
+
+\end{document}
Index: doc/theses/aaron_moss/phd/type-environment.tex
===================================================================
--- doc/theses/aaron_moss/phd/type-environment.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
+++ doc/theses/aaron_moss/phd/type-environment.tex	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -0,0 +1,3 @@
+\chapter{Type Environment}
+
+Talk about the type environment data structure. Pull from your presentation.
Index: driver/as.cc
===================================================================
--- driver/as.cc	(revision b7c89aa056ef3d9dc8449e3fffed9f66627276e5)
+++ driver/as.cc	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -10,6 +10,6 @@
 // Created On       : Wed Aug  1 10:49:42 2018
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Aug  2 17:50:09 2018
-// Update Count     : 90
+// Last Modified On : Wed Aug 22 17:30:24 2018
+// Update Count     : 93
 // 
 
@@ -23,4 +23,9 @@
 
 //#define __DEBUG_H__
+
+#ifdef __DEBUG_H__
+#include <iostream>
+using namespace std;
+#endif // __DEBUG_H__
 
 int main( const int argc, const char * argv[] ) {
Index: driver/cc1.cc
===================================================================
--- driver/cc1.cc	(revision b7c89aa056ef3d9dc8449e3fffed9f66627276e5)
+++ driver/cc1.cc	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -10,6 +10,6 @@
 // Created On       : Fri Aug 26 14:23:51 2005
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 19 10:46:11 2018
-// Update Count     : 111
+// Last Modified On : Thu Aug 23 09:48:40 2018
+// Update Count     : 122
 //
 
@@ -47,21 +47,27 @@
 const string suffixes[NumSuffixes] = { "cfa", "hfa", };
 
-bool suffix( string arg ) {
+
+void suffix( string arg, const char * args[], int & nargs ) {
 	//std::cerr << arg << std::endl;
 	size_t dot = arg.find_last_of( "." );
 	//std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
-	if ( dot == string::npos ) return false;
+	if ( dot == string::npos ) return;
 	string sx = arg.substr( dot + 1 );
 	for ( int i = 0; i < NumSuffixes; i += 1 ) {
-		if ( sx == suffixes[i] ) return true;
-	} // for
-	return false;
+		if ( sx == suffixes[i] ) {
+			args[nargs] = "-x";
+			nargs += 1;
+			args[nargs] = "c";
+			nargs += 1;
+			return;
+		} // if
+	} // for
 } // suffix
 
 
-void checkEnv( const char *args[], int &nargs ) {
+void checkEnv( const char * args[], int & nargs ) {
 	char *value;
 
-	value = getenv( "__COMPILER__" );
+	value = getenv( "__CFA_COMPILER__" );
 	if ( value != NULL ) {
 		compiler_name = value;
@@ -263,4 +269,5 @@
 
 		args[0] = compiler_name.c_str();
+		suffix( cpp_in, args, nargs );					// check suffix
 		args[nargs] = cpp_in;
 		nargs += 1;
@@ -310,10 +317,5 @@
 
 		args[0] = compiler_name.c_str();
-		if ( suffix( cpp_in ) ) {
-			args[nargs] = "-x";
-			nargs += 1;
-			args[nargs] = "c";
-			nargs += 1;
-		} // if
+		suffix( cpp_in, args, nargs );					// check suffix
 		args[nargs] = cpp_in;							// input to cpp
 		nargs += 1;
@@ -354,5 +356,5 @@
 
 	if ( fork() == 0 ) {								// child runs CFA
-		cargs[0] = ( *new string( bprefix + "/cfa-cpp" ) ).c_str();
+		cargs[0] = ( *new string( bprefix + "cfa-cpp" ) ).c_str();
 
 		// Source file-name used to generate routine names containing global initializations for TU.
Index: driver/cfa.cc
===================================================================
--- driver/cfa.cc	(revision b7c89aa056ef3d9dc8449e3fffed9f66627276e5)
+++ driver/cfa.cc	(revision 381bea69eb8b86074ee4096b96a9b80542346e12)
@@ -10,6 +10,6 @@
 // Created On       : Tue Aug 20 13:44:49 2002
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Aug 10 18:17:58 2018
-// Update Count     : 259
+// Last Modified On : Thu Aug 23 15:41:55 2018
+// Update Count     : 270
 //
 
@@ -43,14 +43,19 @@
 const string suffixes[NumSuffixes] = { "cfa", "hfa", };
 
-bool suffix( string arg ) {
+void suffix( string arg, const char * args[], int & nargs ) {
 	//std::cerr << arg << std::endl;
 	size_t dot = arg.find_last_of( "." );
 	//std::cerr << dot << " " << (dot != string::npos ? arg.substr( dot + 1 ) : "fred" ) << std::endl;
-	if ( dot == string::npos ) return false;
+	if ( dot == string::npos ) return;
 	string sx = arg.substr( dot + 1 );
 	for ( int i = 0; i < NumSuffixes; i += 1 ) {
-		if ( sx == suffixes[i] ) return true;
+		if ( sx == suffixes[i] ) {
+			args[nargs] = "-x";
+			nargs += 1;
+			args[nargs] = "c";
+			nargs += 1;
+			return;
+		} // if
 	} // for
-	return false;
 } // suffix
 
@@ -86,7 +91,7 @@
 	string Major( str( CFA_VERSION_MAJOR ) ), Minor( str( CFA_VERSION_MINOR ) ), Patch( str( CFA_VERSION_PATCH ) );
 
-	string installincdir( CFA_INCDIR );                         // fixed location of include files
-	string installlibdir( CFA_LIBDIR );                         // fixed location of cc1 and cfa-cpp commands when installed
-	string srcdriverdir ( TOP_BUILDDIR "driver");                // fixed location of cc1 and cfa-cpp commands when in tree
+	string installincdir( CFA_INCDIR );					// fixed location of include files
+	string installlibdir( CFA_LIBDIR );					// fixed location of cc1 and cfa-cpp commands when installed
+	string srcdriverdir ( TOP_BUILDDIR "driver");		// fixed location of cc1 and cfa-cpp commands when in tree
 
 	string heading;										// banner printed at start of cfa compilation
@@ -178,5 +183,5 @@
 				if ( i == argc ) continue;				// next argument available ?
 				compiler_path = argv[i];
-				if ( putenv( (char *)( *new string( string( "__U_COMPILER__=" ) + argv[i]) ).c_str() ) != 0 ) {
+				if ( putenv( (char *)( *new string( string( "__CFA_COMPILER__=" ) + argv[i]) ).c_str() ) != 0 ) {
 					cerr << argv[0] << " error, cannot set environment variable." << endl;
 					exit( EXIT_FAILURE );
@@ -294,9 +299,6 @@
 		} else {
 			bool opt = false;
-			if ( ! xflag && suffix( arg ) ) {
-				args[nargs] = "-x";
-				nargs += 1;
-				args[nargs] = "c";
-				nargs += 1;
+			if ( ! xflag ) {
+				suffix( arg, args, nargs );				// check suffix
 				// args[nargs] = ( *new string( string("-D__GCC_X__=c") ) ).c_str(); // add the argument for -x
 				// nargs += 1;
@@ -341,16 +343,16 @@
 		args[nargs] = "-I" CFA_INCDIR;
 		nargs += 1;
-		if ( ! noincstd_flag ) {							// do not use during build
-			args[nargs] = "-I" CFA_INCDIR "/stdhdr";
+		if ( ! noincstd_flag ) {						// do not use during build
+			args[nargs] = "-I" CFA_INCDIR "stdhdr";
 			nargs += 1;
 		} // if
-		args[nargs] = "-I" CFA_INCDIR "/concurrency";
-		nargs += 1;
-		args[nargs] = "-I" CFA_INCDIR "/containers";
+		args[nargs] = "-I" CFA_INCDIR "concurrency";
+		nargs += 1;
+		args[nargs] = "-I" CFA_INCDIR "containers";
 		nargs += 1;
 	} else {
 		args[nargs] = "-I" TOP_SRCDIR "libcfa/src";
 		nargs += 1;
-		if ( ! noincstd_flag ) {							// do not use during build
+		if ( ! noincstd_flag ) {						// do not use during build
 			args[nargs] = "-I" TOP_SRCDIR "libcfa/src" "/stdhdr";
 			nargs += 1;
@@ -377,18 +379,23 @@
 	}
 
-	const char * const arch = m32 ? CFA_32_CPU : (m64 ? CFA_64_CPU : CFA_DEFAULT_CPU);
+	string arch = m32 ? CFA_32_CPU : (m64 ? CFA_64_CPU : CFA_DEFAULT_CPU);
+	if ( ! m32 && ! m64 && arch == "x86" ) {			// no override and 32-bit architecture
+		args[nargs] = "-m32";
+		nargs += 1;
+	} // if
 	const char * config = debug ? "debug": "nodebug";
 	string libdir = libbase + arch + "-" + config;
-	if( !dirExists(libdir) ) {
+
+	if ( ! dirExists( libdir ) ) {
 		cerr << argv[0] << " internal error, configuration " << config << " not installed." << endl;
 		cerr << "Was looking for " << libdir << endl;
 		libdir = libbase + arch + "-" + "nolib";
-	}
-
-	if( !dirExists(libdir) ) {
+	} // if
+
+	if ( ! dirExists( libdir ) ) {
 		cerr << argv[0] << " internal error, cannot find prelude directory." << endl;
 		cerr << "Was looking for " << libdir << endl;
 		exit( EXIT_FAILURE );
-	}
+	} // if
 
 	args[nargs] = ( *new string( string("-D__CFA_FLAG__=--prelude-dir=" ) + libdir + (intree ? "/prelude" : "")) ).c_str();
@@ -470,5 +477,6 @@
 
 	if ( Bprefix.length() == 0 ) {
-		Bprefix = !intree ? installlibdir : srcdriverdir;
+		Bprefix = ! intree ? installlibdir : srcdriverdir;
+		if ( Bprefix[Bprefix.length() - 1] != '/' ) Bprefix += '/';
 		args[nargs] = ( *new string( string("-D__GCC_BPREFIX__=") + Bprefix ) ).c_str();
 		nargs += 1;
@@ -504,5 +512,5 @@
 		args[nargs] = "-D__int8_t_defined";				// prevent gcc type-size attributes
 		nargs += 1;
-		args[nargs] = ( *new string( string("-B") + Bprefix + "/" ) ).c_str();
+		args[nargs] = ( *new string( string("-B") + Bprefix ) ).c_str();
 		nargs += 1;
 		args[nargs] = "-lm";
