Package org.eclipse.imp.pdb.facts

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


      Entry<IValue, IValue> entry = entries.next();
      rvm.declareConstructor(((IString) entry.getKey()).getValue(), (IConstructor) entry.getValue());
    }
   
    for(IValue imp : imported_functions){
      IConstructor declaration = (IConstructor) imp;
      if (declaration.getName().contentEquals("FUNCTION")) {
        String name = ((IString) declaration.get("qname")).getValue();
       
        if(name.endsWith("_init(list(value());)#0")){
          initializers.add(name);
        }
        if(name.endsWith("_testsuite(list(value());)#0")){
          testsuites.add(name);
        }
        loadInstructions(name, declaration, rvm, false);
      }
      if (declaration.getName().contentEquals("COROUTINE")) {
        String name = ((IString) declaration.get("qname")).getValue();
        loadInstructions(name, declaration, rvm, true);
      }
    }
   
    // Overloading resolution of imported functions
    rvm.addResolver(imported_overloading_resolvers);
    rvm.fillOverloadedStore(imported_overloaded_functions);

    IMap types = (IMap) program.get("types");
    entries = types.entryIterator();
    while(entries.hasNext()) {
      Entry<IValue, IValue> entry = entries.next();
      rvm.declareConstructor(((IString) entry.getKey()).getValue(), (IConstructor) entry.getValue());
    }
   
    IMap declarations = (IMap) program.get("declarations");
    for (IValue dname : declarations) {
      IConstructor declaration = (IConstructor) declarations.get(dname);

      if (declaration.getName().contentEquals("FUNCTION")) {
        String name = ((IString) declaration.get("qname")).getValue();
        if(name.endsWith(main) || name.endsWith(mu_main)) {
          uid_main = name;      // Get main's uid in current module
        }
        if(name.endsWith(module_init) || name.endsWith(mu_module_init)) {
          uid_module_init = name;    // Get module_init's uid in current module
        }
        if(name.endsWith("_testsuite(list(value());)#0")){
          testsuites.add(name);
        }
        loadInstructions(name, declaration, rvm, false);
      }
     
      if(declaration.getName().contentEquals("COROUTINE")) {
        String name = ((IString) declaration.get("qname")).getValue();
        loadInstructions(name, declaration, rvm, true);
      }
    }
   
    // Overloading resolution
View Full Code Here


    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;
