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) || defined(DEBUG_SHOW_SUBST)
112
+ #if defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_SUBST) || 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
@@ -8247,6 +8248,9 @@ enum
8247
8248
/* Binary operators (strings) */
8248
8249
JIM_EXPROP_STREQ, /* 43 */
8249
8250
JIM_EXPROP_STRNE,
8251
+ JIM_EXPROP_STRGLOB,
8252
+ JIM_EXPROP_STRRE,
8253
+
8250
8254
JIM_EXPROP_STRIN,
8251
8255
JIM_EXPROP_STRNI,
8252
8256
JIM_EXPROP_STRLT,
@@ -8255,13 +8259,13 @@ enum
8255
8259
JIM_EXPROP_STRGE,
8256
8260
8257
8261
/* Unary operators (numbers) */
8258
- JIM_EXPROP_NOT, /* 51 */
8262
+ JIM_EXPROP_NOT, /* 53 */
8259
8263
JIM_EXPROP_BITNOT,
8260
8264
JIM_EXPROP_UNARYMINUS,
8261
8265
JIM_EXPROP_UNARYPLUS,
8262
8266
8263
8267
/* Functions */
8264
- JIM_EXPROP_FUNC_INT, /* 55 */
8268
+ JIM_EXPROP_FUNC_INT, /* 57 */
8265
8269
JIM_EXPROP_FUNC_WIDE,
8266
8270
JIM_EXPROP_FUNC_ABS,
8267
8271
JIM_EXPROP_FUNC_DOUBLE,
@@ -8270,7 +8274,7 @@ enum
8270
8274
JIM_EXPROP_FUNC_SRAND,
8271
8275
8272
8276
/* math functions from libm */
8273
- JIM_EXPROP_FUNC_SIN, /* 69 */
8277
+ JIM_EXPROP_FUNC_SIN, /* 71 */
8274
8278
JIM_EXPROP_FUNC_COS,
8275
8279
JIM_EXPROP_FUNC_TAN,
8276
8280
JIM_EXPROP_FUNC_ASIN,
@@ -8836,7 +8840,25 @@ static int JimSearchList(Jim_Interp *interp, Jim_Obj *listObjPtr, Jim_Obj *valOb
8836
8840
return 0;
8837
8841
}
8838
8842
8843
+ static int JimRegexpMatch(Jim_Interp *interp, Jim_Obj *patternObj, Jim_Obj *objPtr)
8844
+ {
8845
+ Jim_Obj *argv[3];
8846
+ int argc = 0;
8847
+ long eq;
8848
+ int rc;
8839
8849
8850
+ argv[argc++] = Jim_NewStringObj(interp, "regexp", -1);
8851
+ argv[argc++] = patternObj;
8852
+ argv[argc++] = objPtr;
8853
+
8854
+ rc = Jim_EvalObjVector(interp, argc, argv);
8855
+
8856
+ if (rc != JIM_OK || Jim_GetLong(interp, Jim_GetResult(interp), &eq) != JIM_OK) {
8857
+ eq = -rc;
8858
+ }
8859
+
8860
+ return eq;
8861
+ }
8840
8862
8841
8863
static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node)
8842
8864
{
@@ -8881,11 +8903,22 @@ static int JimExprOpStrBin(Jim_Interp *interp, struct JimExprNode *node)
8881
8903
case JIM_EXPROP_STRNI:
8882
8904
wC = !JimSearchList(interp, B, A);
8883
8905
break;
8906
+ case JIM_EXPROP_STRGLOB:
8907
+ wC = Jim_StringMatchObj(interp, B, A, 0);
8908
+ break;
8909
+ case JIM_EXPROP_STRRE:
8910
+ wC = JimRegexpMatch(interp, B, A);
8911
+ if (wC < 0) {
8912
+ rc = JIM_ERR;
8913
+ goto error;
8914
+ }
8915
+ break;
8884
8916
default:
8885
8917
abort();
8886
8918
}
8887
8919
Jim_SetResultInt(interp, wC);
8888
8920
8921
+ error:
8889
8922
Jim_DecrRefCount(interp, A);
8890
8923
Jim_DecrRefCount(interp, B);
8891
8924
@@ -9016,6 +9049,8 @@ static const struct Jim_ExprOperator Jim_ExprOperators[] = {
9016
9049
9017
9050
OPRINIT("eq", 60, 2, JimExprOpStrBin),
9018
9051
OPRINIT("ne", 60, 2, JimExprOpStrBin),
9052
+ OPRINIT("=*", 60, 2, JimExprOpStrBin),
9053
+ OPRINIT("=~", 60, 2, JimExprOpStrBin),
9019
9054
9020
9055
OPRINIT("in", 55, 2, JimExprOpStrBin),
9021
9056
OPRINIT("ni", 55, 2, JimExprOpStrBin),
@@ -9284,7 +9319,7 @@ static int JimParseExprOperator(struct JimParserCtx *pc)
9284
9319
return JIM_OK;
9285
9320
}
9286
9321
9287
- #if ( defined(DEBUG_SHOW_SCRIPT) || defined(DEBUG_SHOW_SCRIPT_TOKENS) || defined(JIM_DEBUG_COMMAND) || defined(DEBUG_SHOW_SUBST) ) && !defined(JIM_BOOTSTRAP)
9322
+ #if defined(JIM_TT_NAME ) && !defined(JIM_BOOTSTRAP)
9288
9323
static const char *jim_tt_name(int type)
9289
9324
{
9290
9325
static const char * const tt_names[JIM_TT_EXPR_OP] =
0 commit comments