func init if(linked("StringBuilder")) // add using module sys.add_use('System.Text') // defines an instance of StringBuilder this.setfield('sb', d("StringBuilder")) // initialize properties if(linked("onError")) this.setfield('ex', 'ex' + this.id) end if(linked("doInsert") and (linked("Result") or linked("ToString"))) sys.add_var(this.name, 'StringBuilder') end end end func make_insert(data) return(this.sb && '.Insert(' && d("Index") && ', ' && d("Value") && ')') end func doInsert(data) if(linked("StringBuilder")) linked("onError") ? blk.println('try {').inc() : '' if(linked("Result") or linked("ToString")) blk.println(this.codename, ' = ', make_insert(data), ';') event("onResult", this.codename) else event("onResult", make_insert(data)) end if(linked("onError")) blk.dec().println('} catch(ArgumentOutOfRangeException ', this.ex, ') {').inc() event("onError", this.ex + '.Message') blk.dec().println('}') end end end func Result if(linked("StringBuilder")) if(linked("doInsert")) return(this.codename) else return(make_insert()) end end end func ToString if(linked("StringBuilder")) if(linked("doInsert")) return(this.codename + '.ToString()') else return(make_insert() && '.ToString()') end end end