'==============================
macro OperatorClass(name,tbody)
'==============================
type type##name tbody
class name
static type##name accum[32]
static type##name *a, *b
static sys accumIndex, accumPopped
has type##name
macro GetOperand
if accumPopped then
@b = @a + sizeof accum
accumPopped = 0
else
@b = @this
end if
end macro
method "load"()
@a = @accum + accumIndex
GetOperand
copy @a,@b,sizeof accum
end method
method "="()
GetOperand
copy @b,@a,sizeof accum
end method
method "push"()
accumIndex += sizeof accum
end method
method "pop"()
accumPopped = 1
accumIndex -= sizeof accum
@a = @accum + accumIndex
end method
end macro
OperatorClass (Vector,{double x,y,z})
'====================================
method constructor(double ax=0,ay=0,az=0)
this<=ax,ay,az
end method
method destructor()
end method
method "+"()
getoperand
a.x += b.x
a.y += b.y
a.z += b.z
end method
method "-"()
getoperand
a.x -= b.x
a.y -= b.y
a.z -= b.z
end method
method "*"()
getoperand
a.x *= b.x
a.y *= b.y
a.z *= b.z
end method
method "/"()
getoperand
a.x /= b.x
a.y /= b.y
a.z /= b.z
end method
'...
end class
'#recordof Vector
new vector v1 (1,2,3)
new vector v2 (10,20,30)
new vector v3
v3=v1+v2*v2
print v3.x "," v3.y "," v3.z 'result 101,402,903