private bool MakeGetMemberRule(OldGetMemberAction action, CodeContext context, RuleBuilder rule) { object value; if (TryGetValue(action.Name, out value)) { Debug.Assert(value is MemberTracker); MemberTracker memValue = (MemberTracker)value; rule.MakeTest(typeof(NamespaceTracker)); rule.AddTest( Expression.Equal( Expression.Property( Expression.Convert(rule.Parameters[0], typeof(NamespaceTracker)), typeof(NamespaceTracker).GetProperty("Id") ), Expression.Constant(Id) ) ); Expression target = context.LanguageContext.Binder.ReturnMemberTracker(memValue.DeclaringType, memValue); rule.Target = rule.MakeReturn(context.LanguageContext.Binder, target); return(true); } return(false); }
private readonly RuleBuilder _rule; // the rule we're building and returning public DoOperationBinderHelper(CodeContext context, OldDoOperationAction action, object[] args, RuleBuilder rule) : base(context, action) { _args = args; _types = CompilerHelpers.GetTypes(args); _rule = rule; _rule.MakeTest(_types); }
// This can produce a IsCallable rule that returns the immutable constant isCallable. // Beware that objects can have a mutable callable property. Eg, in Python, assign or delete the __call__ attribute. public static bool MakeIsCallableRule(CodeContext context, object self, bool isCallable, RuleBuilder rule) { rule.MakeTest(CompilerHelpers.GetType(self)); rule.Target = rule.MakeReturn( context.LanguageContext.Binder, Ast.Constant(isCallable) ); return true; }
// This can produce a IsCallable rule that returns the immutable constant isCallable. // Beware that objects can have a mutable callable property. Eg, in Python, assign or delete the __call__ attribute. public static bool MakeIsCallableRule(CodeContext context, object self, bool isCallable, RuleBuilder rule) { rule.MakeTest(CompilerHelpers.GetType(self)); rule.Target = rule.MakeReturn( context.LanguageContext.Binder, Ast.Constant(isCallable) ); return(true); }
private bool MakeGetMemberRule(OldGetMemberAction action, CodeContext context, RuleBuilder rule) { object value; if (TryGetValue(action.Name, out value)) { Debug.Assert(value is MemberTracker); MemberTracker memValue = (MemberTracker)value; rule.MakeTest(typeof(NamespaceTracker)); rule.AddTest( Expression.Equal( Expression.Property( Expression.Convert(rule.Parameters[0], typeof(NamespaceTracker)), typeof(NamespaceTracker).GetProperty("Id") ), AstUtils.Constant(Id) ) ); Expression target = context.LanguageContext.Binder.ReturnMemberTracker(memValue.DeclaringType, memValue); rule.Target = rule.MakeReturn(context.LanguageContext.Binder, target); return true; } return false; }