Package org.eclipse.imp.pdb.facts

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


    if (constant) {
      return makeResult(type, node, eval);
    }
   
    // TODO add function calling
    IListWriter w = eval.getValueFactory().listWriter(Factory.Tree);
    for (org.rascalmpl.ast.Expression arg : args) {
      w.append(arg.interpret(eval).getValue());
    }
   
    ISourceLocation location = getLocation();
   
    if (location != null) {
      java.util.Map<String,IValue> annos = new HashMap<String,IValue>();
      annos.put("loc", location);
      return makeResult(type, eval.getValueFactory().constructor(Factory.Tree_Appl, annos, production, flatten(w.done())), eval);
    }
    else {
      return makeResult(type, eval.getValueFactory().constructor(Factory.Tree_Appl, production, flatten(w.done())), eval);
    }
  }
View Full Code Here


      }
    }
  }

  private IList flatten(IList args) {
    IListWriter result = VF.listWriter(Factory.Args.getElementType());
    boolean previousWasEmpty = false;
   
    for (int i = 0; i < args.length(); i+=(delta+1)) {
      IConstructor tree = (IConstructor) args.get(i);
     
      if (TreeAdapter.isList(tree) && ProductionAdapter.shouldFlatten(production, TreeAdapter.getProduction(tree))) {
        IList nestedArgs = TreeAdapter.getArgs(tree);
        if (nestedArgs.length() > 0) {
          appendPreviousSeparators(args, result, delta, i, previousWasEmpty);
          result.appendAll(nestedArgs);
        }
        else {
          previousWasEmpty = true;
        }
      }
      else {
        appendPreviousSeparators(args, result, delta, i, previousWasEmpty);
        result.append(tree);
        previousWasEmpty = false;
      }
    }
   
    return result.done();
  }
View Full Code Here

    if (base.isList() || base.isTop() || base.isRational()) {
      if(expected.isRational()){
        int dn = ((IInteger) terms[0]).intValue(), nm = ((IInteger) terms[1]).intValue();
        return vf.rational(dn, nm);
      }
      IListWriter w = vf.listWriter(base.isTop() ? tf.valueType() : expected.getElementType());
      for (int i = terms.length - 1; i >= 0; i--) {
        w.insert(terms[i]);
      }
      return w.done();
    } else if (base.isRelation()) {
      ISetWriter w = vf.setWriter(expected.getElementType());
      w.insert(terms);
      return w.done();

    } else if (base.isSet()) {
      ISetWriter w = vf.setWriter(expected.getElementType());
      w.insert(terms);
      return w.done();
    } else if(base.isMap()){
      //Type tt = expected.getElementType();
      IMapWriter w = vf.mapWriter(expected); //tt.getFieldType(0), tt.getFieldType(1));
      for (int i = terms.length - 1; i >= 0; i--) {
        w.put(((ITuple) terms[i]).get(0), ((ITuple)terms[i]).get(1));
      }
      return w.done();
    }
    throw new FactParseError("Unexpected type " + expected,
        reader.getPosition());
  }
View Full Code Here

        } else {
          resFieldType[i - nSubs] = relFieldType;
        }
      }
      Type resultType;
      IListWriter wset = null;
      IListWriter wrel = null;
     
      if (yieldList){
        resultType = getTypeFactory().listType(resFieldType[0]);
        wset = this.getValueFactory().listWriter();
      } else {
        resultType = getTypeFactory().lrelType(resFieldType);
        wrel = this.getValueFactory().listRelationWriter();
      }

     
      for (IValue v : getValue()) {
        ITuple tup = (ITuple)v;
        boolean allEqual = true;
        for(int k = 0; k < nSubs; k++){
          if(subscriptIsSet[k] && ((subscripts[k] == null) ||
                               ((ISet) subscripts[k].getValue()).contains(tup.get(k)))){
            /* ok */
          } else if (subscripts[k] == null || tup.get(k).isEqual(subscripts[k].getValue())){
            /* ok */
          } else {
            allEqual = false;
          }
        }
       
        if (allEqual) {
          IValue args[] = new IValue[relArity - nSubs];
          for (int i = nSubs; i < relArity; i++) {
            args[i - nSubs] = tup.get(i);
          }
          if(yieldList){
            wset.append(args[0]);
          } else {
            wrel.append(getValueFactory().tuple(args));
          }
        }
      }
      return makeResult(resultType, yieldList ? wset.done() : wrel.done(), ctx);
    }
