aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/function.cxx
AgeCommit message (Collapse)AuthorFilesLines
2024-02-07Add experimental support for JSON value typesBoris Kolpackov1-0/+3
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-08-09Auto-extract function documentation from functions-*.cxxBoris Kolpackov1-0/+2
2023-08-09Complete and cleanup function documentation in preparation for auto-extractionBoris Kolpackov1-0/+2
Also: - Move the $target.*() function family from functions-name.cxx to separate functions-target.cxx. - Get rid of the separate $process_path_ex.*() family, merging it with $process_path.*().
2022-12-14Improve empty simple value to empty list of names reduction heuristicsBoris Kolpackov1-1/+1
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-09-30Move integer and bool function to separate source/testscript filesBoris Kolpackov1-0/+4
2020-12-04Mark Buildfile functions as pure or impureBoris Kolpackov1-61/+50
2020-03-17Add $defined(<variable>) functionBoris Kolpackov1-7/+2
2020-02-07Drop copyright notice from source codeKaren Arutyunov1-1/+0
2019-11-05Fix function call diagnostics to use diag_frameBoris Kolpackov1-9/+8
2019-08-26Implement updating build system modulesBoris Kolpackov1-1/+1
2019-08-23Introduce notion of build contextBoris Kolpackov1-34/+29
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/+400