Skip to content

Commit 32e26c5

Browse files
authored
[ refactor ] introduce UserName for (UN/RF) (#1926)
Instead of having UN & RF (& Hole in the near future & maybe even more later e.g. operator names) we have a single UN constructor that takes a UserName instead of a String. UserName is (for now) ```idris data UserName : Type where Basic : String -> UserName -- default name constructor e.g. map Field : String -> UserName -- field accessor e.g. .fst Underscore : UserName -- no name e.g. _ ``` This is extracted from the draft PR #1852 which is too big to easily debug. Once this is working, I can go back to it.
1 parent 7baf698 commit 32e26c5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+1153
-681
lines changed

idris2api.ipkg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ modules =
147147
Libraries.Data.String.Iterator,
148148
Libraries.Data.StringMap,
149149
Libraries.Data.StringTrie,
150+
Libraries.Data.UserNameMap,
150151
Libraries.Data.Version,
151152

152153
Libraries.System.Directory.Tree,

libs/base/Language/Reflection/TT.idr

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,32 @@ data Constant
9797
| WorldType
9898

9999
public export
100-
data Name = UN String -- user defined name
100+
data UserName
101+
= Basic String -- default name constructor e.g. map
102+
| Field String -- field accessor e.g. .fst
103+
| Underscore -- no name e.g. _
104+
105+
public export
106+
data Name = NS Namespace Name -- name in a namespace
107+
| UN UserName -- user defined name
101108
| MN String Int -- machine generated name
102-
| NS Namespace Name -- name in a namespace
103109
| DN String Name -- a name and how to display it
104-
| RF String -- record field name
105110
| Nested (Int, Int) Name -- nested function name
106111
| CaseBlock String Int -- case block nested in (resolved) name
107112
| WithBlock String Int -- with block nested in (resolved) name
108113

114+
export
115+
Show UserName where
116+
show (Basic n) = n
117+
show (Field n) = "." ++ n
118+
show Underscore = "_"
119+
109120
export
110121
Show Name where
111122
show (NS ns n) = show ns ++ "." ++ show n
112-
show (UN x) = x
123+
show (UN x) = show x
113124
show (MN x y) = "{" ++ x ++ ":" ++ show y ++ "}"
114125
show (DN str y) = str
115-
show (RF n) = "." ++ n
116126
show (Nested (outer, idx) inner)
117127
= show outer ++ ":" ++ show idx ++ ":" ++ show inner
118128
show (CaseBlock outer i) = "case block in " ++ show outer

src/Compiler/Common.idr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,10 +199,10 @@ replaceEntry (i, Just (ns, b))
199199

200200
natHackNames : List Name
201201
natHackNames
202-
= [UN "prim__add_Integer",
203-
UN "prim__sub_Integer",
204-
UN "prim__mul_Integer",
205-
NS typesNS (UN "prim__integerToNat")]
202+
= [UN (Basic "prim__add_Integer"),
203+
UN (Basic "prim__sub_Integer"),
204+
UN (Basic "prim__mul_Integer"),
205+
NS typesNS (UN $ Basic "prim__integerToNat")]
206206

207207
-- Hmm, these dump functions are all very similar aren't they...
208208
dumpCases : String -> List (Name,FC,NamedDef) -> Core ()

src/Compiler/CompileExpr.idr

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -181,33 +181,33 @@ magic ms e = go ms e where
181181
%inline
182182
magic__integerToNat : FC -> FC -> forall vars. Vect 1 (CExp vars) -> CExp vars
183183
magic__integerToNat fc fc' [k]
184-
= CApp fc (CRef fc' (NS typesNS (UN "prim__integerToNat"))) [k]
184+
= CApp fc (CRef fc' (NS typesNS (UN $ Basic "prim__integerToNat"))) [k]
185185

186186
magic__natMinus : FC -> FC -> forall vars. Vect 2 (CExp vars) -> CExp vars
187187
magic__natMinus fc fc' [m,n]
188188
= magic__integerToNat fc fc'
189-
[CApp fc (CRef fc' (UN "prim__sub_Integer")) [m, n]]
189+
[CApp fc (CRef fc' (UN $ Basic "prim__sub_Integer")) [m, n]]
190190

191191
-- We don't reuse natMinus here because we assume that unsuc will only be called
192192
-- on S-headed numbers so we do not need the truncating integerToNat call!
193193
magic__natUnsuc : FC -> FC -> forall vars. Vect 1 (CExp vars) -> CExp vars
194194
magic__natUnsuc fc fc' [m]
195-
= CApp fc (CRef fc' (UN "prim__sub_Integer")) [m, CPrimVal fc (BI 1)]
195+
= CApp fc (CRef fc' (UN $ Basic "prim__sub_Integer")) [m, CPrimVal fc (BI 1)]
196196

197197
-- TODO: next release remove this and use %builtin pragma
198198
natHack : List Magic
199199
natHack =
200-
[ MagicCRef (NS typesNS (UN "natToInteger")) 1 (\ _, _, [k] => k)
201-
, MagicCRef (NS typesNS (UN "integerToNat")) 1 magic__integerToNat
202-
, MagicCRef (NS typesNS (UN "plus")) 2
203-
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN "prim__add_Integer")) [m, n])
204-
, MagicCRef (NS typesNS (UN "mult")) 2
205-
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN "prim__mul_Integer")) [m, n])
206-
, MagicCRef (NS typesNS (UN "minus")) 2 magic__natMinus
207-
, MagicCRef (NS typesNS (UN "equalNat")) 2
208-
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN "prim__eq_Integer")) [m, n])
209-
, MagicCRef (NS typesNS (UN "compareNat")) 2
210-
(\ fc, fc', [m,n] => CApp fc (CRef fc' (NS eqOrdNS (UN "compareInteger"))) [m, n])
200+
[ MagicCRef (NS typesNS (UN $ Basic "natToInteger")) 1 (\ _, _, [k] => k)
201+
, MagicCRef (NS typesNS (UN $ Basic "integerToNat")) 1 magic__integerToNat
202+
, MagicCRef (NS typesNS (UN $ Basic "plus")) 2
203+
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN $ Basic "prim__add_Integer")) [m, n])
204+
, MagicCRef (NS typesNS (UN $ Basic "mult")) 2
205+
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN $ Basic "prim__mul_Integer")) [m, n])
206+
, MagicCRef (NS typesNS (UN $ Basic "minus")) 2 magic__natMinus
207+
, MagicCRef (NS typesNS (UN $ Basic "equalNat")) 2
208+
(\ fc, fc', [m,n] => CApp fc (CRef fc' (UN $ Basic "prim__eq_Integer")) [m, n])
209+
, MagicCRef (NS typesNS (UN $ Basic "compareNat")) 2
210+
(\ fc, fc', [m,n] => CApp fc (CRef fc' (NS eqOrdNS (UN $ Basic "compareInteger"))) [m, n])
211211
]
212212

