Example #1
0
        /// <summary>
        /// Bind a macro parameter of any type to a pattern of the same type
        /// </summary>
        /// <param name="valueAccess"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public GMacMacroBinding BindToTreePattern(AstDatastoreValueAccess valueAccess, IGMacTypedBinding pattern)
        {
            if (valueAccess.IsNullOrInvalid())
            {
                throw new ArgumentNullException(nameof(valueAccess));
            }

            if (valueAccess.AssociatedValueAccess.ExpressionType.IsSameType(pattern.GMacType.AssociatedType) == false)
            {
                throw new InvalidOperationException(
                          $"Specified macro parameter {valueAccess.ValueAccessName} of type {valueAccess.GMacTypeSignature} is not of same type {pattern.GMacType.GMacTypeSignature} as given pattern"
                          );
            }

            var assignmentsList = valueAccess.AssociatedValueAccess.ExpandAndAssignAll(pattern);

            foreach (var assignment in assignmentsList)
            {
                BindScalarToPattern(
                    assignment.Item1.ToAstDatastoreValueAccess(),
                    assignment.Item2
                    );
            }

            return(this);
        }
Example #2
0
 /// <summary>
 /// Bind a macro parameter of any type to a pattern of the same type
 /// </summary>
 /// <param name="valueAccessName"></param>
 /// <param name="pattern"></param>
 /// <returns></returns>
 public GMacMacroBinding BindToTreePattern(string valueAccessName, IGMacTypedBinding pattern)
 {
     return(BindToTreePattern(ToValueAccess(valueAccessName), pattern));
 }