joseoliv
6/13/2018 - 1:13 PM

Metaobjects addCodeToGenericPrototype and AddCodeFromMetaobject

Metaobjects addCodeToGenericPrototype and AddCodeFromMetaobject

package metaobjectTest

/*
   @addCodeFromMetaobject  is in prototype Array. The annotation addCodeToGenericPrototype
   gives the code to be added to the array of prototype AddCodeFromMetaobject.
*/

@addCodeToGenericPrototype("Array"){*

    func sumAll -> Int {
        var Int s = 0;
        for elem in self {
            s = s + elem getValue;
        }
        return s
    }
*}
object AddCodeFromMetaobject
        // methods getValue and setValue: will be added to prototype
    @property Int value = 0;
    @init(value)

    func run {
        var array = [ 
            AddCodeFromMetaobject(1), AddCodeFromMetaobject(2),
            AddCodeFromMetaobject(3) ];
            /* method sumAll will be added to Array<AddCodeFromMetaobject> by 
               metaobject addCodeFromMetaobject. This method was passed by
               annotation addCodeToGenericPrototype of this prototype 
               (AddCodeFromMetaobject)
            */
        assert array sumAll == 6;
    }
    
end