fun test() -> f64 { if true { "discarded"; 23 } else { 45 } } // @no-errors // Here come some type probes! // (type of the condition) // @type: 27 bool // // (the discarded expression) // @type: 34 string // // (the "then" clause) // @type: 47 f64 // @type: 50 f64 // // (the "else" clause) // @type: 59 f64 // @type: 62 f64 // // @concrete: // | File // | FunctionDecl // | Fun:'"fun"' // | Identifier:'"test"' // | ParamList // | LeftParen:'"("' // | RightParen:'")"' // | ReturnType // | Arrow:'"->"' // | TypeExpression // | Identifier:'"f64"' // | Block // | LeftBrace:'"{"' // | IfStatement // | ConditionalExpression // | If:'"if"' // | LiteralExpression // | True:'"true"' // | Block // | LeftBrace:'"{"' // | ExpressionStatement // | LiteralExpression // | String:'"\"discarded\""' // | Semicolon:'";"' // | ExpressionStatement // | LiteralExpression // | Number:'"23"' // | RightBrace:'"}"' // | Else:'"else"' // | Block // | LeftBrace:'"{"' // | ExpressionStatement // | LiteralExpression // | Number:'"45"' // | RightBrace:'"}"' // | RightBrace:'"}"' // // @compiles-to: // | function << module >> (0 args, 0 locals): // | strings (0): // | code (2): // | 0: PushNothing // | 1: Return // | function test (0 args, 0 locals): // | strings (1): // | 0: "discarded" // | code (8): // | 0: PushTrue // | 1: JumpFalse(6) // | 2: PushString(0) // | 3: Discard // | 4: PushFloat(23.0) // | 5: Jump(7) // | 6: PushFloat(45.0) // | 7: Return // | // @eval: Float(23.0)