Property definitions

functional $ RoutineTemplate :: defaultinit
class RoutineTemplate
        var classkind: String
        var classname: String
        var nb_generics: Int
        var supers: Array[String]
        var has_return: Bool
        var is_redef = false
        var annotation = "is abstract"

        fun callparams: Array[String]
        do
                var generics = gen_generics(nb_generics)
                var params = new Array[String]
                for g in generics do
                        if is_redef then
                                params.push(g.to_lower)
                        else
                                params.push(g.to_lower + ": " + g)
                        end
                end
                return params
        end

        fun classparams: Array[String]
        do
                var res = gen_generics(nb_generics)
                if has_return then res.add("RESULT")
                return res
        end

        redef fun to_s
        do
                var signature = ""
                var callparams = self.callparams
                var classparams = self.classparams

                if callparams.length > 0 then signature = "({callparams.join(",")})"
                if has_return then signature += ": RESULT"
                var classdecl = "{classkind} {classname}"
                if classparams.length > 0 then classdecl += "[{classparams.join(",")}]"
                var superdecls = new Array[String]
                for s in supers do superdecls.add("\tsuper {s}")

                var classdef = new Array[String]
                var redefkw = ""
                if is_redef then redefkw = "redef "
                classdef.add("{classdecl}")
                classdef.add("{superdecls.join("\n")}")
                classdef.add("\t{redefkw}fun call{signature} {annotation}")
                classdef.add("end")
                return classdef.join("\n")
        end
end
lib/functional/functional_gen.nit:31,1--83,3