本文整理汇总了C++中primaryexp函数的典型用法代码示例。如果您正苦于以下问题:C++ primaryexp函数的具体用法?C++ primaryexp怎么用?C++ primaryexp使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了primaryexp函数的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: assignment
static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
expdesc e;
check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED,
"syntax error");
if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */
struct LHS_assign nv;
nv.prev = lh;
primaryexp(ls, &nv.v);
if (nv.v.k == VLOCAL)
check_conflict(ls, lh, &nv.v);
assignment(ls, &nv, nvars+1);
}
else { /* assignment -> `=' explist1 */
int nexps;
checknext(ls, '=');
nexps = explist1(ls, &e);
if (nexps != nvars) {
adjust_assign(ls, nvars, nexps, &e);
if (nexps > nvars)
ls->fs->freereg -= nexps - nvars; /* remove extra values */
}
else {
luaK_setoneret(ls->fs, &e); /* close last expression */
luaK_storevar(ls->fs, &lh->v, &e);
return; /* avoid default */
}
}
init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */
luaK_storevar(ls->fs, &lh->v, &e);
}
示例2: simpleexp
static void simpleexp(LexState* ls, expdesc* v)
{
/* simpleexp -> NUMBER | STRING | NIL | true | false | ... |
constructor | FUNCTION body | primaryexp */
switch (ls->t.token)
{
case TK_NUMBER:
{
init_exp(v, VKNUM, 0);
v->u.nval = ls->t.seminfo.r;
break;
}
case TK_STRING:
{
codestring(ls, v, ls->t.seminfo.ts);
break;
}
case TK_NIL:
{
init_exp(v, VNIL, 0);
break;
}
case TK_TRUE:
{
init_exp(v, VTRUE, 0);
break;
}
case TK_FALSE:
{
init_exp(v, VFALSE, 0);
break;
}
case TK_DOTS: /* vararg */
{
FuncState* fs = ls->fs;
check_condition(ls, fs->f->is_vararg,
"cannot use " LUA_QL("...") " outside a vararg function");
fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */
init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0));
break;
}
case '{': /* constructor */
{
constructor(ls, v);
return;
}
case TK_FUNCTION:
{
luaX_next(ls);
body(ls, v, 0, ls->linenumber);
return;
}
default:
{
primaryexp(ls, v);
return;
}
}
luaX_next(ls);
}
示例3: exprstat
static void exprstat (LexState *ls) {
/* stat -> func | assignment */
FuncState *fs = ls->fs;
struct LHS_assign v;
primaryexp(ls, &v.v);
if (v.v.k == VCALL) /* stat -> func */
SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */
else { /* stat -> assignment */
v.prev = NULL;
assignment(ls, &v, 1);
}
}
示例4: exprstat
static void exprstat (LexState *ls) {
/* stat -> func | assignment */
FuncState *fs = ls->fs;
struct LHS_assign v;
primaryexp(ls, &v.v);
if (v.v.k == VCALL) { /* stat -> func */
luaK_setcallreturns(fs, &v.v, 0); /* call statement uses no results */
}
else { /* stat -> assignment */
v.prev = NULL;
assignment(ls, &v, 1);
}
}
示例5: simpleexp
static void simpleexp (LexState *ls, expdesc *v) {
/* simpleexp -> NUMBER | STRING | NIL | constructor | FUNCTION body
| primaryexp */
switch (ls->t.token) {
case TK_NUMBER: {
init_exp(v, VK, luaK_numberK(ls->fs, ls->t.seminfo.r));
next(ls); /* must use `seminfo' before `next' */
break;
}
case TK_STRING: {
codestring(ls, v, ls->t.seminfo.ts);
next(ls); /* must use `seminfo' before `next' */
break;
}
case TK_WSTRING: {
codewstring(ls, v, ls->t.seminfo.ts);
next(ls); /* must use `seminfo' before `next' */
break;
}
case TK_NIL: {
init_exp(v, VNIL, 0);
next(ls);
break;
}
case TK_TRUE: {
init_exp(v, VTRUE, 0);
next(ls);
break;
}
case TK_FALSE: {
init_exp(v, VFALSE, 0);
next(ls);
break;
}
case '{': { /* constructor */
constructor(ls, v);
break;
}
case TK_FUNCTION: {
next(ls);
body(ls, v, 0, ls->linenumber);
break;
}
default: {
primaryexp(ls, v);
break;
}
}
}
示例6: assignment
static void assignment (LexState *ls, struct LHS_assign *lh, int nvars, BinOpr *opr) {
expdesc e;
check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED,
"syntax error");
if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */
struct LHS_assign nv;
nv.prev = lh;
primaryexp(ls, &nv.v);
if (nv.v.k == VLOCAL)
check_conflict(ls, lh, &nv.v);
assignment(ls, &nv, nvars+1, opr);
}
else { /* assignment -> `=' explist1 */
int nexps;
*opr = OPR_NOBINOPR;
switch(ls->t.token)
{
case '=': break;
case TK_CONCATASSIGN: *opr = OPR_CONCAT; break;
case TK_ADDASSIGN: *opr = OPR_ADD; break;
case TK_SUBASSIGN: *opr = OPR_SUB; break;
case TK_MULASSIGN: *opr = OPR_MUL; break;
case TK_DIVASSIGN: *opr = OPR_DIV; break;
case TK_POWASSIGN: *opr = OPR_POW; break;
case TK_MODASSIGN: *opr = OPR_MOD; break;
default:
luaX_syntaxerror(ls, "unexpected symbol");
break;
};
luaX_next(ls);
nexps = explist1(ls, &e);
if (nexps != nvars) {
adjust_assign(ls, nvars, nexps, &e);
if (nexps > nvars)
ls->fs->freereg -= nexps - nvars; /* remove extra values */
}
else {
luaK_setoneret(ls->fs, &e); /* close last expression */
luaK_storevar(ls->fs, &lh->v, &e, *opr);
return; /* avoid default */
}
}
init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */
luaK_storevar(ls->fs, &lh->v, &e, *opr);
}
示例7: assignment
static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
expdesc e;
check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED,
"syntax error");
if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */
struct LHS_assign nv;
nv.prev = lh;
primaryexp(ls, &nv.v);
if (nv.v.k == VLOCAL)
check_conflict(ls, lh, &nv.v);
luaY_checklimit(ls->fs, nvars, LUAI_MAXCCALLS - ls->L->nCcalls,
"variables in assignment");
assignment(ls, &nv, nvars+1);
}
else { /* assignment -> `=' explist1 */
int nexps;
/* hook for inc_assignment */
if(nvars==1) {
switch(ls->t.token) {
case '+': case '-': case '*': case '/': case TK_CONCAT:
inc_assignment(ls,lh);
/* If you're using Shook's table unpack patch, return 0 here.*/
return;
}
}
checknext(ls, '=');
nexps = explist1(ls, &e);
if (nexps != nvars) {
adjust_assign(ls, nvars, nexps, &e);
if (nexps > nvars)
ls->fs->freereg -= nexps - nvars; /* remove extra values */
}
else {
luaK_setoneret(ls->fs, &e); /* close last expression */
luaK_storevar(ls->fs, &lh->v, &e);
return; /* avoid default */
}
}
init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */
luaK_storevar(ls->fs, &lh->v, &e);
}
示例8: changevalue
static void changevalue (LexState *ls, int op) {
FuncState *fs = ls->fs;
expdesc v, e1, e2;
testnext(ls, '(');
primaryexp(ls, &v);
e1 = v;
if (v.k == VINDEXED)
luaK_reserveregs(fs, 1); /* <- this call solved the problem with indexed values */
if (testnext(ls, ',')) {
luaK_exp2nextreg(fs, &e1); /* <- this call solved the problem with indexed values, 0.32.0 */
expr(ls, &e2);
} else { /* using special opcodes is not faster */
init_exp(&e2, VKNUM, 0);
e2.u.nval = (lua_Integer)1;
}
testnext(ls, ')');
codearith(fs, op, &e1, &e2);
luaK_setoneret(fs, &e1); /* close last expression */
luaK_storevar(fs, &v, &e1);
}
示例9: exprstat
static void exprstat (LexState *ls) {
#if LUA_MUTATION_OPERATORS
/* stat -> func | compound | assignment */
#else
/* stat -> func | assignment */
#endif /* LUA_MUTATION_OPERATORS */
FuncState *fs = ls->fs;
struct LHS_assign v;
primaryexp(ls, &v.v);
if (v.v.k == VCALL) /* stat -> func */
SETARG_C(getcode(fs, &v.v), 1); /* call statement uses no results */
#if LUA_MUTATION_OPERATORS
else { /* stat -> compound | assignment */
v.prev = NULL;
switch(ls->t.token) {
case TK_ADD_EQ:
case TK_SUB_EQ:
case TK_MUL_EQ:
case TK_DIV_EQ:
case TK_MOD_EQ:
case TK_POW_EQ:
compound(ls, &v);
break;
case ',':
case '=':
assignment(ls, &v, 1);
break;
default:
luaX_syntaxerror(ls,
luaO_pushfstring(ls->L,
"'+=','-=','*=', '/=', '%=', '^=', '=' expected"));
break;
}
#else
else { /* stat -> assignment */
v.prev = NULL;
assignment(ls, &v, 1);
#endif /* LUA_MUTATION_OPERATORS */
}
}
示例10: assignment
static void assignment (LexState *ls, struct LHS_assign *lh, int nvars) {
expdesc e;
check_condition(ls, VLOCAL <= lh->v.k && lh->v.k <= VINDEXED,
"syntax error");
if (testnext(ls, ',')) { /* assignment -> `,' primaryexp assignment */
struct LHS_assign nv;
nv.prev = lh;
primaryexp(ls, &nv.v);
if (nv.v.k == VLOCAL)
check_conflict(ls, lh, &nv.v);
luaY_checklimit(ls->fs, nvars, LUAI_MAXCCALLS - ls->L->nCcalls,
"variables in assignment");
assignment(ls, &nv, nvars+1);
}
else { /* assignment -> `=' explist1 */
int nexps;
#if LUA_MUTATION_OPERATORS
luaX_next(ls); /* consume `=' token. */
#else
checknext(ls, '=');
#endif /* LUA_MUTATION_OPERATORS */
nexps = explist1(ls, &e);
if (nexps != nvars) {
adjust_assign(ls, nvars, nexps, &e);
if (nexps > nvars)
ls->fs->freereg -= nexps - nvars; /* remove extra values */
}
else {
luaK_setoneret(ls->fs, &e); /* close last expression */
luaK_storevar(ls->fs, &lh->v, &e);
return; /* avoid default */
}
}
init_exp(&e, VNONRELOC, ls->fs->freereg-1); /* default assignment */
luaK_storevar(ls->fs, &lh->v, &e);
}
示例11: primaryexp
static void primaryexp (LexState *ls, expdesc *v) {
/* primaryexp ->
prefixexp { `.' NAME | `[' exp `]' | `:' NAME funcargs | funcargs } */
FuncState *fs = ls->fs;
prefixexp(ls, v);
for (;;) {
switch (ls->t.token) {
case '.': { /* field */
field(ls, v);
break;
}
case '[': { /* `[' exp1 `]' */
expdesc key;
luaK_exp2anyreg(fs, v);
yindex(ls, &key);
luaK_indexed(fs, v, &key);
break;
}
case ':': { /* `:' NAME funcargs */
expdesc key;
luaX_next(ls);
checkname(ls, &key);
luaK_self(fs, v, &key);
funcargs(ls, v);
break;
}
#if LUA_WIDESTRING
case '(': case TK_STRING: case TK_WSTRING: case '{': { /* funcargs */
#else
case '(': case TK_STRING: case '{': { /* funcargs */
#endif /* LUA_WIDESTRING */
luaK_exp2nextreg(fs, v);
funcargs(ls, v);
break;
}
default: return;
}
}
}
static void simpleexp (LexState *ls, expdesc *v) {
#if LUA_WIDESTRING
/* simpleexp -> NUMBER | STRING | WSTRING | NIL | true | false | ... |
constructor | FUNCTION body | primaryexp */
#else
/* simpleexp -> NUMBER | STRING | NIL | true | false | ... |
constructor | FUNCTION body | primaryexp */
#endif /* LUA_WIDESTRING */
switch (ls->t.token) {
case TK_NUMBER: {
init_exp(v, VKNUM, 0);
v->u.nval = ls->t.seminfo.r;
break;
}
case TK_STRING: {
codestring(ls, v, ls->t.seminfo.ts);
break;
}
#if LUA_WIDESTRING
case TK_WSTRING: {
codewstring(ls, v, ls->t.seminfo.ts);
break;
}
#endif /* LUA_WIDESTRING */
case TK_NIL: {
init_exp(v, VNIL, 0);
break;
}
case TK_TRUE: {
init_exp(v, VTRUE, 0);
break;
}
case TK_FALSE: {
init_exp(v, VFALSE, 0);
break;
}
case TK_DOTS: { /* vararg */
FuncState *fs = ls->fs;
check_condition(ls, fs->f->is_vararg,
"cannot use " LUA_QL("...") " outside a vararg function");
fs->f->is_vararg &= ~VARARG_NEEDSARG; /* don't need 'arg' */
init_exp(v, VVARARG, luaK_codeABC(fs, OP_VARARG, 0, 1, 0));
break;
}
case '{': { /* constructor */
constructor(ls, v);
return;
}
case TK_FUNCTION: {
luaX_next(ls);
body(ls, v, 0, ls->linenumber);
return;
}
default: {
primaryexp(ls, v);
return;
}
}
luaX_next(ls);
//.........这里部分代码省略.........