⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gbx_c_class.c

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 C
📖 第 1 页 / 共 2 页
字号:
  CLASS_DESC_SYMBOL *cds = _current_symbol;  GB_ReturnConstZeroString(TYPE_to_string(cds->desc->property.type)); /* Valable pour tout symbole */END_PROPERTYBEGIN_PROPERTY(symbol_signature)  CLASS_DESC_SYMBOL *cds = _current_symbol;  GB_ReturnConstZeroString(CLASS_DESC_get_signature(cds->desc));END_METHODBEGIN_PROPERTY(symbol_value)  CLASS_DESC *desc = _current_symbol->desc;  if (CLASS_DESC_get_type(desc) != CD_CONSTANT)  {    GB_ReturnNull();    return;  }  if (desc->constant.type == T_STRING)    GB_ReturnConstZeroString(desc->constant.value._string);  else    GB_ReturnPtr(desc->constant.type, (void *)&desc->constant.value);END_PROPERTY/**************************************************************************************************/BEGIN_METHOD(object_get_property, GB_OBJECT object; GB_STRING property)  const char *name;  CLASS_DESC *desc;  CLASS *class;  char type;  void *object = VARG(object);  if (GB_CheckObject(object))    return;  class = OBJECT_class(object);  name = GB_ToZeroString(ARG(property));  desc = get_desc(class, name);  if (!desc)    return;  type = CLASS_DESC_get_type(desc);  if (type == CD_PROPERTY || type == CD_PROPERTY_READ)  {    if (desc->property.native)    {      if (EXEC_call_native(desc->property.read, object, desc->property.type, 0))        return;    }    else    {      EXEC.class = desc->property.class;      EXEC.object = object;      EXEC.drop = FALSE;      EXEC.nparam = 0;      EXEC.native = FALSE;      EXEC.index = (long)desc->property.read;      //EXEC.func = &class->load->func[(long)desc->property.read];      EXEC_function_keep();      TEMP = *RP;      RP->type = T_VOID;    }  }  else if (type == CD_STATIC_PROPERTY || type == CD_STATIC_PROPERTY_READ)    GB_Error((char *)E_STATIC, class->name, name);  else    GB_Error((char *)E_NPROPERTY, class->name, name);END_METHODBEGIN_METHOD(object_set_property, GB_OBJECT object; GB_STRING property; GB_VARIANT value)  const char *name;  CLASS_DESC *desc;  CLASS *class;  char type;  void *object = VARG(object);  VALUE *value = (VALUE *)ARG(value);  if (GB_CheckObject(object))    return;  class = OBJECT_class(object);  name = GB_ToZeroString(ARG(property));  desc = get_desc(class, name);  if (!desc)    return;  type = CLASS_DESC_get_type(desc);  if (type == CD_PROPERTY)  {    if (desc->property.native)    {      VALUE_conv(value, desc->property.type);      if (EXEC_call_native(desc->property.write, object, 0, value))        return;    }    else    {      *SP = *value;      BORROW(SP);      SP++;      EXEC.class = desc->property.class;      EXEC.object = object;      EXEC.drop = FALSE;      EXEC.nparam = 1;      EXEC.native = FALSE;      EXEC.index = (long)desc->property.write;      //EXEC.func = &class->load->func[(long)desc->property.write];      EXEC_function();      /*VALUE_write(value, OBJECT_get_prop_addr(object, desc), desc->property.type);*/    }  }  else if (type == CD_PROPERTY_READ)    GB_Error((char *)E_NWRITE);  else if (type == CD_STATIC_PROPERTY || type == CD_STATIC_PROPERTY_READ)    GB_Error((char *)E_STATIC, class->name, name);  else    GB_Error((char *)E_NPROPERTY, class->name, name);END_METHODBEGIN_METHOD(object_attach, GB_OBJECT object; GB_OBJECT parent; GB_STRING name)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  OBJECT_attach(object, VARG(parent), GB_ToZeroString(ARG(name)));END_METHODBEGIN_METHOD(object_detach, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  OBJECT_detach(object);END_METHODBEGIN_METHOD(object_get_parent, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  GB_ReturnObject(OBJECT_parent(object));END_METHODBEGIN_METHOD(object_class, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  GB_ReturnConstZeroString(OBJECT_class(object)->name);END_METHODBEGIN_METHOD(object_call, GB_OBJECT object; GB_STRING method; GB_VARIANT param[0])  int i;  int np = GB_NParam();  char *name = GB_ToZeroString(ARG(method));  void *object = VARG(object);  GB_FUNCTION func;  CLASS *class;  if (GB_CheckObject(object))    return;  STACK_check(GB_NParam());  for (i = 0; i < np; i++)  {    *SP = SP[-np];    PUSH();  }  class = OBJECT_class(object);  if (GB_GetFunction(&func, object, name, NULL))  {    GB_Error((char *)E_NSYMBOL, name, class->name);    return;  }  GB_Call(&func, np, FALSE);END_METHODBEGIN_METHOD(object_is_valid, GB_OBJECT object)  void *object = VARG(object);  bool res;  if (object == NULL)    res = FALSE;  else    res = !(*((OBJECT *)object)->class->check)(object);  GB_ReturnBoolean(res);END_METHODBEGIN_METHOD(object_lock, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  OBJECT_lock(object, TRUE);END_METHODBEGIN_METHOD(object_unlock, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  OBJECT_lock(object, FALSE);END_METHODBEGIN_METHOD(object_is_locked, GB_OBJECT object)  void *object = VARG(object);  if (GB_CheckObject(object))    return;  GB_ReturnBoolean(OBJECT_is_locked(object));END_METHOD/**************************************************************************************************/PUBLIC GB_DESC NATIVE_Symbol[] ={  GB_DECLARE(".Symbol", 0), GB_VIRTUAL_CLASS(),  GB_PROPERTY_READ("Name", "s", symbol_name),  GB_PROPERTY_READ("Kind", "i", symbol_kind),  GB_PROPERTY_READ("Type", "s", symbol_type),  GB_PROPERTY_READ("ReadOnly", "b", symbol_read_only),  GB_PROPERTY_READ("Hidden", "b", symbol_hidden),  GB_PROPERTY_READ("Signature", "s", symbol_signature),  GB_PROPERTY_READ("Static", "b", symbol_static),  GB_PROPERTY_READ("Value", "v", symbol_value),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_ClassSymbols[] ={  GB_DECLARE(".ClassSymbols", 0), GB_VIRTUAL_CLASS(),  GB_METHOD("_next", "s", class_symbols_next, NULL),  GB_PROPERTY_READ("Count", "i", class_symbols_count),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_Libraries[] ={  GB_DECLARE("Components", 0),  GB_VIRTUAL_CLASS(),  GB_STATIC_METHOD("_next", "Component", library_next, NULL),  GB_STATIC_METHOD("_get", "Component", library_get, "(Name)s"),  GB_STATIC_PROPERTY_READ("Count", "i", library_count),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_Library[] ={  GB_DECLARE("Component", 0),  GB_VIRTUAL_CLASS(),  GB_STATIC_METHOD("_get", "Component", library_get, "(Name)s"),  GB_STATIC_PROPERTY_READ("Path", "s", library_path),  GB_STATIC_METHOD("Load", "Component", library_load, "(Name)s"),  GB_PROPERTY_READ("Name", "s", library_name),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_Classes[] ={  GB_DECLARE("Classes", 0),  GB_VIRTUAL_CLASS(),  GB_STATIC_METHOD("_next", "Class", class_next, NULL),  GB_STATIC_METHOD("_get", "Class", class_get, "(Name)s"),  GB_STATIC_PROPERTY_READ("Count", "i", class_count),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_Class[] ={  GB_DECLARE("Class", 0),  GB_VIRTUAL_CLASS(),  GB_STATIC_METHOD("Load", "Class", class_load, "(Name)s"),  GB_METHOD("_get", ".Symbol", class_symbol_get, "(Name)s"),  GB_PROPERTY_SELF("Symbols", ".ClassSymbols"),  GB_PROPERTY_READ("Name", "s", class_name),  GB_PROPERTY_READ("Hidden", "b", class_hidden),  GB_PROPERTY_READ("Native", "b", class_native),  GB_PROPERTY_READ("Parent", "Class", class_parent),  //GB_PROPERTY_READ("Library", "Library", class_library),  GB_PROPERTY_READ("Count", "i", class_object_count),  GB_PROPERTY_READ("Instance", "o", class_instance),  /*GB_METHOD("New", "Object", class_new, "."),*/  GB_CONSTANT("Variable", "i", 1),  GB_CONSTANT("Property", "i", 2),  GB_CONSTANT("Method", "i", 3),  GB_CONSTANT("Event", "i", 4),  GB_CONSTANT("Constant", "i", 5),  GB_END_DECLARE};PUBLIC GB_DESC NATIVE_Object[] ={  GB_DECLARE("Object", 0),  GB_VIRTUAL_CLASS(),  GB_STATIC_METHOD("GetProperty", "v", object_get_property, "(Object)o(Property)s"),  GB_STATIC_METHOD("SetProperty", NULL, object_set_property, "(Object)o(Property)s(Value)v"),  GB_STATIC_METHOD("Attach", NULL, object_attach, "(Object)o(Parent)o(Name)s"),  GB_STATIC_METHOD("Detach", NULL, object_detach, "(Object)o"),  GB_STATIC_METHOD("Class", "s", object_class, "(Object)o"),  GB_STATIC_METHOD("Type", "s", object_class, "(Object)o"),  GB_STATIC_METHOD("Parent", "o", object_get_parent, "(Object)o"),  GB_STATIC_METHOD("Call", "v", object_call, "(Object)o(Method)s(Parameters)."),  GB_STATIC_METHOD("IsValid", "b", object_is_valid, "(Object)o"),  GB_STATIC_METHOD("Lock", NULL, object_lock, "(Object)o"),  GB_STATIC_METHOD("Unlock", NULL, object_unlock, "(Object)o"),  GB_STATIC_METHOD("IsLocked", "b", object_is_locked, "(Object)o"),  GB_END_DECLARE};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -