diff --git a/tests/benchmarks/resolution/tracer/go-tracer.sh b/tests/benchmarks/resolution/tracer/go-tracer.sh index a662fb32..459990a2 100644 --- a/tests/benchmarks/resolution/tracer/go-tracer.sh +++ b/tests/benchmarks/resolution/tracer/go-tracer.sh @@ -25,6 +25,8 @@ fi TMP_DIR="$(mktemp -d)" trap 'rm -rf "$TMP_DIR"' EXIT +source "$(dirname "${BASH_SOURCE[0]}")/tracer-common.sh" + cp "$FIXTURE_DIR"/*.go "$TMP_DIR/" # Create go.mod @@ -135,28 +137,15 @@ for gofile in "$TMP_DIR"/*.go; do # Use sed to inject traceCall() after function opening braces # Match: func ... { at end of line -> add traceCall() on next line - # Use portable sed -i: GNU sed uses -i alone, BSD sed (macOS) requires -i '' - if sed --version 2>/dev/null | grep -q GNU; then - sed -i -E 's/^(func [^{]*\{)\s*$/\1\n\ttraceCall()/' "$gofile" - else - sed -i '' -E 's/^(func [^{]*\{)\s*$/\1\n\ttraceCall()/' "$gofile" - fi + sedi -E 's/^(func [^{]*\{)\s*$/\1\n\ttraceCall()/' "$gofile" done # Inject defer dumpTrace() at start of main() -if sed --version 2>/dev/null | grep -q GNU; then - sed -i -E '/^func main\(\)\s*\{/{ - a\ defer dumpTrace() - }' "$TMP_DIR/main.go" - # Suppress any os.Exit calls that would skip deferred dumpTrace - sed -i 's/os\.Exit(/\/\/ os.Exit(/g' "$TMP_DIR/main.go" -else - sed -i '' -E '/^func main\(\)\s*\{/{ - a\ defer dumpTrace() - }' "$TMP_DIR/main.go" - # Suppress any os.Exit calls that would skip deferred dumpTrace - sed -i '' 's/os\.Exit(/\/\/ os.Exit(/g' "$TMP_DIR/main.go" -fi +sedi -E '/^func main\(\)\s*\{/{ + a\ defer dumpTrace() +}' "$TMP_DIR/main.go" +# Suppress any os.Exit calls that would skip deferred dumpTrace +sedi 's/os\.Exit(/\/\/ os.Exit(/g' "$TMP_DIR/main.go" # Redirect fmt.Print* to stderr so only JSON goes to stdout cat >> "$TMP_DIR/trace_support.go" <<'REDIRECT' diff --git a/tests/benchmarks/resolution/tracer/jvm-tracer.sh b/tests/benchmarks/resolution/tracer/jvm-tracer.sh index eed1c7ad..563a5e75 100644 --- a/tests/benchmarks/resolution/tracer/jvm-tracer.sh +++ b/tests/benchmarks/resolution/tracer/jvm-tracer.sh @@ -49,14 +49,7 @@ esac TMP_DIR="$(mktemp -d)" trap 'rm -rf "$TMP_DIR"' EXIT -# Portable sed -i (GNU vs BSD) -sedi() { - if sed --version 2>/dev/null | grep -q GNU; then - sed -i "$@" - else - sed -i '' "$@" - fi -} +source "$(dirname "${BASH_SOURCE[0]}")/tracer-common.sh" # Copy fixture files case "$LANG" in @@ -147,34 +140,19 @@ case "$LANG" in [[ "$base" == "CallTracer.java" ]] && continue # Add CallTracer.traceCall() after method opening braces # Match lines like: public void method(...) { - # Use portable sed -i: GNU sed uses -i alone, BSD sed (macOS) requires -i '' # The first sed pass matches all method/constructor opening braces, # so a second pass is unnecessary (it would double-inject traceCall). - if sed --version 2>/dev/null | grep -q GNU; then - sed -i -E '/\)\s*\{$/{ - /class |interface /!{ - a\ CallTracer.traceCall(); - } - }' "$javafile" - else - sed -i '' -E '/\)\s*\{$/{ - /class |interface /!{ - a\ CallTracer.traceCall(); - } - }' "$javafile" - fi + sedi -E '/\)\s*\{$/{ + /class |interface /!{ + a\ CallTracer.traceCall(); + } + }' "$javafile" done # Add dump call at end of main - if sed --version 2>/dev/null | grep -q GNU; then - sed -i '/public static void main/,/\}/ { - /^\s*\}/ i\ CallTracer.dump(); - }' "$TMP_DIR/Main.java" 2>/dev/null || true - else - sed -i '' '/public static void main/,/\}/ { - /^\s*\}/ i\ CallTracer.dump(); - }' "$TMP_DIR/Main.java" 2>/dev/null || true - fi + sedi '/public static void main/,/\}/ { + /^\s*\}/ i\ CallTracer.dump(); + }' "$TMP_DIR/Main.java" 2>/dev/null || true # Compile and run cd "$TMP_DIR" diff --git a/tests/benchmarks/resolution/tracer/native-tracer.sh b/tests/benchmarks/resolution/tracer/native-tracer.sh index e83d3276..1546d31d 100644 --- a/tests/benchmarks/resolution/tracer/native-tracer.sh +++ b/tests/benchmarks/resolution/tracer/native-tracer.sh @@ -29,14 +29,7 @@ FIXTURE_DIR="$(cd "$FIXTURE_DIR" && pwd)" TMP_DIR="$(mktemp -d)" trap 'rm -rf "$TMP_DIR"' EXIT -# Portable sed -i (GNU vs BSD) -sedi() { - if sed --version 2>/dev/null | grep -q GNU; then - sed -i "$@" - else - sed -i '' "$@" - fi -} +source "$(dirname "${BASH_SOURCE[0]}")/tracer-common.sh" empty_result() { local reason="${1:-toolchain not available}" diff --git a/tests/benchmarks/resolution/tracer/tracer-common.sh b/tests/benchmarks/resolution/tracer/tracer-common.sh new file mode 100644 index 00000000..d34dc620 --- /dev/null +++ b/tests/benchmarks/resolution/tracer/tracer-common.sh @@ -0,0 +1,18 @@ +# shellcheck shell=bash +# Shared helpers for the dynamic call tracer scripts in this directory. +# Each tracer (native-tracer.sh, jvm-tracer.sh, go-tracer.sh, ...) is spawned +# as its own subprocess by run-tracer.mjs, so sharing logic between them means +# sourcing this file rather than importing a function — source it with a path +# relative to the caller's own location so it resolves regardless of the +# invoking process's working directory: +# +# source "$(dirname "${BASH_SOURCE[0]}")/tracer-common.sh" + +# Portable sed -i (GNU vs BSD) +sedi() { + if sed --version 2>/dev/null | grep -q GNU; then + sed -i "$@" + else + sed -i '' "$@" + fi +}