• Maria Matejka's avatar
    Filter: Methods rework · fc9d471b
    Maria Matejka authored and Ondřej Zajíček's avatar Ondřej Zajíček committed
    Methods can now be called as x.m(y), as long as x can have its type
    inferred in config time. If used as a command, it modifies the object,
    if used as a value, it keeps the original object intact.
    
    Also functions add(x,y), delete(x,y), filter(x,y) and prepend(x,y) now
    spit a warning and are considered deprecated.
    
    It's also possible to call a method on a constant, see filter/test.conf
    for examples like bgp_path = +empty+.prepend(1).
    
    Inside instruction definitions (filter/f-inst.c), a METHOD_CONSTRUCTOR()
    call is added, which registers the instruction as a method for the type
    of its first argument. Each type has its own method symbol table and
    filter parser switches between them based on the inferred type of the
    object calling the method.
    
    Also FI_CLIST_(ADD|DELETE|FILTER) instructions have been split to allow
    for this method dispatch. With type inference, it's now possible.
    fc9d471b