From a45db7e853c2aa04ff7a91dbda975f181aa467bd Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 3 Jan 2018 18:25:17 -0500 Subject: [PATCH] add building the self hosted compiler to the main test suite --- build.zig | 5 ++++- src-self-hosted/main.zig | 5 +++++ src-self-hosted/tokenizer.zig | 15 +++++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/build.zig b/build.zig index 9727be084..3d5406718 100644 --- a/build.zig +++ b/build.zig @@ -33,6 +33,8 @@ pub fn build(b: &Builder) { docs_step.dependOn(&docgen_cmd.step); docs_step.dependOn(&docgen_home_cmd.step); + const test_step = b.step("test", "Run all the tests"); + if (findLLVM(b)) |llvm| { // find the stage0 build artifacts because we're going to re-use config.h and zig_cpp library const build_info = b.exec([][]const u8{b.zig_exe, "BUILD_INFO"}); @@ -72,15 +74,16 @@ pub fn build(b: &Builder) { b.default_step.dependOn(&exe.step); b.default_step.dependOn(docs_step); + test_step.dependOn(&exe.step); b.installArtifact(exe); installStdLib(b); + } const test_filter = b.option([]const u8, "test-filter", "Skip tests that do not match filter"); const with_lldb = b.option(bool, "with-lldb", "Run tests in LLDB to get a backtrace if one fails") ?? false; - const test_step = b.step("test", "Run all the tests"); test_step.dependOn(docs_step); diff --git a/src-self-hosted/main.zig b/src-self-hosted/main.zig index ff8fb37b4..a737cd950 100644 --- a/src-self-hosted/main.zig +++ b/src-self-hosted/main.zig @@ -626,3 +626,8 @@ fn findZigLibDir(allocator: &mem.Allocator) -> %[]u8 { return error.FileNotFound; } + +test "import tests" { + _ = @import("tokenizer.zig"); + _ = @import("parser.zig"); +} diff --git a/src-self-hosted/tokenizer.zig b/src-self-hosted/tokenizer.zig index de2fbdc1e..92312a063 100644 --- a/src-self-hosted/tokenizer.zig +++ b/src-self-hosted/tokenizer.zig @@ -204,6 +204,7 @@ pub const Tokenizer = struct { LineComment, Zero, IntegerLiteral, + IntegerLiteralWithRadix, NumberDot, FloatFraction, FloatExponentUnsigned, @@ -454,7 +455,7 @@ pub const Tokenizer = struct { }, State.Zero => switch (c) { 'b', 'o', 'x' => { - state = State.IntegerLiteral; + state = State.IntegerLiteralWithRadix; }, else => { // reinterpret as a normal number @@ -469,6 +470,16 @@ pub const Tokenizer = struct { 'p', 'P', 'e', 'E' => { state = State.FloatExponentUnsigned; }, + '0'...'9' => {}, + else => break, + }, + State.IntegerLiteralWithRadix => switch (c) { + '.' => { + state = State.NumberDot; + }, + 'p', 'P' => { + state = State.FloatExponentUnsigned; + }, '0'...'9', 'a'...'f', 'A'...'F' => {}, else => break, }, @@ -485,7 +496,7 @@ pub const Tokenizer = struct { }, }, State.FloatFraction => switch (c) { - 'p', 'P', 'e', 'E' => { + 'p', 'P' => { state = State.FloatExponentUnsigned; }, '0'...'9', 'a'...'f', 'A'...'F' => {},