本文整理汇总了C++中el_var函数的典型用法代码示例。如果您正苦于以下问题:C++ el_var函数的具体用法?C++ el_var怎么用?C++ el_var使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了el_var函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: switch
void Module::genhelpers(bool iscomdat)
{
// If module assert
for (int i = 0; i < 3; i++)
{
Symbol *ma;
unsigned rt;
unsigned bc;
switch (i)
{
case 0: ma = marray; rt = RTLSYM_DARRAY; bc = BCexit; break;
case 1: ma = massert; rt = RTLSYM_DASSERT; bc = BCexit; break;
case 2: ma = munittest; rt = RTLSYM_DUNITTEST; bc = BCret; break;
default: assert(0);
}
if (ma)
{
elem *elinnum;
localgot = NULL;
// Call dassert(filename, line)
// Get sole parameter, linnum
{
Symbol *sp = symbol_calloc("linnum");
sp->Stype = type_fake(TYint);
sp->Stype->Tcount++;
sp->Sclass = (config.exe == EX_WIN64) ? SCshadowreg : SCfastpar;
FuncParamRegs fpr(TYjfunc);
fpr.alloc(sp->Stype, sp->Stype->Tty, &sp->Spreg, &sp->Spreg2);
sp->Sflags &= ~SFLspill;
sp->Sfl = (sp->Sclass == SCshadowreg) ? FLpara : FLfast;
cstate.CSpsymtab = &ma->Sfunc->Flocsym;
symbol_add(sp);
elinnum = el_var(sp);
}
elem *efilename = toEfilename(this);
elem *e = el_var(rtlsym[rt]);
e = el_bin(OPcall, TYvoid, e, el_param(elinnum, efilename));
block *b = block_calloc();
b->BC = bc;
b->Belem = e;
ma->Sfunc->Fstartline.Sfilename = arg;
ma->Sfunc->Fstartblock = b;
ma->Sclass = iscomdat ? SCcomdat : SCglobal;
ma->Sfl = 0;
ma->Sflags |= rtlsym[rt]->Sflags & SFLexit;
writefunc(ma);
}
}
}
开发者ID:abhishekkumar-,项目名称:dmd,代码行数:59,代码来源:glue.c
示例2: el_var
elem *setEthis(Loc loc, IRState *irs, elem *ey, AggregateDeclaration *ad)
{
elem *ethis;
FuncDeclaration *thisfd = irs->getFunc();
int offset = 0;
Dsymbol *cdp = ad->toParent2(); // class/func we're nested in
//printf("setEthis(ad = %s, cdp = %s, thisfd = %s)\n", ad->toChars(), cdp->toChars(), thisfd->toChars());
if (cdp == thisfd)
{ /* Class we're new'ing is a local class in this function:
* void thisfd() { class ad { } }
*/
if (irs->sclosure)
ethis = el_var(irs->sclosure);
else if (irs->sthis)
{
if (thisfd->hasNestedFrameRefs())
{
ethis = el_ptr(irs->sthis);
}
else
ethis = el_var(irs->sthis);
}
else
{
ethis = el_long(TYnptr, 0);
if (thisfd->hasNestedFrameRefs())
{
ethis->Eoper = OPframeptr;
}
}
}
else if (thisfd->vthis &&
(cdp == thisfd->toParent2() ||
(cdp->isClassDeclaration() &&
cdp->isClassDeclaration()->isBaseOf(thisfd->toParent2()->isClassDeclaration(), &offset)
)
)
)
{ /* Class we're new'ing is at the same level as thisfd
*/
assert(offset == 0); // BUG: should handle this case
ethis = el_var(irs->sthis);
}
else
{
ethis = getEthis(loc, irs, ad->toParent2());
ethis = el_una(OPaddr, TYnptr, ethis);
}
ey = el_bin(OPadd, TYnptr, ey, el_long(TYsize_t, ad->vthis->offset));
ey = el_una(OPind, TYnptr, ey);
ey = el_bin(OPeq, TYnptr, ey, ethis);
return ey;
}
开发者ID:dheld,项目名称:dmd,代码行数:56,代码来源:toir.c
示例3: type_alloc
symbol *callFuncsAndGates(Module *m, symbols *sctors, StaticDtorDeclarations *ectorgates,
const char *id)
{
symbol *sctor = NULL;
if ((sctors && sctors->dim) ||
(ectorgates && ectorgates->dim))
{
static type *t;
if (!t)
{
/* t will be the type of the functions generated:
* extern (C) void func();
*/
t = type_alloc(TYnfunc);
t->Tflags |= TFprototype | TFfixed;
t->Tmangle = mTYman_c;
t->Tnext = tsvoid;
tsvoid->Tcount++;
}
localgot = NULL;
sctor = m->toSymbolX(id, SCglobal, t, "FZv");
cstate.CSpsymtab = &sctor->Sfunc->Flocsym;
elem *ector = NULL;
if (ectorgates)
{
for (size_t i = 0; i < ectorgates->dim; i++)
{ StaticDtorDeclaration *f = (*ectorgates)[i];
Symbol *s = f->vgate->toSymbol();
elem *e = el_var(s);
e = el_bin(OPaddass, TYint, e, el_long(TYint, 1));
ector = el_combine(ector, e);
}
}
if (sctors)
{
for (size_t i = 0; i < sctors->dim; i++)
{ symbol *s = (*sctors)[i];
elem *e = el_una(OPucall, TYvoid, el_var(s));
ector = el_combine(ector, e);
}
}
block *b = block_calloc();
b->BC = BCret;
b->Belem = ector;
sctor->Sfunc->Fstartline.Sfilename = m->arg;
sctor->Sfunc->Fstartblock = b;
writefunc(sctor);
}
return sctor;
}
开发者ID:iteratif,项目名称:dmd,代码行数:56,代码来源:glue.c
示例4: objc_callfunc_setupMethodSelector
void objc_callfunc_setupMethodSelector(Type *tret, FuncDeclaration *fd, Type *t, elem *ehidden, elem **esel)
{
if (fd && fd->objc.selector && !*esel)
{
*esel = el_var(objc_getMethVarRef(fd->objc.selector->stringvalue, fd->objc.selector->stringlen));
}
}
开发者ID:Angeldude,项目名称:dmd,代码行数:7,代码来源:objc_glue.c
示例5: strlen
elem *Module::toEfilename()
{ elem *efilename;
if (!sfilename)
{
dt_t *dt = NULL;
char *id;
int len;
id = srcfile->toChars();
len = strlen(id);
dtdword(&dt, len);
dtabytes(&dt,TYnptr, 0, len + 1, id);
sfilename = symbol_generate(SCstatic,type_fake(TYdarray));
sfilename->Sdt = dt;
sfilename->Sfl = FLdata;
#if ELFOBJ
sfilename->Sseg = CDATA;
#endif
#if MACHOBJ
// Because of PIC and CDATA being in the _TEXT segment, cannot
// have pointers in CDATA
sfilename->Sseg = DATA;
#endif
outdata(sfilename);
}
efilename = el_var(sfilename);
return efilename;
}
开发者ID:Geod24,项目名称:dnet,代码行数:31,代码来源:glue.c
示例6: visit
void visit(WithStatement *s)
{
Symbol *sp;
elem *e;
elem *ei;
ExpInitializer *ie;
Blockx *blx = irs->blx;
//printf("WithStatement::toIR()\n");
if (s->exp->op == TOKimport || s->exp->op == TOKtype)
{
}
else
{
// Declare with handle
sp = toSymbol(s->wthis);
symbol_add(sp);
// Perform initialization of with handle
ie = s->wthis->_init->isExpInitializer();
assert(ie);
ei = toElemDtor(ie->exp, irs);
e = el_var(sp);
e = el_bin(OPeq,e->Ety, e, ei);
elem_setLoc(e, s->loc);
incUsage(irs, s->loc);
block_appendexp(blx->curblock,e);
}
// Execute with block
if (s->_body)
Statement_toIR(s->_body, irs);
}
开发者ID:Faianca,项目名称:dmd,代码行数:32,代码来源:s2ir.c
示例7: toSymbol
elem *Module::toEmodulename()
{
elem *efilename;
// Get filename
if (needModuleInfo())
{ Symbol *si;
/* Class ModuleInfo is defined in std.moduleinfo.
* The first member is the name of it, char name[],
* which will be at offset 8.
*/
si = toSymbol();
#if 1
// Use this instead so -fPIC will work
efilename = el_ptr(si);
efilename = el_bin(OPadd, TYnptr, efilename, el_long(TYuint, 8));
efilename = el_una(OPind, TYdarray, efilename);
#else
efilename = el_var(si);
efilename->Ety = TYdarray;
efilename->EV.sp.Voffset += 8;
#endif
}
else // generate our own filename
{
efilename = toEfilename();
}
return efilename;
}
开发者ID:Geod24,项目名称:dnet,代码行数:31,代码来源:glue.c
示例8: objc_callfunc_setupMethodCall
void objc_callfunc_setupMethodCall(elem **ec, elem *ehidden, elem *ethis, TypeFunction *tf)
{
// make objc-style "virtual" call using dispatch function
assert(ethis);
Type *tret = tf->next;
*ec = el_var(objc_getMsgSend(tret, ehidden != 0));
}
开发者ID:Angeldude,项目名称:dmd,代码行数:7,代码来源:objc_glue.c
示例9: el_long
/**************************************
* Given an expression e that is an array,
* determine and set the 'length' variable.
* Input:
* lengthVar Symbol of 'length' variable
* &e expression that is the array
* t1 Type of the array
* Output:
* e is rewritten to avoid side effects
* Returns:
* expression that initializes 'length'
*/
elem *resolveLengthVar(VarDeclaration *lengthVar, elem **pe, Type *t1)
{
//printf("resolveLengthVar()\n");
elem *einit = NULL;
if (lengthVar && !(lengthVar->storage_class & STCconst))
{
elem *elength;
Symbol *slength;
if (t1->ty == Tsarray)
{
TypeSArray *tsa = (TypeSArray *)t1;
dinteger_t length = tsa->dim->toInteger();
elength = el_long(TYsize_t, length);
goto L3;
}
else if (t1->ty == Tarray)
{
elength = *pe;
*pe = el_same(&elength);
elength = el_una(I64 ? OP128_64 : OP64_32, TYsize_t, elength);
L3:
slength = toSymbol(lengthVar);
//symbol_add(slength);
einit = el_bin(OPeq, TYsize_t, el_var(slength), elength);
}
}
return einit;
}
开发者ID:joakim-brannstrom,项目名称:dmd,代码行数:45,代码来源:toir.c
示例10: elem_debug
elem *exp2_copytotemp(elem *e)
{
//printf("exp2_copytotemp()\n");
elem_debug(e);
Symbol *stmp = symbol_genauto(e);
elem *eeq = el_bin(OPeq,e->Ety,el_var(stmp),e);
elem *er = el_bin(OPcomma,e->Ety,eeq,el_var(stmp));
if (tybasic(e->Ety) == TYstruct || tybasic(e->Ety) == TYarray)
{
eeq->Eoper = OPstreq;
eeq->ET = e->ET;
eeq->E1->ET = e->ET;
er->ET = e->ET;
er->E2->ET = e->ET;
}
return er;
}
开发者ID:shoo,项目名称:dmd,代码行数:17,代码来源:msc.c
示例11: symbol_debug
elem *nteh_setScopeTableIndex(Blockx *blx, int scope_index)
{
elem *e;
Symbol *s;
s = blx->context;
symbol_debug(s);
e = el_var(s);
e->EV.sp.Voffset = nteh_offset_sindex();
return el_bin(OPeq, TYint, e, el_long(TYint, scope_index));
}
开发者ID:spott,项目名称:dmd,代码行数:11,代码来源:nteh.c
示例12: incUsage
void ThrowStatement::toIR(IRState *irs)
{
// throw(exp)
Blockx *blx = irs->blx;
incUsage(irs, loc);
elem *e = exp->toElemDtor(irs);
e = el_bin(OPcall, TYvoid, el_var(rtlsym[RTLSYM_THROWC]),e);
block_appendexp(blx->curblock, e);
}
开发者ID:Rayerd,项目名称:dmd,代码行数:11,代码来源:s2ir.c
示例13: el_ptr
void SwitchErrorStatement::toIR(IRState *irs)
{
Blockx *blx = irs->blx;
//printf("SwitchErrorStatement::toIR()\n");
elem *efilename = el_ptr(blx->module->toSymbol());
elem *elinnum = el_long(TYint, loc.linnum);
elem *e = el_bin(OPcall, TYvoid, el_var(rtlsym[RTLSYM_DSWITCHERR]), el_param(elinnum, efilename));
block_appendexp(blx->curblock, e);
}
开发者ID:Rayerd,项目名称:dmd,代码行数:11,代码来源:s2ir.c
示例14: type_debug
elem *type_vla_fix(type **pt)
{
type *t;
elem *e = NULL;
for (t = *pt; t; t = t->Tnext)
{
type_debug(t);
if (tybasic(t->Tty) == TYarray && t->Tflags & TFvla && t->Tel)
{ symbol *s;
elem *ec;
s = symbol_genauto(tsuns);
ec = el_var(s);
ec = el_bint(OPeq, tsuns, ec, t->Tel);
e = el_combine(e, ec);
t->Tel = el_var(s);
}
}
return e;
}
开发者ID:michelf,项目名称:dmd,代码行数:21,代码来源:type.c
示例15: mystate
void IfStatement::toIR(IRState *irs)
{
elem *e;
Blockx *blx = irs->blx;
//printf("IfStatement::toIR('%s')\n", condition->toChars());
IRState mystate(irs, this);
// bexit is the block that gets control after this IfStatement is done
block *bexit = mystate.breakBlock ? mystate.breakBlock : block_calloc();
incUsage(irs, loc);
#if 0
if (match)
{ /* Generate:
* if (match = RTLSYM_IFMATCH(string, pattern)) ...
*/
assert(condition->op == TOKmatch);
e = matchexp_toelem((MatchExp *)condition, &mystate, RTLSYM_IFMATCH);
Symbol *s = match->toSymbol();
symbol_add(s);
e = el_bin(OPeq, TYnptr, el_var(s), e);
}
else
#endif
e = condition->toElemDtor(&mystate);
block_appendexp(blx->curblock, e);
block *bcond = blx->curblock;
block_next(blx, BCiftrue, NULL);
list_append(&bcond->Bsucc, blx->curblock);
if (ifbody)
ifbody->toIR(&mystate);
list_append(&blx->curblock->Bsucc, bexit);
if (elsebody)
{
block_next(blx, BCgoto, NULL);
list_append(&bcond->Bsucc, blx->curblock);
elsebody->toIR(&mystate);
list_append(&blx->curblock->Bsucc, bexit);
}
else
list_append(&bcond->Bsucc, bexit);
block_next(blx, BCgoto, bexit);
}
开发者ID:Rayerd,项目名称:dmd,代码行数:49,代码来源:s2ir.c
示例16: strlen
elem *toEfilename(Module *m)
{
elem *efilename;
if (!m->sfilename)
{
dt_t *dt = NULL;
char *id = m->srcfile->toChars();
size_t len = strlen(id);
dtsize_t(&dt, len);
dtabytes(&dt,TYnptr, 0, len + 1, id);
m->sfilename = symbol_generate(SCstatic,type_fake(TYdarray));
m->sfilename->Sdt = dt;
m->sfilename->Sfl = FLdata;
out_readonly(m->sfilename);
outdata(m->sfilename);
}
efilename = (config.exe == EX_WIN64) ? el_ptr(m->sfilename) : el_var(m->sfilename);
return efilename;
}
开发者ID:abhishekkumar-,项目名称:dmd,代码行数:21,代码来源:glue.c
示例17: getEthis
/*************************
* Initialize the hidden aggregate member, vthis, with
* the context pointer.
* Returns:
* *(ey + ad.vthis.offset) = this;
*/
elem *setEthis(Loc loc, IRState *irs, elem *ey, AggregateDeclaration *ad)
{
elem *ethis;
FuncDeclaration *thisfd = irs->getFunc();
int offset = 0;
Dsymbol *adp = ad->toParent2(); // class/func we're nested in
//printf("[%s] setEthis(ad = %s, adp = %s, thisfd = %s)\n", loc.toChars(), ad->toChars(), adp->toChars(), thisfd->toChars());
if (adp == thisfd)
{
ethis = getEthis(loc, irs, ad);
}
else if (thisfd->vthis &&
(adp == thisfd->toParent2() ||
(adp->isClassDeclaration() &&
adp->isClassDeclaration()->isBaseOf(thisfd->toParent2()->isClassDeclaration(), &offset)
)
)
)
{
/* Class we're new'ing is at the same level as thisfd
*/
assert(offset == 0); // BUG: should handle this case
ethis = el_var(irs->sthis);
}
else
{
ethis = getEthis(loc, irs, adp);
FuncDeclaration *fdp = adp->isFuncDeclaration();
if (fdp && fdp->hasNestedFrameRefs())
ethis = el_una(OPaddr, TYnptr, ethis);
}
ey = el_bin(OPadd, TYnptr, ey, el_long(TYsize_t, ad->vthis->offset));
ey = el_una(OPind, TYnptr, ey);
ey = el_bin(OPeq, TYnptr, ey, ethis);
return ey;
}
开发者ID:joakim-brannstrom,项目名称:dmd,代码行数:45,代码来源:toir.c
示例18: eecontext_parse
void eecontext_parse()
{
if (eecontext.EEimminent)
{ type *t;
unsigned marksi;
symbol *s;
//printf("imminent\n");
marksi = globsym.top;
eecontext.EEin++;
s = symbol_genauto(tspvoid);
eecontext.EEelem = func_expr_dtor(TRUE);
t = eecontext.EEelem->ET;
if (tybasic(t->Tty) != TYvoid)
{ unsigned op;
elem *e;
e = el_unat(OPind,t,el_var(s));
op = tyaggregate(t->Tty) ? OPstreq : OPeq;
eecontext.EEelem = el_bint(op,t,e,eecontext.EEelem);
}
eecontext.EEin--;
eecontext.EEimminent = 0;
eecontext.EEfunc = funcsym_p;
eecontext_convs(marksi);
// Generate the typedef
if (eecontext.EEtypedef && config.fulltypes)
{ symbol *s;
s = symbol_name(eecontext.EEtypedef,SCtypedef,t);
cv_outsym(s);
symbol_free(s);
}
}
}
开发者ID:DinrusGroup,项目名称:DRC,代码行数:37,代码来源:ee.c
示例19: strlen
elem *Module::toEfilename()
{ elem *efilename;
if (!sfilename)
{
dt_t *dt = NULL;
char *id;
int len;
id = srcfile->toChars();
len = strlen(id);
dtsize_t(&dt, len);
dtabytes(&dt,TYnptr, 0, len + 1, id);
sfilename = symbol_generate(SCstatic,type_fake(TYdarray));
sfilename->Sdt = dt;
sfilename->Sfl = FLdata;
out_readonly(sfilename);
outdata(sfilename);
}
efilename = el_var(sfilename);
return efilename;
}
开发者ID:greeeen,项目名称:dmd,代码行数:24,代码来源:glue.c
示例20: obj_append
//.........这里部分代码省略.........
}
if (func->fbody)
{ block *b;
Blockx bx;
Statement *sbody;
localgot = NULL;
sbody = func->fbody;
memset(&bx,0,sizeof(bx));
bx.startblock = block_calloc();
bx.curblock = bx.startblock;
bx.funcsym = s;
bx.scope_index = -1;
bx.classdec = cd;
bx.member = func;
bx.module = getModule();
irs.blx = &bx;
buildClosure(&irs);
#if 0
if (func->isSynchronized())
{
if (cd)
{ elem *esync;
if (func->isStatic())
{ // monitor is in ClassInfo
esync = el_ptr(cd->toSymbol());
}
else
{ // 'this' is the monitor
esync = el_var(sthis);
}
if (func->isStatic() || sbody->usesEH() ||
!(config.flags2 & CFG2seh))
{ // BUG: what if frequire or fensure uses EH?
sbody = new SynchronizedStatement(func->loc, esync, sbody);
}
else
{
#if TARGET_WINDOS
if (config.flags2 & CFG2seh)
{
/* The "jmonitor" uses an optimized exception handling frame
* which is a little shorter than the more general EH frame.
* It isn't strictly necessary.
*/
s->Sfunc->Fflags3 |= Fjmonitor;
}
#endif
el_free(esync);
}
}
else
{
error("synchronized function %s must be a member of a class", func->toChars());
}
}
#elif TARGET_WINDOS
if (func->isSynchronized() && cd && config.flags2 & CFG2seh &&
!func->isStatic() && !sbody->usesEH())
{
开发者ID:Geod24,项目名称:dnet,代码行数:67,代码来源:glue.c
注:本文中的el_var函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论