bpt/guile.git
12 years agoUpdate Gnulib to v0.0-6523-gb3609c1.
Ludovic Courtès [Sat, 22 Oct 2011 14:24:32 +0000 (16:24 +0200)]
Update Gnulib to v0.0-6523-gb3609c1.

12 years agodoc: Document the `sitedir' and `extensiondir' pkg-config variables.
Ludovic Courtès [Sat, 22 Oct 2011 14:11:01 +0000 (16:11 +0200)]
doc: Document the `sitedir' and `extensiondir' pkg-config variables.

* doc/ref/libguile-parallel.texi (Parallel Installations): Document the
  `sitedir' and `extensiondir' pkg-config variables.  This fixes
  <https://savannah.gnu.org/bugs/index.php?32515>, reported by
  Dale. P. Smith.

12 years agoFix compilation with `--enable-debug-malloc'.
Bake Timmons [Sat, 22 Oct 2011 11:28:53 +0000 (13:28 +0200)]
Fix compilation with `--enable-debug-malloc'.

* libguile/gc-malloc.c (scm_gc_register_collectable_memory): Add the
  missing second argument in the call to scm_malloc_register.

12 years agoInitialize `get_internal_run_time' before it is used.
Ludovic Courtès [Sat, 22 Oct 2011 11:25:11 +0000 (13:25 +0200)]
Initialize `get_internal_run_time' before it is used.

* libguile/init.c (scm_i_init_guile): Call `scm_init_stime' before
  `scm_init_gc'.  Fixes <https://savannah.gnu.org/bugs/?34616> reported
  by Bake Timmons.

12 years agoset width for `,trace' command
BT Templeton [Fri, 22 Jul 2011 15:35:30 +0000 (11:35 -0400)]
set width for `,trace' command

* module/system/repl/command.scm (trace): Set trace width to terminal
  width by default.

12 years agofix segfault in goops if class fields are redefined
Andy Wingo [Thu, 20 Oct 2011 22:22:44 +0000 (00:22 +0200)]
fix segfault in goops if class fields are redefined

* libguile/goops.c (map, filter_cpl, remove_duplicate_slots): Use
  scm_is_pair instead of !scm_is_null, given that we use accessor
  macros.
  (check_cpl, build_slots_list): Check that descendents of <class> can't
  redefine slots of <class>.

* test-suite/tests/goops.test ("defining classes"): Add a test.

Patch originally by Stefan Israelsson Tampe.

12 years agofix misallocation of some <fix> procedures
Andy Wingo [Thu, 20 Oct 2011 21:50:05 +0000 (23:50 +0200)]
fix misallocation of some <fix> procedures

* module/language/tree-il/analyze.scm (analyze-lexicals): When stepping
  into a non-tail form, we know that labels allocation will be invalid,
  so use an empty labels set.  Fixes http://debbugs.gnu.org/9769.

* test-suite/tests/tree-il.test ("labels allocation"): Add a test.

12 years agoslight frames.h refactor
Andy Wingo [Wed, 19 Oct 2011 09:55:27 +0000 (11:55 +0200)]
slight frames.h refactor

* libguile/frames.h: Instead of doing a lot of nasty pointer match and
  casts here, simply define a struct that aliases the contents of a
  stack frame.  There are some naming issues here, that the SCM_FRAME
  macros access the scm_vm_frame structure, but SCM_VM_FRAME macros
  access scm_frame; oh well.

12 years agodoc: Add `libguile-parallel.texi' to the distribution.
Ludovic Courtès [Tue, 18 Oct 2011 16:47:09 +0000 (18:47 +0200)]
doc: Add `libguile-parallel.texi' to the distribution.

