From 5957d7f7bee7e5fac4035d47ecaaaad022adbfb8 Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Tue, 20 Jun 2017 12:38:05 +0100 Subject: Implicit Parameter Passing based `context` system (replacing Thread Local Storage (TLS) approach) --- src/parser.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'src/parser.cpp') diff --git a/src/parser.cpp b/src/parser.cpp index d09db81d2..1b1bfcdaf 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -91,11 +91,12 @@ enum ProcTag { }; enum ProcCallingConvention { - ProcCC_Invalid = 0, - ProcCC_Odin = 1, - ProcCC_C = 2, - ProcCC_Std = 3, - ProcCC_Fast = 4, + ProcCC_Invalid = 0, + ProcCC_Odin = 1, + ProcCC_Contextless = 2, + ProcCC_C = 3, + ProcCC_Std = 4, + ProcCC_Fast = 5, }; enum VarDeclFlag { @@ -2070,14 +2071,18 @@ void parse_proc_tags(AstFile *f, u64 *tags, String *link_name, ProcCallingConven ELSE_IF_ADD_TAG(no_bounds_check) ELSE_IF_ADD_TAG(inline) ELSE_IF_ADD_TAG(no_inline) - // ELSE_IF_ADD_TAG(dll_import) - // ELSE_IF_ADD_TAG(dll_export) else if (tag_name == "cc_odin") { if (cc == ProcCC_Invalid) { cc = ProcCC_Odin; } else { syntax_error(tag_expr, "Multiple calling conventions for procedure type"); } + } else if (tag_name == "cc_contextless") { + if (cc == ProcCC_Invalid) { + cc = ProcCC_Contextless; + } else { + syntax_error(tag_expr, "Multiple calling conventions for procedure type"); + } } else if (tag_name == "cc_c") { if (cc == ProcCC_Invalid) { cc = ProcCC_C; -- cgit v1.2.3