File: change_va_arg.pm

package info (click to toggle)
octave2.1-forge 2006.03.17%2Bdfsg1-7
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 16,672 kB
  • ctags: 6,047
  • sloc: cpp: 49,610; ansic: 14,035; perl: 2,789; sh: 2,087; makefile: 1,560; lex: 1,219; tcl: 799; fortran: 422; objc: 202
file content (48 lines) | stat: -rw-r--r-- 1,187 bytes parent folder | download | duplicates (4)
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
#!/usr/bin/perl -w -n

## defines function change_line that transforms old-style variable argument
## lists (...) into new-style varargin. va_arg() etc are also transformed.

BEGIN{

    $va_arg_re = qr!^(\s*function\s*\w*.*?\(.*?)\.\.\.(\s*\).*)$!;
    
}

## Does necessary changes inplace on $_[0].
sub change_line {
    
    if ($_[0] !~ /^\s*\#/) {	# Don't do obvious comment lines

				# Transform ... in function decalaration

	$_[0] =~ s{$va_arg_re}{$1varargin$2}og;

				# list(all_va_args) becomes varargin

	$_[0] =~ s!list\s*\(\s*all_va_args\s*\)!varargin!og;

				# all_va_args becomes varargin{:}

	$_[0] =~ s!all_va_args!varargin{:}!og;

				# va_start() can be delicate, so add a
				# warning. 

				# declare a va_arg_cnt counter

	$_[0] =~ s!(.*\b)va_start\b(\s*\(\s*\)|)(.*)!$1va_arg_cnt = 1$3\nwarn ("va_start should be transformed\\n");\n!g;

				# Use that counter to substitute va_arg by
				# nth (varargin, va_arg_cnt++)

	$_[0] =~ s!(.*\b)va_arg\b(\s*\(\s*\)|)(.*)!$1nth (varargin, va_arg_cnt++)$3!g;
    }
}

## Does it look like an underlined func that is not a function call?
sub comment_line {
     0 ?
	"## Hmmm ... is that a function call?\n" : "";
}
1;