This is a followup to d32df1325dfe5f550cf1262dc7e90ba86b526a7c ("manual:
reorganize autoconf, pkg-config info").

* doc/ref/Makefile.am (guile_TEXINFOS): Add `libguile-parallel.texi'.

12 years agofix (web http) write-date for mondays
Andy Wingo [Mon, 17 Oct 2011 07:48:19 +0000 (09:48 +0200)]
fix (web http) write-date for mondays

* module/web/http.scm (write-date): Fix bug on Mondays.  Jeez!

12 years agodoc: Complete renaming of `autoconf.texi'.
Ludovic Courtès [Sun, 16 Oct 2011 19:55:29 +0000 (21:55 +0200)]
doc: Complete renaming of `autoconf.texi'.

This is a followup to d32df1325dfe5f550cf1262dc7e90ba86b526a7c ("manual:
reorganize autoconf, pkg-config info").

* doc/ref/Makefile.am: Replace references to `autoconf.texi' by
  `libguile-autoconf.texi'.

12 years agoUpdate (ice-9 match) from Chibi-Scheme.
Ludovic Courtès [Sun, 16 Oct 2011 16:36:20 +0000 (18:36 +0200)]
Update (ice-9 match) from Chibi-Scheme.

* module/ice-9/match.scm (match): Remove macro.

* module/ice-9/match.upstream.scm: Update from Chibi-Scheme, which fixes
  <http://debbugs.gnu.org/9567>.

* test-suite/tests/match.test.upstream: Likewise.

12 years agocoverage: Add tests for `case-lambda'.
Ludovic Courtès [Sat, 15 Oct 2011 15:05:23 +0000 (17:05 +0200)]
coverage: Add tests for `case-lambda'.

* test-suite/tests/coverage.test
  ("line-execution-counts")["case-lambda"]: New test.
  ("procedure-execution-count")["case-lambda"]: New test.

12 years agodoc: Mention the partial evaluator next to `define-inlinable'.
Ludovic Courtès [Sat, 15 Oct 2011 15:34:48 +0000 (17:34 +0200)]
doc: Mention the partial evaluator next to `define-inlinable'.

* doc/ref/api-procedures.texi (Inlinable Procedures): Mention inlining
  performed by the partial evaluator.

12 years agocoverage: Add test with `eval'.
Ludovic Courtès [Sat, 15 Oct 2011 14:46:29 +0000 (16:46 +0200)]
coverage: Add test with `eval'.

* test-suite/tests/coverage.test (test-procedure): New procedure.
  ("procedure-execution-count")["called from eval"]: New test.

12 years agoDefault to using poll(2) in `fport_input_waiting'.
Cedric Cellier [Sat, 15 Oct 2011 14:25:21 +0000 (16:25 +0200)]
Default to using poll(2) in `fport_input_waiting'.

* libguile/fports.c (fport_input_waiting): Use poll(2) instead of
  select(2) when possible.  Cosmetic changes by Ludovic Courtès.

12 years agoupdate NEWS for 2.0.3
Andy Wingo [Wed, 12 Oct 2011 15:12:14 +0000 (17:12 +0200)]
update NEWS for 2.0.3

* NEWS: Update.

12 years agoadd "Installing Site Packages"
Andy Wingo [Wed, 12 Oct 2011 14:20:51 +0000 (16:20 +0200)]
add "Installing Site Packages"

* doc/ref/scheme-using.texi (Installing Site Packages): Add a new
  section about where to install .scm, .go, and .so files.

* doc/ref/tour.texi: Reference it here.
* doc/ref/guile.texi: Add new section.

12 years agoupdate tour.texi for site modules and extensions
Andy Wingo [Wed, 12 Oct 2011 11:07:50 +0000 (13:07 +0200)]
update tour.texi for site modules and extensions

* doc/ref/tour.texi (Putting Extensions into Modules)
  (Writing new Modules): In the examples, show the files as being in the
  "site" dirs.

12 years agomanual: reorganize autoconf, pkg-config info
Andy Wingo [Wed, 12 Oct 2011 11:07:30 +0000 (13:07 +0200)]
manual: reorganize autoconf, pkg-config info

* doc/ref/libguile-parallel.texi: New file, documenting parallel
  installation and the use of pkg-config.

* doc/ref/libguile-linking.texi: Adapt.

* doc/ref/libguile-autoconf.texi: Rename from autoconf.texi.  Lower
  sections, and integrate in the "Programming in C" chapter.

* doc/ref/guile.texi: Adapt.

12 years agoremove documentation on autofrisk foo
Andy Wingo [Wed, 12 Oct 2011 09:51:33 +0000 (11:51 +0200)]
remove documentation on autofrisk foo

* doc/ref/autoconf.texi: Remove documentation on autofrisk facility,
  given that we do not ship those macros, and to my knowledge, never
  have.

12 years agoadd (web client) docs
Andy Wingo [Wed, 12 Oct 2011 09:24:58 +0000 (11:24 +0200)]
add (web client) docs

* doc/ref/web.texi (Web Client): New doc section.

12 years agofold constants with accessors
Andy Wingo [Mon, 10 Oct 2011 18:39:22 +0000 (20:39 +0200)]
fold constants with accessors

* module/language/tree-il/peval.scm (peval): Factor constant folding out
  to a helper.  Use it in the accessor case in addition to the normal
  effect-free-primitive case.

* test-suite/tests/tree-il.test: Add a test.

12 years agorecognize string primitives
Andy Wingo [Mon, 10 Oct 2011 18:19:07 +0000 (20:19 +0200)]
recognize string primitives

* module/language/tree-il/primitives.scm
  (*interesting-primitive-names*): Add string?, string-length, and ref
  and set.
  (*primitive-accessors*): Add string-ref.
  (*effect-free-primitives*): Add string-length and string?
  (*effect+exception-free-primitives*): Add string?.
  (*singly-valued-primitives*): Add string-length and ref and set.

12 years agoadd ,expand and ,optimize
Andy Wingo [Mon, 10 Oct 2011 15:01:11 +0000 (17:01 +0200)]
add ,expand and ,optimize

* module/system/repl/command.scm (*command-table*, expand, optimize):
  New meta-commands.
* module/system/repl/common.scm (repl-expand, repl-optimize): New
  helpers.

* doc/ref/scheme-using.texi (Compile Commands): Document.

12 years agoregenerate psyntax-pp.scm
Andy Wingo [Mon, 10 Oct 2011 11:01:54 +0000 (13:01 +0200)]
regenerate psyntax-pp.scm

* module/ice-9/psyntax-pp.scm: Regenerate, now with inlined letrec
  bindings.  Whee!!

12 years agopeval support for memq and memv
Andy Wingo [Mon, 10 Oct 2011 12:42:40 +0000 (14:42 +0200)]
peval support for memq and memv

* module/language/tree-il/peval.scm (peval): Add special handlers for
  memq and memv, as inline.scm used to have.  This is important for
  `case' clauses.  It is very ugly, though.

* test-suite/tests/tree-il.test ("partial evaluation"): Add tests.

12 years agoadd accessor-primitive?, peval uses it
Andy Wingo [Mon, 10 Oct 2011 11:23:26 +0000 (13:23 +0200)]
add accessor-primitive?, peval uses it

* module/language/tree-il/primitives.scm (*primitive-accessors*): New
  set of primitives: those that access mutable memory, but are otherwise
  pure.  Include bytevector references here.
  (accessor-primitive?): New public predicate.

* module/language/tree-il/peval.scm (peval): Refactor to distinguish
  constructor-primitive? from accessor-primitive?.

12 years agopeval: visit operands on-demand, to inline mutually recursive bindings
Andy Wingo [Mon, 10 Oct 2011 10:58:28 +0000 (12:58 +0200)]
peval: visit operands on-demand, to inline mutually recursive bindings

This commit changes to use <operand> structures to hold the context
needed to visit lexical bindings lazily, in context, instead of eagerly
visiting them for value.  This laziness enables inlining of mutually
recursive bindings.

* module/language/tree-il/peval.scm (<var>): Remove comment about copy
  propagation having to run build-var-table; things don't work like that
  any more.
  (build-var-table): Build <var> entries for all variables, even
  unreferenced variables.
  (alpha-rename): Remove.  We will rename bindings on-demand now.

  (peval lookup-var): New helper, to fetch the <var> of a gensym.

  (peval fresh-gensyms): Fold here, under peval, and in it, handle
  updating the store to record a mapping between new names and <var>
  entries from the source program.

  (peval record-source-expression): Don't call build-var-table on the
  new expression, as alpha-renaming happens on-demand now.

  (peval prune-bindings): Rewrite to work with mutually-recursive
  bindings, while optionally preserving binding order.

  (peval extend-env): New helper.

  (peval loop): OK, here goes... Remove the `operand' context, as now we
  visit operands lazily.  Add a `call' context, which does not
  copy-propagate lambda expressions, used to residualize a call after
  aborting an inlining attempt.  Change the `env' to be a mapping of
  gensym to <operand>.  Instead of looking up the operand's binding then
  alpha-renaming it, just rely on the fact that visiting the operand
  will rename it if necessary.

  If we residualize a lexical, do so with the fresh name from the
  environment.  If we visit an operand and it doesn't turn out to be
  constant, we will never be able to copy it, and so cache that fact in
  the operand.  If we residualize a binding and we know what the value
  should be, record that binding so that prune-bindings won't have to
  visit it again.  If the operand folds to a constant, cache that too,
  to save effort when unrolling loops.

  For let, letrec, fix, and lambda-case, instead of visiting the
  bindings eagerly for value, simply record the source expressions and
  environments in an <operand> and rely on copy-propagation to visit
  them later in the right context.  In the case of letrec and fix, this
  allows mutually-recursive bindings to be inlined.

  Refactor folding of "constructors" (which still need renaming) to
  avoid visiting operands twice in some contexts.

  For applications, if we have to abort, process the procedure in call
  context, which allows some folding but avoids copying lambdas.  If we
  find a recursive procedure, mark intervening counters as recursive
  too, to allow for mutual recursion at the top level.

  For lambdas, if we are processing for value, record the source
  expression so we can detect recursion.  This was previously done in
  the lexical-ref copy propagator.

* test-suite/tests/tree-il.test ("partial evaluation"): Remove unused
  recursive lexicals in a couple of cases.  Add a couple test cases for
  pruning.  Add a few recursive binding cases.

12 years agopeval: add operand structure
Andy Wingo [Thu, 6 Oct 2011 08:56:12 +0000 (10:56 +0200)]
peval: add operand structure

* module/language/tree-il/peval.scm (<operand>): Add operand structure,
  to be used by peval.

12 years agopeval: refactor logging
Andy Wingo [Mon, 10 Oct 2011 10:03:17 +0000 (12:03 +0200)]
peval: refactor logging

* module/language/tree-il/peval.scm: Make it easier to turn on logging.

12 years agoNew functions scm_is_exact and scm_is_inexact
Mike Gran [Mon, 10 Oct 2011 03:54:37 +0000 (20:54 -0700)]
New functions scm_is_exact and scm_is_inexact

* doc/ref/api-data.texi (Exact and Inexact Numbers): doc for scm_is_exact
  and scm_is_inexact
* libguile/numbers.c (scm_is_exact, scm_is_inexact): new functions
* libguile/numbers.h: declarations for scm_is_exact and scm_is_inexact
* test/suite/standalone/test-conversion.c (test_is_exact, test_is_inexact):
  new tests

12 years agoDocument SCM_ASSERT_TYPE and SCM_ASRTGO macros
Mike Gran [Sun, 9 Oct 2011 00:12:12 +0000 (17:12 -0700)]
Document SCM_ASSERT_TYPE and SCM_ASRTGO macros

* doc/ref/api-control.texi (Signalling Type Errors): document macros

12 years agopeval: logging
Andy Wingo [Fri, 7 Oct 2011 13:49:36 +0000 (15:49 +0200)]
peval: logging

* module/language/tree-il/peval.scm: Define a quick and dirty
  infrastructure for logging.  Use it in peval.

12 years agopeval: bugfix in constant-expression?
Andy Wingo [Thu, 6 Oct 2011 21:28:19 +0000 (23:28 +0200)]
peval: bugfix in constant-expression?

* module/language/tree-il/peval.scm (constant-expression?): Correctly
  handle lambda-case alternates.

12 years agooptimizer verifies its output
Andy Wingo [Thu, 6 Oct 2011 21:28:06 +0000 (23:28 +0200)]
optimizer verifies its output

* module/language/tree-il/optimize.scm: Verify the result of partial
  evaluation.

12 years agoadd tree-il verifier
Andy Wingo [Thu, 6 Oct 2011 21:27:43 +0000 (23:27 +0200)]
add tree-il verifier

* module/Makefile.am: Add debug.scm.
* module/language/tree-il/debug.scm: New file, a verifier for tree-il.

12 years agopeval refactor
Andy Wingo [Thu, 6 Oct 2011 10:14:10 +0000 (12:14 +0200)]
peval refactor

* module/language/tree-il/peval.scm (peval): Refactor the for-value, etc
  helpers.

12 years agocomment peval.scm
Andy Wingo [Thu, 6 Oct 2011 08:39:14 +0000 (10:39 +0200)]
comment peval.scm

* module/language/tree-il/peval.scm: Add comments.  Move alpha-rename
  later in the file.

12 years agofix reading of #||||#
Andy Wingo [Wed, 5 Oct 2011 18:41:11 +0000 (20:41 +0200)]
fix reading of #||||#

* libguile/read.c (scm_read_r6rs_block_comment):
* test-suite/tests/reader.test ("reading"): Fix reading of #||||#,
  originally reported in bug debbugs.gnu.org/9672, by Bruno Haible.
  Thanks, Bruno!

12 years agopeval: Add test for possible infinite recursion.
Ludovic Courtès [Fri, 30 Sep 2011 13:20:16 +0000 (15:20 +0200)]
peval: Add test for possible infinite recursion.

* test-suite/tests/tree-il.test ("partial evaluation"): Add test.

12 years agoAdd link to the (ice-9 match) bug.
Ludovic Courtès [Fri, 30 Sep 2011 13:16:02 +0000 (15:16 +0200)]
Add link to the (ice-9 match) bug.

* module/ice-9/match.scm: Add comment.

12 years agopeval: Recognize module-refs to primitives.
Ludovic Courtès [Fri, 23 Sep 2011 15:27:28 +0000 (17:27 +0200)]
peval: Recognize module-refs to primitives.

* module/language/tree-il/optimize.scm (peval): Handle module-refs to
  primitives.

* test-suite/tests/tree-il.test ("partial evaluation"): Add test, using
  `pmatch'.

12 years agogenerate psyntax-pp in canonical form
Andy Wingo [Wed, 28 Sep 2011 17:42:32 +0000 (19:42 +0200)]
generate psyntax-pp in canonical form

* module/ice-9/compile-psyntax.scm (source): Canonicalize after
  optimizing.  The optimizer should be a little more clever, but
  currently fix-letrec outputs some non-canonical forms.

* module/ice-9/psyntax-pp.scm: Regenerate.

12 years agoseparate peval and a new canonicalization pass into their own modules
Andy Wingo [Wed, 28 Sep 2011 17:39:25 +0000 (19:39 +0200)]
separate peval and a new canonicalization pass into their own modules

* module/language/tree-il/peval.scm: Move to its own file.  Remove the
  bits about <prompt> thunk-application bodies, as they are not
  optimizations, simply expectations of the compiler.  `canonicalize'
  handles that now.

* module/language/tree-il/optimize.scm: Use peval from its module.
  Don't call `inline!', as that's useless now.

* module/language/tree-il/canonicalize.scm: New file, implementing a
  pass that `compile-tree-il' runs on the result from the optimizer.
  The compiler currently expects a <let> form to have bindings, for
  example, and this pass turns a <let> without bindings into its body.

* module/language/tree-il/inline.scm: Deprecate, as `peval' does
  everything this function ever did.

* module/language/tree-il/compile-glil.scm: Canonicalize after
  optimizing.  This should allow us to skip the optimizer entirely, if
  we want.

* module/Makefile.am: Update and reorder a little bit.

12 years agoregenerate psyntax-pp.scm, with optimizations
Andy Wingo [Tue, 27 Sep 2011 13:09:25 +0000 (15:09 +0200)]
regenerate psyntax-pp.scm, with optimizations

* module/ice-9/psyntax-pp.scm: Regenerate.

12 years ago((lambda ...) ...) fix
Andy Wingo [Tue, 27 Sep 2011 21:29:10 +0000 (23:29 +0200)]
((lambda ...) ...) fix

* module/language/tree-il/optimize.scm (peval): If it's a lambda in the
  operator position, inline without a nested counter, as it's not
  possible to increase code size.

12 years agopeval: more effective binding pruning
Andy Wingo [Tue, 27 Sep 2011 21:21:53 +0000 (23:21 +0200)]
peval: more effective binding pruning

* module/language/tree-il/optimize.scm (peval): Factor prune-bindings
  out of `let' and company.  Have it process unreferenced bindings in
  effect context instead of always residualizing non-constant
  expressions.

12 years agodon't propagate pure primcalls that might not type-check
Andy Wingo [Tue, 27 Sep 2011 21:20:49 +0000 (23:20 +0200)]
don't propagate pure primcalls that might not type-check

* module/language/tree-il/optimize.scm (types-check?): New helper, to
  determine if a primcall will apply without throwing an exception.
  (peval): constant-expression? returns #f for expressions that don't
  types-check?.  Effect-free primitives that type-check are void.

12 years agofix unparse-tree-il of <dynset>
Andy Wingo [Tue, 27 Sep 2011 13:08:39 +0000 (15:08 +0200)]
fix unparse-tree-il of <dynset>

* module/language/tree-il.scm (unparse-tree-il): Fix printing of
  `dynset'.

12 years agopeval works on all expressions
Andy Wingo [Tue, 27 Sep 2011 13:08:17 +0000 (15:08 +0200)]
peval works on all expressions

* module/language/tree-il/optimize.scm (alpha-rename, peval): Add
  <dynset> cases.  Allow any kind of <application>.  Remove the `catch'
  wrapper as now peval handles all kinds of expressions.

12 years agopeval: elide make-prompt-tag in effect context
Andy Wingo [Tue, 27 Sep 2011 11:42:43 +0000 (13:42 +0200)]
peval: elide make-prompt-tag in effect context

* module/language/tree-il/optimize.scm (peval): Fix a duplicate
  traversal for constructors in effect or test context.  Add support for
  eliding make-prompt-tag.

* test-suite/tests/tree-il.test ("partial evaluation"): Update the test
  for make-prompt-tag elision.

12 years agopeval: add support for <prompt> and <abort>
Andy Wingo [Tue, 27 Sep 2011 11:39:29 +0000 (13:39 +0200)]
peval: add support for <prompt> and <abort>

* module/language/tree-il/optimize.scm (alpha-rename, peval): Handle
  <prompt> and <abort>.  Attempt to remove the prompt if the tag is
  otherwise unreferenced.

* module/language/tree-il/primitives.scm (*primitive-constructors*): Add
  make-prompt-tag as a constructor.

* test-suite/tests/tree-il.test ("partial evaluation"): Add a test that
  an prompt whose tag is unreferenced is removed.

12 years agopeval: fix algorithmic behavior of `cons'
Andy Wingo [Tue, 27 Sep 2011 07:48:18 +0000 (09:48 +0200)]
peval: fix algorithmic behavior of `cons'

* module/language/tree-il/optimize.scm (peval): Fix treatment of `cons'
  to not process the value twice, leading to n^2 work.  This prevented
  primitives.scm from compiling in a reasonable amount of time, because
  it contained a `(foo ... ,@bar) form that resulted in a long sequence
  of nested conses, and no effort counter was in place as it was not
  within an inlining attempt.

12 years agodoc: (ice-9 match) doesn't have `__1'.
Ludovic Courtès [Tue, 27 Sep 2011 16:00:20 +0000 (18:00 +0200)]
doc: (ice-9 match) doesn't have `__1'.

* doc/ref/match.texi (Pattern Matching): Remove `__1', which doesn't
  exist.  Thanks to Chris K. Jester-Young.

12 years agodoc: Update (ice-9 match) reference.
Ludovic Courtès [Tue, 27 Sep 2011 11:46:35 +0000 (13:46 +0200)]
doc: Update (ice-9 match) reference.

* doc/ref/match.texi (Pattern Matching): Document `***', `..1', and
  `__1'; remove `..k' and `__k'.  Reported by Chris K. Jester-Young.

12 years agodoc: Fix typesetting of function definitions in "Accessing Modules from C".
Ludovic Courtès [Tue, 27 Sep 2011 11:41:21 +0000 (13:41 +0200)]
doc: Fix typesetting of function definitions in "Accessing Modules from C".

* doc/ref/api-modules.texi (Accessing Modules from C): Use the phrase "C
  Function" instead of "C Procedure".  Enclose multiple-word type names
  in braces.  Reported by Dale P. Smith.

12 years agopeval: more strict accounting
Andy Wingo [Mon, 26 Sep 2011 22:21:16 +0000 (00:21 +0200)]
peval: more strict accounting

* module/language/tree-il/optimize.scm (transfer!, make-nested-counter):
  (make-recursive-counter, peval): Limit the algorithm's time to be
  strictly O(N) by transferring effort and size counters of recursive
  inlining attempts from containing counters.

* test-suite/tests/tree-il.test ("partial evaluation"): Update
  expectations for the ((lambda (x) (x x)) (lambda (x) (x x))) case, as
  the new accounting policy will cause the entire inlining attempt to
  abort.

12 years agopeval: fix inlining of lambda* with #:optional
Andy Wingo [Mon, 26 Sep 2011 20:32:45 +0000 (22:32 +0200)]
peval: fix inlining of lambda* with #:optional

* module/language/tree-il/optimize.scm (peval): Fix calculation of how
  many init expressions to drop when inlining lambdas.

* test-suite/tests/tree-il.test ("partial evaluation"): Add tests.

12 years agoremove unused peval helpers
Andy Wingo [Mon, 26 Sep 2011 20:24:00 +0000 (22:24 +0200)]
remove unused peval helpers

* module/language/tree-il/optimize.scm (peval): Remove a couple unused
  helpers.

12 years agopeval: simpler and more precise treatment of mutability
Andy Wingo [Fri, 23 Sep 2011 10:43:04 +0000 (12:43 +0200)]
peval: simpler and more precise treatment of mutability

* module/language/tree-il/optimize.scm (peval): The old approach of
  optimistically producing constants and then de-constifying them at
  their uses was not only cumbersome but incorrect: it both failed to
  preserve identity in some cases and failed to retain immutable
  constant values.  Instead, now we only produce constants if they
  really are constant and immutable.  The constant folder has to have a
  few more algebraic cases to be as effective as it was, to destructure
  (car (cons _ _)) appropriately.  On the plus side, now constructors
  and deconstructors can handle impure cases more generally.

* test-suite/tests/tree-il.test ("partial evaluation"): Add constructor
  and destructuring tests.  Adapt other tests to new expectations.

12 years agopeval: add a bunch of missing maybe-unconst calls
Andy Wingo [Sun, 25 Sep 2011 00:54:34 +0000 (02:54 +0200)]
peval: add a bunch of missing maybe-unconst calls

* module/language/tree-il/optimize.scm (peval): Add missing
  maybe-unconst calls.  Things are getting ugly.  They will get better
  in the next commit though.

12 years agopeval uses effort counters, propagates lambdas more effectively
Andy Wingo [Thu, 22 Sep 2011 22:29:14 +0000 (00:29 +0200)]
peval uses effort counters, propagates lambdas more effectively

* module/language/tree-il/optimize.scm (code-contains-calls?): Remove
  this helper, we will deal with recursion when it happens, not after
  the fact.
  (peval): Add keyword args for various size and effort limits.  Instead
  of keeping a call stack, keep a chain of <counter> records, each with
  an abort continuation.  If ever an inlining attempt is taking too
  long, measured in terms of number of trips through the main loop, the
  counter will abort.  Add new contexts, `operator' and `operand'.  They
  have different default size limits.  In the future we should actually
  use the size counter, instead of these heuristics.

  The <lexical-ref> case is smarter now, and tries to avoid propagating
  too much data.  Perhaps it should be dumber though, and use a
  counter.  That would require changes to the environment structure.

  Inline <lambda> applications to <let>, so that we allow residual
  lexical references to have bindings.  Add a `for-operand' helper, and
  use it for the RHS of `let' expressions.  A `let' is an inlined
  `lambda'.

  `Let' and company no longer elide bindings if the result is a
  constant, as the arguments could have effects.  Peval will still do as
  much as it can, though.

* test-suite/tests/tree-il.test ("partial evaluation"): Update the tests
  for the new expectations.  They are uniformly awesomer, with the
  exception of two cases in which pure but not constant data is not
  propagated.

12 years agoprune unused letrec bindings
Andy Wingo [Thu, 22 Sep 2011 22:21:46 +0000 (00:21 +0200)]
prune unused letrec bindings

* module/language/tree-il/optimize.scm (peval): Prune unused `letrec'
  bindings.

12 years agomore peval refactoring
Andy Wingo [Thu, 22 Sep 2011 22:18:13 +0000 (00:18 +0200)]
more peval refactoring

* module/language/tree-il/optimize.scm (peval): Rename `var-table' to
  `store', as we're going to put some more things in it.  Rename
  `record-lexical-bindings' to `record-source-expression', which also
  takes the original, pre-renaming expression.  Keep a mapping from new
  expressions to original expressions, available using the
  `source-expression' helper.

12 years agoadd helpers for effort counters
Andy Wingo [Thu, 22 Sep 2011 22:12:21 +0000 (00:12 +0200)]
add helpers for effort counters

* module/language/tree-il/optimize.scm (<counter>, abort-counter)
  (record-effort!, record-size!, find-counter, make-top-counter)
  (make-nested-counter, make-recursive-counter): New helpers, as yet
  unused, but which will implement fixed effort bounds on the inlining
  algorithm.

12 years agopeval refactor
Andy Wingo [Thu, 22 Sep 2011 22:05:27 +0000 (00:05 +0200)]
peval refactor

* module/language/tree-il/optimize.scm (peval): Add for-value, for-test,
  for-effect, and for-tail helpers.  Use them.

12 years agoattempt to prune unreferenced bindings
Andy Wingo [Thu, 22 Sep 2011 13:56:22 +0000 (15:56 +0200)]
attempt to prune unreferenced bindings

* module/language/tree-il/optimize.scm (peval): Rename `record-lexicals'
  to `record-lexical-bindings'.  Record residualized lexical
  references.  Record lexical references in maybe-unlambda.
  Unfortunately this has the disadvantage that the speculative mapping
  of lambda expressions to lexical references records that reference,
  even if we are not going to residualize it.  After processing a `let',
  prune pure unreferenced bindings.  (We can do better than this in the
  future: we can simply process them for effect.)

* test-suite/tests/tree-il.test (pass-if-peval): More debugging.
  ("partial evaluation"): Update to reflect the fact that the `y'
  binding won't be emitted.

12 years agopeval handles lexical-set
Andy Wingo [Thu, 22 Sep 2011 11:16:36 +0000 (13:16 +0200)]
peval handles lexical-set

* module/language/tree-il/optimize.scm (alpha-rename, peval): Add
  support for lexical-set, while avoiding copy propagation and pruning
  of assigned variables.

12 years agopeval: pre-analyze mutated or reffed-once lexicals
Andy Wingo [Wed, 21 Sep 2011 21:59:02 +0000 (23:59 +0200)]
peval: pre-analyze mutated or reffed-once lexicals

* module/language/tree-il/optimize.scm (<var>, build-var-table, peval):
  Before going into peval, build a table indicating refcounts and a set?
  flag for all lexicals.  Add to the table when introducing new bindings
  (via alpha-renaming).

12 years agopeval: don't propagate expressions that access memory
Andy Wingo [Sat, 24 Sep 2011 16:57:59 +0000 (18:57 +0200)]
peval: don't propagate expressions that access memory

* module/language/tree-il/optimize.scm (peval): Rename
  `pure-expression?' to `constant-expression?', in the sense of GCC's
  `pure' and `const'.  A <toplevel-ref> is not constant, because it can
  be mutated.  A <dynref> isn't constant either, for the same reason.

* test-suite/tests/tree-il.test ("partial evaluation"): Add a test, and
  update existing tests that assumed that toplevel-ref would propagate.

12 years agocontext-specific folding for peval in test and effect contexts
Andy Wingo [Thu, 22 Sep 2011 10:06:21 +0000 (12:06 +0200)]
context-specific folding for peval in test and effect contexts

* module/language/tree-il/optimize.scm (peval): Add a "test" context,
  which folds statically decidable values to <const>.  Fold pure
  expressions to <void> in "effect" contexts.  Adapt the <conditional>
  and <sequence> tests to simply look for <const> or <void> expressions,
  respectively.

12 years agothread a context through peval
Andy Wingo [Thu, 22 Sep 2011 09:23:06 +0000 (11:23 +0200)]
thread a context through peval

* module/language/tree-il/optimize.scm (peval): Thread a "context"
  through the evaluator.

12 years agopaper around `match' bug
Andy Wingo [Sat, 24 Sep 2011 15:05:30 +0000 (17:05 +0200)]
paper around `match' bug

* module/ice-9/match.scm (match): Always introduce a lexical binding, to
  avoid http://debbugs.gnu.org/9567.  Real fix ongoing.  Patch and
  original report by Stefan Israelsson Tampe.

* test-suite/tests/match.test: Add test.

12 years agopeval: various bugfixes
Andy Wingo [Sat, 24 Sep 2011 15:15:32 +0000 (17:15 +0200)]
peval: various bugfixes

* module/language/tree-il/optimize.scm (alpha-rename): Rename the
  init
  expressions of a <lambda-case>.
  (peval): Coalesce the <let-values> clauses.
  Fix pure-expression? matching of <lambda> clauses.
  Loop over and maybe-unconst the inits of a <lambda-case>.

12 years agotree-il-any bugfix
Andy Wingo [Thu, 22 Sep 2011 12:14:02 +0000 (14:14 +0200)]
tree-il-any bugfix

* module/language/tree-il/optimize.scm (tree-il-any): Fix to be called
  on all values, including leaves.  It didn't matter for the use case,
  though.

12 years agominor peval style tweak
Andy Wingo [Thu, 22 Sep 2011 10:26:02 +0000 (12:26 +0200)]
minor peval style tweak

* module/language/tree-il/optimize.scm (peval): Minor refactor to
  <lexical-ref> copy propagation.

12 years agofix alpha-rename for kwargs
Andy Wingo [Thu, 22 Sep 2011 15:43:36 +0000 (17:43 +0200)]
fix alpha-rename for kwargs

* module/language/tree-il/optimize.scm (alpha-rename): Fix
  alpha-renaming of keyword arguments.

12 years agopeval: Add test for multiple-value returns.
Ludovic Courtès [Wed, 21 Sep 2011 20:56:45 +0000 (22:56 +0200)]
peval: Add test for multiple-value returns.

* test-suite/tests/tree-il.test (pass-if-peval): Support the
  `resolve-primitives' keyword.
  ("partial evaluation"): Add test for `call-with-values'.

12 years agopeval: Rectify style.
Ludovic Courtès [Wed, 21 Sep 2011 13:17:56 +0000 (15:17 +0200)]
peval: Rectify style.

* module/language/tree-il/optimize.scm (peval): Rename `src' to
  `lv-src', and `src2' to `src'; pass `make-let-values' the right source
  locations.  Reindent `let*'.

12 years agoprevent propagation for memory-dependent operations like `car'
Andy Wingo [Fri, 23 Sep 2011 16:02:05 +0000 (18:02 +0200)]
prevent propagation for memory-dependent operations like `car'

* module/language/tree-il/primitives.scm (*primitive-constructors*):
  Record car, cdr, vector-ref, and struct-ref as "constructors".
  Comment to come later.
  (*effect-free-primitives*): Update.

* test-suite/tests/tree-il.test ("partial evaluation"): Add tests.

12 years agopeval comment & reindentation
Andy Wingo [Wed, 21 Sep 2011 06:50:45 +0000 (08:50 +0200)]
peval comment & reindentation

* module/language/tree-il/optimize.scm (peval): Add a comment regarding
  failure modes, and reindent one clause.

12 years agofix comment regarding alpha-renaming
Andy Wingo [Wed, 21 Sep 2011 06:49:36 +0000 (08:49 +0200)]
fix comment regarding alpha-renaming

* module/language/tree-il/optimize.scm (peval): Fix comment regarding
  alpha-renaming: it's not simply the allocator that needs unique names;
  rather, all transformations depend on it.

12 years agobetter pure-expression?
Andy Wingo [Wed, 21 Sep 2011 06:46:44 +0000 (08:46 +0200)]
better pure-expression?

* module/language/tree-il/optimize.scm (peval): Allow dynref, fix, and
  let-values to be pure expressions.

12 years agomore alpha-rename robustness
Andy Wingo [Wed, 21 Sep 2011 06:46:03 +0000 (08:46 +0200)]
more alpha-rename robustness

* module/language/tree-il/optimize.scm (alpha-rename): Handle all kinds
  of tree-il, with the current exceptions of lexical set!, prompt, and
  abort.

12 years agomore robust alpha-renaming
Andy Wingo [Wed, 21 Sep 2011 06:44:19 +0000 (08:44 +0200)]
more robust alpha-renaming

* module/language/tree-il/optimize.scm (fresh-gensyms): New helper.
  (alpha-rename): Name the new gensyms using the old names as templates,
  not the old gensyms.  This prevents accidental collisions between
  gensyms, if #{x 1}# becomes #{x 12}# instead of #{x 2}#.

12 years agopeval: inlining of let-values
Andy Wingo [Wed, 21 Sep 2011 06:58:09 +0000 (08:58 +0200)]
peval: inlining of let-values

* module/language/tree-il/optimize.scm (peval): Add support for
  let-values.  Try to inline the consumer into the body of the producer,
  if there is only one return point, and we can figure out how many
  values are being returned, and that number is compatible with the
  consumer.

12 years agopeval support for more forms
Andy Wingo [Wed, 21 Sep 2011 06:56:09 +0000 (08:56 +0200)]
peval support for more forms

* module/language/tree-il/optimize.scm (peval): Add support for fix,
  dynwind, dynlet, dynref, module-set, and toplevel-set.  (Mutating a
  variable directly is similar to calling a function that does so behind
  our backs, so this presents no additional problem.)

12 years agoadd singly-valued-primitive?
Andy Wingo [Wed, 21 Sep 2011 06:53:06 +0000 (08:53 +0200)]
add singly-valued-primitive?

* module/language/tree-il/primitives.scm (singly-valued-primitive?): New
  predicate, for primitives that return exactly one value.

12 years agomore optimize.scm factoring
Andy Wingo [Tue, 20 Sep 2011 00:59:53 +0000 (20:59 -0400)]
more optimize.scm factoring

* module/language/tree-il/optimize.scm (vlist-any): New helper.
  (peval): Use it here.

12 years agooptimize.scm refactor
Andy Wingo [Tue, 20 Sep 2011 00:49:50 +0000 (20:49 -0400)]
optimize.scm refactor

* module/language/tree-il/optimize.scm (let/ec, tree-il-any): New
  helpers.
  (code-contains-calls?): Use them here.

12 years agoFix compilation of untyped arrays of rank not 1
Daniel Llorens [Mon, 5 Sep 2011 09:09:08 +0000 (11:09 +0200)]
Fix compilation of untyped arrays of rank not 1

* module/language/glil/compile-assembly.scm: vector-fold2 expects vector.

12 years agoRemove extraneous semicolon from `SCM_STATIC_SUBR_OBJVECT' to prevent ISO C90 warning.
Julian Graham [Sun, 18 Sep 2011 20:58:47 +0000 (16:58 -0400)]
Remove extraneous semicolon from `SCM_STATIC_SUBR_OBJVECT' to prevent ISO C90 warning.

* snarf.h (SCM_STATIC_SUBR_OBJVECT): Remove semicolon at end of macro
  definition.

12 years agopeval: Abort inlining when the residual code contains recursive calls.
Ludovic Courtès [Sun, 18 Sep 2011 21:01:51 +0000 (23:01 +0200)]
peval: Abort inlining when the residual code contains recursive calls.

* module/language/tree-il/optimize.scm (code-contains-calls?): New
  procedure.
  (peval): Use it and abort inlining if the residual code of a procedure
  application contains recursive calls.  Suggested by Wingo, Waddell,
  and Dybvig.  Fixes <http://debbugs.gnu.org/9542>.

* test-suite/tests/tree-il.test ("partial evaluation"): Update 2 tests
  that relied on the previous behavior.  Add 1 another test.

12 years agopeval: Improve alpha-renaming test.
Ludovic Courtès [Sun, 18 Sep 2011 20:34:40 +0000 (22:34 +0200)]
peval: Improve alpha-renaming test.

* test-suite/tests/tree-il.test ("partial evaluation")["inlined lambdas
  are alpha-renamed"]: Rewrite.

12 years agoArrange so that stack-cleaning loops in GC tests are not optimized out.
Ludovic Courtès [Sun, 18 Sep 2011 19:41:25 +0000 (21:41 +0200)]
Arrange so that stack-cleaning loops in GC tests are not optimized out.

* test-suite/tests/gc.test (stack-cleanup): New procedure.
  ("Unused modules are removed"): Use it.

* test-suite/tests/threads.test (stack-cleanup): Likewise.
  ("mutex with owner not retained (bug #27450)"): Use it.

12 years agopeval: Typo.
Ludovic Courtès [Sat, 17 Sep 2011 14:53:23 +0000 (16:53 +0200)]
peval: Typo.

* module/language/tree-il/optimize.scm (peval)[maybe-unlambda]: Fix
  typo in comment.

12 years agopeval: Alpha-rename anonymous lambdas that are duplicated.
Ludovic Courtès [Sat, 17 Sep 2011 14:49:41 +0000 (16:49 +0200)]
peval: Alpha-rename anonymous lambdas that are duplicated.

* module/language/tree-il/optimize.scm (alpha-rename): New procedure.
  (peval)[maybe-unlambda]: Use it.

* test-suite/tests/tree-il.test ("partial evaluation"): Add two test
  cases for <https://lists.gnu.org/archive/html/bug-guile/2011-09/msg00019.html>.

12 years agopeval: Use `resolve-primitives!'.
Ludovic Courtès [Tue, 13 Sep 2011 21:34:07 +0000 (23:34 +0200)]
peval: Use `resolve-primitives!'.

* module/language/tree-il/optimize.scm (peval): Add `cenv' optional
  argument; caller updated.
  Use `resolve-primitives!' to resolve <primitive-ref> expressions.

12 years agopeval: Clarify `pure-expression?'.
Ludovic Courtès [Tue, 13 Sep 2011 21:30:22 +0000 (23:30 +0200)]
peval: Clarify `pure-expression?'.

* module/language/tree-il/optimize.scm (peval)[pure-expression?]:
  Clarify the comment.