From 49614d38c9b298488b2cba15bbee48db8d7ec316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sl=C3=A1vek=20Banko?= Date: Fri, 5 Jun 2020 00:54:01 +0200 Subject: [PATCH] dcopidlng fixes: + includes may use quotation marks + argument types can contain multiple words + avoid use long, short, int or char type as the argument name + avoid use type as the argument name if the const qualifier is used + use long notation of int types + the arguments can be nameless + return types can have qualifiers + do not warn on inherit of the DCOPObject and TQObject classes + the documentation comment does not have to end on a separate line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Slávek Banko --- dcop/dcopidlng/kalyptus | 18 ++++++++++++------ dcop/dcopidlng/kalyptusCxxToDcopIDL.pm | 25 ++++++++++++++++++++----- dcop/dcopidlng/kdocAstUtil.pm | 8 +++++--- dcop/dcopidlng/kdocParseDoc.pm | 12 ++++-------- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/dcop/dcopidlng/kalyptus b/dcop/dcopidlng/kalyptus index bde755236..2706a90f9 100644 --- a/dcop/dcopidlng/kalyptus +++ b/dcop/dcopidlng/kalyptus @@ -439,7 +439,7 @@ LOOP: || $p =~ /^\s*KDOM_/ ); - push @includes_list, $1 if $p =~ /^#include\s+?\s*$/; + push @includes_list, $1 if $p =~ /^#include\s+[<"]?(.*?)[>"]?\s*$/; # remove all preprocessor macros if( $p =~ /^\s*#\s*(\w+)/ ) { @@ -1521,16 +1521,22 @@ sub makeParamList($$$) # Separate arg type from arg name, if the latter is specified if ( $arg =~ /(.*)\s+([\w_]+)\s*$/ || $arg =~ /(.*)\(\s*\*\s([\w_]+)\)\s*\((.*)\)\s*$/ ) { - if ( defined $3 ) { # function pointer - $argType = $1."(*)($3)"; - $argName = $2; + if ( $1 eq "const" || $2 eq "long" || $2 eq "short" || $2 eq "int" || $2 eq "char" ) { + # const qualifier or long notation of numeric type + # without argument name + $argType = "$1 $2"; } else { $argType = $1; $argName = $2; } - } else { # unnamed arg - or enum value + if ( defined $3 ) { + # function pointer + $argType .= "(*)($3)"; + } + } else { + # unnamed arg - or enum value $argType = $arg if (!$isEnum); - $argName = $arg if ($isEnum); + $argName = $arg if ($isEnum); } $argId++; diff --git a/dcop/dcopidlng/kalyptusCxxToDcopIDL.pm b/dcop/dcopidlng/kalyptusCxxToDcopIDL.pm index 8a2988f06..0d06613e4 100644 --- a/dcop/dcopidlng/kalyptusCxxToDcopIDL.pm +++ b/dcop/dcopidlng/kalyptusCxxToDcopIDL.pm @@ -161,18 +161,33 @@ sub generateMethod($$) $argType =~ s/^\s*(.*?)\s*$/$1/; $argType =~ s//>/g; - $argType =~ s/\s//g; - - $args .= " $argType$arg->{ArgName}\n"; + $argType =~ s/(\W)\s+/$1/g; + $argType =~ s/\s+(\W)/$1/g; + $argType =~ s/\b(signed|unsigned|long|short)$/$1 int/; + + $args .= " "; + $args .= "$argType"; + $args .= "$arg->{ArgName}" if $arg->{ArgName} !~ /^$/; + $args .= "\n"; } my $qual = ""; $qual .= " qual=\"const\"" if $flags =~ "c"; + my $r_isConst = ($returnType =~ s/^\s*const\s*//); + my $r_isRef = ($returnType =~ s/&//); + + my $retTypeAttrs = ""; + $retTypeAttrs .= " qleft=\"const\"" if $r_isConst; + $retTypeAttrs .= " qright=\"&\"" if $r_isRef; + $returnType = "void" unless $returnType; + $returnType =~ s/^\s*(.*?)\s*$/$1/; $returnType =~ s//>/g; - $returnType =~ s/^\s*const\s*//; + $returnType =~ s/(\W)\s+/$1/g; + $returnType =~ s/\s+(\W)/$1/g; + $returnType =~ s/\b(signed|unsigned|long|short)$/$1 int/; my $methodCode = ""; @@ -182,7 +197,7 @@ sub generateMethod($$) if (!$isConstructor) { $methodCode .= " <$tagType$tagAttr$qual>\n"; - $methodCode .= " $returnType\n"; + $methodCode .= " $returnType\n"; $methodCode .= " $name\n"; $methodCode .= "$args"; $methodCode .= " \n"; diff --git a/dcop/dcopidlng/kdocAstUtil.pm b/dcop/dcopidlng/kdocAstUtil.pm index f31f2b365..6abb59a25 100644 --- a/dcop/dcopidlng/kdocAstUtil.pm +++ b/dcop/dcopidlng/kdocAstUtil.pm @@ -152,10 +152,12 @@ ANITER: if( !defined $ref ) { # ancestor undefined - warn "warning: ", $node->{astNodeName}, - " inherits unknown class '", + if( $in->{astNodeName} ne "DCOPObject" + && $in->{astNodeName} ne "TQObject" ) { + warn "warning: ", $node->{astNodeName}, + " inherits unknown class '", $in->{astNodeName},"'\n"; - + } $parent->AddPropList( 'InBy', $node ); } else { diff --git a/dcop/dcopidlng/kdocParseDoc.pm b/dcop/dcopidlng/kdocParseDoc.pm index e5f19d50c..fa34f5f30 100644 --- a/dcop/dcopidlng/kdocParseDoc.pm +++ b/dcop/dcopidlng/kdocParseDoc.pm @@ -60,15 +60,15 @@ PARSELOOP: next if !defined $text; $text =~ s#^\s*\*(?!\/)##; + if ( $text =~ m#\*/# ) { + $finished = 1; + $text = $`; + } # if ( $text =~ /^\s*<\/pre>/i ) { # flushProp(); # $inbounded = 0; # } if( $inbounded ) { - if ( $text =~ m#\*/# ) { - $finished = 1; - $text = $`; - } $buffer .= $text; next PARSELOOP; } @@ -162,10 +162,6 @@ PARSELOOP: docProp( "LibDoc" ); } else { - if ( $text =~ m#\*/# ) { - $finished = 1; - $text = $`; - } $buffer .= $text; } }