campo-sirio/ba/ba8304.h

62 lines
1.4 KiB
C
Raw Normal View History

#ifndef __ALEX_H
#define __ALEX_H
#ifndef __RECORDSET_H
#include "ba8201.h"
#endif
class TVariant_stack : public TObject
{
TArray _var;
int _sp;
public:
int items() const { return _sp; }
void push(const TVariant& var);
TVariant& pop();
TVariant& peek(int depth = 0);
TVariant_stack() : _sp(0) { }
};
// Generic bytecode for any language
class TBytecode : public TArray
{
TString16 _language;
TString _name;
public:
void set_language(const char* lang) { _language = lang; }
const TString& language() const { return _language; }
const set_name(const char* name) { _name = name; }
const TString& name() const { return _name; }
};
// ALEX = Another Language EXtension
class TAVM;
class TAlex_virtual_machine : public TObject
{
TAVM* _avm; // Chesire's cat class
public:
virtual unsigned int compile_usr_word(const TString& name) const;
virtual bool execute_usr_word(unsigned int opcode, TVariant_stack& stack);
virtual bool get_usr_val(const TString& name, TVariant& var) const;
virtual bool set_usr_val(const TString& name, const TVariant& var);
const TString& get_last_error() const;
bool compile(istream& instr, TBytecode& bc);
bool compile(const char* cmd, TBytecode& bc);
bool execute(const TBytecode& bc, ostream& outstr);
bool execute(const TBytecode& bc, TString& outstr);
TAlex_virtual_machine();
virtual ~TAlex_virtual_machine();
};
#endif