| 295 | | sw.write('switch(') |
| 296 | | _expr.writeSharpDef(sw) |
| 297 | | sw.write(') {\n') |
| 298 | | sw.indent |
| 299 | | for onPart in _onParts |
| 300 | | sep = '' |
| 301 | | for e in onPart.exprs |
| 302 | | sw.write(sep) |
| 303 | | sw.write('case ') |
| 304 | | e.writeSharpDef(sw) |
| 305 | | sw.write(': ') |
| 306 | | sep = '\n' |
| 307 | | onPart.block.writeSharpDef(sw) |
| 308 | | if not onPart.block.stmts.count or not onPart.block.stmts[onPart.block.stmts.count-1] inherits ReturnStmt # CC: use .last |
| | 295 | if _expr.type.isDynamic |
| | 296 | # if the expression is dynamic, then use an if-else ladder with CobraImp.Equals( |
| | 297 | sw.writeLine('// branch [_expr.toCobraSource]') |
| | 298 | |
| | 299 | varName = '_lh_branch_[.serialNum]' |
| | 300 | sw.write('[_expr.type.sharpRef] [varName] = ') |
| | 301 | _expr.writeSharpDef(sw) |
| | 302 | sw.writeLine(';') |
| | 303 | |
| | 304 | elseWord = '' |
| | 305 | for onPart in _onParts |
| | 306 | sw.write('[elseWord]if (') |
| | 307 | sep = '' |
| | 308 | for e in onPart.exprs |
| | 309 | sw.write(sep) |
| | 310 | sw.write('CobraImp.Equals([varName], ') |
| | 311 | e.writeSharpDef(sw, false) |
| | 312 | sw.write(')') |
| | 313 | sep = ' || ' |
| | 314 | sw.write(')') |
| | 315 | onPart.block.writeSharpDef(sw) |
| | 316 | elseWord = 'else ' |
| | 317 | if _elsePart |
| | 318 | sw.write('else ') |
| | 319 | _elsePart.writeSharpDef(sw) |
| | 320 | else |
| | 321 | # for any other kind of expression, use a C# switch |
| | 322 | sw.write('switch(') |
| | 323 | _expr.writeSharpDef(sw) |
| | 324 | sw.write(') {\n') |
| | 325 | sw.indent |
| | 326 | for onPart in _onParts |
| | 327 | sep = '' |
| | 328 | for e in onPart.exprs |
| | 329 | sw.write(sep) |
| | 330 | sw.write('case ') |
| | 331 | e.writeSharpDef(sw) |
| | 332 | sw.write(': ') |
| | 333 | sep = '\n' |
| | 334 | onPart.block.writeSharpDef(sw) |
| | 335 | if not onPart.block.stmts.count or not onPart.block.stmts[onPart.block.stmts.count-1] inherits ReturnStmt # CC: use .last |
| | 336 | sw.write('break;\n') |
| | 337 | if _elsePart |
| | 338 | sw.write('default: ') |
| | 339 | _elsePart.writeSharpDef(sw) |