Skip to content

Commit 321b112

Browse files
committed
fix: don't generate getters for dummy fields
For empty structs, we generate a dummy field for ANSI C compatibility. This field needs to be included in initializers for the struct, but should not be emitted in any other functions. I erroneously included it in other functions in a previous merge. This commit fixes the issue by ensuring the dummy field is only included in the struct initializer.
1 parent 0adbf44 commit 321b112

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/Deftype.hs

+4-3
Original file line numberDiff line numberDiff line change
@@ -69,18 +69,19 @@ moduleForDeftype innerEnv typeEnv env pathStrings typeName typeVariables rest i
6969
[(XObj (Arr []) ii t)] -> [(XObj (Arr [(XObj (Sym (SymPath [] "__dummy") Symbol) Nothing Nothing), (XObj (Sym (SymPath [] "Char") Symbol) Nothing Nothing)]) ii t)]
7070
_ -> rest
7171
in do
72-
mems <- case initmembers of
72+
mems <- case rest of
7373
[XObj (Arr membersXObjs) _ _] -> Right membersXObjs
7474
_ -> Left $ NotAValidType (XObj (Sym (SymPath pathStrings typeName) Symbol) i (Just TypeTy))
7575
let structTy = StructTy (ConcreteNameTy (SymPath pathStrings typeName)) typeVariables
76-
ptrmembers = map (recursiveMembersToPointers structTy) initmembers
76+
ptrmembers = map (recursiveMembersToPointers structTy) rest
77+
ptrinitmembers = map (recursiveMembersToPointers structTy) initmembers
7778
innermems <- case ptrmembers of
7879
[XObj (Arr membersXObjs) _ _] -> Right membersXObjs
7980
_ -> Left $ NotAValidType (XObj (Sym (SymPath pathStrings typeName) Symbol) i (Just TypeTy))
8081
okRecursive (candidate {typemembers = mems})
8182
validateMembers typeEnv env (candidate {typemembers = innermems})
8283
(okMembers, membersDeps) <- templatesForMembers typeEnv env insidePath structTy ptrmembers
83-
okInit <- if (any (isValueRecursive structTy) ptrmembers) then recursiveProductInitBinder insidePath structTy ptrmembers else binderForInit insidePath structTy initmembers
84+
okInit <- if (any (isValueRecursive structTy) ptrmembers) then recursiveProductInitBinder insidePath structTy ptrinitmembers else binderForInit insidePath structTy initmembers
8485
okMake <- recursiveProductMakeBinder insidePath structTy ptrmembers
8586
(okStr, strDeps) <- binderForStrOrPrn typeEnv env insidePath structTy ptrmembers "str"
8687
(okPrn, _) <- binderForStrOrPrn typeEnv env insidePath structTy ptrmembers"prn"

0 commit comments

Comments
 (0)