Search in sources :

Example 1 with ExternalHeader

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();
    }
}
Also used : ExternalHeader(dyvilx.tools.compiler.ast.external.ExternalHeader)

Example 2 with 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;
}
Also used : AbstractHeader(dyvilx.tools.compiler.ast.header.AbstractHeader) InputStream(java.io.InputStream) ExternalHeader(dyvilx.tools.compiler.ast.external.ExternalHeader)

Example 3 with ExternalHeader

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;
}
Also used : HeaderDeclaration(dyvilx.tools.compiler.ast.header.HeaderDeclaration) ExternalHeader(dyvilx.tools.compiler.ast.external.ExternalHeader)

Aggregations

ExternalHeader (dyvilx.tools.compiler.ast.external.ExternalHeader)3 AbstractHeader (dyvilx.tools.compiler.ast.header.AbstractHeader)1 HeaderDeclaration (dyvilx.tools.compiler.ast.header.HeaderDeclaration)1 InputStream (java.io.InputStream)1