2 |
|
|
3 |
* general changes: |
* general changes: |
4 |
- Fixed compiler error in Pool.h. |
- Fixed compiler error in Pool.h. |
5 |
- Require C++11 compiler support. |
- Require C++14 compiler support. |
6 |
- Autoconf: Added m4/ax_cxx_compile_stdcxx.m4 macro which is used |
- Autoconf: Added m4/ax_cxx_compile_stdcxx.m4 macro which is used |
7 |
for checking in configure for C++11 support (as mandatory |
for checking in configure for C++14 support (as mandatory |
8 |
requirement) and automatically adds compiler argument if required |
requirement) and automatically adds compiler argument if required |
9 |
(e.g. -std=C++11). |
(e.g. -std=C++14). |
10 |
|
- RTMath: Implemented floating point comparison methods |
11 |
|
fEqual32(float,float) and fEqual64(double,double) which take the |
12 |
|
expected floating point tolerances into account. |
13 |
|
|
14 |
* Real-time instrument scripts: |
* Real-time instrument scripts: |
15 |
- Added method ScriptVM::setExitResultEnabled() which allows to |
- Added method ScriptVM::setExitResultEnabled() which allows to |
50 |
"int()" for casting from real number to integer in NKSP scripts. |
"int()" for casting from real number to integer in NKSP scripts. |
51 |
- Added built-in script function "int_to_real()" and its short hand form |
- Added built-in script function "int_to_real()" and its short hand form |
52 |
"real()" for casting from integer to real number in NKSP scripts. |
"real()" for casting from integer to real number in NKSP scripts. |
53 |
|
- Allow built-in exit() function to potentially accept real number type |
54 |
|
argument as well. |
55 |
|
- Built-in script functions may have a different return type depending on |
56 |
|
the arguments passed to the function. |
57 |
|
- Built-in script function "abs()" optionally accepts and returns real |
58 |
|
number. |
59 |
|
- Built-in script functions "min()" and "max()" optionally accept real |
60 |
|
number arguments and return real number as result in that case. |
61 |
|
- NKSP VM API: Allow units and 'final'ness to be returned as result from |
62 |
|
built-in functions (added methods VMFunction::returnUnitType() and |
63 |
|
VMFunction::returnsFinal() for that purpose which must be implemented by |
64 |
|
built-in function implementations). |
65 |
|
- NKSP language: Allow metric unit prefixes of numeric scalar and array |
66 |
|
variables to be changed freely at runtime (unlike unit types like Hz etc. |
67 |
|
which are still sticky, parse-time features of variables which cannot be |
68 |
|
changed at runtime for the intentional sake of determinism). |
69 |
|
- NKSP language: 'final' values are prohibited for array variables for now |
70 |
|
(attempt causes a parsers error). |
71 |
|
- NKSP language: expressions with unit types (e.g. Hz) are prohibited for |
72 |
|
conditions of runtime control structures like if(), while(), select() |
73 |
|
(attempt causes a parser error). |
74 |
|
- NKSP VM API: Allow built-in functions to perform their own, individual |
75 |
|
parse time checks of arguments going to be passed to the function at |
76 |
|
runtime (added method VMFunction::checkArgs() for that purpose). |
77 |
|
- NKSP language: raise parser warning if only one operand of binary |
78 |
|
operators (like logical 'or' comparison) contain a 'final' value (because |
79 |
|
it would always yield in a 'final' result in such cases). |
80 |
|
- NKSP language: Allow comparison (=, #, <, >, <=, >=) of values with |
81 |
|
different metric unit prefixes, which will behave as expected (e.g. |
82 |
|
result of expression '1000us < 2ms' is true). |
83 |
|
- NKSP language: Allow adding values with different metric unit prefixes |
84 |
|
(e.g. result of expression '100Hz + 5kHz' is '5100Hz'). |
85 |
|
- NKSP language: Allow subtracting values with different metric unit |
86 |
|
prefixes (e.g. result of expression '1ms - 20us' is '980us'). |
87 |
|
- NKSP language: Allow multiplying with any metric unit prefixes |
88 |
|
(e.g. result of expression '2k * 3ms' is '6s'), however multiplications |
89 |
|
with unit types on both sides (e.g. '2s * 2s') is still prohibited since |
90 |
|
we don't have any considerable practical use for a term like '4s^2' |
91 |
|
(hence any attempt multiplying two unit types still causes parser error). |
92 |
|
- NKSP language: Allow dividing by any metric unit prefixes and allow |
93 |
|
division of same unit type on both sides (e.g. expression '8kHz / 1000Hz' |
94 |
|
yields in unit free result '8'). So this is now a way to cast units away |
95 |
|
e.g. for passing the result to other expressions, certain function calls |
96 |
|
or variables which are not accepting any units (or that specific unit). |
97 |
|
- NKSP language: integer arrays and real number arrays can now be converted |
98 |
|
to strings (e.g. for dumping their content with message() calls for |
99 |
|
script debugging purposes). |
100 |
|
- NKSP language: expressions and variables with units are now correctly |
101 |
|
casted to strings (e.g. with message() calls). |
102 |
|
- NKSP language: comparing real numbers for equalness (e.g. '~foo = 3.1') or |
103 |
|
unequalness (e.g. '~foo # 3.1') is now less strict and takes the expected |
104 |
|
floating point tolerances into account. |
105 |
|
- NKSP VM API: Added methods VMScalarNumberExpr::evalCastInt() and |
106 |
|
VMScalarNumberExpr::evalCastReal(). |
107 |
|
- NKSP VM API: Added base class 'VMNumberArrayExpr' for classes |
108 |
|
'VMIntArrayExpr' and 'VMRealArrayExpr'. |
109 |
|
- NKSP VM API: replaced all unitPrefix() (parse time) methods by |
110 |
|
unitFactor() (runtime) methods. |
111 |
|
- Built-in function "exit()" supports now returning units and 'final'ness |
112 |
|
for test cases. |
113 |
|
- The following built-in functions support now units as well: "abs()", |
114 |
|
"random()", "inc()", "dec()", "in_range()", "min()", "max()", |
115 |
|
"real_to_int()", "int()", "int_to_real()" and "real()". |
116 |
|
- Built-in functions "array_equal()", "search()" and "sort()" support now |
117 |
|
real number arrays (correctly) as well. |
118 |
|
- Added individual parse time checks of arguments to be passed to built-in |
119 |
|
functions "random()", "inc()", "dec()", "in_range()", "min()", "max()", |
120 |
|
"array_equal()" and "search()" specific for their individual purposes. |
121 |
|
- NKSP VM refactoring: Renamed all methods, functions and classes matching |
122 |
|
pattern *ScalarNumber* to simply *Number* (that is i.e. classes |
123 |
|
VMScalarNumberExpr -> VMNumberExpr, ScalarNumberExpr -> NumberExpr, |
124 |
|
ScalarNumberVariable -> NumberVariable, ScalarNumberBinaryOp -> |
125 |
|
NumberBinaryOp, VMScalarNumberResultFunction -> VMNumberResultFunction, |
126 |
|
method VMExpr::asScalarNumberExpr() -> VMExpr::asNumber(), function |
127 |
|
isScalarNumber() -> isNumber()). |
128 |
|
- NKSP VM API: Added 4 overridden methods to class VMNumberExpr: |
129 |
|
evalCastInt(MetricPrefix_t), evalCastInt(MetricPrefix_t,MetricPrefix_t), |
130 |
|
evalCastReal(MetricPrefix_t), evalCastReal(MetricPrefix_t,MetricPrefix_t) |
131 |
|
as convenient methods for automatically converting values to expected |
132 |
|
metric value basis. |
133 |
|
- Built-in function "wait()" accepts now both integers and real numbers as |
134 |
|
argument. |
135 |
|
- NKSP VM API cleanup: Get rid of legacy method |
136 |
|
VMFunction::argType(vmint iArg) which was already superseded by its new |
137 |
|
replacement VMFunction::acceptsArgType(vmint iArg, ExprType_t type). |
138 |
|
- NKSP parser: if wrong argument type was passed to a built-in function and |
139 |
|
that built-in function accepts more than one data type for the argument, |
140 |
|
then show all supported data types as parser error message. |
141 |
|
- Built-in function "play_note()" accepts now real numbers and seconds as |
142 |
|
unit type as well for its 3rd and 4th function arguments. |
143 |
|
- The following built-in functions accept now real numbers as well for their |
144 |
|
2nd function argument: "change_vol()", "change_tune()", "change_cutoff()", |
145 |
|
"change_attack()", "change_decay()", "change_release()", |
146 |
|
"change_sustain()", "change_cutoff_attack()", "change_cutoff_decay()", |
147 |
|
"change_cutoff_sustain()", "change_cutoff_release()", |
148 |
|
"change_amp_lfo_freq()", "change_cutoff_lfo_freq()", |
149 |
|
"change_pitch_lfo_freq()", "change_vol_time()", "change_tune_time()", |
150 |
|
"change_pan_time()", "fade_in()", "fade_out()", "change_play_pos()". |
151 |
|
- Fixed built-in function "change_play_pos()" not having accepted metric |
152 |
|
prefixes at all. |
153 |
|
|
154 |
* test cases: |
* test cases: |
155 |
- Fixed compiler errors in test cases. |
- Fixed compiler errors in test cases. |
161 |
- Added test cases for NKSP core language aspects and core built-in |
- Added test cases for NKSP core language aspects and core built-in |
162 |
functions. |
functions. |
163 |
- Fixed thread tests segfaulting on Linux. |
- Fixed thread tests segfaulting on Linux. |
164 |
|
- NKSP: Added real number test cases for built-in functions exit(), |
165 |
|
int_to_real(), real(), real_to_int() and int(), as well as for the |
166 |
|
plus, minus and negate language operators. |
167 |
|
- Added massive amount of NKSP test cases for standard measuring units and |
168 |
|
'final' operator usage cases. |
169 |
|
- Added NKSP test cases for (floating point tolerance aware) real number |
170 |
|
equalness / unequalness comparison. |
171 |
|
- Added NKSP int array and real array tests for value assignment and |
172 |
|
initialization of arrays. |
173 |
|
|
174 |
Version 2.1.1 (27 Jul 2019) |
Version 2.1.1 (27 Jul 2019) |
175 |
|
|