Package abstrasy.interpreter

Examples of abstrasy.interpreter.BaseContextSnapshot


        Heap local=global.current();

        /**
         * A toutes fins utiles, on sauve l'état de la pile...
         */
        BaseContextSnapshot contextSnapshot = new BaseContextSnapshot(interpreter);
       
       
        /**
         * Début de la boucle...
         */

        boolean retry = true;
        Node res = null;
   
        boolean oldInLoop=interpreter.isInLoop();

        while (retry) {
           
            if (anode!=null)
                controlh.put(PCoder.ARGV, anode);
            else
                controlh.put(PCoder.ARGV, Node.createCList());
           
            try {
                _clear_closure_(local);
                interpreter.setInLoop(true);
                res = xnode.exec(true);
                retry = false;
            }
            catch (RestartException retrex) {
                contextSnapshot.restore();
                Node experform = retrex.getPerform();
               
                if (experform == null)
                    retry = true;
               
                else if (xnode.equalsIdentity(experform))
                    retry = true;
           
                else {
                    retry = false;
                    throw retrex;
                }
               
                anode = retrex.getArgs();
               
               
            }
            catch (SilentException silex) {
                contextSnapshot.restore();
                retry = false;
                throw silex;
            }
            catch (Exception excep) {
                contextSnapshot.restore();
                retry = false;
                throw excep; // fait suivre l'exception...
            }
        }

View Full Code Here


        if (old_timeOutCheck || old_timeOutTimerStatus) {
            myself.setTimeOutCheck(false);
            myself.getTimeOutTimer().stop();
        }
        Interpreter interpreter = Interpreter.mySelf();
        BaseContextSnapshot contextSnapshot=new BaseContextSnapshot(interpreter);
        long delayed = (long) tnode.getNumber();
        if (delayed < 0) {
            throw new InterpreterException(StdErrors.Out_of_range);
        }
        myself.setDeadlockTime(System.currentTimeMillis() + (long) tnode.getNumber());
        myself.setTimeOutCheck(true);
        myself.getTimeOutTimer().start();
        try {
            xnode = evalSection(xnode);
        }

        catch (SilentException silex) {

            contextSnapshot.restore();

            restoreTimeOut(myself, old_deadlockTime, old_timeOutCheck, old_timeOutTimerStatus);
            throw silex;
        }
        catch (Exception excep) {

            contextSnapshot.restore();

            restoreTimeOut(myself, old_deadlockTime, old_timeOutCheck, old_timeOutTimerStatus);

            throw excep; // fait suivre l'exception...
        }
