本文整理汇总了C++中Protect函数的典型用法代码示例。如果您正苦于以下问题:C++ Protect函数的具体用法?C++ Protect怎么用?C++ Protect使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了Protect函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ReadSegment
// static
already_AddRefed<Shmem::SharedMemory>
Shmem::OpenExisting(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead,
const IPC::Message& aDescriptor,
id_t* aId,
bool aProtect)
{
size_t size;
size_t pageSize = SharedMemory::SystemPageSize();
// |2*pageSize| is for the front and back sentinels
RefPtr<SharedMemory> segment = ReadSegment(aDescriptor, aId, &size, 2*pageSize);
if (!segment) {
return nullptr;
}
Header* header = GetHeader(segment);
if (size != header->mSize) {
// Deallocation should zero out the header, so check for that.
if (header->mSize || header->mUnsafe || header->mMagic[0] ||
memcmp(header->mMagic, &header->mMagic[1], sizeof(header->mMagic)-1)) {
NS_ERROR("Wrong size for this Shmem!");
} else {
NS_WARNING("Shmem was deallocated");
}
return nullptr;
}
// The caller of this function may not know whether the segment is
// unsafe or not
if (!header->mUnsafe && aProtect)
Protect(segment);
return segment.forget();
}
开发者ID:luke-chang,项目名称:gecko-1,代码行数:35,代码来源:Shmem.cpp
示例2: Protect
/*----------------------------------------------*/
PLH::MemoryProtect::MemoryProtect(void* Address, size_t Size, DWORD ProtectionFlags)
{
m_Address = Address;
m_Size = Size;
m_Flags = ProtectionFlags;
Protect(m_Address, m_Size, m_Flags);
}
开发者ID:johndpope,项目名称:PolyHook,代码行数:8,代码来源:PolyHook.cpp
示例3: ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser
MonoBoolean
ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser (const gunichar2 *path, MonoError *error)
{
gboolean ret = FALSE;
/* read/write to user, no access to everyone else */
ret = Protect (path, (S_IRUSR | S_IWUSR), S_IXUSR);
return (MonoBoolean)ret;
}
开发者ID:LogosBible,项目名称:mono,代码行数:9,代码来源:mono-security.c
示例4: ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine
MonoBoolean
ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine (const gunichar2 *path, MonoError *error)
{
gboolean ret = FALSE;
/* read/write to owner, read to everyone else */
ret = Protect (path, (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), (S_IXUSR | S_IXGRP | S_IXOTH));
return (MonoBoolean)ret;
}
开发者ID:LogosBible,项目名称:mono,代码行数:9,代码来源:mono-security.c
示例5: NS_RUNTIMEABORT
// static
Shmem::SharedMemory*
Shmem::OpenExisting(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead,
const IPC::Message& aDescriptor,
id_t* aId,
bool aProtect)
{
if (SHMEM_CREATED_MESSAGE_TYPE != aDescriptor.type())
NS_RUNTIMEABORT("expected 'shmem created' message");
void* iter = 0;
SharedMemory::SharedMemoryType type;
size_t size;
if (!ShmemCreated::ReadInfo(&aDescriptor, &iter, aId, &size, &type))
return 0;
SharedMemory* segment = 0;
size_t pageSize = SharedMemory::SystemPageSize();
// |2*pageSize| is for the front and back sentinels
size_t segmentSize = SharedMemory::PageAlignedSize(size + 2*pageSize);
if (SharedMemory::TYPE_BASIC == type) {
SharedMemoryBasic::Handle handle;
if (!ShmemCreated::ReadHandle(&aDescriptor, &iter, &handle))
return 0;
if (!SharedMemoryBasic::IsHandleValid(handle))
NS_RUNTIMEABORT("trying to open invalid handle");
segment = CreateSegment(segmentSize, handle);
}
#ifdef MOZ_HAVE_SHAREDMEMORYSYSV
else if (SharedMemory::TYPE_SYSV == type) {
SharedMemorySysV::Handle handle;
if (!ShmemCreated::ReadHandle(&aDescriptor, &iter, &handle))
return 0;
if (!SharedMemorySysV::IsHandleValid(handle))
NS_RUNTIMEABORT("trying to open invalid handle");
segment = CreateSegment(segmentSize, handle);
}
#endif
else {
NS_RUNTIMEABORT("unknown shmem type");
}
if (!segment)
return 0;
// The caller of this function may not know whether the segment is
// unsafe or not
Header* header = GetHeader(segment);
if (!header->mUnsafe && aProtect)
Protect(segment);
return segment;
}
开发者ID:LittleForker,项目名称:mozilla-central,代码行数:56,代码来源:Shmem.cpp
示例6: sqrt
quad_float sqrt(const quad_float& y) {
if (y.hi < 0.0)
ArithmeticError("quad_float: square root of negative number");
if (y.hi == 0.0) return quad_float(0.0,0.0);
double c;
c = sqrt(y.hi);
ForceToMem(&c); // This is fairly paranoid, but it doesn't cost too much.
START_FIX
DOUBLE p,q,hx,tx,u,uu,cc;
DOUBLE t1;
p = Protect(NTL_QUAD_FLOAT_SPLIT*c);
hx = (c-p);
hx = hx+p;
tx = c-hx;
p = Protect(hx*hx);
q = Protect(hx*tx);
q = q+q;
u = p+q;
uu = p-u;
uu = uu+q;
t1 = Protect(tx*tx);
uu = uu+t1;
cc = y.hi-u;
cc = cc-uu;
cc = cc+y.lo;
t1 = c+c;
cc = cc/t1;
hx = c+cc;
tx = c-hx;
tx = tx+cc;
END_FIX
return quad_float(hx, tx);
}
开发者ID:tell,项目名称:ntl-unix,代码行数:41,代码来源:quad_float.cpp
示例7: ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine
MonoBoolean
ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectMachine (MonoString *path)
{
gboolean ret = FALSE;
/* read/write to owner, read to everyone else */
#ifdef HOST_WIN32
ret = ProtectMachine (mono_string_chars (path));
#else
ret = Protect (path, (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH), (S_IXUSR | S_IXGRP | S_IXOTH));
#endif
return ret;
}
开发者ID:ItsVeryWindy,项目名称:mono,代码行数:13,代码来源:mono-security.c
示例8: ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser
MonoBoolean
ves_icall_Mono_Security_Cryptography_KeyPairPersistence_ProtectUser (MonoString *path)
{
gboolean ret = FALSE;
/* read/write to user, no access to everyone else */
#ifdef HOST_WIN32
ret = ProtectUser (mono_string_chars (path));
#else
ret = Protect (path, (S_IRUSR | S_IWUSR), S_IXUSR);
#endif
return ret;
}
开发者ID:ItsVeryWindy,项目名称:mono,代码行数:13,代码来源:mono-security.c
示例9: NS_ASSERTION
// static
already_AddRefed<Shmem::SharedMemory>
Shmem::Alloc(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead,
size_t aNBytes,
SharedMemoryType aType,
bool aUnsafe,
bool aProtect)
{
NS_ASSERTION(aNBytes <= UINT32_MAX, "Will truncate shmem segment size!");
MOZ_ASSERT(!aProtect || !aUnsafe, "protect => !unsafe");
size_t pageSize = SharedMemory::SystemPageSize();
nsRefPtr<SharedMemory> segment;
// |2*pageSize| is for the front and back sentinel
size_t segmentSize = SharedMemory::PageAlignedSize(aNBytes + 2*pageSize);
if (aType == SharedMemory::TYPE_BASIC)
segment = CreateSegment(segmentSize, SharedMemoryBasic::NULLHandle());
#ifdef MOZ_HAVE_SHAREDMEMORYSYSV
else if (aType == SharedMemory::TYPE_SYSV)
segment = CreateSegment(segmentSize, SharedMemorySysV::NULLHandle());
#endif
else {
NS_ERROR("unknown shmem type");
return nullptr;
}
if (!segment)
return nullptr;
Header* header;
char *frontSentinel;
char *data;
char *backSentinel;
GetSections(segment, &header, &frontSentinel, &data, &backSentinel);
// initialize the segment with Shmem-internal information
// NB: this can't be a static assert because technically pageSize
// isn't known at compile time, event though in practice it's always
// going to be 4KiB
MOZ_ASSERT(sizeof(Header) <= pageSize,
"Shmem::Header has gotten too big");
memcpy(header->mMagic, sMagic, sizeof(sMagic));
header->mSize = static_cast<uint32_t>(aNBytes);
header->mUnsafe = aUnsafe;
if (aProtect)
Protect(segment);
return segment.forget();
}
开发者ID:Acidburn0zzz,项目名称:tor-browser,代码行数:52,代码来源:Shmem.cpp
示例10: VALIDATE_NOT_NULL
ECode CVpnService::Protect(
/* [in] */ IDatagramSocket* socket,
/* [out] */ Boolean* reault)
{
VALIDATE_NOT_NULL(reault);
AutoPtr<IFileDescriptor> descriptor;
socket->GetFileDescriptor((IFileDescriptor**)&descriptor);
Int32 fd;
descriptor->GetDescriptor(&fd);
return Protect(fd, result);
}
开发者ID:TheTypoMaster,项目名称:ElastosRDK5_0,代码行数:14,代码来源:CVpnService.cpp
示例11: Protect
quad_float& operator /=(quad_float& x, const quad_float& y ) {
START_FIX
DOUBLE hc, tc, hy, ty, C, c, U, u;
DOUBLE t1;
C = x.hi/y.hi;
c = Protect(NTL_QUAD_FLOAT_SPLIT*C);
hc = c-C;
u = Protect(NTL_QUAD_FLOAT_SPLIT*y.hi);
hc = c-hc;
tc = C-hc;
hy = u-y.hi;
U = Protect(C * y.hi);
hy = u-hy;
ty = y.hi-hy;
// u = (((hc*hy-U)+hc*ty)+tc*hy)+tc*ty;
u = Protect(hc*hy);
u = u-U;
t1 = Protect(hc*ty);
u = u+t1;
t1 = Protect(tc*hy);
u = u+t1;
t1 = Protect(tc*ty);
u = u+t1;
// c = ((((x.hi-U)-u)+x.lo)-C*y.lo)/y.hi;
c = x.hi-U;
c = c-u;
c = c+x.lo;
t1 = Protect(C*y.lo);
c = c - t1;
c = c/y.hi;
hy = C+c;
ty = C-hy;
ty = ty+c;
x.hi = hy;
x.lo = ty;
END_FIX
return x;
}
开发者ID:tell,项目名称:ntl-unix,代码行数:45,代码来源:quad_float.cpp
示例12: vm_mini_vm
void vm_mini_vm(lua_State *L, LClosure *cl, int count, int pseudo_ops_offset) {
const Instruction *pc;
StkId base;
TValue *k;
k = cl->p->k;
pc = cl->p->code + pseudo_ops_offset;
base = L->base;
/* process next 'count' ops */
for (; count > 0; count--) {
const Instruction i = *pc++;
StkId ra = RA(i);
lua_assert(base == L->base && L->base == L->ci->base);
lua_assert(base <= L->top && L->top <= L->stack + L->stacksize);
lua_assert(L->top == L->ci->top || luaG_checkopenop(i));
switch (GET_OPCODE(i)) {
case OP_MOVE: {
setobjs2s(L, ra, RB(i));
continue;
}
case OP_LOADK: {
setobj2s(L, ra, KBx(i));
continue;
}
case OP_GETUPVAL: {
int b = GETARG_B(i);
setobj2s(L, ra, cl->upvals[b]->v);
continue;
}
case OP_SETUPVAL: {
UpVal *uv = cl->upvals[GETARG_B(i)];
setobj(L, uv->v, ra);
luaC_barrier(L, uv, ra);
continue;
}
case OP_SETTABLE: {
Protect(luaV_settable(L, ra, RKB(i), RKC(i)));
continue;
}
default: {
luaG_runerror(L, "Bad opcode: opcode=%d", GET_OPCODE(i));
continue;
}
}
}
}
开发者ID:GranPC,项目名称:llvm-lua,代码行数:46,代码来源:lua_vm_ops_static.c
示例13: AssertInvariants
void
Shmem::RevokeRights(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead)
{
AssertInvariants();
size_t pageSize = SharedMemory::SystemPageSize();
Header* header = GetHeader(mSegment);
// Open this up for reading temporarily
mSegment->Protect(reinterpret_cast<char*>(header), pageSize, RightsRead);
if (!header->mUnsafe) {
Protect(mSegment);
} else {
mSegment->Protect(reinterpret_cast<char*>(header), pageSize, RightsNone);
}
}
开发者ID:LittleForker,项目名称:mozilla-central,代码行数:17,代码来源:Shmem.cpp
示例14: luaV_execute
void luaV_execute (lua_State *L) {
CallInfo *ci = L->ci;
LClosure *cl;
TValue *k;
StkId base;
newframe: /* reentry point when frame changes (call/return) */
lua_assert(ci == L->ci);
cl = clLvalue(ci->func);
k = cl->p->k;
base = ci->u.l.base;
//printf( "s:%p\n", ci->u.l.savedpc );
/* main loop of interpreter */
for (;;) {
Instruction i = *(ci->u.l.savedpc++);
StkId ra;
if ((L->hookmask & (LUA_MASKLINE | LUA_MASKCOUNT)) &&
(--L->hookcount == 0 || L->hookmask & LUA_MASKLINE)) {
Protect(traceexec(L));
}
/* warning!! several calls may realloc the stack and invalidate `ra' */
ra = RA(i);
lua_assert(base == ci->u.l.base);
lua_assert(base <= L->top && L->top < L->stack + L->stacksize);
// 命令出力
//printInst( ci->u.l.savedpc - 1 );
vmdispatch (GET_OPCODE(i)) {
vmcase(OP_MOVE,
setobjs2s(L, ra, RB(i));
)
vmcase(OP_LOADK,
TValue *rb = k + GETARG_Bx(i);
setobj2s(L, ra, rb);
)
vmcase(OP_LOADKX,
TValue *rb;
lua_assert(GET_OPCODE(*ci->u.l.savedpc) == OP_EXTRAARG);
rb = k + GETARG_Ax(*ci->u.l.savedpc++);
setobj2s(L, ra, rb);
)
开发者ID:lriki,项目名称:Volkoff,代码行数:45,代码来源:lvm.c
示例15: vm_OP_TFORLOOP
int vm_OP_TFORLOOP(lua_State *L, int a, int c) {
TValue *base = L->base;
TValue *ra = base + a;
StkId cb = ra + 3; /* call base */
setobjs2s(L, cb+2, ra+2);
setobjs2s(L, cb+1, ra+1);
setobjs2s(L, cb, ra);
L->top = cb+3; /* func. + 2 args (state and index) */
Protect(luaD_call(L, cb, c));
L->top = L->ci->top;
cb = base + a + 3; /* previous call may change the stack */
if (!ttisnil(cb)) { /* continue loop? */
setobjs2s(L, cb-1, cb); /* save control variable */
dojump(GETARG_sBx(*L->savedpc));
return 1;
}
return 0;
}
开发者ID:GranPC,项目名称:llvm-lua,代码行数:18,代码来源:lua_vm_ops_static.c
示例16: vm_OP_VARARG
void vm_OP_VARARG(lua_State *L, LClosure *cl, int a, int b) {
TValue *base = L->base;
TValue *ra = base + a;
int j;
CallInfo *ci = L->ci;
int n = cast_int(ci->base - ci->func) - cl->p->numparams - 1;
b -= 1;
if (b == LUA_MULTRET) {
Protect(luaD_checkstack(L, n));
ra = base + a; /* previous call may change the stack */
b = n;
L->top = ra + n;
}
for (j = 0; j < b; j++) {
if (j < n) {
setobjs2s(L, ra + j, ci->base - n + j);
}
else {
setnilvalue(ra + j);
}
}
}
开发者ID:GranPC,项目名称:llvm-lua,代码行数:22,代码来源:lua_vm_ops_static.c
示例17: PageAlignedSize
// static
Shmem::SharedMemory*
Shmem::Alloc(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead,
size_t aNBytes,
SharedMemoryType aType,
bool aProtect)
{
size_t pageSize = SharedMemory::SystemPageSize();
SharedMemory* segment = nsnull;
// |2*pageSize| is for the front and back sentinel
size_t segmentSize = PageAlignedSize(aNBytes + 2*pageSize);
if (aType == SharedMemory::TYPE_BASIC)
segment = CreateSegment(segmentSize, SharedMemoryBasic::NULLHandle());
#ifdef MOZ_HAVE_SHAREDMEMORYSYSV
else if (aType == SharedMemory::TYPE_SYSV)
segment = CreateSegment(segmentSize, SharedMemorySysV::NULLHandle());
#endif
else
NS_RUNTIMEABORT("unknown shmem type");
if (!segment)
return 0;
char *frontSentinel;
char *data;
char *backSentinel;
GetSections(segment, &frontSentinel, &data, &backSentinel);
// initialize the segment with Shmem-internal information
Header* header = reinterpret_cast<Header*>(frontSentinel);
memcpy(header->mMagic, sMagic, sizeof(sMagic));
header->mSize = aNBytes;
if (aProtect)
Protect(segment);
return segment;
}
开发者ID:lofter2011,项目名称:Icefox,代码行数:39,代码来源:Shmem.cpp
示例18: AssertInvariants
void
Shmem::RevokeRights(IHadBetterBeIPDLCodeCallingThis_OtherwiseIAmADoodyhead)
{
AssertInvariants();
Protect(mSegment);
}
开发者ID:lofter2011,项目名称:Icefox,代码行数:6,代码来源:Shmem.cpp
示例19: AI_Control
void AI_Control( WorldStuff *world_stuff, int vehicle_number )
{
Player *player;
team_type team, enemy_team;
short frames_till_traitor_deactivate;
short frames_till_unscramble;
short scramble_life;
short traitor_life;
/* Alias pointer to this player */
player = world_stuff->player_array;
frames_till_traitor_deactivate = player[vehicle_number].tank.frames_till_traitor_deactivate;
frames_till_unscramble = player[vehicle_number].tank.frames_till_unscramble;
scramble_life = player[vehicle_number].tank.scramble_life;
traitor_life = player[vehicle_number].tank.traitor_life;
if( player[vehicle_number].tank.team == RED_TEAM )
{
team = RED_TEAM;
enemy_team = BLUE_TEAM;
}
else
{
team = BLUE_TEAM;
enemy_team = RED_TEAM;
}
if( player[vehicle_number].character.skill_level > 2 && player[vehicle_number].controller != USER_CONTROL )
{
if( player[vehicle_number].tank.traitor_active )
if( frames_till_traitor_deactivate < (traitor_life - 40) )
player[vehicle_number].tank.traitor_active = FALSE;
/*
if( player[vehicle_number].tank.controls_scrambled )
if( frames_till_unscramble < (scramble_life - 40) )
player[vehicle_number].tank.controls_scrambled = FALSE;
*/
}
if( player[vehicle_number].tank.traitor_active )
{
player[vehicle_number].tank.team = enemy_team;
player[vehicle_number].team = enemy_team;
}
/* Clear this players input table */
Clear_Input_Table( player[vehicle_number].table );
/* Fill up this players events data structure */
Update_Player_Events( world_stuff, vehicle_number );
/* Figure out what state we are in now */
world_stuff->player_array[vehicle_number].character.state = Find_State( world_stuff, vehicle_number );
if( player[vehicle_number].tank.traitor_active )
{
world_stuff->player_array[vehicle_number].character.state = ATTACK;
}
/* Based on the state of the ai call appropriate control function */
switch( world_stuff->player_array[vehicle_number].character.state )
{
case ATTACK:
Attack( world_stuff, vehicle_number );
break;
case GET_ENERGY:
Get_Energy( world_stuff, vehicle_number );
break;
case PANIC:
Panic( world_stuff, vehicle_number );
break;
case BEZERK:
Bezerk( world_stuff, vehicle_number );
break;
case HIDE:
Hide( world_stuff, vehicle_number );
break;
case GROUPUP:
Group( world_stuff, vehicle_number );
break;
case GET_PYLONS:
Get_Pylons( world_stuff, vehicle_number );
break;
case PROTECT:
Protect( world_stuff, vehicle_number );
break;
case KILL_RADAR_BASE:
Kill_Radar_Base( world_stuff, vehicle_number );
break;
case PROTECT_RADAR_BASE:
//.........这里部分代码省略.........
开发者ID:hyperlogic,项目名称:cylindrix,代码行数:101,代码来源:ai.cpp
示例20: Arith
static void Arith (lua_State *L, StkId ra, const TValue *rb,
const TValue *rc, TMS op) {
TValue tempb, tempc;
const TValue *b, *c;
#if LUA_REFCOUNT
luarc_newvalue(&tempb);
luarc_newvalue(&tempc);
if ((b = luaV_tonumber(L, rb, &tempb)) != NULL &&
(c = luaV_tonumber(L, rc, &tempc)) != NULL) {
#else
if ((b = luaV_tonumber(rb, &tempb)) != NULL &&
(c = luaV_tonumber(rc, &tempc)) != NULL) {
#endif /* LUA_REFCOUNT */
lua_Number nb = nvalue(b), nc = nvalue(c);
#if LUA_REFCOUNT
luarc_cleanvalue(&tempb);
luarc_cleanvalue(&tempc);
#endif /* LUA_REFCOUNT */
switch (op) {
case TM_ADD: setnvalue(ra, luai_numadd(nb, nc)); break;
case TM_SUB: setnvalue(ra, luai_numsub(nb, nc)); break;
case TM_MUL: setnvalue(ra, luai_nummul(nb, nc)); break;
case TM_DIV: setnvalue(ra, luai_numdiv(nb, nc)); break;
case TM_MOD: setnvalue(ra, luai_nummod(nb, nc)); break;
case TM_POW: setnvalue(ra, luai_numpow(nb, nc)); break;
case TM_UNM: setnvalue(ra, luai_numunm(nb)); break;
default: lua_assert(0); break;
}
}
#if LUA_REFCOUNT
else if (!call_binTM(L, rb, rc, ra, op)) {
luarc_cleanvalue(&tempb);
luarc_cleanvalue(&tempc);
luaG_aritherror(L, rb, rc);
}
#else
else if (!call_binTM(L, rb, rc, ra, op))
luaG_aritherror(L, rb, rc);
#endif /* LUA_REFCOUNT */
}
/*
** some macros for common tasks in `luaV_execute'
*/
#define runtime_check(L, c) { if (!(c)) break; }
#define RA(i) (base+GETARG_A(i))
/* to be used after possible stack reallocation */
#define RB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgR, base+GETARG_B(i))
#define RC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgR, base+GETARG_C(i))
#define RKB(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, \
ISK(GETARG_B(i)) ? k+INDEXK(GETARG_B(i)) : base+GETARG_B(i))
#define RKC(i) check_exp(getCMode(GET_OPCODE(i)) == OpArgK, \
ISK(GETARG_C(i)) ? k+INDEXK(GETARG_C(i)) : base+GETARG_C(i))
#define KBx(i) check_exp(getBMode(GET_OPCODE(i)) == OpArgK, k+GETARG_Bx(i))
#define dojump(L,pc,i) {(pc) += (i); luai_threadyield(L);}
#define Protect(x) { L->savedpc = pc; {x;}; base = L->base; }
#define arith_op(op,tm) { \
TValue *rb = RKB(i); \
TValue *rc = RKC(i); \
if (ttisnumber(rb) && ttisnumber(rc)) { \
lua_Number nb = nvalue(rb), nc = nvalue(rc); \
setnvalue(ra, op(nb, nc)); \
} \
else \
Protect(Arith(L, ra, rb, rc, tm)); \
}
#if LUA_BITFIELD_OPS
#define bit_op(op) { \
TValue *rb = RKB(i); \
TValue *rc = RKC(i); \
if (ttisnumber(rb) && ttisnumber(rc)) { \
unsigned int nb = (unsigned int)nvalue(rb), nc = (unsigned int)nvalue(rc); \
setnvalue(ra, nb op nc); \
} \
else \
luaG_aritherror(L, rb, rc); \
}
#endif /* LUA_BITFIELD_OPS */
void luaV_execute (lua_State *L, int nexeccalls) {
LClosure *cl;
StkId base;
TValue *k;
const Instruction *pc;
reentry: /* entry point */
//.........这里部分代码省略.........
开发者ID:zapline,项目名称:zlib,代码行数:101,代码来源:lvm.c
注:本文中的Protect函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论