stage2: improvements aimed at std lib integration
* AstGen: emit decl lookup ZIR instructions rather than directly
looking up decls in AstGen. This is necessary because we want to
reuse the same immutable ZIR code for multiple generic instantiations
(and comptime function calls).
* AstGen: fix using members_len instead of fields_len for struct decls.
* structs: the struct_decl ZIR instruction is now also a block. This is
so that the type expressions, default field value expressions, and
alignment expressions can be evaluated in a scope that contains the
decls from the struct namespace itself.
* Add "std" and "builtin" packages to the builtin package.
* Don't try to build glibc, musl, or mingw-w64 when using `-ofmt=c`.
* builtin.zig is generated without `usingnamespace`.
* builtin.zig takes advantage of `std.zig.fmtId` for CPU features.
* A first pass at implementing `usingnamespace`. It's problematic and
should either be deleted, or polished, before merging this branch.
* Sema: allow explicitly specifying the namespace in which to look up
Decls. This is used by `struct_decl` in order to put the decls from
the struct namespace itself in scope when evaluating the type
expressions, default value expressions, and alignment expressions.
* Module: fix `analyzeNamespace` assuming that it is the top-level root
declaration node.
* Sema: implement comptime and runtime cmp operator.
* Sema: implement peer type resolution for enums and enum literals.
* Pull in the changes from master branch:
262e09c482.
* ZIR: complete out simple_ptr_type debug printing
This commit is contained in:
@@ -8921,10 +8921,10 @@ static const char *bool_to_str(bool b) {
|
||||
|
||||
static const char *build_mode_to_str(BuildMode build_mode) {
|
||||
switch (build_mode) {
|
||||
case BuildModeDebug: return "Mode.Debug";
|
||||
case BuildModeSafeRelease: return "Mode.ReleaseSafe";
|
||||
case BuildModeFastRelease: return "Mode.ReleaseFast";
|
||||
case BuildModeSmallRelease: return "Mode.ReleaseSmall";
|
||||
case BuildModeDebug: return "Debug";
|
||||
case BuildModeSafeRelease: return "ReleaseSafe";
|
||||
case BuildModeFastRelease: return "ReleaseFast";
|
||||
case BuildModeSmallRelease: return "ReleaseSmall";
|
||||
}
|
||||
zig_unreachable();
|
||||
}
|
||||
@@ -8995,7 +8995,9 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
|
||||
g->have_err_ret_tracing = detect_err_ret_tracing(g);
|
||||
|
||||
Buf *contents = buf_alloc();
|
||||
buf_appendf(contents, "usingnamespace @import(\"std\").builtin;\n\n");
|
||||
buf_appendf(contents,
|
||||
"const std = @import(\"std\");\n"
|
||||
);
|
||||
|
||||
const char *cur_os = nullptr;
|
||||
{
|
||||
@@ -9089,19 +9091,23 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
|
||||
static_assert(TargetSubsystemEfiRom == 6, "");
|
||||
static_assert(TargetSubsystemEfiRuntimeDriver == 7, "");
|
||||
|
||||
buf_append_str(contents, "/// Deprecated: use `std.Target.current.cpu.arch`\n");
|
||||
buf_append_str(contents, "pub const arch = Target.current.cpu.arch;\n");
|
||||
buf_append_str(contents, "/// Deprecated: use `std.Target.current.cpu.arch.endian()`\n");
|
||||
buf_append_str(contents, "pub const endian = Target.current.cpu.arch.endian();\n");
|
||||
buf_appendf(contents, "pub const output_mode = OutputMode.Obj;\n");
|
||||
buf_appendf(contents, "pub const link_mode = LinkMode.%s;\n", ZIG_QUOTE(ZIG_LINK_MODE));
|
||||
buf_appendf(contents, "pub const output_mode = std.builtin.OutputMode.Obj;\n");
|
||||
buf_appendf(contents, "pub const link_mode = std.builtin.LinkMode.%s;\n", ZIG_QUOTE(ZIG_LINK_MODE));
|
||||
buf_appendf(contents, "pub const is_test = false;\n");
|
||||
buf_appendf(contents, "pub const single_threaded = %s;\n", bool_to_str(g->is_single_threaded));
|
||||
buf_appendf(contents, "pub const abi = Abi.%s;\n", cur_abi);
|
||||
buf_appendf(contents, "pub const cpu: Cpu = Target.Cpu.baseline(.%s);\n", cur_arch);
|
||||
buf_appendf(contents, "pub const os = Target.Os.Tag.defaultVersionRange(.%s);\n", cur_os);
|
||||
buf_appendf(contents, "pub const object_format = ObjectFormat.%s;\n", cur_obj_fmt);
|
||||
buf_appendf(contents, "pub const mode = %s;\n", build_mode_to_str(g->build_mode));
|
||||
buf_appendf(contents, "pub const abi = std.Target.Abi.%s;\n", cur_abi);
|
||||
buf_appendf(contents, "pub const cpu = std.Target.Cpu.baseline(.%s);\n", cur_arch);
|
||||
buf_appendf(contents, "pub const os = std.Target.Os.Tag.defaultVersionRange(.%s);\n", cur_os);
|
||||
buf_appendf(contents,
|
||||
"pub const target = std.Target{\n"
|
||||
" .cpu = cpu,\n"
|
||||
" .os = os,\n"
|
||||
" .abi = abi,\n"
|
||||
"};\n"
|
||||
);
|
||||
|
||||
buf_appendf(contents, "pub const object_format = std.Target.ObjectFormat.%s;\n", cur_obj_fmt);
|
||||
buf_appendf(contents, "pub const mode = std.builtin.Mode.%s;\n", build_mode_to_str(g->build_mode));
|
||||
buf_appendf(contents, "pub const link_libc = %s;\n", bool_to_str(g->link_libc));
|
||||
buf_appendf(contents, "pub const link_libcpp = %s;\n", bool_to_str(g->link_libcpp));
|
||||
buf_appendf(contents, "pub const have_error_return_tracing = %s;\n", bool_to_str(g->have_err_ret_tracing));
|
||||
@@ -9109,13 +9115,13 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
|
||||
buf_appendf(contents, "pub const position_independent_code = %s;\n", bool_to_str(g->have_pic));
|
||||
buf_appendf(contents, "pub const position_independent_executable = %s;\n", bool_to_str(g->have_pie));
|
||||
buf_appendf(contents, "pub const strip_debug_info = %s;\n", bool_to_str(g->strip_debug_symbols));
|
||||
buf_appendf(contents, "pub const code_model = CodeModel.default;\n");
|
||||
buf_appendf(contents, "pub const code_model = std.builtin.CodeModel.default;\n");
|
||||
buf_appendf(contents, "pub const zig_is_stage2 = false;\n");
|
||||
|
||||
{
|
||||
TargetSubsystem detected_subsystem = detect_subsystem(g);
|
||||
if (detected_subsystem != TargetSubsystemAuto) {
|
||||
buf_appendf(contents, "pub const explicit_subsystem = SubSystem.%s;\n", subsystem_to_str(detected_subsystem));
|
||||
buf_appendf(contents, "pub const explicit_subsystem = std.builtin.SubSystem.%s;\n", subsystem_to_str(detected_subsystem));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user