Exemple #1
0
static VALUE
id2ref(VALUE obj, SEL sel, VALUE objid)
{
#if SIZEOF_LONG == SIZEOF_VOIDP
#define NUM2PTR(x) NUM2ULONG(x)
#elif SIZEOF_LONG_LONG == SIZEOF_VOIDP
#define NUM2PTR(x) NUM2ULL(x)
#endif
    VALUE ptr;
    void *p0;

    rb_secure(4);
    ptr = NUM2PTR(objid);
    p0 = (void *)ptr;

    if (ptr == Qtrue) return Qtrue;
    if (ptr == Qfalse) return Qfalse;
    if (ptr == Qnil) return Qnil;
    if (FIXNUM_P(ptr) || SYMBOL_P(ptr))
	return ptr;

    if (auto_zone_is_valid_pointer(__auto_zone, p0)) {
	auto_memory_type_t type = 
	    auto_zone_get_layout_type(__auto_zone, p0);
	if ((type == AUTO_OBJECT_SCANNED || type == AUTO_OBJECT_UNSCANNED)
	    && (NATIVE((VALUE)p0)
		|| (BUILTIN_TYPE(p0) < T_FIXNUM && BUILTIN_TYPE(p0) != T_ICLASS)))
	    return (VALUE)p0;
    }
    rb_raise(rb_eRangeError, "%p is not id value", p0);
}
Exemple #2
0
void
rb_gc_copy_finalizer(VALUE dest, VALUE obj)
{
    VALUE table;

    if (__os_finalizers == NULL)
	return;

    if (NATIVE(obj)) {
	if (!rb_objc_flag_check((void *)obj, FL_FINALIZE))
	    return;
    }
    else {
	if (!FL_TEST(obj, FL_FINALIZE))
	    return;
    }

    table = (VALUE)CFDictionaryGetValue((CFDictionaryRef)__os_finalizers,
	(const void *)obj);

    if (table == 0) {
	CFDictionaryRemoveValue(__os_finalizers, (const void *)dest);
    }
    else {
	CFDictionarySetValue(__os_finalizers, (const void *)dest, 
	    (const void *)table);	
    }
}
String ImmutableIndex::GetBucketLabel(Int64 peer, Int32 index)
{
    NATIVE(AlphabeticIndex::ImmutableIndex)* ii = immutableIndexFromPeer(peer);
    // TODO: There is a problem here. Waiting for new .so files.
#if 0 // for compiling
    const NATIVE(AlphabeticIndex::Bucket)* bucket = ii->getBucket(index);
    if(NULL == bucket) {
        return String(NULL);
    }

    // Return "" for the underflow/inflow/overflow buckets.
    if (bucket->getLabelType() != U_ALPHAINDEX_NORMAL) {
        return String("");
    }

    const UnicodeString& label(bucket->getLabel());
    String s;
    ElStringByteSink sink(&s);
    label.toUTF8(sink);
    return s;
#else
    assert(0);
    return String(NULL);
#endif
}
Int32 ImmutableIndex::GetBucketCount(Int64 peer)
{
    NATIVE(AlphabeticIndex::ImmutableIndex)* ii = immutableIndexFromPeer(peer);
    // TODO: There is a problem here. Waiting for new .so files.
#if 0 // for compiling
    return ii->getBucketCount();
#else
    assert(0);
    return 0;
#endif
}
Exemple #5
0
static VALUE
undefine_final(VALUE os, SEL sel, VALUE obj)
{
    if (__os_finalizers != NULL)
	CFDictionaryRemoveValue(__os_finalizers, (const void *)obj);
    
    if (NATIVE(obj)) {
	rb_objc_flag_set((void *)obj, FL_FINALIZE, false);
    }
    else {
	FL_UNSET(obj, FL_FINALIZE);
    }
    return obj;
}
Int32 ImmutableIndex::GetBucketIndex(Int64 peer, const String& s)
{
    NATIVE(AlphabeticIndex::ImmutableIndex)* ii = immutableIndexFromPeer(peer);
    if(s.IsNull())
        return -1;
    UErrorCode status = U_ZERO_ERROR;
    // TODO: There is a problem here. Waiting for new .so files.
#if 0 // for compiling
    Int32 result = ii->getBucketIndex(UnicodeString::fromUTF8(s.string()), status);
    if(!U_SUCCESS(status))
        return -1;
    return result;
#else
    assert(0);
    return 0;
#endif
}
Exemple #7
0
static VALUE
define_final(VALUE os, SEL sel, int argc, VALUE *argv)
{
    VALUE obj, block, table;

    if (__os_finalizers == NULL)
	__os_finalizers = CFDictionaryCreateMutable(NULL, 0, NULL,
	    &kCFTypeDictionaryValueCallBacks);

    rb_scan_args(argc, argv, "11", &obj, &block);
    if (argc == 1) {
	block = rb_block_proc();
    }
    else if (!rb_respond_to(block, rb_intern("call"))) {
	rb_raise(rb_eArgError, "wrong type argument %s (should be callable)",
		 rb_obj_classname(block));
    }

    table = (VALUE)CFDictionaryGetValue((CFDictionaryRef)__os_finalizers, 
	(const void *)obj);

    if (table == 0) {
	table = rb_ary_new();
	CFDictionarySetValue(__os_finalizers, (const void *)obj, 
	    (const void *)table);
    }

    rb_ary_push(table, block);
    
    if (NATIVE(obj)) {
	rb_objc_flag_set((void *)obj, FL_FINALIZE, true);
    }
    else {
	FL_SET(obj, FL_FINALIZE);
    }

    VALUE ret = rb_ary_new3(2, INT2FIX(rb_safe_level()), block);
    OBJ_FREEZE(ret);
    return ret;
}
Exemple #8
0
static void
rb_obj_imp_finalize(void *obj, SEL sel)
{
#if 0
//    const bool need_protection = 
//	GET_THREAD()->thread_id != pthread_self();
    bool call_finalize, free_ivar;

    if (NATIVE((VALUE)obj)) {
	long flag;

	flag = rb_objc_remove_flags(obj);

	call_finalize = (flag & FL_FINALIZE) == FL_FINALIZE;
	free_ivar = (flag & FL_EXIVAR) == FL_EXIVAR;
    }
    else {
	call_finalize = FL_TEST(obj, FL_FINALIZE);
	free_ivar = FL_TEST(obj, FL_EXIVAR);
    }

    if (call_finalize || free_ivar) {
//	if (need_protection) {
//	    native_mutex_lock(&GET_THREAD()->vm->global_interpreter_lock);
//	}
	if (call_finalize) {
	    rb_call_os_finalizer(obj);
	}
	if (free_ivar) {
	    rb_free_generic_ivar((VALUE)obj);
	}
//	if (need_protection) {
//	    native_mutex_unlock(&GET_THREAD()->vm->global_interpreter_lock);
//	}
    }
#endif
}
Exemple #9
0
QWidget::QWidget()
    :   NativeInheritWrapper()
{
}

