| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #pragma once
- #include "obj.h"
- class Frame;
- struct BasePointer {
- virtual PyVar get(VM*, Frame*) const = 0;
- virtual void set(VM*, Frame*, PyVar) const = 0;
- virtual void del(VM*, Frame*) const = 0;
- virtual ~BasePointer() = default;
- };
- enum NameScope {
- NAME_LOCAL = 0,
- NAME_GLOBAL = 1,
- NAME_ATTR = 2,
- };
- struct NamePointer : BasePointer {
- const std::pair<_Str, NameScope>* pair;
- NamePointer(const std::pair<_Str, NameScope>* pair) : pair(pair) {}
- PyVar get(VM* vm, Frame* frame) const;
- void set(VM* vm, Frame* frame, PyVar val) const;
- void del(VM* vm, Frame* frame) const;
- };
- struct AttrPointer : BasePointer {
- mutable PyVar obj;
- const NamePointer attr;
- AttrPointer(PyVar obj, const NamePointer attr) : obj(obj), attr(attr) {}
- PyVar get(VM* vm, Frame* frame) const;
- void set(VM* vm, Frame* frame, PyVar val) const;
- void del(VM* vm, Frame* frame) const;
- };
- struct IndexPointer : BasePointer {
- mutable PyVar obj;
- PyVar index;
- IndexPointer(PyVar obj, PyVar index) : obj(obj), index(index) {}
- PyVar get(VM* vm, Frame* frame) const;
- void set(VM* vm, Frame* frame, PyVar val) const;
- void del(VM* vm, Frame* frame) const;
- };
- struct CompoundPointer : BasePointer {
- PyVarList varRefs;
- CompoundPointer(const PyVarList& varRefs) : varRefs(varRefs) {}
- CompoundPointer(PyVarList&& varRefs) : varRefs(std::move(varRefs)) {}
- PyVar get(VM* vm, Frame* frame) const;
- void set(VM* vm, Frame* frame, PyVar val) const;
- void del(VM* vm, Frame* frame) const;
- };
- struct UserPointer : BasePointer {
- VarRef p;
- uint64_t f_id;
- UserPointer(VarRef p, uint64_t f_id) : p(p), f_id(f_id) {}
- PyVar get(VM* vm, Frame* frame) const;
- void set(VM* vm, Frame* frame, PyVar val) const;
- void del(VM* vm, Frame* frame) const;
- };
|