diff --git a/bench.ce b/bench.ce index 0b930202..adac74be 100644 --- a/bench.ce +++ b/bench.ce @@ -186,7 +186,7 @@ function collect_benches(package_name, specific_bench) { var match_base = ends_with(match_name, '.cm') ? text(match_name, 0, -3) : match_name if (bench_name != match_base) return } - bench_files.push(f) + push(bench_files, f) } }) return bench_files @@ -348,7 +348,7 @@ function run_single_bench(bench_fn, bench_name) { if (teardown_fn) teardown_fn(state) var ns_per_op = is_batch ? duration / batch_size : duration - timings_per_op.push(ns_per_op) + push(timings_per_op, ns_per_op) } else { var start = os.now() if (is_batch) { @@ -359,7 +359,7 @@ function run_single_bench(bench_fn, bench_name) { var duration = os.now() - start var ns_per_op = is_batch ? duration / batch_size : duration - timings_per_op.push(ns_per_op) + push(timings_per_op, ns_per_op) } } @@ -439,11 +439,11 @@ function run_benchmarks(package_name, specific_bench) { var benches = [] if (is_function(bench_mod)) { - benches.push({name: 'main', fn: bench_mod}) + push(benches, {name: 'main', fn: bench_mod}) } else if (is_object(bench_mod)) { arrfor(array(bench_mod), function(k) { if (is_function(bench_mod[k])) - benches.push({name: k, fn: bench_mod[k]}) + push(benches, {name: k, fn: bench_mod[k]}) }) } @@ -453,7 +453,7 @@ function run_benchmarks(package_name, specific_bench) { try { var result = run_single_bench(b.fn, b.name) result.package = pkg_result.package - file_result.benchmarks.push(result) + push(file_result.benchmarks, result) pkg_result.total++ log.console(` ${result.name}`) @@ -470,7 +470,7 @@ function run_benchmarks(package_name, specific_bench) { name: b.name, error: e.toString() } - file_result.benchmarks.push(error_result) + push(file_result.benchmarks, error_result) pkg_result.total++ } }) @@ -482,12 +482,12 @@ function run_benchmarks(package_name, specific_bench) { name: "load_module", error: `Error loading module: ${e}` } - file_result.benchmarks.push(error_result) + push(file_result.benchmarks, error_result) pkg_result.total++ } if (length(file_result.benchmarks) > 0) { - pkg_result.files.push(file_result) + push(pkg_result.files, file_result) } } @@ -499,15 +499,15 @@ var all_results = [] if (all_pkgs) { if (testlib.is_valid_package('.')) { - all_results.push(run_benchmarks(null, null)) + push(all_results, run_benchmarks(null, null)) } var packages = shop.list_packages() arrfor(packages, function(pkg) { - all_results.push(run_benchmarks(pkg, null)) + push(all_results, run_benchmarks(pkg, null)) }) } else { - all_results.push(run_benchmarks(target_pkg, target_bench)) + push(all_results, run_benchmarks(target_pkg, target_bench)) } // Calculate totals @@ -579,7 +579,7 @@ Total benchmarks: ${total_benches} var pkg_benches = [] arrfor(pkg_res.files, function(f) { arrfor(f.benchmarks, function(benchmark) { - pkg_benches.push(benchmark) + push(pkg_benches, benchmark) }) }) diff --git a/benches/micro_ops.cm b/benches/micro_ops.cm index 400b2050..76e5180c 100644 --- a/benches/micro_ops.cm +++ b/benches/micro_ops.cm @@ -20,14 +20,14 @@ function make_shapes(n) { for (var i = 0; i < n; i++) { var o = { a: i } o[`p${i}`] = i - out.push(o) + push(out, o) } return out } function make_packed_array(n) { var a = [] - for (var i = 0; i < n; i++) a.push(i) + for (var i = 0; i < n; i++) push(a, i) return a } @@ -203,7 +203,7 @@ return { var x = 0 for (var j = 0; j < n; j++) { var a = [] - for (var i = 0; i < 256; i++) a.push(i) + for (var i = 0; i < 256; i++) push(a, i) x = (x + length(a)) | 0 } return blackhole(sink, x) diff --git a/benchmarks/js_perf.ce b/benchmarks/js_perf.ce index 8f38062f..5586f166 100644 --- a/benchmarks/js_perf.ce +++ b/benchmarks/js_perf.ce @@ -109,12 +109,12 @@ function benchArrayOps() { var pushTime = measureTime(function() { var arr = []; for (var i = 0; i < iterations.medium; i++) { - arr.push(i); + push(arr, i); } }); var arr = []; - for (var i = 0; i < 10000; i++) arr.push(i); + for (var i = 0; i < 10000; i++) push(arr, i); var accessTime = measureTime(function() { var sum = 0; @@ -198,7 +198,7 @@ function benchStringOps() { var strings = []; for (var i = 0; i < 1000; i++) { - strings.push("string" + i); + push(strings, "string" + i); } var joinTime = measureTime(function() { @@ -269,13 +269,13 @@ function benchClosures() { var closureCreateTime = measureTime(function() { var funcs = []; for (var i = 0; i < iterations.medium; i++) { - funcs.push(makeAdder(i)); + push(funcs, makeAdder(i)); } }); var adders = []; for (var i = 0; i < 1000; i++) { - adders.push(makeAdder(i)); + push(adders, makeAdder(i)); } var closureCallTime = measureTime(function() { diff --git a/benchmarks/nota.ce b/benchmarks/nota.ce index 24e2e7a4..84da7cf4 100644 --- a/benchmarks/nota.ce +++ b/benchmarks/nota.ce @@ -9,7 +9,7 @@ var newarr = [] var accstr = "" for (var i = 0; i < 10000; i++) { accstr += i; - newarr.push(i.toString()) + newarrpush(i.toString()) } // Arrays to store timing results var jsonDecodeTimes = []; @@ -23,22 +23,22 @@ for (var i = 0; i < 100; i++) { // JSON Decode test var start = os.now(); var jll = json.decode(ll); - jsonDecodeTimes.push((os.now() - start) * 1000); + jsonDecodeTimespush((os.now() - start) * 1000); // JSON Encode test start = os.now(); var jsonStr = JSON.stringify(jll); - jsonEncodeTimes.push((os.now() - start) * 1000); + jsonEncodeTimespush((os.now() - start) * 1000); // NOTA Encode test start = os.now(); var nll = nota.encode(jll); - notaEncodeTimes.push((os.now() - start) * 1000); + notaEncodeTimespush((os.now() - start) * 1000); // NOTA Decode test start = os.now(); var oll = nota.decode(nll); - notaDecodeTimes.push((os.now() - start) * 1000); + notaDecodeTimespush((os.now() - start) * 1000); } // Calculate statistics diff --git a/benchmarks/wota_nota_json.ce b/benchmarks/wota_nota_json.ce index c474b221..c1f3a918 100644 --- a/benchmarks/wota_nota_json.ce +++ b/benchmarks/wota_nota_json.ce @@ -139,7 +139,7 @@ function runBenchmarkForLibrary(lib, bench) { // 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. if (i == 0) { - encodedList.push(e); + push(encodedList, e); totalSize += lib.getSize(e); } } diff --git a/build.cm b/build.cm index be6df287..1dc568d4 100644 --- a/build.cm +++ b/build.cm @@ -35,7 +35,7 @@ function replace_sigils(str) { function replace_sigils_array(flags) { var result = [] arrfor(flags, function(flag) { - result.push(replace_sigils(flag)) + resultpush(replace_sigils(flag)) }) return result } @@ -121,30 +121,30 @@ Build.compile_file = function(pkg, file, target, buildtype = 'release') { // Add buildtype-specific flags if (buildtype == 'release') { - cmd_parts.push('-O3', '-DNDEBUG') + cmd_partspush('-O3', '-DNDEBUG') } else if (buildtype == 'debug') { - cmd_parts.push('-O2', '-g') + cmd_partspush('-O2', '-g') } else if (buildtype == 'minsize') { - cmd_parts.push('-Os', '-DNDEBUG') + cmd_partspush('-Os', '-DNDEBUG') } - cmd_parts.push('-DCELL_USE_NAME=' + sym_name) - cmd_parts.push('-I"' + pkg_dir + '"') + cmd_partspush('-DCELL_USE_NAME=' + sym_name) + cmd_partspush('-I"' + pkg_dir + '"') // Add package CFLAGS (resolve relative -I paths) arrfor(cflags, function(flag) { if (starts_with(flag, '-I') && !starts_with(flag, '-I/')) { flag = '-I"' + pkg_dir + '/' + text(flag, 2) + '"' } - cmd_parts.push(flag) + cmd_partspush(flag) }) // Add target CFLAGS arrfor(target_cflags, function(flag) { - cmd_parts.push(flag) + cmd_partspush(flag) }) - cmd_parts.push('"' + src_path + '"') + cmd_partspush('"' + src_path + '"') var cmd_str = text(cmd_parts, ' ') @@ -181,7 +181,7 @@ Build.build_package = function(pkg, target = Build.detect_host_target(), exclude arrfor(c_files, function(file) { var obj = Build.compile_file(pkg, file, target, buildtype) - objects.push(obj) + objectspush(obj) }) return objects @@ -198,17 +198,17 @@ function compute_link_key(objects, ldflags, target_ldflags, target, cc) { // Build a string representing all link inputs var parts = [] - parts.push('target:' + target) - parts.push('cc:' + cc) + partspush('target:' + target) + partspush('cc:' + cc) arrfor(sorted_objects, function(obj) { // Object paths are content-addressed, so the path itself is the hash - parts.push('obj:' + obj) + partspush('obj:' + obj) }) arrfor(ldflags, function(flag) { - parts.push('ldflag:' + flag) + partspush('ldflag:' + flag) }) arrfor(target_ldflags, function(flag) { - parts.push('target_ldflag:' + flag) + partspush('target_ldflag:' + flag) }) return content_hash(text(parts, '\n')) @@ -249,7 +249,7 @@ Build.build_dynamic = function(pkg, target = Build.detect_host_target(), buildty if (starts_with(flag, '-L') && !starts_with(flag, '-L/')) { flag = '-L"' + pkg_dir + '/' + text(flag, 2) + '"' } - resolved_ldflags.push(flag) + resolved_ldflagspush(flag) }) // Compute link key @@ -279,46 +279,46 @@ Build.build_dynamic = function(pkg, target = Build.detect_host_target(), buildty // Platform-specific flags for undefined symbols (resolved at dlopen) and size optimization if (tc.system == 'darwin') { // Allow undefined symbols - they will be resolved when dlopen'd into the main executable - cmd_parts.push('-undefined', 'dynamic_lookup') + cmd_partspush('-undefined', 'dynamic_lookup') // Dead-strip unused code - cmd_parts.push('-Wl,-dead_strip') + cmd_partspush('-Wl,-dead_strip') // Set install_name to stable path so runtime finds it correctly - cmd_parts.push('-Wl,-install_name,' + stable_path) + cmd_partspush('-Wl,-install_name,' + stable_path) // rpath for .cell/local libraries - cmd_parts.push('-Wl,-rpath,@loader_path/../local') - cmd_parts.push('-Wl,-rpath,' + local_dir) + cmd_partspush('-Wl,-rpath,@loader_path/../local') + cmd_partspush('-Wl,-rpath,' + local_dir) } else if (tc.system == 'linux') { // Allow undefined symbols at link time - cmd_parts.push('-Wl,--allow-shlib-undefined') + cmd_partspush('-Wl,--allow-shlib-undefined') // Garbage collect unused sections - cmd_parts.push('-Wl,--gc-sections') + cmd_partspush('-Wl,--gc-sections') // rpath for .cell/local libraries - cmd_parts.push('-Wl,-rpath,$ORIGIN/../local') - cmd_parts.push('-Wl,-rpath,' + local_dir) + cmd_partspush('-Wl,-rpath,$ORIGIN/../local') + cmd_partspush('-Wl,-rpath,' + local_dir) } else if (tc.system == 'windows') { // Windows DLLs: use --allow-shlib-undefined for mingw - cmd_parts.push('-Wl,--allow-shlib-undefined') + cmd_partspush('-Wl,--allow-shlib-undefined') } // Add .cell/local to library search path - cmd_parts.push('-L"' + local_dir + '"') + cmd_partspush('-L"' + local_dir + '"') arrfor(objects, function(obj) { - cmd_parts.push('"' + obj + '"') + cmd_partspush('"' + obj + '"') }) // Do NOT link against core library - symbols resolved at dlopen time // Add LDFLAGS arrfor(resolved_ldflags, function(flag) { - cmd_parts.push(flag) + cmd_partspush(flag) }) arrfor(target_ldflags, function(flag) { - cmd_parts.push(flag) + cmd_partspush(flag) }) - cmd_parts.push('-o', '"' + store_path + '"') + cmd_partspush('-o', '"' + store_path + '"') var cmd_str = text(cmd_parts, ' ') @@ -359,7 +359,7 @@ Build.build_static = function(packages, target = Build.detect_host_target(), out var objects = Build.build_package(pkg, target, !is_core, buildtype) arrfor(objects, function(obj) { - all_objects.push(obj) + all_objectspush(obj) }) // Collect LDFLAGS (with sigil replacement) @@ -375,7 +375,7 @@ Build.build_static = function(packages, target = Build.detect_host_target(), out if (starts_with(flag, '-L') && !starts_with(flag, '-L/')) { flag = '-L"' + pkg_dir + '/' + text(flag, 2) + '"' } - all_ldflags.push(flag) + all_ldflagspush(flag) }) } }) @@ -396,18 +396,18 @@ Build.build_static = function(packages, target = Build.detect_host_target(), out var cmd_parts = [cc] arrfor(all_objects, function(obj) { - cmd_parts.push('"' + obj + '"') + cmd_partspush('"' + obj + '"') }) arrfor(all_ldflags, function(flag) { - cmd_parts.push(flag) + cmd_partspush(flag) }) arrfor(target_ldflags, function(flag) { - cmd_parts.push(flag) + cmd_partspush(flag) }) - cmd_parts.push('-o', '"' + output + '"') + cmd_partspush('-o', '"' + output + '"') var cmd_str = text(cmd_parts, ' ') @@ -436,10 +436,10 @@ Build.build_all_dynamic = function(target, buildtype = 'release') { if (find(packages, 'core') != null) { try { var lib = Build.build_dynamic('core', target, buildtype) - results.push({ package: 'core', library: lib }) + resultspush({ package: 'core', library: lib }) } catch (e) { log.error('Failed to build core: ' + text(e)) - results.push({ package: 'core', error: e }) + resultspush({ package: 'core', error: e }) } } @@ -449,11 +449,11 @@ Build.build_all_dynamic = function(target, buildtype = 'release') { try { var lib = Build.build_dynamic(pkg, target, buildtype) - results.push({ package: pkg, library: lib }) + resultspush({ package: pkg, library: lib }) } catch (e) { log.error('Failed to build ' + pkg + ': ') log.error(e) - results.push({ package: pkg, error: e }) + resultspush({ package: pkg, error: e }) } }) diff --git a/cellfs.cm b/cellfs.cm index 923b8798..551a6398 100644 --- a/cellfs.cm +++ b/cellfs.cm @@ -169,18 +169,14 @@ function mount(source, name) { throw Error("Unsupported mount source type: " + source) } - mounts.push(mount_info) + push(mounts, mount_info) } // Unmount function unmount(name_or_source) { - for (var i = 0; i < length(mounts); i++) { - if (mounts[i].name == name_or_source || mounts[i].source == name_or_source) { - mounts.splice(i, 1) - return - } - } - throw Error("Mount not found: " + name_or_source) + mounts = filter(mounts, function(mount) { + return mount.name != name_or_source && mount.source != name_or_source + }) } // Read file @@ -322,7 +318,7 @@ function enumerate(path, recurse) { arrfor(list, function(item) { var item_rel = rel_prefix ? rel_prefix + "/" + item : item - results.push(item_rel) + push(results, item_rel) if (recurse) { var st = fd.stat(fd.join_paths(curr_full, item)) @@ -361,7 +357,7 @@ function enumerate(path, recurse) { if (!seen[rel]) { seen[rel] = true - results.push(rel) + push(results, rel) } } }) @@ -415,7 +411,7 @@ function globfs(globs, dir) { } } else { if (!check_neg(item_rel) && check_pos(item_rel)) { - results.push(item_rel) + push(results, item_rel) } } }) @@ -438,7 +434,7 @@ function globfs(globs, dir) { if (length(rel) == 0) return if (!check_neg(rel) && check_pos(rel)) { - results.push(rel) + push(results, rel) } } }) diff --git a/clean.ce b/clean.ce index 9c69089c..9f6dd885 100644 --- a/clean.ce +++ b/clean.ce @@ -94,13 +94,13 @@ if (is_shop_scope) { packages_to_clean = shop.list_packages() } else { // Single package - packages_to_clean.push(scope) + push(packages_to_clean, scope) if (deep) { try { var deps = pkg.gather_dependencies(scope) arrfor(deps, function(dep) { - packages_to_clean.push(dep) + push(packages_to_clean, dep) }) } catch (e) { // Skip if can't read dependencies @@ -117,10 +117,10 @@ if (clean_build) { if (is_shop_scope) { // Clean entire build and lib directories if (fd.is_dir(build_dir)) { - dirs_to_delete.push(build_dir) + push(dirs_to_delete, build_dir) } if (fd.is_dir(lib_dir)) { - dirs_to_delete.push(lib_dir) + push(dirs_to_delete, lib_dir) } } else { // Clean specific package libraries @@ -132,17 +132,17 @@ if (clean_build) { var lib_path = lib_dir + '/' + lib_name + dylib_ext if (fd.is_file(lib_path)) { - files_to_delete.push(lib_path) + push(files_to_delete, lib_path) } // Also check for .so and .dll var so_path = lib_dir + '/' + lib_name + '.so' var dll_path = lib_dir + '/' + lib_name + '.dll' if (fd.is_file(so_path)) { - files_to_delete.push(so_path) + push(files_to_delete, so_path) } if (fd.is_file(dll_path)) { - files_to_delete.push(dll_path) + push(files_to_delete, dll_path) } }) } @@ -152,7 +152,7 @@ if (clean_fetch) { if (is_shop_scope) { // Clean entire packages directory (dangerous!) if (fd.is_dir(packages_dir)) { - dirs_to_delete.push(packages_dir) + push(dirs_to_delete, packages_dir) } } else { // Clean specific package directories @@ -161,7 +161,7 @@ if (clean_fetch) { var pkg_dir = shop.get_package_dir(p) if (fd.is_dir(pkg_dir) || fd.is_link(pkg_dir)) { - dirs_to_delete.push(pkg_dir) + push(dirs_to_delete, pkg_dir) } }) } diff --git a/clone.ce b/clone.ce index 9222f6e4..a37ecc6f 100644 --- a/clone.ce +++ b/clone.ce @@ -92,12 +92,11 @@ try { for (var i = 0; i < count; i++) { if (zip.is_directory(i)) continue var filename = zip.get_filename(i) - var parts = array(filename, '/') - if (length(parts) <= 1) continue - - // Skip the first directory (repo-commit prefix) - parts.shift() - var rel_path = text(parts, '/') + var first_slash = search(filename, '/') + if (first_slash == null) continue + if (first_slash + 1 >= length(filename)) continue + + var rel_path = text(filename, first_slash + 1) var full_path = target_path + '/' + rel_path var dir_path = fd.dirname(full_path) diff --git a/fd.cm b/fd.cm index 4801e838..8790cfad 100644 --- a/fd.cm +++ b/fd.cm @@ -82,7 +82,7 @@ fd.globfs = function(globs, dir) { } } else { if (!check_neg(item_rel) && check_pos(item_rel)) { - results.push(item_rel) + push(results, item_rel) } } }); diff --git a/fetch.ce b/fetch.ce index bfc24374..94a519d9 100644 --- a/fetch.ce +++ b/fetch.ce @@ -39,7 +39,7 @@ if (target_pkg) { log.error("Package not found: " + target_pkg) $stop() } - packages_to_fetch.push(target_pkg) + push(packages_to_fetch, target_pkg) } else { // Fetch all packages packages_to_fetch = all_packages @@ -80,10 +80,10 @@ arrfor(packages_to_fetch, function(pkg) { log.console("") 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 (length(parts) == 0) parts.push("nothing to fetch") +if (downloaded_count > 0) push(parts, `${text(downloaded_count)} downloaded`) +if (cached_count > 0) push(parts, `${text(cached_count)} cached`) +if (fail_count > 0) push(parts, `${text(fail_count)} failed`) +if (length(parts) == 0) push(parts, "nothing to fetch") log.console("Fetch complete: " + text(parts, ", ")) $stop() diff --git a/graph.ce b/graph.ce index 8c111c26..ccb15792 100644 --- a/graph.ce +++ b/graph.ce @@ -97,7 +97,7 @@ function gather_graph(locator, visited) { arrfor(array(deps), function(alias) { var dep_locator = deps[alias] add_node(dep_locator) - edges.push({ from: locator, to: dep_locator, alias: alias }) + push(edges, { from: locator, to: dep_locator, alias: alias }) gather_graph(dep_locator, visited) }) } @@ -114,7 +114,7 @@ if (show_world) { var packages = shop.list_packages() arrfor(packages, function(p) { if (p != 'core') { - roots.push(p) + push(roots, p) } }) } else { @@ -131,7 +131,7 @@ if (show_world) { } } - roots.push(target_locator) + push(roots, target_locator) } arrfor(roots, function(root) { @@ -159,7 +159,7 @@ if (format == 'tree') { var children = [] arrfor(edges, function(e) { if (e.from == locator) { - children.push(e) + push(children, e) } }) @@ -175,7 +175,7 @@ if (format == 'tree') { var children = [] arrfor(edges, function(e) { if (e.from == roots[i]) { - children.push(e) + push(children, e) } }) @@ -225,7 +225,7 @@ if (format == 'tree') { } arrfor(array(nodes), function(id) { - output.nodes.push(nodes[id]) + push(output.nodes, nodes[id]) }) output.edges = edges diff --git a/install.ce b/install.ce index fbf6ff59..0178aa17 100644 --- a/install.ce +++ b/install.ce @@ -88,12 +88,12 @@ function gather_packages(pkg_locator) { // Check if this is a local path that doesn't exist if (starts_with(pkg_locator, '/') && !fd.is_dir(pkg_locator)) { - skipped_packages.push(pkg_locator) + push(skipped_packages, pkg_locator) log.console(" Skipping missing local package: " + pkg_locator) return } - packages_to_install.push(pkg_locator) + push(packages_to_install, pkg_locator) // Try to read dependencies try { diff --git a/internal/engine.cm b/internal/engine.cm index 63bbc68f..3a34f204 100644 --- a/internal/engine.cm +++ b/internal/engine.cm @@ -468,7 +468,7 @@ $_.start = function start(cb, program) { program, } greeters[id] = cb - message_queue.push({ startup }) + push(message_queue, { startup }) } // stops an underling or self. @@ -517,7 +517,7 @@ $_.couple = function couple(actor) { } function actor_prep(actor, send) { - message_queue.push({actor,send}); + push(message_queue, {actor,send}); } // Send a message immediately without queuing diff --git a/internal/shop.cm b/internal/shop.cm index 6ef206af..2ccd983a 100644 --- a/internal/shop.cm +++ b/internal/shop.cm @@ -394,7 +394,7 @@ function inject_bindings_code(inject) { for (var i = 0; i < length(inject); i++) { var inj = inject[i] var key = trim(inj, '$') - lines.push(`var $${key} = env["${key}"];`) + push(lines, `var $${key} = env["${key}"];`) } return text(lines, '\n') } @@ -1108,11 +1108,10 @@ function install_zip(zip_blob, target_dir) { for (var i = 0; i < count; i++) { if (zip.is_directory(i)) continue var filename = zip.get_filename(i) - var parts = array(filename, '/') - if (length(parts) <= 1) continue - - parts.shift() - var rel_path = text(parts, '/') + var slash_pos = search(filename, '/') + if (slash_pos == null) continue + if (slash_pos + 1 >= length(filename)) continue + var rel_path = text(filename, slash_pos + 1) var full_path = target_dir + '/' + rel_path var dir_path = fd.dirname(full_path) @@ -1214,7 +1213,7 @@ function get_package_scripts(package) for (var i = 0; i < length(files); i++) { var file = files[i] if (ends_with(file, '.cm') || ends_with(file, '.ce')) { - scripts.push(file) + push(scripts, file) } } @@ -1289,7 +1288,7 @@ Shop.audit_packages = function() { if (package == 'core') return if (fd.is_dir(package)) return if (fetch_remote_hash(package)) return - bad.push(package) + push(bad, package) }) return bad diff --git a/link.cm b/link.cm index 6778d23b..42b5c6cf 100644 --- a/link.cm +++ b/link.cm @@ -222,11 +222,11 @@ Link.sync_all = function(shop) { // Validate target exists var link_target = resolve_link_target(target) if (!fd.is_dir(link_target)) { - errors.push(canonical + ': target ' + link_target + ' does not exist') + push(errors, canonical + ': target ' + link_target + ' does not exist') return } if (!fd.is_file(link_target + '/cell.toml')) { - errors.push(canonical + ': target ' + link_target + ' is not a valid package') + push(errors, canonical + ': target ' + link_target + ' is not a valid package') return } @@ -259,7 +259,7 @@ Link.sync_all = function(shop) { count++ } catch (e) { - errors.push(canonical + ': ' + e.message) + push(errors, canonical + ': ' + e.message) } }) diff --git a/list.ce b/list.ce index 1326c25a..f238e5c0 100644 --- a/list.ce +++ b/list.ce @@ -80,16 +80,16 @@ function print_deps(ctx, indent) { // Add status indicators var status = [] if (link_target) { - status.push("linked -> " + link_target) + push(status, "linked -> " + link_target) } if (lock_entry && lock_entry.commit) { - status.push("@" + text(lock_entry.commit, 0, 8)) + push(status, "@" + text(lock_entry.commit, 0, 8)) } if (lock_entry && lock_entry.type == 'local') { - status.push("local") + push(status, "local") } if (!lock_entry) { - status.push("not installed") + push(status, "not installed") } if (length(status) > 0) { @@ -127,11 +127,11 @@ if (mode == 'local') { var link_target = links[p] if (link_target) { - linked_pkgs.push(p) + push(linked_pkgs, p) } else if (lock_entry && lock_entry.type == 'local') { - local_pkgs.push(p) + push(local_pkgs, p) } else { - remote_pkgs.push(p) + push(remote_pkgs, p) } }) diff --git a/pack.ce b/pack.ce index 40a126a4..f5f6860d 100644 --- a/pack.ce +++ b/pack.ce @@ -88,9 +88,9 @@ var packages = ['core'] var deps = pkg_tools.gather_dependencies(target_package) for (var i = 0; i < length(deps); i++) { - packages.push(deps[i]) + push(packages, deps[i]) } -packages.push(target_package) +push(packages, target_package) // Remove duplicates var unique_packages = [] @@ -98,7 +98,7 @@ var seen = {} for (var i = 0; i < length(packages); i++) { if (!seen[packages[i]]) { seen[packages[i]] = true - unique_packages.push(packages[i]) + push(unique_packages, packages[i]) } } packages = unique_packages diff --git a/package.cm b/package.cm index 5a9defe3..44c5fa2a 100644 --- a/package.cm +++ b/package.cm @@ -223,7 +223,7 @@ package.list_files = function(pkg) { if (st.isDirectory) { walk(full_path, rel_path) } else { - files.push(rel_path) + push(files, rel_path) } } } @@ -239,7 +239,7 @@ package.list_modules = function(name) { var modules = [] for (var i = 0; i < length(files); i++) { if (ends_with(files[i], '.cm')) { - modules.push(text(files[i], 0, -3)) + push(modules, text(files[i], 0, -3)) } } return modules @@ -250,7 +250,7 @@ package.list_programs = function(name) { var programs = [] for (var i = 0; i < length(files); i++) { if (ends_with(files[i], '.ce')) { - programs.push(text(files[i], 0, -3)) + push(programs, text(files[i], 0, -3)) } } return programs @@ -346,7 +346,7 @@ package.get_c_files = function(name, target, exclude_main) { var basename = fd.basename(selected) if (basename == 'main.c' || starts_with(basename, 'main_')) return } - result.push(selected) + push(result, selected) } }) diff --git a/qopconv.ce b/qopconv.ce index b7c6c1d6..3189baa5 100644 --- a/qopconv.ce +++ b/qopconv.ce @@ -131,7 +131,7 @@ if (!is_array(arg) || length(arg) < 1) { } for (; i < length(arg) - 1; i++) { - sources.push(arg[i]) + push(sources, arg[i]) } archive = arg[length(arg) - 1] diff --git a/remove.ce b/remove.ce index 77e87e2f..f704d3c6 100644 --- a/remove.ce +++ b/remove.ce @@ -78,7 +78,7 @@ if (prune) { arrfor(all_packages, function(p) { if (p == 'core') return if (!needed[p] && find(packages_to_remove, p) == null) { - packages_to_remove.push(p) + push(packages_to_remove, p) } }) } diff --git a/resolve.ce b/resolve.ce index 891cda43..1377bec0 100644 --- a/resolve.ce +++ b/resolve.ce @@ -145,11 +145,11 @@ for (var i = 0; i < length(sorted); i++) { // Format output var status_parts = [] - if (is_linked) status_parts.push("linked") - if (is_local) status_parts.push("local") - if (!is_in_lock) status_parts.push("not in lock") - if (!is_fetched) status_parts.push("not fetched") - if (is_built) status_parts.push("built") + if (is_linked) push(status_parts, "linked") + if (is_local) push(status_parts, "local") + if (!is_in_lock) push(status_parts, "not in lock") + if (!is_fetched) push(status_parts, "not fetched") + if (is_built) push(status_parts, "built") var commit_str = "" if (lock_entry && lock_entry.commit) { diff --git a/search.ce b/search.ce index ef53070c..5e64c8ed 100644 --- a/search.ce +++ b/search.ce @@ -22,7 +22,7 @@ var packages = shop.list_packages() arrfor(packages, function(package_name) { // Check if package name matches if (search(package_name, query) != null) { - found_packages.push(package_name) + push(found_packages, package_name) } // Search modules and actors within the package @@ -30,14 +30,14 @@ arrfor(packages, function(package_name) { var modules = pkg.list_modules(package_name) arrfor(modules, function(mod) { if (search(mod, query) != null) { - found_modules.push(package_name + ':' + mod) + push(found_modules, package_name + ':' + mod) } }) var actors = pkg.list_programs(package_name) arrfor(actors, function(actor) { if (search(actor, query) != null) { - found_actors.push(package_name + ':' + actor) + push(found_actors, package_name + ':' + actor) } }) } catch (e) { diff --git a/source/quickjs.c b/source/quickjs.c index 69de8c6e..37373e03 100644 --- a/source/quickjs.c +++ b/source/quickjs.c @@ -27078,11 +27078,6 @@ static JSValue js_error_toString(JSContext *ctx, JSValueConst this_val, return JS_ConcatString(ctx, name, msg); } -static const JSCFunctionListEntry js_error_proto_funcs[] = { - JS_PROP_STRING_DEF("name", "Error", JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE ), - JS_PROP_STRING_DEF("message", "", JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE ), -}; - /* Array */ static int JS_CopySubArray(JSContext *ctx, @@ -27182,27 +27177,6 @@ fail: return JS_EXCEPTION; } -static JSValue JS_ArraySpeciesCreate(JSContext *ctx, JSValueConst obj, - JSValueConst len_val) -{ - /* Always use the array constructor - no species/constructor lookup */ - return js_array_constructor(ctx, JS_NULL, 1, &len_val); -} - -static int JS_isConcatSpreadable(JSContext *ctx, JSValueConst obj) -{ - JSValue val; - - if (!JS_IsObject(obj)) - return FALSE; - val = JS_GetProperty(ctx, obj, JS_ATOM_Symbol_isConcatSpreadable); - if (JS_IsException(val)) - return -1; - if (!JS_IsNull(val)) - return JS_ToBoolFree(ctx, val); - return JS_IsArray(ctx, obj); -} - static JSValue js_array_includes(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { @@ -27343,113 +27317,6 @@ static JSValue js_array_push(JSContext *ctx, JSValueConst this_val, return JS_EXCEPTION; } -static JSValue js_array_slice(JSContext *ctx, JSValueConst this_val, - int argc, JSValueConst *argv, int splice) -{ - JSValue obj, arr, val, len_val; - int64_t len, start, k, final, n, count, del_count, new_len; - int kPresent; - JSValue *arrp; - uint32_t count32, i, item_count; - - arr = JS_NULL; - obj = JS_ToObject(ctx, this_val); - if (js_get_length64(ctx, &len, obj)) - goto exception; - - if (JS_ToInt64Clamp(ctx, &start, argv[0], 0, len, len)) - goto exception; - - if (splice) { - if (argc == 0) { - item_count = 0; - del_count = 0; - } else - if (argc == 1) { - item_count = 0; - del_count = len - start; - } else { - item_count = argc - 2; - if (JS_ToInt64Clamp(ctx, &del_count, argv[1], 0, len - start, 0)) - goto exception; - } - if (len + item_count - del_count > MAX_SAFE_INTEGER) { - JS_ThrowTypeError(ctx, "Array loo long"); - goto exception; - } - count = del_count; - } else { - item_count = 0; /* avoid warning */ - final = len; - if (!JS_IsNull(argv[1])) { - if (JS_ToInt64Clamp(ctx, &final, argv[1], 0, len, len)) - goto exception; - } - count = max_int64(final - start, 0); - } - len_val = JS_NewInt64(ctx, count); - arr = JS_ArraySpeciesCreate(ctx, obj, len_val); - JS_FreeValue(ctx, len_val); - if (JS_IsException(arr)) - goto exception; - - k = start; - final = start + count; - n = 0; - /* The fast array test on arr ensures that - JS_CreateDataPropertyUint32() won't modify obj in case arr is - an exotic object */ - /* Special case fast arrays */ - if (js_get_fast_array(ctx, obj, &arrp, &count32) && - js_is_fast_array(ctx, arr)) { - /* XXX: should share code with fast array constructor */ - for (; k < final && k < count32; k++, n++) { - if (JS_CreateDataPropertyUint32(ctx, arr, n, JS_DupValue(ctx, arrp[k]), JS_PROP_THROW) < 0) - goto exception; - } - } - /* Copy the remaining elements if any (handle case of inherited properties) */ - for (; k < final; k++, n++) { - kPresent = JS_TryGetPropertyInt64(ctx, obj, k, &val); - if (kPresent < 0) - goto exception; - if (kPresent) { - if (JS_CreateDataPropertyUint32(ctx, arr, n, val, JS_PROP_THROW) < 0) - goto exception; - } - } - if (JS_SetProperty(ctx, arr, JS_ATOM_length, JS_NewInt64(ctx, n)) < 0) - goto exception; - - if (splice) { - new_len = len + item_count - del_count; - if (item_count != del_count) { - if (JS_CopySubArray(ctx, obj, start + item_count, - start + del_count, len - (start + del_count), - item_count <= del_count ? +1 : -1) < 0) - goto exception; - - for (k = len; k-- > new_len; ) { - if (JS_DeletePropertyInt64(ctx, obj, k, JS_PROP_THROW) < 0) - goto exception; - } - } - for (i = 0; i < item_count; i++) { - if (JS_SetPropertyInt64(ctx, obj, start + i, JS_DupValue(ctx, argv[i + 2])) < 0) - goto exception; - } - if (JS_SetProperty(ctx, obj, JS_ATOM_length, JS_NewInt64(ctx, new_len)) < 0) - goto exception; - } - JS_FreeValue(ctx, obj); - return arr; - - exception: - JS_FreeValue(ctx, obj); - JS_FreeValue(ctx, arr); - return JS_EXCEPTION; -} - static int64_t JS_FlattenIntoArray(JSContext *ctx, JSValueConst target, JSValueConst source, int64_t sourceLen, int64_t targetIndex, int depth, @@ -27529,15 +27396,6 @@ static JSValue js_create_array(JSContext *ctx, int len, JSValueConst *tab) return obj; } -static const JSCFunctionListEntry js_array_proto_funcs[] = { - JS_CFUNC_MAGIC_DEF("pop", 0, js_array_pop, 0 ), - JS_CFUNC_MAGIC_DEF("push", 1, js_array_push, 0 ), - JS_CFUNC_MAGIC_DEF("shift", 0, js_array_pop, 1 ), - JS_CFUNC_MAGIC_DEF("unshift", 1, js_array_push, 1 ), - JS_CFUNC_MAGIC_DEF("slice", 2, js_array_slice, 0 ), - JS_CFUNC_MAGIC_DEF("splice", 2, js_array_slice, 1 ), -}; - /* String */ static int js_string_get_own_property(JSContext *ctx, JSPropertyDescriptor *desc, @@ -32761,6 +32619,71 @@ static JSValue js_cell_reverse(JSContext *ctx, JSValueConst this_val, * proto() function - get prototype of an object * ============================================================================ */ + static JSValue js_cell_pop(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + if (argc < 1) + return JS_NULL; + + JSValue obj = argv[0]; + if (!JS_IsArray(ctx, obj)) + return JS_NULL; + + JSValue length_val = JS_GetPropertyStr(ctx, obj, "length"); + int64_t len; + if (JS_ToInt64(ctx, &len, length_val) < 0) { + JS_FreeValue(ctx, length_val); + return JS_EXCEPTION; + } + JS_FreeValue(ctx, length_val); + + if (len <= 0) + return JS_NULL; + + JSValue val = JS_GetPropertyInt64(ctx, obj, len - 1); + if (JS_IsException(val)) + return val; + + if (JS_DeletePropertyInt64(ctx, obj, len - 1, JS_PROP_THROW) < 0) { + JS_FreeValue(ctx, val); + return JS_EXCEPTION; + } + + if (JS_SetPropertyStr(ctx, obj, "length", JS_NewInt64(ctx, len - 1)) < 0) { + JS_FreeValue(ctx, val); + return JS_EXCEPTION; + } + + return val; +} + +static JSValue js_cell_push(JSContext *ctx, JSValueConst this_val, + int argc, JSValueConst *argv) +{ + if (argc < 1) + return JS_NULL; + + JSValue obj = argv[0]; + if (!JS_IsArray(ctx, obj)) + return JS_NULL; + + JSValue length_val = JS_GetPropertyStr(ctx, obj, "length"); + int64_t len; + if (JS_ToInt64(ctx, &len, length_val) < 0) { + JS_FreeValue(ctx, length_val); + return JS_EXCEPTION; + } + JS_FreeValue(ctx, length_val); + + for (int i = 1; i < argc; i++) { + if (JS_SetPropertyInt64(ctx, obj, len, JS_DupValue(ctx, argv[i])) < 0) + return JS_EXCEPTION; + len++; + } + + return JS_NewInt64(ctx, len); +} + static JSValue js_cell_proto(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { @@ -33251,10 +33174,6 @@ static void JS_AddIntrinsicBasicObjects(JSContext *ctx) ctx->class_proto[JS_CLASS_BYTECODE_FUNCTION] = JS_DupValue(ctx, ctx->function_proto); ctx->class_proto[JS_CLASS_ERROR] = JS_NewObject(ctx); - JS_SetPropertyFunctionList(ctx, ctx->class_proto[JS_CLASS_ERROR], - js_error_proto_funcs, - countof(js_error_proto_funcs)); - for(i = 0; i < JS_NATIVE_ERROR_COUNT; i++) { proto = JS_NewObjectProto(ctx, ctx->class_proto[JS_CLASS_ERROR]); JS_DefinePropertyValue(ctx, proto, JS_ATOM_name, @@ -33325,10 +33244,6 @@ void JS_AddIntrinsicBaseObjects(JSContext *ctx) } /* Array */ - JS_SetPropertyFunctionList(ctx, ctx->class_proto[JS_CLASS_ARRAY], - js_array_proto_funcs, - countof(js_array_proto_funcs)); - obj = JS_NewGlobalCConstructor(ctx, "Array", js_array_constructor, 1, ctx->class_proto[JS_CLASS_ARRAY]); ctx->array_ctor = JS_DupValue(ctx, obj); @@ -33584,6 +33499,17 @@ void JS_AddIntrinsicBaseObjects(JSContext *ctx) JS_DefinePropertyValueStr(ctx, ctx->global_obj, "pi", JS_NewFloat64(ctx, 3.14159265358979323846264338327950288419716939937510), JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); + + /* push() - add element to end of array */ + JS_DefinePropertyValueStr(ctx, ctx->global_obj, "push", + JS_NewCFunction(ctx, js_cell_push, "push", 2), + JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); + + /* pop() - remove and return last element of array */ + JS_DefinePropertyValueStr(ctx, ctx->global_obj, "pop", + JS_NewCFunction(ctx, js_cell_pop, "pop", 1), + JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); + } } diff --git a/test.ce b/test.ce index ace122a1..1004e7da 100644 --- a/test.ce +++ b/test.ce @@ -191,7 +191,7 @@ function collect_actor_tests(package_name, specific_test) { if (test_base != match_base) continue } - actor_tests.push({ + push(actor_tests,{ package: package_name || "local", file: f, path: prefix + '/' + f @@ -219,12 +219,12 @@ function spawn_actor_test(test_info) { // Spawn the actor test - it should send back results var actor_path = text(test_info.path, 0, -3) // remove .ce entry.actor = $start(actor_path) - pending_actor_tests.push(entry) + push(pending_actor_tests, entry) } catch (e) { entry.status = "failed" entry.error = { message: `Failed to spawn actor: ${e}` } entry.duration_ns = 0 - actor_test_results.push(entry) + push(actor_test_results, entry) log.console(` FAIL ${test_name}: `) log.error(e) } @@ -259,7 +259,7 @@ function run_tests(package_name, specific_test) { var match_base = ends_with(match_name, '.cm') ? text(match_name, 0, -3) : match_name if (test_name != match_base) continue } - test_files.push(f) + push(test_files, f) } } @@ -287,11 +287,11 @@ function run_tests(package_name, specific_test) { var tests = [] if (is_function(test_mod)) { - tests.push({name: 'main', fn: test_mod}) + push(tests, {name: 'main', fn: test_mod}) } else if (is_object(test_mod)) { arrfor(array(test_mod), function(k) { if (is_function(test_mod[k])) { - tests.push({name: k, fn: test_mod[k]}) + push(tests, {name: k, fn: test_mod[k]}) } }) } @@ -344,7 +344,7 @@ function run_tests(package_name, specific_test) { var end_time = time.number() test_entry.duration_ns = round((end_time - start_time) * 1000000000) - file_result.tests.push(test_entry) + push(file_result.tests, test_entry) pkg_result.total++ } } @@ -358,12 +358,12 @@ function run_tests(package_name, specific_test) { duration_ns: 0, error: { message: `Error loading module: ${e}` } } - file_result.tests.push(test_entry) + push(file_result.tests, test_entry) pkg_result.failed++ file_result.failed++ pkg_result.total++ } - pkg_result.files.push(file_result) + push(pkg_result.files, file_result) } return pkg_result } @@ -374,18 +374,18 @@ var all_actor_tests = [] if (all_pkgs) { // Run local first if we're in a valid package if (is_valid_package('.')) { - all_results.push(run_tests(null, null)) + push(all_results, run_tests(null, null)) all_actor_tests = array(all_actor_tests, collect_actor_tests(null, null)) } // Then all packages in lock var packages = shop.list_packages() for (var i = 0; i < length(packages); i++) { - all_results.push(run_tests(packages[i], null)) + push(all_results, run_tests(packages[i], null)) all_actor_tests = array(all_actor_tests, collect_actor_tests(packages[i], null)) } } else { - all_results.push(run_tests(target_pkg, target_test)) + push(all_results, run_tests(target_pkg, target_test)) all_actor_tests = array(all_actor_tests, collect_actor_tests(target_pkg, target_test)) } @@ -411,7 +411,7 @@ function handle_actor_message(msg) { if (found_idx == -1) return var base_entry = pending_actor_tests[found_idx] - pending_actor_tests.splice(found_idx, 1) + pending_actor_tests = array(array(pending_actor_tests, 0, found_idx), array(pending_actor_tests, found_idx + 1)) var end_time = time.number() var duration_ns = round((end_time - base_entry.start_time) * 1000000000) @@ -447,7 +447,7 @@ function handle_actor_message(msg) { log.console(` FAIL ${entry.test}: ${entry.error.message}`) } - actor_test_results.push(entry) + push(actor_test_results, entry) } check_completion() @@ -462,19 +462,19 @@ function check_timeouts() { var entry = pending_actor_tests[i] var elapsed_ms = (now - entry.start_time) * 1000 if (elapsed_ms > ACTOR_TEST_TIMEOUT) { - timed_out.push(i) + push(timed_out, 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) + pending_actor_tests = array(array(pending_actor_tests, 0, idx), array(pending_actor_tests, idx + 1)) entry.status = "failed" entry.error = { message: "Test timed out" } entry.duration_ns = ACTOR_TEST_TIMEOUT * 1000000 - actor_test_results.push(entry) + push(actor_test_results, entry) log.console(` TIMEOUT ${entry.test}`) } @@ -507,7 +507,7 @@ function finalize_results() { } if (!pkg_result) { pkg_result = { package: r.package, files: [], total: 0, passed: 0, failed: 0 } - all_results.push(pkg_result) + push(all_results, pkg_result) } var file_result = null @@ -519,10 +519,10 @@ function finalize_results() { } if (!file_result) { file_result = { name: r.file, tests: [], passed: 0, failed: 0 } - pkg_result.files.push(file_result) + push(pkg_result.files, file_result) } - file_result.tests.push(r) + push(file_result.tests, r) pkg_result.total++ if (r.status == "passed") { pkg_result.passed++ @@ -639,7 +639,7 @@ Total: ${totals.total}, Passed: ${totals.passed}, Failed: ${totals.failed} for (var j = 0; j < length(pkg_res.files); j++) { var f = pkg_res.files[j] for (var k = 0; k < length(f.tests); k++) { - pkg_tests.push(f.tests[k]) + push(pkg_tests, f.tests[k]) } } diff --git a/tests/nota.cm b/tests/nota.cm index c4846c14..9a38eec5 100644 --- a/tests/nota.cm +++ b/tests/nota.cm @@ -109,7 +109,7 @@ function makeTest(test) { var testarr = [] for (var i = 0; i < 500; i++) { - testarr.push(1) + push(testarr, 1) } var testCases = [ diff --git a/tests/suite.cm b/tests/suite.cm index 715ea4ee..24756d73 100644 --- a/tests/suite.cm +++ b/tests/suite.cm @@ -561,14 +561,14 @@ return { test_array_push: function() { var arr = [1, 2] - arr.push(3) + push(arr, 3) if (length(arr) != 3) throw "array push length failed" if (arr[2] != 3) throw "array push value failed" }, test_array_pop: function() { var arr = [1, 2, 3] - var val = arr.pop() + var val = pop(arr) if (val != 3) throw "array pop value failed" if (length(arr) != 2) throw "array pop length failed" }, @@ -1474,39 +1474,6 @@ return { // ARRAY METHODS // ============================================================================ - test_array_shift: function() { - var arr = [1, 2, 3] - var first = arr.shift() - if (first != 1) throw "array shift value failed" - if (length(arr) != 2) throw "array shift length failed" - if (arr[0] != 2) throw "array shift remaining failed" - }, - - test_array_unshift: function() { - var arr = [2, 3] - arr.unshift(1) - if (length(arr) != 3) throw "array unshift length failed" - if (arr[0] != 1) throw "array unshift value failed" - }, - - test_array_splice: function() { - var arr = [1, 2, 3, 4, 5] - var removed = arr.splice(1, 2) - if (length(removed) != 2) throw "array splice removed length failed" - if (removed[0] != 2) throw "array splice removed values failed" - if (length(arr) != 3) throw "array splice remaining length failed" - if (arr[1] != 4) throw "array splice remaining values failed" - }, - - test_array_slice: function() { - var arr = [1, 2, 3, 4, 5] - var sliced = array(arr, 1, 3) - if (length(sliced) != 2) throw "array slice length failed" - if (sliced[0] != 2) throw "array slice first failed" - if (sliced[1] != 3) throw "array slice second failed" - if (length(arr) != 5) throw "array slice should not mutate original" - }, - test_array_concat: function() { var arr1 = [1, 2] var arr2 = [3, 4] @@ -2102,7 +2069,7 @@ return { test_function_proxy_args_array_is_real_array: function() { var proxy = function(name, args) { if (!is_array(args)) throw "args should be array" - args.push(4) + push(args, 4) return length(args) } var result = proxy.test(1, 2, 3) @@ -3135,7 +3102,7 @@ return { test_arrfor_with_index: function() { var arr = ["a", "b", "c"] var indices = [] - arrfor(arr, (x, i) => { indices.push(i) }) + arrfor(arr, (x, i) => { push(indices, i) }) if (indices[0] != 0 || indices[2] != 2) throw "arrfor with index failed" }, @@ -3148,7 +3115,7 @@ return { test_arrfor_mutation: function() { var arr = [1, 2, 3] var results = [] - arrfor(arr, x => { results.push(x * 2) }) + arrfor(arr, x => { push(results, x * 2) }) if (results[0] != 2 || results[1] != 4 || results[2] != 6) throw "arrfor mutation failed" }, diff --git a/tests/wota.cm b/tests/wota.cm index b25620b5..3e4ec60d 100644 --- a/tests/wota.cm +++ b/tests/wota.cm @@ -58,7 +58,7 @@ function deep_compare(expected, actual, path) { } var testarr = [] -for (var i = 0; i < 500; i++) { testarr.push(1) } +for (var i = 0; i < 500; i++) { push(testarr, 1) } var testCases = [ { name: 'zero', input: 0 }, diff --git a/toml.cm b/toml.cm index 099dd12e..4479a326 100644 --- a/toml.cm +++ b/toml.cm @@ -119,7 +119,7 @@ function parse_key_path(str) { } else if (c == '.' && !in_quote) { var piece = trim(current) if (piece == null) piece = trim(current) - parts.push(parse_key(piece)) + push(parts, parse_key(piece)) current = '' continue } @@ -128,7 +128,7 @@ function parse_key_path(str) { var tail = trim(current) if (tail == null) tail = trim(current) - if (length(tail) > 0) parts.push(parse_key(tail)) + if (length(tail) > 0) push(parts, parse_key(tail)) return parts } @@ -154,7 +154,7 @@ function parse_array(str) { } else if (ch == ',' && !in_quotes) { var piece = trim(current) if (piece == null) piece = trim(current) - items.push(parse_value(piece)) + push(items, parse_value(piece)) current = '' } else { current += ch @@ -163,7 +163,7 @@ function parse_array(str) { var last = trim(current) if (last == null) last = trim(current) - if (last) items.push(parse_value(last)) + if (last) push(items, parse_value(last)) return items } @@ -191,7 +191,7 @@ function encode_toml(obj) { if (is_number(value)) return text(value) if (is_array(value)) { var items = [] - for (var i = 0; i < length(value); i++) items.push(encode_value(value[i])) + for (var i = 0; i < length(value); i++) push(items, encode_value(value[i])) return '[' + text(items, ', ') + ']' } return text(value) @@ -209,7 +209,7 @@ function encode_toml(obj) { for (var i = 0; i < length(keys); i++) { var key = keys[i] var value = obj[key] - if (!is_object(value)) result.push(quote_key(key) + ' = ' + encode_value(value)) + if (!is_object(value)) push(result, quote_key(key) + ' = ' + encode_value(value)) } // Second pass: encode nested objects @@ -222,14 +222,14 @@ function encode_toml(obj) { if (is_object(value)) { var quoted = quote_key(key) var section_path = path ? path + '.' + quoted : quoted - result.push('[' + section_path + ']') + push(result, '[' + section_path + ']') // Direct properties var section_keys = array(value) for (var j = 0; j < length(section_keys); j++) { var sk = section_keys[j] var sv = value[sk] - if (!is_object(sv)) result.push(quote_key(sk) + ' = ' + encode_value(sv)) + if (!is_object(sv)) push(result, quote_key(sk) + ' = ' + encode_value(sv)) } // Nested sections diff --git a/update.ce b/update.ce index 06d0db5d..83ef8577 100644 --- a/update.ce +++ b/update.ce @@ -100,7 +100,7 @@ var updated_packages = [] if (target_pkg) { var updated = update_and_fetch(target_pkg) if (updated) { - updated_packages.push(updated) + push(updated_packages, updated) log.console("Updated " + target_pkg + ".") } else { log.console(target_pkg + " is up to date.") @@ -116,7 +116,7 @@ if (target_pkg) { var updated = update_and_fetch(pkg) if (updated) { - updated_packages.push(updated) + push(updated_packages, updated) } } diff --git a/verify.ce b/verify.ce index b01002f6..dffe536d 100644 --- a/verify.ce +++ b/verify.ce @@ -65,11 +65,11 @@ var warnings = [] var checked = 0 function add_error(msg) { - errors.push(msg) + push(errors, msg) } function add_warning(msg) { - warnings.push(msg) + push(warnings, msg) } // Verify a single package @@ -212,12 +212,12 @@ if (scope == 'shop') { if (deep) { // Gather all dependencies var all_deps = pkg.gather_dependencies(locator) - packages_to_verify.push(locator) + push(packages_to_verify, locator) arrfor(all_deps, function(dep) { - packages_to_verify.push(dep) + push(packages_to_verify, dep) }) } else { - packages_to_verify.push(locator) + push(packages_to_verify, locator) } }