rt_func_activation.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #ifndef AFUN_RT_FUNC_ACTIVATION_H
  2. #define AFUN_RT_FUNC_ACTIVATION_H
  3. #include "aFunRuntimeExport.h"
  4. #include "aFuncore.h"
  5. #include "rt_func_object.h"
  6. #include "rt_normal_activation.h"
  7. namespace aFunrt {
  8. class AFUN_RT_EXPORT FuncActivation : public NormalActivation {
  9. public:
  10. AFUN_INLINE explicit FuncActivation(const aFuncode::Code::ByteCode *code, aFuncore::Inter &inter_);
  11. explicit FuncActivation(Function *func, aFuncore::Inter &inter_);
  12. ~FuncActivation() override;
  13. ActivationStatus getCode(const aFuncode::Code::ByteCode *&code) override;
  14. void endRun() override;
  15. private:
  16. enum {
  17. func_first = 0, // 获取函数体前准备
  18. func_get_func = 1, // 获取函数体后,开始获取参数前
  19. func_get_arg = 2, // 获取参数过程
  20. } status = func_first;
  21. bool on_tail = false;
  22. const aFuncode::Code::ByteCode *call;
  23. Function *func = nullptr;
  24. Function::CallFunction *call_func = nullptr;
  25. std::list<Function::CallFunction::ArgCodeList> *acl = nullptr;
  26. std::list<Function::CallFunction::ArgCodeList>::iterator acl_begin;
  27. std::list<Function::CallFunction::ArgCodeList>::iterator acl_end;
  28. };
  29. }
  30. #include "rt_func_activation.inline.h"
  31. #endif //AFUN_RT_FUNC_ACTIVATION_H