コード例 #1
0
 /// <summary>
 /// Creates type wrapper for a generic, such as List[str]
 /// </summary>
 /// <returns></returns>
 public override IAnalysisSet GetIndex(Node node, AnalysisUnit unit, IAnalysisSet index)
 {
     if (node is IndexExpression ie)
     {
         return(unit.InterpreterScope.GetOrMakeNodeValue(node, NodeValueKind.TypeAnnotation, n => {
             // Use annotation converter and reparse the index
             var exprs = new List <Expression>();
             if (ie.Index is SequenceExpression te)
             {
                 exprs.AddRange(te.Items.MaybeEnumerate());
             }
             else
             {
                 exprs.Add(ie.Index);
             }
             var newArgs = new List <IAnalysisSet>();
             var eval = new ExpressionEvaluatorAnnotationConverter(
                 new ExpressionEvaluator(unit),
                 node,
                 unit,
                 returnInternalTypes: true
                 );
             foreach (var type in exprs.Select(e => new TypeAnnotation(unit.State.LanguageVersion, e)))
             {
                 newArgs.Add(type.GetValue(eval) ?? AnalysisSet.Empty);
             }
             return new TypingTypeInfo(_typeName, _innerValue, newArgs);
         }));
     }
     return(this);
 }
コード例 #2
0
 public override IAnalysisSet Call(Node node, AnalysisUnit unit, IAnalysisSet[] args, NameExpression[] keywordArgNames)
 {
     if ((_typeArgs == null || !_typeArgs.Any()) && node is CallExpression ce)
     {
         return(unit.InterpreterScope.GetOrMakeNodeValue(node, NodeValueKind.TypeAnnotation, n => {
             // Use annotation converter and reparse the arguments
             var newArgs = new List <IAnalysisSet>();
             var eval = new ExpressionEvaluatorAnnotationConverter(
                 new ExpressionEvaluator(unit),
                 node,
                 unit,
                 returnInternalTypes: true
                 );
             foreach (var type in ce.Args.MaybeEnumerate().Where(e => e?.Expression != null).Select(e => new TypeAnnotation(unit.State.LanguageVersion, e.Expression)))
             {
                 newArgs.Add(type.GetValue(eval) ?? AnalysisSet.Empty);
             }
             return new TypingTypeInfo(_typeName, _innerValue, newArgs);
         }));
     }
     return(this);
 }