rt_func_object.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #ifndef AFUN_RT_FUNC_OBJECT_H
  2. #define AFUN_RT_FUNC_OBJECT_H
  3. #include <list>
  4. #include "aFunRuntimeExport.h"
  5. #include "aFuncore.h"
  6. namespace aFunrt {
  7. class AFUN_RT_EXPORT Function : public virtual aFuncore::Object {
  8. public:
  9. class AFUN_RT_EXPORT CallFunction;
  10. virtual CallFunction *getCallFunction(const aFuncode::Code::ByteCode *code, aFuncore::Inter &inter) = 0;
  11. virtual bool isInfix();
  12. };
  13. class AFUN_RT_EXPORT Function::CallFunction {
  14. public:
  15. class ArgCodeList;
  16. CallFunction() = default;
  17. virtual ~CallFunction() = default;
  18. CallFunction(const CallFunction &)=delete;
  19. CallFunction &operator=(const CallFunction &)=delete;
  20. virtual std::list<ArgCodeList> *getArgCodeList(aFuncore::Inter &inter, aFuncore::Activation &activation, const aFuncode::Code::ByteCode *call) = 0;
  21. virtual void runFunction() = 0;
  22. };
  23. class Function::CallFunction::ArgCodeList {
  24. public:
  25. const aFuncode::Code::ByteCode *code = nullptr;
  26. AFUN_INLINE explicit ArgCodeList(const aFuncode::Code::ByteCode *code = nullptr);
  27. AFUN_INLINE ~ArgCodeList();
  28. AFUN_INLINE aFuncore::Object *setObject(aFuncore::Object *res);
  29. AFUN_INLINE aFuncore::Object *getObject();
  30. private:
  31. aFuncore::Object *ret;
  32. };
  33. }
  34. #include "rt_func_object.inline.h"
  35. #endif //AFUN_RT_FUNC_OBJECT_H