Remove erased function args in scheme
This commit is contained in:
3
Makefile
3
Makefile
@@ -28,6 +28,9 @@ newt.ss: newt.js
|
|||||||
newt.so: newt.ss prim.ss
|
newt.so: newt.ss prim.ss
|
||||||
chez --script scripts/compile-chez.ss
|
chez --script scripts/compile-chez.ss
|
||||||
|
|
||||||
|
newt2.ss: newt.so
|
||||||
|
chez --program newt.ss src/Main.newt -o newt2.ss
|
||||||
|
|
||||||
test: newt.js
|
test: newt.js
|
||||||
scripts/test
|
scripts/test
|
||||||
|
|
||||||
|
|||||||
@@ -85,8 +85,9 @@ cexpToScm env (CFun args body) = case bindAll args Lin env of
|
|||||||
where
|
where
|
||||||
bindAll : List (Quant × String) → SnocList String → SCEnv → List String × SCEnv
|
bindAll : List (Quant × String) → SnocList String → SCEnv → List String × SCEnv
|
||||||
bindAll Nil acc env = (acc <>> Nil, env)
|
bindAll Nil acc env = (acc <>> Nil, env)
|
||||||
bindAll ((_,nm) :: rest) acc env = case scbind nm env of
|
bindAll ((Many,nm) :: rest) acc env = case scbind nm env of
|
||||||
(nm', env') => bindAll rest (acc :< nm') env'
|
(nm', env') => bindAll rest (acc :< nm') env'
|
||||||
|
bindAll ((Zero,nm) :: rest) acc env = bindAll rest acc ("#f" :: env)
|
||||||
cexpToScm env (CApp t u) = "(\{cexpToScm env t} \{cexpToScm env u})"
|
cexpToScm env (CApp t u) = "(\{cexpToScm env t} \{cexpToScm env u})"
|
||||||
cexpToScm env (CAppRef nm args Nil) = go (scmName nm) $ map (cexpToScm env) args
|
cexpToScm env (CAppRef nm args Nil) = go (scmName nm) $ map (cexpToScm env) args
|
||||||
where
|
where
|
||||||
@@ -106,7 +107,8 @@ cexpToScm env (CAppRef nm args quants) =
|
|||||||
go env acc Nil (q :: qs) = case scbind "_" env of
|
go env acc Nil (q :: qs) = case scbind "_" env of
|
||||||
(nm, env') => let acc = "\{acc} \{nm}" in "(lambda (\{nm}) \{go env' acc Nil qs})"
|
(nm, env') => let acc = "\{acc} \{nm}" in "(lambda (\{nm}) \{go env' acc Nil qs})"
|
||||||
-- TODO / REVIEW Only for Many?
|
-- TODO / REVIEW Only for Many?
|
||||||
go env acc (arg :: args) (q :: qs) = go env "\{acc} \{arg}" args qs
|
go env acc (arg :: args) (Many :: qs) = go env "\{acc} \{arg}" args qs
|
||||||
|
go env acc (arg :: args) (Zero :: qs) = go env acc args qs
|
||||||
-- go env acc (arg :: args) (q :: qs) = go env acc args qs
|
-- go env acc (arg :: args) (q :: qs) = go env acc args qs
|
||||||
-- so... we're not giving scrutinee a deBruijn index, but we may
|
-- so... we're not giving scrutinee a deBruijn index, but we may
|
||||||
-- need to let it so we can pull data off for the CConAlt
|
-- need to let it so we can pull data off for the CConAlt
|
||||||
|
|||||||
Reference in New Issue
Block a user