@@ -87,7 +87,8 @@ void IR::addVarDefine(std::string name, std::shared_ptr<Variable> variable) {
87
87
bool IR::libObjEmpty () const {
88
88
return functions.empty () && !shouldOutputType (typeDefs) &&
89
89
!shouldOutputType (structs) && !shouldOutputType (unions) &&
90
- varDefines.empty () && variables.empty () && enums.empty ();
90
+ varDefines.empty () && variables.empty () &&
91
+ !shouldOutputType (enums) && literalDefines.empty ();
91
92
}
92
93
93
94
llvm::raw_ostream &operator <<(llvm::raw_ostream &s, const IR &ir) {
@@ -97,24 +98,21 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &s, const IR &ir) {
97
98
s << " package " << ir.packageName << " \n\n " ;
98
99
}
99
100
100
- if (!ir.libObjEmpty () || ir.shouldOutputType (ir.enums ) ||
101
- !ir.literalDefines .empty ()) {
102
- s << " import scala.scalanative._\n "
103
- << " import scala.scalanative.native._\n\n " ;
101
+ if (ir.libObjEmpty ()) {
102
+ return s;
104
103
}
105
104
106
- std::string objectName = handleReservedWords (ir.objectName );
105
+ s << " import scala.scalanative._\n "
106
+ << " import scala.scalanative.native._\n\n " ;
107
107
108
- bool isLibObjectEmpty = ir.libObjEmpty ();
109
-
110
- if (!isLibObjectEmpty) {
108
+ if (!ir.functions .empty () || !ir.varDefines .empty () ||
109
+ !ir.variables .empty ()) {
111
110
if (!ir.linkName .empty ()) {
112
111
s << " @native.link(\" " << ir.linkName << " \" )\n " ;
113
112
}
114
-
115
- s << " @native.extern\n "
116
- << " object " << objectName << " {\n " ;
113
+ s << " @native.extern\n " ;
117
114
}
115
+ s << " object " << handleReservedWords (ir.objectName ) << " {\n " ;
118
116
119
117
std::vector<std::shared_ptr<const Type>> visitedTypes;
120
118
@@ -171,22 +169,20 @@ llvm::raw_ostream &operator<<(llvm::raw_ostream &s, const IR &ir) {
171
169
}
172
170
}
173
171
174
- if (ir.hasHelperMethods ()) {
175
- s << " \n object implicits {\n " << ir.getHelperMethods () << " }\n " ;
176
- }
177
-
178
- if (!isLibObjectEmpty) {
179
- s << " }\n\n " ;
180
- }
181
-
182
172
if (!ir.literalDefines .empty ()) {
183
- s << " object " << ir. libName << " Defines {\n " ;
173
+ s << " \n object defines {\n " ;
184
174
for (const auto &literalDefine : ir.literalDefines ) {
185
175
s << literalDefine->getDefinition (ir.locationManager );
186
176
}
187
- s << " }\n\n " ;
177
+ s << " }\n " ;
178
+ }
179
+
180
+ if (ir.hasHelperMethods ()) {
181
+ s << " \n object implicits {\n " << ir.getHelperMethods () << " }\n " ;
188
182
}
189
183
184
+ s << " }\n\n " ;
185
+
190
186
return s;
191
187
}
192
188
0 commit comments