示例#1
0
文件: interp.c 项目: rdw88/Wise-Lang
Type* interp_arith(Type *type, Environment *env, int mode) {
	int num1 = 0;
	int num2 = 0;

	Type *node1 = (Type *) type->type1;
	Type *node2 = (Type *) type->type2;

	if (node1->type == VAR) {
		Type *t1 = lookup_env(env, (char *) node1->type1);

		if (t1 == NULL) {
			return NULL;
		}

		num1 = *(int *) t1->type1;
	} else if (node1->type == INT) {
		num1 = *(int *) node1->type1;
	} else {
		Type *rec = interp(node1, env);

		if (rec != NULL) {
			num1 = *(int *) rec->type1;
		}
	}

	if (node2->type == VAR) {
		Type *t2 = lookup_env(env, (char *) node2->type1);

		if (t2 == NULL) {
			return NULL;
		}

		num2 = *(int *) t2->type1;
	} else if (node2->type == INT) {
		num2 = *(int *) node2->type1;
	} else {
		Type *rec = interp(node2, env);

		if (rec != NULL) {
			num2 = *(int *) rec->type1;
		}
	}

	int *result = (int *) malloc(sizeof(int));

	if (mode == ARITH_ADD)
		*result = num1 + num2;
	else if (mode == ARITH_SUB)
		*result = num1 - num2;
	else if (mode == ARITH_MULT)
		*result = num1 * num2;
	else
		*result = num1 / num2;

	Type *final = (Type *) malloc(sizeof(Type));
	final->type = INT;
示例#2
0
loliObj* loliSym::eval(loliObj* e){
    this->type = typeSYM;
    if(this->name == "nil" || this == nil){
      return nil;
    }
    if(this->name == "t" || this == t){
      return t;
    }
    if(e->nilp() || e == NULL){
      loliObj* r = lookup_top_env(this);
      if(r->nilp()){
        loli_err("Symbol: " + this->toString() + " is unbound.");
        return nil;
      }else{
        return lcons(r)->head();
      }
    }else{
      loliObj* r = lookup_env(this, e);
      if(r->nilp()){
        loli_err("Symbol: " + this->toString() + " is unbound in its environment.");
        return nil;
      }else{
        return lcons(r)->head();
      }
    }
}
示例#3
0
文件: pwd.c 项目: morrisxd/PMC
/* return something like a group.  */
char *
getgr_name ()
{
  if (!group)			/* have we been called before? */
    group = lookup_env (group_strings);

  if (!group)			/* have we been successful? */
    group = anonymous;

  return group;
}
示例#4
0
文件: pwd.c 项目: morrisxd/PMC
/* return something like a username. */
char *
getlogin ()
{
  /* This is how a windows user would override their login name. */
  if (!login)
    login = lookup_env (login_strings);

  /* In the absence of user override, ask the operating system. */
  if (!login)
     login = win32getlogin();

  /* If all else fails, fall back on Old Faithful. */
  if (!login)
    login = anonymous;

  return login;
}