aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/variable.ixx
AgeCommit message (Collapse)AuthorFilesLines
2024-02-20Add json_map and json_set buildfile value typesBoris Kolpackov1-1/+41
These expose the std::map<json_value,json_value> and std::set<json_value> types to buildfiles. New functions: $size(<json-set>) $size(<json-map>) $keys(<json-map>) Note that the $keys() function returns the list of map key as a json array. For example: m = [json_map] 2@([json] a@1 b@2) 1@([json] 1 2) s = [json_set] ([json] x@1 y@2) ([json] a@1 b@2) print ($m[2][b]) # 2 print ($s[([json] y@2 x@1)]) # true
2024-02-20Add string_set buildfile value typeBoris Kolpackov1-0/+38
This exposes the std::set<std::string> type to buildfiles. New functions: $size(<string-set>) Subscript returns true if the value is present and false otherwise (so it is mapped to std::set::contains()). For example: set = [string_set] a b c if ($set[b]) ... Note that append (+=) and prepend (=+) have the same semantics (std::set::insert()). For example: set = [string_set] a b set += c b # a b c set =+ d b # a b c d Example of iteration: set = [string_set] a b c for k: $set ...
2024-02-07Add experimental support for JSON value typesBoris Kolpackov1-0/+107
New types: json json_array json_object New functions: $json.value_type(<json>) $json.value_size(<json>) $json.member_{name,value}(<json-member>) $json.object_names(<json-object>) $json.array_size(<json-array>) $json.array_find(<json-array>, <json>) $json.array_find_index(<json-array>, <json>) $json.load(<path>) $json.parse(<text>) $json.serialize(<json>[, <indentation>]) For example, to load a JSON value from a file: j = $json.load($src_base/board.json) Or to construct it in a buildfile: j = [json] one@1 two@([json] 2 3 4) three@([json] x@1 y@-1) This can also be done incrementally with append/prepend: j = [json_object] j += one@1 j += two@([json] 2 3 4) j += three@([json] x@1 y@-1) Instead of using this JSON-like syntax, one can also specify valid JSON input text: j = [json] '{"one":1, "two":[2, 3, 4], "three":{"x":1, "y":-1}' Besides the above set of functions, other handy ways to access components in a JSON value are iteration and subscript. For example: for m: $j print $member_name($m) $member_value($m) print ($j[three]) A subscript can be nested: print ($j[two][1]) print ($j[three][x]) While a JSON value can be printed directly like any other value, the representation will not be pretty-printed. As a result, for complex JSON values, printing a serialized representation might be a more readable option: info $serialize($j)
2023-06-12Hack around GCC 13 -Wdangling-reference false positivesBoris Kolpackov1-6/+6
See GCC bugs 107532, 110213.
2022-12-14Improve empty simple value to empty list of names reduction heuristicsBoris Kolpackov1-4/+7
Specifically, do not reduce typed RHS empty simple values for prepend/append and additionally for assignment provided LHS is typed and is a container.
2022-10-13Reorder functions to help MinGW GCC with DLL symbol exportingBoris Kolpackov1-8/+8
2022-10-13Switch to public/private variables modelBoris Kolpackov1-1/+14
Now unqualified variables are project-private and can be typified.
2021-01-30Add std::{map, multimap} to types.hxxBoris Kolpackov1-3/+3
Seeing that std::map is becoming a common Buildfile variable type.
2021-01-28Make std::map prepend (=+) overriding (like insert_or_assign())Boris Kolpackov1-0/+36
2021-01-22Add support for optional pair halves in variable valuesBoris Kolpackov1-0/+25
2020-08-24Add copying version of convert<T>(value)Boris Kolpackov1-4/+14
2020-08-12Add int64 and int64s variable typesBoris Kolpackov1-0/+28
2020-06-02Add process_path_ex with program stable name and checksumBoris Kolpackov1-1/+19
2020-04-27Add support for untyped assignment to valueBoris Kolpackov1-0/+16
2020-02-07Drop copyright notice from source codeKaren Arutyunov1-1/+0
2019-11-12Add support for vector<pair<K, V>> variable valuesBoris Kolpackov1-0/+31
2019-10-22Move global mutex shards to contextBoris Kolpackov1-1/+1
2019-08-23Introduce notion of build contextBoris Kolpackov1-1/+1
All non-const global state is now in class context and we can now have multiple independent builds going on at the same time.
2019-07-01Split build system into library and driverBoris Kolpackov1-0/+812