summaryrefslogtreecommitdiff
path: root/ldo.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-03-04 18:23:39 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-03-04 18:23:39 -0300
commit5a8bb00df443dfdb5708689f32c64e90f2557bf8 (patch)
treef0328ef79978ce9bd8ceb63fdef2299b74c87490 /ldo.c
parent677188de8aa0c4ed49a3db570f0c9ee7cd641ddc (diff)
downloadlua-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.c47
1 files changed, 13 insertions, 34 deletions
diff --git a/ldo.c b/ldo.c
index 9f3b7af1..19b36613 100644
--- a/ldo.c
+++ b/ldo.c
@@ -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
358int lua_dofile (char *filename) 358#define MAXFILENAME 200 /* maximum part of a file name kept */
359{ 359
360int 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
386static 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
401int lua_dostring (char *str) { 386int 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
406int lua_dobuffer (char *buff, int size, char *name) { 391int 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