chore: remove unnecessary c inline

This commit is contained in:
Leonardo de Moura 2019-10-23 16:51:29 -07:00
parent 745367a4ed
commit b9480d6ae2
3 changed files with 29 additions and 29 deletions

View file

@ -135,18 +135,18 @@ abbrev Unit : Type := PUnit
structure Thunk (α : Type u) : Type u :=
(fn : Unit → α)
attribute [extern c inline "lean_mk_thunk(#2)"] Thunk.mk
attribute [extern "lean_mk_thunk"] Thunk.mk
@[noinline, extern c inline "lean_thunk_pure(#2)"]
@[noinline, extern "lean_thunk_pure"]
protected def Thunk.pure {α : Type u} (a : α) : Thunk α :=
⟨fun _ => a⟩
@[noinline, extern c inline "lean_thunk_get_own(#2)"]
@[noinline, extern "lean_thunk_get_own"]
protected def Thunk.get {α : Type u} (x : @& Thunk α) : α :=
x.fn ()
@[noinline, extern c inline "lean_thunk_map(#3, #4)"]
@[noinline, extern "lean_thunk_map"]
protected def Thunk.map {α : Type u} {β : Type v} (f : α → β) (x : Thunk α) : Thunk β :=
⟨fun _ => f x.get⟩
@[noinline, extern c inline "lean_thunk_bind(#3, #4)"]
@[noinline, extern "lean_thunk_bind"]
protected def Thunk.bind {α : Type u} {β : Type v} (x : Thunk α) (f : α → Thunk β) : Thunk β :=
⟨fun _ => (f x.get).get⟩
@ -154,18 +154,18 @@ protected def Thunk.bind {α : Type u} {β : Type v} (x : Thunk α) (f : α
structure Task (α : Type u) : Type u :=
(fn : Unit → α)
attribute [extern c inline "lean_mk_task(#2)"] Task.mk
attribute [extern "lean_mk_task"] Task.mk
@[noinline, extern c inline "lean_task_pure(#2)"]
@[noinline, extern "lean_task_pure"]
protected def Task.pure {α : Type u} (a : α) : Task α :=
⟨fun _ => a⟩
@[noinline, extern c inline "lean_task_get(#2)"]
@[noinline, extern "lean_task_get"]
protected def Task.get {α : Type u} (x : @& Task α) : α :=
x.fn ()
@[noinline, extern c inline "lean_task_map(#3, #4)"]
@[noinline, extern "lean_task_map"]
protected def Task.map {α : Type u} {β : Type v} (f : α → β) (x : Task α) : Task β :=
⟨fun _ => f x.get⟩
@[noinline, extern c inline "lean_task_bind(#3, #4)"]
@[noinline, extern "lean_task_bind"]
protected def Task.bind {α : Type u} {β : Type v} (x : Task α) (f : α → Task β) : Task β :=
⟨fun _ => (f x.get).get⟩

View file

@ -21,11 +21,11 @@ structure Array (α : Type u) :=
(sz : Nat)
(data : Fin sz → α)
attribute [extern c inline "lean_array_mk(#2, #3)"] Array.mk
attribute [extern c inline "lean_array_data(#2, #3)"] Array.data
attribute [extern c inline "lean_array_sz(#2)"] Array.sz
attribute [extern "lean_array_mk"] Array.mk
attribute [extern "lean_array_data"] Array.data
attribute [extern "lean_array_sz"] Array.sz
@[reducible, extern c inline "lean_array_get_size(#2)"]
@[reducible, extern "lean_array_get_size"]
def Array.size {α : Type u} (a : @& Array α) : Nat :=
a.sz
@ -33,19 +33,19 @@ namespace Array
variables {α : Type u}
/- The parameter `c` is the initial capacity -/
@[extern c inline "lean_mk_empty_array_with_capacity(#2)"]
@[extern "lean_mk_empty_array_with_capacity"]
def mkEmpty (c : @& Nat) : Array α :=
{ sz := 0,
data := fun ⟨x, h⟩ => absurd h (Nat.notLtZero x) }
@[extern c inline "lean_array_push(#2, #3)"]
@[extern "lean_array_push"]
def push (a : Array α) (v : α) : Array α :=
{ sz := Nat.succ a.sz,
data := fun ⟨j, h₁⟩ =>
if h₂ : j = a.sz then v
else a.data ⟨j, Nat.ltOfLeOfNe (Nat.leOfLtSucc h₁) h₂⟩ }
@[extern c inline "lean_mk_array(#2, #3)"]
@[extern "lean_mk_array"]
def mkArray {α : Type u} (n : Nat) (v : α) : Array α :=
{ sz := n,
data := fun _ => v}
@ -68,19 +68,19 @@ a.size = 0
def singleton (v : α) : Array α :=
mkArray 1 v
@[extern c inline "lean_array_fget(#2, #3)"]
@[extern "lean_array_fget"]
def get (a : @& Array α) (i : @& Fin a.size) : α :=
a.data i
/- Low-level version of `fget` which is as fast as a C array read.
`Fin` values are represented as tag pointers in the Lean runtime. Thus,
`fget` may be slightly slower than `uget`. -/
@[extern c inline "lean_array_uget(#2, #3)"]
@[extern "lean_array_uget"]
def uget (a : @& Array α) (i : USize) (h : i.toNat < a.size) : α :=
a.get ⟨i.toNat, h⟩
/- "Comfortable" version of `fget`. It performs a bound check at runtime. -/
@[extern c inline "lean_array_get(#2, #3, #4)"]
@[extern "lean_array_get"]
def get! [Inhabited α] (a : @& Array α) (i : @& Nat) : α :=
if h : i < a.size then a.get ⟨i, h⟩ else default α
@ -93,7 +93,7 @@ if h : i < a.size then some (a.get ⟨i, h⟩) else none
def getD (a : Array α) (i : Nat) (v₀ : α) : α :=
if h : i < a.size then a.get ⟨i, h⟩ else v₀
@[extern c inline "lean_array_fset(#2, #3, #4)"]
@[extern "lean_array_fset"]
def set (a : Array α) (i : @& Fin a.size) (v : α) : Array α :=
{ sz := a.sz,
data := fun j => if h : i = j then v else a.data j }
@ -107,23 +107,23 @@ rfl
/- Low-level version of `fset` which is as fast as a C array fset.
`Fin` values are represented as tag pointers in the Lean runtime. Thus,
`fset` may be slightly slower than `uset`. -/
@[extern c inline "lean_array_uset(#2, #3, #4)"]
@[extern "lean_array_uset"]
def uset (a : Array α) (i : USize) (v : α) (h : i.toNat < a.size) : Array α :=
a.set ⟨i.toNat, h⟩ v
/- "Comfortable" version of `fset`. It performs a bound check at runtime. -/
@[extern c inline "lean_array_set(#2, #3, #4)"]
@[extern "lean_array_set"]
def set! (a : Array α) (i : @& Nat) (v : α) : Array α :=
if h : i < a.size then a.set ⟨i, h⟩ v else panic! "index out of bounds"
@[extern c inline "lean_array_fswap(#2, #3, #4)"]
@[extern "lean_array_fswap"]
def swap (a : Array α) (i j : @& Fin a.size) : Array α :=
let v₁ := a.get i;
let v₂ := a.get j;
let a := a.set i v₂;
a.set j v₁
@[extern c inline "lean_array_swap(#2, #3, #4)"]
@[extern "lean_array_swap"]
def swap! (a : Array α) (i j : @& Nat) : Array α :=
if h₁ : i < a.size then
if h₂ : j < a.size then swap a ⟨i, h₁⟩ ⟨j, h₂⟩
@ -142,7 +142,7 @@ panic! ("index " ++ toString i ++ " out of bounds")
@[inline] def swapAt! {α : Type} (a : Array α) (i : Nat) (v : α) : α × Array α :=
if h : i < a.size then swapAt a ⟨i, h⟩ v else @swapAtPanic! _ ⟨v⟩ i
@[extern c inline "lean_array_pop(#2)"]
@[extern "lean_array_pop"]
def pop (a : Array α) : Array α :=
{ sz := Nat.pred a.size,
data := fun ⟨j, h⟩ => a.get ⟨j, Nat.ltOfLtOfLe h (Nat.predLe _)⟩ }

View file

@ -9,16 +9,16 @@ import Init.Data.ToString
universes u v
/- debugging helper functions -/
@[neverExtract, extern c inline "lean_dbg_trace(#2, #3)"]
@[neverExtract, extern "lean_dbg_trace"]
def dbgTrace {α : Type u} (s : String) (f : Unit → α) : α :=
f ()
/- Display the given message if `a` is shared, that is, RC(a) > 1 -/
@[neverExtract, extern c inline "lean_dbg_trace_if_shared(#2, #3)"]
@[neverExtract, extern "lean_dbg_trace_if_shared"]
def dbgTraceIfShared {α : Type u} (s : String) (a : α) : α :=
a
@[extern c inline "lean_dbg_sleep(#2, #3)"]
@[extern "lean_dbg_sleep"]
def dbgSleep {α : Type u} (ms : UInt32) (f : Unit → α) : α :=
f ()