authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-17 15:58:20-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-17 15:58:20-04:00
logff3cdbc3a078de1d54c13737264ed62f77ff1f50
treeb2ff8f1a46a40a39268153b6f0971e6ee5403817
parent4ad7d09ba5f6f021cb6b6c2045e26fe252f61a27
signature Commit is signed but in an unrecognized format.

stage1 assertions always on, and have stack traces


8 files changed, 37 insertions(+), 12 deletions(-)

src-self-hosted/stage1.zig+4
......@@ -25,3 +25,7 @@ export fn stage2_zen(ptr: *[*]const u8, len: *usize) void {
2525 ptr.* = &info_zen;
2626 len.* = info_zen.len;
2727}
28
29export fn stage2_panic(ptr: [*]const u8, len: usize) void {
30 @panic(ptr[0..len]);
31}
src/buffer.hpp-1
......@@ -10,7 +10,6 @@
1010
1111#include "list.hpp"
1212
13#include <assert.h>
1413#include <stdint.h>
1514#include <ctype.h>
1615#include <stdarg.h>
src/error.hpp+1-5
......@@ -8,8 +8,6 @@
88#ifndef ERROR_HPP
99#define ERROR_HPP
1010
11#include <assert.h>
12
1311enum Error {
1412 ErrorNone,
1513 ErrorNoMem,
......@@ -56,8 +54,6 @@ enum Error {
5654
5755const char *err_str(Error err);
5856
59static inline void assertNoError(Error err) {
60 assert(err == ErrorNone);
61}
57#define assertNoError(err) assert((err) == ErrorNone);
6258
6359#endif
src/list.hpp-2
......@@ -10,8 +10,6 @@
1010
1111#include "util.hpp"
1212
13#include <assert.h>
14
1513template<typename T>
1614struct ZigList {
1715 void deinit() {
src/userland.cpp+17-3
......@@ -2,9 +2,23 @@
22// src-self-hosted/stage1.zig
33
44#include "userland.h"
5#include <stdio.h>
6#include <stdlib.h>
7#include <string.h>
8
9void stage2_translate_c(void) {
10 const char *msg = "stage0 called stage2_translate_c";
11 stage2_panic(msg, strlen(msg));
12}
513
6void stage2_translate_c(void) {}
714void stage2_zen(const char **ptr, size_t *len) {
8 *ptr = nullptr;
9 *len = 0;
15 const char *msg = "stage0 called stage2_zen";
16 stage2_panic(msg, strlen(msg));
17}
18
19void stage2_panic(const char *ptr, size_t len) {
20 fwrite(ptr, 1, len, stderr);
21 fprintf(stderr, "\n");
22 fflush(stderr);
23 abort();
1024}
src/userland.h+2
......@@ -20,4 +20,6 @@ ZIG_USERLAND_EXTERN_C void stage2_translate_c(void);
2020
2121ZIG_USERLAND_EXTERN_C void stage2_zen(const char **ptr, size_t *len);
2222
23ZIG_USERLAND_EXTERN_C void stage2_panic(const char *ptr, size_t len);
24
2325#endif
src/util.cpp+9-1
......@@ -10,17 +10,25 @@
1010#include <stdarg.h>
1111
1212#include "util.hpp"
13#include "userland.h"
1314
1415void zig_panic(const char *format, ...) {
1516 va_list ap;
1617 va_start(ap, format);
1718 vfprintf(stderr, format, ap);
18 fprintf(stderr, "\n");
1919 fflush(stderr);
2020 va_end(ap);
21 stage2_panic(nullptr, 0);
2122 abort();
2223}
2324
25void assert(bool ok) {
26 if (!ok) {
27 const char *msg = "Assertion failed. This is a bug in the Zig compiler.";
28 stage2_panic(msg, strlen(msg));
29 }
30}
31
2432uint32_t int_hash(int i) {
2533 return (uint32_t)(i % UINT32_MAX);
2634}
src/util.hpp+4
......@@ -48,6 +48,10 @@ void zig_panic(const char *format, ...);
4848
4949#define zig_unreachable() zig_panic("unreachable: %s:%s:%d", __FILE__, __func__, __LINE__)
5050
51// Assertions in stage1 are always on, and they call zig @panic.
52#undef assert
53void assert(bool ok);
54
5155#if defined(_MSC_VER)
5256static inline int clzll(unsigned long long mask) {
5357 unsigned long lz;