diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/host/buildvm_lib.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/host/buildvm_lib.c b/src/host/buildvm_lib.c index 3231d3ad..8e10fec1 100644 --- a/src/host/buildvm_lib.c +++ b/src/host/buildvm_lib.c | |||
| @@ -317,6 +317,27 @@ void emit_lib(BuildCtx *ctx) | |||
| 317 | regfunc = REGFUNC_OK; | 317 | regfunc = REGFUNC_OK; |
| 318 | while (fgets(buf, sizeof(buf), fp) != NULL) { | 318 | while (fgets(buf, sizeof(buf), fp) != NULL) { |
| 319 | char *p; | 319 | char *p; |
| 320 | /* Simplistic pre-processor. Only handles top-level #if/#endif. */ | ||
| 321 | if (buf[0] == '#' && buf[1] == 'i' && buf[2] == 'f') { | ||
| 322 | int ok = 1; | ||
| 323 | if (!strcmp(buf, "#if LJ_52\n")) | ||
| 324 | ok = LJ_52; | ||
| 325 | else if (!strcmp(buf, "#if LJ_HASJIT\n")) | ||
| 326 | ok = LJ_HASJIT; | ||
| 327 | else if (!strcmp(buf, "#if LJ_HASFFI\n")) | ||
| 328 | ok = LJ_HASFFI; | ||
| 329 | if (!ok) { | ||
| 330 | int lvl = 1; | ||
| 331 | while (fgets(buf, sizeof(buf), fp) != NULL) { | ||
| 332 | if (buf[0] == '#' && buf[1] == 'e' && buf[2] == 'n') { | ||
| 333 | if (--lvl == 0) break; | ||
| 334 | } else if (buf[0] == '#' && buf[1] == 'i' && buf[2] == 'f') { | ||
| 335 | lvl++; | ||
| 336 | } | ||
| 337 | } | ||
| 338 | continue; | ||
| 339 | } | ||
| 340 | } | ||
| 320 | for (p = buf; (p = strstr(p, LIBDEF_PREFIX)) != NULL; ) { | 341 | for (p = buf; (p = strstr(p, LIBDEF_PREFIX)) != NULL; ) { |
| 321 | const LibDefHandler *ldh; | 342 | const LibDefHandler *ldh; |
| 322 | p += sizeof(LIBDEF_PREFIX)-1; | 343 | p += sizeof(LIBDEF_PREFIX)-1; |
