
#ifndef _Program_h_INCLUDED
#define _Program_h_INCLUDED

#include "ops.h"
#include "Frame.h"
#include "Obj.h"

class Program : public Obj {

  public:

    Program(Program *enclosing = 0);
    void AddOp (int op);
    void AddP (void *p) { AddL((long) p); }
    void AddL (long l);
    void AddS (short s);
    void SetL (long where, long l);
    long End (void) { return size; }
    void Dump (int indent = 0);
    void AddParam (Symbol *sym) { params->AddBinding(sym); }
    Frame *Params (void) { return params; }
    int FetchOp (long &ip);
    long FetchL (long &ip);
    short FetchS (long &ip);
    void *FetchP (long &ip);
    
    
  private:
    
    unsigned char *code;
    long size;
    long alloced;
    Frame *params;
};


#endif
