/// <inheritdoc /> public override Expression VisitConstant( fhirExpression.ConstantExpression expression, fhirExpression.SymbolTable scope) { if (expression.ExpressionType == TypeSpecifier.Integer) { return(Expression.Constant((int)expression.Value)); } if (expression.ExpressionType == TypeSpecifier.String) { var propertyName = expression.Value.ToString(); var property = GetProperty(_parameter.Type, propertyName); return(property == null ? (Expression)_parameter : Expression.Property(_parameter, property)); } return(null); }
/// <inheritdoc /> public override Expression VisitFunctionCall( fhirExpression.FunctionCallExpression expression, fhirExpression.SymbolTable scope) { switch (expression) { case fhirExpression.IndexerExpression indexerExpression: { var index = indexerExpression.Index.Accept(this, scope); var property = indexerExpression.Focus.Accept(this, scope); var itemProperty = GetProperty(property.Type, "Item"); return(Expression.MakeIndex(property, itemProperty, new[] { index })); } case fhirExpression.ChildExpression child: { return(child.Arguments.First().Accept(this, scope)); } default: return(_parameter); } }
/// <inheritdoc /> public override Expression VisitVariableRef(fhirExpression.VariableRefExpression expression, fhirExpression.SymbolTable scope) { return(_parameter); }
/// <inheritdoc /> public override Expression VisitNewNodeListInit( fhirExpression.NewNodeListInitExpression expression, fhirExpression.SymbolTable scope) { return(_parameter); }