func init // get type of the first case this.setfield('_type', this.props("Type").value) if(this.pt_work(0).point.parent.name == this.name) this.setfield('_type', this.pt_work(0).point.parent._type) end end func doCase(data) dt = d("Data") if(this.pt_work(0).point.parent.name != this.name) blk.println('switch (', this.to_type(dt, this._type), ') {') end arr = this.props("Value").value blk.inc().println('case ', this.get_typed_prop(arr.get(0), this._type), ':') for(i = 1; i < arr.size(); i++) blk.println('case ', this.get_typed_prop(arr.get(i), this._type), ':') end blk.inc() event("onTrue", dt) blk.println('break;').dec().dec() if(linked("onNextCase")) if(this.pt_event(0).point.parent.name == this.name) event("onNextCase", dt) else blk.inc().println('default:').inc() event("onNextCase", dt) blk.println('break;') .dec().dec().println('}') end else blk.println('}') end end func to_type(v, t) if(t == 'string') if(sys.code_type(v) == 2) return(v) else if(len(v) and (v != 'null')) return('(' + v + ').ToString()') else return("") end end elseif(t == 'enum') // break; else // all other types if(sys.code_type(v) == 2) return(t + '.Parse(' + v + ')') else return('(' + t + ')' + v) end end return(v) end func get_typed_prop(v, t) if(not len(v)) if(t == 'bool') return('false') elseif(t == 'char') return('\'\\' + 0 + '\'') elseif(t != 'string') v = 0 end end if((t == 'sbyte') or (t == 'byte') or (t == 'short') or (t == 'ushort') or (t == 'int')) return('(' + t + ')' + code(v)) elseif(t == 'string') return('"' + code(v) + '"') elseif(t == 'bool') return(code(lower(v))) elseif(t == 'long') return(code(v) + 'L') elseif(t == 'ulong') return(code(v) + 'UL') elseif(t == 'uint') return(code(v) + 'U') elseif(t == 'enum') return(code(v)) elseif(t == 'char') return('\'' + code(unescape(v)) + '\'') end return(v) end