Frage

Ich habe den folgenden Code in Specman:

var x := some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something

    //get a new value for x
    x = some.very.long.path.to.a.variable.in.another.struct;
};

Nun scheint es verschwenderisch um die Zuordnung zu schreiben zweimal x; einmal während der Initialisierung und einmal während der Schleife.

Was will ich wirklich benutzen, ist ein Verweis auf die langen Variablenname, so dass ich tun konnte:

var x := reference to some.very.long.path.to.a.variable.in.another.struct;

while (x == some_value) {
    //do something that uses x;
    //wait for something
    //no need to update x now since it's a reference
};

Kann man das in Specman getan werden?

War es hilfreich?

Lösung

Specman / e verwendet in der Regel Referenzen für structs und Listen, so dass, wenn Ihr Variablentyp entweder es Ihr zweites Beispiel ist sollte funktionieren. Für integer oder boolean weiß ich nicht die Möglichkeit, eine Referenz für eine Variable zu verwenden. Wie auch immer, zwei Ideen, die Sie helfen könnten:

  1. einen Zeiger auf die anderen Struktur hinzufügen und es in einer Konfigurationsdatei binden:

    struct a { other_variable : uint; };
    struct b {
        other_struct : a;
        some_func() is {
            var x : uint = other_struct.other_variable;
            while (x == some_value) {
                x = other_struct.other_variable;
            };
        };
    };
    extend cfg {
        struct_a : a;
        struct_b : b;
        keep struct_b.other_struct == struct_a;
    };
    

    UPDATE: Sie können einige weitere Informationen über diese Technik in finden: das Team Specman Beitrag .

  2. Wickeln Sie Ihre while-Schleife in einer Funktion, dort können Sie Parameter als Verweis übergeben (siehe help pass reference):

        some_func(x : *uint) is {
            while (x == some_value) {
                // stuff ...
            };
        };
    

Hope, das hilft!

Daniel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top