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:

, +
    + { + (: For each Variable in $complexVariables... :) + $complexVariables/
  1. {string(@name)} in {local:location(.)}
  2. + } +
) + + else

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:

, +
    + { + (: For each Variable in $complexVariables... :) + $primitiveVariables/
  1. {string(@name)} in {local:location(.)}
  2. + } +
) + + else

No global variables that are of complex types were found.

+}; + + + + Global variables report for {$fileToOpen} + + + + + { + (: We don't want simple types that are const, but all other types. + One could frown upon const integers and say enums should be used instead, but + let's be gentle. :) + + local:report() + } + +

This report was generated on

+ + +