Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
DynamicObject.cs
Go to the documentation of this file.
8
9namespace System.Dynamic;
10
12{
13 private sealed class MetaDynamic : DynamicMetaObject
14 {
16
29
30 private static readonly Expression[] s_noArgs = new Expression[0];
31
32 private new DynamicObject Value => (DynamicObject)base.Value;
33
38
40 {
41 return Value.GetDynamicMemberNames();
42 }
43
52
62
71
80
86
96
106
116
125
135
146
156
158 {
159 Expression[] array = new Expression[args.Length];
160 for (int i = 0; i < args.Length; i++)
161 {
163 }
165 }
166
189
191 {
192 if (parameters != s_noArgs)
193 {
194 if (arg1 != null)
195 {
196 return new Expression[3]
197 {
199 arg0,
200 arg1
201 };
202 }
203 return new Expression[2]
204 {
206 arg0
207 };
208 }
209 if (arg1 != null)
210 {
211 return new Expression[2]
212 {
214 arg1
215 };
216 }
217 return new Expression[1] { Constant(binder) };
218 }
219
224
229
236
238 {
239 if (!IsOverridden(method))
240 {
241 return fallbackResult;
242 }
247 if (binder.ReturnType != typeof(object))
248 {
250 string value = Strings.DynamicObjectResultNotAssignable("{0}", Value.GetType(), binder.GetType(), binder.ReturnType);
254 }
255 if (fallbackInvoke != null)
256 {
258 }
260 }
261
263 {
269 return fallback(this, binder, errorSuggestion);
270 }
271
280
281 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2075:UnrecognizedReflectionPattern", Justification = "This is looking if the method is overriden on an instantiated type. An overriden method will never be trimmed if the virtual method exists.")]
283 {
284 MemberInfo[] member = Value.GetType().GetMember(method.Name, MemberTypes.Method, BindingFlags.Instance | BindingFlags.Public);
285 MemberInfo[] array = member;
286 for (int i = 0; i < array.Length; i++)
287 {
289 if (methodInfo.DeclaringType != typeof(DynamicObject) && methodInfo.GetBaseDefinition() == method)
290 {
291 return true;
292 }
293 }
294 return false;
295 }
296
301
303 {
304 if (TypeUtils.AreEquivalent(base.Expression.Type, typeof(DynamicObject)))
305 {
306 return base.Expression;
307 }
309 }
310 }
311
312 protected DynamicObject()
313 {
314 }
315
316 public virtual bool TryGetMember(GetMemberBinder binder, out object? result)
317 {
318 result = null;
319 return false;
320 }
321
322 public virtual bool TrySetMember(SetMemberBinder binder, object? value)
323 {
324 return false;
325 }
326
328 {
329 return false;
330 }
331
332 public virtual bool TryInvokeMember(InvokeMemberBinder binder, object?[]? args, out object? result)
333 {
334 result = null;
335 return false;
336 }
337
338 public virtual bool TryConvert(ConvertBinder binder, out object? result)
339 {
340 result = null;
341 return false;
342 }
343
344 public virtual bool TryCreateInstance(CreateInstanceBinder binder, object?[]? args, [NotNullWhen(true)] out object? result)
345 {
346 result = null;
347 return false;
348 }
349
350 public virtual bool TryInvoke(InvokeBinder binder, object?[]? args, out object? result)
351 {
352 result = null;
353 return false;
354 }
355
356 public virtual bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object? result)
357 {
358 result = null;
359 return false;
360 }
361
362 public virtual bool TryUnaryOperation(UnaryOperationBinder binder, out object? result)
363 {
364 result = null;
365 return false;
366 }
367
368 public virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object? result)
369 {
370 result = null;
371 return false;
372 }
373
374 public virtual bool TrySetIndex(SetIndexBinder binder, object[] indexes, object? value)
375 {
376 return false;
377 }
378
379 public virtual bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes)
380 {
381 return false;
382 }
383
385 {
386 return Array.Empty<string>();
387 }
388
390 {
391 return new MetaDynamic(parameter, this);
392 }
393}
void Add(TKey key, TValue value)
BindingRestrictions Merge(BindingRestrictions restrictions)
static readonly BindingRestrictions Empty
static BindingRestrictions GetTypeRestriction(Expression expression, Type type)
static Expression[] GetExpressions(DynamicMetaObject[] objects)
DynamicMetaObject(Expression expression, BindingRestrictions restrictions)
override DynamicMetaObject FallbackGetMember(DynamicMetaObject target, DynamicMetaObject errorSuggestion)
override DynamicMetaObject BindUnaryOperation(UnaryOperationBinder binder)
override DynamicMetaObject BindDeleteIndex(DeleteIndexBinder binder, DynamicMetaObject[] indexes)
override DynamicMetaObject BindCreateInstance(CreateInstanceBinder binder, DynamicMetaObject[] args)
override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
static Expression[] BuildCallArgs< TBinder >(TBinder binder, Expression[] parameters, Expression arg0, Expression arg1)
override DynamicMetaObject BindBinaryOperation(BinaryOperationBinder binder, DynamicMetaObject arg)
delegate DynamicMetaObject Fallback< TBinder >(MetaDynamic @this, TBinder binder, DynamicMetaObject errorSuggestion)
override DynamicMetaObject BindDeleteMember(DeleteMemberBinder binder)
static readonly Expression[] s_noArgs
DynamicMetaObject CallMethodNoResult< TBinder >(MethodInfo method, TBinder binder, Expression[] args, Fallback< TBinder > fallback)
override IEnumerable< string > GetDynamicMemberNames()
DynamicMetaObject CallMethodReturnLast< TBinder >(MethodInfo method, TBinder binder, Expression[] args, Expression value, Fallback< TBinder > fallback)
static Expression ReferenceArgAssign(Expression callArgs, Expression[] args)
override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
static ConstantExpression Constant< TBinder >(TBinder binder)
override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)
override DynamicMetaObject BindInvoke(InvokeBinder binder, DynamicMetaObject[] args)
MetaDynamic(Expression expression, DynamicObject value)
override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
static ReadOnlyCollection< Expression > GetConvertedArgs(params Expression[] args)
DynamicMetaObject BuildCallMethodWithResult< TBinder >(MethodInfo method, TBinder binder, Expression[] args, DynamicMetaObject fallbackResult, Fallback< TBinder > fallbackInvoke)
override DynamicMetaObject BindConvert(ConvertBinder binder)
DynamicMetaObject CallMethodWithResult< TBinder >(MethodInfo method, TBinder binder, Expression[] args, Fallback< TBinder > fallback)
override DynamicMetaObject BindGetMember(GetMemberBinder binder)
virtual bool TryConvert(ConvertBinder binder, out object? result)
virtual bool TryBinaryOperation(BinaryOperationBinder binder, object arg, out object? result)
virtual IEnumerable< string > GetDynamicMemberNames()
virtual bool TryUnaryOperation(UnaryOperationBinder binder, out object? result)
virtual bool TryInvoke(InvokeBinder binder, object?[]? args, out object? result)
virtual bool TrySetMember(SetMemberBinder binder, object? value)
virtual bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes)
virtual bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object? result)
virtual bool TryDeleteMember(DeleteMemberBinder binder)
virtual bool TryGetMember(GetMemberBinder binder, out object? result)
virtual bool TryCreateInstance(CreateInstanceBinder binder, object?[]? args, [NotNullWhen(true)] out object? result)
virtual bool TryInvokeMember(InvokeMemberBinder binder, object?[]? args, out object? result)
virtual DynamicMetaObject GetMetaObject(Expression parameter)
virtual bool TrySetIndex(SetIndexBinder binder, object[] indexes, object? value)
static void Requires([DoesNotReturnIf(false)] bool precondition, string paramName)
static bool AreEquivalent(Type t1, Type t2)
Definition TypeUtils.cs:664
static ConstantExpression Constant(object? value)
static BlockExpression Block(Expression arg0, Expression arg1)
static MethodCallExpression Call(MethodInfo method)
static BinaryExpression Assign(Expression left, Expression right)
static BinaryExpression OrElse(Expression left, Expression right)
static ParameterExpression Parameter(Type type)
static ConditionalExpression Condition(Expression test, Expression ifTrue, Expression ifFalse)
static TypeBinaryExpression TypeIs(Expression expression, Type type)
static NewExpression New(ConstructorInfo constructor)
static UnaryExpression Convert(Expression expression, Type type)
static BinaryExpression ArrayIndex(Expression array, Expression index)
static NewArrayExpression NewArrayInit(Type type, params Expression[] initializers)
static BinaryExpression Equal(Expression left, Expression right)
static UnaryExpression Throw(Expression? value)
static string DynamicObjectResultNotAssignable(object p0, object p1, object p2, object p3)
Definition Strings.cs:198
static readonly ConstantExpression Null
Definition Utils.cs:62
static ConstantExpression Constant(bool value)
Definition Utils.cs:64
static readonly DefaultExpression Empty
Definition Utils.cs:60
static ? Type GetUnderlyingType(Type nullableType)
Definition Nullable.cs:139