コード例 #1
0
ファイル: expr.c プロジェクト: aryx/fork-kencc
void
opinc(Node *n, Node *res)
{
	Value *v;

	chklval(n->left);
	v = n->left->sym->v;
	res->op = OCONST;
	res->type = v->type;
	res->nstore = v->vstore;
	switch(v->type) {
	case TINT:
		if(n->op == OPDEC)
			v->vstore.u0.sival -= fmtsize(v);
		else
			v->vstore.u0.sival += fmtsize(v);
		break;			
	case TFLOAT:
		if(n->op == OPDEC)
			v->vstore.u0.sfval--;
		else
			v->vstore.u0.sfval++;
		break;
	default:
		error("bad type for post --/++");
	}
}
コード例 #2
0
ファイル: expr.c プロジェクト: 99years/plan9
void
ocall(Node *n, Node *res)
{
	Lsym *s;
	Rplace *rsav;

	res->op = OCONST;		/* Default return value */
	res->type = TLIST;
	res->l = 0;

	chklval(n->left);
	s = n->left->sym;

	if(n->builtin && !s->builtin){
		error("no builtin %s", s->name);
		return;
	}
	if(s->builtin && (n->builtin || s->proc == 0)) {
		(*s->builtin)(res, n->right);
		return;
	}
	if(s->proc == 0)
		error("no function %s", s->name);

	rsav = ret;
	call(s->name, n->right, s->proc->left, s->proc->right, res);
	ret = rsav;
}
コード例 #3
0
ファイル: expr.c プロジェクト: aryx/fork-kencc
void
oasgn(Node *n, Node *res)
{
	Node *lp, r;
	Value *v;

	lp = n->left;
	switch(lp->op) {
	case OINDM:
		windir(cormap, lp->left, n->right, res);
		break;
	case OINDC:
		windir(symmap, lp->left, n->right, res);
		break;
	default:
		chklval(lp);
		v = lp->sym->v;
		expr(n->right, &r);
		v->set = 1;
		v->type = r.type;
		v->vstore = r.nstore;
		res->op = OCONST;
		res->type = v->type;
		res->nstore = v->vstore;
		res->nstore.comt = v->vstore.comt;
	}
}
コード例 #4
0
ファイル: expr.c プロジェクト: 99years/plan9
void
oeinc(Node *n, Node *res)
{
	Value *v;

	chklval(n->left);
	v = n->left->sym->v;
	res->op = OCONST;
	res->type = v->type;
	switch(v->type) {
	case TINT:
		if(n->op == OEDEC)
			v->ival -= fmtsize(v);
		else
			v->ival += fmtsize(v);
		break;			
	case TFLOAT:
		if(n->op == OEDEC)
			v->fval--;
		else
			v->fval++;
		break;
	default:
		error("bad type for pre --/++");
	}
	res->Store = v->Store;
}