Changeset 2688


Ignore:
Timestamp:
Apr 16, 2007, 4:55:07 AM (14 years ago)
Author:
orlov
Message:
  • Prelimenary (unusable yet) version of Refal Abstract Syntax generator.
  • Delete all dependant class-files before recompiling a module.
Location:
devel-tools/trunk/eclipse
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • devel-tools/trunk/eclipse/org.refal.plus.rfpdt.comp/src/org/refal/plus/rfpdt/comp/Checker.java

    r2677 r2688  
    11package org.refal.plus.rfpdt.comp;
    22
     3import org.refal.plus.rfpdt.comp.ast.AstDecl;
    34import org.refal.plus.rfpdt.comp.ast.AstImplem;
    45import org.refal.plus.rfpdt.comp.ast.AstInterf;
     
    78public class Checker {
    89
    9         public static void checkModuleImplementation(CompilerEnvironment environment) {
     10        public static AstImplem getModuleImplementation(CompilerEnvironment environment) {
    1011                MsgHandler msgHandler = environment.getMsgHandler();
    1112                String moduleName = environment.getModuleName();
     
    1718                        msgHandler.send(pos,
    1819                                        MsgCode.CanNotReadImplementationForTheModule_X, moduleName);
    19                         return;
     20                        return null;
    2021                }
    2122                if (msgHandler.getErrorCount() > 0)
    22                         return;
     23                        return null;
    2324               
    2425                AstInterf astInterf = RfpParser.parseInterf(environment, moduleName);
    2526                if (msgHandler.getErrorCount() > 0)
    26                         return;
     27                        return null;
    2728                if (astInterf != null) {
     29                        if (astInterf.moduleName != null)
     30                                moduleName = astInterf.moduleName.identifier;
     31                        for (AstTopNode astTopNode : astInterf.topNodes) {
     32                                assert astTopNode instanceof AstDecl;
     33                                ((AstDecl) astTopNode).module = moduleName;
     34                        }
    2835                        AstTopNode[] topNodes = new AstTopNode[astInterf.topNodes.length + astImplem.topNodes.length];
    2936                        System.arraycopy(astInterf.topNodes, 0, topNodes, 0, astInterf.topNodes.length);
    3037                        System.arraycopy(astImplem.topNodes, 0, topNodes, astInterf.topNodes.length, astImplem.topNodes.length);
    31                         astImplem = new AstImplem(astImplem.useList, topNodes);
    32                         if (astInterf.moduleName != null)
    33                                 astImplem.moduleName = astInterf.moduleName.identifier;
    34                         else
    35                                 astImplem.moduleName = moduleName;
     38                        astImplem = new AstImplem(moduleName, astImplem.useList, topNodes);
    3639                }
    3740
    3841                ImportChecker.checkImportLists(astImplem, environment);
    3942                if (msgHandler.getErrorCount() > 0)
    40                         return;
     43                        return null;
    4144
    4245                ImportChecker.populateImports(astImplem, environment);
    4346                if (msgHandler.getErrorCount() > 0)
    44                         return;
     47                        return null;
    4548
    4649                NameChecker.check(astImplem, msgHandler);
    4750                if (msgHandler.getErrorCount() > 0)
    48                         return;
     51                        return null;
    4952
    5053                FenceAndCutChecker.check(astImplem, msgHandler);
    5154                VariableScopeChecker.check(msgHandler, astImplem);
    5255                FormatChecker.check(astImplem, msgHandler);
     56                if (msgHandler.getErrorCount() > 0)
     57                        return null;
     58               
     59                return astImplem;
    5360        }
    5461}
  • devel-tools/trunk/eclipse/org.refal.plus.rfpdt.comp/src/org/refal/plus/rfpdt/comp/ast/AstImplem.java

    r2665 r2688  
    1717        }
    1818
     19        public AstImplem(String moduleName, AstUse[] useList, AstTopNode[] topNodes) {
     20                this.moduleName = moduleName;
     21                this.useList = useList;
     22                this.topNodes = topNodes;
     23        }
     24
    1925        @Override
    2026        public void accept(NodeVisitor v) {
  • devel-tools/trunk/eclipse/org.refal.plus.rfpdt/src/org/refal/plus/rfpdt/core/builder/RfpBuilder.java

    r2672 r2688  
    3434import org.refal.plus.rfpdt.comp.RfpResource;
    3535import org.refal.plus.rfpdt.comp.SrcPosition;
     36import org.refal.plus.rfpdt.comp.ast.AstImplem;
    3637import org.refal.plus.rfpdt.core.RfpCorePlugin;
    3738
     
    284285                CompilerEnvironment environment = new IdeCompilerEnvironment(file);
    285286                final MsgHandler msgHandler = environment.getMsgHandler();
    286                 Checker.checkModuleImplementation(environment);
     287                AstImplem astImplem = Checker.getModuleImplementation(environment);
    287288                if (msgHandler.getErrorCount() > 0)
    288289                        return;
     290                //System.out.println(RefalASGenerator.generateAS(astImplem).formattedRepresentation());
    289291                ExternalCompilerEnvironment externalCompilerEnvironment = new ExternalCompilerEnvironment(
    290292                                file);
     
    396398
    397399        private void deleteClassFileForRfFile(IFile file) {
    398                 IPath classFilePath = file.getProjectRelativePath()
    399                                 .removeFileExtension().addFileExtension("class");
    400                 IFile classFile = getProject().getFile(classFilePath);
    401                 try {
    402                         if (classFile.exists())
    403                                 classFile.delete(true, false, null);
     400                IPath classFilePath = file.getProjectRelativePath().removeFileExtension();
     401                IFile classFile = getProject().getFile(classFilePath.addFileExtension("class"));
     402                try {
     403                        for(int i = 0; true; i++) {
     404                                if (classFile.exists())
     405                                        classFile.delete(true, false, null);
     406                                else
     407                                        break;
     408                                classFile = getProject().getFile(classFilePath + "$" + i + ".class");
     409                        }
    404410                } catch (CoreException e) {
    405411                }
Note: See TracChangeset for help on using the changeset viewer.