Browse Source

Merge pull request #222 from shuaDev/master

added compiler command for only parsing and typechecking
gingerBill 7 years ago
parent
commit
af2048570c
2 changed files with 21 additions and 0 deletions
  1. 1 0
      src/build_settings.cpp
  2. 20 0
      src/main.cpp

+ 1 - 0
src/build_settings.cpp

@@ -27,6 +27,7 @@ struct BuildContext {
 	bool   show_timings;
 	bool   keep_temp_files;
 	bool   no_bounds_check;
+	bool   no_output_files;
 
 	gbAffinity affinity;
 	isize      thread_count;

+ 20 - 0
src/main.cpp

@@ -162,6 +162,7 @@ void usage(String argv0) {
 	print_usage_line(0, "Commands:");
 	print_usage_line(1, "build     compile .odin file as executable");
 	print_usage_line(1, "run       compile and run .odin file");
+	print_usage_line(1, "check     parse and type check .odin file");
 	print_usage_line(1, "docs      generate documentation for a .odin file");
 	print_usage_line(1, "version   print version");
 }
@@ -724,6 +725,13 @@ int main(int arg_count, char **arg_ptr) {
 			return 1;
 		}
 		init_filename = args[2];
+	} else if (command == "check") {
+		if (args.count < 3) {
+			usage(args[0]);
+			return 1;
+		}
+		build_context.no_output_files = true;
+		init_filename = args[2];
 	} else if (command == "docs") {
 		if (args.count < 3) {
 			usage(args[0]);
@@ -795,6 +803,18 @@ int main(int arg_count, char **arg_ptr) {
 
 	check_parsed_files(&checker);
 
+	if (build_context.no_output_files) {
+		if (build_context.show_timings) {
+			show_timings(&checker, &timings);
+		}
+
+		if (global_error_collector.count != 0) {
+			return 1;
+		}
+
+		return 0;
+	}
+
 	irGen ir_gen = {0};
 	if (!ir_gen_init(&ir_gen, &checker)) {
 		return 1;