From 18ce15f3aee71debe3f35356c6a739943815da8a Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Wed, 12 Oct 2016 14:53:32 +0200 Subject: Initial work on testscript lexer/parser --- build2/test/script/script | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 build2/test/script/script (limited to 'build2/test/script/script') diff --git a/build2/test/script/script b/build2/test/script/script new file mode 100644 index 0000000..de81fa6 --- /dev/null +++ b/build2/test/script/script @@ -0,0 +1,66 @@ +// file : build2/test/script/script -*- C++ -*- +// copyright : Copyright (c) 2014-2016 Code Synthesis Ltd +// license : MIT; see accompanying LICENSE file + +#ifndef BUILD2_TEST_SCRIPT_SCRIPT +#define BUILD2_TEST_SCRIPT_SCRIPT + +#include +#include + +#include + +namespace build2 +{ + class target; + + namespace test + { + namespace script + { + class script + { + public: + script (target& tt, target& st) + : test_target (tt), script_target (st) {} + + public: + target& test_target; // Target we are testing. + target& script_target; // Target of the testscript file. + + public: + // Note that if we pass the variable name as a string, then it will + // be looked up in the wrong pool. + // + variable_pool var_pool; + variable_map vars; + + // Lookup the variable starting from this scope, continuing with outer + // scopes, then the target being tested, then the testscript target, + // and then outer buildfile scopes (including testscript-type/pattern + // specific). + // + lookup + find (const variable&) const; + + // Return a value suitable for assignment. If the variable does not + // exist in this scope's map, then a new one with the NULL value is + // added and returned. Otherwise the existing value is returned. + // + value& + assign (const variable& var) {return vars.assign (var);} + + // Return a value suitable for append/prepend. If the variable does + // not exist in this scope's map, then outer scopes are searched for + // the same variable. If found then a new variable with the found + // value is added to this scope and returned. Otherwise this function + // proceeds as assign() above. + // + value& + append (const variable&); + }; + } + } +} + +#endif // BUILD2_TEST_SCRIPT_SCRIPT -- cgit v1.1