fix parse-c tests

This commit is contained in:
Andrew Kelley 2017-10-01 21:42:33 -04:00
parent e3ea0b652c
commit 8156e4f78f
3 changed files with 34 additions and 24 deletions

View File

@ -3174,8 +3174,13 @@ int parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const ch
c->warnings_on = codegen->verbose;
c->import = import;
c->errors = errors;
c->visib_mod = (source_node == nullptr) ? VisibModPrivate : VisibModPub;
c->export_visib_mod = (source_node == nullptr) ? VisibModExport : VisibModPub;
if (buf_ends_with_str(buf_create_from_str(target_file), ".h")) {
c->visib_mod = VisibModPub;
c->export_visib_mod = VisibModPub;
} else {
c->visib_mod = VisibModPub;
c->export_visib_mod = VisibModExport;
}
c->decl_table.init(8);
c->macro_table.init(8);
c->ptr_params.init(8);

View File

@ -21,7 +21,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\pub extern fn foo() -> noreturn;
);
cases.add("simple function",
cases.addC("simple function",
\\int abs(int a) {
\\ return a < 0 ? -a : a;
\\}
@ -315,7 +315,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\pub const LUA_GLOBALSINDEX = -10002;
);
cases.add("post increment",
cases.addC("post increment",
\\unsigned foo1(unsigned a) {
\\ a++;
\\ return a;
@ -337,7 +337,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("shift right assign",
cases.addC("shift right assign",
\\int log2(unsigned a) {
\\ int i = 0;
\\ while (a > 0) {
@ -356,7 +356,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("if statement",
cases.addC("if statement",
\\int max(int a, int b) {
\\ if (a < b)
\\ return b;
@ -373,7 +373,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("==, !=",
cases.addC("==, !=",
\\int max(int a, int b) {
\\ if (a == b)
\\ return a;
@ -389,7 +389,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("add, sub, mul, div, rem",
cases.addC("add, sub, mul, div, rem",
\\int s(int a, int b) {
\\ int c;
\\ c = a + b;
@ -425,7 +425,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("bitwise binary operators",
cases.addC("bitwise binary operators",
\\int max(int a, int b) {
\\ return (a & b) ^ (a | b);
\\}
@ -435,7 +435,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("logical and, logical or",
cases.addC("logical and, logical or",
\\int max(int a, int b) {
\\ if (a < b || a == b)
\\ return b;
@ -451,7 +451,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("assign",
cases.addC("assign",
\\int max(int a) {
\\ int tmp;
\\ tmp = a;
@ -466,7 +466,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("chaining assign",
cases.addC("chaining assign",
\\void max(int a) {
\\ int b, c;
\\ c = b = a;
@ -483,7 +483,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("shift right assign with a fixed size type",
cases.addC("shift right assign with a fixed size type",
\\#include <stdint.h>
\\int log2(uint32_t a) {
\\ int i = 0;
@ -513,7 +513,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\pub const Two = 1;
);
cases.add("function call",
cases.addC("function call",
\\static void bar(void) { }
\\void foo(void) { bar(); }
,
@ -523,7 +523,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("field access expression",
cases.addC("field access expression",
\\struct Foo {
\\ int field;
\\};
@ -539,7 +539,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("null statements",
cases.addC("null statements",
\\void foo(void) {
\\ ;;;;;
\\}
@ -553,7 +553,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\pub var array: [100]c_int = undefined;
);
cases.add("array access",
cases.addC("array access",
\\int array[100];
\\int foo(int index) {
\\ return array[index];
@ -566,7 +566,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
);
cases.add("c style cast",
cases.addC("c style cast",
\\int float_to_int(float a) {
\\ return (int)a;
\\}
@ -576,7 +576,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("implicit cast to void *",
cases.addC("implicit cast to void *",
\\void *foo(unsigned short *x) {
\\ return x;
\\}
@ -586,7 +586,7 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
cases.add("sizeof",
cases.addC("sizeof",
\\#include <stddef.h>
\\size_t size_of(void) {
\\ return sizeof(int);

View File

@ -916,7 +916,7 @@ pub const ParseCContext = struct {
%%io.stderr.printf("\n");
}
pub fn create(self: &ParseCContext, allow_warnings: bool, name: []const u8,
pub fn create(self: &ParseCContext, allow_warnings: bool, filename: []const u8, name: []const u8,
source: []const u8, expected_lines: ...) -> &TestCase
{
const tc = %%self.b.allocator.create(TestCase);
@ -926,7 +926,7 @@ pub const ParseCContext = struct {
.expected_lines = ArrayList([]const u8).init(self.b.allocator),
.allow_warnings = allow_warnings,
};
tc.addSourceFile("source.h", source);
tc.addSourceFile(filename, source);
comptime var arg_i = 0;
inline while (arg_i < expected_lines.len) : (arg_i += 1) {
tc.addExpectedLine(expected_lines[arg_i]);
@ -935,12 +935,17 @@ pub const ParseCContext = struct {
}
pub fn add(self: &ParseCContext, name: []const u8, source: []const u8, expected_lines: ...) {
const tc = self.create(false, name, source, expected_lines);
const tc = self.create(false, "source.h", name, source, expected_lines);
self.addCase(tc);
}
pub fn addC(self: &ParseCContext, name: []const u8, source: []const u8, expected_lines: ...) {
const tc = self.create(false, "source.c", name, source, expected_lines);
self.addCase(tc);
}
pub fn addAllowWarnings(self: &ParseCContext, name: []const u8, source: []const u8, expected_lines: ...) {
const tc = self.create(true, name, source, expected_lines);
const tc = self.create(true, "source.h", name, source, expected_lines);
self.addCase(tc);
}