Package org.eclipse.imp.pdb.facts

Examples of org.eclipse.imp.pdb.facts.IValue


        return false;
      }
     
      if(patternSize == 1){
        if(isSetVar(0) || availableSetElements.size() == 1) {
          IValue elem ;
          if(isSetVar(0)){
            // Var #i is a set variable: should match all elements
            varVal[0] = (ISet) availableSetElements;
            elem = availableSetElements;
          }
          else {
            // Var #i is not a set variable.
            if(availableSetElements.getType().isSet()){
              // Var #i should match single element in elements
              ISet set = (ISet) availableSetElements;
              assert set.size() == 1;
              varVal[0] = elem = set.iterator().next();
            } else {
              varVal[0] = elem = availableSetElements;
              //varVal[i] = ctx.getValueFactory().set(elem.getType()).insert(elem); // TODO: Should this be  a set?
            }
          }

          varPat[0].initMatch(ResultFactory.makeResult(elem.getType(), elem, ctx));
          hasNext = varPat[0].hasNext();
        }
      }
     
      currentVar = 0;
      if(!makeGen(currentVar, availableSetElements)){
        return false;
      }
    } else {
      currentVar = nVar - 1;
    }
    hasNext = true;

    if(debug)System.err.println("\nStart assigning Vars for " + this + ":= " + subject);

    if (patternSize == 1 && (isSetVar(0) || availableSetElements.size() == 1)) {
      if (varPat[0].hasNext() && varPat[0].next()) {
        return true;
      }
     
      return false;
    }
   
    main:
    do {
      if (ctx.isInterrupted()) {
        throw new InterruptException(ctx.getStackTrace(), ctx.getCurrentAST().getLocation());
      }
     
      if(debug)System.err.println("\n=== MAIN: Pattern = " + this ":= " + subject + "\ncurrentVar[" + currentVar + "]=" + varName[currentVar]);
      if(debug)printVars();
      IValue v = null;
      boolean b = false;
      if(isNested[currentVar]){
        if(varPat[currentVar].hasNext()){
          b = varPat[currentVar].next();
          if(b)
            v = varVal[currentVar];
        } else if(varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          if(b)
            varVal[currentVar] = v;
        }
      } else if(isSetVar[currentVar]){
          if(varGen[currentVar].hasNext()){
            v = (IValue) varGen[currentVar].next();
            Result<IValue> r = ResultFactory.makeResult(v.getType().lub(setSubjectType), v, ctx);
            varPat[currentVar].initMatch(r);
            b = varPat[currentVar].next();
            if(b){
              varVal[currentVar] = v;
              ctx.getCurrentEnvt().storeVariable(varName[currentVar], r);
              if(debug)System.err.println("Store in " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType() + " / " +
              ctx.getCurrentEnvt().getVariable(varName[currentVar]).getType());
            }
          }
      } else if(isBinding[currentVar]){
        if(varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
         
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          if(b){
            varVal[currentVar] = v;
            ctx.getCurrentEnvt().storeVariable(varName[currentVar], r);
            if(debug)System.err.println("Store in " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType() + " / " +
                ctx.getCurrentEnvt().getVariable(varName[currentVar]).getType());
          }
        }
      } else   if(varPat[currentVar] instanceof QualifiedNamePattern && ((QualifiedNamePattern)varPat[currentVar] ).isAnonymous()){
          if(varGen[currentVar].hasNext()){
            v = (IValue) varGen[currentVar].next();
            Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
            varPat[currentVar].initMatch(r);
            b = varPat[currentVar].next();
            if(b){
              varVal[currentVar] = v;
            }
          }
      } else if(!isBinding[currentVar] && (varPat[currentVar] instanceof QualifiedNamePattern || varPat[currentVar] instanceof TypedVariablePattern&& varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          System.err.println("Try match " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType());
          if(b){
            varVal[currentVar] = v;
            System.err.println("Matches " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType());
          }
       
      } else {
       
        System.err.println("CANNOT HANDLE THIS 2");
View Full Code Here


    return equalityBoolean(that);
  }
 
  @Override
  protected Result<IBool> equalToValue(ValueResult that) {
    IValue leftValue = that.getValue();
    IValue rightValue = getValue();
    // value equality should simulate the dynamic equality on the specific types
    return makeResult(rightValue.getType(), rightValue, ctx).equals(makeResult(leftValue.getType(), leftValue, ctx));
  }
View Full Code Here

    return ctx.up(value);
  }
 
  @Override
  public IValue root() {
    IValue current = this;
    while (current instanceof ICursor) {
      current = ((ICursor)current).up();
    }
    return CursorFactory.makeCursor(current, new TopContext());
  }
View Full Code Here

          ctx.getCurrentEnvt().getVariable(varName[patternCursor]).getType().isList()){
        if(forward){
          listVarStart[patternCursor] = subjectCursor;

          Result<IValue> varRes = ctx.getCurrentEnvt().getVariable(varName[patternCursor]);
          IValue varVal = varRes.getValue();

          if(varRes.getType().isList()){
            assert varVal != null && varVal.getType().isList();

            int varLength = ((IList)varVal).length();
            listVarLength[patternCursor] = varLength;

            if(subjectCursor + varLength > subjectSize){
              forward = false;
              patternCursor -= delta;
            } else {
              matchBoundListVar((IList) varVal);
            }
          }
        } else {
          subjectCursor = listVarStart[patternCursor];
          patternCursor -= delta;
        }

        /*
         * Any other element of the pattern
         */
      } else {
        if(forward && subjectCursor < subjectSize){
          if(debug)System.err.println("AbstractPatternList.match: init child " + patternCursor + " with " + listSubject.get(subjectCursor));
          IValue childValue = listSubject.get(subjectCursor);
          // TODO: check if we can use a static type here?!
          child.initMatch(ResultFactory.makeResult(childValue.getType(), childValue, ctx));
          if(child.next()){
            subjectCursor += delta;
            patternCursor += delta;
            if(debug)System.err.println("AbstractPatternList.match: child matches, subjectCursor=" + subjectCursor);
          } else {
View Full Code Here

  public static final String CONTINUE_PROMPT = ">>>>>>>";
  public static final String CANCELLED = "cancelled";
 
  public static String resultMessage(Result<IValue> result) {
    String content;
    IValue value = result.getValue();
   
    if (value != null) {
      Type type = result.getType();
     
      if (type.isAbstractData() && type.isSubtypeOf(Factory.Tree)) {
View Full Code Here

    try{
      OutputStream stream = rex.getResolverRegistry().getOutputStream(sloc.getURI(), false);
      out = new BufferedOutputStream(stream);
      Iterator<IValue> iter = blist.iterator();
      while (iter.hasNext()){
        IValue ival = iter.next();
        out.write((byte) (((IInteger) ival).intValue()));
      }
      out.flush();
      out.close();
    }catch(FileNotFoundException e){
View Full Code Here

  private TypeStore typeStore = new TypeStore();
 
  @Override
  public IConstructor makeConstructor(Type returnType, String name, IEvaluatorContext ctx, IValue ...args) {
    // TODO: in general, the following should be the call to an overloaded function
    IValue value = values.constructor(typeStore.lookupConstructor(returnType, name, TypeFactory.getInstance().tupleType(args)), args, new HashMap<String, IValue>());
    Type type = value.getType();
    if (type.isAbstractData()) {
      return (IConstructor)value;
    }
    throw RuntimeExceptionFactory.implodeError("Calling of constructor " + name + " did not return a constructor", null, null);
  }
View Full Code Here

  @Override
  public IValue implode(IValue reifiedType, IConstructor tree, IEvaluatorContext ctx) {
    typeStore = new TypeStore();
    Type type = tr.valueToType((IConstructor) reifiedType, typeStore);
    try {
      IValue result = implode(typeStore, type, tree, false, ctx);
      if (isUntypedNodeType(type) && !type.isTop() && (TreeAdapter.isList(tree) || TreeAdapter.isOpt(tree))) {
        result = values.node("", result);
      }
      return result;
    }
View Full Code Here

  }

  @Override
  public Result<IValue> call(Type[] argTypes, IValue[] argValues, Map<String, IValue> keyArgValues) {
    String name = getValue().getValue();
    IValue node = this.getValueFactory().node(name, argValues, keyArgValues);
    return makeResult(getTypeFactory().nodeType(), node, ctx);
  }
View Full Code Here

        Iterator<IValue> iter = TreeAdapter.getArgs(arg).iterator();
        for (Integer pos = 0; iter.hasNext(); pos++) {
         
          boolean isDeferred = pushdownPositions.contains(pos) || addBreakable && isList;
         
          IValue oldKid = iter.next();
          IValue newKid = oldKid.accept(new PushDownTreeVisitor<E>(isDeferred));
         
          writer.append(newKid);
        }

        IList children = writer.done();
View Full Code Here

TOP

Related Classes of org.eclipse.imp.pdb.facts.IValue

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.