View Full Code Here

    
           
        /**
         * protection du système...
         */
        BaseContextSnapshot contextSnapShot = new BaseContextSnapshot(interpreter);


        /**
         * boucle principale...
         */

        interpreter.setCanLoop(true);
        interpreter.setInLoop(true);

        Exception allExcep = null;
        try {

            /**
             * Lecture des règles...
             *
             */
            for (int i = 0; i < liste_r.size(); i++) {
                Node elem_r = liste_r.getSubNode(i, Node.TYPE_QEXPR);
                addRules(rules, elem_r);
            }

            /**
             * On va commencé la boucle d'inférence...
             */
            // placer la fermeture s'il y en a une...
            if(fermeture!=null){
                Heap.push(fermeture);
                with_cache.exec(true);
            }
            // préparer le heap local pour le traitement...
            Heap.push();
            Heap local = Heap.current();

            // préparer la boucle d'inférence...
            int verif;
            do {
                verif = 0;
                int i = 0;
                while (i < rules.size() && interpreter.hasNoBreakCode()) {
                    /*
                     * Conserver rules.size() la taille pouvant être modifiée en cours d'évaluation.
                     * De plus, en cas de code break quelconque, on s'arrête (skip-loop) et (break-loop).
                     * Par contre dans le cas de (complete-loop) on termine l'analyse de l'ensemble des règles
                     * avant d'arrêter.
                     */
                    Rule rule = (Rule) rules.get(i);
                    if (Node.isTrueEquivalent(evalSection(local, rule.condition))) {
                        /*
                         * condition vérifiée... On traite la partie then...
                         */
                        verif++;
                        res = evalSection(local, rule.getConsequenceThen().getSymbolicValue()); // évaluation pareseuse des symboles...
                        if (res != null) {
                            break;
                        }
                        if (rule.getRuleType() == PCoder.PC_ONCE) {
                            // once : supprimer la règle (l'index actuel pointe donc sur la règle suivante)
                            rules.remove(i);
                        }
                        else {
                            // each-time : on ne supprime pas la règle et on passe à la suivante
                            i++;
                        }
                    }
                    else if (rule.getConsequenceElse() != null) {
                        // étant donné le parsing précédent, pas besoin de valider: il ne peut s'agir que de each-time...
                        /*
                         * si pas vérifié et qu'il y a une clause else... On traite la partie else...
                         */
                        verif++;
                        res = evalSection(local, rule.getConsequenceElse().getSymbolicValue()); // évaluation paresseuse des symboles...
                        if (res != null) {
                            break;
                        }
                        // on ne peut avoir ici que each-time -> on ne supprime pas la règle et on passe à la suivante
                        i++;
                    }
                    else {
                        /*
                         * si pas vérifié et pas de else... On passe alors au suivant...
                         */
                        i++;
                    }
                }
            }
            while (verif > 0 && res == null && interpreter.isCanIterate());
            /*
             * Si (skip-loop), on repart...
             * Si (complete-loop), on s'arrête...
             * Si (break-loop), on s'arrête aussi...
             */

            // Supprime le heap local...
            Heap.pull();
            // Supprime la fermeture s'il y en a une...
            if(fermeture!=null){
                Heap.pull();
            }

        }
      
        catch (Exception ex) {
            allExcep = ex;
        }
       
       
        /*
         * restauration du système...
         */
        contextSnapShot.restore(); // remplace restore_ignoreBreakCode() qui ne restaure pas les état BREAK (ce qui était une erreur de logique).
       
        /*
         * propagation de l'exception éventuelle...
         */
        if (allExcep != null) {
View Full Code Here

     */
    public static Node create_object(Node symClassNode,Node postInit, Node startAt) throws Exception {

    Node objectNode;
    Interpreter interpreter = Interpreter.mySelf();
    BaseContextSnapshot contextSnapshot = new BaseContextSnapshot(interpreter);

    try {
      /*
             * Instanciation de la classe et exécution du constructeur...
             *
             * L'expression postInit est lancée automatiquement avec l'instanciation.
             */
            Node old_root = ROOT.swap(symClassNode);
            objectNode = Node.createDelegableFrom(symClassNode,postInit);
            ROOT.restore(old_root);

    }
    catch (Exception ex) {
      contextSnapshot.restore();
      if (ex instanceof SilentException) {
        throw ex;
      }
      if (Interpreter.isDebugMode()) {
        ex.printStackTrace();
View Full Code Here

       
        /*
         * obtenir les paramètres avant le début de l'exécution de la section insure{...} ...
         */
        Interpreter interpreter = Interpreter.mySelf();
        BaseContextSnapshot contextSnapshot=new BaseContextSnapshot(interpreter);

        Exception allExcep = null;

        /*
         * exécuter la section hook et capturer une éventuelle exception...
         */
        try {
            Heap.push();
            res = xnode.exec(true);
            Heap.pull();
        }
        catch (Exception ex) {
            allExcep = ex;
        }

        /*
         * On doit rétablir un environnement exécutable suffisament stable même en cas de
         * suppression ou d'exception grave...
         *
         * La premère chose à faire consiste à bloquer temporairement l'action, si on est
         * dans une section temporisée...
         */
        long old_deadlockTime_after = interpreter.getDeadlockTime();
        boolean old_timeOutCheck_after = interpreter.isTimeOutCheck();
        boolean old_timeOutTimerStatus_after = interpreter.getTimeOutTimer().isRunning();
        if (old_timeOutCheck_after || old_timeOutTimerStatus_after) {
            interpreter.setTimeOutCheck(false);
            interpreter.getTimeOutTimer().stop();
        }
       
        boolean canloop_after = interpreter.isCanLoop();
        boolean inloop_after = interpreter.isInLoop();
        long callerSignature_after = interpreter.getCallerSignature();
        boolean tailNode_after = interpreter.isTailNode();
        boolean terminalNode_after = interpreter.isTerminalNode();
        Node oldThisNode_after = interpreter.getThisFunction();
        Node oldWrapperNode_after = interpreter.getWrapperFunction();
        Node oldSelfNode_after = interpreter.getSelf();
        Node oldRootNode_after = interpreter.getRoot();
        Node oldIfaceNode_after = interpreter.getIface();
        boolean stop_status_after = interpreter.isThreadStopped();
 
        boolean breakingFromSemaphore_after = interpreter.isBreakingFromSEMAPHORE();
        boolean endingFromSemaphore_after = interpreter.isEndingFromSEMAPHORE();
       
        int old_equStackLock_A = interpreter.getEquStack_A().lock();
        int old_equStackLock_B = interpreter.getEquStack_B().lock();
       
        int old_compareStackLock_A = interpreter.getCompareStack_A().lock();
        int old_compareStackLock_B = interpreter.getCompareStack_B().lock();
       
        /*
         * Restaurer les paramètres qui ont précédé l'exécution de la section insure...
         *
         * En cas de problème grave on rétabli les fonctionnlité de base...
         */
        contextSnapshot.restore();
       

        /*
         * Si l'acteur est en état de suppression...
         *
         * Passe en mode Fail-over...
         */
        boolean old_failOver=interpreter.isFailOver();
        interpreter.setFailOver(true);
       
        /*
         * exécuter termination{...}...
         */
        Node tres=null;
        try{
            Heap.push();
            tres=enode.exec(true);
            Heap.pull();
        }
        catch(Exception e){
            Interpreter.Log("Exception in termination:\n"+e);
        }
        if(tres!=null){
            Interpreter.Log("Result value of termination:\n"+tres.toString());
        }
       
        /*
         * De nouveau, si la pile n'est pas correctement rétablie...
         */
        contextSnapshot.restoreGlobalOnly();
       
        /*
         * restaurer les paramètres qui ont précédé l'exécution de la section A...
         *
         * Ceux-ci peuvent être traités par un (try{...} catch{...})
View Full Code Here

        Node xnode = startAt.getSubNode(1, Node.TYPE_LAZY);
        startAt.requirePCode(2, PCoder.PC_CATCH);
        Node enode = startAt.getSubNode(3, Node.TYPE_LAZY);
        Node res = null;
        Interpreter interpreter = Interpreter.mySelf();
        BaseContextSnapshot contextSnapshot = new BaseContextSnapshot(interpreter);
        boolean isRetrying = true;

        while (isRetrying) {
            try {
                abstrasy.Heap.push();
                res = xnode.exec(true);
                abstrasy.Heap.pull();
                isRetrying = false;
            }
            catch (AbortException abortExc) {
                /**
                 * traitement de abort...
                 */
                contextSnapshot.restore();
                isRetrying = false;
            }
            catch (RetryException retryExc) {
                /**
                 * traitement de retry...
                 */
                contextSnapshot.restore();
                isRetrying = true;
            }
            catch (RestartException restartExc) {
                /**
                 * Traitement de restart...
                 */
                contextSnapshot.restore();
                throw restartExc;
            }
            catch (SilentException silex) {
                /**
                 * exception silencieuse (arrêt silencieux)
                 */
                contextSnapshot.restore();
                throw silex;
            }
            catch (Exception excep) {
                /**
                 * Autres exceptions... Entrée dans catch{...}
                 */
                contextSnapshot.restore();
                if(excep instanceof InterpreterException){
                    /*
                     * Attention, on ne capture pas les exceptions interpréteur dont le code est négatif...
                     */
                    if(((InterpreterException)excep).getErrCode()<0){
                        // cas d'une exception qui ne peut être capturée (exemple: break)...
                        throw excep;
                    }
                }
                try {
                    Node argv = Node.createCList();
                    argv.addElement(External_Exception.create(excep));
                    abstrasy.Heap.push(); // nouvel espace local
                    abstrasy.Heap.defv(ASymbol.SYMBOL_ARGV, argv);
                    res = enode.exec(true);
                    abstrasy.Heap.pull(); // supprimer l'espace local...
                    isRetrying = false;
                }
                catch (RetryException retryExc) {
                    /*
                     * recommencer la partie controlée...
                     */
                    contextSnapshot.restore();
                    isRetrying = true;
                }
                catch (AbortException abortExc) {
                    /*
                     * Abandon de la partie controlée...
                     */
                    contextSnapshot.restore();
                    isRetrying = false;
                }
                catch (Exception otherex) {
                    /*
                     * Renvoyer toutes les autres exceptions...
                     */
                    contextSnapshot.restore();
                    throw otherex;
                }
            }
        }

View Full Code Here

TOP

Related Classes of abstrasy.interpreter.BaseContextSnapshot

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.