Make or_else and or_return operators (binary and suffix respectively)

This commit is contained in:
gingerBill
2021-08-15 17:14:35 +01:00
parent a3a20f09e2
commit 21cbac755e
16 changed files with 247 additions and 195 deletions
+50 -50
View File
@@ -3,57 +3,57 @@ package all
// Imports every package
// This is useful for knowing what exists and producing documentation with `odin doc`
import "core:bufio"
import "core:bytes"
import "core:c"
import c_tokenizer "core:c/frontend/tokenizer"
import bufio "core:bufio"
import bytes "core:bytes"
import c "core:c"
import c_tokenizer "core:c/frontend/tokenizer"
import c_preprocessor "core:c/frontend/preprocessor"
import "core:compress"
import "core:compress/gzip"
import "core:compress/zlib"
import "core:container"
import "core:dynlib"
import "core:encoding"
import "core:encoding/base32"
import "core:encoding/base64"
import "core:encoding/csv"
import "core:encoding/hxa"
import "core:encoding/json"
import "core:fmt"
import "core:hash"
import "core:image"
import "core:image/png"
import "core:io"
import "core:log"
import "core:math"
import "core:math/big"
import "core:math/bits"
import "core:math/fixed"
import "core:math/linalg"
import "core:math/rand"
import "core:mem"
import "core:odin/ast"
import doc_format "core:odin/doc-format"
import "core:odin/format"
import "core:odin/parser"
import "core:odin/printer"
import compress "core:compress"
import gzip "core:compress/gzip"
import zlib "core:compress/zlib"
import container "core:container"
import dynlib "core:dynlib"
import encoding "core:encoding"
import base32 "core:encoding/base32"
import base64 "core:encoding/base64"
import csv "core:encoding/csv"
import hxa "core:encoding/hxa"
import json "core:encoding/json"
import fmt "core:fmt"
import hash "core:hash"
import image "core:image"
import png "core:image/png"
import io "core:io"
import log "core:log"
import math "core:math"
import big "core:math/big"
import bits "core:math/bits"
import fixed "core:math/fixed"
import linalg "core:math/linalg"
import rand "core:math/rand"
import mem "core:mem"
import ast "core:odin/ast"
import doc_format "core:odin/doc-format"
import odin_format "core:odin/format"
import odin_parser "core:odin/parser"
import odin_printer "core:odin/printer"
import odin_tokenizer "core:odin/tokenizer"
import "core:os"
import "core:path"
import "core:path/filepath"
import "core:reflect"
import "core:runtime"
import "core:slice"
import "core:sort"
import "core:strconv"
import "core:strings"
import "core:sync"
import "core:sync/sync2"
import "core:text/scanner"
import "core:thread"
import "core:time"
import "core:unicode"
import "core:unicode/utf8"
import "core:unicode/utf16"
import os "core:os"
import path "core:path"
import filepath "core:path/filepath"
import reflect "core:reflect"
import runtime "core:runtime"
import slice "core:slice"
import sort "core:sort"
import strconv "core:strconv"
import strings "core:strings"
import sync "core:sync"
import sync2 "core:sync/sync2"
import scanner "core:text/scanner"
import thread "core:thread"
import time "core:time"
import unicode "core:unicode"
import utf8 "core:unicode/utf8"
import utf16 "core:unicode/utf16"
main :: proc(){}
+4 -4
View File
@@ -2010,7 +2010,7 @@ or_else_procedure :: proc() {
i = 123;
}
// The above can be mapped to 'or_else'
i = or_else(m["hellope"], 123);
i = m["hellope"] or_else 123;
assert(i == 123);
}
@@ -2019,12 +2019,12 @@ or_else_procedure :: proc() {
// have optional ok semantics
v: union{int, f64};
i: int;
i = or_else(v.(int), 123);
i = or_else(v.?, 123); // Type inference magic
i = v.(int) or_else 123;
i = v.? or_else 123; // Type inference magic
assert(i == 123);
m: Maybe(int);
i = or_else(m.?, 456);
i = m.? or_else 456;
assert(i == 456);
}
}