File: create_d_import.pl

package info (click to toggle)
bulletml 0.0.6-3
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 724 kB
  • ctags: 1,346
  • sloc: cpp: 7,642; xml: 810; perl: 184; makefile: 167; yacc: 124
file content (84 lines) | stat: -rwxr-xr-x 1,713 bytes parent folder | download | duplicates (8)
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
#!/usr/bin/env perl

use strict;

my @args;

my $in = *STDIN;
if ($ARGV[0]) {
	open $in, $ARGV[0];
}

my $out = *STDOUT;
if ($ARGV[1]) {
	open $out, "> $ARGV[1]";
}

print $out "extern (C) {\n";
while (<$in>) {
	s/const //g;
	if (parseArgs("D_CPP_CLASS")) {
		my $class = shift @args;
		my $name = shift @args;
		print $out "alias int $name;\n";
	}
	if (parseArgs("D_CPP_NEW_\\d")) {
		my $class = shift @args;
		my $name = shift @args;
		my $args = join ', ', @args;
		print $out "int* $name($args);\n";
	}
	if (parseArgs("D_CPP_DELETE")) {
		my $class = shift @args;
		my $name = shift @args;
		print $out "void $name(int*);\n";
	}
	if (parseArgs("D_CPP_METHOD_\\d")) {
		my $class = shift @args;
		my $method = shift @args;
		my $name = shift @args;
		my $ret = shift @args;
		my $args = join ', ', @args;
		if ($args) {
			$args = ", $args";
		}
		print $out "$ret $name(int* $args);\n";
	}
	if (parseArgs("D_CPP_STATIC_METHOD_\\d")) {
		my $class = shift @args;
		my $method = shift @args;
		my $name = shift @args;
		my $ret = shift @args;
		my $args = join ', ', @args;
		print $out "$ret $name($args);\n";
	}
	if (parseArgs("D_CPP_VIRTUAL_METHOD_SETTER_\\d")) {
		my $class = shift @args;
		my $method = shift @args;
		my $name = shift @args;
		my $ret = shift @args;
		my $args = join ', ', @args;
		if ($args) {
			$args = ", $args";
		}
		print $out "void $name(int*, $ret (*fp) (int* $args)); \n";
	}
	if (parseArgs("D_CPP_D_DECLARE")) {
		my $declare = shift @args;
		$declare =~ s/^\"//;
		$declare =~ s/\"$//;
		print $out "$declare\n";
	}
}
print $out "}\n";

sub parseArgs {
	my $name = shift;
	if (/$name\s*\(([^\)]*)\)/) {
		@args = split /\s*,\s*/, $1;
		return 1;
	}
	else {
		return 0;
	}
}