Skip to content

Commit d61438c

Browse files
authored
binop: add fast path (#69)
* add fast path * cleanup
1 parent 307ec48 commit d61438c

7 files changed

Lines changed: 411 additions & 151 deletions

abaplint.jsonc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
"global_class": true,
2828
"identical_form_names": true,
2929
"implement_methods": true,
30+
"max_one_statement": true,
31+
"indentation": true,
3032
"local_testclass_consistency": true,
3133
"message_exists": true,
3234
"method_implemented_twice": true,

src/types/zcl_mjs_string.clas.abap

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,18 @@ CLASS zcl_mjs_string IMPLEMENTATION.
151151
ENDIF.
152152
DATA lv_slen TYPE i.
153153
lv_slen = strlen( is_obj-str ).
154-
IF lv_start < 0. lv_start = 0. ENDIF.
155-
IF lv_start > lv_slen. lv_start = lv_slen. ENDIF.
156-
IF lv_end < 0. lv_end = 0. ENDIF.
157-
IF lv_end > lv_slen. lv_end = lv_slen. ENDIF.
154+
IF lv_start < 0.
155+
lv_start = 0.
156+
ENDIF.
157+
IF lv_start > lv_slen.
158+
lv_start = lv_slen.
159+
ENDIF.
160+
IF lv_end < 0.
161+
lv_end = 0.
162+
ENDIF.
163+
IF lv_end > lv_slen.
164+
lv_end = lv_slen.
165+
ENDIF.
158166
IF lv_start > lv_end.
159167
DATA lv_tmp TYPE i.
160168
lv_tmp = lv_start.
@@ -252,16 +260,22 @@ CLASS zcl_mjs_string IMPLEMENTATION.
252260
DATA lv_rxnxt TYPE i.
253261
lv_rxint = CONV i( ls_rep1-num ).
254262
" bitmask: 1=global, 2=ignoreCase — use explicit comparison (avoid integer division)
255-
IF lv_rxint = 1 OR lv_rxint = 3. lv_rxglob = abap_true. ENDIF.
256-
IF lv_rxint = 2 OR lv_rxint = 3. lv_rxicase = abap_true. ENDIF.
263+
IF lv_rxint = 1 OR lv_rxint = 3.
264+
lv_rxglob = abap_true.
265+
ENDIF.
266+
IF lv_rxint = 2 OR lv_rxint = 3.
267+
lv_rxicase = abap_true.
268+
ENDIF.
257269
CLEAR lv_rxout.
258270
lv_rxrem = is_obj-str.
259271
DATA lv_rx_pos TYPE i VALUE 0.
260272
DATA lt_rx_res TYPE match_result_tab.
261273
IF strlen( ls_rep1-str ) = 0.
262274
" Empty regex matches empty string between everywhere
263275
DO.
264-
IF lv_rx_pos > strlen( lv_rxrem ). EXIT. ENDIF.
276+
IF lv_rx_pos > strlen( lv_rxrem ).
277+
EXIT.
278+
ENDIF.
265279
DATA ls_e_res TYPE match_result.
266280
ls_e_res-offset = lv_rx_pos.
267281
ls_e_res-length = 0.
@@ -273,7 +287,9 @@ CLASS zcl_mjs_string IMPLEMENTATION.
273287
ENDDO.
274288
ELSE.
275289
DO.
276-
IF lv_rx_pos > strlen( lv_rxrem ). EXIT. ENDIF.
290+
IF lv_rx_pos > strlen( lv_rxrem ).
291+
EXIT.
292+
ENDIF.
277293
DATA ls_rx_res TYPE match_result.
278294
IF lv_rxicase = abap_true.
279295
FIND REGEX ls_rep1-str IN SECTION OFFSET lv_rx_pos OF lv_rxrem
@@ -416,7 +432,9 @@ CLASS zcl_mjs_string IMPLEMENTATION.
416432
DATA lv_spl_count TYPE i.
417433
lv_spl_count = 0.
418434
LOOP AT lt_spl_items INTO DATA(lv_spl_item) WHERE table_line IS NOT INITIAL OR table_line = ``.
419-
IF lv_spl_count >= lv_spl_limit. EXIT. ENDIF.
435+
IF lv_spl_count >= lv_spl_limit.
436+
EXIT.
437+
ENDIF.
420438
lo_spl_arr->push( zcl_mjs_val=>box_value( zcl_mjs_val=>string_val( lv_spl_item ) ) ).
421439
lv_spl_count = lv_spl_count + 1.
422440
ENDLOOP.

0 commit comments

Comments
 (0)