public override CodegenExpression Codegen( InternalEventRouterWriterForge writer, CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { var method = parent .MakeChild(typeof(InternalEventRouterWriterArrayElement), GetType(), classScope); var indexExpr = ExprNodeUtilityCodegen.CodegenEvaluator( _indexExpression.Forge, method, typeof(VariableTriggerWriteArrayElementForge), classScope); var rhsExpr = ExprNodeUtilityCodegen.CodegenEvaluator( _rhsExpression.Forge, method, typeof(VariableTriggerWriteArrayElementForge), classScope); var typeWidenerExpr = _widener == null ? ConstantNull() : TypeWidenerFactory.CodegenWidener(_widener, method, GetType(), classScope); method.Block .DeclareVar <InternalEventRouterWriterArrayElement>("desc", NewInstance(typeof(InternalEventRouterWriterArrayElement))) .SetProperty(Ref("desc"), "IndexExpression", indexExpr) .SetProperty(Ref("desc"), "RhsExpression", rhsExpr) .SetProperty(Ref("desc"), "TypeWidener", typeWidenerExpr) .SetProperty(Ref("desc"), "PropertyName", Constant(_propertyName)) .MethodReturn(Ref("desc")); return(LocalMethod(method)); }
private CodegenExpression MakeWideners( TypeWidenerSPI[] wideners, CodegenMethod method, CodegenClassScope classScope) { var init = new CodegenExpression[wideners.Length]; for (var i = 0; i < init.Length; i++) { if (wideners[i] != null) { init[i] = TypeWidenerFactory.CodegenWidener(wideners[i], method, GetType(), classScope); } else { init[i] = ConstantNull(); } } return NewArrayWithInit(typeof(TypeWidener), init); }
public override CodegenExpression Make( CodegenMethodScope parent, SAIFFInitializeSymbol symbols, CodegenClassScope classScope) { CodegenMethod method = parent.MakeChild(typeof(VariableTriggerWriteArrayElement), this.GetType(), classScope); method.Block .DeclareVar <VariableTriggerWriteArrayElement>("desc", NewInstance(typeof(VariableTriggerWriteArrayElement))) .SetProperty(Ref("desc"), "VariableName", Constant(variableName)) .SetProperty( Ref("desc"), "IndexExpression", ExprNodeUtilityCodegen.CodegenEvaluator(indexExpression, method, typeof(VariableTriggerWriteArrayElementForge), classScope)) .SetProperty( Ref("desc"), "TypeWidener", widener == null ? ConstantNull() : TypeWidenerFactory.CodegenWidener(widener, method, this.GetType(), classScope)) .MethodReturn(Ref("desc")); return(LocalMethod(method)); }