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; }
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"); }
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 (")"); } }
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(); } }
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); } } }
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; } } }
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); }
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]); }