/- Copyright (c) 2022 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Authors: Leonardo de Moura -/ module prelude public import Init.Data.FloatArray.Basic public import Lean.CoreM public import Lean.Util.Recognizers public section namespace Lean.Compiler.LCNF /-- Return `true` if `mdata` should be preserved. Right now, we don't preserve any `MData`, but this may change in the future when we add support for debugging information -/ def isCompilerRelevantMData (_mdata : MData) : Bool := false /-- Return `true` if `e` is a `lcCast` application. -/ def isLcCast? (e : Expr) : Option Expr := if e.isAppOfArity ``lcCast 3 then some e.appArg! else none def getCtorArity? (declName : Name) : CoreM (Option Nat) := do let .ctorInfo val ← getConstInfo declName | return none return val.numParams + val.numFields /-- List of types that have builtin runtime support -/ def builtinRuntimeTypes : Array Name := #[ ``String, ``UInt8, ``UInt16, ``UInt32, ``UInt64, ``USize, ``Float, ``Float32, ``Thunk, ``Task, ``Array, ``ByteArray, ``FloatArray, ``Nat, ``Int ] /-- Return `true` iff `declName` is the name of a type with builtin support in the runtime. -/ def isRuntimeBuiltinType (declName : Name) : Bool := builtinRuntimeTypes.contains declName end Lean.Compiler.LCNF