Skip to content
This repository was archived by the owner on Nov 22, 2023. It is now read-only.

Commit 1682eea

Browse files
author
gek
committed
make push
1 parent 5f91652 commit 1682eea

File tree

1 file changed

+104
-35
lines changed

1 file changed

+104
-35
lines changed

ctok.c

+104-35
Original file line numberDiff line numberDiff line change
@@ -307,12 +307,12 @@ static void tokenizer(
307307
const char* STRING_BEGIN = "\"";
308308
const char* STRING_END = "\"";
309309
const char* CHAR_BEGIN = "\'";
310-
const char* CHAR_END = "\'";
310+
//const char* CHAR_END = "\'";
311311
/*C-style comments.*/
312312
const char* COMMENT_BEGIN = "/*";
313313
const char* COMMENT_END = "*/";
314314
const char* LINECOMMENT_BEGIN = "//";
315-
const char* LINECOMMENT_END = "\n";
315+
//const char* LINECOMMENT_END = "\n";
316316
const char* INCLUDE_OPEN_SYS = "<";
317317
const char* INCLUDE_CLOSE_SYS = ">";
318318
char* text_store = work->text;
@@ -722,35 +722,49 @@ static void tokenizer(
722722
}
723723
//if(mode == 0)
724724
mode_whitespace:
725+
for(;work->text[i] != '\0'; i++)
725726
{ /*reading whitespace.*/
726727
work->data = 0;
727-
if(isspace(work->text[i]) && work->text[i]!='\n') continue;
728-
work = consume__bytes_with_bigstore(work, i); i=-1; mode = -1; continue;
728+
if(isspace(work->text[i]) && work->text[i]!='\n') {
729+
continue;
730+
}
731+
732+
work = consume__bytes_with_bigstore(work, i);
733+
i=0;
734+
mode = -1;
735+
goto done_selecting_mode;
729736
}
737+
break;
730738
//if(mode == 1)
731739
mode_identifier:
740+
for(;work->text[i] != '\0'; i++)
732741
{ /*valid identifier*/
733742
work->data = (void*)8;
734743
if(
735744
isUnusual(work->text[i])
736745
)
737746
{
738747
work = consume__bytes_with_bigstore(work, i);
739-
i = -1; mode = -1;
748+
i = 0; mode = -1;
749+
goto done_selecting_mode;
740750
}
741751
continue;
742752
}
753+
break;
743754
//if(mode == 7)
744-
mode_decliteral:{ /*Decimal literal, might turn into float*/
755+
mode_decliteral:
756+
for(;work->text[i] != '\0'; i++)
757+
{ /*Decimal literal, might turn into float*/
745758
work->data = (void*)6;
746759
if(work->text[i] == '.')
747760
{
748761
mode = 11; /*Begin parsing decimal fractional portion*/
749762
work->data = (void*)7;
750-
continue;
763+
i++;
764+
goto done_selecting_mode;
751765
}
752766
if(work->text[i] == 'E' || work->text[i] == 'e'){
753-
if(work->text[i+1] == '-' || work->text[i+1] == '+')
767+
if(work->text[i+1] == '-' || work->text[i+1] == '+')
754768
i++;
755769
mode = 10; /*Begin parsing the E portion.*/
756770
work->data = (void*)7;
@@ -761,27 +775,30 @@ static void tokenizer(
761775
!my_isdigit(work->text[i])
762776
)
763777
{
764-
765778
work = consume__bytes_with_bigstore(work, i);
766-
i = -1; mode = -1; continue;
779+
i = 0; mode = -1; goto done_selecting_mode;
767780
}
768781
continue;
769782
}
783+
break;
770784
//if(mode == 8)
771785
mode_hexliteral:
786+
for(;work->text[i] != '\0'; i++)
772787
{ /*Hex literal*/
773788
work->data = (void*)6;
774789
if(
775790
!my_ishex(work->text[i])
776791
)
777792
{
778793
work = consume__bytes_with_bigstore(work, i);
779-
i = -1; mode = -1; continue;
794+
i = 0; mode = -1; goto done_selecting_mode;
780795
}
781796
continue;
782797
}
783798
//if(mode == 9)
784-
mode_octliteral:{ /*Octal Literal*/
799+
mode_octliteral:
800+
for(;work->text[i] != '\0'; i++)
801+
{ /*Octal Literal*/
785802
work->data = (void*)6;
786803
if(
787804
!my_isoct(work->text[i])
@@ -790,7 +807,8 @@ static void tokenizer(
790807
if(my_isdigit(work->text[i]))
791808
{
792809
mode = 7; /*This is a decimal literal, actually*/
793-
continue;
810+
i++;
811+
goto done_selecting_mode;
794812
}
795813
/*allow 0e-3*/
796814
if(work->text[i] == 'E' || work->text[i] == 'e'){
@@ -805,25 +823,35 @@ static void tokenizer(
805823
{
806824
mode = 11; /*Begin parsing decimal fractional portion*/
807825
work->data = (void*)7;
808-
continue;
826+
i++;
827+
goto done_selecting_mode;
809828
}
810829
work = consume__bytes_with_bigstore(work, i);
811-
i = -1; mode = -1; continue;
830+
i = 0; mode = -1;
831+
goto done_selecting_mode;
812832
}
813833
continue;
814834
}
835+
break;
815836
//if(mode == 10)
816-
afterE:{ /*after E*/
837+
afterE:
838+
for(;work->text[i] != '\0'; i++)
839+
{ /*after E*/
817840
work->data = (void*)7;
818841
if(!my_isdigit(work->text[i])){
819842
work->data = (void*)7;
820843
work = consume__bytes_with_bigstore(work, i);
821-
i = -1; mode = -1; continue;
844+
i = 0;
845+
mode = -1;
846+
goto done_selecting_mode;
822847
}
823848
continue;
824849
}
850+
break;
825851
//if(mode == 11)
826-
afterRadix:{ /*After the radix of a float*/
852+
afterRadix:
853+
for(;work->text[i] != '\0'; i++)
854+
{ /*After the radix of a float*/
827855
work->data = (void*)7;
828856
if(work->text[i] == 'E' || work->text[i] == 'e'){
829857
if(work->text[i+1] == '-' || work->text[i+1] == '+')
@@ -834,63 +862,104 @@ static void tokenizer(
834862
}
835863
if(!my_isdigit(work->text[i])){
836864
work = consume__bytes_with_bigstore(work, i);
837-
i = -1; mode = -1; continue;
865+
i = 0; mode = -1; goto done_selecting_mode;
838866
}
839867
continue;
840868
}
869+
break;
841870
//if(mode == 12)
842-
mode_incsys:{
871+
mode_incsys:
872+
for(;work->text[i] != '\0'; i++)
873+
{
843874
work->data = (void*)22;
844875
if(work->text[i] == '\\' && work->text[i+1] != '\0') {i++; continue;}
845876
if(strfind(work->text + i, INCLUDE_CLOSE_SYS) == 0){
846877
i+=strlen(INCLUDE_CLOSE_SYS);
847-
work = consume__bytes_with_bigstore(work, i); i = -1; mode = -1; continue;
878+
work = consume__bytes_with_bigstore(work, i);
879+
i = 0;
880+
mode = -1;
881+
goto done_selecting_mode;
848882
}
849883
continue;
850884
}
885+
break;
851886
//if(mode == 2)
852-
mode_string:{ /*string.*/
887+
mode_string:
888+
for(;work->text[i] != '\0'; i++){ /*string.*/
853889
work->data = (void*)2;
854890
if(work->text[i] == '\\' && work->text[i+1] != '\0') {i++; continue;}
855-
if(strfind(work->text + i, STRING_END) == 0){
891+
if(
892+
//strfind(work->text + i, STRING_END) == 0
893+
(work->text[i] == '\"')
894+
){
856895
i+=strlen(STRING_END);
857-
work = consume__bytes_with_bigstore(work, i); i = -1; mode = -1; continue;
896+
work = consume__bytes_with_bigstore(work, i);
897+
i = 0;
898+
mode = -1;
899+
goto done_selecting_mode;
858900
}
859901
continue;
860902
}
903+
break;
861904
//if(mode == 3)
862-
mode_comment:{ /*comment.*/
905+
mode_comment:
906+
for(;work->text[i] != '\0'; i++)
907+
{ /*comment.*/
863908
work->data = (void*)4;
864909
/*if(work->text[i] == '\\' && work->text[i+1] != '\0') {i++; continue;}*/
865-
if(strfind(work->text + i, COMMENT_END) == 0){
910+
if(
911+
//strfind(work->text + i, COMMENT_END) == 0
912+
(work->text[i] == '*') &&
913+
(work->text[i+1] == '/')
914+
){
866915
i+=strlen(COMMENT_END);
867916

868-
work = consume__bytes_with_bigstore(work, i); i = -1; mode = -1; continue;
917+
work = consume__bytes_with_bigstore(work, i);
918+
i = 0;
919+
mode = -1;
920+
goto done_selecting_mode;
869921
}
870922
continue;
871923
}
924+
break;
872925
//if(mode == 4)
873-
mode_charlit:{ /*char literal.*/
926+
mode_charlit:
927+
for(;work->text[i] != '\0'; i++)
928+
{ /*char literal.*/
874929
work->data = (void*)3;
875930
if(work->text[i] == '\\' && work->text[i+1] != '\0') {i++; continue;}
876-
if(strfind(work->text + i, CHAR_END) == 0){
877-
i+=strlen(CHAR_END);
878-
work = consume__bytes_with_bigstore(work, i); i = -1; mode = -1; continue;
931+
if(
932+
//strfind(work->text + i, CHAR_END) == 0
933+
work->text[i] == '\''
934+
){
935+
i+=1;
936+
work = consume__bytes_with_bigstore(work, i);
937+
i = 0;
938+
mode = -1;
939+
goto done_selecting_mode;
879940
}
880941
continue;
881942
}
943+
break;
882944
//if(mode == 6)
883-
mode_linecomment:{ /*line comment*/
945+
mode_linecomment:
946+
for(;work->text[i] != '\0'; i++)
947+
{ /*line comment*/
884948
work->data = (void*)4;
885-
if(strfind(work->text + i, LINECOMMENT_END) == 0){
949+
if(
950+
//strfind(work->text + i, LINECOMMENT_END) == 0
951+
(work->text[i] == '\n')
952+
){
886953
/*i+=strlen(LINECOMMENT_END);*/
887954

888955
work = consume__bytes_with_bigstore(work, i);
889-
i = -1;
890-
mode = -1; continue;
956+
i = 0;
957+
mode = -1;
958+
goto done_selecting_mode;
891959
}
892960
continue;
893961
}
962+
break;
894963
} /*eof main tokenizer*/
895964
//The very last token is currently pointing at the middle of a buffer...
896965
{

0 commit comments

Comments
 (0)