CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
luac.c-Dateireferenz
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lua.h"
#include "lauxlib.h"
#include "ldo.h"
#include "lfunc.h"
#include "lmem.h"
#include "lobject.h"
#include "lopcodes.h"
#include "lstring.h"
#include "lundump.h"
+ Include-Abhängigkeitsdiagramm für luac.c:

gehe zum Quellcode dieser Datei

Datenstrukturen

struct  Smain
 

Makrodefinitionen

#define luac_c
 
#define LUA_CORE
 
#define PROGNAME   "luac" /* default program name */
 
#define OUTPUT   PROGNAME ".out" /* default output file */
 
#define IS(s)   (strcmp(argv[i],s)==0)
 
#define toproto(L, i)   (clvalue(L->top+(i))->l.p)
 

Funktionen

static void fatal (const char *message)
 
static void cannot (const char *what)
 
static void usage (const char *message)
 
static int doargs (int argc, char *argv[])
 
static const Protocombine (lua_State *L, int n)
 
static int writer (lua_State *L, const void *p, size_t size, void *u)
 
static int pmain (lua_State *L)
 
int main (int argc, char *argv[])
 

Variablen

static int listing =0
 
static int dumping =1
 
static int stripping =0
 
static char Output [] ={ OUTPUT }
 
static const char * output =Output
 
static const char * progname =PROGNAME
 

Makro-Dokumentation

#define IS (   s)    (strcmp(argv[i],s)==0)

Definiert in Zeile 68 der Datei luac.c.

#define LUA_CORE

Definiert in Zeile 13 der Datei luac.c.

#define luac_c

Definiert in Zeile 12 der Datei luac.c.

#define OUTPUT   PROGNAME ".out" /* default output file */

Definiert in Zeile 27 der Datei luac.c.

#define PROGNAME   "luac" /* default program name */

Definiert in Zeile 26 der Datei luac.c.

#define toproto (   L,
 
)    (clvalue(L->top+(i))->l.p)

Definiert in Zeile 117 der Datei luac.c.

Dokumentation der Funktionen

static void cannot ( const char *  what)
static

Definiert in Zeile 42 der Datei luac.c.

43 {
44  fprintf(stderr,"%s: cannot %s %s: %s\n",progname,what,output,strerror(errno));
45  exit(EXIT_FAILURE);
46 }
static const Proto* combine ( lua_State L,
int  n 
)
static

Definiert in Zeile 119 der Datei luac.c.

120 {
121  if (n==1)
122  return toproto(L,-1);
123  else
124  {
125  int i,pc;
126  Proto* f=luaF_newproto(L);
127  setptvalue2s(L,L->top,f); incr_top(L);
128  f->source=luaS_newliteral(L,"=(" PROGNAME ")");
129  f->maxstacksize=1;
130  pc=2*n+1;
132  f->sizecode=pc;
133  f->p=luaM_newvector(L,n,Proto*);
134  f->sizep=n;
135  pc=0;
136  for (i=0; i<n; i++)
137  {
138  f->p[i]=toproto(L,i-n-1);
139  f->code[pc++]=CREATE_ABx(OP_CLOSURE,0,i);
140  f->code[pc++]=CREATE_ABC(OP_CALL,0,1,1);
141  }
142  f->code[pc++]=CREATE_ABC(OP_RETURN,0,1,0);
143  return f;
144  }
145 }
static int doargs ( int  argc,
char *  argv[] 
)
static

Definiert in Zeile 70 der Datei luac.c.

