@@ -79,8 +79,18 @@ trait GeneralMacros {
79
79
val Min = symbolOf[OpId .Min ]
80
80
val Max = symbolOf[OpId .Max ]
81
81
val Substring = symbolOf[OpId .Substring ]
82
+ val SubSequence = symbolOf[OpId .SubSequence ]
83
+ val StartsWith = symbolOf[OpId .StartsWith ]
84
+ val EndsWith = symbolOf[OpId .EndsWith ]
85
+ val Head = symbolOf[OpId .Head ]
86
+ val Tail = symbolOf[OpId .Tail ]
82
87
val CharAt = symbolOf[OpId .CharAt ]
83
88
val Length = symbolOf[OpId .Length ]
89
+ val Matches = symbolOf[OpId .Matches ]
90
+ val FirstMatch = symbolOf[OpId .FirstMatch ]
91
+ val PrefixMatch = symbolOf[OpId .PrefixMatch ]
92
+ val ReplaceFirstMatch = symbolOf[OpId .ReplaceFirstMatch ]
93
+ val ReplaceAllMatches = symbolOf[OpId .ReplaceAllMatches ]
84
94
}
85
95
86
96
// //////////////////////////////////////////////////////////////////
@@ -1236,17 +1246,68 @@ trait GeneralMacros {
1236
1246
case _ => unsupported()
1237
1247
}
1238
1248
def Substring : Calc = (a, b) match {
1239
- case (CalcVal (at : String , att), CalcVal (bt : Int , btt)) => CalcVal .mayFail(Primitive .String , at.substring(bt), q " $att.substring( $btt) " )
1249
+ case (CalcVal (at : String , att), CalcVal (bt : Int , btt)) =>
1250
+ CalcVal .mayFail(Primitive .String , at.substring(bt), q " $att.substring( $btt) " )
1251
+ case _ => unsupported()
1252
+ }
1253
+ def SubSequence : Calc = (a, b, cArg) match {
1254
+ case (CalcVal (at : String , att), CalcVal (bt : Int , btt), CalcVal (ct : Int , ctt)) =>
1255
+ CalcVal .mayFail(Primitive .String , at.subSequence(bt, ct), q " $att.subSequence( $btt, $ctt) " )
1256
+ case _ => unsupported()
1257
+ }
1258
+ def StartsWith : Calc = (a, b) match {
1259
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt)) =>
1260
+ CalcVal (at.startsWith(bt), q " $att.startsWith( $btt) " )
1261
+ case _ => unsupported()
1262
+ }
1263
+ def EndsWith : Calc = (a, b) match {
1264
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt)) =>
1265
+ CalcVal (at.endsWith(bt), q " $att.endsWith( $btt) " )
1266
+ case _ => unsupported()
1267
+ }
1268
+ def Head : Calc = a match {
1269
+ case CalcVal (at : String , att) =>
1270
+ CalcVal .mayFail(Primitive .Char , at.head, q " $att.head " )
1271
+ case _ => unsupported()
1272
+ }
1273
+ def Tail : Calc = a match {
1274
+ case CalcVal (at : String , att) => CalcVal (at.tail, q " $att.tail " )
1240
1275
case _ => unsupported()
1241
1276
}
1242
1277
def CharAt : Calc = (a, b) match {
1243
- case (CalcVal (at : String , att), CalcVal (bt : Int , btt)) => CalcVal .mayFail(Primitive .Char , at.charAt(bt),q " $att.charAt( $btt) " )
1278
+ case (CalcVal (at : String , att), CalcVal (bt : Int , btt)) =>
1279
+ CalcVal .mayFail(Primitive .Char , at.charAt(bt), q " $att.charAt( $btt) " )
1244
1280
case _ => unsupported()
1245
1281
}
1246
1282
def Length : Calc = a match {
1247
1283
case CalcVal (at : String , att) => CalcVal (at.length, q " $att.length " )
1248
1284
case _ => unsupported()
1249
1285
}
1286
+ def Matches : Calc = (a, b) match {
1287
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt)) =>
1288
+ CalcVal .mayFail(Primitive .Boolean , bt.r.matches(at), q " $btt.r.matches( $att) " )
1289
+ case _ => unsupported()
1290
+ }
1291
+ def FirstMatch : Calc = (a, b) match {
1292
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt)) =>
1293
+ CalcVal .mayFail(Primitive .String , bt.r.findFirstIn(at).get, q " $btt.r.findFirstIn( $att).get " )
1294
+ case _ => unsupported()
1295
+ }
1296
+ def PrefixMatch : Calc = (a, b) match {
1297
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt)) =>
1298
+ CalcVal .mayFail(Primitive .String , bt.r.findPrefixOf(at).get, q " $btt.r.findPrefixOf( $att).get " )
1299
+ case _ => unsupported()
1300
+ }
1301
+ def ReplaceFirstMatch : Calc = (a, b, cArg) match {
1302
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt), CalcVal (ct : String , ctt)) =>
1303
+ CalcVal .mayFail(Primitive .String , bt.r.replaceFirstIn(at, ct), q " $btt.r.replaceFirstIn( $att, $ctt) " )
1304
+ case _ => unsupported()
1305
+ }
1306
+ def ReplaceAllMatches : Calc = (a, b, cArg) match {
1307
+ case (CalcVal (at : String , att), CalcVal (bt : String , btt), CalcVal (ct : String , ctt)) =>
1308
+ CalcVal .mayFail(Primitive .String , bt.r.replaceAllIn(at, ct), q " $btt.r.replaceAllIn( $att, $ctt) " )
1309
+ case _ => unsupported()
1310
+ }
1250
1311
1251
1312
funcType match {
1252
1313
case funcTypes.AcceptNonLiteral => AcceptNonLiteral
@@ -1293,8 +1354,18 @@ trait GeneralMacros {
1293
1354
case funcTypes.Min => Min
1294
1355
case funcTypes.Max => Max
1295
1356
case funcTypes.Substring => Substring
1357
+ case funcTypes.SubSequence => SubSequence
1358
+ case funcTypes.StartsWith => StartsWith
1359
+ case funcTypes.EndsWith => EndsWith
1360
+ case funcTypes.Head => Head
1361
+ case funcTypes.Tail => Tail
1296
1362
case funcTypes.CharAt => CharAt
1297
1363
case funcTypes.Length => Length
1364
+ case funcTypes.Matches => Matches
1365
+ case funcTypes.FirstMatch => FirstMatch
1366
+ case funcTypes.PrefixMatch => PrefixMatch
1367
+ case funcTypes.ReplaceFirstMatch => ReplaceFirstMatch
1368
+ case funcTypes.ReplaceAllMatches => ReplaceAllMatches
1298
1369
case _ => abort(s " Unsupported $funcType[ $a, $b, $cArg] " )
1299
1370
}
1300
1371
}
0 commit comments