
#ifndef _Frame_h_INCLUDED
#define _Frame_h_INCLUDED

#include "Symbol.h"
#include "Value.h"
#include "Obj.h"

struct binding {
    Symbol *sym;
    Value val;
};

class Func;

class Frame : public Obj {

  public:

    Frame(Frame *);
    void AddBinding (Symbol *sym, Value val = nil);
    void Dump (void);
    int Lookup (Symbol *sym, int *levels, int *offset);
    Value &FindValue (int levels, int offset);
    Symbol *FindSymbol (int levels, int offset);
    void IsArgsFor (Func *);
	
  private:
    
    int size;
    int alloced;
    struct binding *bindings;
    Frame *parent;
    struct binding *FindBinding (int levels, int offset);
};

#endif
