| 
					
				 | 
			
			
				@@ -3,31 +3,35 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # This is a "compiler" for JTalk code. Run without arguments for help. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Get JTalk root directory from the location of this script. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-JTALK=`dirname ${0}`/.. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+JTALK=$(readlink -f `dirname ${0}`/..) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function usage { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	cat <<ENDOFHELP 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-Usage: $0 [-N|D] [-K|C] [-o] [-O] [-m class] [-M file] [-i] [-I file] file1 [file2 ...] [Program] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Usage: $0 [-N|D|E] [-K|C] [-o] [-O] [-m class] [-M file] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          [-i] [-I file] file1 [file2 ...] [Program] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   Will compile Jtalk files - either separately or into a runnable complete program. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   Files listed will be handled using these rules: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   Will compile Jtalk files - either separately or into a runnable complete 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   program. Files listed will be handled using these rules: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    *.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Files are concatenated in listed order. If not found we look in $JTALK/js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Files are concatenated in listed order. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     If not found we look in $JTALK/js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    *.st 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Files are compiled into .js files before concatenated. If not found we look 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     in $JTALK/st. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Files are compiled into .js files before concatenated. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     If not found we look in $JTALK/st. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      NOTE: Each file is currently considered to be a fileout of a single class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      category of the same name as the file! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   If no Program is specified each given .st file will be compiled into a .js file. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   Otherwise a <Program>.js file is linked together based on the options: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   If no Program is specified each given .st file will be compiled into 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   a .js file. Otherwise a <Program>.js file is linked together based on 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   the options: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  -N or -D 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Compile for Node.js or D8 (V8 shell). Implies "-K -i -m Main" so boot.js and Kernel.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     are added first and init.js is added last with a call to Main class>>main. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  -N or -D or -E 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Compilation target. Currently Node.js, D8 (V8 shell) or Enyo (webOS 3.0). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     All imply "-K -I" so boot.js and Kernel.js are added first and init.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     is added last. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -K 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Add libraries to get minimal JTalk Kernel running. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -36,22 +40,25 @@ Usage: $0 [-N|D] [-K|C] [-o] [-O] [-m class] [-M file] [-i] [-I file] file1 [fil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Add libraries to get minimal JTalk Compiler running. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -o 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Optimize each js file using the Google closure compiler. Using ~/compiler.jar     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Optimize each js file using the Google closure compiler. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Using Closure at ~/compiler.jar     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -O 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Optimize <Program>.js using the Google closure compiler. Using ~/compiler.jar 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Optimize final <Program>.js using the Google closure compiler. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Using Closure at ~/compiler.jar     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  -l libray1,library2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Load listed libraries (no spaces) in Compiler before compiling. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  -l library1,library2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Load listed libraries (no spaces) into Compiler before compiling. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  -L 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Loads all libraries in directory js in Compiler before compiling. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  -L library1,library2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Load listed libraries (no spaces) into Compiler before compiling and also 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     into Program.js in listed order. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -i 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Add library standard initializer $JTALK/js/init.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Add library initializer <file>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -I file 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Add library initializer <file>. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Add library standard initializer $JTALK/js/init.js   
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   -m class 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Add call to #main in class <class>.  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -62,7 +69,7 @@ Usage: $0 [-N|D] [-K|C] [-o] [-O] [-m class] [-M file] [-i] [-I file] file1 [fil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Example invocations: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     Compile Kernel.st to Kernel.js: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     Just compile Kernel.st to Kernel.js: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jtalkc Kernel.st 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -73,8 +80,8 @@ Usage: $0 [-N|D] [-K|C] [-o] [-O] [-m class] [-M file] [-i] [-I file] file1 [fil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jtalkc -N -m Hello Hello.st Program 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      Compile two .st files into corresponding .js files, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     and manually link with specific myboot.js, myKernel.js, myinit.js and main.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-     and create complete program called Program.js: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     and link with specific myboot.js, myKernel.js, myinit.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     and main.js and create complete program called Program.js: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jtalkc -M main.js -I myinit.js myboot.js myKernel.js Cat1.st Cat2.st Program 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -91,7 +98,7 @@ fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 BOOT="$JTALK/js/boot.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 KERNEL="$BOOT $JTALK/js/Kernel.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 COMPILER="$KERNEL $JTALK/js/Parser.js $JTALK/js/Compiler.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-CANVAS="$COMPILER $JTALK/js/Canvas.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+KITCHENSINK="$COMPILER $JTALK/js/Canvas.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Predefined initializer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 INITIALIZER="$JTALK/js/init.js" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -103,18 +110,20 @@ MAIN= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 MAINFILE= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 BASE=$KERNEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 LOAD= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+LOADANDADD= 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Read options and shift them away 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-while getopts "NDKCoOl:LiI:M:m:h?" o; do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+while getopts "NDEKCoOl:L:i:IM:m:h?" o; do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 case "$o" in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    N) ENV=NODE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       BASE=$KERNEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      INIT=$INITIALIZER 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      MAIN=Main;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      INIT=$INITIALIZER;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    D) ENV=D8 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       BASE=$KERNEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      INIT=$INITIALIZER 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-      MAIN=Main;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      INIT=$INITIALIZER;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   D) ENV=ENYO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      BASE=$KERNEL 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      INIT=$INITIALIZER;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    K) BASE=$KERNEL;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    C) BASE=$COMPILER;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    o) CLOSURE=true 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -122,7 +131,7 @@ case "$o" in 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    O) CLOSURE=true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       CLOSUREFULL=true;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    l) LOAD=$OPTARG;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-   L) LOAD="$JTALK/*.js";; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   L) LOADANDADD=$OPTARG;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    I) INIT=$INITIALIZER;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    i) INIT=$OPTARG;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    M) MAINFILE=$OPTARG;; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -147,17 +156,48 @@ if [ ! -z $CLOSURE ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Define our Compiler 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# We need to add extra listed libraries in $LOAD not already in $CANVAS 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-OURCOMPILER="$CANVAS $JTALK/js/init.js $JTALK/nodejs/nodecompile.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Function for looking up listed js files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function resolvejs { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if [ -f "$1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    RESOLVED="$1"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if [ -f $JTALK/js/$1 ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      RESOLVED="$JTALK/js/$1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      echo "Javascript file not found: $1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      exit 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Resolve listed libraries in $LOAD separated by spaces 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+LOAD=${LOAD//,/\ } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+for FILE in $LOAD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   resolvejs $FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   TOLOAD="$TOLOAD $RESOLVED" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Resolve listed libraries in $LOADANDADD separated by spaces 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+LOADANDADD=${LOADANDADD//,/\ } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+for FILE in $LOADANDADD 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   resolvejs $FILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   TOLOAD="$TOLOAD $RESOLVED" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+   TOADD="$TOADD $RESOLVED" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Define our Compiler loading supplied libraries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+OURCOMPILER="$KITCHENSINK $TOLOAD $JTALK/js/init.js $JTALK/nodejs/nodecompile.js" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-# Combine supplied libraries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-LIBS="$BASE $ADDONS" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+# Add supplied libraries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+LIBS="$BASE $TOADD" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Get a unique tempdir and make it get auto removed on exit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 TMPDIR=`mktemp -d` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 trap "rm -rf $TMPDIR" EXIT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # -------------------------------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Collect libraries and Smalltalk files looking 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # both locally and in $JTALK/js and $JTALK/st  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -183,16 +223,8 @@ do 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      *.js) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if [ -f "$1" ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           LIBS="$LIBS $1"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           if [ -f $JTALK/js/$1 ]; then 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             LIBS="$LIBS $JTALK/js/$1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             echo "Javascript file not found: $1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-             exit 1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-           fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        fi 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        resolvejs $1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	LIBS="$LIBS $RESOLVED"  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ;; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       *) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         # Will end up being the last non js/st argument 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -210,7 +242,7 @@ done 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 cat $OURCOMPILER > $TMPDIR/compiler.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Compile all collected .st files to .js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-echo "Compiling ..." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+echo "Loading libraries $KITCHENSINK $TOLOAD and compiling ..." 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 node $TMPDIR/compiler.js $COMPILE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # Verify all .js files corresponding to .st files were created, otherwise exit 
			 |