diff options
author | nc <charles.saternos@gmail.com> | 2019-05-18 10:25:02 -0400 |
---|---|---|
committer | nc <charles.saternos@gmail.com> | 2019-05-18 10:25:02 -0400 |
commit | ba9ed69c238d2049b8288a32dd5dfa5626db6d86 (patch) | |
tree | 39eb1b66632c950128d18ced4ca2a0f451636acd /subx | |
parent | eec1d85fb23c10fb4bc65b04d16e0f8da40300b9 (diff) | |
download | mu-ba9ed69c238d2049b8288a32dd5dfa5626db6d86.tar.gz |
implemented skip-string
Diffstat (limited to 'subx')
-rw-r--r-- | subx/apps/dquotes.subx | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/subx/apps/dquotes.subx b/subx/apps/dquotes.subx index f861abc7..058b4d58 100644 --- a/subx/apps/dquotes.subx +++ b/subx/apps/dquotes.subx @@ -2055,9 +2055,60 @@ skip-string: # line : (address stream) # . prolog 55/push-EBP 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP + # . save registers + 50/push-EAX + 51/push-ECX + 52/push-EDX + 53/push-EBX + + # EDX = line + 8b/copy 1/mod/*+disp8 5/rm32/EBP . . 2/r32/EDX 8/disp8 . # copy *(EBP+8) to EDX + + # ECX = line->read + 8b/copy 1/mod/*+disp8 2/rm32/EDX . . 1/r32/ECX 4/disp8 . # copy *(EDX+4) to ECX + + # EAX = 0 + 31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . . # clear EAX + # loop: +$skip-string:loop: + # ECX++ + 41/increment-ECX # ECX++ + + # EAX = *((char*) line->data/EDX[line->read/ECX]) + 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 2/base/EDX 1/index/ECX . 0/r32/EAX 0xc/disp8 . # copy *(EDX+ECX+12) to EBX + # if EAX == '\': + # goto escaped-char + 3d/compare-EAX-and 0x5c/imm32/backslash + 74/jump-if-equal $skip-string:escaped-char/disp8 + # else if EAX == '"': + # break + 3d/compare-EAX-and 0x22/imm32/double-quote + 74/jump-if-equal $skip-string:loop-end/disp8 + # else: + # continue loop + eb/jump $skip-string:loop/disp8 + +$skip-string:escaped-char: + # ECX++ (step over escaped charcter) + 41/increment-ECX # ECX++ + # continue loop + eb/jump $skip-string:loop/disp8 +$skip-string:loop-end: + # step over last '"' + # . ECX++ + 41/increment-ECX # ECX++ + + # line->read = ECX + 89/copy 1/mod/*+disp8 2/rm32/EDX . . . 1/r32/ECX 4/disp8 . # copy ECX to *(EDX+4) + $skip-string:end: # . restore registers + 5b/pop-to-EBX + 5a/pop-to-EDX + 59/pop-to-ECX + 58/pop-to-EAX + # . epilog 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP 5d/pop-to-EBP |