|
@@ -59,7 +59,7 @@ static uint32_t refcount = 0;
|
|
// returns the absolute value of x
|
|
// returns the absolute value of x
|
|
static bool math_abs (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_abs (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -92,7 +92,7 @@ static bool math_abs (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
// returns the arccosine of x, in radians
|
|
// returns the arccosine of x, in radians
|
|
static bool math_acos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_acos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -115,7 +115,7 @@ static bool math_acos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, ui
|
|
// returns the arcsine of x, in radians
|
|
// returns the arcsine of x, in radians
|
|
static bool math_asin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_asin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -138,7 +138,7 @@ static bool math_asin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, ui
|
|
// returns the arctangent of x as a numeric value between -PI/2 and PI/2 radians
|
|
// returns the arctangent of x as a numeric value between -PI/2 and PI/2 radians
|
|
static bool math_atan (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_atan (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -162,10 +162,10 @@ static bool math_atan (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, ui
|
|
static bool math_atan2 (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_atan2 (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm)
|
|
#pragma unused(vm)
|
|
|
|
|
|
- if (nargs != 2) RETURN_VALUE(VALUE_FROM_UNDEFINED, rindex);
|
|
|
|
|
|
+ if (nargs != 3) RETURN_VALUE(VALUE_FROM_UNDEFINED, rindex);
|
|
|
|
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
- gravity_value_t value2 = GET_VALUE(1);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
+ gravity_value_t value2 = GET_VALUE(2);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -193,7 +193,7 @@ static bool math_atan2 (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, u
|
|
// returns x, rounded upwards to the nearest integer
|
|
// returns x, rounded upwards to the nearest integer
|
|
static bool math_ceil (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_ceil (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -216,7 +216,7 @@ static bool math_ceil (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, ui
|
|
// returns the cosine of x (x is in radians)
|
|
// returns the cosine of x (x is in radians)
|
|
static bool math_cos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_cos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -239,7 +239,7 @@ static bool math_cos (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
// returns the value of Ex
|
|
// returns the value of Ex
|
|
static bool math_exp (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_exp (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -262,7 +262,7 @@ static bool math_exp (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
// returns x, rounded downwards to the nearest integer
|
|
// returns x, rounded downwards to the nearest integer
|
|
static bool math_floor (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_floor (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -285,7 +285,7 @@ static bool math_floor (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, u
|
|
// returns the natural logarithm (base E) of x
|
|
// returns the natural logarithm (base E) of x
|
|
static bool math_log (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_log (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -310,7 +310,7 @@ static bool math_max (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
gravity_float_t n = FLOAT_MIN;
|
|
gravity_float_t n = FLOAT_MIN;
|
|
gravity_value_t result = VALUE_FROM_UNDEFINED;
|
|
gravity_value_t result = VALUE_FROM_UNDEFINED;
|
|
|
|
|
|
- for (uint16_t i = 0; i<nargs; ++i) {
|
|
|
|
|
|
+ for (uint16_t i = 1; i<nargs; ++i) {
|
|
gravity_value_t value = GET_VALUE(i);
|
|
gravity_value_t value = GET_VALUE(i);
|
|
if (VALUE_ISA_INT(value)) {
|
|
if (VALUE_ISA_INT(value)) {
|
|
if ((gravity_float_t)value.n > n) result = value;
|
|
if ((gravity_float_t)value.n > n) result = value;
|
|
@@ -327,7 +327,7 @@ static bool math_min (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
gravity_float_t n = FLOAT_MAX;
|
|
gravity_float_t n = FLOAT_MAX;
|
|
gravity_value_t result = VALUE_FROM_UNDEFINED;
|
|
gravity_value_t result = VALUE_FROM_UNDEFINED;
|
|
|
|
|
|
- for (uint16_t i = 0; i<nargs; ++i) {
|
|
|
|
|
|
+ for (uint16_t i = 1; i<nargs; ++i) {
|
|
gravity_value_t value = GET_VALUE(i);
|
|
gravity_value_t value = GET_VALUE(i);
|
|
if (VALUE_ISA_INT(value)) {
|
|
if (VALUE_ISA_INT(value)) {
|
|
if ((gravity_float_t)value.n < n) result = value;
|
|
if ((gravity_float_t)value.n < n) result = value;
|
|
@@ -343,10 +343,10 @@ static bool math_min (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
static bool math_pow (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_pow (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm)
|
|
#pragma unused(vm)
|
|
|
|
|
|
- if (nargs != 2) RETURN_VALUE(VALUE_FROM_UNDEFINED, rindex);
|
|
|
|
|
|
+ if (nargs != 3) RETURN_VALUE(VALUE_FROM_UNDEFINED, rindex);
|
|
|
|
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
- gravity_value_t value2 = GET_VALUE(1);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
+ gravity_value_t value2 = GET_VALUE(2);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -389,7 +389,7 @@ static bool math_random (gravity_vm *vm, gravity_value_t *args, uint16_t nargs,
|
|
// rounds x to the nearest integer
|
|
// rounds x to the nearest integer
|
|
static bool math_round (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_round (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -412,7 +412,7 @@ static bool math_round (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, u
|
|
// returns the sine of x (x is in radians)
|
|
// returns the sine of x (x is in radians)
|
|
static bool math_sin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_sin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -435,7 +435,7 @@ static bool math_sin (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uin
|
|
// returns the square root of x
|
|
// returns the square root of x
|
|
static bool math_sqrt (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_sqrt (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -458,7 +458,7 @@ static bool math_sqrt (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, ui
|
|
// returns the tangent of an angle
|
|
// returns the tangent of an angle
|
|
static bool math_tan (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
static bool math_tan (gravity_vm *vm, gravity_value_t *args, uint16_t nargs, uint32_t rindex) {
|
|
#pragma unused(vm, nargs)
|
|
#pragma unused(vm, nargs)
|
|
- gravity_value_t value = GET_VALUE(0);
|
|
|
|
|
|
+ gravity_value_t value = GET_VALUE(1);
|
|
|
|
|
|
if (VALUE_ISA_NULL(value)) {
|
|
if (VALUE_ISA_NULL(value)) {
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
RETURN_VALUE(VALUE_FROM_INT(0), rindex);
|
|
@@ -587,7 +587,7 @@ void gravity_math_register (gravity_vm *vm) {
|
|
if (!gravity_class_math) create_optional_class();
|
|
if (!gravity_class_math) create_optional_class();
|
|
++refcount;
|
|
++refcount;
|
|
|
|
|
|
- if (gravity_vm_ismini(vm)) return;
|
|
|
|
|
|
+ if (!vm || gravity_vm_ismini(vm)) return;
|
|
gravity_vm_setvalue(vm, MATH_CLASS_NAME, VALUE_FROM_OBJECT(gravity_class_math));
|
|
gravity_vm_setvalue(vm, MATH_CLASS_NAME, VALUE_FROM_OBJECT(gravity_class_math));
|
|
}
|
|
}
|
|
|
|
|