Go to file
Andrew Kelley 654832253a stage2: support recursive inline/comptime functions
zir.Inst no longer has an `analyzed_inst` field. This is previously how
we mapped ZIR to their TZIR counterparts, however with the way inline
and comptime function calls work, we can potentially have the same ZIR
structure being analyzed by multiple different analyses, such as during
a recursive inline function call. This would cause the `analyzed_inst`
field to become clobbered. So instead, we use a table to map the
instructions to their semantically analyzed counterparts. This will help
with multi-threaded compilation as well.

Scope.Block.Inlining is split into 2 different layers of "sharedness".
The first layer is shared by the whole inline/comptime function call
stack. It contains the callsite where something is being inlined and the
branch count/quota. The second layer is different per function call but
shared by all the blocks within the function being inlined.

Add support for debug dumping br and brvoid TZIR instructions.

Remove the "unreachable code" error. It was happening even for this case:

```zig
if (comptime_condition) return;
bar(); // error: unreachable code
```

We will need smarter logic for when it is legal to emit this compile
error.

Remove the ZIR test cases. These are redundant with other higher level
Zig source tests we have, and maintaining support for ZIRModule as a
first-class top level abstraction is getting in the way of clean
compiler design for the main use case. We will have ZIR/TZIR based test
cases someday to help with testing optimization passes and ZIR to TZIR
analysis, but as is, these test cases are not accomplishing that, and
they are getting in the way.
2021-01-02 22:42:07 -07:00
.builds ci: use hut.lavatech.top for updating the download page 2020-09-14 19:37:59 -07:00
.github Sponsors Button => ZSF 2020-07-11 18:33:56 -04:00
ci ci: fix git describe 2021-01-01 20:41:39 -07:00
cmake fix cmake logic for checking LLVM version 2020-11-02 12:16:10 -07:00
deps Revert "Include dbg.h to third-party libs" 2020-10-03 21:29:29 -04:00
doc langref: Update langref to use {s} 2021-01-02 17:12:57 -07:00
lib convert more {} to {d} and {s} 2021-01-02 19:03:14 -07:00
src stage2: support recursive inline/comptime functions 2021-01-02 22:42:07 -07:00
test stage2: support recursive inline/comptime functions 2021-01-02 22:42:07 -07:00
tools gdb pretty printers for slices and optionals 2020-12-23 20:21:47 +02:00
.gitattributes .gitattributes: deps/SoftFloat-3e/*.txt lines are crlf terminated 2020-04-05 11:03:31 -04:00
.gitignore fix .gitignore file and add commit missing std lib file 2019-02-26 18:33:27 -05:00
build.zig stage2: implement function call inlining in the frontend 2021-01-02 19:11:19 -07:00
CMakeLists.txt Restore the reverted semantic versioning commits 2021-01-01 21:02:32 -07:00
CODE_OF_CONDUCT.md add a code of conduct 2020-10-08 22:48:16 -07:00
CONTRIBUTING.md update contributing docs 2020-12-10 20:17:07 -07:00
LICENSE
README.md update readme installation instructions 2020-12-07 17:50:14 -07:00

ZIG

A general-purpose programming language and toolchain for maintaining robust, optimal, and reusable software.

Resources

Installation

License

The ultimate goal of the Zig project is to serve users. As a first-order effect, this means users of the compiler, helping programmers to write better software. Even more important, however, are the end-users.

Zig is intended to be used to help end-users accomplish their goals. Zig should be used to empower end-users, never to exploit them financially, or to limit their freedom to interact with hardware or software in any way.

However, such problems are best solved with social norms, not with software licenses. Any attempt to complicate the software license of Zig would risk compromising the value Zig provides.

Therefore, Zig is available under the MIT (Expat) License, and comes with a humble request: use it to make software better serve the needs of end-users.

This project redistributes code from other projects, some of which have other licenses besides MIT. Such licenses are generally similar to the MIT license for practical purposes. See the subdirectories and files inside lib/ for more details.