示例#1
0
/* --------------- init global variable ----------- */
void initPrimitiveVariable(){
  eval(newList(3, newSymbol("define"), newSymbol("nil"), newExp(&sNull, NULL_TAG)),
       sGlobalEnvironment);
  eval(newList(3, newSymbol("define"), newSymbol("#t"), newExp(&sTrue, TRUE_TAG)),
       sGlobalEnvironment);
  eval(newList(3, newSymbol("define"), newSymbol("#f"), newExp(&sFalse, FALSE_TAG)),
       sGlobalEnvironment);
  eval(newList(3, newSymbol("define"), newSymbol("#e"), newExp(&sError, ERROR_TAG)),
       sGlobalEnvironment);
}
示例#2
0
文件: eval.c 项目: tkmr/tonburi-scm
sList *checkParameters(sList *parameters, sList *arguments){
  sExpression *temp = checkParametersIter(newExp(parameters, LIST_TAG),
                                          newExp(arguments,  LIST_TAG));

  if(isList(temp)){
    return toList(temp);
  }else{
    return toList(cons(&sNull, &sNull));
  }
}
示例#3
0
文件: eval.c 项目: tkmr/tonburi-scm
sExpression *apply(sExpression *procOrLambda, sExpression *argument, sEnvironment *env){
  if(isPrimitiveProc(procOrLambda))
  {
    sProc *cfunc = toProc(procOrLambda);
    return applyProc(cfunc, argument);
  }
  else if(isLambdaType(procOrLambda))
  {
    sLambda *lambd = toLambda(procOrLambda);
    sList *body = lambd->body;
    sList *arguments;
    sList *parameters;

    if(isList(argument)){
      //可変長引数のため
      parameters = checkParameters(lambd->parameters, toList(argument));
      arguments = checkArguments(parameters, toList(argument), lambd->isVarArgument);
    }else{
      parameters = lambd->parameters;
      arguments = toList(cons(argument, &sNull));
    }

    sEnvironment *env = extendEnvironment(parameters, arguments, lambd->frame);
    if(isList(car(body))){
      return evalSequence(body, env);
    }else{
      return eval(newExp(body, LIST_TAG), env);
    }
  }
  return &sNull;
}
示例#4
0
文件: list.c 项目: tkmr/tonburi-scm
sExpression *cons(sExpression *left, sExpression *right){
  sList *list = (sList *)malloc(sizeof(sList));
  list->car = left;
  list->cdr = right;
  sExpression *listexp = newExp(list, LIST_TAG);
  return listexp;
}
示例#5
0
Bool defineVariable(sSymbol *symbol, sExpression *value, sEnvironment *env){
  if(strcmp(symbol->name, "_error") != 0){
    sExpression *exp = newExp(symbol, SYMBOL_TAG);
    putVars(toList(cons(exp, &sNull)),
            toList(cons(value, &sNull)),
            env->varmap);
    return TRUE;
  }
  return FALSE;
}
示例#6
0
文件: syntax.c 项目: tkmr/tonburi-scm
sExpression *evalSyntaxRule(sSyntax *syntax, sExpression *parameters){
  sExpression *clonedRule = cloneList(newExp(syntax->rules, LIST_TAG));
  sExpression *temp = &sNull;
  sExpression *syntax_tmp = car(syntax->syntaxes);
  sExpression *rule = car(toList(clonedRule));
  sExpression *syntaxcdr = cdr(syntax->syntaxes);
  sExpression *rulecdr = cdr(toList(clonedRule));

  temp = evalSyntaxRuleIter(syntax_tmp, parameters, rule);
  while(isList(syntaxcdr) && isNull(temp)){
    syntax_tmp = car(toList(syntaxcdr));
    rule = car(toList(rulecdr));
    syntaxcdr = cdr(toList(syntaxcdr));
    rulecdr = cdr(toList(rulecdr));
    temp = evalSyntaxRuleIter(syntax_tmp, parameters, rule);
  }
  return rule;
}
示例#7
0
sExpression *lookupVariable(sSymbol *symbol, sEnvironment *env){
  int i = 0;
  int keySize = strlen(symbol->name) * sizeof(char);
  TCXSTR *str = getTypeTag(symbol->name);

  void *result = tcmapget(env->varmap, symbol->name, keySize, &i);
  if(i == 0){
    //fail find
    if(isNoParent(env)){

      return &sNull;
    }else{
      return lookupVariable(symbol, env->parent);
    }
  }else{
    //success find
    sType *type = (sType *)tcmapget(env->varmap, tcxstrptr(str), tcxstrsize(str), &i);
    sExpression *resultExp = newExp(result, *type);
    return resultExp;
  }
}
示例#8
0
Bool setVariable(sSymbol *symbol, sExpression *value, sEnvironment *env){
  if(strcmp(symbol->name, "_error") != 0){
    int i = 0;
    void *result = tcmapget(env->varmap, symbol->name, (strlen(symbol->name) * sizeof(char)), &i);
    if(i == 0)
    {
      if(isNoParent(env)){
        return FALSE;
      }else{
        return setVariable(symbol, value, env->parent);
      }
    }
    else
    {
      sExpression *exp = newExp(symbol, SYMBOL_TAG);
      putVars(toList(cons(exp, &sNull)),
              toList(cons(value, &sNull)),
              env->varmap);
      return TRUE;
    }
  }
  return FALSE;
}
示例#9
0
文件: syntax.c 项目: tkmr/tonburi-scm
sExpression *newSyntax(sList *rules, sList *syntaxes){
  sSyntax *syntax = (sSyntax *)malloc(sizeof(sSyntax));
  syntax->rules = rules;
  syntax->syntaxes = syntaxes;
  return newExp(syntax, SYNTAX_TAG);
}
示例#10
0
void Session::attachSignals()
{
	// zoneManager -> group Manager
	connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)),
			m_groupMgr, SLOT(player(const charProfileStruct*)));
	
	// spawnShell -> group Manager
	connect(m_spawnShell, SIGNAL(addItem(const Item*)),
			m_groupMgr, SLOT(addItem(const Item*)));
	connect(m_spawnShell, SIGNAL(delItem(const Item*)),
			m_groupMgr, SLOT(delItem(const Item*)));
	connect(m_spawnShell, SIGNAL(killSpawn(const Item*, const Item*, uint16_t)),
			m_groupMgr, SLOT(killSpawn(const Item*)));
	
	// zone Manager -> filter Manager
	connect(m_zoneMgr, SIGNAL(zoneBegin(const QString&)),
			m_filterMgr, SLOT(loadZone(const QString&)));
	connect(m_zoneMgr, SIGNAL(zoneEnd(const QString&)),
			m_filterMgr, SLOT(loadZone(const QString&)));
	connect(m_zoneMgr, SIGNAL(zoneChanged(const QString&)),
			m_filterMgr, SLOT(loadZone(const QString&)));
	
	connect(m_zoneMgr, SIGNAL(zoneBegin(const ClientZoneEntryStruct*, size_t, uint8_t)),
			m_messageShell, SLOT(zoneEntryClient(const ClientZoneEntryStruct*)));
	connect(m_zoneMgr, SIGNAL(zoneChanged(const zoneChangeStruct*, size_t, uint8_t)),
			m_messageShell, SLOT(zoneChanged(const zoneChangeStruct*, size_t, uint8_t)));
	connect(m_zoneMgr, SIGNAL(zoneBegin(const QString&)),
			m_messageShell, SLOT(zoneBegin(const QString&)));
	connect(m_zoneMgr, SIGNAL(zoneEnd(const QString&, const QString&)),
			m_messageShell, SLOT(zoneEnd(const QString&, const QString&)));
	connect(m_zoneMgr, SIGNAL(zoneChanged(const QString&)),
			m_messageShell, SLOT(zoneChanged(const QString&)));	
	connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)),
			m_messageShell, SLOT(player(const charProfileStruct*)));
	
	connect(m_player, SIGNAL(setExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)),
			m_messageShell, SLOT(setExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)));
	connect(m_player, SIGNAL(newExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)),
			m_messageShell, SLOT(newExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)));
	connect(m_player, SIGNAL(setAltExp(uint32_t, uint32_t, uint32_t, uint32_t)),
			m_messageShell, SLOT(setAltExp(uint32_t, uint32_t, uint32_t, uint32_t)));
	connect(m_player, SIGNAL(newAltExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)),
			m_messageShell, SLOT(newAltExp(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t)));

	connect(m_spawnShell, SIGNAL(addItem(const Item*)),
			m_messageShell, SLOT(addItem(const Item*)));
	connect(m_spawnShell, SIGNAL(delItem(const Item*)),
			m_messageShell, SLOT(delItem(const Item*)));
	connect(m_spawnShell, SIGNAL(killSpawn(const Item*, const Item*, uint16_t)),
			m_messageShell, SLOT(killSpawn(const Item*)));
	
	// connect the SpellShell slots to ZoneMgr signals
	connect(m_zoneMgr, SIGNAL(zoneChanged(const QString&)),
			m_spellShell, SLOT(zoneChanged()));
	
	// connect the SpellShell slots to SpawnShell signals
	connect(m_spawnShell, SIGNAL(killSpawn(const Item*, const Item*, uint16_t)),
			m_spellShell, SLOT(killSpawn(const Item*)));
	
	// connect the SpellShell slots to Player signals
	connect(m_player, SIGNAL(newPlayer()),
			m_spellShell, SLOT(clear()));
	connect(m_player, SIGNAL(buffLoad(const spellBuff *)),
			m_spellShell, SLOT(buffLoad(const spellBuff *)));
	
	connect(m_zoneMgr, SIGNAL(playerProfile(const charProfileStruct*)), m_player, SLOT(player(const charProfileStruct*)));
}
示例#11
0
文件: eval.c 项目: tkmr/tonburi-scm
sList *checkArguments(sList *parameters, sList *arguments, Bool isVarArgument){
  return toList(checkArgumentsIter(newExp(parameters, LIST_TAG),
                                   newExp(arguments,  LIST_TAG),
                                   isVarArgument));
}
示例#12
0
sExpression *newSymbol(char *name){
  sSymbol *symb = (sSymbol *)malloc(sizeof(sSymbol));
  symb->name = name;
  sExpression *exp = newExp(symb, SYMBOL_TAG);
  return exp;
}