use of dyvilx.tools.compiler.ast.external.ExternalHeader in project Dyvil by Dyvil.
the class DyvilCompiler method checkLibraries.
public void checkLibraries() {
if (Library.dyvilLibrary == null) {
this.error(I18n.get("library.dyvil"));
}
if (Library.javaLibrary == null) {
this.error(I18n.get("library.java"));
}
if (Types.LANG_HEADER == null) {
this.error(I18n.get("library.lang_header", this.config.libraries));
Types.LANG_HEADER = new ExternalHeader();
}
}
use of dyvilx.tools.compiler.ast.external.ExternalHeader in project Dyvil by Dyvil.
the class Package method loadHeader.
private IHeaderUnit loadHeader(String fileName, Name name, Library library) {
InputStream inputStream = library.getInputStream(fileName);
if (inputStream != null) {
final AbstractHeader header = new ExternalHeader(name, this);
this.headers.add(header);
return ObjectFormat.read(rootPackage.compiler, inputStream, header);
}
return null;
}
use of dyvilx.tools.compiler.ast.external.ExternalHeader in project Dyvil by Dyvil.
the class SingleImport method checkInline.
private boolean checkInline(MarkerList markers, IContext context, IHeaderUnit header) {
// Check if the Header has a Header Declaration
final HeaderDeclaration headerDeclaration = header.getHeaderDeclaration();
if (headerDeclaration == null) {
return header.isHeader();
}
// Header Access Check
int accessLevel = headerDeclaration.getAttributes().flags() & Modifiers.ACCESS_MODIFIERS;
if ((accessLevel & Modifiers.INTERNAL) != 0) {
if (header instanceof ExternalHeader) {
markers.add(Markers.semanticError(this.position, "import.inline_header.internal", header.getName()));
return false;
}
accessLevel &= 0b1111;
}
switch(accessLevel) {
case Modifiers.PACKAGE:
case Modifiers.PROTECTED:
if (header.getPackage() == context.getHeader().getPackage()) {
return true;
}
// Fallthrough
case Modifiers.PRIVATE:
markers.add(Markers.semanticError(this.position, "import.inline_header.invisible", header.getName()));
return false;
}
// All checks passed
return true;
}
Aggregations