codeobject.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #include "pocketpy/codeobject.h"
  2. namespace pkpy{
  3. CodeObject::CodeObject(std::shared_ptr<SourceData> src, const Str& name):
  4. src(src), name(name), start_line(-1), end_line(-1) {
  5. blocks.push_back(CodeBlock(CodeBlockType::NO_BLOCK, -1, 0, 0));
  6. }
  7. void CodeObject::_gc_mark() const {
  8. for(PyObject* v : consts) PK_OBJ_MARK(v);
  9. for(auto& decl: func_decls) decl->_gc_mark();
  10. }
  11. NativeFunc::NativeFunc(NativeFuncC f, int argc, bool method){
  12. this->f = f;
  13. this->argc = argc;
  14. if(argc != -1) this->argc += (int)method;
  15. }
  16. NativeFunc::NativeFunc(NativeFuncC f, FuncDecl_ decl){
  17. this->f = f;
  18. this->argc = -1;
  19. this->decl = decl;
  20. }
  21. struct PySignalObject: PyObject {
  22. PySignalObject() : PyObject(0) { gc_enabled = false; }
  23. void _obj_gc_mark() override {}
  24. };
  25. PyObject* const PY_NULL = new PySignalObject();
  26. PyObject* const PY_OP_CALL = new PySignalObject();
  27. PyObject* const PY_OP_YIELD = new PySignalObject();
  28. } // namespace pkpy