Changeset 2185

Show
Ignore:
Timestamp:
07/05/08 03:45:31 (2 months ago)
Author:
mspiegel
Message:

[environments] rewrote import field generation in compiled environments to throw an exception if an unexpected type of import statement is observed.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ProjectFortress/src/com/sun/fortress/compiler/environments/TopLevelEnvGen.java

    r2169 r2185  
    5252import com.sun.fortress.nodes.Id; 
    5353import com.sun.fortress.nodes.IdOrOpOrAnonymousName; 
     54import com.sun.fortress.nodes.Import; 
    5455import com.sun.fortress.nodes.ImportApi; 
    5556import com.sun.fortress.nodes.AliasedAPIName; 
    5657import com.sun.fortress.nodes.ImportedNames; 
    57 import com.sun.fortress.nodes.NodeDepthFirstVisitor_void; 
    5858import com.sun.fortress.nodes_util.NodeUtil; 
    5959import com.sun.fortress.useful.HasAt; 
     
    185185            className = className + COMPONENT_ENV_SUFFIX; 
    186186 
    187             byte[] envClass = generateForCompilationUnit(className, 
     187            try { 
     188                byte[] envClass = generateForCompilationUnit(className, 
    188189                              components.get(componentName), env); 
    189  
    190             compiledComponents.put(componentName, envClass); 
     190                 
     191                compiledComponents.put(componentName, envClass); 
     192            } catch(StaticError staticError) { 
     193                errors.add(staticError); 
     194            } 
    191195        } 
    192196 
     
    227231        Relation<String, Integer> apiEnvHashCode = new IndexedRelation<String,Integer>(); 
    228232 
    229         writeImportFields(compUnitIndex, cw, apiEnvHashCode); 
    230         writeFields(compUnitIndex, cw, fValueHashCode, fTypeHashCode); 
     233        writeImportFields(cw, compUnitIndex, apiEnvHashCode); 
     234        writeFields(cw, compUnitIndex, fValueHashCode, fTypeHashCode); 
    231235        writeMethodInit(cw, className); 
    232236 
     
    245249    } 
    246250 
    247     private static void writeImportFields(CompilationUnitIndex compUnitIndex, 
    248                                                       ClassWriter cw, Relation<String,Integer> apiEnvHashCode) { 
     251    private static void writeImportFields(ClassWriter cw, CompilationUnitIndex compUnitIndex, 
     252                                                      Relation<String,Integer> apiEnvHashCode) { 
    249253        CompilationUnit comp = compUnitIndex.ast(); 
    250254        final Vector<String> importedApiNames = new Vector<String>(); 
    251255         
    252         comp.accept(new NodeDepthFirstVisitor_void() { 
    253             @Override 
    254             public void forImportedNamesDoFirst(ImportedNames that) { 
    255                importedApiNames.add( NodeUtil.nameString(that.getApi()) ); 
    256             } 
    257  
    258             @Override 
    259             public void forImportApi(ImportApi that){ 
    260                 for ( AliasedAPIName api : that.getApis() ){ 
    261                        importedApiNames.add( NodeUtil.nameString(api.getApi()) ); 
    262                 } 
    263            
    264         });  
     256        for(Import imports : comp.getImports()) { 
     257               if (imports instanceof ImportApi) { 
     258                       ImportApi importApi = (ImportApi) imports; 
     259                       for (AliasedAPIName api : importApi.getApis()) { 
     260                       importedApiNames.add(NodeUtil.nameString(api.getApi()));                                 
     261                        } 
     262               } else if (imports instanceof ImportedNames) { 
     263                       ImportedNames importNames = (ImportedNames) imports; 
     264                       importedApiNames.add(NodeUtil.nameString(importNames.getApi())); 
     265               } else { 
     266                       throw StaticError.make("Unrecognized import type in bytecode generation", imports); 
     267               
     268       } 
    265269         
    266270        for(String apiName : importedApiNames) { 
     
    272276        } 
    273277 
    274         private static void writeFields(CompilationUnitIndex compUnitIndex, 
    275             ClassWriter cw, Relation<String, Integer> fValueHashCode, 
     278        private static void writeFields(ClassWriter cw, CompilationUnitIndex compUnitIndex, 
     279            Relation<String, Integer> fValueHashCode, 
    276280            Relation<String, Integer> fTypeHashCode) { 
    277281