imk0tter

Help mSL++ please

May 11th, 2021 (edited)
740
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. alias Class.FREE {
  2.   ;;;;;;;;;;;;;;;;;;;;;;
  3.   ; Do Destroying here ;
  4.   ;;;;;;;;;;;;;;;;;;;;;;
  5.   var %object $1
  6.  
  7.   if $mprop($prop) == ALL {
  8.     if $hget(%object) {
  9.       var %y $hget(%object,0).item
  10.       while %y {
  11.         var %currentObject $hget(%object, $hget(%object,%y).ITEM)
  12.  
  13.         var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  14.         maketok MAKETOK V %currentObject
  15.         var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  16.  
  17.         var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
  18.         maketok MAKETOK V $*
  19.         var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  20.  
  21.         if $CLASS_FREE_STACK(%currentObject) {
  22.           - $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,FREE.ALL. $+ $mprop($prop,1))
  23.         }
  24.         dec %y
  25.       }
  26.       hfree CLASS_FREE_STACK
  27.     }
  28.     hdel MSL++ %object $+ _INIT
  29.     if ($hget(%object)) hfree %object
  30.   }
  31.   else if $prop {
  32.     var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  33.     maketok MAKETOK V %object
  34.     var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  35.  
  36.     var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
  37.     maketok MAKETOK V $*
  38.     var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  39.  
  40.     return $meval(Class, MAKETOK, %evarstart, %evarend, %start,%end,$prop)
  41.   }  
  42.   if ($hget(MAKETOK)) hfree MAKETOK
  43. }
  44.  
  45. alias Class_FREE_STACK {
  46.   if !$hfind(CLASS_FREE_STACK, $1-) {
  47.     hadd -m CLASS_FREE_STACK $1- 1
  48.     return 1
  49.   }
  50.   return 0
  51. }
  52.  
  53. alias Class {
  54.   var %class Class
  55.   if !$mprop($prop) {
  56.     if ($IsPrivate(%class,INIT)) {
  57.       var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  58.       var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  59.  
  60.       var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  61.       maketok MAKETOK V $*
  62.       var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  63.  
  64.       var %object $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,INIT)
  65.       - $inheritsFrom(%object,%class)
  66.       if ($hget(MAKETOK)) hfree MAKETOK
  67.       return %object
  68.     }
  69.     else {
  70.       if ($hget(MAKETOK)) hfree MAKETOK
  71.     }
  72.   }
  73.   else if $IsPublic(%class,$mprop($prop)) {
  74.     var %object $1
  75.  
  76.     var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  77.     maketok MAKETOK V %object
  78.     var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  79.  
  80.     var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
  81.     maketok MAKETOK V $*
  82.     var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  83.  
  84.     return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
  85.   }
  86.   else {
  87.     if ($hget(MAKETOK)) hfree MAKETOK
  88.     return $catch($1,MemberErr, $scriptline, $token($script,-1,92), $qt($prop) is not a public member of %Class)
  89.   }
  90. }
  91. ;;;;;;;;;;;;;;;;;
  92. ; Class Methods ;
  93. ;;;;;;;;;;;;;;;;;
  94. alias Class.INIT {
  95.   var %htable MSL++
  96.   hinc -m %htable OBJECT_NUMBER
  97.   var %object $+(%htable,_,$hget(%htable,OBJECT_NUMBER))
  98.  
  99.   hadd -m %htable $+(%object,_,INIT)
  100.   return %object
  101. }
  102. alias Class.SET {
  103.   var %object $1
  104.   if ($isInstance(%object)) {
  105.     if $mprop($prop) == b {
  106.       hadd -mb %object $2 $$3
  107.  
  108.       if $mprop($mprop($prop,1)) {
  109.         var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  110.         maketok MAKETOK V %object
  111.         var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  112.  
  113.         var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
  114.         maketok MAKETOK V $*
  115.         var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  116.  
  117.         return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$mprop($prop,1))
  118.       }
  119.     }
  120.     else {
  121.       hadd -m %object $2 $$3
  122.  
  123.       if $prop {
  124.         var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  125.         maketok MAKETOK V %object
  126.         var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  127.  
  128.  
  129.         var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
  130.         maketok MAKETOK V $*
  131.         var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  132.         return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
  133.       }
  134.     }
  135.   }
  136.   if ($hget(MAKETOK)) hfree MAKETOK
  137. }
  138.  
  139. alias Class.GET {
  140.   var %object $1
  141.   var %variableName $2
  142.   var %bvar $3
  143.   var %mprop $mprop($prop)
  144.  
  145.   if (%mprop == b) {
  146.     var %hget $hget(%object,%variableName,%bvar)
  147.  
  148.     var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  149.     maketok MAKETOK V %object
  150.     maketok MAKETOK B %hget
  151.     var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  152.  
  153.  
  154.     var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
  155.     maketok MAKETOK V $*
  156.     var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  157.  
  158.     echo -a GET: OBJECT: %object VARNAME: $2 HGET: %hget
  159.     return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$mprop($prop,1))
  160.   }
  161.   else {
  162.     var %hget $hget(%object,%variableName)
  163.     if $prop {
  164.  
  165.       var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  166.       maketok MAKETOK V %object
  167.       maketok MAKETOK V %hget
  168.       var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  169.  
  170.  
  171.       var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  172.       maketok MAKETOK V $*
  173.       var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  174.  
  175.       return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
  176.     }
  177.     else {
  178.       if ($hget(MAKETOK)) hfree MAKETOK
  179.       return %hget
  180.     }
  181.   }
  182. }
  183.  
  184. alias Class.UNSET {
  185.   var %object $1
  186.   hdel %object $$2
  187.   if $prop {
  188.  
  189.     var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  190.     maketok MAKETOK V %object
  191.     var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  192.  
  193.  
  194.     var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 3
  195.     maketok MAKETOK V $*
  196.     var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  197.  
  198.     return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
  199.   }
  200.   else {
  201.     if ($hget(MAKETOK)) hfree MAKETOK
  202.   }
  203. }
  204.  
  205. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  206. ; Description: Returns whether or not a class member ;
  207. ; is public.                                         ;
  208. ;                                                    ;
  209. ; Usage: $IsPublic(<Class>,<Member>)                 ;
  210. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  211. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  212. alias IsPublic return $isalias($+($1.,$2.,PUBLIC))
  213.  
  214. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  215. ; Description: Returns whether or not a class member ;
  216. ; is private.                                        ;
  217. ;                                                    ;
  218. ; Usage: $IsPrivate(<Class>,<Member>)                 ;
  219. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  220. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  221. alias IsPrivate return $isalias($+($1.,$2))
  222.  
  223.  
  224. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  225. ; Description: Called from the class constructor to  ;
  226. ; let the object know that the specified object      ;
  227. ; inherits from the specified class                  ;
  228. ;                                                    ;
  229. ; Usage: $InheritsFrom(<Object>,<Class>)             ;
  230. ; Example: $InheritsFrom(%instance,Player)           ;
  231. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  232. alias InheritsFrom hadd -m MSL++ $+($1_,INIT) $2 $hget(MSL++,$+($1.,INIT))
  233.  
  234. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  235. ; Description: Returns whether or not an instance is ;
  236. ; an instance of the specified class                 ;
  237. ;                                                    ;
  238. ; Usage: $IsInstanceOf(<Instance>,<Class>)           ;
  239. ; Example: if ($IsInstanceOf(%Player,Player)) ..     ;
  240. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  241. alias IsInstanceOf return $findtok($hget(MSL++,$1_INIT),$2,0,32)
  242.  
  243.  
  244. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  245. ; Description: Returns whether or not an instance    ;
  246. ; exists in memory                                   ;
  247. ;                                                    ;
  248. ; Usage: $IsInstance(<Instance>)                     ;
  249. ; Example: if (!$IsInstance(%x)) %x = $Player        ;
  250. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  251. alias IsInstance return $token($hget(MSL++, $1_INIT),$iif($2 != $null,$2,1),32)
  252.  
  253. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  254. ; Description: Called when ever an error is caught   ;
  255. ;                                                    ;
  256. ; Usage: $catch(<Instance>,<Error>,<Message>)        ;
  257. ; Example: if (!$IsInstanceOf(%Player,Player)) {     ;
  258. ; $catch(%Player,InstanceErr,Object %player is not   ;
  259. ;  an instance of class Player)                      ;
  260. ; }                                                  ;
  261. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  262. alias CATCH {
  263.   var %error $2,%message $5,%instance $1,%scriptLine $3, %scriptDir $4
  264.  
  265.   if %instance {
  266.     var %x 1
  267.     var %inheritance $hget(MSL++,$+(%instance,_,INIT))
  268.     while $token(%inheritance,%x,32) {
  269.       var %currentClass $v1
  270.       var %currentClassException $+(%currentClass,.EXCEPTION.,%error)
  271.       if $isalias(%currentClassException) {
  272.  
  273.         var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  274.         var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  275.  
  276.         var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 0
  277.         maketok MAKETOK V $*
  278.         var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  279.  
  280.         return $meval(%currentClass $+ .EXCEPTION,MAKETOK,%evarstart,%evarend,%start,%end,%error)
  281.       }
  282.       inc %x
  283.     }
  284.     if ($hget(MAKETOK)) hfree MAKETOK
  285.   }
  286.   if ($hget(MAKETOK)) hfree MAKETOK
  287. }
  288. ;;;;;;;;;;;;;
  289. ; End Catch ;
  290. ;;;;;;;;;;;;;
  291.  
  292. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  293. ; Description: Used to call the first found method   ;
  294. ; associated with an objects inheritance tree...     ;
  295. ;                                                    ;
  296. ; Usage: $Object(<Instance>,..).<Method>             ;
  297. ; Example: $Object(%stack,$2).add                    ;
  298. ; Equivelent: $List(%stack,$2).add                   ;
  299. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  300. alias OBJECT {
  301.   var %object $1
  302.   var %inheritance $hget(MSL++,$+(%object,_,INIT))
  303.   var %iterator 1
  304.  
  305.   while $token(%inheritance,%iterator,32) {
  306.     var %currentClass $v1
  307.     if $isalias(%currentClass $+ . $+ $mprop($prop) $+ .PUBLIC) {
  308.       var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
  309.       var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
  310.  
  311.       var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 1
  312.       maketok MAKETOK V $*
  313.       var %end $iif($hget(MAKETOK,COUNT),$v1,0)
  314.  
  315.       return $meval(%currentClass,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
  316.     }
  317.     inc %iterator
  318.   }
  319.   if ($hget(MAKETOK)) hfree MAKETOK
  320.   return $catch($1,MemberErr,$scriptline, $token($script,-1,92),$mprop($prop) is not a public member of $isinstance($1))
  321. }
  322.  
  323. ;;;;;;;;;;;;;;
  324. ; End Object ;
  325. ;;;;;;;;;;;;;;
  326.  
  327. ;;;;;;;;;;;;;;;;;;;;
  328. ; Helper Functions ;
  329. ;;;;;;;;;;;;;;;;;;;;
  330. alias - { !noop $1- }
  331. alias + { $iif($Window(@Debug),echo @Debug,!noop) $iif($1-,$v1,$crlf) }
  332.  
  333. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  334. ; Code for passing dynamic variables to the $meval function ;
  335. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  336. ;      var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)     ;                                                                                          ;
  337. ;      maketok MAKETOK V SomeValue                          ; For passing variables before the $N- tokens are passed                                   ;
  338. ;      maketok MAKETOK V SomeValue2                         ;                                                                                          ;
  339. ;      var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)       ;                                                                                          ;
  340. ;                                                           ;                                                                                          ;
  341. ;      var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 1      ; Starting token number (if trying to pass $2- to a function you put + 2 instead of +1     ;
  342. ;      maketok MAKETOK V $*                                 ;    (which is for tokens $1-)                                                             ;
  343. ;      var %end $iif($hget(MAKETOK,COUNT),$v1,0)            ;                                                                                          ;
  344. ;                                                           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;              
  345. ;      return $meval(ClassName,MAKETOK,%evarstart,%evarend,%start,%end,$prop) ;
  346. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  347.  
  348. alias meval {
  349.   var %className $1
  350.  
  351.   var %prop [ $ $+ [ $0 ] ]
  352.  
  353.   var %functionName $mprop(%prop)
  354.   var %mProp $mprop(%prop,1)
  355.  
  356.   var %htable $2
  357.  
  358.   var %evarstart $3 + 1
  359.   var %evarend $4
  360.  
  361.   var %evarcount $calc(%evarend - %evarstart + 1)
  362.  
  363.   var %start $5
  364.   var %end $6
  365.  
  366.   var %count $calc(%end - %start + 1)
  367.  
  368.   var %evarregex $left($regsubex($str(.,%evarcount),/(.)/g, $+($,hget,$chr(40),%htable,$chr(44),$calc(\n + %evarstart - 1),$chr(41)) $chr(44) $+ $chr(32)),-2)
  369.  
  370.   var %regex $iif(%evarregex,$v1 $+ $chr(44) $+ $chr(32)) $+ $left($regsubex($str(.,%count),/(.)/g, $+($,hget,$chr(40),%htable,$chr(44),$calc(\n + %start - 1),$chr(41)) $chr(44) $+ $chr(32)),-2)
  371.  
  372.   var %params $+($,%className,.,%functionName,$chr(40),%regex,$chr(41),$iif(%mProp,$+(.,$v1)))
  373.  
  374.   - PARAMS: %params
  375.   return [ [ %params ] ]
  376. }
  377.  
  378. alias mprop {
  379.   return $iif($2,$token($1,2-,46), $token($1,1,46))
  380. }
  381.  
  382. alias maketok {
  383.   hinc -m $1 COUNT
  384.   hadd -m $+ $iif($2 == B,b) $1 $hget($1,COUNT) $3-
  385. }
  386. ;;;;;;;;;;;;;;;;;;;;;;;;
  387. ; END HELPER FUNCTIONS ;
  388. ;;;;;;;;;;;;;;;;;;;;;;;;
RAW Paste Data