public InstanceVariableDeclaration(NameBindingScope scope, ESSymbol name) : base(scope, name) { var namedSlotsObject = Expression.Convert(Scope.SelfParameter, TypeGuru.esNamedSlotsObjectType); namedSlots = Expression.Field(namedSlotsObject, "namedSlots"); var statusFlags = Expression.Field(namedSlotsObject, "statusFlags"); isMutable = Expression.Equal(Expression.And(statusFlags, mutabilityFlagBitConstant), zeroConstant); }
public override Expression Bind(Object[] args, ReadOnlyCollection <ParameterExpression> parameters, LabelTarget returnLabel) { Expression testRuleValidityExpression = null; Expression getVariableValueExpression = null; doAllButFinalBinding( args, (BindingHandle handle) => { testRuleValidityExpression = Expression.Constant(true); var handleConstant = Expression.Constant(handle); getVariableValueExpression = handle.IsDirect ? Expression.Field(handleConstant, TypeGuru.directBindingHandleType, "value") : Expression.Property(handleConstant, "Value"); }); return(Expression .IfThen( testRuleValidityExpression, Expression.Return(returnLabel, getVariableValueExpression))); }
public override Expression asCLRSetValueExpression(Expression newValue) { return(Expression.Invoke(Expression.Field(setVariableCallSite, CodeGenerationContext.callSiteType[1], "Target"), setVariableCallSite, Scope.SelfParameter, newValue)); }
public override Expression asCLRGetValueExpression() { return(Expression.Invoke(Expression.Field(getVariableCallSite, CodeGenerationContext.callSiteType[0], "Target"), getVariableCallSite, Scope.SelfParameter)); }