diff options
-rw-r--r-- | cpp/.traces/copy_literal (renamed from cpp/.traces/parse) | 3 | ||||
-rw-r--r-- | cpp/.traces/first_recipe (renamed from cpp/.traces/literal) | 0 | ||||
-rw-r--r-- | cpp/.traces/parse_multiple_ingredients | 5 | ||||
-rw-r--r-- | cpp/.traces/parse_multiple_products (renamed from cpp/.traces/parse2) | 0 | ||||
-rw-r--r-- | cpp/001test | 2 | ||||
-rw-r--r-- | cpp/002trace | 13 | ||||
-rw-r--r-- | cpp/makefile | 2 | ||||
-rw-r--r-- | cpp/tangle/030tangle.cc | 2 |
8 files changed, 25 insertions, 2 deletions
diff --git a/cpp/.traces/parse b/cpp/.traces/copy_literal index d20319d2..94d56f2e 100644 --- a/cpp/.traces/parse +++ b/cpp/.traces/copy_literal @@ -1,3 +1,6 @@ parse/0: instruction: 1 parse/0: ingredient: {name: "23", type: 0} parse/0: product: {name: "1", type: 1} +run/0: instruction 0 +run/0: ingredient 0 is 23 +mem/0: storing in location 1 diff --git a/cpp/.traces/literal b/cpp/.traces/first_recipe index d20319d2..d20319d2 100644 --- a/cpp/.traces/literal +++ b/cpp/.traces/first_recipe diff --git a/cpp/.traces/parse_multiple_ingredients b/cpp/.traces/parse_multiple_ingredients new file mode 100644 index 00000000..ee0c09ba --- /dev/null +++ b/cpp/.traces/parse_multiple_ingredients @@ -0,0 +1,5 @@ +parse/0: instruction: 1 +parse/0: ingredient: {name: "23", type: 0} +parse/0: ingredient: {name: "4", type: 1} +parse/0: product: {name: "1", type: 1} +parse/0: product: {name: "2", type: 1} diff --git a/cpp/.traces/parse2 b/cpp/.traces/parse_multiple_products index f8d5050e..f8d5050e 100644 --- a/cpp/.traces/parse2 +++ b/cpp/.traces/parse_multiple_products diff --git a/cpp/001test b/cpp/001test index 45ec591d..ed10e97e 100644 --- a/cpp/001test +++ b/cpp/001test @@ -20,6 +20,8 @@ bool Passed = true; long Num_failures = 0; +#define TEST(name) void test_##name() { Trace_file = #name; + #define CHECK(X) \ if (!(X)) { \ ++Num_failures; \ diff --git a/cpp/002trace b/cpp/002trace index 4d584cb1..e3ebd17e 100644 --- a/cpp/002trace +++ b/cpp/002trace @@ -185,9 +185,20 @@ ostream& operator<<(ostream& os, unused die) { #define DUMP(layer) cerr << Trace_stream->readable_contents(layer) // Trace_stream is a resource, lease_tracer uses RAII to manage it. +string Trace_file; +static string Trace_dir = ".traces/"; struct lease_tracer { lease_tracer() { Trace_stream = new trace_stream; } - ~lease_tracer() { delete Trace_stream, Trace_stream = NULL; } + ~lease_tracer() { +//? cerr << "write to file? " << Trace_file << "$\n"; //? 2 + if (!Trace_file.empty()) { +//? cerr << "writing\n"; //? 2 + ofstream fout((Trace_dir+Trace_file).c_str()); + fout << Trace_stream->readable_contents(""); + fout.close(); + } + delete Trace_stream, Trace_stream = NULL, Trace_file = ""; + } }; #define START_TRACING_UNTIL_END_OF_SCOPE lease_tracer leased_tracer; diff --git a/cpp/makefile b/cpp/makefile index 97187383..fe801a95 100644 --- a/cpp/makefile +++ b/cpp/makefile @@ -17,9 +17,11 @@ autogenerated_lists: mu.cc function_list test_list function_list: mu.cc @grep -h "^[^ #].*) {" mu.cc |perl -pwe 's/ {.*/;/' > function_list + @grep -h "^[[:space:]]*TEST(" mu.cc |perl -pwe 's/^\s*TEST\((.*)\)$$/void test_$$1();/' >> function_list test_list: mu.cc @grep -h "^[[:space:]]*void test_" mu.cc |perl -pwe 's/^\s*void (.*)\(\) {.*/$$1,/' > test_list + @grep -h "^[[:space:]]*TEST(" mu.cc |perl -pwe 's/^\s*TEST\((.*)\)$$/test_$$1,/' >> test_list clean: cd tangle && make clean diff --git a/cpp/tangle/030tangle.cc b/cpp/tangle/030tangle.cc index 2dda8667..c47c8cc1 100644 --- a/cpp/tangle/030tangle.cc +++ b/cpp/tangle/030tangle.cc @@ -181,7 +181,7 @@ list<string>::iterator balancing_curly(list<string>::iterator orig) { // followed by one or more lines trace shouldn't include ('-') // Remember to update is_input below if you add to this format. void emit_test(const string& name, list<string>& lines, list<string>& result) { - result.push_back("void test_"+name+"() {"); + result.push_back("TEST("+name+")"); while (any_non_input_line(lines)) { if (!any_line_starts_with(lines, "=>")) emit_session(lines, result); // simpler version; no need to check result |