109
109
/* Maximum size of an integer */
110
110
#define JIM_INTEGER_SPACE 24
111
111
112
- #if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND)
112
+ #if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_EXPR_TOKENS) || defined(DEBUG_SHOW_EXPR)
113
+ #define JIM_TT_NAME
113
114
static const char *jim_tt_name(int type);
114
115
#endif
115
116
@@ -8235,6 +8236,9 @@ enum
8235
8236
/* Binary operators (strings) */
8236
8237
JIM_EXPROP_STREQ, /* 43 */
8237
8238
JIM_EXPROP_STRNE,
8239
+ JIM_EXPROP_STRGLOB,
8240
+ JIM_EXPROP_STRRE,
8241
+
8238
8242
JIM_EXPROP_STRIN,
8239
8243
JIM_EXPROP_STRNI,
8240
8244
JIM_EXPROP_STRLT,
@@ -8243,13 +8247,13 @@ enum
8243
8247
JIM_EXPROP_STRGE,
8244
8248
8245
8249
/* Unary operators (numbers) */
8246
- JIM_EXPROP_NOT, /* 51 */
8250
+ JIM_EXPROP_NOT, /* 53 */
8247
8251
JIM_EXPROP_BITNOT,
8248
8252
JIM_EXPROP_UNARYMINUS,
8249
8253
JIM_EXPROP_UNARYPLUS,
8250
8254
8251
8255
/* Functions */
8252
- JIM_EXPROP_FUNC_INT, /* 55 */
8256
+ JIM_EXPROP_FUNC_INT, /* 57 */
8253
8257
JIM_EXPROP_FUNC_WIDE,
8254
8258
JIM_EXPROP_FUNC_ABS,
8255
8259
JIM_EXPROP_FUNC_DOUBLE,
@@ -8258,7 +8262,7 @@ enum
8258
8262
JIM_EXPROP_FUNC_SRAND,
8259
8263
8260
8264
/* math functions from libm */
8261
- JIM_EXPROP_FUNC_SIN, /* 69 */
8265
+ JIM_EXPROP_FUNC_SIN, /* 71 */
8262
8266
JIM_EXPROP_FUNC_COS,
8263
8267
JIM_EXPROP_FUNC_TAN,
8264
8268
JIM_EXPROP_FUNC_ASIN,
@@ -8824,7 +8828,25 @@ static int JimSearchList(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *valOb
8824
8828
return 0;
8825
8829
}
8826
8830
8831
+ static int JimRegexpMatch(Jim_Interp *interp, Jim_Obj *patternObj, Jim_Obj *objPtr)
8832
+ {
8833
+ Jim_Obj *argv[3];
8834
+ int argc = 0;
8835
+ long eq;
8836
+ int rc;
8827
8837
8838
+ argv[argc++] = Jim_NewStringObj(interp, "regexp", -1);
8839
+ argv[argc++] = patternObj;
8840
+ argv[argc++] = objPtr;
8841
+
8842
+ rc = Jim_EvalObjVector(interp, argc, argv);
8843
+
8844
+ if (rc != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &eq) != JIM_OK) {
8845
+ eq = -rc;
8846
+ }
8847
+
8848
+ return eq;
8849
+ }
8828
8850
8829
8851
static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node)
8830
8852
{
@@ -8869,11 +8891,22 @@ static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node)
8869
8891
case JIM_EXPROP_STRNI:
8870
8892
wC = !JimSearchList(interp, B, A);
8871
8893
break;
8894
+ case JIM_EXPROP_STRGLOB:
8895
+ wC = Jim_StringMatchObj(interp, B, A, 0);
8896
+ break;
8897
+ case JIM_EXPROP_STRRE:
8898
+ wC = JimRegexpMatch(interp, B, A);
8899
+ if (wC < 0) {
8900
+ rc = JIM_ERR;
8901
+ goto error;
8902
+ }
8903
+ break;
8872
8904
default:
8873
8905
abort();
8874
8906
}
8875
8907
Jim_SetResultInt(interp, wC);
8876
8908
8909
+ error:
8877
8910
Jim_DecrRefCount(interp, A);
8878
8911
Jim_DecrRefCount(interp, B);
8879
8912
@@ -9004,6 +9037,8 @@ static const struct Jim_ExprOperator Jim_ExprOperators[] = {
9004
9037
9005
9038
OPRINIT("eq", 60, 2, JimExprOpStrBin),
9006
9039
OPRINIT("ne", 60, 2, JimExprOpStrBin),
9040
+ OPRINIT("=*", 60, 2, JimExprOpStrBin),
9041
+ OPRINIT("=~", 60, 2, JimExprOpStrBin),
9007
9042
9008
9043
OPRINIT("in", 55, 2, JimExprOpStrBin),
9009
9044
OPRINIT("ni", 55, 2, JimExprOpStrBin),
@@ -9268,7 +9303,7 @@ static int JimParseExprOperator(struct JimParserCtx *pc)
9268
9303
return JIM_OK;
9269
9304
}
9270
9305
9271
- #if ( defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) ) && !defined(JIM_BOOTSTRAP)
9306
+ #if defined(JIM_TT_NAME ) && !defined(JIM_BOOTSTRAP)
9272
9307
static const char *jim_tt_name(int type)
9273
9308
{
9274
9309
static const char * const tt_names[JIM_TT_EXPR_OP] =
0 commit comments