QWidget::QWidget(QWidget^ parent)
    :   NativeInheritWrapper(init<NATIVE(QWidget)>(parent))
{
}

QWidget::QWidget(QWidget^ parent, WindowType f)
    :   NativeInheritWrapper(init<NATIVE(QWidget)>(parent, f))
{
}

QWidget::QWidget(NATIVE(QWidget)* native)
    :   NativeInheritWrapper(native)
{
}

QWidget::QWidget(NATIVE(QWidget)& native)
    :   NativeInheritWrapper(native)
{
}

QN_STR^ QWidget::WindowTitle::get()
{
    return gcnew QN_STR(ref().windowTitle());
}

void QWidget::WindowTitle::set(QN_STR^ val)
//cannot use static here!!
cell_t W3ExtShowShop2(IPluginContext *pCtx, const cell_t *params)
{
	cell_t client=params[1];
	//ERR("in");

	static bool once=true;
	if(!g->helperVerifiedIntegrity){
		ERR("Shop2: helper not verified");
		EXTChatMessage(client,"ERROR: helper not verified. Contact server owner.");
		return 0;
	}
	if(once){
		ERR("Shop2: helper OK");
	}


	
	clienttotranslatecached=client;
	IMenuStyle *style=g->imenus->GetDefaultStyle();
	if(once){
		ERR("Shop2: Style OK");
	}
	//MyMenuHandler *handler=new MyMenuHandler();  //extens IMenuHandler without any implementation for now
	static Shopmenu2Handler *myhandler=new Shopmenu2Handler();

	if(once){	ERR("Shop2: Handler OK");	}


	IBaseMenu *basemenu=style->CreateMenu(myhandler );
	if(once){	ERR("Shop2: CreateMenu OK");	}
	
	char buffer[1000];


	void* param2[7];
	param2[0]=(void*)"[War3Source] Select an item to buy. You have {amount}/{amount} items";
	param2[1]=&client;
	cell_t dum=(NATIVE("GetClientItems2Owned",client));
	param2[2]=&dum;
	cell_t dum2=ITEMS2CANHAVE;
	param2[3]=&dum2;

	param2[4]=(void*)"You have {amount} Diamonds";
	param2[5]=&client;

	if(once){	ERR("Shop2: before GetDiamonds OK");	}
	cell_t dum3=GetDiamonds(client);
	if(once){	ERR("Shop2: after GetDiamonds OK");	}
	param2[6]=&dum3;

	size_t dummy;
	char* failedchar=NULL;
	if(shopitem2count<1){
		ERR("item2 count <1");
	}
	if(!g->myphrasecollection->FormatString(buffer,sizeof(buffer),"%T",param2,4,&dummy,(const char**)&failedchar)){
		ERR("1trans failed %s",failedchar);
	}

	char buffer2[512];
	if(!g->myphrasecollection->FormatString(buffer2,sizeof(buffer2),"%T",param2+4,3,&dummy,(const char**)&failedchar)){
		ERR("2trans failed %s",failedchar);
	}

	char title[512];
	FORMAT(title,sizeof(title),"%s\n%s\n",buffer,buffer2);
	//ERR("%s",title);
	basemenu->SetDefaultTitle(title);
	for(int i=1;i<=shopitem2count;i++){
		GetItem(i);
		FORMAT(buffer,sizeof(buffer),"%s%s %d",GetOwnsItem(client,item->itemid)?">":"",item->name(),item->cost()); //itemid
		ItemDrawInfo mydrawinfo(buffer); //dies on stack
		if(GetOwnsItem(client,item->itemid)||GetDiamonds(client)<item->cost()){
			mydrawinfo.style=ITEMDRAW_DISABLED;
		}
		basemenu->AppendItem(item->itemidstr,mydrawinfo);
	}


	if(once){	ERR("Shop2: before Display OK");	}
	//ERR("1 %d %d",client,shopitem2count);
	basemenu->Display(client,0);

	if(once){	ERR("Shop2: Displayed OK");	}
	//ERR("2");*/

	once=false;
	return 0;
}
	once=false;
}
 void Shopmenu2Handler::OnMenuDestroy(IBaseMenu *menu)
{
	static bool once=true;
	if(once) ERR("OnMenuDestroy called");
	once=false;
}



