| # |
| # Copyright 1999, 2000, 2001 Patrik Stridvall |
| # |
| # This library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2.1 of the License, or (at your option) any later version. |
| # |
| # This library is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| # Lesser General Public License for more details. |
| # |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with this library; if not, write to the Free Software |
| # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| # |
| |
| package winapi_c_parser; |
| |
| use strict; |
| |
| use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); |
| require Exporter; |
| |
| @ISA = qw(Exporter); |
| @EXPORT = qw(); |
| @EXPORT_OK = qw(); |
| |
| use options qw($options); |
| use output qw($output); |
| |
| use c_function; |
| use c_type; |
| use function; |
| use winapi_function; |
| use winapi_parser; |
| |
| ######################################################################## |
| # new |
| # |
| sub new { |
| my $proto = shift; |
| my $class = ref($proto) || $proto; |
| my $self = {}; |
| bless ($self, $class); |
| |
| my $file = \${$self->{FILE}}; |
| my $create_function = \${$self->{CREATE_FUNCTION}}; |
| my $create_type = \${$self->{CREATE_TYPE}}; |
| my $found_comment = \${$self->{FOUND_COMMENT}}; |
| my $found_declaration = \${$self->{FOUND_DECLARATION}}; |
| my $found_function = \${$self->{FOUND_FUNCTION}}; |
| my $found_function_call = \${$self->{FOUND_FUNCTION_CALL}}; |
| my $found_line = \${$self->{FOUND_LINE}}; |
| my $found_preprocessor = \${$self->{FOUND_PREPROCESSOR}}; |
| my $found_statement = \${$self->{FOUND_STATEMENT}}; |
| my $found_type = \${$self->{FOUND_TYPE}}; |
| my $found_variable = \${$self->{FOUND_VARIABLE}}; |
| |
| $$file = shift; |
| |
| $$create_function = sub { return new c_function; }; |
| $$create_type = sub { return new c_type; }; |
| $$found_comment = sub { return 1; }; |
| $$found_declaration = sub { return 1; }; |
| $$found_function = sub { return 1; }; |
| $$found_function_call = sub { return 1; }; |
| $$found_line = sub { return 1; }; |
| $$found_preprocessor = sub { return 1; }; |
| $$found_statement = sub { return 1; }; |
| $$found_type = sub { return 1; }; |
| $$found_variable = sub { return 1; }; |
| |
| return $self; |
| } |
| |
| ######################################################################## |
| # set_found_comment_callback |
| # |
| sub set_found_comment_callback { |
| my $self = shift; |
| |
| my $found_comment = \${$self->{FOUND_COMMENT}}; |
| |
| $$found_comment = shift; |
| } |
| |
| ######################################################################## |
| # set_found_declaration_callback |
| # |
| sub set_found_declaration_callback { |
| my $self = shift; |
| |
| my $found_declaration = \${$self->{FOUND_DECLARATION}}; |
| |
| $$found_declaration = shift; |
| } |
| |
| ######################################################################## |
| # set_found_function_callback |
| # |
| sub set_found_function_callback { |
| my $self = shift; |
| |
| my $found_function = \${$self->{FOUND_FUNCTION}}; |
| |
| $$found_function = shift; |
| } |
| |
| ######################################################################## |
| # set_found_function_call_callback |
| # |
| sub set_found_function_call_callback { |
| my $self = shift; |
| |
| my $found_function_call = \${$self->{FOUND_FUNCTION_CALL}}; |
| |
| $$found_function_call = shift; |
| } |
| |
| ######################################################################## |
| # set_found_line_callback |
| # |
| sub set_found_line_callback { |
| my $self = shift; |
| |
| my $found_line = \${$self->{FOUND_LINE}}; |
| |
| $$found_line = shift; |
| } |
| |
| ######################################################################## |
| # set_found_preprocessor_callback |
| # |
| sub set_found_preprocessor_callback { |
| my $self = shift; |
| |
| my $found_preprocessor = \${$self->{FOUND_PREPROCESSOR}}; |
| |
| $$found_preprocessor = shift; |
| } |
| |
| ######################################################################## |
| # set_found_statement_callback |
| # |
| sub set_found_statement_callback { |
| my $self = shift; |
| |
| my $found_statement = \${$self->{FOUND_STATEMENT}}; |
| |
| $$found_statement = shift; |
| } |
| |
| ######################################################################## |
| # set_found_type_callback |
| # |
| sub set_found_type_callback { |
| my $self = shift; |
| |
| my $found_type = \${$self->{FOUND_TYPE}}; |
| |
| $$found_type = shift; |
| } |
| |
| ######################################################################## |
| # set_found_variable_callback |
| # |
| sub set_found_variable_callback { |
| my $self = shift; |
| |
| my $found_variable = \${$self->{FOUND_VARIABLE}}; |
| |
| $$found_variable = shift; |
| } |
| |
| ######################################################################## |
| # parse_c_file |
| |
| sub parse_c_file { |
| my $self = shift; |
| |
| my $file = \${$self->{FILE}}; |
| |
| my $found_comment = \${$self->{FOUND_COMMENT}}; |
| my $found_declaration = \${$self->{FOUND_DECLARATION}}; |
| my $create_function = \${$self->{CREATE_FUNCTION}}; |
| my $found_function = \${$self->{FOUND_FUNCTION}}; |
| my $found_function_call = \${$self->{FOUND_FUNCTION_CALL}}; |
| my $found_line = \${$self->{FOUND_LINE}}; |
| my $found_preprocessor = \${$self->{FOUND_PREPROCESSOR}}; |
| my $found_statement = \${$self->{FOUND_STATEMENT}}; |
| my $found_variable = \${$self->{FOUND_VARIABLE}}; |
| |
| my $refcurrent = shift; |
| my $refline = shift; |
| my $refcolumn = shift; |
| |
| my $_create_function = sub { |
| return 'function'->new; |
| }; |
| |
| my $_create_type = sub { |
| return 'type'->new; |
| }; |
| |
| my $_found_function = sub { |
| my $old_function = shift; |
| |
| my $function = new c_function; |
| |
| $function->begin_line($old_function->function_line); |
| $function->begin_column(0); |
| $function->end_line($old_function->function_line); |
| $function->end_column(0); |
| |
| $function->linkage($old_function->linkage); |
| $function->return_type($old_function->return_type); |
| $function->calling_convention($old_function->calling_convention); |
| $function->name($old_function->internal_name); |
| |
| &$$found_function($function); |
| }; |
| |
| my $_found_preprocessor = sub { |
| my $directive = shift; |
| my $argument = shift; |
| |
| my $begin_line = 0; |
| my $begin_column = 0; |
| my $preprocessor = "#$directive $argument"; |
| |
| &$$found_preprocessor($begin_line, $begin_column, $preprocessor); |
| }; |
| |
| my $_found_type = sub { |
| my $type = shift; |
| }; |
| |
| &winapi_parser::parse_c_file($$file, { |
| # c_comment_found => $found_c_comment, |
| # cplusplus_comment_found => $found_cplusplus_comment, |
| function_create => $_create_function, |
| function_found => $_found_function, |
| preprocessor_found => $_found_preprocessor, |
| type_create => $_create_type, |
| type_found => $_found_type, |
| }); |
| } |
| |
| 1; |