mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Cleanup and change of varcast.
This commit is contained in:
@@ -3,16 +3,34 @@
|
||||
// a copy of which can be found in the LICENSE_STDLIB file.
|
||||
module std::builtin;
|
||||
|
||||
macro scope(&variable; @body) @autoimport
|
||||
optenum VarCastResult
|
||||
{
|
||||
TYPE_MISMATCH
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores a variable on the stack, then restores it at the end of the
|
||||
* macro scope.
|
||||
*
|
||||
* @param variable `the variable to store and restore`
|
||||
**/
|
||||
macro void scope(&variable; @body) @autoimport
|
||||
{
|
||||
$typeof(variable) temp = variable;
|
||||
defer variable = temp;
|
||||
@body();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a variant type to a type, returning an failure if there is a type mismatch.
|
||||
*
|
||||
* @param v `the variant to convert to the given type.`
|
||||
* @param $Type `the type to convert to`
|
||||
* @return `The variant.ptr converted to its type.`
|
||||
**/
|
||||
macro varcast(variant v, $Type) @autoimport
|
||||
{
|
||||
if (v.type != $Type.typeid) return null;
|
||||
if (v.type != $Type.typeid) return VarCastResult.TYPE_MISMATCH!;
|
||||
return ($Type*)v.ptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -1578,13 +1578,6 @@ extern Type *type_cuint;
|
||||
extern const char *attribute_list[NUMBER_OF_ATTRIBUTES];
|
||||
extern const char *builtin_list[NUMBER_OF_BUILTINS];
|
||||
|
||||
extern const char *kw_at_return;
|
||||
extern const char *kw_at_checked;
|
||||
extern const char *kw_at_ensure;
|
||||
extern const char *kw_at_optreturn;
|
||||
extern const char *kw_at_param;
|
||||
extern const char *kw_at_require;
|
||||
|
||||
extern const char *kw_std;
|
||||
extern const char *kw_max;
|
||||
extern const char *kw_min;
|
||||
@@ -1608,8 +1601,6 @@ extern const char *kw_nan;
|
||||
extern const char *kw_noinline;
|
||||
extern const char *kw_main;
|
||||
extern const char *kw_ordinal;
|
||||
extern const char *kw_reqparse;
|
||||
extern const char *kw_require;
|
||||
extern const char *kw_pure;
|
||||
extern const char *kw_param;
|
||||
extern const char *kw_ptr;
|
||||
|
||||
@@ -39,13 +39,6 @@ static SymTab symtab;
|
||||
const char *attribute_list[NUMBER_OF_ATTRIBUTES];
|
||||
const char *builtin_list[NUMBER_OF_BUILTINS];
|
||||
|
||||
const char *kw_at_return;
|
||||
const char *kw_at_checked;
|
||||
const char *kw_at_ensure;
|
||||
const char *kw_at_optreturn;
|
||||
const char *kw_at_param;
|
||||
const char *kw_at_require;
|
||||
|
||||
const char *kw_in;
|
||||
const char *kw_out;
|
||||
const char *kw_inout;
|
||||
@@ -72,8 +65,6 @@ const char *kw_ordinal;
|
||||
const char *kw_param;
|
||||
const char *kw_ptr;
|
||||
const char *kw_pure;
|
||||
const char *kw_reqparse;
|
||||
const char *kw_require;
|
||||
const char *kw_std;
|
||||
const char *kw_sizeof;
|
||||
const char *kw_values;
|
||||
@@ -159,7 +150,7 @@ void symtab_init(uint32_t capacity)
|
||||
kw_param = KW_DEF("param");
|
||||
kw_ptr = KW_DEF("ptr");
|
||||
kw_pure = KW_DEF("pure");
|
||||
kw_require = KW_DEF("require");
|
||||
KW_DEF("require");
|
||||
kw_std = KW_DEF("std");
|
||||
kw_values = KW_DEF("values");
|
||||
kw_incr = KW_DEF("incr");
|
||||
|
||||
Reference in New Issue
Block a user