~ chicken-core (chicken-5) 00593363b7610b00a0f887a40029c64c77acec18


commit 00593363b7610b00a0f887a40029c64c77acec18
Author:     Evan Hanson <evhan@foldling.org>
AuthorDate: Tue Apr 7 08:23:43 2015 +1200
Commit:     Evan Hanson <evhan@foldling.org>
CommitDate: Mon Oct 26 09:48:31 2015 +1300

    Make the "-module" option take the module name as an argument
    
    Allows specifying the module name at the command line, aliases this
    option as "-m", and adds a "-main-module" option (aliased as "-M") that
    provides the old behaviour (a default module name of "main").
    
    Also removes the long-since-deprecated "-scrutinize" option and fixes a
    missing import of c.c.support in chicken.scm (for `quit-compiling`, and
    possibly other procedures).

diff --git a/NEWS b/NEWS
index 386f100f..2bb0a0c1 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,9 @@
 
 - Compiler
   - Fixed an off by one allocation problem in generated C code for (list ...).
+  - The "-scrutinize" compiler option has been removed.
+  - The "-module" compiler option (aliased as "-m") now expects a module
+    name, with the new "-main-module" (or "-M") option defaulting to "main".
 
 - Core libraries
   - Removed support for memory-mapped files (posix), queues (data-structures),
