00001 // 00002 // core/frame.h 00003 // 00004 // Copyright (c) 2008-2009, Mike Austin 00005 // All rights reserved. 00006 // 00007 00008 #ifndef _IMPULSE_FRAME_H_ 00009 #define _IMPULSE_FRAME_H_ 00010 00011 #include <string> 00012 00013 #include "../impulse.h" 00014 00015 namespace impulse { 00016 00017 // 00018 // class Frame 00019 // 00020 00025 00026 class Frame { 00027 00028 public: 00029 00030 void* operator new( size_t size ); 00031 00032 Frame( Frame* proto = NULL ); 00033 virtual ~Frame(); 00034 00035 Value getSlot( Symbol& symbol ); 00036 Value setSlot( Symbol& symbol, Value value ); 00037 00038 virtual Value eval( Array& args, Value self ); 00039 00040 Value send( Symbol& selector, Array& args ); 00041 Value send( Symbol& selector, Array& args, Value self ); 00042 00043 virtual void initSlots() { } 00044 00045 map<Symbol*, Value>& slots() { return _slots; } 00046 Frame*& proto() { return _proto; } 00047 00048 virtual string inspect(); 00049 00050 private: 00051 00052 map<Symbol*, Value> _slots; 00053 Frame* _proto; 00054 unsigned short _refCount; 00055 00056 friend class Value; 00057 00058 }; 00059 00060 } 00061 00062 #endif