Github User Fetcher 1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
lfunc.c File Reference
#include "lprefix.h"
#include <stddef.h>
#include "lua.h"
#include "lfunc.h"
#include "lgc.h"
#include "lmem.h"
#include "lobject.h"
#include "lstate.h"

Go to the source code of this file.

Macros

#define lfunc_c
 
#define LUA_CORE
 

Functions

CClosureluaF_newCclosure (lua_State *L, int n)
 
LClosureluaF_newLclosure (lua_State *L, int n)
 
void luaF_initupvals (lua_State *L, LClosure *cl)
 
UpValluaF_findupval (lua_State *L, StkId level)
 
void luaF_close (lua_State *L, StkId level)
 
ProtoluaF_newproto (lua_State *L)
 
void luaF_freeproto (lua_State *L, Proto *f)
 
const char * luaF_getlocalname (const Proto *f, int local_number, int pc)
 

Macro Definition Documentation

◆ lfunc_c

#define lfunc_c

Definition at line 7 of file lua-5.3.6/src/lfunc.c.

◆ LUA_CORE

#define LUA_CORE

Definition at line 8 of file lua-5.3.6/src/lfunc.c.

Function Documentation

◆ luaF_close()

void luaF_close ( lua_State * L,
StkId level )

Definition at line 83 of file lua-5.3.6/src/lfunc.c.

83 {
84 UpVal *uv;
85 while (L->openupval != NULL && (uv = L->openupval)->v >= level) {
87 L->openupval = uv->u.open.next; /* remove from 'open' list */
88 if (uv->refcount == 0) /* no references? */
89 luaM_free(L, uv); /* free upvalue */
90 else {
91 setobj(L, &uv->u.value, uv->v); /* move value to upvalue slot */
92 uv->v = &uv->u.value; /* now current value lives here */
93 luaC_upvalbarrier(L, uv);
94 }
95 }
96}
#define NULL
Definition gmacros.h:924
#define lua_assert(c)
#define luaM_free(L, b)
#define setobj(L, obj1, obj2)
#define upisopen(up)
#define luaC_upvalbarrier(L, uv)
struct UpVal::@68::@69 open
union UpVal::@48 u
struct UpVal * next
lu_mem refcount
GCObject * openupval

References lua_assert, luaC_upvalbarrier, luaM_free, UpVal::next, NULL, UpVal::open, lua_State::openupval, UpVal::refcount, setobj, UpVal::u, upisopen, UpVal::v, and UpVal::value.

◆ luaF_findupval()

UpVal * luaF_findupval ( lua_State * L,
StkId level )

Definition at line 57 of file lua-5.3.6/src/lfunc.c.

57 {
58 UpVal **pp = &L->openupval;
59 UpVal *p;
60 UpVal *uv;
62 while (*pp != NULL && (p = *pp)->v >= level) {
64 if (p->v == level) /* found a corresponding upvalue? */
65 return p; /* return it */
66 pp = &p->u.open.next;
67 }
68 /* not found: create a new upvalue */
69 uv = luaM_new(L, UpVal);
70 uv->refcount = 0;
71 uv->u.open.next = *pp; /* link it to list of open upvalues */
72 uv->u.open.touched = 1;
73 *pp = uv;
74 uv->v = level; /* current value lives in the stack */
75 if (!isintwups(L)) { /* thread not in list of threads with upvalues? */
76 L->twups = G(L)->twups; /* link it to the list */
77 G(L)->twups = L;
78 }
79 return uv;
80}
#define luaM_new(L, t)
#define G(L)
#define isintwups(L)
struct lua_State * twups

References G, isintwups, lua_assert, luaM_new, UpVal::next, NULL, UpVal::open, lua_State::openupval, UpVal::refcount, UpVal::touched, lua_State::twups, UpVal::u, upisopen, and UpVal::v.

◆ luaF_freeproto()

void luaF_freeproto ( lua_State * L,
Proto * f )

◆ luaF_getlocalname()

const char * luaF_getlocalname ( const Proto * f,
int local_number,
int pc )

Definition at line 140 of file lua-5.3.6/src/lfunc.c.