213213
-- get all transformation from %builtin pragmas
@@ -321,8 +321,9 @@ mutual
321321
(CLet fc x True !(toCExp m n val) sc')
322322
rig
323323
toCExpTm m n (Bind fc x (Pi _ c e ty) sc)
324-
= pure $ CCon fc (UN "->") TYCON Nothing [!(toCExp m n ty),
325-
CLam fc x !(toCExp m n sc)]
324+
= pure $ CCon fc (UN (Basic "->")) TYCON Nothing
325+
[ !(toCExp m n ty)
326+
, CLam fc x !(toCExp m n sc)]
326327
toCExpTm m n (Bind fc x b tm) = pure $ CErased fc
327328
-- We'd expect this to have been dealt with in toCExp, but for completeness...
328329
toCExpTm m n (App fc tm arg)
@@ -339,9 +340,9 @@ mutual
339340
= let t = constTag c in
340341
if t == 0
341342
then pure $ CPrimVal fc c
342-
else pure $ CCon fc (UN (show c)) TYCON Nothing []
343+
else pure $ CCon fc (UN $ Basic $ show c) TYCON Nothing []
343344
toCExpTm m n (Erased fc _) = pure $ CErased fc
344-
toCExpTm m n (TType fc) = pure $ CCon fc (UN "Type") TYCON Nothing []
345+
toCExpTm m n (TType fc) = pure $ CCon fc (UN (Basic "Type")) TYCON Nothing []
345346

346347
toCExp : {vars : _} ->
347348
{auto c : Ref Ctxt Defs} ->
@@ -576,15 +577,15 @@ getFieldArgs defs cl
576577

577578
getNArgs : {auto c : Ref Ctxt Defs} ->
578579
Defs -> Name -> List (Closure []) -> Core NArgs
579-
getNArgs defs (NS _ (UN "IORes")) [arg] = pure $ NIORes arg
580-
getNArgs defs (NS _ (UN "Ptr")) [arg] = pure NPtr
581-
getNArgs defs (NS _ (UN "AnyPtr")) [] = pure NPtr
582-
getNArgs defs (NS _ (UN "GCPtr")) [arg] = pure NGCPtr
583-
getNArgs defs (NS _ (UN "GCAnyPtr")) [] = pure NGCPtr
584-
getNArgs defs (NS _ (UN "Buffer")) [] = pure NBuffer
585-
getNArgs defs (NS _ (UN "ForeignObj")) [] = pure NForeignObj
586-
getNArgs defs (NS _ (UN "Unit")) [] = pure NUnit
587-
getNArgs defs (NS _ (UN "Struct")) [n, args]
580+
getNArgs defs (NS _ (UN $ Basic "IORes")) [arg] = pure $ NIORes arg
581+
getNArgs defs (NS _ (UN $ Basic "Ptr")) [arg] = pure NPtr
582+
getNArgs defs (NS _ (UN $ Basic "AnyPtr")) [] = pure NPtr
583+
getNArgs defs (NS _ (UN $ Basic "GCPtr")) [arg] = pure NGCPtr
584+
getNArgs defs (NS _ (UN $ Basic "GCAnyPtr")) [] = pure NGCPtr
585+
getNArgs defs (NS _ (UN $ Basic "Buffer")) [] = pure NBuffer
586+
getNArgs defs (NS _ (UN $ Basic "ForeignObj")) [] = pure NForeignObj
587+
getNArgs defs (NS _ (UN $ Basic "Unit")) [] = pure NUnit
588+
getNArgs defs (NS _ (UN $ Basic "Struct")) [n, args]
588589
= do NPrimVal _ (Str n') <- evalClosure defs n
589590
| nf => throw (GenericMsg (getLoc nf) "Unknown name for struct")
590591
pure (Struct n' !(getFieldArgs defs args))
@@ -641,9 +642,9 @@ nfToCFType _ s (NTCon fc n_in _ _ args)
641642
carg <- nfToCFType fc s narg
642643
pure (CFIORes carg)
643644
nfToCFType _ s (NType _)
644-
= pure (CFUser (UN "Type") [])
645+
= pure (CFUser (UN (Basic "Type")) [])
645646
nfToCFType _ s (NErased _ _)
646-
= pure (CFUser (UN "__") [])
647+
= pure (CFUser (UN (Basic "__")) [])
647648
nfToCFType fc s t
648649
= do defs <- get Ctxt
649650
ty <- quote defs [] t
@@ -766,7 +767,7 @@ compileExp : {auto c : Ref Ctxt Defs} ->
766767
compileExp tm
767768
= do m <- builtinMagic
768769
s <- newRef NextSucc 0
769-
exp <- toCExp m (UN "main") tm
770+
exp <- toCExp m (UN $ Basic "main") tm
770771
pure exp
771772

772773
||| Given a name, look up an expression, and compile it to a CExp in the environment

src/Compiler/ES/Codegen.idr

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,17 @@ keywordSafe s = s
8383
-- JS Name
8484
--------------------------------------------------------------------------------
8585

86+
jsUserName : UserName -> String
87+
jsUserName (Basic n) = keywordSafe $ jsIdent n
88+
jsUserName (Field n) = "rf__" ++ jsIdent n
89+
jsUserName Underscore = keywordSafe $ jsIdent "_"
90+
8691
jsName : Name -> String
8792
jsName (NS ns n) = jsIdent (showNSWithSep "_" ns) ++ "_" ++ jsName n
88-
jsName (UN n) = keywordSafe $ jsIdent n
93+
jsName (UN n) = jsUserName n
8994
jsName (MN n i) = jsIdent n ++ "_" ++ show i
9095
jsName (PV n d) = "pat__" ++ jsName n
9196
jsName (DN _ n) = jsName n
92-
jsName (RF n) = "rf__" ++ jsIdent n
9397
jsName (Nested (i, x) n) = "n__" ++ show i ++ "_" ++ show x ++ "_" ++ jsName n
9498
jsName (CaseBlock x y) = "case__" ++ jsIdent x ++ "_" ++ show y
9599
jsName (WithBlock x y) = "with__" ++ jsIdent x ++ "_" ++ show y
@@ -515,32 +519,33 @@ foreignDecl n ccs = do
515519

516520
-- implementations for external primitive functions.
517521
jsPrim : {auto c : Ref ESs ESSt} -> Name -> List Doc -> Core Doc
518-
jsPrim (NS _ (UN "prim__newIORef")) [_,v,_] = pure $ hcat ["({value:", v, "})"]
519-
jsPrim (NS _ (UN "prim__readIORef")) [_,r,_] = pure $ hcat ["(", r, ".value)"]
520-
jsPrim (NS _ (UN "prim__writeIORef")) [_,r,v,_] = pure $ hcat ["(", r, ".value=", v, ")"]
521-
jsPrim (NS _ (UN "prim__newArray")) [_,s,v,_] = pure $ hcat ["(Array(", s, ").fill(", v, "))"]
522-
jsPrim (NS _ (UN "prim__arrayGet")) [_,x,p,_] = pure $ hcat ["(", x, "[", p, "])"]
523-
jsPrim (NS _ (UN "prim__arraySet")) [_,x,p,v,_] = pure $ hcat ["(", x, "[", p, "]=", v, ")"]
524-
jsPrim (NS _ (UN "void")) [_, _] = pure . jsCrashExp $ jsStringDoc "Error: Executed 'void'"
525-
jsPrim (NS _ (UN "prim__void")) [_, _] = pure . jsCrashExp $ jsStringDoc "Error: Executed 'void'"
526-
jsPrim (NS _ (UN "prim__codegen")) [] = do
522+
jsPrim nm docs = case (dropAllNS nm, docs) of
523+
(UN (Basic "prim__newIORef"), [_,v,_]) => pure $ hcat ["({value:", v, "})"]
524+
(UN (Basic "prim__readIORef"), [_,r,_]) => pure $ hcat ["(", r, ".value)"]
525+
(UN (Basic "prim__writeIORef"), [_,r,v,_]) => pure $ hcat ["(", r, ".value=", v, ")"]
526+
(UN (Basic "prim__newArray"), [_,s,v,_]) => pure $ hcat ["(Array(", s, ").fill(", v, "))"]
527+
(UN (Basic "prim__arrayGet"), [_,x,p,_]) => pure $ hcat ["(", x, "[", p, "])"]
528+
(UN (Basic "prim__arraySet"), [_,x,p,v,_]) => pure $ hcat ["(", x, "[", p, "]=", v, ")"]
529+
(UN (Basic "void"), [_, _]) => pure . jsCrashExp $ jsStringDoc "Error: Executed 'void'"
530+
(UN (Basic "prim__void"), [_, _]) => pure . jsCrashExp $ jsStringDoc "Error: Executed 'void'"
531+
(UN (Basic "prim__codegen"), []) => do
527532
(cg :: _) <- ccTypes <$> get ESs
528533
| _ => pure "\"javascript\""
529534
pure . Text $ jsString cg
530535

531536
-- fix #1839: Only support `prim__os` in Node backend but not in browsers
532-
jsPrim (NS _ (UN "prim__os")) [] = do
533-
tys <- ccTypes <$> get ESs
534-
case searchForeign tys ["node"] of
535-
Right _ => do
536-
addToPreamble "prim__os" $
537-
"const _sysos = ((o => o === 'linux'?'unix':o==='win32'?'windows':o)" ++
538-
"(require('os').platform()));"
539-
pure $ Text $ esName "sysos"
540-
Left _ =>
541-
throw $ InternalError $ "prim not implemented: prim__os"
542-
543-
jsPrim x args = throw $ InternalError $ "prim not implemented: " ++ (show x)
537+
(UN (Basic "prim__os"), []) => do
538+
tys <- ccTypes <$> get ESs
539+
case searchForeign tys ["node"] of
540+
Right _ => do
541+
addToPreamble "prim__os" $
542+
"const _sysos = ((o => o === 'linux'?'unix':o==='win32'?'windows':o)" ++
543+
"(require('os').platform()));"
544+
pure $ Text $ esName "sysos"
545+
Left _ =>
546+
throw $ InternalError $ "prim not implemented: prim__os"
547+
548+
_ => throw $ InternalError $ "prim not implemented: " ++ show nm
544549

545550
--------------------------------------------------------------------------------
546551
-- Codegen
@@ -696,7 +701,7 @@ foreign _ = pure []
696701
-- name of the toplevel tail call loop from the
697702
-- preamble.
698703
tailRec : Name
699-
tailRec = UN "__tailRec"
704+
tailRec = UN $ Basic "__tailRec"
700705

701706
||| Compiles the given `ClosedTerm` for the list of supported
702707
||| backends to JS code.

src/Compiler/Inline.idr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ mutual
151151
-- whether they're safe to inline, but until then this gives such a huge
152152
-- boost by removing unnecessary lambdas that we'll keep the special case.
153153
eval rec env stk (CRef fc n)
154-
= case (n == NS primIONS (UN "io_bind"), stk) of
154+
= case (n == NS primIONS (UN $ Basic "io_bind"), stk) of
155155
(True, act :: cont :: world :: stk) =>
156156
do xn <- genName "act"
157157
sc <- eval rec [] [] (CApp fc cont [CRef fc xn, world])

src/Compiler/Interpreter/VMCode.idr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ callPrim stk fn args = case the (Either Object (Vect ar Constant)) $ traverse ge
120120
getConst o = Left o
121121

122122
NS_UN : Namespace -> String -> Name
123-
NS_UN ns un = NS ns (UN un)
123+
NS_UN ns un = NS ns (UN $ Basic un)
124124

125125
argError : Ref State InterpState => Stack -> Vect h Object -> Core a
126126
argError stk obj = interpError stk $ "Unexpected arguments: " ++ foldMap ((" " ++) . showType) obj

src/Compiler/LambdaLift.idr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ genName
148148
where
149149
mkName : Name -> Int -> Name
150150
mkName (NS ns b) i = NS ns (mkName b i)
151-
mkName (UN n) i = MN n i
151+
mkName (UN n) i = MN (displayUserName n) i
152152
mkName (DN _ n) i = mkName n i
153153
mkName (CaseBlock outer inner) i = MN ("case block in " ++ outer ++ " (" ++ show inner ++ ")") i
154154
mkName (WithBlock outer inner) i = MN ("with block in " ++ outer ++ " (" ++ show inner ++ ")") i

src/Compiler/RefC/RefC.idr

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,19 @@ showcCleanString (c ::cs) = (showcCleanStringChar c) . showcCleanString cs
6363
cCleanString : String -> String
6464
cCleanString cs = showcCleanString (unpack cs) ""
6565

66+
export
67+
cUserName : UserName -> String
68+
cUserName (Basic n) = cCleanString n
69+
cUserName (Field n) = "rec__" ++ cCleanString n
70+
cUserName Underscore = cCleanString "_"
71+
6672
export
6773
cName : Name -> String
6874
cName (NS ns n) = cCleanString (showNSWithSep "_" ns) ++ "_" ++ cName n
69-
cName (UN n) = cCleanString n
75+
cName (UN n) = cUserName n
7076
cName (MN n i) = cCleanString n ++ "_" ++ cCleanString (show i)
7177
cName (PV n d) = "pat__" ++ cName n
7278
cName (DN _ n) = cName n
73-
cName (RF n) = "rec__" ++ cCleanString n
7479
cName (Nested i n) = "n__" ++ cCleanString (show i) ++ "_" ++ cName n
7580
cName (CaseBlock x y) = "case__" ++ cCleanString (show x) ++ "_" ++ cCleanString (show y)
7681
cName (WithBlock x y) = "with__" ++ cCleanString (show x) ++ "_" ++ cCleanString (show y)
@@ -228,20 +233,20 @@ Show ExtPrim where
228233
||| Match on a user given name to get the scheme primitive
229234
toPrim : Name -> ExtPrim
230235
toPrim pn@(NS _ n)
231-
= cond [(n == UN "prim__newIORef", NewIORef),
232-
(n == UN "prim__readIORef", ReadIORef),
233-
(n == UN "prim__writeIORef", WriteIORef),
234-
(n == UN "prim__newArray", NewArray),
235-
(n == UN "prim__arrayGet", ArrayGet),
236-
(n == UN "prim__arraySet", ArraySet),
237-
(n == UN "prim__getField", GetField),
238-
(n == UN "prim__setField", SetField),
239-
(n == UN "void", VoidElim), -- DEPRECATED. TODO: remove when bootstrap has been updated
240-
(n == UN "prim__void", VoidElim),
241-
(n == UN "prim__os", SysOS),
242-
(n == UN "prim__codegen", SysCodegen),
243-
(n == UN "prim__onCollect", OnCollect),
244-
(n == UN "prim__onCollectAny", OnCollectAny)
236+
= cond [(n == UN (Basic "prim__newIORef"), NewIORef),
237+
(n == UN (Basic "prim__readIORef"), ReadIORef),
238+
(n == UN (Basic "prim__writeIORef"), WriteIORef),
239+
(n == UN (Basic "prim__newArray"), NewArray),
240+
(n == UN (Basic "prim__arrayGet"), ArrayGet),
241+
(n == UN (Basic "prim__arraySet"), ArraySet),
242+
(n == UN (Basic "prim__getField"), GetField),
243+
(n == UN (Basic "prim__setField"), SetField),
244+
(n == UN (Basic "void"), VoidElim), -- DEPRECATED. TODO: remove when bootstrap has been updated
245+
(n == UN (Basic "prim__void"), VoidElim),
246+
(n == UN (Basic "prim__os"), SysOS),
247+
(n == UN (Basic "prim__codegen"), SysCodegen),
248+
(n == UN (Basic "prim__onCollect"), OnCollect),
249+
(n == UN (Basic "prim__onCollectAny"), OnCollectAny)
245250
]
246251
(Unknown pn)
247252
toPrim pn = assert_total $ idris_crash ("INTERNAL ERROR: Unknown primitive: " ++ cName pn)
@@ -909,8 +914,8 @@ createCFunctions n (MkAForeign ccs fargs ret) = do
909914
else CLangC
910915
let isStandardFFI = Prelude.elem lang ["RefC", "C"]
911916
let fctName = if isStandardFFI
912-
then UN fctForeignName
913-
else UN $ lang ++ "_" ++ fctForeignName
917+
then UN $ Basic $ fctForeignName
918+
else UN $ Basic $ lang ++ "_" ++ fctForeignName
914919
if isStandardFFI
915920
then case extLibOpts of
916921
[lib, header] => addHeader header

src/Compiler/Scheme/Chez.idr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ chezString cs = strCons '"' (showChezString (unpack cs) "\"")
128128

129129
mutual
130130
handleRet : String -> String -> String
131-
handleRet "void" op = op ++ " " ++ mkWorld (schConstructor chezString (UN "") (Just 0) [])
131+
handleRet "void" op = op ++ " " ++ mkWorld (schConstructor chezString (UN $ Basic "") (Just 0) [])
132132
handleRet _ op = mkWorld op
133133

134134
getFArgs : NamedCExp -> Core (List (NamedCExp, NamedCExp))

0 commit comments

Comments
 (0)