@@ -580,82 +580,58 @@ declare %private function test:xdm-value-from-annotation-value($annotation-value
580
580
)
581
581
};
582
582
583
- declare %private function test:cast ($targs as element (value )*, $farg as element (argument)) {
584
- for $targ in $targs
585
- let $varg := test:xdm-value-from-annotation-value ($targ)
583
+ declare %private function test:cast (
584
+ $annotation-arg-values as element (value )*,
585
+ $function-argument as element (argument)
586
+ ) {
587
+ for $annotation-arg-value in $annotation-arg-values
588
+ let $literal-value := test:xdm-value-from-annotation-value ($annotation-arg-value)
586
589
return
587
- switch (string ($farg/@type ))
588
- case "xs:string"
589
- return
590
- if ($varg instance of xs:string)
591
- then
592
- $varg
593
- else
594
- string ($varg)
595
-
596
- case "xs:integer"
597
- return
598
- if ($varg instance of xs:integer)
599
- then
600
- $varg
601
- else
602
- xs:integer ($varg)
603
-
604
- case "xs:int"
605
- return
606
- xs:int ($varg)
607
-
608
- case "xs:decimal"
609
- return
610
- if ($varg instance of xs:decimal)
611
- then
612
- $varg
613
- else
614
- xs:decimal ($varg)
615
-
616
- case "xs:float"
617
- return
618
- xs:float ($varg)
619
-
620
- case "xs:double"
621
- return
622
- if ($varg instance of xs:decimal)
623
- then
624
- $varg
625
- else
626
- xs:double ($varg)
627
-
628
- case "xs:date"
629
- return
630
- xs:date ($varg)
631
-
632
- case "xs:dateTimeStamp"
633
- return
634
- xs:dateTimeStamp ($varg)
635
-
636
- case "xs:dateTime"
637
- return
638
- xs:dateTime ($varg)
639
-
640
- case "xs:time"
641
- return
642
- xs:time ($varg)
643
-
644
- case "element()"
645
- return
646
- fn:parse-xml ($varg)/element ()
647
-
648
- case "text()"
649
- return
650
- if ($varg instance of xs:string)
651
- then
652
- text { $varg }
653
- else
654
- text { xs:string ($varg) }
655
-
656
- default
657
- return
658
- $varg
590
+ switch (string ($function-argument/@type ))
591
+ case "xs:string" return
592
+ if ($literal-value instance of xs:string)
593
+ then $literal-value
594
+ else xs:string ($literal-value)
595
+
596
+ case "xs:integer" return
597
+ if ($literal-value instance of xs:integer)
598
+ then $literal-value
599
+ else xs:integer ($literal-value)
600
+
601
+ case "xs:decimal" return
602
+ if ($literal-value instance of xs:decimal)
603
+ then $literal-value
604
+ else xs:decimal ($literal-value)
605
+
606
+ case "xs:double" return
607
+ if ($literal-value instance of xs:double)
608
+ then $literal-value
609
+ else xs:double ($literal-value)
610
+
611
+ case "xs:boolean" return xs:boolean ($literal-value)
612
+ case "xs:anyURI" return xs:anyURI ($literal-value)
613
+
614
+ case "xs:NCName" return xs:NCName ($literal-value)
615
+ case "xs:QName" return xs:QName ($literal-value)
616
+
617
+ case "xs:numeric" return xs:numeric ($literal-value)
618
+ case "xs:int" return xs:int ($literal-value)
619
+ case "xs:positiveInteger" return xs:positiveInteger ($literal-value)
620
+ case "xs:negativeInteger" return xs:negativeInteger ($literal-value)
621
+ case "xs:float" return xs:float ($literal-value)
622
+
623
+ case "xs:time" return xs:time ($literal-value)
624
+ case "xs:date" return xs:date ($literal-value)
625
+ case "xs:dateTime" return xs:dateTime ($literal-value)
626
+ case "xs:dateTimeStamp" return xs:dateTimeStamp ($literal-value)
627
+
628
+ case "xs:duration" return xs:duration ($literal-value)
629
+ case "xs:yearMonthDuration" return xs:yearMonthDuration ($literal-value)
630
+ case "xs:dayTimeDuration" return xs:dayTimeDuration ($literal-value)
631
+
632
+ case "text()" return text { $literal-value }
633
+ case "element()" return parse-xml ($literal-value)/element ()
634
+ default return $literal-value
659
635
};
660
636
661
637
declare function test:apply ($func as function (*), $meta as element (function ), $args as item ()*) {
@@ -1005,30 +981,33 @@ declare %private function test:cast-to-type($value as item(), $result as item())
1005
981
typeswitch ($result)
1006
982
case node () return
1007
983
parse-xml ("<r>" || $value || "</r>" )/r/node ()
1008
- case xs:integer return
1009
- xs:integer ($value)
1010
- case xs:int return
1011
- xs:int ($value)
1012
- case xs:long return
1013
- xs:long ($value)
1014
- case xs:decimal return
1015
- xs:decimal ($value)
1016
- case xs:double return
1017
- xs:double ($value)
1018
- case xs:float return
1019
- xs:float ($value)
1020
- case xs:date return
1021
- xs:date ($value)
1022
- case xs:dateTime return
1023
- xs:dateTime ($value)
1024
- case xs:time return
1025
- xs:time ($value)
1026
- case xs:boolean return
1027
- xs:boolean ($value)
1028
- case xs:anyURI return
1029
- xs:anyURI ($value)
1030
- default return
1031
- string ($value)
984
+
985
+ case xs:integer return xs:integer ($value)
986
+ case xs:positiveInteger return xs:positiveInteger ($value)
987
+ case xs:negativeInteger return xs:negativeInteger ($value)
988
+ case xs:int return xs:int ($value)
989
+ case xs:long return xs:long ($value)
990
+ case xs:decimal return xs:decimal ($value)
991
+ case xs:double return xs:double ($value)
992
+ case xs:float return xs:float ($value)
993
+ case xs:numeric return xs:numeric ($value)
994
+
995
+ case xs:date return xs:date ($value)
996
+ case xs:dateTime return xs:dateTime ($value)
997
+ case xs:time return xs:time ($value)
998
+
999
+ case xs:duration return xs:duration ($value)
1000
+ case xs:yearMonthDuration return xs:yearMonthDuration ($value)
1001
+ case xs:dayTimeDuration return xs:dayTimeDuration ($value)
1002
+
1003
+ case xs:boolean return xs:boolean ($value)
1004
+
1005
+ case xs:anyURI return xs:anyURI ($value)
1006
+
1007
+ case xs:NCName return xs:NCName ($value)
1008
+ case xs:QName return xs:QName ($value)
1009
+
1010
+ default return string ($value)
1032
1011
};
1033
1012
1034
1013
(: Helper functions to be used by test modules :)
0 commit comments