Skip to content
Snippets Groups Projects
Select Git revision
  • f5c0871eea793f77806eafaf0b9b8e0951269db4
  • develop default
  • release protected
  • v0.x
  • v2.2.0
  • v2.1.0
6 results

wordCompletion.ts

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    InstanceTransformation.java 10.00 KiB
    package de.tla2b.analysis;
    
    import de.tla2b.global.BBuiltInOPs;
    import tla2sany.semantic.*;
    import tlc2.tool.BuiltInOPs;
    import util.UniqueString;
    
    import java.util.Hashtable;
    
    public class InstanceTransformation extends BuiltInOPs implements ASTConstants {
    
    	final OpDefNode[] defs;
    	final Hashtable<String, OpDefNode> defsHash;
    	private final int substitutionId = 11;
    
    
    	public InstanceTransformation(ModuleNode moduleNode) {
    		defs = moduleNode.getOpDefs();
    		defsHash = new Hashtable<>();
    		for (OpDefNode def : defs) {
    			defsHash.put(def.getName().toString(), def);
    		}
    	}
    
    	public void start() {
    		for (OpDefNode def : defs) {
    			if (def.getSource() != def
    				&& !BBuiltInOPs.contains(def.getSource().getName())) {
    				// instance
    				String defName = def.getName().toString();
    
    				if (def.getBody() instanceof SubstInNode) {
    					String prefix = defName.substring(0,
    						defName.lastIndexOf('!') + 1);
    					def.setParams(generateNewParams(def.getParams()));
    					ExprNode body;
    					try {
    						body = generateNewExprNode(def.getBody(), prefix);
    					} catch (AbortException e) {
    						throw new RuntimeException();
    					}
    					def.setBody(body);
    				}
    			}
    		}
    	}
    
    	private ExprOrOpArgNode generateNewExprOrOpArgNode(ExprOrOpArgNode n,
    	                                                   String prefix) throws AbortException {
    		if (n instanceof ExprNode) {
    			return generateNewExprNode((ExprNode) n, prefix);
    		} else {
    			throw new RuntimeException("OpArgNode not implemented jet");
    		}
    	}
    
    	private ExprNode generateNewExprNode(ExprNode n, String prefix)
    		throws AbortException {
    		switch (n.getKind()) {
    			case OpApplKind: {
    				return generateNewOpApplNode((OpApplNode) n, prefix);
    			}
    
    			case NumeralKind: {
    				NumeralNode num = (NumeralNode) n;
    				return new NumeralNode(num.toString(), n.getTreeNode());
    			}
    
    			case DecimalKind: {
    				String[] image = n.toString().split("\\.");