private ITemplateType EvalMacro(ITemplateType source)
 {
     if (source == null) return StringType.Empty();
     string obj;
     if (!source.TryConvert(out obj))
     {
         _errors.ErrorMacrosOnlyAcceptStrings(source.UnderlyingType, string.Empty);
         return StringType.Empty();
     }
     var i = new Interpreter.Interpreter(obj, Cache);
     var result = i.Apply(_state);
     _errors.AddRange(result.Errors);
     return StringType.New(result.Output);
 }