示例#1
0
文件: a2c.c 项目: sacado/arc2c
void set_tbl (table * t, obj index, obj value){
  int i;
  obj cur_key;

  for (i = 0 ; i < t->size ; i++){
    cur_key = t->keys[i];

    if (!APTR(cur_key) || !ASTR(cur_key)){
      if (cur_key == index)
        break;
    }
    else if (ASTR(cur_key))
      if (eq_str ((string *) cur_key, (string *) index))
        break;
  }

  if (i == t->max_size){
    t->max_size *= 2;
    t->keys     = realloc (t->keys, sizeof (obj) * t->max_size);
    t->values   = realloc (t->values, sizeof (obj) * t->max_size);
  }

  if (i == t->size)
    t->size++;

  t->keys[i] = index;
  t->values[i] = value;
}
示例#2
0
文件: a2c.c 项目: sacado/arc2c
obj tbl_lookup (table * t, obj index){
  int i;
  obj cur_key;

  for (i = 0 ; i < t->size ; i++){
    cur_key = t->keys[i];

    if (!APTR(cur_key) || !ASTR(cur_key)){
      if (cur_key == index)
        return t->values[i];
    }
    else if (ASTR(cur_key))
      if (eq_str ((string *) cur_key, (string *) index))
        return t->values[i];
  }

  return SYM2OBJ("nil");
}
示例#3
0
文件: a2c.c 项目: sacado/arc2c
void PR(){
  pair * p;
  tagged * t;
  obj y = TOS();

  if (AFIX(y))
    printf ("%ld", OBJ2FIX(y));
  else if (ACHAR(y)){
    char * utf8 = cpt2utf8(OBJ2CHAR(y));
    printf ("%s", utf8);
    free(utf8);
  }
  else if (ASYM(y))
    printf ("%s", ((symbol *)y)->value);
  else if (AFLOAT(y))
    printf ("%g", ((flonum*)y)->value);
  else if (ASTR(y))
    printf ("%s", str2utf8 ((string *) y));
  else if (AFN(y))
    printf ("#<procedure>");
  else if (ATBL(y))
    pr_tbl((table *) y);
  else if (ATAG(y)){
    t = (tagged *) y;
    printf ("#3(tagged ");
    PUSH(t->ctype); PR();
    printf (" ");
    TOS() = t->content; PR(); sp--; 
    printf (")");
  }
  else if (APAIR(y)){
    printf ("(");

    while (APAIR(y)){
        p = (pair *) y;
        PUSH(p->car); PR(); sp--;
        y = p->cdr;

        if (APAIR(y))
          printf (" ");
   }

   if (y != SYM2OBJ("nil")){
       PUSH(y);
       printf (" . ");
       PR(); sp--;
    }
    printf (")");
  }
}
示例#4
0
void Player::SetMovie(Movie* movie)
{
	if (m_movie != movie)
	{
		m_movie = movie;

		m_movie->SetMember(ASTR("_parent"), System::ActionScripting::StkElt(static_cast<Object*>(this)));

		m_placedMovie = new PlacedCharacter;
	//	m_placedMovie->m_character = Object2(movie);

		Invalidate();
	}
}
示例#5
0
void Player::ExecuteScripts(PlacedCharacter* placed, ButtonCharacter* pButton, uint16 condMask)
{
	for (unsigned int i = 0; i < pButton->m_scripts.GetSize(); i++)
	{
		ButtonActionScript* pScript = pButton->m_scripts[i];
		if (pScript->m_cond & condMask)
		{
			System::ActionScripting::VM vm;
			vm.m_pFrame = new System::ActionScripting::StackFrame;
			vm.m_pFrame->m_pContext = pScript->m_context;
			vm.m_pFrame->m_instructionsData = pScript->m_data;
			vm.m_pFrame->m_instructionsLength = pScript->m_length;
			vm.m_pc = pScript->m_data;

			vm.m_pFrame->m_variables[ASTR("this")] = System::ActionScripting::StkElt(static_cast<Object*>(placed));//StringA("this");
			vm.m_pFrame->m_variables[ASTR("_root")] = System::ActionScripting::StkElt(static_cast<Object*>(this)/*m_movie.m_p*/);

			while (vm.next())
				;

			ASSERT(vm.m_stack.GetSize() == 0);
		}
	}
}
示例#6
0
文件: a2c.c 项目: sacado/arc2c
void perform_gc(){
  int i;
  obj * scur;
  string * s;
  table * t;

  for (scur = stack ; scur < sp ; scur++)
    explore_heap (*scur);

  for (i = 0; i < NB_GLOBALS ; i++)
    explore_heap (GLOBAL(i));

  for (i = 0 ; i < NB_QUOTE_CONSTANTS ; i++)
    explore_heap (QUOTE_CONSTANTS[i]);

  for (i = 0 ; i < HEAP_SIZE ; i++){
    switch (freel.mark[i]){
      case UNMARKED:
        if (ATBL(freel.heap[i])){
          t = (table *) (freel.heap[i]);
          free(t->keys);
          free(t->values);
        }
        else if (ASTR(freel.heap[i])){
          s = (string *) (freel.heap[i]);
          free (s->cpts);
        }

        free((void *)(freel.heap[i]));
        freel.mark[i] = FREE;
        freel.free[freel.nbfree++] = i;
        break;
      case MARKED:
        freel.mark[i] = UNMARKED;
        break;
    }
  }
}
示例#7
0
void UIElement::AddHandler(RoutedEvent* routedEvent, stub_interface_base* handler)
{
	if (handler->GetType()->IsDerivedFrom(routedEvent->get_HandlerType()->GetClass()))
	{
		throw new Exception(WSTR("Handler of wrong type"));
	}

	int index = routedEvent->GetIndex();

	if (m_handlers[index] == NULL)
	{
		VERIFY(routedEvent->get_HandlerType()->GetClass());
		ClassType* pSigType = dynamic_cast<ClassType*>(routedEvent->get_HandlerType()->GetClass()->LookupType(ASTR("signal_type"))->GetStripped());
		m_handlers[index] = (signal_base*)newobj(pSigType);
	}

	m_handlers[index]->connect(handler);
}
示例#8
0
signal2<Object*, RoutedPropertyChangedEventArgs<double>*>& RangeBase::get_ValueChanged()
{
	RoutedEvent* routedEvent = get_ValueChangedEvent();
	int index = routedEvent->GetIndex();

	if (m_handlers[index] == NULL)
	{
		VERIFY(routedEvent->get_HandlerType()->GetClass());
		ClassType* pSigType = dynamic_cast<ClassType*>(routedEvent->get_HandlerType()->GetClass()->LookupType(ASTR("signal_type"))->GetStripped());
		VERIFY(pSigType);
		m_handlers[index] = (signal_base*)newobj(pSigType);
	}

	return *dynamic_cast<signal2<Object*, RoutedPropertyChangedEventArgs<double>*>*>(m_handlers[index]);
}