diff --git a/module/system/base/compile.scm b/module/system/base/compile.scm index c110512f0..83a3b479d 100644 --- a/module/system/base/compile.scm +++ b/module/system/base/compile.scm @@ -132,14 +132,38 @@ (and (false-if-exception (ensure-directory (dirname f))) f)))) +(define *do-extension-dispatch* #f) +(define *extension-dispatches* '((("py") . python) (("pl") . prolog))) + +(define (default-language file) + (define default (current-language)) + (if *do-extension-dispatch* + (let ((ext (car (reverse (string-split file #\.))))) + (let lp ((l *extension-dispatches*)) + (if (pair? l) + (if (member ext (caar l)) + (let ((r (cdar l))) + (if (language? default) + (if (eq? (language-name default) r) + default + r) + r)) + (lp (cdr l))) + default))) + default)) + + +(define %in-compile (make-fluid #f)) + (define* (compile-file file #:key (output-file #f) - (from (current-language)) + (from (default-language file)) (to 'bytecode) (env (default-environment from)) (opts '()) (canonicalization 'relative)) - (with-fluids ((%file-port-name-canonicalization canonicalization)) + (with-fluids ((%in-compile #t) + (%file-port-name-canonicalization canonicalization)) (let* ((comp (or output-file (compiled-file-name file) (error "failed to create path for auto-compiled file" file))) diff --git a/module/system/base/message.scm b/module/system/base/message.scm index 979291c1e..c0d639235 100644 --- a/module/system/base/message.scm +++ b/module/system/base/message.scm @@ -34,7 +34,8 @@ warning-type? warning-type-name warning-type-description warning-type-printer lookup-warning-type - %warning-types)) + %warning-types + %dont-warn-list)) ;;; @@ -74,6 +75,7 @@ (description warning-type-description) (printer warning-type-printer)) +(define %dont-warn-list '()) (define %warning-types ;; List of known warning types. (map (lambda (args) @@ -112,8 +114,9 @@ (unbound-variable "report possibly unbound variables" ,(lambda (port loc name) - (emit port "~A: warning: possibly unbound variable `~A'~%" - loc name))) + (if (not (member name %dont-warn-list)) + (emit port "~A: warning: possibly unbound variable `~A'~%" + loc name)))) (macro-use-before-definition "report possibly mis-use of macros before they are defined"