private BindGetMemberWorker ( DynamicMetaObjectBinder binder, string name, DynamicMetaObject codeContext ) : DynamicMetaObject | ||
binder | DynamicMetaObjectBinder | |
name | string | |
codeContext | DynamicMetaObject | |
return | DynamicMetaObject |
private DynamicMetaObject BindGetMemberWorker(DynamicMetaObjectBinder binder, string name, DynamicMetaObject codeContext) {
ParameterExpression tmp = Expression.Parameter(typeof(object));
// first get the default binder value
DynamicMetaObject fallback = FallbackGetMember(binder, this, codeContext);
// then fallback w/ an error suggestion that does a late bound lookup.
return FallbackGetMember(
binder,
this,
codeContext,
new DynamicMetaObject(
Ast.Block(
new[] { tmp },
Ast.Condition(
Ast.NotEqual(
Ast.Assign(
tmp,
Ast.Call(
typeof(PythonOps).GetMethod("PythonFunctionGetMember"),
AstUtils.Convert(
Expression,
typeof(PythonFunction)
),
Expression.Constant(name)
)
),
Ast.Constant(OperationFailed.Value)
),
tmp,
AstUtils.Convert(fallback.Expression, typeof(object))
)
),
BindingRestrictions.GetTypeRestriction(Expression, typeof(PythonFunction)).Merge(fallback.Restrictions)
)
);
}