Implementing += operator for record types.

This is per #375.

Record types can now get additional fields later via '+='. The added
fields must however either be &optional or have a &default value.

Example:

    type Foo: record {
        a: count;
        b: count &optional;
    };

    redef record Foo += {
        c: count &default=42;
        d: count &optional;
    };

    global f: Foo = [$a=21];

    print f;

Output:

    [a=21, b=<uninitialized>, c=42, d=<uninitialized>]
This commit is contained in:
Robin Sommer 2011-02-07 16:04:32 -08:00
parent cdb20e61b7
commit 95069f0993
3 changed files with 44 additions and 2 deletions

View file

@ -409,6 +409,10 @@ public:
int NumFields() const { return num_fields; }
// Returns 0 if all is ok, otherwise a pointer to an error message. Takes
// ownership of list.
const char* AddFields(type_decl_list* types);
void Describe(ODesc* d) const;
void DescribeFields(ODesc* d) const;