diff --git a/cc_core.c b/cc_core.c index b472e2d..1410425 100644 --- a/cc_core.c +++ b/cc_core.c @@ -426,8 +426,42 @@ void primary_expr_string() strings_list = uniqueID(function->s, strings_list, number_string); /* Parse the string */ - strings_list = emit(parse_string(global_token->s), strings_list); - global_token = global_token->next; + if('"' != global_token->next->s[0]) + { + strings_list = emit(parse_string(global_token->s), strings_list); + global_token = global_token->next; + } + else + { + char* s = calloc(MAX_STRING, sizeof(char)); + + /* prefix leading string */ + s[0] = '"'; + int i = 1; + + int j; + while('"' == global_token->s[0]) + { + /* Step past the leading '"' */ + j = 1; + + /* Copy the rest of the string as is */ + while(0 != global_token->s[j]) + { + require(i < MAX_STRING, "concat string exceeded max string length\n"); + s[i] = global_token->s[j]; + i = i + 1; + j = j + 1; + } + + /* Move on to the next token */ + global_token = global_token->next; + require(NULL != global_token, "multi-string null is not valid C\n"); + } + + /* Now use it */ + strings_list = emit(parse_string(s), strings_list); + } } void primary_expr_char() diff --git a/test/test.answers b/test/test.answers index 8bc5c31..3fcaf16 100644 --- a/test/test.answers +++ b/test/test.answers @@ -169,8 +169,8 @@ a2a83f42119e646b389b98647cf6cf2aa9597185997c9453db746178c8c4c0bf test/results/t 6c10f796fdb986a3a52a4ed8ad1a4eb4c1023c5dd99101a2aeadd9bad4d064ef test/results/test0106-knight-native-binary 6852a8f33ec49d43bcfb3ffff1e04900ad146806aeb67ed1749d15baed50bcb5 test/results/test0106-knight-posix-binary 3e026925ec537c817f815b4748e19e4edc0487643b66d8df00a831c73229059e test/results/test0106-x86-binary -faccfa595a90874aaf7a28f3000f6869bcc85ace8a5622f3e6d853814e76687c test/results/test1000-aarch64-binary -258068d01c1cd86d8edf7a30d62be32c463f35aed8db79e48230a82df706846a test/results/test1000-amd64-binary -a541e31ba118cdc8dc8e21b0209a2452e8bab2031cc0296b3e11eaee0201a1a5 test/results/test1000-armv7l-binary -eee2d17b91000fdbb7d978c449044c7943d660ddeded3cbc0b85fa317d43ae72 test/results/test1000-knight-posix-binary -cde5373a30c8cc2be97f82a186ddc2f01ab65b47943d7b2068d540199988c62d test/results/test1000-x86-binary +b8c05b3c57e2c469c9d5db3c225f66dfde3d00e10be95c6cd582865e878f707b test/results/test1000-aarch64-binary +dab703f295f2074bbf10927fa6e5811cdbe4a5801f5c99d84167f31180c63609 test/results/test1000-amd64-binary +c4e6ce14fd9171504c7ff2490da8147f51e62359f73f0ef6e63b67dca1bf793d test/results/test1000-armv7l-binary +2ca38a7da9c4f707ea2940a08cf5314401e0a5b96d7a467ed49c04890dd54622 test/results/test1000-knight-posix-binary +4f3ee7a46a31edfc502c436c561c0a281d9c5b6ef2c578215d0e3777f88e0045 test/results/test1000-x86-binary diff --git a/test/test1000/proof.answer b/test/test1000/proof.answer index 552f976..2b590ac 100644 --- a/test/test1000/proof.answer +++ b/test/test1000/proof.answer @@ -1 +1 @@ -793a85cf64a6895751cd45388c4899f3f3c83fb0f06af7e455d034771ddcb5da test/test1000/proof +5a26f6d1d3fd9da464ba7e2f5ab2c51f97fabc0366c5c7cba5af238753343264 test/test1000/proof