blob: 10863872febbd6f99636faa26204bf231e96cd16 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
###################################################
# check that a parsed IDL file is valid
# Copyright tridge@samba.org 2003
# released under the GNU GPL
package IdlValidator;
use strict;
use Data::Dumper;
#####################################################################
# signal a fatal validation error
sub fatal($)
{
my $s = shift;
print "$s\n";
die "IDL is not valid\n";
}
#####################################################################
# parse a struct
sub ValidStruct($)
{
my($struct) = shift;
foreach my $e (@{$struct->{ELEMENTS}}) {
}
}
#####################################################################
# parse a union
sub ValidUnion($)
{
my($union) = shift;
foreach my $e (@{$union->{DATA}}) {
}
}
#####################################################################
# parse a typedef
sub ValidTypedef($)
{
my($typedef) = shift;
my $data = $typedef->{DATA};
if (ref($data) eq "HASH") {
if ($data->{TYPE} eq "STRUCT") {
ValidStruct($data);
}
if ($data->{TYPE} eq "UNION") {
ValidUnion($data);
}
}
}
#####################################################################
# parse a function
sub ValidFunction($)
{
my($fn) = shift;
foreach my $e (@{$fn->{DATA}}) {
if (util::has_property($e, "ref") && !$e->{POINTERS}) {
fatal "[ref] variables must be pointers ($fn->{NAME}/$e->{NAME})\n";
}
}
}
#####################################################################
# parse the interface definitions
sub ValidInterface($)
{
my($interface) = shift;
my($data) = $interface->{DATA};
foreach my $d (@{$data}) {
($d->{TYPE} eq "TYPEDEF") &&
ValidTypedef($d);
($d->{TYPE} eq "FUNCTION") &&
ValidFunction($d);
}
}
#####################################################################
# parse a parsed IDL into a C header
sub Validate($)
{
my($idl) = shift;
foreach my $x (@{$idl}) {
($x->{TYPE} eq "INTERFACE") &&
ValidInterface($x);
}
}
1;
|