View Full Code Here

  public void drawElement(GraphicsContext gc, List<IHasSWTElement> visibleSWTElements){
   
      double lw = prop.getReal(LINE_WIDTH);
      gc.rect(globalLocation.getX(), globalLocation.getY(), size.getX(), size.getY());
      for(IValue v : lineInfo){
        IConstructor lineDecor = (IConstructor) v;
        int lino = ((IInteger) lineDecor.get(0)).intValue();
        String name = lineDecor.getName();
       
        int color;
       
        if(name.equals("info"))
          color = FigureColorUtils.getErrorColor(0);
        else if(name.equals("warning"))
          color = FigureColorUtils.getErrorColor(1);
        else if(name.equals("error"))
        color = FigureColorUtils.getErrorColor(2);
        else {
          int highlightKind = 0;
         
          if(lineDecor.arity() > 2){
            highlightKind = ((IInteger)lineDecor.get(2)).intValue();
            if(highlightKind < 0)
              highlightKind = 0;
            if(highlightKind >= FigureColorUtils.highlightColors.length)
              highlightKind = FigureColorUtils.highlightColors.length - 1;
          }
View Full Code Here

  public IValue visitAbstractData(Type type) {
    LinkedList<Type> alternatives = new LinkedList<Type>();
    alternatives.addAll(definitions.lookupAlternatives(type));       
    Collections.shuffle(alternatives);
    for (Type pick : alternatives) {
      IConstructor result = (IConstructor) this.generate(pick);
      if (result != null) {
        RandomValueTypeVisitor visitor = descend();
        Map<String, Type> annotations = definitions.getAnnotations(type);
        for (Map.Entry<String, Type> entry : annotations.entrySet()) {
          IValue value = visitor.generate(entry.getValue());
          if (value == null) {
            return null;
          }
          result = result.asAnnotatable().setAnnotation(entry.getKey(), value);
        }

        return result;

      }
View Full Code Here

    if(innerFig != null){
      innerFig.destroy(env);
    }
    TypeFactory tf = TypeFactory.getInstance();
    IList originalsL = VF.list(originals.toArray(tmpArray));
    IConstructor figureCons = (IConstructor) env.getCallBackEnv().executeRascalCallBackSingleArgument(whole,tf.listType(tf.valueType()),originalsL).getValue();
    innerFig = FigureFactory.make(env, figureCons, prop, childProps);
    innerFig.registerIds(env, resolver);
    innerFig.registerConverts(resolver);
    setInnerFig( innerFig);
    prop.stealExternalPropertiesFrom(innerFig.prop);
View Full Code Here

      Type[] argTypes, IValue[] argVals) {
    Result<IValue> e = executeRascalCallBack(callback, argTypes, argVals);
    if(e == null){
      return null;
    } else {
      IConstructor c = (IConstructor)e.getValue();
      IEvaluator<Result<IValue>> evaluator = ctx.getEvaluator();
      return (IConstructor)evaluator.call(getRascalContext(),"vis::Figure", "normalize", c);
    }

  }
View Full Code Here

   * @param stacktrace   Stacktrace of calling context
   * @return
   */
  public IValue parse(IString moduleName, IValue start, IMap robust, URI location, char[] input, List<Frame> stacktrace) {
    Type reified = start.getType();
    IConstructor startSort = checkPreconditions(start, reified);
   
    IMap syntax = (IMap) ((IConstructor) start).get(1);
    try {
      IConstructor pt = parseObject(moduleName, startSort, robust, location, input, syntax);

      if (TreeAdapter.isAppl(pt)) {
        if (SymbolAdapter.isStart(TreeAdapter.getType(pt))) {
          pt = (IConstructor) TreeAdapter.getArgs(pt).get(1);
        }
View Full Code Here

   
    if (!(nt instanceof NonTerminalType)) {
      throw RascalRuntimeException.illegalArgument(start, null, "A non-terminal type is required instead of  " + nt);
    }
   
    IConstructor symbol = ((NonTerminalType) nt).getSymbol();
   
    return symbol;
  }
View Full Code Here

   * that has been parsed and its original flat literal string is replaced by a fully structured parse tree.
   *
   */

  IConstructor parseFragment(IString name, IValue start, IConstructor tree, URI uri, IMap grammar) {
      IConstructor symTree = TreeAdapter.getArg(tree, "symbol");
      IConstructor lit = TreeAdapter.getArg(tree, "parts");
      Map<String, IConstructor> antiquotes = new HashMap<String,IConstructor>();
     
      IGTD<IConstructor, IConstructor, ISourceLocation> parser = getBootstrap() ? new RascalParser() : getParser(name.getValue(), start, TreeAdapter.getLocation(tree).getURI(), false, grammar);
     
      try {
        String parserMethodName = getParserGenerator().getParserMethodName(symTree);
        DefaultNodeFlattener<IConstructor, IConstructor, ISourceLocation> converter = new DefaultNodeFlattener<IConstructor, IConstructor, ISourceLocation>();
        UPTRNodeFactory nodeFactory = new UPTRNodeFactory();
     
        char[] input = replaceAntiQuotesByHoles(lit, antiquotes);
       
        IConstructor fragment = (IConstructor) parser.parse(parserMethodName, uri, input, converter, nodeFactory);
        fragment = replaceHolesByAntiQuotes(fragment, antiquotes);
        return fragment;
       
//        IConstructor prod = TreeAdapter.getProduction(tree);
//        IConstructor sym = ProductionAdapter.getDefined(prod);
View Full Code Here

    private char[] replaceAntiQuotesByHoles(IConstructor lit, Map<String, IConstructor> antiquotes) {
      IList parts = TreeAdapter.getArgs(lit);
      StringBuilder b = new StringBuilder();
     
      for (IValue elem : parts) {
        IConstructor part = (IConstructor) elem;
        String cons = TreeAdapter.getConstructorName(part);
       
        if (cons.equals("text")) {
          b.append(TreeAdapter.yield(part));
        }
View Full Code Here

TOP

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

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.