View Full Code Here

      if (!getType().hasField(name, store)) {
        throw new UndeclaredField(name, getType(), ctx.getCurrentAST());
      }
     
      try {
        IListWriter w = getValueFactory().listWriter();
        for (IValue e : getValue()) {
          w.append(((ITuple) e).get(tupleType.getFieldIndex(name)));
        }
        return makeResult(getTypeFactory().listType(tupleType.getFieldType(name)), w.done(), ctx);
      }
      // TODO: why catch this exception here?
      catch (UndeclaredFieldException e) {
        throw new UndeclaredField(name, getType(), ctx.getCurrentAST());
      }
View Full Code Here

      }
      for (int i = arity1;  i < arity1 + arity2; i++) {
        fieldTypes[i] = tupleType2.getFieldType(i - arity1);
      }
      Type tupleType = getTypeFactory().tupleType(fieldTypes);
      IListWriter writer = getValueFactory().listWriter();
      IValue fieldValues[] = new IValue[arity1 + arity2];
      for (IValue tuple1: that.getValue()) {
        for (IValue tuple2: this.getValue()) {
          for (int i = 0; i < arity1; i++) {
            fieldValues[i] = ((ITuple)tuple1).get(i);
          }
          for (int i = arity1; i < arity1 + arity2; i++) {
            fieldValues[i] = ((ITuple)tuple2).get(i - arity1);
          }
          writer.append(getValueFactory().tuple(fieldValues));
        }
      }
      Type resultType = getTypeFactory().lrelTypeFromTuple(tupleType);
      return makeResult(resultType, writer.done(), ctx);
    }
View Full Code Here

    return elems;
  }

  private static IList convertToRealList(double[] l, IValueFactory vf) {
    TypeFactory tf = TypeFactory.getInstance();
    IListWriter writer = vf.listWriter(tf.realType());
    for (int i = 0; i < l.length; i++) {
      writer.append(vf.real(l[i]));
    }
    return writer.done();
  }
View Full Code Here

      setCurrentEnvt(oldEnv);
    }
  }

  private IList parsePlainCommandLineArgs(String[] commandline) {
    IListWriter w = vf.listWriter();
    for (String arg : commandline) {
      w.append(vf.string(arg));
    }
    return w.done();
  }
View Full Code Here

        }
        else if (i == commandline.length - 1 || commandline[i+1].startsWith("-")) {
          throw new CommandlineError("expected option for " + label, func);
        }
        else if (expected.isSubtypeOf(tf.listType(tf.valueType()))) {
          IListWriter writer = vf.listWriter();
         
          while (i + 1 < commandline.length && !commandline[i+1].startsWith("-")) {
            writer.append(parseCommandlineOption(func, expected.getElementType(), commandline[++i]));
          }
         
          params.put(label, writer.done());
        }
        else if (expected.isSubtypeOf(tf.setType(tf.valueType()))) {
          ISetWriter writer = vf.setWriter();
         
          while (i + 1 < commandline.length && !commandline[i+1].startsWith("-")) {
            writer.insert(parseCommandlineOption(func, expected.getElementType(), commandline[++i]));
          }
         
          params.put(label, writer.done());
        }
        else {
          params.put(label, parseCommandlineOption(func, expected, commandline[++i]));
        }
      }
View Full Code Here

    return makeResult(concreteType, newAppl, ctx);
  }

  private IValue flatten(IConstructor prod, IList args) {
    IListWriter result = vf.listWriter(Factory.Args.getElementType());
    int delta = getDelta(prod);
   
    for (int i = 0; i < args.length(); i+=(delta + 1)) {
      IConstructor tree = (IConstructor) args.get(i);
      if (TreeAdapter.isList(tree) && TreeAdapter.isAppl(tree)) {
        if (ProductionAdapter.shouldFlatten(prod, TreeAdapter.getProduction(tree))) {
          IList nestedArgs = TreeAdapter.getArgs(tree);
          if (nestedArgs.length() > 0) {
            appendSeparators(args, result, delta, i);
            result.appendAll(nestedArgs);
          }
          else {
            // skip following separators
            i += delta;
          }
        }
        else {
          appendSeparators(args, result, delta, i);
          result.append(tree);
        }
      }
      else {
        appendSeparators(args, result, delta, i);
        result.append(tree);
      }
    }
   
    return result.done();
  }
View Full Code Here

TOP

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

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.