feat: modify app representation
This commit is contained in:
parent
749b6b1b7e
commit
e4123585b2
2 changed files with 7 additions and 6 deletions
|
|
@ -106,7 +106,7 @@ private partial def quoteSyntax : Syntax → TermElabM Syntax
|
|||
let preresolved := resolveGlobalName env currNamespace openDecls val ++ preresolved;
|
||||
let val := quote val;
|
||||
-- `scp` is bound in stxQuot.expand
|
||||
`(_app_ Syntax.ident none $(quote rawVal) (addMacroScope $val scp) $(quote preresolved))
|
||||
`(_app_ Syntax.ident none $(quote rawVal) (_app_ addMacroScope $val scp) $(quote preresolved))
|
||||
-- if antiquotation, insert contents as-is, else recurse
|
||||
| stx@(Syntax.node k args) =>
|
||||
if isAntiquot stx then
|
||||
|
|
@ -272,7 +272,7 @@ private partial def compileStxMatch (ref : Syntax) : List Syntax → List Alt
|
|||
let noAlts := (alts.filter $ fun (alt : HeadInfo × Alt) => !info.generalizes alt.1).map Prod.snd;
|
||||
no ← withFreshMacroScope $ compileStxMatch (discr::discrs) noAlts;
|
||||
cond ← match info.argPats with
|
||||
| some pats => `(_app_ Syntax.isOfKind discr $(quote kind) && _app_ Array.size (Syntax.getArgs discr) == $(quote pats.size))
|
||||
| some pats => `(_app_ Syntax.isOfKind discr $(quote kind) && _app_ Array.size (_app_ Syntax.getArgs discr) == $(quote pats.size))
|
||||
| none => `(_app_ Syntax.isOfKind discr $(quote kind));
|
||||
`(let discr := $discr; if _app_ coe $cond then $yes else $no)
|
||||
| _, _ => unreachable!
|
||||
|
|
@ -391,8 +391,8 @@ private unsafe partial def toPreterm : Syntax → TermElabM Expr
|
|||
pure $ lctx.mkLambda #[mkFVar n] e
|
||||
| `Lean.Parser.Term.app => do
|
||||
fn ← toPreterm $ args.get! 0;
|
||||
arg ← toPreterm $ args.get! 1;
|
||||
pure $ mkApp fn arg
|
||||
as ← (args.get! 1).getArgs.mapM toPreterm;
|
||||
pure $ mkAppN fn as
|
||||
| `Lean.Parser.Term.appCore => do
|
||||
fn ← toPreterm $ args.get! 1;
|
||||
as ← (args.get! 2).getArgs.mapM toPreterm;
|
||||
|
|
|
|||
|
|
@ -112,7 +112,7 @@ def bracketedDoSeq := parser! "{" >> doSeq >> "}"
|
|||
@[builtinTermParser] def uminus := parser! "-" >> termParser 100
|
||||
|
||||
def namedArgument := tparser! try ("(" >> ident >> " := ") >> termParser >> ")"
|
||||
@[builtinTermParser] def app := tparser! pushLeading >> (namedArgument <|> termParser appPrec)
|
||||
@[builtinTermParser] def app := tparser! pushLeading >> many1 (namedArgument <|> termParser appPrec)
|
||||
|
||||
-- Auxiliary notation used for fixing bootstrapping issues
|
||||
@[builtinTermParser] def appCore := parser! "_app_ " >> termParser appPrec >> many1 (termParser appPrec)
|
||||
|
|
@ -183,7 +183,8 @@ end Parser
|
|||
open Parser
|
||||
|
||||
def mkAppStx (fn : Syntax) (args : Array Syntax) : Syntax :=
|
||||
args.foldl (fun fn arg => Syntax.node `Lean.Parser.Term.app #[fn, arg]) fn
|
||||
Syntax.node `Lean.Parser.Term.app #[fn, mkNullNode args]
|
||||
-- args.foldl (fun fn arg => Syntax.node `Lean.Parser.Term.app #[fn, arg]) fn
|
||||
|
||||
def mkHole (ref : Syntax) := mkNode `Lean.Parser.Term.hole #[mkAtomFrom ref "_"]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue