Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ParseMethod()

AstNode MS.Internal.Xml.XPath.XPathParser.ParseMethod ( AstNode qyInput)
inlineprivate

Definition at line 474 of file XPathParser.cs.

475 {
477 string name = _scanner.Name;
478 string prefix = _scanner.Prefix;
479 PassToken(XPathScanner.LexKind.Name);
480 PassToken(XPathScanner.LexKind.LParens);
481 if (_scanner.Kind != XPathScanner.LexKind.RParens)
482 {
483 while (true)
484 {
485 list.Add(ParseExpression(qyInput));
486 if (_scanner.Kind == XPathScanner.LexKind.RParens)
487 {
488 break;
489 }
490 PassToken(XPathScanner.LexKind.Comma);
491 }
492 }
493 PassToken(XPathScanner.LexKind.RParens);
494 if (prefix.Length == 0 && s_functionTable.TryGetValue(name, out var value))
495 {
496 int num = list.Count;
497 if (num < value.Minargs)
498 {
500 }
501 if (value.FType == Function.FunctionType.FuncConcat)
502 {
503 for (int i = 0; i < num; i++)
504 {
505 AstNode astNode = list[i];
506 if (astNode.ReturnType != XPathResultType.String)
507 {
508 astNode = new Function(Function.FunctionType.FuncString, astNode);
509 }
510 list[i] = astNode;
511 }
512 }
513 else
514 {
515 if (value.Maxargs < num)
516 {
518 }
519 if (value.ArgTypes.Length < num)
520 {
521 num = value.ArgTypes.Length;
522 }
523 for (int j = 0; j < num; j++)
524 {
525 AstNode astNode2 = list[j];
526 if (value.ArgTypes[j] == XPathResultType.Any || value.ArgTypes[j] == astNode2.ReturnType)
527 {
528 continue;
529 }
530 switch (value.ArgTypes[j])
531 {
532 case XPathResultType.NodeSet:
533 if (!(astNode2 is Variable) && (!(astNode2 is Function) || astNode2.ReturnType != XPathResultType.Any))
534 {
536 }
537 break;
538 case XPathResultType.String:
539 astNode2 = new Function(Function.FunctionType.FuncString, astNode2);
540 break;
541 case XPathResultType.Number:
542 astNode2 = new Function(Function.FunctionType.FuncNumber, astNode2);
543 break;
544 case XPathResultType.Boolean:
545 astNode2 = new Function(Function.FunctionType.FuncBoolean, astNode2);
546 break;
547 }
548 list[j] = astNode2;
549 }
550 }
551 return new Function(value.FType, list);
552 }
553 return new Function(prefix, name, list);
554 }
static string Xp_InvalidNumArgs
Definition SR.cs:1238
static string Xp_InvalidArgumentType
Definition SR.cs:1236
Definition SR.cs:7
static XPathException Create(string res)
static readonly Dictionary< string, ParamInfo > s_functionTable
void PassToken(XPathScanner.LexKind t)
AstNode ParseExpression(AstNode qyInput)

References MS.Internal.Xml.XPath.XPathParser._scanner, System.Xml.XPath.XPathException.Create(), MS.Internal.Xml.XPath.XPathScanner.Kind, System.list, MS.Internal.Xml.XPath.XPathScanner.Name, MS.Internal.Xml.XPath.XPathParser.ParseExpression(), MS.Internal.Xml.XPath.XPathParser.PassToken(), System.prefix, MS.Internal.Xml.XPath.XPathScanner.Prefix, MS.Internal.Xml.XPath.XPathParser.s_functionTable, MS.Internal.Xml.XPath.XPathScanner.SourceText, System.value, System.SR.Xp_InvalidArgumentType, and System.SR.Xp_InvalidNumArgs.

Referenced by MS.Internal.Xml.XPath.XPathParser.ParsePrimaryExpr().