12#ifdef __COSMOPOLITAN__
14#define z_is_windows() IsWindows()
17#define z_is_windows() 1
19#define z_is_windows() 0
28#define realpath(N, R) _fullpath((R), (N), PATH_MAX)
33#define ZEN_VERSION "0.1.0"
37#define COLOR_RESET "\033[0m"
38#define COLOR_RED "\033[1;31m"
39#define COLOR_GREEN "\033[1;32m"
40#define COLOR_YELLOW "\033[1;33m"
41#define COLOR_BLUE "\033[1;34m"
42#define COLOR_CYAN "\033[1;36m"
43#define COLOR_BOLD "\033[1m"
46#define free(ptr) ((void)0)
47#define malloc(sz) xmalloc(sz)
48#define realloc(p, s) xrealloc(p, s)
49#define calloc(n, s) xcalloc(n, s)
176void *
xrealloc(
void *ptr,
size_t new_size);
181void *
xcalloc(
size_t n,
size_t size);
204#define MAX_FLAGS_SIZE 1024
205#define MAX_PATH_SIZE 1024
206#define MAX_PATTERN_SIZE 1024
246 const char *suggestion);
366 char gcc_flags[4096];
const char *const name
Definition cJSON.h:307
int index
Definition cJSON.h:198
int cJSON_bool fmt
Definition cJSON.h:185
Compiler configuration and flags.
Definition zprep.h:346
int is_freestanding
1 if –freestanding (no stdlib).
Definition zprep.h:358
int use_objc
1 if –objc (emit Objective-C compatible code).
Definition zprep.h:362
int mode_transpile
1 if 'transpile' command (to C).
Definition zprep.h:359
int repl_mode
1 if –repl (internal flag for REPL usage).
Definition zprep.h:357
char * input_file
Input source file path.
Definition zprep.h:347
char * output_file
Output binary file path.
Definition zprep.h:348
int emit_c
1 if –emit-c (keep generated C file).
Definition zprep.h:353
int use_cuda
1 if –cuda (emit CUDA-compatible code).
Definition zprep.h:361
int quiet
1 if –quiet.
Definition zprep.h:355
int use_cpp
1 if –cpp (emit C++ compatible code).
Definition zprep.h:360
int mode_run
1 if 'run' command (compile & execute).
Definition zprep.h:351
int mode_check
1 if 'check' command (syntax/type check only).
Definition zprep.h:352
int verbose
1 if –verbose.
Definition zprep.h:354
int mode_lsp
1 if 'lsp' command (Language Server Protocol).
Definition zprep.h:363
int no_zen
1 if –no-zen (disable zen facts/easter eggs).
Definition zprep.h:356
Lexer state.
Definition zprep.h:131
const char * src
Source code buffer.
Definition zprep.h:132
int line
Current line number.
Definition zprep.h:134
int col
Current column number.
Definition zprep.h:135
int pos
Current position index.
Definition zprep.h:133
Global compilation state and symbol table.
Definition parser.h:275
Represents a source token.
Definition zprep.h:119
int line
Line number (1-based).
Definition zprep.h:123
TokenType type
Type of the token.
Definition zprep.h:120
int col
Column number (1-based).
Definition zprep.h:124
const char * start
Pointer to start of token in source buffer.
Definition zprep.h:121
int len
Length of the token text.
Definition zprep.h:122
void lexer_init(Lexer *l, const char *src)
Initialize the lexer.
Definition token.c:4
void warn_division_by_zero(Token t)
Warning reporting for division by zero.
Definition utils.c:440
int g_warning_count
Definition utils.c:543
char * g_current_filename
Current filename.
Definition utils.c:5
void error_type_expected(Token t, const char *expected, const char *got)
Error reporting for type expected.
Definition utils.c:310
void * xrealloc(void *ptr, size_t new_size)
Reallocate memory.
Definition utils.c:62
void warn_comparison_always_true(Token t, const char *reason)
Warning reporting for comparison always true.
Definition utils.c:389
void zpanic(const char *fmt,...)
Error reporting.
Definition utils.c:92
char g_cflags[MAX_FLAGS_SIZE]
Definition zprep.h:374
void zwarn(const char *fmt,...)
Warning reporting.
Definition utils.c:104
char * xstrdup(const char *s)
Duplicate a string.
Definition utils.c:79
void warn_missing_return(Token t, const char *func_name)
Warning reporting for missing return.
Definition utils.c:376
void warn_implicit_conversion(Token t, const char *from_type, const char *to_type)
Warning reporting for implicit conversion.
Definition utils.c:364
void warn_narrowing_conversion(Token t, const char *from_type, const char *to_type)
Warning reporting for narrowing conversion.
Definition utils.c:428
CompilerConfig g_config
Definition utils.c:544
int is_trait(const char *name)
Check if a name is a trait.
Definition ast.c:24
void warn_format_string(Token t, int arg_num, const char *expected, const char *got)
Warning reporting for format string.
Definition utils.c:475
void warn_unreachable_code(Token t)
Warning reporting for unreachable code.
Definition utils.c:354
void zwarn_at(Token t, const char *fmt,...)
Warning reporting with token location.
Definition utils.c:119
void error_cannot_index(Token t, const char *type_name)
Error reporting for cannot index.
Definition utils.c:321
void zpanic_at(Token t, const char *fmt,...)
Error reporting with token location.
Definition utils.c:163
#define MAX_FLAGS_SIZE
Definition zprep.h:204
char * load_file(const char *filename)
Load a file.
Definition utils.c:500
Token lexer_peek(Lexer *l)
Get the next token without advancing.
Definition token.c:489
void zpanic_with_suggestion(Token t, const char *msg, const char *suggestion)
Error reporting with suggestion.
Definition utils.c:216
Token lexer_peek2(Lexer *l)
Get the next token without advancing (2 look ahead).
Definition token.c:495
void error_undefined_field(Token t, const char *struct_name, const char *field_name, const char *suggestion)
Error reporting for undefined field.
Definition utils.c:292
void error_wrong_arg_count(Token t, const char *func_name, int expected, int got)
Error reporting for wrong argument count.
Definition utils.c:281
void * xcalloc(size_t n, size_t size)
Allocate and zero memory.
Definition utils.c:54
TokenType
Token types for the Lexer.
Definition zprep.h:58
@ TOK_ELLIPSIS
...
Definition zprep.h:102
@ TOK_LPAREN
(
Definition zprep.h:66
@ TOK_FSTRING
Formatted string literal (f"val is {x}").
Definition zprep.h:64
@ TOK_ASSERT
'assert' keyword.
Definition zprep.h:85
@ TOK_DEF
'def' keyword.
Definition zprep.h:87
@ TOK_Q_DOT
?. (optional chaining).
Definition zprep.h:94
@ TOK_IDENT
Identifier (variable, function name).
Definition zprep.h:60
@ TOK_USE
'use' keyword.
Definition zprep.h:91
@ TOK_OPAQUE
'opaque' keyword.
Definition zprep.h:111
@ TOK_RBRACKET
]
Definition zprep.h:71
@ TOK_COLON
:
Definition zprep.h:75
@ TOK_DOTDOT_EQ
..= (inclusive range).
Definition zprep.h:80
@ TOK_ASYNC
'async' keyword.
Definition zprep.h:106
@ TOK_LBRACE
{
Definition zprep.h:68
@ TOK_QQ
?? (null coalescing).
Definition zprep.h:92
@ TOK_IMPL
'impl' keyword.
Definition zprep.h:97
@ TOK_DCOLON
::
Definition zprep.h:95
@ TOK_COMMA
,
Definition zprep.h:74
@ TOK_STRING
String literal.
Definition zprep.h:63
@ TOK_FOR
'for' keyword.
Definition zprep.h:100
@ TOK_OR
'or' keyword.
Definition zprep.h:99
@ TOK_UNKNOWN
Unknown token.
Definition zprep.h:112
@ TOK_DEFER
'defer' keyword.
Definition zprep.h:88
@ TOK_PIPE
|> (pipe operator).
Definition zprep.h:83
@ TOK_UNION
'union' keyword.
Definition zprep.h:103
@ TOK_AT
@
Definition zprep.h:78
@ TOK_RPAREN
)
Definition zprep.h:67
@ TOK_DOTDOT_LT
..< (exclusive range, explicit).
Definition zprep.h:81
@ TOK_ASM
'asm' keyword.
Definition zprep.h:104
@ TOK_COMPTIME
'comptime' keyword.
Definition zprep.h:101
@ TOK_ALIAS
'alias' keyword.
Definition zprep.h:109
@ TOK_CHAR
Character literal.
Definition zprep.h:65
@ TOK_QQ_EQ
??=
Definition zprep.h:93
@ TOK_VOLATILE
'volatile' keyword.
Definition zprep.h:105
@ TOK_AUTOFREE
'autofree' keyword.
Definition zprep.h:89
@ TOK_RBRACE
}
Definition zprep.h:69
@ TOK_RANGLE
Definition zprep.h:73
@ TOK_LANGLE
<
Definition zprep.h:72
@ TOK_TEST
'test' keyword.
Definition zprep.h:84
@ TOK_PREPROC
Preprocessor directive (#...).
Definition zprep.h:108
@ TOK_TRAIT
'trait' keyword.
Definition zprep.h:96
@ TOK_SIZEOF
'sizeof' keyword.
Definition zprep.h:86
@ TOK_DOTDOT
..
Definition zprep.h:79
@ TOK_AWAIT
'await' keyword.
Definition zprep.h:107
@ TOK_FLOAT
Float literal.
Definition zprep.h:62
@ TOK_ARROW
-> or =>
Definition zprep.h:82
@ TOK_AND
'and' keyword.
Definition zprep.h:98
@ TOK_INT
Integer literal.
Definition zprep.h:61
@ TOK_SEMICOLON
;
Definition zprep.h:76
@ TOK_EOF
End of File.
Definition zprep.h:59
@ TOK_OP
General operator (e.g. +, *, /).
Definition zprep.h:77
@ TOK_LBRACKET
[
Definition zprep.h:70
@ TOK_COMMENT
Comment (usually skipped).
Definition zprep.h:110
@ TOK_QUESTION
?
Definition zprep.h:90
void warn_comparison_always_false(Token t, const char *reason)
Warning reporting for comparison always false.
Definition utils.c:402
void warn_unused_parameter(Token t, const char *param_name, const char *func_name)
Warning reporting for unused parameter.
Definition utils.c:415
void warn_unused_variable(Token t, const char *var_name)
Warning reporting for unused variable.
Definition utils.c:329
void error_undefined_function(Token t, const char *func_name, const char *suggestion)
Error reporting for undefined function.
Definition utils.c:264
void warn_shadowing(Token t, const char *var_name)
Warning reporting for shadowing.
Definition utils.c:342
void warn_array_bounds(Token t, int index, int size)
Warning reporting for array bounds.
Definition utils.c:463
char g_link_flags[MAX_FLAGS_SIZE]
Definition zprep.h:373
int levenshtein(const char *s1, const char *s2)
Calculate Levenshtein distance.
Definition utils.c:844
Token lexer_next(Lexer *l)
Get the next token.
Definition token.c:22
void warn_null_pointer(Token t, const char *expr)
Warning reporting for null pointer.
Definition utils.c:488
void warn_integer_overflow(Token t, const char *type_name, long long value)
Warning reporting for integer overflow.
Definition utils.c:451
void scan_build_directives(struct ParserContext *ctx, const char *src)
Scan build directives.
Definition utils.c:618
void register_trait(const char *name)
Register a trait.
Definition ast.c:16
void * xmalloc(size_t size)
Allocate memory.
Definition utils.c:49