-GDScript support for accessing properties directly

-Added code lookup and code completion support for properties too
This commit is contained in:
Juan Linietsky 2017-01-04 17:37:45 -03:00
parent 76c2e8583e
commit 9e477babb3
9 changed files with 320 additions and 69 deletions

View file

@ -487,7 +487,7 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a
case OPCODE_GET_NAMED: {
CHECK_SPACE(3);
CHECK_SPACE(4);
GET_VARIANT_PTR(src,1);
GET_VARIANT_PTR(dst,3);
@ -519,6 +519,46 @@ Variant GDFunction::call(GDInstance *p_instance, const Variant **p_args, int p_a
#endif
ip+=4;
} continue;
case OPCODE_SET_MEMBER: {
CHECK_SPACE(3);
int indexname = _code_ptr[ip+1];
ERR_BREAK(indexname<0 || indexname>=_global_names_count);
const StringName *index = &_global_names_ptr[indexname];
GET_VARIANT_PTR(src,2);
bool valid;
bool ok = ClassDB::set_property(p_instance->owner,*index,*src,&valid);
#ifdef DEBUG_ENABLED
if (!ok) {
err_text="Internal error setting property: "+String(*index);
break;
} else if (!valid) {
err_text="Error setting property '"+String(*index)+"' with value of type "+Variant::get_type_name(src->get_type())+".";
break;
}
#endif
ip+=3;
} continue;
case OPCODE_GET_MEMBER: {
CHECK_SPACE(3);
int indexname = _code_ptr[ip+1];
ERR_BREAK(indexname<0 || indexname>=_global_names_count);
const StringName *index = &_global_names_ptr[indexname];
GET_VARIANT_PTR(dst,2);
bool ok = ClassDB::get_property(p_instance->owner,*index,*dst);
#ifdef DEBUG_ENABLED
if (!ok) {
err_text="Internal error getting property: "+String(*index);
break;
}
#endif
ip+=3;
} continue;
case OPCODE_ASSIGN: {
CHECK_SPACE(3);