lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Tie: add some C++ rigor and concision (issue 252230043 by address@hi


From: David Kastrup
Subject: Re: Tie: add some C++ rigor and concision (issue 252230043 by address@hidden)
Date: Wed, 15 Jul 2015 06:53:36 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux)

address@hidden writes:

> Reviewers: ,
>
> Description:
> I wanted to see how Tie would look with instance methods instead of
> static methods.  I'm looking forward to hearing your opinions.

Here's a script in progress that currently does way, way too much.

git grep '^MAKE_[_A-Z]*SCHEME_CALLBACK[_A-Z]* ' lily|sed -n 
's/^\([^:]*\):MAKE_[_A-Z]*SCHEME_CALLBACK[_A-Z]* (\([^,]*\), \([^,]*\), 
\([^)]*\)).*$/\1 \2 \3 \4/p' |
    while read file class name args
    do
        argname=$(sed -n "s/^$class::$name (SCM \\?\\([^,)]*\\)[,)].*\$/\\1/p" 
$file)
        sed -i "/^\\(class\\|struct\\) $class\\( {\\)\\?\$/,/^}/s/^\\( 
*DECLARE_\\)SCHEME\\(_CALLBACK ($name, (\\)SCM[^,)]*\\(, \\)\\?/\\1MEMBER\\2/" 
$(git grep -l "^\\(class\\|struct\\) $class\\( \\|\$\\)") &&
            case "$argname" in
                [a-zA-Z]*)
                    thisexpr=$(echo "unsmob<[_a-zA-Z]*> *($argname)"
                               sed -n "/^$class::$name (/,/^}/s/^ 
*\\([_a-zA-Z]\\+\\) *\\* *\\([_a-zA-Z]\\+\\) *= *unsmob *<\\1> 
($argname);\$/\\2/p" $file |
                                   while read alias
                                   do
                                       sed -i "/^$class::$name (/,/^}/{/^ 
*\\([_a-zA-Z]\\+\\) *\\* *$alias *= *unsmob *<\\1> ($argname);\$/d;}" $file
                                       echo $alias
                                   done)
                    thisexpr=$(echo "$thisexpr"|sed -n 
'1h;1!H;${x;s/\n/\\|/g;p}')
                    sed -i "/^$class::$name 
(/,/^}/{s/\\b\\($thisexpr\\)\\b/this/g;s/\\bthis *-> *//g;s/\\*this\\.//g;}" 
$file
                    sed -i "s/^\\(MAKE_[_A-Z]*\\)SCHEME\\(_CALLBACK[_A-Z]* 
($class, $name,\\)/\\1MEMBER\\2/
s/^\\($class::$name (\\)SCM \\?[^,)]*\\(, \\)\\?\\(.*\\)\$/\\1\\3/" $file
                    ;;
                *)
                    sed -i "s/^\\(MAKE_[_A-Z]*\\)SCHEME\\(_CALLBACK[_A-Z]* 
($class, $name,\\)/\\1MEMBER\\2/
s/^\\($class::$name (\\)SCM \\?[^,)]*\\(, \\)\\?\\(.*\\)\$/\\1\\3/" $file
        esac
#       sed "/^MAKE_SCHEME_CALLBACK ($class, $name, $args)/d;

#       echo $file $class $name $args $argname $argtype $param
    done

> Please review this at https://codereview.appspot.com/252230043/


-- 
David Kastrup

reply via email to

[Prev in Thread] Current Thread [Next in Thread]