/*
 *  Copyright 2001-2004 David Abrahams.
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
 */
#ifndef FRAMES_DWA20011021_H
#define FRAMES_DWA20011021_H

#include "lists.h"
#include "modules.h"

typedef struct _PARSE PARSE;
typedef struct frame FRAME;

struct frame
{
    FRAME    * prev;
    /* The nearest enclosing frame for which module->user_module is true. */
    FRAME    * prev_user;
    LOL        args[ 1 ];
    module_t * module;
    PARSE    * procedure;
    char     * rulename;
};


/* When call into Python is in progress, this variable points to the bjam frame
 * that was current at the moment of call. When the call completes, the variable
 * is not defined. Further, if Jam calls Python which calls Jam and so on, this
 * variable only keeps the most recent Jam frame.
 */
extern struct frame * frame_before_python_call;

void frame_init( FRAME * );  /* implemented in compile.c */
void frame_free( FRAME * );  /* implemented in compile.c */

#endif