Related articles |
---|
recursive nested functions nojb@uchicago.edu (nojb) (2010-06-25) |
Re: recursive nested functions cfc@shell01.TheWorld.com (Chris F Clark) (2010-06-27) |
Re: recursive nested functions gene.ressler@gmail.com (Gene) (2010-06-27) |
Re: recursive nested functions cr88192@hotmail.com (BGB / cr88192) (2010-06-28) |
From: | Chris F Clark <cfc@shell01.TheWorld.com> |
Newsgroups: | comp.compilers |
Date: | Sun, 27 Jun 2010 18:19:11 -0400 |
Organization: | The World Public Access UNIX, Brookline, MA |
References: | 10-06-078 |
Keywords: | optimize |
Posted-Date: | 28 Jun 2010 00:17:41 EDT |
nojb <nojb@uchicago.edu> writes:
> I'm writing a compiler for a language that admits recursive nested
> functions and I am stuck trying to figure out how to handle them. My
> objective is to lift all nested functions to top level and pass all
> their free variables explicitly as parameters. For this, I have to
> figure out which variables are free. So when I'm analyzing the body
> of each function, I record its free variables. But then obviously when
> I come across a function call, I have to add _its_ free variables to
> the list of the enclosing function. You can see how this will loop
> endlesly if we allow recursive functions...
It won't loop endlessly, there is a fixed upper bound, a function f()
with a finite set of free variables: v1, v2, ... will not introduce
any new free variables when it calls itself recursively (even
indirectly). Thus, when you take the closure, it is a closed finite
set that is bounded by the union of free variables of the consituent
functions.
Hope this helps,
-Chris
******************************************************************************
Chris Clark email: christopher.f.clark@compiler-resources.com
Compiler Resources, Inc. Web Site: http://world.std.com/~compres
23 Bailey Rd voice: (508) 435-5016
Berlin, MA 01503 USA twitter: @intel_chris
------------------------------------------------------------------------------
Return to the
comp.compilers page.
Search the
comp.compilers archives again.