#ifdef failed
	//public does not work, vformat gets wrong cell values
	IPluginFunction *publicfunc= g->helperplugin->GetRuntime()->GetFunctionByName("myvformat");

	cell_t own=NATIVE("GetClientItemsOwned",client);
	cell_t max=NATIVE("GetMaxShopitemsPerPlayer");

	publicfunc->PushStringEx(buffer,sizeof(buffer),0,SM_PARAM_COPYBACK);
	publicfunc->PushCell(sizeof(buffer));
	publicfunc->PushString("%T");
	publicfunc->PushString("[War3Source] Select an item to buy. You have {amount}/{amount} items");
	publicfunc->PushCell(0);

	publicfunc->PushCell(own);
	publicfunc->PushCell(max);
	publicfunc->Execute(&result);
ERR("%s",buffer);
#endif

Exemple #12
0
void wrenInitializeCore(WrenVM* vm)
{
  // Define the root Object class. This has to be done a little specially
  // because it has no superclass and an unusual metaclass (Class).
  vm->objectClass = defineSingleClass(vm, "Object");
  NATIVE(vm->objectClass, "== ", object_eqeq);
  NATIVE(vm->objectClass, "!= ", object_bangeq);
  NATIVE(vm->objectClass, "new", object_new);
  NATIVE(vm->objectClass, "toString", object_toString);
  NATIVE(vm->objectClass, "type", object_type);
  NATIVE(vm->objectClass, " instantiate", object_instantiate);

  // Now we can define Class, which is a subclass of Object, but Object's
  // metaclass.
  vm->classClass = defineSingleClass(vm, "Class");

  // Now that Object and Class are defined, we can wire them up to each other.
  wrenBindSuperclass(vm, vm->classClass, vm->objectClass);
  vm->objectClass->metaclass = vm->classClass;
  vm->classClass->metaclass = vm->classClass;

  // Define the methods specific to Class after wiring up its superclass to
  // prevent the inherited ones from overwriting them.
  NATIVE(vm->classClass, " instantiate", class_instantiate);
  NATIVE(vm->classClass, "name", class_name);

  // The core class diagram ends up looking like this, where single lines point
  // to a class's superclass, and double lines point to its metaclass:
  //
  //             __________        /====\
  //            /          \      //    \\
  //           v            \     v      \\
  //     .---------.   .--------------.  //
  //     | Object  |==>|    Class     |==/
  //     '---------'   '--------------'
  //          ^               ^
  //          |               |
  //     .---------.   .--------------.   \
  //     |  Base   |==>|  Base.type   |    |
  //     '---------'   '--------------'    |
  //          ^               ^            | Hypothetical example classes
  //          |               |            |
  //     .---------.   .--------------.    |
  //     | Derived |==>| Derived.type |    |
  //     '---------'   '--------------'    /

  // The rest of the classes can not be defined normally.
  vm->boolClass = defineClass(vm, "Bool");
  NATIVE(vm->boolClass, "toString", bool_toString);
  NATIVE(vm->boolClass, "!", bool_not);

  // TODO: Make fibers inherit Sequence and be iterable.
  vm->fiberClass = defineClass(vm, "Fiber");
  NATIVE(vm->fiberClass->metaclass, " instantiate", fiber_instantiate);
  NATIVE(vm->fiberClass->metaclass, "new ", fiber_new);
  NATIVE(vm->fiberClass->metaclass, "yield", fiber_yield);
  NATIVE(vm->fiberClass->metaclass, "yield ", fiber_yield1);
  NATIVE(vm->fiberClass, "call", fiber_call);
  NATIVE(vm->fiberClass, "call ", fiber_call1);
  NATIVE(vm->fiberClass, "isDone", fiber_isDone);
  NATIVE(vm->fiberClass, "run", fiber_run);
  NATIVE(vm->fiberClass, "run ", fiber_run1);

  vm->fnClass = defineClass(vm, "Fn");

  NATIVE(vm->fnClass->metaclass, " instantiate", fn_instantiate);
  NATIVE(vm->fnClass->metaclass, "new ", fn_new);

  NATIVE(vm->fnClass, "call", fn_call0);
  NATIVE(vm->fnClass, "call ", fn_call1);
  NATIVE(vm->fnClass, "call  ", fn_call2);
  NATIVE(vm->fnClass, "call   ", fn_call3);
  NATIVE(vm->fnClass, "call    ", fn_call4);
  NATIVE(vm->fnClass, "call     ", fn_call5);
  NATIVE(vm->fnClass, "call      ", fn_call6);
  NATIVE(vm->fnClass, "call       ", fn_call7);
  NATIVE(vm->fnClass, "call        ", fn_call8);
  NATIVE(vm->fnClass, "call         ", fn_call9);
  NATIVE(vm->fnClass, "call          ", fn_call10);
  NATIVE(vm->fnClass, "call           ", fn_call11);
  NATIVE(vm->fnClass, "call            ", fn_call12);
  NATIVE(vm->fnClass, "call             ", fn_call13);
  NATIVE(vm->fnClass, "call              ", fn_call14);
  NATIVE(vm->fnClass, "call               ", fn_call15);
  NATIVE(vm->fnClass, "call                ", fn_call16);
  NATIVE(vm->fnClass, "toString", fn_toString);

  vm->nullClass = defineClass(vm, "Null");
  NATIVE(vm->nullClass, "toString", null_toString);

  vm->numClass = defineClass(vm, "Num");
  NATIVE(vm->numClass, "abs", num_abs);
  NATIVE(vm->numClass, "ceil", num_ceil);
  NATIVE(vm->numClass, "cos", num_cos);
  NATIVE(vm->numClass, "floor", num_floor);
  NATIVE(vm->numClass, "isNan", num_isNan);
  NATIVE(vm->numClass, "sin", num_sin);
  NATIVE(vm->numClass, "sqrt", num_sqrt);
  NATIVE(vm->numClass, "toString", num_toString)
  NATIVE(vm->numClass, "-", num_negate);
  NATIVE(vm->numClass, "- ", num_minus);
  NATIVE(vm->numClass, "+ ", num_plus);
  NATIVE(vm->numClass, "* ", num_multiply);
  NATIVE(vm->numClass, "/ ", num_divide);
  NATIVE(vm->numClass, "% ", num_mod);
  NATIVE(vm->numClass, "< ", num_lt);
  NATIVE(vm->numClass, "> ", num_gt);
  NATIVE(vm->numClass, "<= ", num_lte);
  NATIVE(vm->numClass, ">= ", num_gte);
  NATIVE(vm->numClass, "~", num_bitwiseNot);
  NATIVE(vm->numClass, "& ", num_bitwiseAnd);
  NATIVE(vm->numClass, "| ", num_bitwiseOr);
  NATIVE(vm->numClass, ".. ", num_dotDot);
  NATIVE(vm->numClass, "... ", num_dotDotDot);

  vm->stringClass = defineClass(vm, "String");
  NATIVE(vm->stringClass, "contains ", string_contains);
  NATIVE(vm->stringClass, "count", string_count);
  NATIVE(vm->stringClass, "toString", string_toString)
  NATIVE(vm->stringClass, "+ ", string_plus);
  NATIVE(vm->stringClass, "== ", string_eqeq);
  NATIVE(vm->stringClass, "!= ", string_bangeq);
  NATIVE(vm->stringClass, "[ ]", string_subscript);

  wrenInterpret(vm, "Wren core library", libSource);

  vm->listClass = AS_CLASS(findGlobal(vm, "List"));
  NATIVE(vm->listClass->metaclass, " instantiate", list_instantiate);
  NATIVE(vm->listClass, "add ", list_add);
  NATIVE(vm->listClass, "clear", list_clear);
  NATIVE(vm->listClass, "count", list_count);
  NATIVE(vm->listClass, "insert  ", list_insert);
  NATIVE(vm->listClass, "iterate ", list_iterate);
  NATIVE(vm->listClass, "iteratorValue ", list_iteratorValue);
  NATIVE(vm->listClass, "removeAt ", list_removeAt);
  NATIVE(vm->listClass, "[ ]", list_subscript);
  NATIVE(vm->listClass, "[ ]=", list_subscriptSetter);

  vm->rangeClass = AS_CLASS(findGlobal(vm, "Range"));
  NATIVE(vm->rangeClass, "from", range_from);
  NATIVE(vm->rangeClass, "to", range_to);
  NATIVE(vm->rangeClass, "min", range_min);
  NATIVE(vm->rangeClass, "max", range_max);
  NATIVE(vm->rangeClass, "isInclusive", range_isInclusive);
  NATIVE(vm->rangeClass, "iterate ", range_iterate);
  NATIVE(vm->rangeClass, "iteratorValue ", range_iteratorValue);
  NATIVE(vm->rangeClass, "toString", range_toString);

  // These are defined just so that 0 and -0 are equal, which is specified by
  // IEEE 754 even though they have different bit representations.
  NATIVE(vm->numClass, "== ", num_eqeq);
  NATIVE(vm->numClass, "!= ", num_bangeq);
}