diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-03-04 18:23:39 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-03-04 18:23:39 -0300 |
| commit | 5a8bb00df443dfdb5708689f32c64e90f2557bf8 (patch) | |
| tree | f0328ef79978ce9bd8ceb63fdef2299b74c87490 /ldo.c | |
| parent | 677188de8aa0c4ed49a3db570f0c9ee7cd641ddc (diff) | |
| download | lua-5a8bb00df443dfdb5708689f32c64e90f2557bf8.tar.gz lua-5a8bb00df443dfdb5708689f32c64e90f2557bf8.tar.bz2 lua-5a8bb00df443dfdb5708689f32c64e90f2557bf8.zip | |
storing chunk "sources" instead of "filenames".
Diffstat (limited to 'ldo.c')
| -rw-r--r-- | ldo.c | 47 |
1 files changed, 13 insertions, 34 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldo.c,v 1.35 1999/02/22 19:23:36 roberto Exp roberto $ | 2 | ** $Id: ldo.c,v 1.36 1999/02/26 15:48:55 roberto Exp roberto $ |
| 3 | ** Stack and Call structure of Lua | 3 | ** Stack and Call structure of Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -108,7 +108,7 @@ void luaD_callHook (StkId base, TProtoFunc *tf, int isreturn) | |||
| 108 | else { | 108 | else { |
| 109 | TObject *f = L->stack.stack+base-1; | 109 | TObject *f = L->stack.stack+base-1; |
| 110 | if (tf) | 110 | if (tf) |
| 111 | (*L->callhook)(Ref(f), tf->fileName->str, tf->lineDefined); | 111 | (*L->callhook)(Ref(f), tf->source->str, tf->lineDefined); |
| 112 | else | 112 | else |
| 113 | (*L->callhook)(Ref(f), "(C)", -1); | 113 | (*L->callhook)(Ref(f), "(C)", -1); |
| 114 | } | 114 | } |
| @@ -355,23 +355,27 @@ void luaD_gcIM (TObject *o) | |||
| 355 | } | 355 | } |
| 356 | 356 | ||
| 357 | 357 | ||
| 358 | int lua_dofile (char *filename) | 358 | #define MAXFILENAME 200 /* maximum part of a file name kept */ |
| 359 | { | 359 | |
| 360 | int lua_dofile (char *filename) { | ||
| 360 | ZIO z; | 361 | ZIO z; |
| 361 | int status; | 362 | int status; |
| 362 | int c; | 363 | int c; |
| 363 | int bin; | 364 | int bin; |
| 365 | char name[MAXFILENAME+2]; /* +2 for '@' and '\0' */ | ||
| 364 | FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); | 366 | FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); |
| 365 | if (f == NULL) | 367 | if (f == NULL) |
| 366 | return 2; | 368 | return 2; |
| 367 | if (filename == NULL) | 369 | if (filename == NULL) |
| 368 | filename = "(stdin)"; | 370 | strcpy(name, "@stdin"); |
| 371 | else | ||
| 372 | sprintf(name, "@%.*s", MAXFILENAME, filename); | ||
| 369 | c = fgetc(f); | 373 | c = fgetc(f); |
| 370 | ungetc(c, f); | 374 | ungetc(c, f); |
| 371 | bin = (c == ID_CHUNK); | 375 | bin = (c == ID_CHUNK); |
| 372 | if (bin) | 376 | if (bin) |
| 373 | f = freopen(filename, "rb", f); /* set binary mode */ | 377 | f = freopen(filename, "rb", f); /* set binary mode */ |
| 374 | luaZ_Fopen(&z, f, filename); | 378 | luaZ_Fopen(&z, f, name); |
| 375 | status = do_main(&z, bin); | 379 | status = do_main(&z, bin); |
| 376 | if (f != stdin) | 380 | if (f != stdin) |
| 377 | fclose(f); | 381 | fclose(f); |
| @@ -379,40 +383,15 @@ int lua_dofile (char *filename) | |||
| 379 | } | 383 | } |
| 380 | 384 | ||
| 381 | 385 | ||
| 382 | #define SIZE_PREF 20 /* size of string prefix to appear in error messages */ | ||
| 383 | #define SSIZE_PREF "20" | ||
| 384 | |||
| 385 | |||
| 386 | static void build_name (char *str, char *name) { | ||
| 387 | if (str == NULL || *str == ID_CHUNK) | ||
| 388 | strcpy(name, "(buffer)"); | ||
| 389 | else { | ||
| 390 | char *temp; | ||
| 391 | sprintf(name, "(dostring) >> \"%." SSIZE_PREF "s\"", str); | ||
| 392 | temp = strchr(name, '\n'); | ||
| 393 | if (temp) { /* end string after first line */ | ||
| 394 | *temp = '"'; | ||
| 395 | *(temp+1) = 0; | ||
| 396 | } | ||
| 397 | } | ||
| 398 | } | ||
| 399 | |||
| 400 | |||
| 401 | int lua_dostring (char *str) { | 386 | int lua_dostring (char *str) { |
| 402 | return lua_dobuffer(str, strlen(str), NULL); | 387 | return lua_dobuffer(str, strlen(str), str); |
| 403 | } | 388 | } |
| 404 | 389 | ||
| 405 | 390 | ||
| 406 | int lua_dobuffer (char *buff, int size, char *name) { | 391 | int lua_dobuffer (char *buff, int size, char *name) { |
| 407 | char newname[SIZE_PREF+25]; | ||
| 408 | ZIO z; | 392 | ZIO z; |
| 409 | int status; | 393 | if (!name) name = "?"; |
| 410 | if (name==NULL) { | ||
| 411 | build_name(buff, newname); | ||
| 412 | name = newname; | ||
| 413 | } | ||
| 414 | luaZ_mopen(&z, buff, size, name); | 394 | luaZ_mopen(&z, buff, size, name); |
| 415 | status = do_main(&z, buff[0]==ID_CHUNK); | 395 | return do_main(&z, buff[0]==ID_CHUNK); |
| 416 | return status; | ||
| 417 | } | 396 | } |
| 418 | 397 | ||
