From 98cb2c3239304ccee061166da95ed79ea4f622fc Mon Sep 17 00:00:00 2001 From: John Alanbrook Date: Sun, 18 Jan 2026 10:35:05 -0600 Subject: [PATCH] switch to length fn --- add.ce | 4 +- bench.ce | 36 ++++++++-------- benchmarks/eratosthenes.ce | 2 +- benchmarks/js_perf.ce | 2 +- benchmarks/nbody.ce | 6 +-- benchmarks/spectral-norm.ce | 8 ++-- benchmarks/wota.ce | 6 +-- benchmarks/wota_nota_json.ce | 12 +++--- build.ce | 12 +++--- clean.ce | 4 +- clone.ce | 4 +- config.ce | 18 ++++---- fetch.ce | 4 +- graph.ce | 16 ++++---- help.ce | 2 +- install.ce | 14 +++---- link.ce | 10 ++--- list.ce | 18 ++++---- ls.ce | 8 ++-- pack.ce | 16 ++++---- qopconv.ce | 12 +++--- remove.ce | 4 +- resolve.ce | 16 ++++---- search.ce | 10 ++--- source/quickjs.c | 1 - test.ce | 80 ++++++++++++++++++------------------ unlink.ce | 2 +- update.ce | 14 +++---- upgrade.ce | 4 +- verify.ce | 16 ++++---- why.ce | 8 ++-- 31 files changed, 184 insertions(+), 185 deletions(-) diff --git a/add.ce b/add.ce index 013dc4fd..074cbda1 100644 --- a/add.ce +++ b/add.ce @@ -14,7 +14,7 @@ var fd = use('fd') var locator = null var alias = null -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--help' || args[i] == '-h') { log.console("Usage: cell add [alias]") log.console("") @@ -51,7 +51,7 @@ if (locator == '.' || starts_with(locator, './') || starts_with(locator, '../') if (!alias) { // Use the last component of the locator as alias var parts = array(locator, '/') - alias = parts[parts.length - 1] + alias = parts[length(parts) - 1] // Remove any version suffix if (search(alias, '@') != null) { alias = array(alias, '@')[0] diff --git a/bench.ce b/bench.ce index 2b4afeaf..94b3e532 100644 --- a/bench.ce +++ b/bench.ce @@ -24,44 +24,44 @@ def MAX_BATCH_SIZE = 100000000 // 100M iterations max per batch // Statistical functions function median(arr) { - if (arr.length == 0) return 0 + if (length(arr) == 0) return 0 var sorted = sort(arr) - var mid = floor(arr.length / 2) - if (arr.length % 2 == 0) { + var mid = floor(length(arr) / 2) + if (length(arr) % 2 == 0) { return (sorted[mid - 1] + sorted[mid]) / 2 } return sorted[mid] } function mean(arr) { - if (arr.length == 0) return 0 + if (length(arr) == 0) return 0 var sum = 0 arrfor(arr, function(val) { sum += val }) - return sum / arr.length + return sum / length(arr) } function stddev(arr, mean_val) { - if (arr.length < 2) return 0 + if (length(arr) < 2) return 0 var sum_sq_diff = 0 arrfor(arr, function(val) { var diff = val - mean_val sum_sq_diff += diff * diff }) - return math.sqrt(sum_sq_diff / (arr.length - 1)) + return math.sqrt(sum_sq_diff / (length(arr) - 1)) } function percentile(arr, p) { - if (arr.length == 0) return 0 + if (length(arr) == 0) return 0 var sorted = sort(arr) - var idx = floor(arr.length * p / 100) - if (idx >= arr.length) idx = arr.length - 1 + var idx = floor(arr) * p / 100) + if (idx >= length(arr)) idx = length(arr) - 1 return sorted[idx] } function min_val(arr) { - if (arr.length == 0) return 0 + if (length(arr) == 0) return 0 var m = arr[0] arrfor(slice(arr, 1), function(val) { if (val < m) m = val @@ -70,7 +70,7 @@ function min_val(arr) { } function max_val(arr) { - if (arr.length == 0) return 0 + if (length(arr) == 0) return 0 var m = arr[0] arrfor(slice(arr, 1), function(val) { if (val > m) m = val @@ -80,7 +80,7 @@ function max_val(arr) { // Parse arguments similar to test.ce function parse_args() { - if (args.length == 0) { + if (length(args) == 0) { if (!testlib.is_valid_package('.')) { log.console('No cell.toml found in current directory') return false @@ -99,7 +99,7 @@ function parse_args() { } if (args[0] == 'package') { - if (args.length < 2) { + if (length(args) < 2) { log.console('Usage: cell bench package [bench]') log.console(' cell bench package all') return false @@ -132,7 +132,7 @@ function parse_args() { } } - if (args.length >= 3) { + if (length(args) >= 3) { target_bench = args[2] } @@ -419,7 +419,7 @@ function run_benchmarks(package_name, specific_bench) { total: 0 } - if (bench_files.length == 0) return pkg_result + if (length(bench_files) == 0) return pkg_result if (package_name) log.console(`Running benchmarks for ${package_name}`) else log.console(`Running benchmarks for local package`) @@ -448,7 +448,7 @@ function run_benchmarks(package_name, specific_bench) { } } - if (benches.length > 0) { + if (length(benches) > 0) { log.console(` ${f}`) arrfor(benches, function(b) { try { @@ -487,7 +487,7 @@ function run_benchmarks(package_name, specific_bench) { pkg_result.total++ } - if (file_result.benchmarks.length > 0) { + if (length(file_result.benchmarks) > 0) { pkg_result.files.push(file_result) } } diff --git a/benchmarks/eratosthenes.ce b/benchmarks/eratosthenes.ce index 408e35f7..6562e89e 100644 --- a/benchmarks/eratosthenes.ce +++ b/benchmarks/eratosthenes.ce @@ -17,7 +17,7 @@ var sieve = eratosthenes(10000000); stone(sieve) var c = 0 -for (var i = 0; i < sieve.length; i++) +for (var i = 0; i < length(sieve); i++) if (sieve.read_logical(i)) c++ log.console(c) diff --git a/benchmarks/js_perf.ce b/benchmarks/js_perf.ce index 23e7cdc8..a3ece022 100644 --- a/benchmarks/js_perf.ce +++ b/benchmarks/js_perf.ce @@ -126,7 +126,7 @@ function benchArrayOps() { var iterateTime = measureTime(function() { var sum = 0; for (var j = 0; j < 1000; j++) { - for (var i = 0; i < arr.length; i++) { + for (var i = 0; i < length(arr); i++) { sum += arr[i]; } } diff --git a/benchmarks/nbody.ce b/benchmarks/nbody.ce index b8614b12..61847cca 100644 --- a/benchmarks/nbody.ce +++ b/benchmarks/nbody.ce @@ -70,7 +70,7 @@ function offsetMomentum() { var px = 0; var py = 0; var pz = 0; - var size = bodies.length; + var size = length(bodies); for (var i = 0; i < size; i++) { var body = bodies[i]; var mass = body.mass; @@ -86,7 +86,7 @@ function offsetMomentum() { } function advance(dt) { - var size = bodies.length; + var size = length(bodies); for (var i = 0; i < size; i++) { var bodyi = bodies[i]; @@ -127,7 +127,7 @@ function advance(dt) { function energy() { var e = 0; - var size = bodies.length; + var size = length(bodies); for (var i = 0; i < size; i++) { var bodyi = bodies[i]; diff --git a/benchmarks/spectral-norm.ce b/benchmarks/spectral-norm.ce index d1aaabcd..e3a715c3 100644 --- a/benchmarks/spectral-norm.ce +++ b/benchmarks/spectral-norm.ce @@ -5,9 +5,9 @@ function A(i,j) { } function Au(u,v) { - for (var i=0; i '); $stop() } @@ -32,7 +32,7 @@ def libraries = [ decode: wota.decode, // wota produces an ArrayBuffer. We'll count `buffer.byteLength` as size. getSize(encoded) { - return encoded.length; + return length(encoded); } }, { @@ -41,7 +41,7 @@ def libraries = [ decode: nota.decode, // nota also produces an ArrayBuffer: getSize(encoded) { - return encoded.length; + return length(encoded); } }, { @@ -52,7 +52,7 @@ def libraries = [ // as a rough "size". Alternatively, you could convert to UTF-8 for // a more accurate byte size. Here we just use `string.length`. getSize(encodedStr) { - return encodedStr.length; + return length(encodedStr); } } ]; @@ -135,7 +135,7 @@ function runBenchmarkForLibrary(lib, bench) { var encodeTime = measureTime(() => { for (var i = 0; i < bench.iterations; i++) { // For each data item, encode it - for (var j = 0; j < bench.data.length; j++) { + for (var j = 0; j < length(bench.data); j++) { var e = lib.encode(bench.data[j]); // store only in the very first iteration, so we can decode them later // but do not store them every iteration or we blow up memory. @@ -185,7 +185,7 @@ if (!bench) { var { encodeTime, decodeTime, totalSize } = runBenchmarkForLibrary(lib, bench); // Output json for easy parsing by hyperfine or other tools -var totalOps = bench.iterations * bench.data.length; +var totalOps = bench.iterations * length(bench.data); var result = { lib: lib_name, scenario: scenario_name, diff --git a/build.ce b/build.ce index 00ae072c..b6af5eaa 100644 --- a/build.ce +++ b/build.ce @@ -18,9 +18,9 @@ var buildtype = 'release' var force_rebuild = false var dry_run = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '-t' || args[i] == '--target') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target = args[++i] } else { log.error('-t requires a target') @@ -28,14 +28,14 @@ for (var i = 0; i < args.length; i++) { } } else if (args[i] == '-p' || args[i] == '--package') { // Legacy support for -p flag - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target_package = args[++i] } else { log.error('-p requires a package name') $stop() } } else if (args[i] == '-b' || args[i] == '--buildtype') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { buildtype = args[++i] if (buildtype != 'release' && buildtype != 'debug' && buildtype != 'minsize') { log.error('Invalid buildtype: ' + buildtype + '. Must be release, debug, or minsize') @@ -52,7 +52,7 @@ for (var i = 0; i < args.length; i++) { } else if (args[i] == '--list-targets') { log.console('Available targets:') var targets = build.list_targets() - for (var t = 0; t < targets.length; t++) { + for (var t = 0; t < length(targets); t++) { log.console(' ' + targets[t]) } $stop() @@ -110,7 +110,7 @@ if (target_package) { var success = 0 var failed = 0 - for (var i = 0; i < results.length; i++) { + for (var i = 0; i < length(results); i++) { if (results[i].library) { success++ } else if (results[i].error) { diff --git a/clean.ce b/clean.ce index 403820f8..9c69089c 100644 --- a/clean.ce +++ b/clean.ce @@ -24,7 +24,7 @@ var clean_fetch = false var deep = false var dry_run = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--build') { clean_build = true } else if (args[i] == '--fetch') { @@ -170,7 +170,7 @@ if (clean_fetch) { // Execute or report if (dry_run) { log.console("Would delete:") - if (files_to_delete.length == 0 && dirs_to_delete.length == 0) { + if (length(files_to_delete) == 0 && length(dirs_to_delete) == 0) { log.console(" (nothing to clean)") } else { arrfor(files_to_delete, function(f) { diff --git a/clone.ce b/clone.ce index 2ee39903..9222f6e4 100644 --- a/clone.ce +++ b/clone.ce @@ -7,7 +7,7 @@ var fd = use('fd') var http = use('http') var miniz = use('miniz') -if (args.length < 2) { +if (length(args) < 2) { log.console("Usage: cell clone ") log.console("Clones a cell package to a local path and links it.") $stop() @@ -93,7 +93,7 @@ try { if (zip.is_directory(i)) continue var filename = zip.get_filename(i) var parts = array(filename, '/') - if (parts.length <= 1) continue + if (length(parts) <= 1) continue // Skip the first directory (repo-commit prefix) parts.shift() diff --git a/config.ce b/config.ce index 305c2d43..86ea1ce0 100644 --- a/config.ce +++ b/config.ce @@ -47,14 +47,14 @@ function get_nested(obj, path) { // Set a value in nested object using path function set_nested(obj, path, value) { var current = obj - for (var i = 0; i < path.length - 1; i++) { + for (var i = 0; i < length(path) - 1; i++) { var segment = path[i] if (is_null(current[segment]) || !is_object(current[segment])) { current[segment] = {} } current = current[segment] } - current[path[path.length - 1]] = value + current[path[length(path) - 1]] = value } // Parse value string into appropriate type @@ -96,7 +96,7 @@ function print_config(obj, prefix = '') { } // Main command handling -if (args.length == 0) { +if (length(args) == 0) { print_help() $stop() return @@ -125,7 +125,7 @@ switch (command) { break case 'get': - if (args.length < 2) { + if (length(args) < 2) { log.error("Usage: cell config get ") $stop() return @@ -145,7 +145,7 @@ switch (command) { break case 'set': - if (args.length < 3) { + if (length(args) < 3) { log.error("Usage: cell config set ") $stop() return @@ -175,7 +175,7 @@ switch (command) { case 'actor': // Handle actor-specific configuration - if (args.length < 3) { + if (length(args) < 3) { log.error("Usage: cell config actor [options]") $stop() return @@ -190,7 +190,7 @@ switch (command) { switch (actor_cmd) { case 'list': - if (array(config.actors[actor_name]).length == 0) { + if (length(array(config.actors[actor_name])) == 0) { log.console("No configuration for actor: " + actor_name) } else { log.console("# Configuration for actor: " + actor_name) @@ -200,7 +200,7 @@ switch (command) { break case 'get': - if (args.length < 4) { + if (length(args) < 4) { log.error("Usage: cell config actor get ") $stop() return @@ -217,7 +217,7 @@ switch (command) { break case 'set': - if (args.length < 5) { + if (length(args) < 5) { log.error("Usage: cell config actor set ") $stop() return diff --git a/fetch.ce b/fetch.ce index 41c8b0bd..bfc24374 100644 --- a/fetch.ce +++ b/fetch.ce @@ -13,7 +13,7 @@ var shop = use('internal/shop') // Parse arguments var target_pkg = null -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--help' || args[i] == '-h') { log.console("Usage: cell fetch [package]") log.console("Fetch package zips from remote sources.") @@ -83,7 +83,7 @@ var parts = [] if (downloaded_count > 0) parts.push(`${text(downloaded_count)} downloaded`) if (cached_count > 0) parts.push(`${text(cached_count)} cached`) if (fail_count > 0) parts.push(`${text(fail_count)} failed`) -if (parts.length == 0) parts.push("nothing to fetch") +if (length(parts) == 0) parts.push("nothing to fetch") log.console("Fetch complete: " + text(parts, ", ")) $stop() diff --git a/graph.ce b/graph.ce index c86ca804..0efd1042 100644 --- a/graph.ce +++ b/graph.ce @@ -23,9 +23,9 @@ var format = 'tree' var show_locked = false var show_world = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--format' || args[i] == '-f') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { format = args[++i] if (format != 'tree' && format != 'dot' && format != 'json') { log.error('Invalid format: ' + format + '. Must be tree, dot, or json') @@ -163,13 +163,13 @@ if (format == 'tree') { } }) - for (var i = 0; i < children.length; i++) { + for (var i = 0; i < length(children); i++) { var child_prefix = prefix + (is_last ? " " : "| ") - print_tree(children[i].to, child_prefix, i == children.length - 1, visited) + print_tree(children[i].to, child_prefix, i == length(children) - 1, visited) } } - for (var i = 0; i < roots.length; i++) { + for (var i = 0; i < length(roots); i++) { log.console(roots[i]) var children = [] @@ -179,11 +179,11 @@ if (format == 'tree') { } }) - for (var j = 0; j < children.length; j++) { - print_tree(children[j].to, "", j == children.length - 1, {}) + for (var j = 0; j < length(children); j++) { + print_tree(children[j].to, "", j == length(children) - 1, {}) } - if (i < roots.length - 1) log.console("") + if (i < length(roots) - 1) log.console("") } } else if (format == 'dot') { diff --git a/help.ce b/help.ce index 6ed7a179..cd60359d 100644 --- a/help.ce +++ b/help.ce @@ -2,7 +2,7 @@ var fd = use('fd') -var command = args.length > 0 ? args[0] : null +var command = length(args) > 0 ? args[0] : null // Display specific command help if (command) { diff --git a/install.ce b/install.ce index 28a76862..4f364f6a 100644 --- a/install.ce +++ b/install.ce @@ -14,7 +14,7 @@ var build = use('build') var pkg = use('package') var fd = use('fd') -if (args.length < 1) { +if (length(args) < 1) { log.console("Usage: cell install [options]") log.console("") log.console("Options:") @@ -29,9 +29,9 @@ var target_triple = null var refresh = false var dry_run = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--target' || args[i] == '-t') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target_triple = args[++i] } else { log.error('--target requires a triple') @@ -142,7 +142,7 @@ if (dry_run) { var exists = lock[p] != null log.console(" " + p + (exists ? " (already installed)" : "")) }) - if (skipped_packages.length > 0) { + if (length(skipped_packages) > 0) { log.console("") log.console("Would skip (missing local paths):") arrfor(skipped_packages, function(p) { @@ -176,9 +176,9 @@ arrfor(packages_to_install, function(p) { install_package(p) }) -var summary = "Installed " + text(packages_to_install.length) + " package(s)." -if (skipped_packages.length > 0) { - summary += " Skipped " + text(skipped_packages.length) + " missing local path(s)." +var summary = "Installed " + text(length(packages_to_install)) + " package(s)." +if (length(skipped_packages) > 0) { + summary += " Skipped " + text(length(skipped_packages)) + " missing local path(s)." } log.console(summary) diff --git a/link.ce b/link.ce index 0b080962..257e78ac 100644 --- a/link.ce +++ b/link.ce @@ -17,7 +17,7 @@ var shop = use('internal/shop') var fd = use('fd') var toml = use('toml') -if (args.length < 1) { +if (length(args) < 1) { log.console("Usage: link [args] or link [package] ") log.console("Commands:") log.console(" list List all active links") @@ -45,15 +45,15 @@ if (cmd == 'list') { log.console("Syncing links...") var result = link.sync_all(shop) log.console("Synced " + result.synced + " link(s)") - if (result.errors.length > 0) { + if (length(result.errors) > 0) { log.console("Errors:") - for (var i = 0; i < result.errors.length; i++) { + for (var i = 0; i < length(result.errors); i++) { log.console(" " + result.errors[i]) } } } else if (cmd == 'delete' || cmd == 'rm') { - if (args.length < 2) { + if (length(args) < 2) { log.console("Usage: link delete ") $stop() return @@ -92,7 +92,7 @@ if (cmd == 'list') { } var arg1 = args[start_idx] - var arg2 = (args.length > start_idx + 1) ? args[start_idx + 1] : null + var arg2 = (length(args) > start_idx + 1) ? args[start_idx + 1] : null if (!arg1) { log.console("Error: target or package required") diff --git a/list.ce b/list.ce index fd86435a..fdac8a01 100644 --- a/list.ce +++ b/list.ce @@ -13,7 +13,7 @@ var fd = use('fd') var mode = 'local' var target_pkg = null -if (args && args.length > 0) { +if (args && length(args) > 0) { if (args[0] == 'shop') { mode = 'shop' } else if (args[0] == '--help' || args[0] == '-h') { @@ -62,12 +62,12 @@ function print_deps(ctx, indent) { for (var k in deps) aliases.push(k) aliases = sort(aliases) - if (aliases.length == 0) { + if (length(aliases) == 0) { log.console(indent + " (none)") return } - for (var i = 0; i < aliases.length; i++) { + for (var i = 0; i < length(aliases); i++) { var alias = aliases[i] var locator = deps[alias] var link_target = links[locator] @@ -93,7 +93,7 @@ function print_deps(ctx, indent) { status.push("not installed") } - if (status.length > 0) { + if (length(status) > 0) { line += " [" + text(status, ", ") + "]" } @@ -112,7 +112,7 @@ if (mode == 'local') { log.console("") var packages = shop.list_packages() - if (packages.length == 0) { + if (length(packages) == 0) { log.console(" (none)") } else { packages = sort(packages) @@ -136,7 +136,7 @@ if (mode == 'local') { } }) - if (linked_pkgs.length > 0) { + if (length(linked_pkgs) > 0) { log.console("Linked packages:") arrfor(linked_pkgs, function(p) { var target = links[p] @@ -145,7 +145,7 @@ if (mode == 'local') { log.console("") } - if (local_pkgs.length > 0) { + if (length(local_pkgs) > 0) { log.console("Local packages:") arrfor(local_pkgs, function(p) { log.console(" " + p) @@ -153,7 +153,7 @@ if (mode == 'local') { log.console("") } - if (remote_pkgs.length > 0) { + if (length(remote_pkgs) > 0) { log.console("Remote packages:") arrfor(remote_pkgs, function(p) { var lock_entry = lock[p] @@ -163,7 +163,7 @@ if (mode == 'local') { log.console("") } - log.console("Total: " + text(packages.length) + " package(s)") + log.console("Total: " + text(length(packages)) + " package(s)") } } diff --git a/ls.ce b/ls.ce index ba3e1bcb..4aa6c4c5 100644 --- a/ls.ce +++ b/ls.ce @@ -12,10 +12,10 @@ var programs = package.list_programs(pkg) log.console("Modules in " + pkg + ":") modules = sort(modules) -if (modules.length == 0) { +if (length(modules) == 0) { log.console(" (none)") } else { - for (var i = 0; i < modules.length; i++) { + for (var i = 0; i < length(modules); i++) { log.console(" " + modules[i]) } } @@ -23,10 +23,10 @@ if (modules.length == 0) { log.console("") log.console("Programs in " + pkg + ":") programs = sort(programs) -if (programs.length == 0) { +if (length(programs) == 0) { log.console(" (none)") } else { - for (var i = 0; i < programs.length; i++) { + for (var i = 0; i < length(programs); i++) { log.console(" " + programs[i]) } } diff --git a/pack.ce b/pack.ce index 27d66c9b..40a126a4 100644 --- a/pack.ce +++ b/pack.ce @@ -14,7 +14,7 @@ var output_name = 'app' var target_package = null var buildtype = 'debug' -if (args.length < 1) { +if (length(args) < 1) { log.error('Usage: cell pack [options]') log.error('') log.error('Options:') @@ -29,23 +29,23 @@ if (args.length < 1) { target_package = args[0] -for (var i = 1; i < args.length; i++) { +for (var i = 1; i < length(args); i++) { if (args[i] == '-t' || args[i] == '--target') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target = args[++i] } else { log.error('-t requires a target') $stop() } } else if (args[i] == '-o' || args[i] == '--output') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { output_name = args[++i] } else { log.error('-o requires an output name') $stop() } } else if (args[i] == '-b' || args[i] == '--buildtype') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { buildtype = args[++i] if (buildtype != 'release' && buildtype != 'debug' && buildtype != 'minsize') { log.error('Invalid buildtype: ' + buildtype + '. Must be release, debug, or minsize') @@ -87,7 +87,7 @@ if (target && !build.has_target(target)) { var packages = ['core'] var deps = pkg_tools.gather_dependencies(target_package) -for (var i = 0; i < deps.length; i++) { +for (var i = 0; i < length(deps); i++) { packages.push(deps[i]) } packages.push(target_package) @@ -95,7 +95,7 @@ packages.push(target_package) // Remove duplicates var unique_packages = [] var seen = {} -for (var i = 0; i < packages.length; i++) { +for (var i = 0; i < length(packages); i++) { if (!seen[packages[i]]) { seen[packages[i]] = true unique_packages.push(packages[i]) @@ -109,7 +109,7 @@ arrfor(packages, function(package) { shop.extract(package) }) -log.console('Building static binary from ' + text(packages.length) + ' packages: ' + text(packages, ', ')) +log.console('Building static binary from ' + text(length(packages)) + ' packages: ' + text(packages, ', ')) try { var result = build.build_static(packages, target, output_name, buildtype) diff --git a/qopconv.ce b/qopconv.ce index 34728cfd..d181a98e 100644 --- a/qopconv.ce +++ b/qopconv.ce @@ -111,14 +111,14 @@ function pack(sources, archive_path, read_dir) { log.console("Created " + archive_path) } -if (!is_array(arg) || arg.length < 1) { +if (!is_array(arg) || length(arg) < 1) { print_usage() } else { if (arg[0] == "-l") { - if (arg.length < 2) print_usage() + if (length(arg) < 2) print_usage() else list(arg[1]) } else if (arg[0] == "-u") { - if (arg.length < 2) print_usage() + if (length(arg) < 2) print_usage() else unpack(arg[1]) } else { var sources = [] @@ -130,12 +130,12 @@ if (!is_array(arg) || arg.length < 1) { i = 2 } - for (; i < arg.length - 1; i++) { + for (; i < length(arg) - 1; i++) { sources.push(arg[i]) } - archive = arg[arg.length - 1] + archive = arg[length(arg) - 1] - if (sources.length == 0) { + if (length(sources) == 0) { print_usage() } else { pack(sources, archive, read_dir) diff --git a/remove.ce b/remove.ce index 8e07b9ab..77e87e2f 100644 --- a/remove.ce +++ b/remove.ce @@ -17,7 +17,7 @@ var target_pkg = null var prune = false var dry_run = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--prune') { prune = true } else if (args[i] == '--dry-run') { @@ -99,7 +99,7 @@ if (dry_run) { shop.remove(p) }) - log.console("Removed " + text(packages_to_remove.length) + " package(s).") + log.console("Removed " + text(length(packages_to_remove)) + " package(s).") } $stop() diff --git a/resolve.ce b/resolve.ce index a0029656..7ef1bba1 100644 --- a/resolve.ce +++ b/resolve.ce @@ -21,9 +21,9 @@ var target_triple = null var show_locked = false var refresh_first = false -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--target' || args[i] == '-t') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target_triple = args[++i] } else { log.error('--target requires a triple') @@ -118,7 +118,7 @@ for (var locator in all_deps) { sorted = sort(sorted, "locator") sorted = sort(sorted, "depth") -for (var i = 0; i < sorted.length; i++) { +for (var i = 0; i < length(sorted); i++) { var locator = sorted[i].locator var depth = sorted[i].depth @@ -168,7 +168,7 @@ for (var i = 0; i < sorted.length; i++) { line += " -> " + link_target } - if (status_parts.length > 0) { + if (length(status_parts) > 0) { line += " [" + text(status_parts, ", ") + "]" } @@ -179,12 +179,12 @@ for (var i = 0; i < sorted.length; i++) { try { var cflags = pkg.get_flags(locator, 'CFLAGS', target_triple) var ldflags = pkg.get_flags(locator, 'LDFLAGS', target_triple) - if (cflags.length > 0 || ldflags.length > 0) { + if (length(cflags) > 0 || length(ldflags) > 0) { log.console(indent + " Compilation inputs:") - if (cflags.length > 0) { + if (length(cflags) > 0) { log.console(indent + " CFLAGS: " + text(cflags, ' ')) } - if (ldflags.length > 0) { + if (length(ldflags) > 0) { log.console(indent + " LDFLAGS: " + text(ldflags, ' ')) } } @@ -195,6 +195,6 @@ for (var i = 0; i < sorted.length; i++) { } log.console("") -log.console("Total: " + text(sorted.length) + " package(s)") +log.console("Total: " + text(length(sorted)) + " package(s)") $stop() diff --git a/search.ce b/search.ce index 998b655a..ef53070c 100644 --- a/search.ce +++ b/search.ce @@ -4,7 +4,7 @@ var shop = use('internal/shop') var pkg = use('package') -if (args.length < 1) { +if (length(args) < 1) { log.console("Usage: cell search ") log.console("Searches for packages, actors, or modules matching the query.") $stop() @@ -46,7 +46,7 @@ arrfor(packages, function(package_name) { }) // Print results -var total = found_packages.length + found_modules.length + found_actors.length +var total = length(found_packages) + length(found_modules) + length(found_actors) if (total == 0) { log.console("No results found for '" + query + "'") @@ -54,7 +54,7 @@ if (total == 0) { log.console("Found " + text(total) + " result(s) for '" + query + "':") log.console("") - if (found_packages.length > 0) { + if (length(found_packages) > 0) { log.console("Packages:") arrfor(found_packages, function(p) { log.console(" " + p) @@ -62,7 +62,7 @@ if (total == 0) { log.console("") } - if (found_modules.length > 0) { + if (length(found_modules) > 0) { log.console("Modules:") arrfor(found_modules, function(m) { log.console(" " + m) @@ -70,7 +70,7 @@ if (total == 0) { log.console("") } - if (found_actors.length > 0) { + if (length(found_actors) > 0) { log.console("Actors:") arrfor(found_actors, function(a) { log.console(" " + a) diff --git a/source/quickjs.c b/source/quickjs.c index 9cd5c1c2..1c6c6453 100644 --- a/source/quickjs.c +++ b/source/quickjs.c @@ -30474,7 +30474,6 @@ static JSValue js_string_concat(JSContext *ctx, JSValueConst this_val, } static const JSCFunctionListEntry js_string_proto_funcs[] = { - JS_PROP_INT32_DEF("length", 0, JS_PROP_CONFIGURABLE ), JS_CFUNC_DEF("concat", 1, js_string_concat), JS_CFUNC_DEF("toString", 0, js_string_toString ), JS_CFUNC_DEF("valueOf", 0, js_string_toString ), diff --git a/test.ce b/test.ce index 2dedbada..10997763 100644 --- a/test.ce +++ b/test.ce @@ -43,7 +43,7 @@ function get_current_package_name() { // cell test package all - run all tests from all packages function parse_args() { - if (args.length == 0) { + if (length(args) == 0) { // cell test - run all tests for current package if (!is_valid_package('.')) { log.console('No cell.toml found in current directory') @@ -64,7 +64,7 @@ function parse_args() { } if (args[0] == 'package') { - if (args.length < 2) { + if (length(args) < 2) { log.console('Usage: cell test package [test]') log.console(' cell test package all') return false @@ -102,7 +102,7 @@ function parse_args() { } } - if (args.length >= 3) { + if (length(args) >= 3) { // cell test package target_test = args[2] } @@ -146,7 +146,7 @@ function ensure_dir(path) { var parts = array(path, '/') var current = starts_with(path, '/') ? '/' : '' - for (var i = 0; i < parts.length; i++) { + for (var i = 0; i < length(parts); i++) { if (parts[i] == '') continue current += parts[i] + '/' if (!fd.is_dir(current)) { @@ -176,7 +176,7 @@ function collect_actor_tests(package_name, specific_test) { var files = pkg.list_files(package_name) var actor_tests = [] - for (var i = 0; i < files.length; i++) { + for (var i = 0; i < length(files); i++) { var f = files[i] // Check if file is in tests/ folder and is a .ce actor if (starts_with(f, "tests/") && ends_with(f, ".ce")) { @@ -247,7 +247,7 @@ function run_tests(package_name, specific_test) { var files = pkg.list_files(package_name) var test_files = [] - for (var i = 0; i < files.length; i++) { + for (var i = 0; i < length(files); i++) { var f = files[i] // Check if file is in tests/ folder and is a .cm module (not .ce - those are actor tests) if (starts_with(f, "tests/") && ends_with(f, ".cm")) { @@ -264,12 +264,12 @@ function run_tests(package_name, specific_test) { } } - if (test_files.length > 0) { + if (length(test_files) > 0) { if (package_name) log.console(`Running tests for ${package_name}`) else log.console(`Running tests for local package`) } - for (var i = 0; i < test_files.length; i++) { + for (var i = 0; i < length(test_files); i++) { var f = test_files[i] var mod_path = text(f, 0, -3) // remove .cm @@ -297,9 +297,9 @@ function run_tests(package_name, specific_test) { } } - if (tests.length > 0) { + if (length(tests) > 0) { log.console(` ${f}`) - for (var j = 0; j < tests.length; j++) { + for (var j = 0; j < length(tests); j++) { var t = tests[j] var test_entry = { package: pkg_result.package, @@ -381,7 +381,7 @@ if (all_pkgs) { // Then all packages in lock var packages = shop.list_packages() - for (var i = 0; i < packages.length; i++) { + for (var i = 0; i < length(packages); i++) { all_results.push(run_tests(packages[i], null)) all_actor_tests = array(all_actor_tests, collect_actor_tests(packages[i], null)) } @@ -391,9 +391,9 @@ if (all_pkgs) { } // Spawn actor tests if any -if (all_actor_tests.length > 0) { - log.console(`Running ${all_actor_tests.length} actor test(s)...`) - for (var i = 0; i < all_actor_tests.length; i++) { +if (length(all_actor_tests) > 0) { + log.console(`Running ${length(all_actor_tests)} actor test(s)...`) + for (var i = 0; i < length(all_actor_tests); i++) { spawn_actor_test(all_actor_tests[i]) } } @@ -402,7 +402,7 @@ if (all_actor_tests.length > 0) { function handle_actor_message(msg) { var sender = msg.$sender var found_idx = -1 - for (var i = 0; i < pending_actor_tests.length; i++) { + for (var i = 0; i < length(pending_actor_tests); i++) { if (pending_actor_tests[i].actor == sender) { found_idx = i break @@ -426,12 +426,12 @@ function handle_actor_message(msg) { results = [msg] } - for (var i = 0; i < results.length; i++) { + for (var i = 0; i < length(results); i++) { var res = results[i] || {} var entry = { package: base_entry.package, file: base_entry.file, - test: res.test || base_entry.test + (results.length > 1 ? `#${i+1}` : ""), + test: res.test || base_entry.test + (length(results) > 1 ? `#${i+1}` : ""), status: "failed", duration_ns: duration_ns } @@ -459,7 +459,7 @@ function check_timeouts() { var now = time.number() var timed_out = [] - for (var i = pending_actor_tests.length - 1; i >= 0; i--) { + for (var i = length(pending_actor_tests) - 1; i >= 0; i--) { var entry = pending_actor_tests[i] var elapsed_ms = (now - entry.start_time) * 1000 if (elapsed_ms > ACTOR_TEST_TIMEOUT) { @@ -467,7 +467,7 @@ function check_timeouts() { } } - for (var i = 0; i < timed_out.length; i++) { + for (var i = 0; i < length(timed_out); i++) { var idx = timed_out[i] var entry = pending_actor_tests[idx] pending_actor_tests.splice(idx, 1) @@ -479,7 +479,7 @@ function check_timeouts() { log.console(` TIMEOUT ${entry.test}`) } - if (pending_actor_tests.length > 0) { + if (length(pending_actor_tests) > 0) { $delay(check_timeouts, 1000) } check_completion() @@ -489,7 +489,7 @@ function check_timeouts() { var finalized = false function check_completion() { if (finalized) return - if (pending_actor_tests.length > 0) return + if (length(pending_actor_tests) > 0) return finalized = true finalize_results() @@ -497,10 +497,10 @@ function check_completion() { function finalize_results() { // Add actor test results to all_results - for (var i = 0; i < actor_test_results.length; i++) { + for (var i = 0; i < length(actor_test_results); i++) { var r = actor_test_results[i] var pkg_result = null - for (var j = 0; j < all_results.length; j++) { + for (var j = 0; j < length(all_results); j++) { if (all_results[j].package == r.package) { pkg_result = all_results[j] break @@ -512,7 +512,7 @@ function finalize_results() { } var file_result = null - for (var j = 0; j < pkg_result.files.length; j++) { + for (var j = 0; j < length(pkg_result.files); j++) { if (pkg_result.files[j].name == r.file) { file_result = pkg_result.files[j] break @@ -536,7 +536,7 @@ function finalize_results() { // Calculate totals var totals = { total: 0, passed: 0, failed: 0 } - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { totals.total += all_results[i].total totals.passed += all_results[i].passed totals.failed += all_results[i].failed @@ -551,9 +551,9 @@ function finalize_results() { // If no actor tests, finalize immediately var totals -if (all_actor_tests.length == 0) { +if (length(all_actor_tests) == 0) { totals = { total: 0, passed: 0, failed: 0 } - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { totals.total += all_results[i].total totals.passed += all_results[i].passed totals.failed += all_results[i].failed @@ -577,24 +577,24 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed} === SUMMARY === ` - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { var pkg_res = all_results[i] if (pkg_res.total == 0) continue txt_report += `Package: ${pkg_res.package}\n` - for (var j = 0; j < pkg_res.files.length; j++) { + for (var j = 0; j < length(pkg_res.files); j++) { var f = pkg_res.files[j] var status = f.failed == 0 ? "PASS" : "FAIL" - txt_report += ` [${status}] ${f.name} (${f.passed}/${f.tests.length})\n` + txt_report += ` [${status}] ${f.name} (${f.passed}/${length(f.tests)})\n` } } txt_report += `\n=== FAILURES ===\n` var has_failures = false - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { var pkg_res = all_results[i] - for (var j = 0; j < pkg_res.files.length; j++) { + for (var j = 0; j < length(pkg_res.files); j++) { var f = pkg_res.files[j] - for (var k = 0; k < f.tests.length; k++) { + for (var k = 0; k < length(f.tests); k++) { var t = f.tests[k] if (t.status == "failed") { has_failures = true @@ -613,13 +613,13 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed} if (!has_failures) txt_report += `None\n` txt_report += `\n=== DETAILED RESULTS ===\n` - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { var pkg_res = all_results[i] if (pkg_res.total == 0) continue - for (var j = 0; j < pkg_res.files.length; j++) { + for (var j = 0; j < length(pkg_res.files); j++) { var f = pkg_res.files[j] - for (var k = 0; k < f.tests.length; k++) { + for (var k = 0; k < length(f.tests); k++) { var t = f.tests[k] var dur = `${t.duration_ns || 0}ns` var status = t.status == "passed" ? "PASS" : "FAIL" @@ -632,14 +632,14 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed} log.console(`Report written to ${report_dir}/test.txt`) // Generate JSON per package - for (var i = 0; i < all_results.length; i++) { + for (var i = 0; i < length(all_results); i++) { var pkg_res = all_results[i] if (pkg_res.total == 0) continue var pkg_tests = [] - for (var j = 0; j < pkg_res.files.length; j++) { + for (var j = 0; j < length(pkg_res.files); j++) { var f = pkg_res.files[j] - for (var k = 0; k < f.tests.length; k++) { + for (var k = 0; k < length(f.tests); k++) { pkg_tests.push(f.tests[k]) } } @@ -650,7 +650,7 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed} } // If no actor tests, generate reports and stop immediately -if (all_actor_tests.length == 0) { +if (length(all_actor_tests) == 0) { generate_reports(totals) $stop() } else { diff --git a/unlink.ce b/unlink.ce index 100d7f19..d0441f08 100644 --- a/unlink.ce +++ b/unlink.ce @@ -4,7 +4,7 @@ var link = use('link') var shop = use('internal/shop') -if (args.length < 1) { +if (length(args) < 1) { log.console("Usage: cell unlink ") log.console("Removes a link and restores the original package.") $stop() diff --git a/update.ce b/update.ce index 54661b9b..eb39c5a3 100644 --- a/update.ce +++ b/update.ce @@ -20,7 +20,7 @@ var target_triple = null var follow_links = false // Parse arguments -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--help' || args[i] == '-h') { log.console("Usage: cell update [] [options]") log.console("") @@ -34,7 +34,7 @@ for (var i = 0; i < args.length; i++) { } else if (args[i] == '--build') { run_build = true } else if (args[i] == '--target' || args[i] == '-t') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target_triple = args[++i] } else { log.error('--target requires a triple') @@ -107,10 +107,10 @@ if (target_pkg) { } } else { var packages = shop.list_packages() - var pkg_count = packages.length + var pkg_count = length(packages) log.console("Checking for updates (" + text(pkg_count) + " package" + (pkg_count == 1 ? "" : "s") + ")...") - for (var i = 0; i < packages.length; i++) { + for (var i = 0; i < length(packages); i++) { var pkg = packages[i] if (pkg == 'core') continue @@ -120,15 +120,15 @@ if (target_pkg) { } } - if (updated_packages.length > 0) { - log.console("Updated " + text(updated_packages.length) + " package" + (updated_packages.length == 1 ? "" : "s") + ".") + if (length(updated_packages)) > 0) { + log.console("Updated " + text(length(updated_packages)) + " package" + (length(updated_packages) == 1 ? "" : "s") + ".") } else { log.console("All packages are up to date.") } } // Run build if requested -if (run_build && updated_packages.length > 0) { +if (run_build && length(updated_packages) > 0) { log.console("") log.console("Building updated packages...") diff --git a/upgrade.ce b/upgrade.ce index 94454852..e9a3730f 100644 --- a/upgrade.ce +++ b/upgrade.ce @@ -1,10 +1,10 @@ var shop = use('internal/shop') var fd = use('fd') -var cmd = args.length > 0 ? args[0] : null +var cmd = length(args) > 0 ? args[0] : null if (cmd == 'link') { - if (args.length < 2) { + if (length(args) < 2) { log.console("Usage: cell upgrade link ") return } diff --git a/verify.ce b/verify.ce index 41581a31..36e1b54d 100644 --- a/verify.ce +++ b/verify.ce @@ -21,11 +21,11 @@ var scope = null var deep = false var target_triple = null -for (var i = 0; i < args.length; i++) { +for (var i = 0; i < length(args); i++) { if (args[i] == '--deep') { deep = true } else if (args[i] == '--target' || args[i] == '-t') { - if (i + 1 < args.length) { + if (i + 1 < length(args)) { target_triple = args[++i] } else { log.error('--target requires a triple') @@ -139,7 +139,7 @@ function verify_package(locator) { // Only check for builds if package has C files try { var c_files = pkg.get_c_files(locator, target_triple, true) - if (c_files && c_files.length > 0) { + if (c_files && length(c_files) > 0) { if (!fd.is_file(lib_path)) { add_warning(locator + ": library not built at " + lib_path) } @@ -221,7 +221,7 @@ if (scope == 'shop') { } } -log.console("Verifying " + text(packages_to_verify.length) + " package(s)...") +log.console("Verifying " + text(length(packages_to_verify)) + " package(s)...") log.console("") // Run verification @@ -234,7 +234,7 @@ arrfor(packages_to_verify, function(p) { }) // Print results -if (warnings.length > 0) { +if (length(warnings) > 0) { log.console("Warnings:") arrfor(warnings, function(w) { log.console(" " + w) @@ -242,16 +242,16 @@ if (warnings.length > 0) { log.console("") } -if (errors.length > 0) { +if (length(errors) > 0) { log.console("Errors:") arrfor(errors, function(e) { log.console(" " + e) }) log.console("") - log.console("Verification FAILED: " + text(errors.length) + " error(s), " + text(warnings.length) + " warning(s)") + log.console("Verification FAILED: " + text(length(errors)) + " error(s), " + text(length(warnings)) + " warning(s)") // Note: would use process.exit(1) if available } else { - log.console("Verification PASSED: " + text(checked) + " package(s) checked, " + text(warnings.length) + " warning(s)") + log.console("Verification PASSED: " + text(checked) + " package(s) checked, " + text(length(warnings)) + " warning(s)") } $stop() diff --git a/why.ce b/why.ce index 809bb970..5e6d80ec 100644 --- a/why.ce +++ b/why.ce @@ -1,7 +1,7 @@ var shop = use('internal/shop') var pkg = use('package') -if (!args || args.length < 1) { +if (!args || length(args) < 1) { log.console("Usage: cell why ") $stop() return @@ -25,7 +25,7 @@ function search(current_pkg, stack) { // Sort for consistent output var aliases = sort(array(deps)) - for (var i = 0; i < aliases.length; i++) { + for (var i = 0; i < length(aliases); i++) { var alias = aliases[i] var locator = deps[alias] var parsed = shop.parse_package(locator) @@ -60,7 +60,7 @@ function search(current_pkg, stack) { // Recurse if not seen in current stack (cycle detection) var cycle = false - for (var j = 0; j < stack.length; j++) { + for (var j = 0; j < length(stack); j++) { if (stack[j].pkg == canon) { cycle = true break @@ -78,7 +78,7 @@ function print_stack(stack) { var output = "project" log.console(output) - for (var i = 0; i < stack.length; i++) { + for (var i = 0; i < length(stack); i++) { var node = stack[i] var indent = "" for (var j = 0; j <= i; j++) indent += " "