mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Fix parsing for comments; add global ODIN_* string constants
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
set exe_name=odin.exe
|
set exe_name=odin.exe
|
||||||
|
|
||||||
:: Debug = 0, Release = 1
|
:: Debug = 0, Release = 1
|
||||||
set release_mode=1
|
set release_mode=0
|
||||||
|
|
||||||
set compiler_flags= -nologo -Oi -TC -W4 -fp:fast -fp:except- -Gm- -MP -FC -GS- -EHsc- -GR-
|
set compiler_flags= -nologo -Oi -TC -W4 -fp:fast -fp:except- -Gm- -MP -FC -GS- -EHsc- -GR-
|
||||||
|
|
||||||
|
|||||||
+1
-42
@@ -1,46 +1,5 @@
|
|||||||
#import "fmt.odin"
|
#import "fmt.odin"
|
||||||
|
|
||||||
variadic :: proc(args: ..any) {
|
|
||||||
for i := 0; i < args.count; i++ {
|
|
||||||
match type a : args[i] {
|
|
||||||
case u128: fmt.println("u128", a)
|
|
||||||
case i128: fmt.println("i128", a)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.println(..args)
|
|
||||||
}
|
|
||||||
|
|
||||||
main :: proc() {
|
main :: proc() {
|
||||||
fmt.println("Hellope, everybody!")
|
fmt.println("Hellope, World!")
|
||||||
|
|
||||||
variadic(1 as u128, 1 as i128)
|
|
||||||
|
|
||||||
// x: i128 = 321312321
|
|
||||||
// y: i128 = 123123123
|
|
||||||
// z: i128
|
|
||||||
// x *= x; x *= x
|
|
||||||
// y *= y; y *= y
|
|
||||||
// fmt.println("x =", x)
|
|
||||||
// fmt.println("y =", y)
|
|
||||||
// z = x + y; fmt.println("x + y", z)
|
|
||||||
// z = x - y; fmt.println("x - y", z)
|
|
||||||
// z = x * y; fmt.println("x * y", z)
|
|
||||||
// z = x / y; fmt.println("x / y", z)
|
|
||||||
// z = x % y; fmt.println("x % y", z)
|
|
||||||
// z = x & y; fmt.println("x & y", z)
|
|
||||||
// z = x ~ y; fmt.println("x ~ y", z)
|
|
||||||
// z = x | y; fmt.println("x | y", z)
|
|
||||||
// z = x &~ y; fmt.println("x &~ y", z)
|
|
||||||
|
|
||||||
// z = -x
|
|
||||||
// z = ~x
|
|
||||||
|
|
||||||
// b: bool
|
|
||||||
// b = x == y; fmt.println("x == y", b)
|
|
||||||
// b = x != y; fmt.println("x != y", b)
|
|
||||||
// b = x < y; fmt.println("x < y", b)
|
|
||||||
// b = x <= y; fmt.println("x <= y", b)
|
|
||||||
// b = x > y; fmt.println("x > y", b)
|
|
||||||
// b = x >= y; fmt.println("x >= y", b)
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -528,6 +528,11 @@ void init_universal_scope(void) {
|
|||||||
|
|
||||||
add_global_entity(make_entity_nil(a, str_lit("nil"), t_untyped_nil));
|
add_global_entity(make_entity_nil(a, str_lit("nil"), t_untyped_nil));
|
||||||
|
|
||||||
|
add_global_constant(a, str_lit("ODIN_OS"), t_untyped_string, make_exact_value_string(str_lit("windows")));
|
||||||
|
add_global_constant(a, str_lit("ODIN_ARCH"), t_untyped_string, make_exact_value_string(str_lit("amd64")));
|
||||||
|
add_global_constant(a, str_lit("ODIN_VERSION"), t_untyped_string, make_exact_value_string(str_lit(VERSION_STRING)));
|
||||||
|
|
||||||
|
|
||||||
// Builtin Procedures
|
// Builtin Procedures
|
||||||
for (isize i = 0; i < gb_count_of(builtin_procs); i++) {
|
for (isize i = 0; i < gb_count_of(builtin_procs); i++) {
|
||||||
BuiltinProcId id = cast(BuiltinProcId)i;
|
BuiltinProcId id = cast(BuiltinProcId)i;
|
||||||
|
|||||||
+4
-7
@@ -100,6 +100,7 @@ AstNodeArray make_ast_node_array(AstFile *f) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define AST_NODE_KINDS \
|
#define AST_NODE_KINDS \
|
||||||
AST_NODE_KIND(BasicLit, "basic literal", Token) \
|
AST_NODE_KIND(BasicLit, "basic literal", Token) \
|
||||||
AST_NODE_KIND(Ident, "identifier", Token) \
|
AST_NODE_KIND(Ident, "identifier", Token) \
|
||||||
@@ -2656,10 +2657,6 @@ AstNode *parse_stmt(AstFile *f) {
|
|||||||
AstNode *s = NULL;
|
AstNode *s = NULL;
|
||||||
Token token = f->curr_token;
|
Token token = f->curr_token;
|
||||||
switch (token.kind) {
|
switch (token.kind) {
|
||||||
case Token_Comment:
|
|
||||||
next_token(f);
|
|
||||||
return parse_stmt(f);
|
|
||||||
|
|
||||||
// Operands
|
// Operands
|
||||||
case Token_Identifier:
|
case Token_Identifier:
|
||||||
case Token_Integer:
|
case Token_Integer:
|
||||||
@@ -2886,9 +2883,6 @@ ParseFileError init_ast_file(AstFile *f, String fullpath) {
|
|||||||
if (token.kind == Token_Invalid) {
|
if (token.kind == Token_Invalid) {
|
||||||
return ParseFile_InvalidToken;
|
return ParseFile_InvalidToken;
|
||||||
}
|
}
|
||||||
if (token.kind == Token_Comment) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
array_add(&f->tokens, token);
|
array_add(&f->tokens, token);
|
||||||
|
|
||||||
if (token.kind == Token_EOF) {
|
if (token.kind == Token_EOF) {
|
||||||
@@ -3097,6 +3091,9 @@ void parse_file(Parser *p, AstFile *f) {
|
|||||||
base_dir.len--;
|
base_dir.len--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (f->curr_token.kind == Token_Comment) {
|
||||||
|
next_token(f);
|
||||||
|
}
|
||||||
|
|
||||||
f->decls = parse_stmt_list(f);
|
f->decls = parse_stmt_list(f);
|
||||||
|
|
||||||
|
|||||||
+1
-7
@@ -49,12 +49,6 @@ gb_inline String make_string_c(char *text) {
|
|||||||
#define str_lit(c_str) make_string(cast(u8 *)c_str, gb_size_of(c_str)-1)
|
#define str_lit(c_str) make_string(cast(u8 *)c_str, gb_size_of(c_str)-1)
|
||||||
|
|
||||||
|
|
||||||
gb_inline bool are_strings_equal(String a, String b) {
|
|
||||||
if (a.len == b.len) {
|
|
||||||
return gb_memcompare(a.text, b.text, a.len) == 0;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
gb_inline bool str_eq_ignore_case(String a, String b) {
|
gb_inline bool str_eq_ignore_case(String a, String b) {
|
||||||
if (a.len == b.len) {
|
if (a.len == b.len) {
|
||||||
@@ -125,7 +119,7 @@ GB_COMPARE_PROC(string_cmp_proc) {
|
|||||||
// template <size_t N> gb_inline bool operator ==(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) == b; }
|
// template <size_t N> gb_inline bool operator ==(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) == b; }
|
||||||
// template <size_t N> gb_inline bool operator !=(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) != b; }
|
// template <size_t N> gb_inline bool operator !=(char const (&a)[N], String b) { return make_string(cast(u8 *)a, N-1) != b; }
|
||||||
|
|
||||||
gb_inline bool str_eq(String a, String b) { return are_strings_equal(a, b) != 0; }
|
gb_inline bool str_eq(String a, String b) { return a.len == b.len ? gb_memcompare(a.text, b.text, a.len) == 0 : false; }
|
||||||
gb_inline bool str_ne(String a, String b) { return !str_eq(a, b); }
|
gb_inline bool str_ne(String a, String b) { return !str_eq(a, b); }
|
||||||
gb_inline bool str_lt(String a, String b) { return string_compare(a, b) < 0; }
|
gb_inline bool str_lt(String a, String b) { return string_compare(a, b) < 0; }
|
||||||
gb_inline bool str_gt(String a, String b) { return string_compare(a, b) > 0; }
|
gb_inline bool str_gt(String a, String b) { return string_compare(a, b) > 0; }
|
||||||
|
|||||||
Reference in New Issue
Block a user