140 {
141 int i;
142 for (i = 0; i<f->sizelocvars && f->locvars[i].startpc <= pc; i++) {
143 if (pc < f->locvars[i].endpc) { /* is variable active? */
144 local_number--;
145 if (local_number == 0)
146 return getstr(f->locvars[i].varname);
147 }
148 }
149 return NULL; /* not found */
150}
#define getstr(ts)
TString * varname

References getstr, Proto::locvars, NULL, Proto::sizelocvars, LocVar::startpc, and LocVar::varname.

◆ luaF_initupvals()

void luaF_initupvals ( lua_State * L,
LClosure * cl )

Definition at line 45 of file lua-5.3.6/src/lfunc.c.

45 {
46 int i;
47 for (i = 0; i < cl->nupvalues; i++) {
48 UpVal *uv = luaM_new(L, UpVal);
49 uv->refcount = 1;
50 uv->v = &uv->u.value; /* make it closed */
51 setnilvalue(uv->v);
52 cl->upvals[i] = uv;
53 }
54}
#define setnilvalue(obj)

References luaM_new, UpVal::refcount, setnilvalue, UpVal::u, LClosure::upvals, UpVal::v, and UpVal::value.

Referenced by f_parser(), and f_parser().

◆ luaF_newCclosure()

CClosure * luaF_newCclosure ( lua_State * L,
int n )

Definition at line 25 of file lua-5.3.6/src/lfunc.c.

25 {
27 CClosure *c = gco2ccl(o);
28 c->nupvalues = cast_byte(n);
29 return c;
30}
#define sizeCclosure(n)
#define cast_byte(i)
GCObject * luaC_newobj(lua_State *L, int tt, size_t sz, GCObject **list, int offset)
#define LUA_TCCL
#define gco2ccl(o)

References cast_byte, gco2ccl, LUA_TCCL, luaC_newobj(), and sizeCclosure.

◆ luaF_newLclosure()

LClosure * luaF_newLclosure ( lua_State * L,
int n )

Definition at line 33 of file lua-5.3.6/src/lfunc.c.

33 {
35 LClosure *c = gco2lcl(o);
36 c->p = NULL;
37 c->nupvalues = cast_byte(n);
38 while (n--) c->upvals[n] = NULL;
39 return c;
40}
#define sizeLclosure(n)
#define LUA_TLCL
#define gco2lcl(o)
struct Proto * p

References cast_byte, gco2lcl, LUA_TLCL, luaC_newobj(), NULL, LClosure::p, sizeLclosure, and LClosure::upvals.

◆ luaF_newproto()

Proto * luaF_newproto ( lua_State * L)

Definition at line 99 of file lua-5.3.6/src/lfunc.c.

99 {
100 GCObject *o = luaC_newobj(L, LUA_TPROTO, sizeof(Proto));
101 Proto *f = gco2p(o);
102 f->k = NULL;
103 f->sizek = 0;
104 f->p = NULL;
105 f->sizep = 0;
106 f->code = NULL;
107 f->cache = NULL;
108 f->sizecode = 0;
109 f->lineinfo = NULL;
110 f->sizelineinfo = 0;
111 f->upvalues = NULL;
112 f->sizeupvalues = 0;
113 f->numparams = 0;
114 f->is_vararg = 0;
115 f->maxstacksize = 0;
116 f->locvars = NULL;
117 f->sizelocvars = 0;
118 f->linedefined = 0;
119 f->lastlinedefined = 0;
120 f->source = NULL;
121 return f;
122}
#define LUA_TPROTO
#define gco2p(o)
union Closure * cache
lu_byte maxstacksize
TString * source

References Proto::cache, Proto::code, gco2p, Proto::is_vararg, Proto::k, Proto::lastlinedefined, Proto::linedefined, Proto::lineinfo, Proto::locvars, LUA_TPROTO, luaC_newobj(), Proto::maxstacksize, NULL, Proto::numparams, Proto::p, Proto::sizecode, Proto::sizek, Proto::sizelineinfo, Proto::sizelocvars, Proto::sizep, Proto::sizeupvalues, Proto::source, and Proto::upvalues.