source: josm/trunk/tools/japicc/modules/Internals/Mangling.pm@ 11682

Last change on this file since 11682 was 11682, checked in by Don-vip, 7 years ago

update to japi-compliance-checker 2.1

File size: 3.1 KB
Line 
1###########################################################################
2# A module to unmangle symbols
3#
4# Copyright (C) 2016 Andrey Ponomarenko's ABI Laboratory
5#
6# Written by Andrey Ponomarenko
7#
8# This program is free software: you can redistribute it and/or modify
9# it under the terms of the GNU General Public License or the GNU Lesser
10# General Public License as published by the Free Software Foundation.
11#
12# This program is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU General Public License for more details.
16#
17# You should have received a copy of the GNU General Public License
18# and the GNU Lesser General Public License along with this program.
19# If not, see <http://www.gnu.org/licenses/>.
20###########################################################################
21use strict;
22
23sub unmangle($)
24{
25 my $Name = $_[0];
26
27 $Name=~s!/!.!g;
28 $Name=~s!:\(!(!g;
29 $Name=~s!\).+\Z!)!g;
30
31 if($Name=~/\A(.+)\((.+)\)/)
32 {
33 my ($ShortName, $MangledParams) = ($1, $2);
34 my @UnmangledParams = ();
35 my ($IsArray, $Shift, $Pos, $CurParam) = (0, 0, 0, "");
36 while($Pos<length($MangledParams))
37 {
38 my $Symbol = substr($MangledParams, $Pos, 1);
39 if($Symbol eq "[")
40 { # array
41 $IsArray = 1;
42 $Pos+=1;
43 }
44 elsif($Symbol eq "L")
45 { # class
46 if(substr($MangledParams, $Pos+1)=~/\A(.+?);/) {
47 $CurParam = $1;
48 $Shift = length($CurParam)+2;
49 }
50 if($IsArray) {
51 $CurParam .= "[]";
52 }
53 $Pos+=$Shift;
54 push(@UnmangledParams, $CurParam);
55 ($IsArray, $Shift, $CurParam) = (0, 0, "")
56 }
57 else
58 {
59 if($Symbol eq "C") {
60 $CurParam = "char";
61 }
62 elsif($Symbol eq "B") {
63 $CurParam = "byte";
64 }
65 elsif($Symbol eq "S") {
66 $CurParam = "short";
67 }
68 elsif($Symbol eq "S") {
69 $CurParam = "short";
70 }
71 elsif($Symbol eq "I") {
72 $CurParam = "int";
73 }
74 elsif($Symbol eq "F") {
75 $CurParam = "float";
76 }
77 elsif($Symbol eq "J") {
78 $CurParam = "long";
79 }
80 elsif($Symbol eq "D") {
81 $CurParam = "double";
82 }
83 else {
84 printMsg("INFO", "WARNING: unmangling error");
85 }
86 if($IsArray) {
87 $CurParam .= "[]";
88 }
89 $Pos+=1;
90 push(@UnmangledParams, $CurParam);
91 ($IsArray, $Shift, $CurParam) = (0, 0, "")
92 }
93 }
94 return $ShortName."(".join(", ", @UnmangledParams).")";
95 }
96
97 return $Name;
98}
99
100return 1;
Note: See TracBrowser for help on using the repository browser.