public bool sgsSetPropertyByName(Variable key, Context ctx, bool isprop, int valueOnStack)
{
SGSClassInfo cinfo = GetClassInfo();
SGSPropInfo propinfo;
if (!cinfo.props.TryGetValue(key, out propinfo) || !propinfo.canWrite)
{
if (backingStore != null)
{
return(backingStore.SetSubItem(key, ctx.StackItem(valueOnStack), isprop));
}
return(false);
}
if (propinfo.parseVarMethod == null)
{
throw new SGSException(RC.ENOTFND, string.Format(
"Property cannot be set - no Context.ParseVar method exists that supports this type ({0})", propinfo.propType));
}
object[] args = new object[] { null, ctx.StackItem(valueOnStack) };
propinfo.parseVarMethod.Invoke(ctx, args);
if (propinfo.info is FieldInfo)
{
(propinfo.info as FieldInfo).SetValue(this, args[0]);
}
else // PropertyInfo
{
(propinfo.info as PropertyInfo).SetValue(this, args[0], null);
}
return(true);
}