Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- alias Class.FREE {
- ;;;;;;;;;;;;;;;;;;;;;;
- ; Do Destroying here ;
- ;;;;;;;;;;;;;;;;;;;;;;
- var %object $1
- if $mprop($prop) == ALL {
- if $hget(%object) {
- var %y $hget(%object,0).item
- while %y {
- var %currentObject $hget(%object, $hget(%object,%y).ITEM)
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %currentObject
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- if $CLASS_FREE_STACK(%currentObject) {
- - $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,FREE.ALL. $+ $mprop($prop,1))
- }
- dec %y
- }
- hfree CLASS_FREE_STACK
- }
- hdel MSL++ %object $+ _INIT
- if ($hget(%object)) hfree %object
- }
- else if $prop {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class, MAKETOK, %evarstart, %evarend, %start,%end,$prop)
- }
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- alias Class_FREE_STACK {
- if !$hfind(CLASS_FREE_STACK, $1-) {
- hadd -m CLASS_FREE_STACK $1- 1
- return 1
- }
- return 0
- }
- alias Class {
- var %class Class
- if !$mprop($prop) {
- if ($IsPrivate(%class,INIT)) {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 1
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- var %object $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,INIT)
- - $inheritsFrom(%object,%class)
- if ($hget(MAKETOK)) hfree MAKETOK
- return %object
- }
- else {
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- }
- else if $IsPublic(%class,$mprop($prop)) {
- var %object $1
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 2
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
- }
- else {
- if ($hget(MAKETOK)) hfree MAKETOK
- return $catch($1,MemberErr, $scriptline, $token($script,-1,92), $qt($prop) is not a public member of %Class)
- }
- }
- ;;;;;;;;;;;;;;;;;
- ; Class Methods ;
- ;;;;;;;;;;;;;;;;;
- alias Class.INIT {
- var %htable MSL++
- hinc -m %htable OBJECT_NUMBER
- var %object $+(%htable,_,$hget(%htable,OBJECT_NUMBER))
- hadd -m %htable $+(%object,_,INIT)
- return %object
- }
- alias Class.SET {
- var %object $1
- if ($isInstance(%object)) {
- if $mprop($prop) == b {
- hadd -mb %object $2 $$3
- if $mprop($mprop($prop,1)) {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$mprop($prop,1))
- }
- }
- else {
- hadd -m %object $2 $$3
- if $prop {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
- }
- }
- }
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- alias Class.GET {
- var %object $1
- var %variableName $2
- var %bvar $3
- var %mprop $mprop($prop)
- if (%mprop == b) {
- var %hget $hget(%object,%variableName,%bvar)
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- maketok MAKETOK B %hget
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 4
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- echo -a GET: OBJECT: %object VARNAME: $2 HGET: %hget
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$mprop($prop,1))
- }
- else {
- var %hget $hget(%object,%variableName)
- if $prop {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- maketok MAKETOK V %hget
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 3
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
- }
- else {
- if ($hget(MAKETOK)) hfree MAKETOK
- return %hget
- }
- }
- }
- alias Class.UNSET {
- var %object $1
- hdel %object $$2
- if $prop {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- maketok MAKETOK V %object
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 3
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(Class,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
- }
- else {
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- }
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not a class member ;
- ; is public. ;
- ; ;
- ; Usage: $IsPublic(<Class>,<Member>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsPublic return $isalias($+($1.,$2.,PUBLIC))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not a class member ;
- ; is private. ;
- ; ;
- ; Usage: $IsPrivate(<Class>,<Member>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsPrivate return $isalias($+($1.,$2))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called from the class constructor to ;
- ; let the object know that the specified object ;
- ; inherits from the specified class ;
- ; ;
- ; Usage: $InheritsFrom(<Object>,<Class>) ;
- ; Example: $InheritsFrom(%instance,Player) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias InheritsFrom hadd -m MSL++ $+($1_,INIT) $2 $hget(MSL++,$+($1.,INIT))
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance is ;
- ; an instance of the specified class ;
- ; ;
- ; Usage: $IsInstanceOf(<Instance>,<Class>) ;
- ; Example: if ($IsInstanceOf(%Player,Player)) .. ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstanceOf return $findtok($hget(MSL++,$1_INIT),$2,0,32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Returns whether or not an instance ;
- ; exists in memory ;
- ; ;
- ; Usage: $IsInstance(<Instance>) ;
- ; Example: if (!$IsInstance(%x)) %x = $Player ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias IsInstance return $token($hget(MSL++, $1_INIT),$iif($2 != $null,$2,1),32)
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Called when ever an error is caught ;
- ; ;
- ; Usage: $catch(<Instance>,<Error>,<Message>) ;
- ; Example: if (!$IsInstanceOf(%Player,Player)) { ;
- ; $catch(%Player,InstanceErr,Object %player is not ;
- ; an instance of class Player) ;
- ; } ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias CATCH {
- var %error $2,%message $5,%instance $1,%scriptLine $3, %scriptDir $4
- if %instance {
- var %x 1
- var %inheritance $hget(MSL++,$+(%instance,_,INIT))
- while $token(%inheritance,%x,32) {
- var %currentClass $v1
- var %currentClassException $+(%currentClass,.EXCEPTION.,%error)
- if $isalias(%currentClassException) {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 0
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(%currentClass $+ .EXCEPTION,MAKETOK,%evarstart,%evarend,%start,%end,%error)
- }
- inc %x
- }
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- if ($hget(MAKETOK)) hfree MAKETOK
- }
- ;;;;;;;;;;;;;
- ; End Catch ;
- ;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Description: Used to call the first found method ;
- ; associated with an objects inheritance tree... ;
- ; ;
- ; Usage: $Object(<Instance>,..).<Method> ;
- ; Example: $Object(%stack,$2).add ;
- ; Equivelent: $List(%stack,$2).add ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias OBJECT {
- var %object $1
- var %inheritance $hget(MSL++,$+(%object,_,INIT))
- var %iterator 1
- while $token(%inheritance,%iterator,32) {
- var %currentClass $v1
- if $isalias(%currentClass $+ . $+ $mprop($prop) $+ .PUBLIC) {
- var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0)
- var %evarend $iif($hget(MAKETOK, COUNT),$v1,0)
- var %start $iif($hget(MAKETOK,COUNT),$v1,0) + 1
- maketok MAKETOK V $*
- var %end $iif($hget(MAKETOK,COUNT),$v1,0)
- return $meval(%currentClass,MAKETOK,%evarstart,%evarend,%start,%end,$prop)
- }
- inc %iterator
- }
- if ($hget(MAKETOK)) hfree MAKETOK
- return $catch($1,MemberErr,$scriptline, $token($script,-1,92),$mprop($prop) is not a public member of $isinstance($1))
- }
- ;;;;;;;;;;;;;;
- ; End Object ;
- ;;;;;;;;;;;;;;
- ;;;;;;;;;;;;;;;;;;;;
- ; Helper Functions ;
- ;;;;;;;;;;;;;;;;;;;;
- alias - { !noop $1- }
- alias + { $iif($Window(@Debug),echo @Debug,!noop) $iif($1-,$v1,$crlf) }
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Code for passing dynamic variables to the $meval function ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; var %evarstart $iif($hget(MAKETOK, COUNT),$v1,0) ; ;
- ; maketok MAKETOK V SomeValue ; For passing variables before the $N- tokens are passed ;
- ; maketok MAKETOK V SomeValue2 ; ;
- ; var %evarend $iif($hget(MAKETOK, COUNT),$v1,0) ; ;
- ; ; ;
- ; 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 ;
- ; maketok MAKETOK V $* ; (which is for tokens $1-) ;
- ; var %end $iif($hget(MAKETOK,COUNT),$v1,0) ; ;
- ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; return $meval(ClassName,MAKETOK,%evarstart,%evarend,%start,%end,$prop) ;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- alias meval {
- var %className $1
- var %prop [ $ $+ [ $0 ] ]
- var %functionName $mprop(%prop)
- var %mProp $mprop(%prop,1)
- var %htable $2
- var %evarstart $3 + 1
- var %evarend $4
- var %evarcount $calc(%evarend - %evarstart + 1)
- var %start $5
- var %end $6
- var %count $calc(%end - %start + 1)
- var %evarregex $left($regsubex($str(.,%evarcount),/(.)/g, $+($,hget,$chr(40),%htable,$chr(44),$calc(\n + %evarstart - 1),$chr(41)) $chr(44) $+ $chr(32)),-2)
- 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)
- var %params $+($,%className,.,%functionName,$chr(40),%regex,$chr(41),$iif(%mProp,$+(.,$v1)))
- - PARAMS: %params
- return [ [ %params ] ]
- }
- alias mprop {
- return $iif($2,$token($1,2-,46), $token($1,1,46))
- }
- alias maketok {
- hinc -m $1 COUNT
- hadd -m $+ $iif($2 == B,b) $1 $hget($1,COUNT) $3-
- }
- ;;;;;;;;;;;;;;;;;;;;;;;;
- ; END HELPER FUNCTIONS ;
- ;;;;;;;;;;;;;;;;;;;;;;;;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement