Package org.eclipse.imp.pdb.facts

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


    IConstructor sym = ctype.getSymbol();
        if(SymbolAdapter.isAnyList(sym)){
          sym = SymbolAdapter.getSymbol(sym);
         
          int delta = 1;          // distance between "real" list elements, e.g. non-layout and non-separator
          IList listElems = (IList) tree.get(1);
      if(SymbolAdapter.isIterPlus(sym) || SymbolAdapter.isIterStar(sym)){
        if(debug)System.err.println("pushConcreteSyntaxChildren: isIterPlus or isIterStar");
        delta = 1; // new iters never have layout separators
      } else if (SymbolAdapter.isIterPlusSeps(sym) || SymbolAdapter.isIterStarSeps(sym)) {
        if(debug)System.err.println("pushConcreteSyntaxChildren: isIterPlusSeps or isIterStarSeps");
        delta = SymbolAdapter.getSeparators(sym).length() + 1;
      }
      if(debug)
        for(int i = 0; i < listElems.length(); i++){
          System.err.println("#" + i + ": " + listElems.get(i));
        }
         
      for(int i = listElems.length() - 1; i >= 0 ; i -= delta){
        if(debug)System.err.println("adding: " + listElems.get(i));
        pushConcreteSyntaxNode((IConstructor)listElems.get(i));
      }
    } else {
      if(debug)System.err.println("pushConcreteSyntaxNode: appl");
      /*
       * appl(prod(...), [child0, layout0, child1, ...])
       */
      spine.push(tree);
      IList applArgs = (IList) tree.get(1);
      int delta = (SymbolAdapter.isLiteral(sym)) ? 1 : 2;   // distance between elements
     
      for(int i = applArgs.length() - 1; i >= 0 ; i -= delta){
        //spine.push(applArgs.get(i));
        pushConcreteSyntaxNode((IConstructor) applArgs.get(i));
      }
    }
  }
View Full Code Here


  public static IList getASTSymbols(IConstructor tree) {
    if (isLexical(tree)) {
      throw new ImplementationError("This is not a context-free production: " + tree);
    }

    IList children = getSymbols(tree);
    IListWriter writer = ValueFactoryFactory.getValueFactory().listWriter(Factory.Args.getElementType());

    for (int i = 0; i < children.length(); i++) {
      IConstructor kid = (IConstructor) children.get(i);
      if (!SymbolAdapter.isLiteral(kid) && !SymbolAdapter.isCILiteral(kid)) {
        writer.append(kid);
      }
      // skip layout
      i++;
View Full Code Here

    if (name.equals("empty")) {
      return vf.constructor(Factory.Symbol_Empty)
    }
   
    if (name.equals("seq")) {
      IList list = vf.list(Factory.Symbol);
      Expression.List arg = (List) x.getArguments().get(0);
      for (Expression y: arg.getElements()) {
        list = list.append(y.accept(this));
      }
      return vf.constructor(Factory.Symbol_Seq, list);
     
    }
   
    if (name.equals("opt")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_Opt, arg);
    }
   
    if (name.equals("alt")) {
      ISet set = vf.set(Factory.Symbol);
      Expression.Set arg = (Set) x.getArguments().get(0);
      for(Expression y: arg.getElements()){
        set = set.insert(y.accept(this));
      }
      return vf.constructor(Factory.Symbol_Alt, set);
    }
   
    if (name.equals("tuple")) {
      java.util.List<Expression> args = x.getArguments();
      IConstructor head = args.get(0).accept(this);
      IList rest = vf.list(Factory.Symbol);
      for (Expression arg: ((Expression.List)args.get(1)).getElements()) {
        rest = rest.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_Tuple, head, rest);
    }
   
    if (name.equals("sort")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      String str = arg.getString();
      str = str.substring(1, str.length() - 1);
      return vf.constructor(Factory.Symbol_Sort, vf.string(str));
    }
   
    if (name.equals("layouts")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      String str = arg.getString();
      str = str.substring(1, str.length() - 1);
      return vf.constructor(Factory.Symbol_LayoutX, vf.string(str));
    }
   

    if (name.equals("iter")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_IterPlus, arg);
    }
   
    if (name.equals("iter-star")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_IterStar, arg);
    }
   
    if (name.equals("iter-star-seps")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      Expression.List args = (Expression.List) x.getArguments().get(1);
      IList seps = vf.list(Factory.Args);
      for (Expression elem: args.getElements()) {
        seps = seps.append(elem.accept(this));
      }
      return vf.constructor(Factory.Symbol_IterStarSepX, arg, seps);
    }
   
    if (name.equals("iter-seps")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      Expression.List args = (Expression.List) x.getArguments().get(1);
      IList seps = vf.list(Factory.Args);
      for (Expression elem: args.getElements()) {
        seps = seps.append(elem.accept(this));
      }
      return vf.constructor(Factory.Symbol_IterSepX, arg, seps);
    }

    if (name.equals("parameterized-sort")) {
      java.util.List<Expression> args = x.getArguments();
      StringConstant.Lexical sort = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      IList rest = vf.list(Factory.Symbol);
      for (Expression arg: ((Expression.List)args.get(1)).getElements()) {
        rest = rest.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_ParameterizedSort, vf.string(sort.getString()), rest);
     
    }
   
    if (name.equals("lit")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      // TODO: escaping etc.
      return vf.constructor(Factory.Symbol_Lit, vf.string(arg.getString()));
    }
   
    if (name.equals("char-class")) {
      java.util.List<Expression> args = x.getArguments();
      IList ranges = vf.list(Factory.CharRange);
      for (Expression arg: ((Expression.List)args.get(0)).getElements()) {
        ranges = ranges.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_CharClass, ranges);
    }
   
    if (name.equals("single")) {
View Full Code Here

 
  PropertyManager parent;
  IRunTimePropertyChanges runTimeChanges;
 
  public static PropertyManager extendProperties(IFigureConstructionEnv fpa, IConstructor c, PropertyManager pm, IList childProps){
    IList props = (IList) c.get(c.arity()-1);
       return new PropertyManager(fpa, pm, props);                        
  }
View Full Code Here

    IList props = (IList) c.get(c.arity()-1);
       return new PropertyManager(fpa, pm, props);                        
  }
 
  public static IList getChildProperties(IList props){
    IList result = null;
    for (IValue v : props) {
      if(v instanceof IConstructor && ((IConstructor)v).getName().equals("_child")){
        IList childList = (IList)((IConstructor)v).get(0);
        if(result == null){
          result = childList;
        } else {
          result.concat(childList);
        }
View Full Code Here

      put("_xaxis",    Primitives.XAXIS);
    }};
 
   
    public static Figure[] makeList(IFigureConstructionEnv env, IValue list, PropertyManager properties, IList childProps){
      IList elems = (IList)list;
      Figure[] result = new Figure[elems.length()];
      for (int i = 0; i < elems.length(); i++) {
        IConstructor c = (IConstructor)elems.get(i);
      result[i] = FigureFactory.make(env, c, properties, childProps);
    }
      return result;
    }
View Full Code Here

    }
      return result;
    }
   
    public static Figure[][] make2DList(IFigureConstructionEnv env, IValue list, PropertyManager properties, IList childProps){
      IList elems = (IList)list;
      Figure[][] result = new Figure[elems.length()][];
      for (int i = 0; i < elems.length(); i++) {
        IList c = (IList)elems.get(i);
      result[i] = makeList(env, c, properties, childProps);
    }
      return result;
    }
