>From c3e83850d39f852fa8a03a8d6d44b0c5443f926a Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Sun, 10 Aug 2014 15:38:35 +0200 Subject: [PATCH 05/19] compiler-modules: Convert optimizer to a module Add "foldable?" to compiler-namespace which would otherwise be undefined within optimizer (defined in support.scm). --- batch-driver.scm | 4 ++-- compiler-namespace.scm | 11 +---------- optimizer.scm | 16 +++++++++++++--- rules.make | 5 +++-- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/batch-driver.scm b/batch-driver.scm index b00fa13..e2cd736 100644 --- a/batch-driver.scm +++ b/batch-driver.scm @@ -30,7 +30,7 @@ (declare (unit batch-driver) (uses extras data-structures files srfi-1 - lfa2 compiler-syntax) ) + lfa2 compiler-syntax optimizer) ) ;; TODO: Remove these once everything's converted to modules (include "private-namespace") @@ -44,7 +44,7 @@ (import (except chicken put! get quit syntax-error) scheme extras data-structures files srfi-1 - lfa2 compiler-syntax) + lfa2 compiler-syntax optimizer) (include "tweaks") diff --git a/compiler-namespace.scm b/compiler-namespace.scm index 2a1d56c..0d0c384 100644 --- a/compiler-namespace.scm +++ b/compiler-namespace.scm @@ -80,7 +80,6 @@ debugging debugging-chicken debugging-executable - determine-loop-and-dispatch decompose-lambda-list default-debugging-declarations default-declarations @@ -143,6 +142,7 @@ first-analysis fold-boolean fold-inner + foldable? foldable-bindings follow-without-loop foreign-argument-conversion @@ -229,9 +229,7 @@ pending-canonicalizations perform-closure-conversion perform-cps-conversion - perform-high-level-optimizations perform-inlining! - perform-pre-optimization! posv posq postponed-initforms @@ -255,23 +253,18 @@ real-name-table real-name2 register-unboxed-op - reorganize-recursive-bindings require-imports-flag rest-parameters-promoted-to-vector rewrite safe-globals-flag scan-free-variables scan-sharp-greater-string - scan-toplevel-assignments scan-used-variables scrutinize scrutiny-debug set-real-name! sexpr->node simple-lambda-node? - simplifications - simplified-ops - simplify-named-call simplify-type slashify sort-symbols @@ -285,14 +278,12 @@ string->c-identifier string->expr stringify - substitution-table symbolify target-heap-size target-include-file target-stack-size toplevel-lambda-id toplevel-scope - transform-direct-lambdas! tree-copy uncommentify undefine-shadowed-macros diff --git a/optimizer.scm b/optimizer.scm index fb41191..e1d01a6 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -27,10 +27,19 @@ (declare (unit optimizer) - (not inline ##sys#compiler-syntax-hook) ) - + (uses srfi-1 data-structures) ) +;; TODO: Remove these once everything's converted to modules +(include "private-namespace") (include "compiler-namespace") + +(module optimizer + (scan-toplevel-assignments perform-high-level-optimizations + transform-direct-lambdas! determine-loop-and-dispatch) + +(import (except chicken put! get quit syntax-error) scheme + srfi-1 data-structures) + (include "tweaks") (define-constant maximal-number-of-free-variables-for-liftable 16) @@ -912,6 +921,7 @@ (define substitution-table (make-vector 301 '())) +;; TODO: export this and remove it from compiler-namespace (define (rewrite name . class-and-args) (let ((old (or (##sys#hash-table-ref substitution-table name) '()))) (##sys#hash-table-set! substitution-table name (append old (list class-and-args))) ) ) @@ -1760,4 +1770,4 @@ groups) (values node (pair? groups)))) - +) \ No newline at end of file diff --git a/rules.make b/rules.make index 1fb783d..d362876 100644 --- a/rules.make +++ b/rules.make @@ -492,12 +492,13 @@ endef $(foreach lib, $(SETUP_API_OBJECTS_1),\ $(eval $(call declare-emitted-import-lib-dependency,$(lib)))) -$(foreach lib, batch-driver lfa2 compiler-syntax,\ +$(foreach lib, batch-driver lfa2 compiler-syntax optimizer,\ $(eval $(call declare-emitted-import-lib-dependency,$(lib)))) chicken.c: chicken.scm batch-driver.import.scm batch-driver.scm batch-driver.c: batch-driver.scm lfa2.import.scm lfa2.scm \ - compiler-syntax.scm compiler-syntax.import.scm + compiler-syntax.scm compiler-syntax.import.scm \ + optimizer.scm optimizer.import.scm define profile-flags $(if $(filter $(basename $(1)),$(PROFILE_OBJECTS)),-profile) -- 1.7.10.4