1919#define IP prog_ip
2020#define CODE (x ) prog_source[(x)]
2121#define CODE_PEEK () CODE(IP)
22- #define V_FREE (v ) \
23- if ((v) && ((v)->type == V_STR || \
24- (v)->type == V_MAP || \
25- (v)->type == V_ARRAY)) { \
26- v_free((v)); \
22+ #define V_FREE (v ) \
23+ if ((v) && ((v)->type == V_STR || \
24+ (v)->type == V_MAP || \
25+ (v)->type == V_ARRAY)) { \
26+ v_free((v)); \
2727 }
28- #define V_FREE2 (v ) \
29- if (((v)->type == V_STR || \
30- (v)->type == V_MAP || \
31- (v)->type == V_ARRAY)) { \
32- v_free((v)); \
28+ #define V_FREE2 (v ) \
29+ if (((v)->type == V_STR || \
30+ (v)->type == V_MAP || \
31+ (v)->type == V_ARRAY)) { \
32+ v_free((v)); \
3333 }
3434
3535/**
@@ -379,7 +379,7 @@ static inline void oper_mul(var_t *r, var_t *left) {
379379 } else {
380380 err_matop ();
381381 }
382- } else if (op == '*' ) {
382+ } else if (op == '*' ) {
383383 mat_mul (left , r );
384384 } else {
385385 err_matop ();
@@ -1245,23 +1245,6 @@ void eval(var_t *r) {
12451245 r -> v .n = code_getreal ();
12461246 break ;
12471247
1248- case kwTYPE_STR :
1249- // string - constant
1250- IP ++ ;
1251- V_FREE (r );
1252- v_eval_str (r );
1253- break ;
1254-
1255- case kwTYPE_LOGOPR :
1256- IP ++ ;
1257- oper_log (r , left );
1258- break ;
1259-
1260- case kwTYPE_CMPOPR :
1261- IP ++ ;
1262- oper_cmp (r , left );
1263- break ;
1264-
12651248 case kwTYPE_ADDOPR :
12661249 IP ++ ;
12671250 oper_add (r , left );
@@ -1272,17 +1255,6 @@ void eval(var_t *r) {
12721255 oper_mul (r , left );
12731256 break ;
12741257
1275- case kwTYPE_POWOPR :
1276- IP ++ ;
1277- oper_powr (r , left );
1278- break ;
1279-
1280- case kwTYPE_UNROPR :
1281- // unary
1282- IP ++ ;
1283- oper_unary (r );
1284- break ;
1285-
12861258 case kwTYPE_VAR :
12871259 // variable
12881260 V_FREE (r );
@@ -1317,15 +1289,10 @@ void eval(var_t *r) {
13171289 IP ++ ;
13181290 if (!eval_sp ) {
13191291 err_syntax_unknown ();
1320- } else {
1321- eval_sp -- ;
1322- left = & eval_stk [eval_sp ];
1292+ return ;
13231293 }
1324- break ;
1325-
1326- case kwTYPE_EVAL_SC :
1327- IP ++ ;
1328- eval_shortc (r );
1294+ eval_sp -- ;
1295+ left = & eval_stk [eval_sp ];
13291296 break ;
13301297
13311298 case kwTYPE_CALLF :
@@ -1334,48 +1301,80 @@ void eval(var_t *r) {
13341301 eval_callf (r );
13351302 break ;
13361303
1304+ case kwTYPE_STR :
1305+ // string - constant
1306+ IP ++ ;
1307+ V_FREE (r );
1308+ v_eval_str (r );
1309+ break ;
1310+
1311+ case kwTYPE_LOGOPR :
1312+ IP ++ ;
1313+ oper_log (r , left );
1314+ break ;
1315+
1316+ case kwTYPE_CMPOPR :
1317+ IP ++ ;
1318+ oper_cmp (r , left );
1319+ break ;
1320+
1321+ case kwTYPE_POWOPR :
1322+ IP ++ ;
1323+ oper_powr (r , left );
1324+ break ;
1325+
1326+ case kwTYPE_UNROPR :
1327+ // unary
1328+ IP ++ ;
1329+ oper_unary (r );
1330+ break ;
1331+
1332+ case kwTYPE_EVAL_SC :
1333+ IP ++ ;
1334+ eval_shortc (r );
1335+ break ;
1336+
13371337 case kwTYPE_CALL_UDF :
13381338 eval_call_udf (r );
13391339 break ;
13401340
1341- default :
1342- // less used codes
1343- switch (code ) {
1344- case kwTYPE_CALLEXTF :
1345- // [lib][index] external functions
1346- IP ++ ;
1347- eval_extf (r );
1348- break ;
1349-
1350- case kwTYPE_PTR :
1351- // UDF pointer - constant
1352- IP ++ ;
1353- eval_ptr (r );
1354- break ;
1341+ case kwTYPE_CALLEXTF :
1342+ // [lib][index] external functions
1343+ IP ++ ;
1344+ eval_extf (r );
1345+ break ;
13551346
1356- case kwBYREF :
1357- // unexpected code
1358- err_evsyntax ();
1359- break ;
1347+ case kwTYPE_PTR :
1348+ // UDF pointer - constant
1349+ IP ++ ;
1350+ eval_ptr (r );
1351+ break ;
13601352
1361- default : {
1362- if (code == kwTYPE_EOC ||
1363- code == kwTYPE_SEP ||
1364- code == kwTO ||
1365- kw_check_evexit (code )) {
1366- // restore stack pointer
1367- eval_sp = eval_pos ;
1353+ case kwBYREF :
1354+ // unexpected code
1355+ err_evsyntax ();
1356+ return ;
1357+
1358+ default : {
1359+ if (code == kwTYPE_LINE ||
1360+ code == kwTYPE_SEP ||
1361+ code == kwTO ||
1362+ code == kwTHEN ||
1363+ code == kwSTEP ||
1364+ kw_check_evexit (code )) {
1365+ // restore stack pointer
1366+ eval_sp = eval_pos ;
13681367
1369- // normal exit
1370- return ;
1371- }
1372- rt_raise ("UNKNOWN ERROR. IP:%d=0x%02X" , IP , code );
1373- if (!opt_quiet ) {
1374- hex_dump (prog_source , prog_length );
1375- }
1376- }};
1377- }
1368+ // normal exit
1369+ return ;
1370+ }
1371+ rt_raise ("UNKNOWN ERROR. IP:%d=0x%02X" , IP , code );
1372+ if (!opt_quiet ) {
1373+ hex_dump (prog_source , prog_length );
1374+ }
1375+ }};
13781376 }
1377+
13791378 // restore stack pointer
13801379 eval_sp = eval_pos ;
13811380}
0 commit comments