71 {
72  int i;
73  int version=0;
74  if (argv[0]!=NULL && *argv[0]!=0) progname=argv[0];
75  for (i=1; i<argc; i++)
76  {
77  if (*argv[i]!='-') /* end of options; keep it */
78  break;
79  else if (IS("--")) /* end of options; skip it */
80  {
81  ++i;
82  if (version) ++version;
83  break;
84  }
85  else if (IS("-")) /* end of options; use stdin */
86  break;
87  else if (IS("-l")) /* list */
88  ++listing;
89  else if (IS("-o")) /* output file */
90  {
91  output=argv[++i];
92  if (output==NULL || *output==0) usage(LUA_QL("-o") " needs argument");
93  if (IS("-")) output=NULL;
94  }
95  else if (IS("-p")) /* parse only */
96  dumping=0;
97  else if (IS("-s")) /* strip debug information */
98  stripping=1;
99  else if (IS("-v")) /* show version */
100  ++version;
101  else /* unknown option */
102  usage(argv[i]);
103  }
104  if (i==argc && (listing || !dumping))
105  {
106  dumping=0;
107  argv[--i]=Output;
108  }
109  if (version)
110  {
111  printf("%s %s\n",LUA_RELEASE,LUA_COPYRIGHT);
112  if (version==argc-1) exit(EXIT_SUCCESS);
113  }
114  return i;
115 }
static void fatal ( const char *  message)
static

Definiert in Zeile 36 der Datei luac.c.

37 {
38  fprintf(stderr,"%s: %s\n",progname,message);
39  exit(EXIT_FAILURE);
40 }
int main ( int  argc,
char *  argv[] 
)

Definiert in Zeile 186 der Datei luac.c.

187 {
188  lua_State* L;
189  struct Smain s;
190  int i=doargs(argc,argv);
191  argc-=i; argv+=i;
192  if (argc<=0) usage("no input files given");
193  L=lua_open();
194  if (L==NULL) fatal("not enough memory for state");
195  s.argc=argc;
196  s.argv=argv;
197  if (lua_cpcall(L,pmain,&s)!=0) fatal(lua_tostring(L,-1));
198  lua_close(L);
199  return EXIT_SUCCESS;
200 }
static int pmain ( lua_State L)
static

Definiert in Zeile 158 der Datei luac.c.

159 {
160  struct Smain* s = (struct Smain*)lua_touserdata(L, 1);
161  int argc=s->argc;
162  char** argv=s->argv;
163  const Proto* f;
164  int i;
165  if (!lua_checkstack(L,argc)) fatal("too many input files");
166  for (i=0; i<argc; i++)
167  {
168  const char* filename=IS("-") ? NULL : argv[i];
169  if (luaL_loadfile(L,filename)!=0) fatal(lua_tostring(L,-1));
170  }
171  f=combine(L,argc);
172  if (listing) luaU_print(f,listing>1);
173  if (dumping)
174  {
175  FILE* D= (output==NULL) ? stdout : fopen(output,"wb");
176  if (D==NULL) cannot("open");
177  lua_lock(L);
178  luaU_dump(L,f,writer,D,stripping);
179  lua_unlock(L);
180  if (ferror(D)) cannot("write");
181  if (fclose(D)) cannot("close");
182  }
183  return 0;
184 }
static void usage ( const char *  message)
static

Definiert in Zeile 48 der Datei luac.c.

49 {
50  if (*message=='-')
51  fprintf(stderr,"%s: unrecognized option " LUA_QS "\n",progname,message);
52  else
53  fprintf(stderr,"%s: %s\n",progname,message);
54  fprintf(stderr,
55  "usage: %s [options] [filenames].\n"
56  "Available options are:\n"
57  " - process stdin\n"
58  " -l list\n"
59  " -o name output to file " LUA_QL("name") " (default is \"%s\")\n"
60  " -p parse only\n"
61  " -s strip debug information\n"
62  " -v show version information\n"
63  " -- stop handling options\n",
65  exit(EXIT_FAILURE);
66 }
static int writer ( lua_State L,
const void *  p,
size_t  size,
void *  u 
)
static

Definiert in Zeile 147 der Datei luac.c.

148 {
149  UNUSED(L);
150  return (fwrite(p,size,1,(FILE*)u)!=1) && (size!=0);
151 }

Variablen-Dokumentation

int dumping =1
static

Definiert in Zeile 30 der Datei luac.c.

int listing =0
static

Definiert in Zeile 29 der Datei luac.c.

char Output[] ={ OUTPUT }
static

Definiert in Zeile 32 der Datei luac.c.

const char* output =Output
static

Definiert in Zeile 33 der Datei luac.c.

const char* progname =PROGNAME
static

Definiert in Zeile 34 der Datei luac.c.

int stripping =0
static

Definiert in Zeile 31 der Datei luac.c.