static type_t* adjust_type_for_parameter_type(type_t* orig) { type_t* result = get_unqualified_type(orig); if (is_function_type(result)) { result = get_pointer_type(result); } else if (is_array_type(result)) { result = get_pointer_type(array_type_get_element_type(result)); } return result; }
type_t* fortran_update_basic_type_with_type(type_t* type_info, type_t* basic_type) { if (is_error_type(basic_type)) return basic_type; // Many functions drop the reference type, so chek it the first if (is_lvalue_reference_type(type_info)) { return get_lvalue_reference_type( fortran_update_basic_type_with_type(reference_type_get_referenced_type(type_info), basic_type)); } else if (is_pointer_type(type_info)) { return get_pointer_type( fortran_update_basic_type_with_type(pointer_type_get_pointee_type(type_info), basic_type) ); } else if (fortran_is_array_type(type_info)) { return get_array_type_bounds( fortran_update_basic_type_with_type(array_type_get_element_type(type_info), basic_type), array_type_get_array_lower_bound(type_info), array_type_get_array_upper_bound(type_info), array_type_get_array_size_expr_context(type_info)); } else if (is_function_type(type_info)) { return fortran_replace_return_type_of_function_type(type_info, basic_type); } else { return basic_type; } }
Type Type::get_pointer_to() const { type_t* work_type = this->_type_info; if (is_any_reference()) { // We cannot get a pointer to a reference, get the referenced // type and make it pointer work_type = reference_type_get_referenced_type(work_type); } type_t* result_type = get_pointer_type(work_type); return result_type; }
static void init_spu_types(void) { V16QI_type_node = build_vector_type (intQI_type_node, 16); V8HI_type_node = build_vector_type (intHI_type_node, 16); V4SI_type_node = build_vector_type (intSI_type_node, 16); V2DI_type_node = build_vector_type (intDI_type_node, 16); V4SF_type_node = build_vector_type (float_type_node, 16); V2DF_type_node = build_vector_type (double_type_node, 16); unsigned_V16QI_type_node = build_vector_type (unsigned_intQI_type_node, 16); unsigned_V8HI_type_node = build_vector_type (unsigned_intHI_type_node, 16); unsigned_V4SI_type_node = build_vector_type (unsigned_intSI_type_node, 16); unsigned_V2DI_type_node = build_vector_type (unsigned_intDI_type_node, 16); spu_builtin_types[SPU_BTI_QUADWORD] = V16QI_type_node; spu_builtin_types[SPU_BTI_7] = get_signed_int_type(); spu_builtin_types[SPU_BTI_S7] = get_signed_int_type(); spu_builtin_types[SPU_BTI_U7] = get_signed_int_type(); spu_builtin_types[SPU_BTI_S10] = get_signed_int_type(); spu_builtin_types[SPU_BTI_S10_4] = get_signed_int_type(); spu_builtin_types[SPU_BTI_U14] = get_signed_int_type(); spu_builtin_types[SPU_BTI_16] = get_signed_int_type(); spu_builtin_types[SPU_BTI_S16] = get_signed_int_type(); spu_builtin_types[SPU_BTI_S16_2] = get_signed_int_type(); spu_builtin_types[SPU_BTI_U16] = get_signed_int_type(); spu_builtin_types[SPU_BTI_U16_2] = get_signed_int_type(); spu_builtin_types[SPU_BTI_U18] = get_signed_int_type(); spu_builtin_types[SPU_BTI_INTQI] = get_signed_char_type(); spu_builtin_types[SPU_BTI_INTHI] = get_signed_short_int_type(); spu_builtin_types[SPU_BTI_INTSI] = get_signed_int_type(); spu_builtin_types[SPU_BTI_INTDI] = get_signed_long_long_int_type(); spu_builtin_types[SPU_BTI_UINTQI] = get_unsigned_char_type(); spu_builtin_types[SPU_BTI_UINTHI] = get_unsigned_short_int_type(); spu_builtin_types[SPU_BTI_UINTSI] = get_unsigned_int_type(); spu_builtin_types[SPU_BTI_UINTDI] = get_unsigned_long_long_int_type(); spu_builtin_types[SPU_BTI_FLOAT] = get_float_type(); spu_builtin_types[SPU_BTI_DOUBLE] = get_double_type(); spu_builtin_types[SPU_BTI_VOID] = get_void_type(); spu_builtin_types[SPU_BTI_PTR] = get_cv_qualified_type(get_pointer_type(get_void_type()), CV_CONST | CV_VOLATILE); }
/* * Constructs the actual vtbl. * A vtbl is implemented as an array of pointers that point to * the addresses of the dispatched methods. * A method address is kept in a ExpressionValueBlock. * * The VariableDefinition that holds the array is returned. It * must be * - inserted into a DefinitionBlock * - attached to a VariableSymbol. */ VariableDefinition* SingleInheritanceVtbls::get_vtbl( SingleInheritanceClassType* ctype ) { vtbl_t* vtbl = build_vtbls( ctype ); unsigned vtbl_size = vtbl->size(); // DataType* slot_type = vtbl_slot_type( ctype ); // QualifiedType* q_slot_type = _tb->get_qualified_type( slot_type ); DataType* vtbl_type = get_vtbl_type( ctype, vtbl_size ); // _tb->get_array_type( q_slot_type, // IInteger(0), // IInteger(vtbl_size - 1) ); MultiValueBlock* mvb = ::create_multi_value_block( _env, vtbl_type ); for ( unsigned i = 0 ; i < vtbl_size ; i++ ) { InstanceMethodSymbol* msym = (*vtbl)[i]; ::attach_vtbl_slot_number_annote( _env, msym, IInteger(i) ); ProcedureType* mtype = msym->get_type(); PointerType* ptr_to_mtype = get_pointer_type( _env, mtype ); SymbolAddressExpression* sa_expr = ::create_symbol_address_expression( _env, ptr_to_mtype, msym ); msym->set_is_address_taken( true ); ExpressionValueBlock* evb = ::create_expression_value_block( _env, sa_expr ); append_to_multi_value_block( mvb, evb ); } return ::create_variable_definition( _env, NULL, // variable_symbol 0, // @@@ bit_alignment mvb, true // is_static ); }
FieldAccessExpression* NodeBuilder::field_addr(Expression* grp_addr, LString field_name) { GroupType* gtype = to_ref_type<GroupType>(this, grp_addr->get_result_type()); if (gtype == 0) { trash(grp_addr); SUIF_THROW(SuifException(String("Type error: expecting an addr to a group ") + to_id_string(grp_addr))); } FieldSymbol *f = find_field(to<GroupType>(gtype), field_name); if (f == 0) { trash(grp_addr); SUIF_THROW(SuifException(String("Cannot find field <") + field_name + "> in group type " + to_id_string(gtype))); } FieldAccessExpression *res = create_field_access_expression(_suif_env, // to<DataType>(fieldtype), get_pointer_type(f->get_type()), grp_addr, f); return res; }
int buttons_context(const bContext *C, const char *member, bContextDataResult *result) { SpaceButs *sbuts = CTX_wm_space_buts(C); ButsContextPath *path = sbuts ? sbuts->path : NULL; if (!path) return 0; /* here we handle context, getting data from precomputed path */ if (CTX_data_dir(member)) { /* in case of new shading system we skip texture_slot, complex python * UI script logic depends on checking if this is available */ if (sbuts->texuser) CTX_data_dir_set(result, buttons_context_dir + 1); else CTX_data_dir_set(result, buttons_context_dir); return 1; } else if (CTX_data_equals(member, "scene")) { /* Do not return one here if scene not found in path, in this case we want to get default context scene! */ return set_pointer_type(path, result, &RNA_Scene); } else if (CTX_data_equals(member, "world")) { set_pointer_type(path, result, &RNA_World); return 1; } else if (CTX_data_equals(member, "object")) { set_pointer_type(path, result, &RNA_Object); return 1; } else if (CTX_data_equals(member, "mesh")) { set_pointer_type(path, result, &RNA_Mesh); return 1; } else if (CTX_data_equals(member, "armature")) { set_pointer_type(path, result, &RNA_Armature); return 1; } else if (CTX_data_equals(member, "lattice")) { set_pointer_type(path, result, &RNA_Lattice); return 1; } else if (CTX_data_equals(member, "curve")) { set_pointer_type(path, result, &RNA_Curve); return 1; } else if (CTX_data_equals(member, "meta_ball")) { set_pointer_type(path, result, &RNA_MetaBall); return 1; } else if (CTX_data_equals(member, "lamp")) { set_pointer_type(path, result, &RNA_Lamp); return 1; } else if (CTX_data_equals(member, "camera")) { set_pointer_type(path, result, &RNA_Camera); return 1; } else if (CTX_data_equals(member, "speaker")) { set_pointer_type(path, result, &RNA_Speaker); return 1; } else if (CTX_data_equals(member, "material")) { set_pointer_type(path, result, &RNA_Material); return 1; } else if (CTX_data_equals(member, "texture")) { ButsContextTexture *ct = sbuts->texuser; if (ct) { /* new shading system */ CTX_data_pointer_set(result, &ct->texture->id, &RNA_Texture, ct->texture); } else { /* old shading system */ set_pointer_type(path, result, &RNA_Texture); } return 1; } else if (CTX_data_equals(member, "material_slot")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr) { Object *ob = ptr->data; if (ob && OB_TYPE_SUPPORT_MATERIAL(ob->type) && ob->totcol) { /* a valid actcol isn't ensured [#27526] */ int matnr = ob->actcol - 1; if (matnr < 0) matnr = 0; CTX_data_pointer_set(result, &ob->id, &RNA_MaterialSlot, &ob->mat[matnr]); } } return 1; } else if (CTX_data_equals(member, "texture_user")) { ButsContextTexture *ct = sbuts->texuser; if (!ct) return -1; /* old shading system (found but not available) */ if (ct->user && ct->user->ptr.data) { ButsTextureUser *user = ct->user; CTX_data_pointer_set(result, user->ptr.id.data, user->ptr.type, user->ptr.data); } return 1; } else if (CTX_data_equals(member, "texture_user_property")) { ButsContextTexture *ct = sbuts->texuser; if (!ct) return -1; /* old shading system (found but not available) */ if (ct->user && ct->user->ptr.data) { ButsTextureUser *user = ct->user; CTX_data_pointer_set(result, NULL, &RNA_Property, user->prop); } return 1; } else if (CTX_data_equals(member, "texture_node")) { ButsContextTexture *ct = sbuts->texuser; if (ct) { /* new shading system */ if (ct->user && ct->user->node) { CTX_data_pointer_set(result, &ct->user->ntree->id, &RNA_Node, ct->user->node); } return 1; } else { /* old shading system */ PointerRNA *ptr; if ((ptr = get_pointer_type(path, &RNA_Material))) { Material *ma = ptr->data; if (ma) { bNode *node = give_current_material_texture_node(ma); CTX_data_pointer_set(result, &ma->nodetree->id, &RNA_Node, node); } } return 1; } } else if (CTX_data_equals(member, "texture_slot")) { ButsContextTexture *ct = sbuts->texuser; PointerRNA *ptr; /* Particles slots are used in both old and new textures handling. */ if ((ptr = get_pointer_type(path, &RNA_ParticleSystem))) { ParticleSettings *part = ((ParticleSystem *)ptr->data)->part; if (part) CTX_data_pointer_set(result, &part->id, &RNA_ParticleSettingsTextureSlot, part->mtex[(int)part->texact]); } else if (ct) { return 0; /* new shading system */ } else if ((ptr = get_pointer_type(path, &RNA_Material))) { Material *ma = ptr->data; /* if we have a node material, get slot from material in material node */ if (ma && ma->use_nodes && ma->nodetree) { /* if there's an active texture node in the node tree, * then that texture is in context directly, without a texture slot */ if (give_current_material_texture_node(ma)) return 0; ma = give_node_material(ma); if (ma) CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); else return 0; } else if (ma) { CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); } } else if ((ptr = get_pointer_type(path, &RNA_Lamp))) { Lamp *la = ptr->data; if (la) CTX_data_pointer_set(result, &la->id, &RNA_LampTextureSlot, la->mtex[(int)la->texact]); } else if ((ptr = get_pointer_type(path, &RNA_World))) { World *wo = ptr->data; if (wo) CTX_data_pointer_set(result, &wo->id, &RNA_WorldTextureSlot, wo->mtex[(int)wo->texact]); } else if ((ptr = get_pointer_type(path, &RNA_FreestyleLineStyle))) { FreestyleLineStyle *ls = ptr->data; if (ls) CTX_data_pointer_set(result, &ls->id, &RNA_LineStyleTextureSlot, ls->mtex[(int)ls->texact]); } return 1; } else if (CTX_data_equals(member, "bone")) { set_pointer_type(path, result, &RNA_Bone); return 1; } else if (CTX_data_equals(member, "edit_bone")) { set_pointer_type(path, result, &RNA_EditBone); return 1; } else if (CTX_data_equals(member, "pose_bone")) { set_pointer_type(path, result, &RNA_PoseBone); return 1; } else if (CTX_data_equals(member, "particle_system")) { set_pointer_type(path, result, &RNA_ParticleSystem); return 1; } else if (CTX_data_equals(member, "particle_system_editable")) { if (PE_poll((bContext *)C)) set_pointer_type(path, result, &RNA_ParticleSystem); else CTX_data_pointer_set(result, NULL, &RNA_ParticleSystem, NULL); return 1; } else if (CTX_data_equals(member, "particle_settings")) { /* only available when pinned */ PointerRNA *ptr = get_pointer_type(path, &RNA_ParticleSettings); if (ptr && ptr->data) { CTX_data_pointer_set(result, ptr->id.data, &RNA_ParticleSettings, ptr->data); return 1; } else { /* get settings from active particle system instead */ ptr = get_pointer_type(path, &RNA_ParticleSystem); if (ptr && ptr->data) { ParticleSettings *part = ((ParticleSystem *)ptr->data)->part; CTX_data_pointer_set(result, ptr->id.data, &RNA_ParticleSettings, part); return 1; } } set_pointer_type(path, result, &RNA_ParticleSettings); return 1; } else if (CTX_data_equals(member, "cloth")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth); CTX_data_pointer_set(result, &ob->id, &RNA_ClothModifier, md); return 1; } } else if (CTX_data_equals(member, "soft_body")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_Softbody); CTX_data_pointer_set(result, &ob->id, &RNA_SoftBodyModifier, md); return 1; } } else if (CTX_data_equals(member, "fluid")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_Fluidsim); CTX_data_pointer_set(result, &ob->id, &RNA_FluidSimulationModifier, md); return 1; } } else if (CTX_data_equals(member, "smoke")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_Smoke); CTX_data_pointer_set(result, &ob->id, &RNA_SmokeModifier, md); return 1; } } else if (CTX_data_equals(member, "collision")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_Collision); CTX_data_pointer_set(result, &ob->id, &RNA_CollisionModifier, md); return 1; } } else if (CTX_data_equals(member, "brush")) { set_pointer_type(path, result, &RNA_Brush); return 1; } else if (CTX_data_equals(member, "dynamic_paint")) { PointerRNA *ptr = get_pointer_type(path, &RNA_Object); if (ptr && ptr->data) { Object *ob = ptr->data; ModifierData *md = modifiers_findByType(ob, eModifierType_DynamicPaint); CTX_data_pointer_set(result, &ob->id, &RNA_DynamicPaintModifier, md); return 1; } } else if (CTX_data_equals(member, "line_style")) { set_pointer_type(path, result, &RNA_FreestyleLineStyle); return 1; } else { return 0; /* not found */ } return -1; /* found but not available */ }
expr2tc goto_symext::symex_mem( const bool is_malloc, const expr2tc &lhs, const sideeffect2t &code) { if (is_nil_expr(lhs)) return expr2tc(); // ignore // size type2tc type = code.alloctype; expr2tc size = code.size; bool size_is_one = false; if (is_nil_expr(size)) size_is_one=true; else { cur_state->rename(size); mp_integer i; if (is_constant_int2t(size) && to_constant_int2t(size).as_ulong() == 1) size_is_one = true; } if (is_nil_type(type)) type = char_type2(); else if (is_union_type(type)) { // Filter out creation of instantiated unions. They're now all byte arrays. size_is_one = false; type = char_type2(); } unsigned int &dynamic_counter = get_dynamic_counter(); dynamic_counter++; // value symbolt symbol; symbol.base_name = "dynamic_" + i2string(dynamic_counter) + (size_is_one ? "_value" : "_array"); symbol.name = "symex_dynamic::" + id2string(symbol.base_name); symbol.lvalue = true; typet renamedtype = ns.follow(migrate_type_back(type)); if(size_is_one) symbol.type=renamedtype; else { symbol.type=typet(typet::t_array); symbol.type.subtype()=renamedtype; symbol.type.size(migrate_expr_back(size)); } symbol.type.dynamic(true); symbol.mode="C"; new_context.add(symbol); type2tc new_type; migrate_type(symbol.type, new_type); address_of2tc rhs_addrof(get_empty_type(), expr2tc()); if(size_is_one) { rhs_addrof.get()->type = get_pointer_type(pointer_typet(symbol.type)); rhs_addrof.get()->ptr_obj = symbol2tc(new_type, symbol.name); } else { type2tc subtype; migrate_type(symbol.type.subtype(), subtype); expr2tc sym = symbol2tc(new_type, symbol.name); expr2tc idx_val = zero_ulong; expr2tc idx = index2tc(subtype, sym, idx_val); rhs_addrof.get()->type = get_pointer_type(pointer_typet(symbol.type.subtype())); rhs_addrof.get()->ptr_obj = idx; } expr2tc rhs = rhs_addrof; expr2tc ptr_rhs = rhs; if (!options.get_bool_option("force-malloc-success")) { symbol2tc null_sym(rhs->type, "NULL"); sideeffect2tc choice(get_bool_type(), expr2tc(), expr2tc(), std::vector<expr2tc>(), type2tc(), sideeffect2t::nondet); rhs = if2tc(rhs->type, choice, rhs, null_sym); replace_nondet(rhs); ptr_rhs = rhs; } if (rhs->type != lhs->type) rhs = typecast2tc(lhs->type, rhs); cur_state->rename(rhs); expr2tc rhs_copy(rhs); guardt guard; symex_assign_rec(lhs, rhs, guard); pointer_object2tc ptr_obj(pointer_type2(), ptr_rhs); track_new_pointer(ptr_obj, new_type); dynamic_memory.push_back(allocated_obj(rhs_copy, cur_state->guard, !is_malloc)); return rhs_addrof->ptr_obj; }
int buttons_context(const bContext *C, const char *member, bContextDataResult *result) { SpaceButs *sbuts= CTX_wm_space_buts(C); ButsContextPath *path= sbuts?sbuts->path:NULL; if(!path) return 0; /* here we handle context, getting data from precomputed path */ if(CTX_data_dir(member)) { CTX_data_dir_set(result, buttons_context_dir); return 1; } else if(CTX_data_equals(member, "world")) { set_pointer_type(path, result, &RNA_World); return 1; } else if(CTX_data_equals(member, "object")) { set_pointer_type(path, result, &RNA_Object); return 1; } else if(CTX_data_equals(member, "mesh")) { set_pointer_type(path, result, &RNA_Mesh); return 1; } else if(CTX_data_equals(member, "armature")) { set_pointer_type(path, result, &RNA_Armature); return 1; } else if(CTX_data_equals(member, "lattice")) { set_pointer_type(path, result, &RNA_Lattice); return 1; } else if(CTX_data_equals(member, "curve")) { set_pointer_type(path, result, &RNA_Curve); return 1; } else if(CTX_data_equals(member, "meta_ball")) { set_pointer_type(path, result, &RNA_MetaBall); return 1; } else if(CTX_data_equals(member, "lamp")) { set_pointer_type(path, result, &RNA_Lamp); return 1; } else if(CTX_data_equals(member, "camera")) { set_pointer_type(path, result, &RNA_Camera); return 1; } else if(CTX_data_equals(member, "speaker")) { set_pointer_type(path, result, &RNA_Speaker); return 1; } else if(CTX_data_equals(member, "material")) { set_pointer_type(path, result, &RNA_Material); return 1; } else if(CTX_data_equals(member, "texture")) { set_pointer_type(path, result, &RNA_Texture); return 1; } else if(CTX_data_equals(member, "material_slot")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr) { Object *ob= ptr->data; if(ob && ob->type && (ob->type<OB_LAMP) && ob->totcol) CTX_data_pointer_set(result, &ob->id, &RNA_MaterialSlot, ob->mat+ob->actcol-1); } return 1; } else if(CTX_data_equals(member, "texture_node")) { PointerRNA *ptr; if((ptr=get_pointer_type(path, &RNA_Material))) { Material *ma= ptr->data; if(ma) { bNode *node= give_current_material_texture_node(ma); CTX_data_pointer_set(result, &ma->id, &RNA_Node, node); } } return 1; } else if(CTX_data_equals(member, "texture_slot")) { PointerRNA *ptr; if((ptr=get_pointer_type(path, &RNA_Material))) { Material *ma= ptr->data; /* if we have a node material, get slot from material in material node */ if(ma && ma->use_nodes && ma->nodetree) { /* if there's an active texture node in the node tree, * then that texture is in context directly, without a texture slot */ if (give_current_material_texture_node(ma)) return 0; ma= give_node_material(ma); if (ma) CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); else return 0; } else if(ma) { CTX_data_pointer_set(result, &ma->id, &RNA_MaterialTextureSlot, ma->mtex[(int)ma->texact]); } } else if((ptr=get_pointer_type(path, &RNA_Lamp))) { Lamp *la= ptr->data; if(la) CTX_data_pointer_set(result, &la->id, &RNA_LampTextureSlot, la->mtex[(int)la->texact]); } else if((ptr=get_pointer_type(path, &RNA_World))) { World *wo= ptr->data; if(wo) CTX_data_pointer_set(result, &wo->id, &RNA_WorldTextureSlot, wo->mtex[(int)wo->texact]); } else if((ptr=get_pointer_type(path, &RNA_Brush))) { /* how to get this into context? */ Brush *br= ptr->data; if(br) CTX_data_pointer_set(result, &br->id, &RNA_BrushTextureSlot, &br->mtex); } else if((ptr=get_pointer_type(path, &RNA_ParticleSystem))) { ParticleSettings *part= ((ParticleSystem *)ptr->data)->part; if(part) CTX_data_pointer_set(result, &part->id, &RNA_ParticleSettingsTextureSlot, part->mtex[(int)part->texact]); } return 1; } else if(CTX_data_equals(member, "bone")) { set_pointer_type(path, result, &RNA_Bone); return 1; } else if(CTX_data_equals(member, "edit_bone")) { set_pointer_type(path, result, &RNA_EditBone); return 1; } else if(CTX_data_equals(member, "pose_bone")) { set_pointer_type(path, result, &RNA_PoseBone); return 1; } else if(CTX_data_equals(member, "particle_system")) { set_pointer_type(path, result, &RNA_ParticleSystem); return 1; } else if(CTX_data_equals(member, "particle_system_editable")) { if(PE_poll((bContext*)C)) set_pointer_type(path, result, &RNA_ParticleSystem); else CTX_data_pointer_set(result, NULL, &RNA_ParticleSystem, NULL); return 1; } else if(CTX_data_equals(member, "cloth")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr && ptr->data) { Object *ob= ptr->data; ModifierData *md= modifiers_findByType(ob, eModifierType_Cloth); CTX_data_pointer_set(result, &ob->id, &RNA_ClothModifier, md); return 1; } } else if(CTX_data_equals(member, "soft_body")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr && ptr->data) { Object *ob= ptr->data; ModifierData *md= modifiers_findByType(ob, eModifierType_Softbody); CTX_data_pointer_set(result, &ob->id, &RNA_SoftBodyModifier, md); return 1; } } else if(CTX_data_equals(member, "fluid")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr && ptr->data) { Object *ob= ptr->data; ModifierData *md= modifiers_findByType(ob, eModifierType_Fluidsim); CTX_data_pointer_set(result, &ob->id, &RNA_FluidSimulationModifier, md); return 1; } } else if(CTX_data_equals(member, "smoke")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr && ptr->data) { Object *ob= ptr->data; ModifierData *md= modifiers_findByType(ob, eModifierType_Smoke); CTX_data_pointer_set(result, &ob->id, &RNA_SmokeModifier, md); return 1; } } else if(CTX_data_equals(member, "collision")) { PointerRNA *ptr= get_pointer_type(path, &RNA_Object); if(ptr && ptr->data) { Object *ob= ptr->data; ModifierData *md= modifiers_findByType(ob, eModifierType_Collision); CTX_data_pointer_set(result, &ob->id, &RNA_CollisionModifier, md); return 1; } } else if(CTX_data_equals(member, "brush")) { set_pointer_type(path, result, &RNA_Brush); return 1; } else { return 0; /* not found */ } return -1; /* found but not available */ }
SymbolAddressExpression* NodeBuilder::sym_addr(Symbol* sym) { PointerType* ptype = get_pointer_type(sym->get_type()); return create_symbol_address_expression(_suif_env, ptype, sym); }