/[svn]/linuxsampler/trunk/src/scriptvm/CoreVMFunctions.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/scriptvm/CoreVMFunctions.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3581 by schoenebeck, Fri Aug 30 11:40:25 2019 UTC revision 3582 by schoenebeck, Fri Aug 30 12:23:40 2019 UTC
# Line 117  VMFnResult* VMStringResultFunction::succ Line 117  VMFnResult* VMStringResultFunction::succ
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;
# Line 314  ExprType_t CoreVMFunction_abs::returnTyp Line 314  ExprType_t CoreVMFunction_abs::returnTyp
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 {
# Line 353  ExprType_t CoreVMFunction_random::return Line 353  ExprType_t CoreVMFunction_random::return
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 {
# Line 373  void CoreVMFunction_random::checkArgs(VM Line 373  void CoreVMFunction_random::checkArgs(VM
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  }  }
# Line 393  void CoreVMFunction_random::checkArgs(VM Line 393  void CoreVMFunction_random::checkArgs(VM
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();
# Line 456  VMFnResult* CoreVMFunction_num_elements: Line 456  VMFnResult* CoreVMFunction_num_elements:
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,
# Line 471  void CoreVMFunction_inc::checkArgs(VMFnA Line 471  void CoreVMFunction_inc::checkArgs(VMFnA
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  }  }
# Line 497  VMFnResult* CoreVMFunction_inc::exec(VMF Line 497  VMFnResult* CoreVMFunction_inc::exec(VMF
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,
# Line 512  void CoreVMFunction_dec::checkArgs(VMFnA Line 512  void CoreVMFunction_dec::checkArgs(VMFnA
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  }  }
# Line 549  void CoreVMFunction_in_range::checkArgs( Line 549  void CoreVMFunction_in_range::checkArgs(
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;
# Line 581  inline void _swapByValue(T& a, T& b) { Line 581  inline void _swapByValue(T& a, T& b) {
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();
# Line 602  VMFnResult* CoreVMFunction_in_range::exe Line 602  VMFnResult* CoreVMFunction_in_range::exe
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) {
# Line 615  VMFnResult* CoreVMFunction_sh_left::exec Line 615  VMFnResult* CoreVMFunction_sh_left::exec
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) {
# Line 633  ExprType_t CoreVMFunction_min::returnTyp Line 633  ExprType_t CoreVMFunction_min::returnTyp
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 {
# Line 653  void CoreVMFunction_min::checkArgs(VMFnA Line 653  void CoreVMFunction_min::checkArgs(VMFnA
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      }      }
# Line 668  void CoreVMFunction_min::checkArgs(VMFnA Line 668  void CoreVMFunction_min::checkArgs(VMFnA
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();
# Line 728  ExprType_t CoreVMFunction_max::returnTyp Line 728  ExprType_t CoreVMFunction_max::returnTyp
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 {
# Line 748  void CoreVMFunction_max::checkArgs(VMFnA Line 748  void CoreVMFunction_max::checkArgs(VMFnA
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      }      }
# Line 763  void CoreVMFunction_max::checkArgs(VMFnA Line 763  void CoreVMFunction_max::checkArgs(VMFnA
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();
# Line 1289  VMFnResult* CoreVMFunction_sort::exec(VM Line 1289  VMFnResult* CoreVMFunction_sort::exec(VM
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) {
# Line 1309  VMFnResult* CoreVMFunction_real_to_int:: Line 1309  VMFnResult* CoreVMFunction_real_to_int::
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) {

Legend:
Removed from v.3581  
changed lines
  Added in v.3582

  ViewVC Help
Powered by ViewVC