View Full Code Here

 
  @SuppressWarnings("incomplete-switch")
  public static Figure make(IFigureConstructionEnv env, IConstructor c, PropertyManager properties, IList childProps){
    String ename = c.getName();
    properties = PropertyManager.extendProperties(env, c, properties, childProps);
    IList childPropsNext = PropertyManager.getChildProperties((IList) c.get(c.arity()-1));
    if(childProps != null){
      IList childchildProps = PropertyManager.getChildProperties(childProps);
      if(childchildProps != null){
        if(childPropsNext != null){
          childPropsNext = childchildProps.concat(childPropsNext);
        } else {
          childPropsNext = childchildProps;
        }
      }
    }
View Full Code Here

         */
        rvm.executeProgram(uid_module_init, arguments);

        IListWriter w = vf.listWriter();
        for(String uid_testsuite: testsuites){
          IList test_results = (IList)rvm.executeProgram(uid_testsuite, arguments);
          w.insertAll(test_results);
        }
        result = w.done();
      } else {
        /*
 
View Full Code Here

   
    Integer nlocals = ((IInteger) declaration.get("nlocals")).intValue();
    IMap localNames = ((IMap) declaration.get("localNames"));
    Integer nformals = ((IInteger) declaration.get("nformals")).intValue();
    Integer maxstack = ((IInteger) declaration.get("maxStack")).intValue();
    IList code = (IList) declaration.get("instructions");
    ISourceLocation src = (ISourceLocation) declaration.get("src");
    CodeBlock codeblock = new CodeBlock(vf);
    // Loading instructions
    try {
    for (int i = 0; i < code.length(); i++) {
      IConstructor instruction = (IConstructor) code.get(i);
      String opcode = instruction.getName();

      switch (opcode) {
      case "LOADCON":
        codeblock.LOADCON(instruction.get("val"));
        break;

      case "LOADVAR":
        codeblock.LOADVAR(getStrField(instruction, "fuid"),
                  getIntField(instruction, "pos"));
        break;

      case "LOADLOC":
        codeblock.LOADLOC(getIntField(instruction, "pos"));
        break;
       
      case "LOADCONT":
        codeblock.LOADCONT(getStrField(instruction, "fuid"));
        break;

      case "STOREVAR":
        codeblock.STOREVAR(getStrField(instruction, "fuid"),
                   getIntField(instruction, "pos"));
        break;

      case "STORELOC":
        codeblock.STORELOC(getIntField(instruction, "pos"));
        break;

      case "LABEL":
        codeblock = codeblock.LABEL(getStrField(instruction, "label"));
        break;

      case "CALLPRIM":
        codeblock.CALLPRIM(RascalPrimitive.valueOf(getStrField(instruction, "name")),
                   getIntField(instruction, "arity"),
                   getLocField(instruction, "src"));
        break;

      case "CALLMUPRIM":
        codeblock.CALLMUPRIM(MuPrimitive.valueOf(getStrField(instruction, "name")),
                   getIntField(instruction, "arity"));
        break;

      case "CALL":
        codeblock.CALL(getStrField(instruction, "fuid"), getIntField(instruction, "arity"));
        break;

      case "CALLDYN":
        codeblock.CALLDYN( getIntField(instruction, "arity"));
        break;
       
      case "APPLY":
        codeblock.APPLY(getStrField(instruction, "fuid"),
                getIntField(instruction, "arity"));
        break;
       
      case "APPLYDYN":
        codeblock.APPLYDYN(getIntField(instruction, "arity"));
        break;

      case "LOADFUN":
        codeblock.LOADFUN(getStrField(instruction, "fuid"));
        break;

      case "RETURN0":
        codeblock.RETURN0();
        break;

      case "RETURN1":
        codeblock.RETURN1(getIntField(instruction, "arity"));
        break;

      case "JMP":
        codeblock.JMP(getStrField(instruction, "label"));
        break;

      case "JMPTRUE":
        codeblock.JMPTRUE(getStrField(instruction, "label"));
        break;

      case "JMPFALSE":
        codeblock.JMPFALSE(getStrField(instruction, "label"));
        break;

      case "HALT":
        codeblock.HALT();
        break;
       
      case "CREATE":
        codeblock.CREATE(getStrField(instruction, "fuid"),
                 getIntField(instruction, "arity"));
        break;

      case "CREATEDYN":
        codeblock.CREATEDYN(getIntField(instruction, "arity"));
        break;
       
      case "RESET":
        codeblock.RESET();
        break;

      case "NEXT0":
        codeblock.NEXT0();
        break;

      case "NEXT1":
        codeblock.NEXT1();
        break;

      case "YIELD0":
        codeblock.YIELD0();
        break;

      case "YIELD1":
        codeblock.YIELD1(getIntField(instruction, "arity"));
        break;
       
      case "SHIFT":
        codeblock.SHIFT();
        break;

      case "PRINTLN":
        codeblock.PRINTLN(getIntField(instruction, "arity"));
        break;

      case "POP":
        codeblock.POP();
        break;

      case "LOADLOCREF":
        codeblock.LOADLOCREF(getIntField(instruction, "pos"));
        break;

      case "LOADVARREF":
        codeblock.LOADVARREF(getStrField(instruction, "fuid"),
                   getIntField(instruction, "pos"));
        break;

      case "LOADLOCDEREF":
        codeblock.LOADLOCDEREF(getIntField(instruction, "pos"));
        break;

      case "LOADVARDEREF":
        codeblock.LOADVARDEREF(getStrField(instruction, "fuid"),
                     getIntField(instruction, "pos"));
        break;

      case "STORELOCDEREF":
        codeblock.STORELOCDEREF(getIntField(instruction, "pos"));
        break;

      case "STOREVARDEREF":
        codeblock.STOREVARDEREF(getStrField(instruction, "fuid"),
                    getIntField(instruction, "pos"));
        break;

      case "LOAD_NESTED_FUN":
        codeblock.LOADNESTEDFUN(getStrField(instruction, "fuid"),
                    getStrField(instruction, "scopeIn"));
        break;

      case "LOADCONSTR":
        codeblock.LOADCONSTR(getStrField(instruction, "fuid"));
        break;

      case "CALLCONSTR":
        codeblock.CALLCONSTR(getStrField(instruction, "fuid"),
                   getIntField(instruction, "arity")/*, getLocField(instruction, "src")*/);
        break;

      case "LOADTYPE":
        codeblock.LOADTYPE(rvm.symbolToType((IConstructor) instruction.get("type")));
        break;
      case "LOADBOOL":
        codeblock.LOADBOOL(getBooleanField(instruction, "bval"));
        break;

      case "LOADINT":
        codeblock.LOADINT(getIntField(instruction, "nval"));
        break;

      case "FAILRETURN":
        codeblock.FAILRETURN();
        break;

      case "LOADOFUN" :
        codeblock.LOADOFUN(getStrField(instruction, "fuid"));
        break;

      case "OCALL" :
        codeblock.OCALL(getStrField(instruction, "fuid"),
                getIntField(instruction, "arity"),
                getLocField(instruction, "src"));
        break;

      case "OCALLDYN" :
        codeblock.OCALLDYN(rvm.symbolToType((IConstructor) instruction.get("types")),
                   getIntField(instruction, "arity"),
                   getLocField(instruction, "src"));
        break;

      case "CALLJAVA":
        codeblock.CALLJAVA(getStrField(instruction, "name"),
                       getStrField(instruction, "class"),
                    rvm.symbolToType((IConstructor) instruction.get("parameterTypes")),
                    rvm.symbolToType((IConstructor) instruction.get("keywordTypes")),
                    getIntField(instruction, "reflect"));
        break;

      case "THROW":
        codeblock.THROW(getLocField(instruction, "src"));
        break;
     
      case "TYPESWITCH":
        codeblock.TYPESWITCH((IList)instruction.get("labels"));
        break;
       
      case "UNWRAPTHROWNLOC":
        codeblock.UNWRAPTHROWNLOC(getIntField(instruction, "pos"));
        break;
       
      case "FILTERRETURN":
        codeblock.FILTERRETURN();
        break;
       
      case "EXHAUST":
        codeblock.EXHAUST();
        break;
       
      case "GUARD":
        codeblock.GUARD();
        break;
       
      case "SUBSCRIPTARRAY":
        codeblock.SUBSCRIPTARRAY();
        break;
       
      case "SUBSCRIPTLIST":
        codeblock.SUBSCRIPTLIST();
        break;
       
      case "LESSINT":
        codeblock.LESSINT();
        break;
       
      case "GREATEREQUALINT":
        codeblock.GREATEREQUALINT();
        break;
       
      case "ADDINT":
        codeblock.ADDINT();
        break;
       
      case "SUBTRACTINT":
        codeblock.SUBTRACTINT();
        break;
       
      case "ANDBOOL":
        codeblock.ANDBOOL();
        break;
       
      case "TYPEOF":
        codeblock.TYPEOF();
        break;
       
      case "SUBTYPE":
        codeblock.SUBTYPE();
        break;
       
      case "CHECKARGTYPE":
        codeblock.CHECKARGTYPE();
        break;
       
      case "JMPINDEXED":
        codeblock.JMPINDEXED((IList)instruction.get("labels"));
        break;
       
      case "LOADLOCKWP":
        codeblock.LOADLOCKWP(getStrField(instruction, "name"));
        break;
       
      case "LOADVARKWP":
        codeblock.LOADVARKWP(getStrField(instruction, "fuid"),
                   getStrField(instruction, "name"));
        break;
       
      case "STORELOCKWP":
        codeblock.STORELOCKWP(getStrField(instruction, "name"));
        break;
       
      case "STOREVARKWP":
        codeblock.STOREVARKWP(getStrField(instruction, "fuid"),
                    getStrField(instruction, "name"));
        break;
       
      case "UNWRAPTHROWNVAR":
        codeblock.UNWRAPTHROWNVAR(getStrField(instruction, "fuid"),
                        getIntField(instruction, "pos"));
        break;
       
      default:
        throw new CompilerError("In function " + name + ", nknown instruction: " + opcode);
      }

    }
    } catch (Exception e){
      throw new CompilerError("In function " + name + " : " + e.getMessage());
    }
   
    Function function = new Function(name, ftype, scopeIn, nformals, nlocals, localNames, maxstack, codeblock, src);
    if(isCoroutine) {
      function.isCoroutine = true;
      IList refList = (IList) declaration.get("refs");
      int[] refs = new int[refList.length()];
      int i = 0;
      for(IValue ref : refList) {
        refs[i++] = ((IInteger) ref).intValue();
      }
      function.refs = refs;
    } else {
      IList exceptions = (IList) declaration.get("exceptions");
      function.attachExceptionTable(exceptions, rvm);
      boolean isVarArgs = ((IBool) declaration.get("isVarArgs")).getValue();
      function.isVarArgs = isVarArgs;
    }
    rvm.declare(function);
View Full Code Here

TOP

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

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.