Guest User

what am i doing with my life, why am i so obsessed with gm jesus god

a guest
Apr 6th, 2021
680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma once
  2. #ifndef _YOYO_H_
  3. #define _YOYO_H_ 1
  4. #include <exception>
  5. #include <string>
  6. #include "stdafx.h"
  7.  
  8. #define MASK_KIND_RVALUE 0x0ffffff
  9.  
  10. class YYObjectBase;
  11. struct RValue;
  12. class CWeakRef;
  13. class RefDynamicArrayOfRValue;
  14.  
  15. template<typename T> class YYReference {
  16.     T   m_refThing;
  17.     int m_refCount;
  18.     int m_size;
  19.  
  20. public:
  21.     void inc()        { ++m_refCount;      }
  22.     T    get()  const { return m_refThing; }
  23.     int  size() const { return m_size;     }
  24. };
  25.  
  26. enum RVALUE_KIND {
  27.     K_REAL,
  28.     K_STRING,
  29.     K_ARRAY,
  30.     K_PTR,
  31.     K_VEC3,
  32.     K_UNDEFINED,
  33.     K_OBJECT,
  34.     K_INT32,
  35.     K_VEC4,
  36.     K_VEC44,
  37.     K_INT64,
  38.     K_ACCESSOR,
  39.     K_NULL,
  40.     K_BOOL,
  41.     K_ITERATOR,
  42.     K_REF,
  43.     K_UNSET = MASK_KIND_RVALUE
  44. };
  45.  
  46. enum EJSRetValBool {
  47.     EJSRVB_FALSE = 0,
  48.     EJSRVB_TRUE = 1,
  49.     EJSRVB_TYPE_ERROR = 2
  50. };
  51.  
  52. enum EHasInstanceRetVal {
  53.     E_FALSE = 0,
  54.     E_TRUE = 1,
  55.     E_TYPE_ERROR = 2
  56. };
  57.  
  58. enum OBJECT_KIND {
  59.     OBJECT_KIND_YYOBJECTBASE = 0,
  60.     OBJECT_KIND_CINSTANCE,
  61.     OBJECT_KIND_ACCESSOR,
  62.     OBJECT_KIND_SCRIPTREF,
  63.     OBJECT_KIND_PROPERTY,
  64.     OBJECT_KIND_ARRAY,
  65.     OBJECT_KIND_WEAKREF,
  66.  
  67.     OBJECT_KIND_CONTAINER,
  68.  
  69.     OBJECT_KIND_SEQUENCE,
  70.     OBJECT_KIND_SEQUENCEINSTANCE,
  71.     OBJECT_KIND_SEQUENCETRACK,
  72.     OBJECT_KIND_SEQUENCECURVE,
  73.     OBJECT_KIND_SEQUENCECURVECHANNEL,
  74.     OBJECT_KIND_SEQUENCECURVEPOINT,
  75.     OBJECT_KIND_SEQUENCEKEYFRAMESTORE,
  76.     OBJECT_KIND_SEQUENCEKEYFRAME,
  77.     OBJECT_KIND_SEQUENCEKEYFRAMEDATA,
  78.     OBJECT_KIND_SEQUENCEEVALTREE,
  79.     OBJECT_KIND_SEQUENCEEVALNODE,
  80.     OBJECT_KIND_SEQUENCEEVENT,
  81.  
  82.     OBJECT_KIND_NINESLICE,
  83.  
  84.     OBJECT_KIND_MAX
  85. };
  86.  
  87. #pragma pack(push, 4)
  88. union RUnion {
  89.     int i32;
  90.     long long i64;
  91.     double f64;
  92.     void* ptr;
  93.     YYObjectBase* obj;
  94.     YYReference<const char*>* str;
  95.     RefDynamicArrayOfRValue* arr;
  96. };
  97.  
  98. struct RValue {
  99.     RUnion v;
  100.     int flags;
  101.     int kind;
  102.  
  103.     RValue() {
  104.         kind = K_UNDEFINED;
  105.         v.i64 = 0ll;
  106.     }
  107.  
  108.     RValue(bool a) {
  109.         kind = K_BOOL;
  110.         v.f64 = a ? 1.0 : 0.0;
  111.     }
  112.  
  113.     RValue(int a) {
  114.         kind = K_INT32;
  115.         v.i32 = a;
  116.     }
  117.  
  118.     RValue(long long a) {
  119.         kind = K_INT64;
  120.         v.i64 = a;
  121.     }
  122.  
  123.     RValue(double a) {
  124.         kind = K_REAL;
  125.         v.f64 = a;
  126.     }
  127.  
  128.     int getFlags() const { return flags; }
  129.     int getType()  const { return kind & MASK_KIND_RVALUE; }
  130.     double toDouble() const {
  131.         switch (kind & MASK_KIND_RVALUE) {
  132.             case K_REAL: return v.f64;
  133.             case K_INT32: return v.i32;
  134.             case K_INT64: return static_cast<double>(v.i64);
  135.             case K_BOOL: return v.f64;
  136.         }
  137.  
  138.         throw std::exception("Unsupported type cast!");
  139.     }
  140. };
  141. #pragma pack(pop)
  142.  
  143. class CInstanceBase {
  144. public:
  145.     RValue*     yyvars;
  146.     virtual ~CInstanceBase() {};
  147.     RValue& GetYYVarRef(int index) {
  148.         return InternalGetYYVarRef(index);
  149.     } // end GetYYVarRef
  150.     virtual  RValue& InternalGetYYVarRef(int index) = 0;
  151.     RValue& GetYYVarRefL(int index) {
  152.         return InternalGetYYVarRefL(index);
  153.     } // end GetYYVarRef
  154.     virtual  RValue& InternalGetYYVarRefL(int index) = 0;
  155. };
  156.  
  157. //void GetOwnPropertyFunc(YYObjectBase * , RValue * , char * )
  158. //void DeletePropertyFunc(YYObjectBase * , RValue * , char * , bool )
  159. //EJSRetValBool DefineOwnPropertyFunc(YYObjectBase * , char * , RValue * , bool )
  160. typedef void(*GetOwnPropertyFunc_t)(const YYObjectBase* obj, RValue* rv, const char* name);
  161. typedef void(*DeletePropertyFunc_t)(const YYObjectBase* obj, RValue* rv, const char* name, bool flag);
  162. typedef EJSRetValBool(*DefineOwnPropertyFunc_t)(const YYObjectBase* obj, const char* name, RValue* rv, bool flag);
  163. typedef EHasInstanceRetVal(*JSHasInstanceFunc_t)(YYObjectBase* obj, RValue* rv);
  164. typedef void(*JSConstructorFunc_t)(RValue& Result, YYObjectBase* pSelf, YYObjectBase* pOther, int argc, RValue* argv);
  165.  
  166. typedef unsigned int uint32;
  167. typedef int int32;
  168. typedef uint32 Hash;
  169. typedef long long int64;
  170. typedef const char* String;
  171. typedef unsigned char uint8;
  172.  
  173. template<typename T>
  174. class Element {
  175.     T    v;
  176.     int  k;
  177.     Hash h;
  178. };
  179.  
  180. template<typename Tk, typename Tv, int I = 3>
  181. class CHashMap {
  182.     int m_curSize;
  183.     int m_numUsed;
  184.     int m_curMask = I;
  185.     int m_growThreshold;
  186.     Element<Tv> m_elements;
  187.  
  188.     int GetIdealPosition(Hash _h) {
  189.         return m_curMask & _h & INT_MAX;
  190.     }
  191. };
  192.  
  193. class YYObjectBase : public CInstanceBase {
  194. public:
  195.     YYObjectBase* m_pNextObject;
  196.     YYObjectBase* m_pPrevObject;
  197.     YYObjectBase* m_pPrototype;
  198.     void* m_pcre;
  199.     void* m_pcreExtra;
  200.     char* m_class;
  201.     GetOwnPropertyFunc_t m_getOwnProperty;
  202.     DeletePropertyFunc_t m_deleteProperty;
  203.     DefineOwnPropertyFunc_t m_defineOwnProperty;
  204.     CHashMap<int, RValue*, 3>* m_yyvarsMap;
  205.     CWeakRef** m_pWeakRefs;
  206.     uint32 m_numWeakRefs;
  207.     uint32 m_nvars;
  208.     uint32 m_flags;
  209.     uint32 m_capacity;
  210.     uint32 m_visited;
  211.     uint32 m_visitedGC;
  212.     int32 m_GCgen;
  213.     int32 m_GCcreationFrame;
  214.     int m_slot;
  215.     int m_kind;
  216.     int m_rvalueInitType;
  217.     int m_curSlot;
  218.  
  219.     void get(const std::string& name, RValue& out) {
  220.         m_getOwnProperty(this, &out, name.c_str());
  221.     }
  222.  
  223.     EJSRetValBool set(const std::string& name, RValue& val) {
  224.         return m_defineOwnProperty(this, name.c_str(), &val, false);
  225.     }
  226. };
  227.  
  228. class RefDynamicArrayOfRValue : public YYObjectBase {
  229.     int refcount;
  230.     int flags;
  231.     RValue* pArray;
  232.     int64 owner;
  233.     int visited;
  234.     int length;
  235. };
  236.  
  237. class CWeakRef : public YYObjectBase {
  238.     YYObjectBase* m_pWeakRef;
  239. };
  240.  
  241. typedef void(*TObjectCall)(RValue& Result, YYObjectBase* pSelf, YYObjectBase* pOther, int argc, RValue* argv);
  242. typedef RValue&(*PFUNC_YYGMLScript_Internal)(YYObjectBase* pSelf, YYObjectBase* pOther, RValue& Result, int argc, RValue** argv);
  243. typedef void(*PFUNC_YYGML)(YYObjectBase* pSelf, YYObjectBase* pOther);
  244.  
  245. enum eGML_TYPE : uint32 {
  246.     eGMLT_NONE   = 0,
  247.     eGMLT_DOUBLE = 1,
  248.     eGMLT_STRING = 2,
  249.     eGMLT_INT32  = 4,
  250.     eGMLT_ERROR  = 0xFFFFFFFF
  251. };
  252.  
  253. struct RToken {
  254.     int kind;
  255.     eGML_TYPE type;
  256.     int ind;
  257.     int ind2;
  258.     RValue value;
  259.     int itemnumb;
  260.     RToken* items;
  261.     int position;
  262. };
  263.  
  264. struct YYGMLFuncs {
  265.     char* name;
  266.     PFUNC_YYGML func;
  267. };
  268.  
  269. union CScriptU {
  270.     char* s_script;
  271.     int s_compiledIndex;
  272. };
  273.  
  274. class VMBuffer {
  275.     virtual ~VMBuffer() {};
  276. public:
  277.     int m_size;
  278.     int m_numLocalVarsUsed;
  279.     int m_numArguments;
  280.     uint8* m_pBuffer;
  281.     void** m_pConvertedBuffer;
  282.     int* m_pJumpBuffer;
  283. };
  284.  
  285. class CCode {
  286.     virtual ~CCode() {};
  287. public:
  288.     CCode* m_pNext;
  289.     int i_kind;
  290.     bool i_compiled;
  291.     String i_str;
  292.     RToken i_token;
  293.     RValue i_value;
  294.     VMBuffer* i_pVM;
  295.     VMBuffer* i_pVMDebugInfo;
  296.     char* i_pCode;
  297.     char* i_pName;
  298.     int i_CodeIndex;
  299.     YYGMLFuncs* i_pFunc;
  300.     bool i_watch;
  301.     int i_offset;
  302.     int i_locals;
  303.     int i_args;
  304.     int i_flags;
  305.     YYObjectBase* i_pPrototype;
  306. };
  307.  
  308. class CScript {
  309.     virtual ~CScript() {};
  310. public:
  311.     void* s_text;
  312.     void* s_code;
  313.     YYGMLFuncs* s_pFunc;
  314.     CScriptU u;
  315.     char* s_name;
  316.     int s_offset;
  317. };
  318.  
  319. class CScriptRef : public YYObjectBase {
  320. public:
  321.     CScript* m_callScript;
  322.     TObjectCall m_callCpp;
  323.     PFUNC_YYGMLScript_Internal m_callYYC;
  324.     RValue m_scope;
  325.     RValue m_boundThis;
  326.     YYObjectBase* m_pStatic;
  327.     JSHasInstanceFunc_t m_hasInstance;
  328.     JSConstructorFunc_t m_construct;
  329.     char* m_tag;
  330. };
  331.  
  332. #endif /* _YOYO_H_ */
Advertisement
Add Comment
Please, Sign In to add comment