Commit d7298194 authored by Patrik Stridvall's avatar Patrik Stridvall Committed by Alexandre Julliard

- Minor API file update.

- Minor bug fixes. - Added new option on --documentation-ordinal (off by default). - Added new option on --documentation-pedantic (off by default).
parent eba8cee5
......@@ -21,6 +21,7 @@ BOOL16 *
COLORREF *
CONTEXT86 *
CURSORICONINFO *
DRAWSTATEPROC16
DWORD *
HHOOK *
INT16 *
......
......@@ -32,6 +32,7 @@ LPCVOID
LPDWORD
LPSTRRET
LPVOID
REFIID
REFGUID
void *
......
......@@ -229,6 +229,7 @@ sub parse_spec_file {
my $options = \${$self->{OPTIONS}};
my $output = \${$self->{OUTPUT}};
my $function_arguments = \%{$self->{FUNCTION_ARGUMENTS}};
my $function_ordinal = \%{$self->{FUNCTION_ORDINAL}};
my $function_calling_convention = \%{$self->{FUNCTION_CALLING_CONVENTION}};
my $function_internal_name = \%{$self->{FUNCTION_INTERNAL_NAME}};
my $function_external_name = \%{$self->{FUNCTION_EXTERNAL_NAME}};
......@@ -283,6 +284,7 @@ sub parse_spec_file {
$$function_internal_name{$external_name} = $internal_name;
$$function_external_name{$internal_name} = $external_name;
$$function_arguments{$internal_name} = $arguments;
$$function_ordinal{$internal_name} = $ordinal;
$$function_calling_convention{$internal_name} = $calling_convention;
if(!$$function_module{$internal_name}) {
$$function_module{$internal_name} = "$module";
......@@ -333,7 +335,11 @@ sub parse_spec_file {
my $internal_name;
if($type eq "win16") {
$internal_name = $external_name . "16";
if($external_name =~ /\d$/) {
$internal_name = $external_name . "_16";
} else {
$internal_name = $external_name . "16";
}
} else {
$internal_name = $external_name;
}
......@@ -616,6 +622,15 @@ sub all_functions_found {
return sort(keys(%$function_found));
}
sub function_ordinal {
my $self = shift;
my $function_ordinal = \%{$self->{FUNCTION_ORDINAL}};
my $name = shift;
return $$function_ordinal{$name};
}
sub function_calling_convention {
my $self = shift;
my $function_calling_convention = \%{$self->{FUNCTION_CALLING_CONVENTION}};
......
......@@ -494,7 +494,46 @@ foreach my $file ($options->c_files) {
}
if($documentation !~ /\b(\Q$external_name\E|$internal_name|$name1|$name2)\b/) {
$output->write("documentation: \\\n$documentation\n");
$output->write("documentation: wrong or missing name \\\n$documentation\n");
}
if($options->documentation_ordinal) {
if(defined($module16)) {
my $ordinal16 = $win16api->function_ordinal($internal_name);
if(!defined($ordinal16)) {
$output->write("function have no ordinal\n");
} else {
my @uc_modules16 = split(/\s*\&\s*/, uc($module16));
foreach my $uc_module16 (@uc_modules16) {
if($documentation !~ /\b$uc_module16\.\Q$ordinal16\E/) {
$output->write("documentation: wrong or missing ordinal " .
"expected (\U$module16\E.$ordinal16)\\\n$documentation\n");
}
}
}
}
if(defined($module32)) {
my $ordinal32 = $win32api->function_ordinal($internal_name);
if(!defined($ordinal32)) {
$output->write("function have no ordinal\n");
} else {
my @uc_modules32 = split(/\s*\&\s*/, uc($module32));
foreach my $uc_module32 (@uc_modules32) {
if($documentation !~ /\b$uc_module32\.\Q$ordinal32\E/) {
$output->write("documentation: wrong or missing ordinal " .
"expected (\U$module32\E.$ordinal32)\\\n$documentation\n");
}
}
}
}
}
if($options->documentation_pedantic) {
if($documentation !~ /^ \*\t\t\w+(?: \(\w+\.(?:\@|\d+)\))+/m) {
$output->write("documentation: pedantic check failed \\\n$documentation\n");
}
}
if($options->documentation_width) {
......
......@@ -17,9 +17,7 @@ sub check_function {
my $module = $winapi->function_module($internal_name);
if($winapi->name eq "win16") {
my $name16 = $internal_name;
$name16 =~ s/16$//;
if($name16 ne $internal_name && $winapi->function_stub($name16)) {
if($winapi->function_stub($internal_name)) {
if($options->implemented) {
$output->write("function implemented but declared as stub in .spec file\n");
}
......
......@@ -72,13 +72,15 @@ my %options = (
},
"debug-messages" => { default => 0, parent => "statements", description => "check for debug messages inconsistances" },
"documentation" => { default => 1, parent => "local", description => "check for documentation inconsistances\n" },
"documentation-pedantic" => { default => 0, parent => "documentation", description => "be pendantic when checking for documentation inconsistances\n" },
"documentation-width" => { default => 0, parent => "documentation", description => "check for documentation width inconsistances\n" },
"documentation-arguments" => { default => 1, parent => "documentation", description => "check for arguments documentation inconsistances\n" },
"documentation-ordinal" => { default => 0, parent => "documentation", description => "check for ordinal documentation inconsistances\n" },
"prototype" => { default => 0, parent => ["local", "headers"], description => "prototype checking" },
"global" => { default => 1, description => "global checking" },
"declared" => { default => 1, parent => "global", description => "declared checking" },
"implemented" => { default => 1, parent => "local", description => "implemented checking" },
"implemented" => { default => 0, parent => "local", description => "implemented checking" },
"implemented-win32" => { default => 0, parent => "implemented", description => "implemented as win32 checking" },
"include" => { default => 1, parent => "global", description => "include checking" },
"headers" => { default => 0, parent => "global", description => "headers checking" },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment