mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
v0.8.0
This commit is contained in:
+43
-2
@@ -13,6 +13,7 @@ import "core:types.odin"
|
|||||||
import "core:utf16.odin"
|
import "core:utf16.odin"
|
||||||
import "core:utf8.odin"
|
import "core:utf8.odin"
|
||||||
|
|
||||||
|
// File scope `when` statements
|
||||||
when ODIN_OS == "windows" {
|
when ODIN_OS == "windows" {
|
||||||
import "core:atomics.odin"
|
import "core:atomics.odin"
|
||||||
import "core:thread.odin"
|
import "core:thread.odin"
|
||||||
@@ -643,6 +644,7 @@ array_programming :: proc() {
|
|||||||
using println in import "core:fmt.odin"
|
using println in import "core:fmt.odin"
|
||||||
|
|
||||||
using_in :: proc() {
|
using_in :: proc() {
|
||||||
|
fmt.println("# using in");
|
||||||
using print in fmt;
|
using print in fmt;
|
||||||
|
|
||||||
println("Hellope1");
|
println("Hellope1");
|
||||||
@@ -660,7 +662,9 @@ using_in :: proc() {
|
|||||||
println(f);
|
println(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
named_proc_parameters :: proc() {
|
named_proc_return_parameters :: proc() {
|
||||||
|
fmt.println("# named proc return parameters");
|
||||||
|
|
||||||
foo0 :: proc() -> int {
|
foo0 :: proc() -> int {
|
||||||
return 123;
|
return 123;
|
||||||
}
|
}
|
||||||
@@ -681,6 +685,8 @@ named_proc_parameters :: proc() {
|
|||||||
|
|
||||||
|
|
||||||
enum_export :: proc() {
|
enum_export :: proc() {
|
||||||
|
fmt.println("# enum #export");
|
||||||
|
|
||||||
Foo :: enum #export {A, B, C};
|
Foo :: enum #export {A, B, C};
|
||||||
|
|
||||||
f0 := A;
|
f0 := A;
|
||||||
@@ -689,6 +695,40 @@ enum_export :: proc() {
|
|||||||
fmt.println(f0, f1, f2);
|
fmt.println(f0, f1, f2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
explicit_procedure_overloading :: proc() {
|
||||||
|
fmt.println("# explicit procedure overloading");
|
||||||
|
|
||||||
|
add_ints :: proc(a, b: int) -> int {
|
||||||
|
x := a + b;
|
||||||
|
fmt.println("add_ints", x);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
add_floats :: proc(a, b: f32) -> f32 {
|
||||||
|
x := a + b;
|
||||||
|
fmt.println("add_floats", x);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
add_numbers :: proc(a: int, b: f32, c: u8) -> int {
|
||||||
|
x := int(a) + int(b) + int(c);
|
||||||
|
fmt.println("add_numbers", x);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
add :: proc[add_ints, add_floats, add_numbers];
|
||||||
|
|
||||||
|
add(int(1), int(2));
|
||||||
|
add(f32(1), f32(2));
|
||||||
|
add(int(1), f32(2), u8(3));
|
||||||
|
|
||||||
|
add(1, 2); // untyped ints coerce to int tighter than f32
|
||||||
|
add(1.0, 2.0); // untyped floats coerce to f32 tighter than int
|
||||||
|
add(1, 2, 3); // three parameters
|
||||||
|
|
||||||
|
// Ambiguous answers
|
||||||
|
// add(1.0, 2);
|
||||||
|
// add(1, 2.0);
|
||||||
|
}
|
||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
when false {
|
when false {
|
||||||
general_stuff();
|
general_stuff();
|
||||||
@@ -698,7 +738,8 @@ main :: proc() {
|
|||||||
threading_example();
|
threading_example();
|
||||||
array_programming();
|
array_programming();
|
||||||
using_in();
|
using_in();
|
||||||
named_proc_parameters();
|
named_proc_return_parameters();
|
||||||
enum_export();
|
enum_export();
|
||||||
|
explicit_procedure_overloading();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -309,7 +309,7 @@ String get_fullpath_core(gbAllocator a, String path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
String const ODIN_VERSION = str_lit("0.8.0-dev");
|
String const ODIN_VERSION = str_lit("0.8.0");
|
||||||
String cross_compile_target = str_lit("");
|
String cross_compile_target = str_lit("");
|
||||||
String cross_compile_lib_dir = str_lit("");
|
String cross_compile_lib_dir = str_lit("");
|
||||||
|
|
||||||
|
|||||||
+5
-6
@@ -387,12 +387,6 @@ void check_stmt(Checker *c, AstNode *node, u32 flags) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct TypeAndToken {
|
|
||||||
Type *type;
|
|
||||||
Token token;
|
|
||||||
};
|
|
||||||
|
|
||||||
void check_when_stmt(Checker *c, AstNodeWhenStmt *ws, u32 flags) {
|
void check_when_stmt(Checker *c, AstNodeWhenStmt *ws, u32 flags) {
|
||||||
Operand operand = {Addressing_Invalid};
|
Operand operand = {Addressing_Invalid};
|
||||||
check_expr(c, &operand, ws->cond);
|
check_expr(c, &operand, ws->cond);
|
||||||
@@ -634,6 +628,11 @@ void check_switch_stmt(Checker *c, AstNode *node, u32 mod_flags) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TypeAndToken {
|
||||||
|
Type *type;
|
||||||
|
Token token;
|
||||||
|
};
|
||||||
|
|
||||||
Map<TypeAndToken> seen = {}; // NOTE(bill): Multimap
|
Map<TypeAndToken> seen = {}; // NOTE(bill): Multimap
|
||||||
map_init(&seen, heap_allocator());
|
map_init(&seen, heap_allocator());
|
||||||
defer (map_destroy(&seen));
|
defer (map_destroy(&seen));
|
||||||
|
|||||||
Reference in New Issue
Block a user