~ chicken-core (chicken-5) 281ff322593fae365a67ece55d819c60a478f423
commit 281ff322593fae365a67ece55d819c60a478f423 Author: felix <bunny351@gmail.com> AuthorDate: Mon May 3 09:46:14 2010 +0200 Commit: felix <bunny351@gmail.com> CommitDate: Mon May 3 09:46:14 2010 +0200 added -O0 diff --git a/chicken.scm b/chicken.scm index 217256d3..2daa54f2 100644 --- a/chicken.scm +++ b/chicken.scm @@ -53,12 +53,12 @@ ; - convert options into symbols (without the initial hyphens) (define (process-command-line args) - (let loop ([args args] [options '()] [filename #f]) + (let loop ((args args) (options '()) (filename #f)) (if (null? args) (values filename (reverse options)) - (let* ([arg (car args)] - [len (string-length arg)] - [char0 (string-ref arg 0)] ) + (let* ((arg (car args)) + (len (string-length arg)) + (char0 (string-ref arg 0)) ) (if (and (char=? #\- char0) (> len 1)) (if (and (> len 1) (char=? #\: (string-ref arg 1))) (loop (cdr args) options filename) @@ -71,51 +71,53 @@ ;;; Run compiler with command-line options: (receive (filename options) ((or (user-options-pass) process-command-line) compiler-arguments) - (let loop ([os options]) + (let loop ((os options)) (unless (null? os) - (let ([o (car os)] - [rest (cdr os)] ) - (cond [(eq? 'optimize-level o) - (let ([level (string->number (car rest))]) + (let ((o (car os)) + (rest (cdr os)) ) + (cond ((eq? 'optimize-level o) + (let ((level (string->number (car rest)))) (case level - [(0) #f] - [(1) - (set! options (cons 'optimize-leaf-routines options)) ] - [(2) + ((0) + (set! options + (cons* 'no-compiler-syntax 'no-usual-integrations options)) ) + ((1) + (set! options (cons 'optimize-leaf-routines options)) ) + ((2) (set! options - (cons* 'optimize-leaf-routines 'inline options)) ] - [(3) + (cons* 'optimize-leaf-routines 'inline options)) ) + ((3) (set! options - (cons* 'optimize-leaf-routines 'inline 'local options) ) ] - [(4) + (cons* 'optimize-leaf-routines 'inline 'local options) ) ) + ((4) (set! options (cons* 'optimize-leaf-routines 'inline 'local 'unboxing 'unsafe - options) ) ] - [else + options) ) ) + (else (when (>= level 5) (set! options (cons* 'disable-interrupts 'no-trace 'unsafe 'block 'optimize-leaf-routines 'lambda-lift 'no-lambda-info 'inline 'unboxing - options) ) ) ] ) - (loop (cdr rest)) ) ] - [(eq? 'debug-level o) - (let ([level (string->number (car rest))]) + 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))] - [(2) #f] - [else (compiler-warning 'usage "invalid debug level ~S - ignored" (car rest))] ) - (loop (cdr rest)) ) ] - [(memq o valid-compiler-options) (loop rest)] - [(memq o valid-compiler-options-with-argument) + ((0) (set! options (cons* 'no-lambda-info 'no-trace options))) + ((1) (set! options (cons 'no-trace options))) + ((2) #f) + (else (compiler-warning 'usage "invalid debug level ~S - ignored" (car rest))) ) + (loop (cdr rest)) ) ) + ((memq o valid-compiler-options) (loop rest)) + ((memq o valid-compiler-options-with-argument) (if (pair? rest) (loop (cdr rest)) - (quit "missing argument to `-~s' option" o) ) ] - [else + (quit "missing argument to `-~s' option" o) ) ) + (else (compiler-warning 'usage "invalid compiler option `~a' - ignored" (if (string? o) o (conc "-" o)) ) - (loop rest) ] ) ) ) ) + (loop rest) ) ) ) ) ) (apply compile-source-file filename options) (exit) ) diff --git a/csc.scm b/csc.scm index f5808bdc..631fd475 100644 --- a/csc.scm +++ b/csc.scm @@ -350,7 +350,7 @@ Usage: #{csc} FILENAME | OPTION ... Optimization options: - -O -O1 -O2 -O3 -O4 -O5 -optimize-level NUMBER + -O -O0 -O1 -O2 -O3 -O4 -O5 -optimize-level NUMBER enable certain sets of optimization options -optimize-leaf-routines enable leaf routine optimization -N -no-usual-integrations standard procedures may be redefined @@ -657,6 +657,7 @@ EOF (set! rest (cdr rest)) (set! target-filename fn) ) ] [(|-O| |-O1|) (set! rest (cons* "-optimize-level" "1" rest))] + [(|-O0|) (set! rest (cons* "-optimize-level" "0" rest))] [(|-O2|) (set! rest (cons* "-optimize-level" "2" rest))] [(|-O3|) (set! rest (cons* "-optimize-level" "3" rest))] [(|-O4|) (set! rest (cons* "-optimize-level" "4" rest))] diff --git a/manual/Using the compiler b/manual/Using the compiler index 7fac33a5..f7a4655a 100644 --- a/manual/Using the compiler +++ b/manual/Using the compiler @@ -163,7 +163,7 @@ Possible options are: ; -optimize-level LEVEL : Enables certain sets of optimization options. {{LEVEL}} should be an integer. - -optimize-level 0 does nothing. + -optimize-level 0 is equivalent to -no-usual-integrations -no-compiler-syntax -optimize-level 1 is equivalent to -optimize-leaf-routines -optimize-level 2 is equivalent to -optimize-leaf-routines -inline -optimize-level 3 is equivalent to -optimize-leaf-routines -local -inlineTrap