Age | Commit message (Collapse) | Author | Files | Lines | |
---|---|---|---|---|---|
2024-02-07 | Use reverse to fundamental types semantics in $json.member_value() | Boris Kolpackov | 1 | -1/+1 | |
Feels like this is an equivalent context to subscript/iteration. | |||||
2024-02-07 | Map JSON null in subscript/iteration to [null] instead of empty | Boris Kolpackov | 1 | -6/+14 | |
This in fact feels more natural in the "for consumption" model and also helps with the nested subscript semantics. | |||||
2024-02-07 | Add support for nested subscript, use for json access | Boris Kolpackov | 1 | -0/+29 | |
2024-02-07 | Add experimental support for JSON value types | Boris Kolpackov | 5 | -0/+651 | |
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-12-14 | Allow enabling C++ modules for C++20 and later std.cxx values | Boris Kolpackov | 2 | -5/+6 | |
2023-12-08 | Only enable modules tests for MSVC 17.6 and later | Boris Kolpackov | 1 | -2/+4 | |
2023-12-08 | Re-enable modules tests for MSVC and drop workarounds for old bugs | Boris Kolpackov | 2 | -7/+13 | |
2023-11-17 | Disable modules tests for Apple Clang | Boris Kolpackov | 1 | -2/+6 | |
2023-11-09 | Enable named modules tests for Clang 16 or later (but not on Windows) | Boris Kolpackov | 2 | -6/+7 | |
2023-11-02 | Add $first()/$second() pair functions | Boris Kolpackov | 1 | -0/+25 | |
2023-06-26 | Suppress -Wdangling-reference GCC 13 warning | Karen Arutyunov | 1 | -0/+5 | |
2023-06-26 | Suppress -Wunqualified-std-cast-call Clang 15 warning | Karen Arutyunov | 1 | -0/+2 | |
2023-06-07 | Re-disable C++20 modules tests for MinGW GCC | Boris Kolpackov | 1 | -3/+1 | |
Several tests (other than the expected symexport) are still failing due to what looks like Windows-specific bugs in the compiler. | |||||
2023-06-07 | Try to enable C++20 modules tests for MinGW GCC | Boris Kolpackov | 1 | -1/+3 | |
2023-05-30 | Add $path.posix_string() and $path.posix_representation() functions | Karen Arutyunov | 1 | -0/+72 | |
2023-01-09 | Fix simple and script tests to correctly terminate processes which don't ↵ | Karen Arutyunov | 1 | -1/+4 | |
close stderr on exit | |||||
2022-12-15 | Add $regex.filter[_out]_{match,search}() functions | Karen Arutyunov | 1 | -0/+116 | |
2022-12-15 | Improve escape sequence support | Boris Kolpackov | 1 | -0/+17 | |
Specifically: 1. In the double-quoted strings we now only do effective escaping of the special `$("\` characters plus `)` for symmetry. 2. There is now support for "escape sequence expansion" in the form $\X where \X can be any of the C/C++ simple escape sequences (\n, \t, etc) plus \0 (which in C/C++ is an octal escape sequence). For example: info "foo$\n$\tbar$\n$\tbaz" Will print: buildfile:1:1: info: foo bar baz | |||||
2022-12-14 | Improve empty simple value to empty list of names reduction heuristics | Boris Kolpackov | 1 | -0/+55 | |
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-12-14 | Handle NULL values in $string() and $concat() functions | Boris Kolpackov | 1 | -0/+42 | |
This is relied upon by the parser to provide conversion/concatenation semantics consistent with untyped values. Note that we handle NULL values only for types that have empty representation. | |||||
2022-12-02 | Fail if scope or target qualification in variable expansion is unknown | Boris Kolpackov | 2 | -0/+21 | |
There are three options here: we can "fall through" to an outer scope (there is always the global scope backstop; this is the old semantics, sort of), we can return NULL straight away, or we can fail. It feels like in most cases unknown scope or target is a mistake and doing anything other than failing is just making things harder to debug. | |||||
2022-11-25 | Use operation name as a buildscript name if unable to deduce | Karen Arutyunov | 1 | -12/+36 | |
2022-11-18 | Fix test failure on Windows | Boris Kolpackov | 1 | -1/+1 | |
2022-11-18 | Complete low verbosity diagnostics rework | Boris Kolpackov | 2 | -51/+51 | |
2022-11-16 | Initial low verbosity diagnostics rework | Boris Kolpackov | 2 | -2/+2 | |
2022-11-14 | Add buffering for simple test diagnosticsdiag-buffer | Karen Arutyunov | 2 | -13/+144 | |
Also fix simple test redirecting diff's stdout to stderr. | |||||
2022-11-09 | Use diag_buffer in script | Karen Arutyunov | 7 | -31/+53 | |
2022-11-08 | Make process exit diagnostics consistent | Boris Kolpackov | 1 | -1/+2 | |
In particular, we now always print error message on non-0 exit except in cases where such exit is ignored. | |||||
2022-10-25 | Allow concatenation of path/dir_path type to be a path pattern | Karen Arutyunov | 2 | -1/+30 | |
2022-10-21 | Add support for pairs in script 'for x:...' loop | Karen Arutyunov | 1 | -0/+34 | |
2022-10-21 | Change attribute syntax in script to come after variable in set and for (set ↵ | Karen Arutyunov | 3 | -41/+99 | |
x [...], for x [...]) | |||||
2022-10-20 | Add support for for-loop element type | Karen Arutyunov | 1 | -0/+14 | |
2022-10-18 | Fix unexpected 'unterminated double-quoted sequence' script error | Karen Arutyunov | 2 | -0/+65 | |
2022-10-18 | Invent diag preamble for buildscript | Karen Arutyunov | 2 | -1/+23 | |
2022-10-14 | Make -w|--whitespace to be default for for-loop | Karen Arutyunov | 1 | -6/+17 | |
2022-10-14 | Fix printing test id multiple times on test failure | Karen Arutyunov | 1 | -0/+26 | |
2022-10-13 | Fix script 'for' loop tests | Karen Arutyunov | 2 | -3/+3 | |
2022-10-13 | Add support for 'for' loop second (... | for x) and third (for x <...) forms ↵ | Karen Arutyunov | 3 | -14/+1249 | |
in script | |||||
2022-10-13 | Add test for public/private variable model | Boris Kolpackov | 2 | -0/+50 | |
2022-10-13 | Switch to public/private variables model | Boris Kolpackov | 2 | -40/+40 | |
Now unqualified variables are project-private and can be typified. | |||||
2022-09-30 | Move integer and bool function to separate source/testscript files | Boris Kolpackov | 3 | -39/+47 | |
2022-09-29 | Add $find(<sequence>, <value>), $find_index(<sequence>, <value>) functions | Boris Kolpackov | 4 | -2/+60 | |
The $find() function returns true if the sequence contains the specified value. The $find_index() function returns the index of the first element in the sequence that is equal to the specified value or $size(<sequence>) if none is found. For string sequences, it's possible to request case- insensitive comparison with a flag. | |||||
2022-09-28 | Add support for 'for' loop first form (for x:...) in script | Karen Arutyunov | 2 | -0/+164 | |
2022-09-28 | Add support for 'while' loop in script | Karen Arutyunov | 4 | -20/+62 | |
2022-09-27 | Fix test for handling of name patterns with trailing dot | Karen Arutyunov | 1 | -1/+1 | |
2022-09-23 | Add $is_a(<name>, <target-type>), $filter[_out](<names>, <target-types>) ↵ | Boris Kolpackov | 1 | -0/+36 | |
functions $is_a() returns true if the <name>'s target type is-a <target-type>. Note that this is a dynamic type check that takes into account target type inheritance. $filter[_out]() return names with target types which are-a (filter) or not are-a (filter_out) one of <target-types>. In particular, these functions are useful for filtering prerequisite targets ($<) in ad hoc recipes and rules. | |||||
2022-09-22 | Add $integer_sequence(<begin>, <end>[, <step>]) function | Boris Kolpackov | 1 | -0/+8 | |
It returns the list of uint64 integers starting from <begin> (including) to <end> (excluding) with the specified <step> or 1 if unspecified. For example: hdr = foo.hxx bar.hxx baz.hxx src = foo.cxx bar.cxx baz.cxx assert ($size($hdr) == $size($src)) "hdr and src expected to be parallel" for i: $integer_sequence(0, $size($hdr)) { h = ($hdr[$i]) s = ($src[$i]) ... } | |||||
2022-09-22 | Add support for hex notation for uint64 type | Boris Kolpackov | 1 | -0/+8 | |
Specifically, now we can do: x = [uint64] 0x0000ffff cxx.poptions += "-DOFFSET=$x" # -DOFFSET=65535 cxx.poptions += "-DOFFSET=$string($x, 16)" # -DOFFSET=0xffff cxx.poptions += "-DOFFSET=$string($x, 16, 8)" # -DOFFSET=0x0000ffff Note that there is no hex notation support for the int64 (signed) type. | |||||
2022-09-19 | Allow computed variables in depdb preamble similar to impure functions | Boris Kolpackov | 1 | -5/+27 | |
2022-09-02 | Add ability to specify `in` rule substitution as key-value pairs | Boris Kolpackov | 1 | -2/+27 | |