public static bool CanChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT || par.IsNull) { return(true); } else { if (par is ScriptString && Util.IsString(type)) { return(true); } else if (par is ScriptNumber && (IsNumber(type) || IsEnum(type))) { return(true); } else if (par is ScriptBoolean && IsBool(type)) { return(true); } else if (par is ScriptEnum && (par as ScriptEnum).EnumType == type) { return(true); } else if (par is ScriptArray && type.IsArray) { return(true); } else if (par is ScriptUserdata) { if (Util.IsType(type)) { return(true); } else if (type.IsAssignableFrom(((ScriptUserdata)par).ValueType)) { return(true); } } else if (type.IsAssignableFrom(par.GetType())) { return(true); } } return(false); }
public static object ChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT) { if (par is ScriptNumber) { return(ChangeType_impl(par.ObjectValue, type)); } else { return(par.ObjectValue); } } else { if (type.IsAssignableFrom(par.GetType())) { return(par); } else if (par is ScriptNumber) { return(Util.IsEnum(type) ? ToEnum(type, ((ScriptNumber)par).ToLong()) : ChangeType_impl(par.ObjectValue, type)); } else if (par is ScriptArray) { return(ChangeType_impl(par as ScriptArray, type)); } else if (par is ScriptUserdata) { if (Util.IsType(type)) { return(((ScriptUserdata)par).ValueType); } else { return(par.ObjectValue); } } else { return(par.ObjectValue); } } }
public static bool CanChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT) { return(true); } else if (type == TYPE_SBYTE || type == TYPE_BYTE || type == TYPE_SHORT || type == TYPE_USHORT || type == TYPE_INT || type == TYPE_UINT || type == TYPE_FLOAT || type == TYPE_DOUBLE || type == TYPE_DECIMAL || type == TYPE_LONG) { return(par is ScriptNumber); } else if (type == TYPE_BOOL) { return(par is ScriptBoolean); } else if (type.GetTypeInfo().IsEnum) { return(par is ScriptEnum && ((ScriptEnum)par).EnumType == type); } else if (par is ScriptNull) { return(true); } else if (type == TYPE_STRING) { return(par is ScriptString); } else if (type == TYPE_TYPE) { return(par is ScriptUserdata); } else if (TYPE_DELEGATE.GetTypeInfo().IsAssignableFrom(type)) { return((par is ScriptFunction) || (par is ScriptUserdata && (par as ScriptUserdata).ValueType == type)); } else if (par is ScriptUserdata) { return(type.GetTypeInfo().IsAssignableFrom(((ScriptUserdata)par).ValueType)); } else { return(type.GetTypeInfo().IsAssignableFrom(par.GetType())); } }
public static bool CanChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT) { return(true); } else if (IsNumber(type)) { return(par is ScriptNumber); } else if (IsBool(type)) { return(par is ScriptBoolean); } else if (IsEnum(type)) { return(par is ScriptEnum && ((ScriptEnum)par).EnumType == type); } else if (par is ScriptNull) { return(true); } else if (IsString(type)) { return(par is ScriptString); } else if (IsDelegateType(type)) { return(par is ScriptFunction); } else if (IsType(type)) { return(par is ScriptUserdata); } else if (par is ScriptUserdata) { return(type.IsAssignableFrom(((ScriptUserdata)par).ValueType)); } else { return(type.IsAssignableFrom(par.GetType())); } }
public static bool CanChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT) return true; else if (IsNumber(type)) return par is ScriptNumber; else if (IsBool(type)) return par is ScriptBoolean; else if (IsEnum(type)) return par is ScriptEnum && ((ScriptEnum)par).EnumType == type; else if (par is ScriptNull) return true; else if (IsString(type)) return par is ScriptString; else if (IsDelegateType(type)) return (par is ScriptFunction) || (par is ScriptUserdata && (par as ScriptUserdata).ValueType == type); else if (IsType(type)) return par is ScriptUserdata; else if (par is ScriptUserdata) return type.IsAssignableFrom(((ScriptUserdata)par).ValueType); else return type.IsAssignableFrom(par.GetType()); }
public static bool CanChangeType(ScriptObject par, Type type) { if (type == TYPE_OBJECT) return true; else if (type == TYPE_SBYTE || type == TYPE_BYTE || type == TYPE_SHORT || type == TYPE_USHORT || type == TYPE_INT || type == TYPE_UINT || type == TYPE_FLOAT || type == TYPE_DOUBLE || type == TYPE_DECIMAL || type == TYPE_LONG) return par is ScriptNumber; else if (type == TYPE_BOOL) return par is ScriptBoolean; else if (type.GetTypeInfo().IsEnum) return par is ScriptEnum && ((ScriptEnum)par).EnumType == type; else if (par is ScriptNull) return true; else if (type == TYPE_STRING) return par is ScriptString; else if (type == TYPE_TYPE) return par is ScriptUserdata; else if (TYPE_DELEGATE.GetTypeInfo().IsAssignableFrom(type)) return (par is ScriptFunction) || (par is ScriptUserdata && (par as ScriptUserdata).ValueType == type); else if (par is ScriptUserdata) return type.GetTypeInfo().IsAssignableFrom(((ScriptUserdata)par).ValueType); else return type.GetTypeInfo().IsAssignableFrom(par.GetType()); }