persistable sclass G22NetworkElement > MetaWithChangeListeners { // network element belongs to settable G22Network network; // position in visual representation settable Rect bounds; // identifier in network (optional) settable S identifier; // script code to adapt element and to create instance settableWithVar S code; { onChange(-> network?.change()); } class Port { // position on element's border (0 to 1, 0 to 1) settable DoubleRect position; // name of port settable S name; // cable attached to this port settable G22NetworkCable cable; } L ports = syncL(); LASCompileResult newCompileResult() { ret new LASCompileResult; } transient LASCompileResult compileResult; LASCompileResult compile(G22Utils g22utils) { S code = this.code; if (code == null) null; var cr = compileResult; if (cr != null && eq(cr.script, code)) ret cr; cr = newCompileResult(); cr.script(code).parser(g22utils.leftArrowParser()).compile(); ret compileResult = cr; } // TODO O makeInstance() { null; } toString { ret or2(identifier(), "Unnamed element"); } }