diff -r 000000000000 -r 1918ee327afb tests/auto/xmlpatterns/queries/reportGlobals.xq --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/auto/xmlpatterns/queries/reportGlobals.xq Mon Jan 11 14:00:40 2010 +0000 @@ -0,0 +1,101 @@ +(: + This query opens a C++ GCC-XML output file, and outputs a report describing the use + of globals variables. + + Run it, by invoking, for instance: + + patternist reportGlobal.xq fileToOpen=globals.gccxml > globals.html + + "fileToOpen=globals.gccxml" binds the string "globals.gccxml" to the variable + "fileToOpen." It identifies the GCC-XML file to open. + +:) +declare variable $inDoc as document-node() := doc($fileToOpen); + +(: Determines whether the type by ID @p typeId is a complex type such as QString. :) +declare function local:isComplexType($typeID as xs:string) as xs:boolean +{ + (: We're being a bit crude here and only checks whether it's a class. We + actually should check whether it has non-synthesized, + constructors, I believe. :) + + exists($inDoc/GCC_XML/Class[@id = $typeID]) + or + (: We also want const-qualified variables. :) + exists($inDoc/GCC_XML/Class[@id = $inDoc/GCC_XML/CvQualifiedType[@id = $typeID]/@type]) +}; + +declare function local:isPrimitive($typeId as xs:string) as xs:boolean +{ + exists($inDoc/GCC_XML/FundamentalType[@id = $typeId]) +}; + +(: Returns a string for human consumption that describes + the location of @p block. :) +declare function local:location($block as element()) as xs:string +{ + concat($inDoc/GCC_XML/File[@id = $block/@file]/@name, " at line ", $block/@line) +}; + +declare function local:report() as element()+ +{ + let $complexVariables as element(Variable)* := $inDoc/GCC_XML/Variable[local:isComplexType(@type)] + return if(exists($complexVariables)) (: Is the length larger than zero? :) + + then (
The following global, complex variables were found:
, +No global variables that are of complex types were found.
+ + , + + (: List primitive, mutable types. :) + let $primitiveVariables as element(Variable)+ := $inDoc/GCC_XML/Variable[local:isPrimitive(@type)] + return if(exists($primitiveVariables)) + + then (The following mutable primitives were found:
, +No global variables that are of complex types were found.
+}; + + + +This report was generated on
+ + +