public static ObjNative newNative(NativeFn function) { ObjNative native = (ObjNative)ALLOCATE_OBJ(ObjType.OBJ_NATIVE); native.function = function; return(native); }
// Generics, <T>, doesn't seem to work with classes? static Obj allocateObject(int size, ObjType type) { Obj object_ = null; switch (type) { case ObjType.OBJ_STRING: object_ = new ObjString(); break; case ObjType.OBJ_FUNCTION: object_ = new ObjFunction(); break; case ObjType.OBJ_INSTANCE: object_ = new ObjInstance(); break; case ObjType.OBJ_NATIVE: object_ = new ObjNative(); break; case ObjType.OBJ_CLOSURE: object_ = new ObjClosure(); break; case ObjType.OBJ_UPVALUE: object_ = new ObjUpvalue(); break; case ObjType.OBJ_CLASS: object_ = new ObjClass(); break; case ObjType.OBJ_BOUND_METHOD: object_ = new ObjBoundMethod(); break; default: object_ = null; // clox: (Obj*)reallocate(NULL, 0, size); break; } object_.type = type; object_.isMarked = false; object_.next = VM.vm.objects; VM.vm.objects = object_; #if DEBUG_LOG_GC System.Console.WriteLine("{0} allocate {1} for {2}", object_._mem_id.ToString(), size.ToString(), type.ToString()); #endif return(object_); }