diff --git a/batch-driver.scm b/batch-driver.scm
index 82351f9d..31de3359 100644
--- a/batch-driver.scm
+++ b/batch-driver.scm
@@ -223,8 +223,11 @@
 	(dumpnodes #f)
 	(start-time #f)
 	(upap #f)
-	(wrap-module (memq 'module options))
-	(ssize (or (memq 'nursery options) (memq 'stack-size options))) )
+	(ssize (or (memq 'nursery options) (memq 'stack-size options)))
+	(module-name
+	 (cond ((memq 'module options) => option-arg)
+	       ((memq 'main-module options) "main")
+	       (else #f))))
 
     (define (cputime) (current-milliseconds))
 
@@ -567,11 +570,11 @@
 	   ;; Canonicalize s-expressions
 	   (let* ((exps0 (map canonicalize-expression
 			      (let ((forms (append initforms forms)))
-				(if wrap-module
-				    `((##core#module main () 
-						     (import scheme chicken)
-						     ,@forms))
-				    forms))))
+				(if (not module-name)
+				    forms
+				    `((##core#module
+				       ,(string->symbol module-name) ()
+				       ,@forms))))))
 		  (exps (append
 			 (map (lambda (ic) `(set! ,(cdr ic) ',(car ic))) immutable-constants)
 			 (map (lambda (n) `(##core#callunit ,n)) used-units)
diff --git a/c-platform.scm b/c-platform.scm
index 7ba952bd..4089dc73 100644
--- a/c-platform.scm
+++ b/c-platform.scm
@@ -95,10 +95,9 @@
     compile-syntax tag-pointers accumulate-profile
     disable-stack-overflow-checks raw specialize
     emit-external-prototypes-first release local inline-global
-    analyze-only dynamic 
-    scrutinize 				; OBSOLETE
+    analyze-only dynamic main-module
     no-argc-checks no-procedure-checks no-parentheses-synonyms
-    no-procedure-checks-for-toplevel-bindings module
+    no-procedure-checks-for-toplevel-bindings
     no-bound-checks no-procedure-checks-for-usual-bindings no-compiler-syntax
     no-parentheses-synonyms no-symbol-escape r5rs-syntax emit-all-import-libraries
     strict-types clustering lfa2
@@ -106,8 +105,8 @@
 
 (define valid-compiler-options-with-argument
   '(debug 
-    output-file include-path heap-size stack-size unit uses keyword-style require-extension 
-    inline-limit profile-name 
+    output-file include-path heap-size stack-size unit uses module
+    keyword-style require-extension inline-limit profile-name
     prelude postlude prologue epilogue nursery extend feature no-feature types
     emit-import-library emit-inline-file static-extension consult-inline-file
     emit-type-file
diff --git a/chicken.scm b/chicken.scm
index fac1817d..b55c7c6e 100644
--- a/chicken.scm
+++ b/chicken.scm
@@ -37,6 +37,7 @@
 
 (import chicken.compiler.batch-driver 
 	chicken.compiler.c-platform
+	chicken.compiler.support
 	chicken.data-structures
 	chicken.utils)
 
@@ -138,12 +139,12 @@
 			       options) ) ) ) )
 		 (loop (cdr rest)) ) )
 	      ((eq? 'debug-level o)
-	       (let ((level (string->number (car rest))))
-		 (case level
-		   ((0) (set! options (cons* 'no-lambda-info 'no-trace options)))
-		   ((1) (set! options (cons 'no-trace options)))
-		   (else (set! options (cons 'scrutinize options))))
-		 (loop (cdr rest)) ) )
+	       (case (string->number (car rest))
+		 ((0) (set! options (cons* 'no-lambda-info 'no-trace options)))
+		 ((1) (set! options (cons 'no-trace options)))
+		 ((2)) ; default behaviour
+		 (else (quit-compiling "invalid debug level: ~a" (car rest))))
+	       (loop (cdr rest)))
 	      ((memq o valid-compiler-options) (loop rest))
 	      ((memq o valid-compiler-options-with-argument)
 	       (if (pair? rest)
diff --git a/csc.scm b/csc.scm
index 44c9f4dd..243cfdce 100644
--- a/csc.scm
+++ b/csc.scm
@@ -147,12 +147,12 @@
     -check-syntax -case-insensitive -shared -compile-syntax -no-lambda-info
     -dynamic -disable-stack-overflow-checks -local
     -emit-external-prototypes-first -inline -release 
-    -scrutinize				; OBSOLETE
+    -main-module
     -analyze-only -keep-shadowed-macros -inline-global -ignore-repository
     -no-symbol-escape -no-parentheses-synonyms -r5rs-syntax
     -no-argc-checks -no-bound-checks -no-procedure-checks -no-compiler-syntax
     -emit-all-import-libraries -setup-mode -no-elevation -no-module-registration
-    -no-procedure-checks-for-usual-bindings -module
+    -no-procedure-checks-for-usual-bindings
     -specialize -strict-types -clustering -lfa2
     -no-procedure-checks-for-toplevel-bindings))
 
@@ -164,13 +164,14 @@
     -feature -debug-level 
     -consult-inline-file
     -emit-import-library
+    -module
     -no-feature))
 
 (define-constant shortcuts
   '((-h "-help")
     (-s "-shared")
-    (-S "-scrutinize")			; OBSOLETE
-    (-M "-module")
+    (-m "-module")
+    (-M "-main-module")
     (|-P| "-check-syntax")
     (-f "-fixnum-arithmetic")
     (|-D| "-feature")
@@ -359,7 +360,8 @@ Usage: #{csc} FILENAME | OPTION ...
     -J -emit-all-import-libraries  emit import-libraries for all defined modules
     -no-module-registration        do not generate module registration code
     -no-compiler-syntax            disable expansion of compiler-macros
-    -M -module                     wrap compiled code into implicit module
+    -m -module NAME                wrap compiled code in a module
+    -M -main-module                wrap compiled code in a module called "main"
 
   Translation options:
 
diff --git a/manual/Unit utils b/manual/Unit utils
index ea4f730d..ccccd1ab 100644
--- a/manual/Unit utils	
+++ b/manual/Unit utils	
@@ -79,7 +79,7 @@ Notes:
 
 A parameter that holds a list of default options that should be given
 to {{csc}} after invocation of the {{compile-file}} procedure. 
-The initial default options are {{-scrutinize -O2 -d2}}.
+The initial default options are {{-O2 -d2}}.
 
 === Scanning through an input port
 
diff --git a/manual/Using the compiler b/manual/Using the compiler
index a770e2fc..e57ffca1 100644
--- a/manual/Using the compiler	
+++ b/manual/Using the compiler	
@@ -40,7 +40,7 @@ the source text should be read from standard input.
 
      -debug-level 0             is equivalent to -no-trace -no-lambda-info
      -debug-level 1             is equivalent to -no-trace
-     -debug-level 2             is equivalent to -scrutinize
+     -debug-level 2             is the default behaviour
 
 ; -disable-interrupts : Equivalent to the {{(disable-interrupts)}} declaration. No interrupt-checks are generated for compiled programs.
 
@@ -90,7 +90,9 @@ the source text should be read from standard input.
 
 ; -lfa2 : Does an additional lightweight flow-analysis pass on the fully optimized program to remove more type checks.
 
-; -module : wraps the compiled code in an implicit module named {{main}}, importing the {{scheme}} and {{chicken}} modules.
+; -main-module : wraps the compiled code in an implicit module named {{main}}, importing the {{scheme}} and {{chicken}} modules.
+
+; -module NAME : wraps the compiled code in an implicit module of the given {{NAME}}, importing the {{scheme}} and {{chicken}} modules.
 
 ; -no-argc-checks : disable argument count checks
 
diff --git a/rules.make b/rules.make
index 7130f342..5d36a538 100644
--- a/rules.make
+++ b/rules.make
@@ -514,6 +514,7 @@ chicken.posix.import.scm: $(POSIXFILE).c
 chicken.c: chicken.scm mini-srfi-1.scm \
 		chicken.compiler.batch-driver.import.scm \
 		chicken.compiler.c-platform.import.scm \
+		chicken.compiler.support.import.scm \
 		chicken.data-structures.import.scm \
 		chicken.utils.import.scm
 batch-driver.c: batch-driver.scm mini-srfi-1.scm \
diff --git a/scripts/compile-all b/scripts/compile-all
index c17d48be..000c1818 100755
--- a/scripts/compile-all
+++ b/scripts/compile-all
@@ -5,9 +5,9 @@
 set -e
 set -x
 
-compiler_options="-optimize-level 2 -include-path . -include-path ./ -inline -ignore-repository -feature chicken-bootstrap -feature debugbuild -scrutinize -types ./types.db -verbose  -no-lambda-info -local -specialize"
+compiler_options="-optimize-level 2 -include-path . -include-path ./ -inline -ignore-repository -feature chicken-bootstrap -feature debugbuild -types ./types.db -verbose  -no-lambda-info -local -specialize"
 
-library_options="-optimize-level 2 -include-path . -include-path ./ -inline -ignore-repository -feature chicken-bootstrap -feature debugbuild -scrutinize -types ./types.db -verbose  -explicit-use -no-trace -specialize"
+library_options="-optimize-level 2 -include-path . -include-path ./ -inline -ignore-repository -feature chicken-bootstrap -feature debugbuild -types ./types.db -verbose  -explicit-use -no-trace -specialize"
 
 compiler="$1"
 shift
diff --git a/support.scm b/support.scm
index fcff0e19..15d1745f 100644
--- a/support.scm
+++ b/support.scm
@@ -1653,7 +1653,8 @@ Usage: chicken FILENAME OPTION ...
     -emit-all-import-libraries   emit import-libraries for all defined modules
     -no-module-registration      do not generate module registration code
     -no-compiler-syntax          disable expansion of compiler-macros
-    -module                      wrap compiled code into implicit module
+    -module NAME                 wrap compiled code in a module
+    -main-module                 wrap compiled code in a module called "main"
 
   Translation options:
 
diff --git a/tests/runtests.bat b/tests/runtests.bat
index 3c35be2c..408076d5 100644
--- a/tests/runtests.bat
+++ b/tests/runtests.bat
@@ -54,7 +54,7 @@ echo ======================================== scrutiny tests ...
 if errorlevel 1 exit /b 1
 a.out
 if errorlevel 1 exit /b 1
-%compile% scrutiny-tests.scm -A -scrutinize -verbose 2>scrutiny.out
+%compile% scrutiny-tests.scm -A -verbose 2>scrutiny.out
 if errorlevel 1 exit /b 1
 
 rem this is sensitive to gensym-names, so make it optional
@@ -63,7 +63,7 @@ if not exist scrutiny.expected copy /Y scrutiny.out scrutiny.expected
 fc /w scrutiny.expected scrutiny.out
 if errorlevel 1 exit /b 1
 
-%compile% scrutiny-tests-2.scm -A -scrutinize -analyze-only -verbose 2>scrutiny-2.out
+%compile% scrutiny-tests-2.scm -A -verbose 2>scrutiny-2.out
 if errorlevel 1 exit /b 1
 
 if not exist scrutiny-2.expected copy /Y scrutiny-2.out scrutiny-2.expected
@@ -331,6 +331,18 @@ if errorlevel 1 exit /b 1
 %interpret% -include-path %TEST_DIR%/.. -s module-tests-2.scm
 if errorlevel 1 exit /b 1
 
+echo ======================================== module tests (command line options) ...
+set module="test"
+%compile% test.scm -w -A -j %module% -module %module%
+if errorlevel 1 exit /b 1
+%compile% test.scm -w -A -j main -main-module
+if errorlevel 1 exit /b 1
+%interpret% -e "(import %module%)"
+if errorlevel 1 exit /b 1
+%interpret% -e "(import main)"
+if errorlevel 1 exit /b 1
+del /f /q %module%.import.scm main.import.scm
+
 echo ======================================== module tests (compiled) ...
 %compile% module-tests-compiled.scm
 if errorlevel 1 exit /b 1
diff --git a/tests/runtests.sh b/tests/runtests.sh
index 6a8bba76..d366fd9e 100755
--- a/tests/runtests.sh
+++ b/tests/runtests.sh
@@ -96,7 +96,7 @@ $CHICKEN_PROFILE TEST.profile
 echo "======================================== scrutiny tests ..."
 $compile typematch-tests.scm -specialize -w
 ./a.out
-$compile scrutiny-tests.scm -A -scrutinize 2>scrutiny.out -verbose
+$compile scrutiny-tests.scm -A 2>scrutiny.out -verbose
 
 # this is sensitive to gensym-names, so make it optional
 if test \! -f scrutiny.expected; then
@@ -105,7 +105,7 @@ fi
 
 diff $DIFF_OPTS scrutiny.expected scrutiny.out
 
-$compile scrutiny-tests-2.scm -A -scrutinize -analyze-only 2>scrutiny-2.out -verbose
+$compile scrutiny-tests-2.scm -A 2>scrutiny-2.out -verbose
 
 # this is sensitive to gensym-names, so make it optional
 if test \! -f scrutiny-2.expected; then
@@ -284,6 +284,14 @@ echo "======================================== module tests ..."
 $interpret -include-path ${TEST_DIR}/.. -s module-tests.scm
 $interpret -include-path ${TEST_DIR}/.. -s module-tests-2.scm
 
+echo "======================================== module tests (command line options) ..."
+module="test-$(date +%s)"
+$compile test.scm -A -w -j "$module" -module "$module"
+$compile test.scm -A -w -j main -main-module
+$interpret -e "(import $module)"
+$interpret -e "(import main)"
+rm -f "$module.import.scm" main.import.scm
+
 echo "======================================== module tests (compiled) ..."
 $compile module-tests-compiled.scm
 ./a.out
Trap