117 |
} |
} |
118 |
|
|
119 |
/////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////// |
120 |
// class VMScalarNumberResultFunction |
// class VMNumberResultFunction |
121 |
|
|
122 |
VMFnResult* VMScalarNumberResultFunction::errorResult(vmint i) { |
VMFnResult* VMNumberResultFunction::errorResult(vmint i) { |
123 |
intResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
intResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
124 |
intResult.value = i; |
intResult.value = i; |
125 |
intResult.unitPrefixFactor = VM_NO_FACTOR; |
intResult.unitPrefixFactor = VM_NO_FACTOR; |
126 |
return &intResult; |
return &intResult; |
127 |
} |
} |
128 |
|
|
129 |
VMFnResult* VMScalarNumberResultFunction::errorResult(vmfloat f) { |
VMFnResult* VMNumberResultFunction::errorResult(vmfloat f) { |
130 |
realResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
realResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
131 |
realResult.value = f; |
realResult.value = f; |
132 |
realResult.unitPrefixFactor = VM_NO_FACTOR; |
realResult.unitPrefixFactor = VM_NO_FACTOR; |
133 |
return &realResult; |
return &realResult; |
134 |
} |
} |
135 |
|
|
136 |
VMFnResult* VMScalarNumberResultFunction::successResult(vmint i) { |
VMFnResult* VMNumberResultFunction::successResult(vmint i) { |
137 |
intResult.flags = STMT_SUCCESS; |
intResult.flags = STMT_SUCCESS; |
138 |
intResult.value = i; |
intResult.value = i; |
139 |
intResult.unitPrefixFactor = VM_NO_FACTOR; |
intResult.unitPrefixFactor = VM_NO_FACTOR; |
140 |
return &intResult; |
return &intResult; |
141 |
} |
} |
142 |
|
|
143 |
VMFnResult* VMScalarNumberResultFunction::successResult(vmfloat f) { |
VMFnResult* VMNumberResultFunction::successResult(vmfloat f) { |
144 |
realResult.flags = STMT_SUCCESS; |
realResult.flags = STMT_SUCCESS; |
145 |
realResult.value = f; |
realResult.value = f; |
146 |
realResult.unitPrefixFactor = VM_NO_FACTOR; |
realResult.unitPrefixFactor = VM_NO_FACTOR; |
147 |
return &realResult; |
return &realResult; |
148 |
} |
} |
149 |
|
|
150 |
VMFnResult* VMScalarNumberResultFunction::errorIntResult(VMIntFnResDef res) { |
VMFnResult* VMNumberResultFunction::errorIntResult(VMIntFnResDef res) { |
151 |
intResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
intResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
152 |
intResult.value = res.value; |
intResult.value = res.value; |
153 |
intResult.unitPrefixFactor = res.unitFactor; |
intResult.unitPrefixFactor = res.unitFactor; |
154 |
return &intResult; |
return &intResult; |
155 |
} |
} |
156 |
|
|
157 |
VMFnResult* VMScalarNumberResultFunction::errorRealResult(VMRealFnResDef res) { |
VMFnResult* VMNumberResultFunction::errorRealResult(VMRealFnResDef res) { |
158 |
realResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
realResult.flags = StmtFlags_t(STMT_ABORT_SIGNALLED | STMT_ERROR_OCCURRED); |
159 |
realResult.value = res.value; |
realResult.value = res.value; |
160 |
realResult.unitPrefixFactor = res.unitFactor; |
realResult.unitPrefixFactor = res.unitFactor; |
161 |
return &realResult; |
return &realResult; |
162 |
} |
} |
163 |
|
|
164 |
VMFnResult* VMScalarNumberResultFunction::successIntResult(VMIntFnResDef res) { |
VMFnResult* VMNumberResultFunction::successIntResult(VMIntFnResDef res) { |
165 |
intResult.flags = STMT_SUCCESS; |
intResult.flags = STMT_SUCCESS; |
166 |
intResult.value = res.value; |
intResult.value = res.value; |
167 |
intResult.unitPrefixFactor = res.unitFactor; |
intResult.unitPrefixFactor = res.unitFactor; |
168 |
return &intResult; |
return &intResult; |
169 |
} |
} |
170 |
|
|
171 |
VMFnResult* VMScalarNumberResultFunction::successRealResult(VMRealFnResDef res) { |
VMFnResult* VMNumberResultFunction::successRealResult(VMRealFnResDef res) { |
172 |
realResult.flags = STMT_SUCCESS; |
realResult.flags = STMT_SUCCESS; |
173 |
realResult.value = res.value; |
realResult.value = res.value; |
174 |
realResult.unitPrefixFactor = res.unitFactor; |
realResult.unitPrefixFactor = res.unitFactor; |
314 |
} |
} |
315 |
|
|
316 |
StdUnit_t CoreVMFunction_abs::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_abs::returnUnitType(VMFnArgs* args) { |
317 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
318 |
} |
} |
319 |
|
|
320 |
bool CoreVMFunction_abs::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_abs::returnsFinal(VMFnArgs* args) { |
321 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
322 |
} |
} |
323 |
|
|
324 |
bool CoreVMFunction_abs::acceptsArgType(vmint iArg, ExprType_t type) const { |
bool CoreVMFunction_abs::acceptsArgType(vmint iArg, ExprType_t type) const { |
353 |
StdUnit_t CoreVMFunction_random::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_random::returnUnitType(VMFnArgs* args) { |
354 |
// we ensure in checkArgs() below (which is called before this method here) |
// we ensure in checkArgs() below (which is called before this method here) |
355 |
// that both arguments must be of same unit type, so either one is fine here |
// that both arguments must be of same unit type, so either one is fine here |
356 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
357 |
} |
} |
358 |
|
|
359 |
bool CoreVMFunction_random::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_random::returnsFinal(VMFnArgs* args) { |
360 |
return args->arg(0)->asScalarNumberExpr()->isFinal() || |
return args->arg(0)->asNumber()->isFinal() || |
361 |
args->arg(1)->asScalarNumberExpr()->isFinal(); |
args->arg(1)->asNumber()->isFinal(); |
362 |
} |
} |
363 |
|
|
364 |
bool CoreVMFunction_random::acceptsArgType(vmint iArg, ExprType_t type) const { |
bool CoreVMFunction_random::acceptsArgType(vmint iArg, ExprType_t type) const { |
373 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
374 |
|
|
375 |
// own checks ... |
// own checks ... |
376 |
if (args->arg(0)->asScalarNumberExpr()->unitType() != |
if (args->arg(0)->asNumber()->unitType() != |
377 |
args->arg(1)->asScalarNumberExpr()->unitType()) |
args->arg(1)->asNumber()->unitType()) |
378 |
{ |
{ |
379 |
String a = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String a = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
380 |
String b = unitTypeStr(args->arg(1)->asScalarNumberExpr()->unitType()); |
String b = unitTypeStr(args->arg(1)->asNumber()->unitType()); |
381 |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
382 |
return; |
return; |
383 |
} |
} |
384 |
if (args->arg(0)->asScalarNumberExpr()->isFinal() != |
if (args->arg(0)->asNumber()->isFinal() != |
385 |
args->arg(1)->asScalarNumberExpr()->isFinal()) |
args->arg(1)->asNumber()->isFinal()) |
386 |
{ |
{ |
387 |
String a = args->arg(0)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String a = args->arg(0)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
388 |
String b = args->arg(1)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String b = args->arg(1)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
389 |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
390 |
} |
} |
391 |
} |
} |
393 |
VMFnResult* CoreVMFunction_random::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_random::exec(VMFnArgs* args) { |
394 |
float f = float(::rand()) / float(RAND_MAX); |
float f = float(::rand()) / float(RAND_MAX); |
395 |
|
|
396 |
VMScalarNumberExpr* arg0 = args->arg(0)->asScalarNumberExpr(); |
VMNumberExpr* arg0 = args->arg(0)->asNumber(); |
397 |
VMScalarNumberExpr* arg1 = args->arg(1)->asScalarNumberExpr(); |
VMNumberExpr* arg1 = args->arg(1)->asNumber(); |
398 |
|
|
399 |
if (arg0->exprType() == INT_EXPR && arg1->exprType() == INT_EXPR) { |
if (arg0->exprType() == INT_EXPR && arg1->exprType() == INT_EXPR) { |
400 |
vmint iMin = args->arg(0)->asInt()->evalInt(); |
vmint iMin = args->arg(0)->asInt()->evalInt(); |
456 |
// built-in script function: inc() |
// built-in script function: inc() |
457 |
|
|
458 |
StdUnit_t CoreVMFunction_inc::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_inc::returnUnitType(VMFnArgs* args) { |
459 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
460 |
} |
} |
461 |
|
|
462 |
bool CoreVMFunction_inc::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_inc::returnsFinal(VMFnArgs* args) { |
463 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
464 |
} |
} |
465 |
|
|
466 |
void CoreVMFunction_inc::checkArgs(VMFnArgs* args, |
void CoreVMFunction_inc::checkArgs(VMFnArgs* args, |
471 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
472 |
|
|
473 |
// own checks ... |
// own checks ... |
474 |
if (args->arg(0)->asScalarNumberExpr()->unitType()) { |
if (args->arg(0)->asNumber()->unitType()) { |
475 |
String unitType = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String unitType = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
476 |
wrn("Argument has a unit type (" + unitType + "), only the number before the unit will be incremented by one."); |
wrn("Argument has a unit type (" + unitType + "), only the number before the unit will be incremented by one."); |
477 |
} |
} |
478 |
} |
} |
497 |
// built-in script function: dec() |
// built-in script function: dec() |
498 |
|
|
499 |
StdUnit_t CoreVMFunction_dec::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_dec::returnUnitType(VMFnArgs* args) { |
500 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
501 |
} |
} |
502 |
|
|
503 |
bool CoreVMFunction_dec::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_dec::returnsFinal(VMFnArgs* args) { |
504 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
505 |
} |
} |
506 |
|
|
507 |
void CoreVMFunction_dec::checkArgs(VMFnArgs* args, |
void CoreVMFunction_dec::checkArgs(VMFnArgs* args, |
512 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
513 |
|
|
514 |
// own checks ... |
// own checks ... |
515 |
if (args->arg(0)->asScalarNumberExpr()->unitType()) { |
if (args->arg(0)->asNumber()->unitType()) { |
516 |
String unitType = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String unitType = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
517 |
wrn("Argument has a unit type (" + unitType + "), only the number before the unit will be decremented by one."); |
wrn("Argument has a unit type (" + unitType + "), only the number before the unit will be decremented by one."); |
518 |
} |
} |
519 |
} |
} |
549 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
550 |
|
|
551 |
// own checks ... |
// own checks ... |
552 |
if (args->arg(0)->asScalarNumberExpr()->unitType() != |
if (args->arg(0)->asNumber()->unitType() != |
553 |
args->arg(1)->asScalarNumberExpr()->unitType() || |
args->arg(1)->asNumber()->unitType() || |
554 |
args->arg(1)->asScalarNumberExpr()->unitType() != |
args->arg(1)->asNumber()->unitType() != |
555 |
args->arg(2)->asScalarNumberExpr()->unitType()) |
args->arg(2)->asNumber()->unitType()) |
556 |
{ |
{ |
557 |
String a = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String a = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
558 |
String b = unitTypeStr(args->arg(1)->asScalarNumberExpr()->unitType()); |
String b = unitTypeStr(args->arg(1)->asNumber()->unitType()); |
559 |
String c = unitTypeStr(args->arg(2)->asScalarNumberExpr()->unitType()); |
String c = unitTypeStr(args->arg(2)->asNumber()->unitType()); |
560 |
err("Arguments must all have same unit, however argument 1 is " + a + |
err("Arguments must all have same unit, however argument 1 is " + a + |
561 |
", argument 2 is " + b + ", argument 3 is " + c + "."); |
", argument 2 is " + b + ", argument 3 is " + c + "."); |
562 |
return; |
return; |
581 |
} |
} |
582 |
|
|
583 |
VMFnResult* CoreVMFunction_in_range::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_in_range::exec(VMFnArgs* args) { |
584 |
VMScalarNumberExpr* argNeedle = args->arg(0)->asScalarNumberExpr(); |
VMNumberExpr* argNeedle = args->arg(0)->asNumber(); |
585 |
VMScalarNumberExpr* argLo = args->arg(1)->asScalarNumberExpr(); |
VMNumberExpr* argLo = args->arg(1)->asNumber(); |
586 |
VMScalarNumberExpr* argHi = args->arg(2)->asScalarNumberExpr(); |
VMNumberExpr* argHi = args->arg(2)->asNumber(); |
587 |
|
|
588 |
vmfloat needle = argNeedle->evalCastReal(); |
vmfloat needle = argNeedle->evalCastReal(); |
589 |
vmfloat lo = argLo->evalCastReal(); |
vmfloat lo = argLo->evalCastReal(); |
602 |
// built-in script function: sh_left() |
// built-in script function: sh_left() |
603 |
|
|
604 |
bool CoreVMFunction_sh_left::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_sh_left::returnsFinal(VMFnArgs* args) { |
605 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
606 |
} |
} |
607 |
|
|
608 |
VMFnResult* CoreVMFunction_sh_left::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_sh_left::exec(VMFnArgs* args) { |
615 |
// built-in script function: sh_right() |
// built-in script function: sh_right() |
616 |
|
|
617 |
bool CoreVMFunction_sh_right::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_sh_right::returnsFinal(VMFnArgs* args) { |
618 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
619 |
} |
} |
620 |
|
|
621 |
VMFnResult* CoreVMFunction_sh_right::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_sh_right::exec(VMFnArgs* args) { |
633 |
} |
} |
634 |
|
|
635 |
StdUnit_t CoreVMFunction_min::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_min::returnUnitType(VMFnArgs* args) { |
636 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
637 |
} |
} |
638 |
|
|
639 |
bool CoreVMFunction_min::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_min::returnsFinal(VMFnArgs* args) { |
640 |
return args->arg(0)->asScalarNumberExpr()->isFinal() || |
return args->arg(0)->asNumber()->isFinal() || |
641 |
args->arg(1)->asScalarNumberExpr()->isFinal(); |
args->arg(1)->asNumber()->isFinal(); |
642 |
} |
} |
643 |
|
|
644 |
bool CoreVMFunction_min::acceptsArgType(vmint iArg, ExprType_t type) const { |
bool CoreVMFunction_min::acceptsArgType(vmint iArg, ExprType_t type) const { |
653 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
654 |
|
|
655 |
// own checks ... |
// own checks ... |
656 |
if (args->arg(0)->asScalarNumberExpr()->unitType() != |
if (args->arg(0)->asNumber()->unitType() != |
657 |
args->arg(1)->asScalarNumberExpr()->unitType()) |
args->arg(1)->asNumber()->unitType()) |
658 |
{ |
{ |
659 |
String a = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String a = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
660 |
String b = unitTypeStr(args->arg(1)->asScalarNumberExpr()->unitType()); |
String b = unitTypeStr(args->arg(1)->asNumber()->unitType()); |
661 |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
662 |
return; |
return; |
663 |
} |
} |
668 |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be " + c + "."); |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be " + c + "."); |
669 |
return; |
return; |
670 |
} |
} |
671 |
if (args->arg(0)->asScalarNumberExpr()->isFinal() != |
if (args->arg(0)->asNumber()->isFinal() != |
672 |
args->arg(1)->asScalarNumberExpr()->isFinal()) |
args->arg(1)->asNumber()->isFinal()) |
673 |
{ |
{ |
674 |
String a = args->arg(0)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String a = args->arg(0)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
675 |
String b = args->arg(1)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String b = args->arg(1)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
676 |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
677 |
} |
} |
678 |
} |
} |
679 |
|
|
680 |
VMFnResult* CoreVMFunction_min::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_min::exec(VMFnArgs* args) { |
681 |
VMScalarNumberExpr* lhs = args->arg(0)->asScalarNumberExpr(); |
VMNumberExpr* lhs = args->arg(0)->asNumber(); |
682 |
VMScalarNumberExpr* rhs = args->arg(1)->asScalarNumberExpr(); |
VMNumberExpr* rhs = args->arg(1)->asNumber(); |
683 |
if (lhs->exprType() == REAL_EXPR && rhs->exprType() == REAL_EXPR) { |
if (lhs->exprType() == REAL_EXPR && rhs->exprType() == REAL_EXPR) { |
684 |
vmfloat lm = lhs->asReal()->evalReal(); |
vmfloat lm = lhs->asReal()->evalReal(); |
685 |
vmfloat rm = rhs->asReal()->evalReal(); |
vmfloat rm = rhs->asReal()->evalReal(); |
728 |
} |
} |
729 |
|
|
730 |
StdUnit_t CoreVMFunction_max::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_max::returnUnitType(VMFnArgs* args) { |
731 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
732 |
} |
} |
733 |
|
|
734 |
bool CoreVMFunction_max::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_max::returnsFinal(VMFnArgs* args) { |
735 |
return args->arg(0)->asScalarNumberExpr()->isFinal() || |
return args->arg(0)->asNumber()->isFinal() || |
736 |
args->arg(1)->asScalarNumberExpr()->isFinal(); |
args->arg(1)->asNumber()->isFinal(); |
737 |
} |
} |
738 |
|
|
739 |
bool CoreVMFunction_max::acceptsArgType(vmint iArg, ExprType_t type) const { |
bool CoreVMFunction_max::acceptsArgType(vmint iArg, ExprType_t type) const { |
748 |
Super::checkArgs(args, err, wrn); |
Super::checkArgs(args, err, wrn); |
749 |
|
|
750 |
// own checks ... |
// own checks ... |
751 |
if (args->arg(0)->asScalarNumberExpr()->unitType() != |
if (args->arg(0)->asNumber()->unitType() != |
752 |
args->arg(1)->asScalarNumberExpr()->unitType()) |
args->arg(1)->asNumber()->unitType()) |
753 |
{ |
{ |
754 |
String a = unitTypeStr(args->arg(0)->asScalarNumberExpr()->unitType()); |
String a = unitTypeStr(args->arg(0)->asNumber()->unitType()); |
755 |
String b = unitTypeStr(args->arg(1)->asScalarNumberExpr()->unitType()); |
String b = unitTypeStr(args->arg(1)->asNumber()->unitType()); |
756 |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
err("Argument 1 has unit type " + a + ", whereas argument 2 has unit type " + b + "."); |
757 |
return; |
return; |
758 |
} |
} |
763 |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be " + c + "."); |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be " + c + "."); |
764 |
return; |
return; |
765 |
} |
} |
766 |
if (args->arg(0)->asScalarNumberExpr()->isFinal() != |
if (args->arg(0)->asNumber()->isFinal() != |
767 |
args->arg(1)->asScalarNumberExpr()->isFinal()) |
args->arg(1)->asNumber()->isFinal()) |
768 |
{ |
{ |
769 |
String a = args->arg(0)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String a = args->arg(0)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
770 |
String b = args->arg(1)->asScalarNumberExpr()->isFinal() ? "'final'" : "not 'final'"; |
String b = args->arg(1)->asNumber()->isFinal() ? "'final'" : "not 'final'"; |
771 |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
wrn("Argument 1 is " + a + ", whereas argument 2 is " + b + ", function result will be final."); |
772 |
} |
} |
773 |
} |
} |
774 |
|
|
775 |
VMFnResult* CoreVMFunction_max::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_max::exec(VMFnArgs* args) { |
776 |
VMScalarNumberExpr* lhs = args->arg(0)->asScalarNumberExpr(); |
VMNumberExpr* lhs = args->arg(0)->asNumber(); |
777 |
VMScalarNumberExpr* rhs = args->arg(1)->asScalarNumberExpr(); |
VMNumberExpr* rhs = args->arg(1)->asNumber(); |
778 |
if (lhs->exprType() == REAL_EXPR && rhs->exprType() == REAL_EXPR) { |
if (lhs->exprType() == REAL_EXPR && rhs->exprType() == REAL_EXPR) { |
779 |
vmfloat lm = lhs->asReal()->evalReal(); |
vmfloat lm = lhs->asReal()->evalReal(); |
780 |
vmfloat rm = rhs->asReal()->evalReal(); |
vmfloat rm = rhs->asReal()->evalReal(); |
1289 |
// built-in script function: real_to_int() and int() |
// built-in script function: real_to_int() and int() |
1290 |
|
|
1291 |
StdUnit_t CoreVMFunction_real_to_int::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_real_to_int::returnUnitType(VMFnArgs* args) { |
1292 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
1293 |
} |
} |
1294 |
|
|
1295 |
bool CoreVMFunction_real_to_int::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_real_to_int::returnsFinal(VMFnArgs* args) { |
1296 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
1297 |
} |
} |
1298 |
|
|
1299 |
VMFnResult* CoreVMFunction_real_to_int::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_real_to_int::exec(VMFnArgs* args) { |
1309 |
// built-in script function: int_to_real() and real() |
// built-in script function: int_to_real() and real() |
1310 |
|
|
1311 |
StdUnit_t CoreVMFunction_int_to_real::returnUnitType(VMFnArgs* args) { |
StdUnit_t CoreVMFunction_int_to_real::returnUnitType(VMFnArgs* args) { |
1312 |
return args->arg(0)->asScalarNumberExpr()->unitType(); |
return args->arg(0)->asNumber()->unitType(); |
1313 |
} |
} |
1314 |
|
|
1315 |
bool CoreVMFunction_int_to_real::returnsFinal(VMFnArgs* args) { |
bool CoreVMFunction_int_to_real::returnsFinal(VMFnArgs* args) { |
1316 |
return args->arg(0)->asScalarNumberExpr()->isFinal(); |
return args->arg(0)->asNumber()->isFinal(); |
1317 |
} |
} |
1318 |
|
|
1319 |
VMFnResult* CoreVMFunction_int_to_real::exec(VMFnArgs* args) { |
VMFnResult* CoreVMFunction_int_to_real::exec(VMFnArgs* args) { |