From 267ebb590b0a08d6e8bc9e3f8644b491d0d790ac Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 5 Apr 2015 18:56:20 -0700 Subject: 1018 - build system now handles .mu layers No support for tests yet. Need to manually run the current test with: $ mu string-test.mu Also, string-equal seems to have a problem. --- cpp/013run | 12 +++++++++--- cpp/031string.mu | 29 +++++++++++++++++++++++++++++ cpp/build_and_test_until | 1 + cpp/core.mu | 36 ------------------------------------ cpp/makefile | 3 ++- cpp/string-test.mu | 6 ++++++ 6 files changed, 47 insertions(+), 40 deletions(-) create mode 100644 cpp/031string.mu delete mode 100644 cpp/core.mu create mode 100644 cpp/string-test.mu (limited to 'cpp') diff --git a/cpp/013run b/cpp/013run index 48de68d0..7296d128 100644 --- a/cpp/013run +++ b/cpp/013run @@ -83,10 +83,9 @@ inline bool done(routine& rr) { :(before "End Main") if (argc > 1) { setup(); + load("core.mu"); for (int i = 1; i < argc; ++i) { - ifstream fin(argv[i]); - while (!fin.eof()) add_recipe(fin); - fin.close(); + load(argv[i]); } Trace_stream = new trace_stream; @@ -97,6 +96,13 @@ if (argc > 1) { dump_memory(); } +:(code) +void load(string filename) { + ifstream fin(filename.c_str()); + while (!fin.eof()) add_recipe(fin); + fin.close(); +} + //: helper for tests :(before "End Globals") diff --git a/cpp/031string.mu b/cpp/031string.mu new file mode 100644 index 00000000..eff288eb --- /dev/null +++ b/cpp/031string.mu @@ -0,0 +1,29 @@ +recipe string-equal [ + default-space:address:space <- new location:type, 30:literal + a:address:array:character <- next-ingredient + a-len:integer <- length a:address:array:character/deref + b:address:array:character <- next-ingredient + b-len:integer <- length b:address:array:character/deref + # compare lengths + { + length-equal?:boolean <- equal a-len:integer, b-len:integer + break-if length-equal?:boolean + reply 0:literal + } + # compare each corresponding character + i:integer <- copy 0:literal + { + done?:boolean <- greater-or-equal i:integer, a-len:integer + break-if done?:boolean + a2:character <- index a:address:array:character/deref, i:integer + b2:character <- index b:address:array:character/deref, i:integer + { + chars-match?:boolean <- equal a2:character, b2:character + break-if chars-match?:boolean + reply 0:literal + } + i:integer <- add i:integer, 1:literal + loop + } + reply 1:literal +] diff --git a/cpp/build_and_test_until b/cpp/build_and_test_until index cd0db64b..6c469604 100755 --- a/cpp/build_and_test_until +++ b/cpp/build_and_test_until @@ -7,6 +7,7 @@ set -v make tangle/tangle make enumerate/enumerate ./tangle/tangle $(./enumerate/enumerate --until $* |grep -v '.mu$') |grep -v "^\s*//:" > mu.cc +cat /dev/null $(./enumerate/enumerate --until $* |grep '.mu$') > core.mu make autogenerated_lists g++ -g -Wall -Wextra -fno-strict-aliasing mu.cc -o mu ./mu test diff --git a/cpp/core.mu b/cpp/core.mu deleted file mode 100644 index b1fd34d2..00000000 --- a/cpp/core.mu +++ /dev/null @@ -1,36 +0,0 @@ -recipe string-equal [ - default-space:address:space <- new location:type, 30:literal - a:address:array:character <- next-ingredient - a-len:integer <- length a:address:array:character/deref - b:address:array:character <- next-ingredient - b-len:integer <- length b:address:array:character/deref - # compare lengths - { - length-equal?:boolean <- equal a-len:integer, b-len:integer - break-if length-equal?:boolean - reply 0:literal - } - # compare each corresponding character - i:integer <- copy 0:literal - { - done?:boolean <- greater-or-equal i:integer, a-len:integer - break-if done?:boolean - a2:character <- index a:address:array:character/deref, i:integer - b2:character <- index b:address:array:character/deref, i:integer - { - chars-match?:boolean <- equal a2:character, b2:character - break-if chars-match?:boolean - reply 0:literal - } - i:integer <- add i:integer, 1:literal - loop - } - reply 1:literal -] - -recipe main [ - default-space:address:space <- new location:type, 30:literal - x:address:array:character <- new [abc] - y:address:array:character <- new [abd] - 3:boolean/raw <- string-equal x:address:array:character, y:address:array:character -] diff --git a/cpp/makefile b/cpp/makefile index a42667c9..470c20c0 100644 --- a/cpp/makefile +++ b/cpp/makefile @@ -5,6 +5,7 @@ mu: makefile enumerate/enumerate tangle/tangle mu.cc # mu.cc mu.cc: 0* ./tangle/tangle $$(./enumerate/enumerate --until 999 |grep -v '.mu$$') |grep -v "^\s*//:" > mu.cc + cat $$(./enumerate/enumerate --until 999 |grep '.mu$$') > core.mu @make autogenerated_lists >/dev/null enumerate/enumerate: @@ -32,4 +33,4 @@ clena: clean clean: cd enumerate && make clean cd tangle && make clean - rm -rf mu.cc mu *_list + rm -rf mu.cc core.mu mu *_list diff --git a/cpp/string-test.mu b/cpp/string-test.mu new file mode 100644 index 00000000..158c59fd --- /dev/null +++ b/cpp/string-test.mu @@ -0,0 +1,6 @@ +recipe main [ + default-space:address:space <- new location:type, 30:literal + x:address:array:character <- new [abcd] + y:address:array:character <- new [abc] + 3:boolean/raw <- string-equal x:address:array:character, y:address:array:character +] -- cgit 1.4.1-2-gfad0