{"size": 1673, "ext": "scrbl", "max_stars_repo_path": "corpse-reviver/scribblings/corpse-reviver.scrbl", "max_stars_repo_name": "camoy/corpse-reviver", "max_stars_repo_stars_event_min_datetime": "2020-10-05T19:10:58.000Z", "max_stars_repo_stars_event_max_datetime": "2021-11-12T00:29:24.000Z", "max_issues_repo_path": "corpse-reviver/scribblings/corpse-reviver.scrbl", "max_issues_repo_name": "camoy/corpse-reviver", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "corpse-reviver/scribblings/corpse-reviver.scrbl", "max_forks_repo_name": "camoy/corpse-reviver", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": 17, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 24.2463768116, "max_line_length": 72, "alphanum_fraction": 0.6993424985}
#lang scribble/manual

@require[@for-label[corpse-reviver
                    racket/base
                    racket/contract]]

@(define TAG-PREFIX
  "(lib corpse-reviver/scribblings/corpse-reviver.scrbl)")

@title[#:tag "top" #:tag-prefix TAG-PREFIX]{Corpse Reviver}
@author{Cameron Moy}
@author{Phúc C. Nguyễn}
@author{Sam Tobin-Hochstadt}
@author{David Van Horn}

SCV-CR allows you to optimize Typed Racket programs
with contract verification.
It does so by extracting the contracts generated by Typed Racket,
passing them to SCV for verification,
and bypassing contracts that are proven safe statically.

@section{Command Line}

Pass your files to @exec{raco scv-cr}
and it will create optimized bytecode.
It can be used as replacement
for calling @exec{raco make}.
The @exec{raco scv-cr} command accepts the following command-line flags:
@tabular[#:sep @hspace[3]
         #:row-properties '(top)
         #:style 'boxed
@list[
@list["Short" "Long" "Description"]
@list[
  @exec{-n}
  @exec{--no-skip}
  @para{
  Don't skip the analysis of modules
  prefixed with @exec{_}.
  This is the convention for indicating
  that a module should be opaque.
  }]
@list[
  @exec{-t}
  @exec{--typed-blame}
  @para{
  By default,
  blame reported by SCV on a typed module is ignored.
  This flag will not ignore those blames.
  }]
@list[
  @exec{-w}
  @exec{--write-contracts}
  @para{
  Write explicitly contracted versions
  of all the given source files
  to the filesystem.
  }]]]

@section{Reference}

@defmodule[corpse-reviver]

@defproc[(compile-files/scv-cr [files (listof path-string?)])
         any]{
  Compiles and optimizes the given @racket[files]
  with SCV-CR.
}
