Esempio n. 1
0
        private void Evaluate(object obj)
        {
            var code = (IntermediateCode)obj;

            if (code is ICAssignment)
            {
                ICAssignment ica = (ICAssignment)code;
                // create OperationImpl instance
                ObjectHandle        handle = Activator.CreateInstance("JOSPrototype", "JOSPrototype.Runtime.Operation." + ica.op + "OnKH", false, 0, null, new object[] { this, code, program }, null, null);
                Operation.Operation opImpl = (Operation.Operation)handle.Unwrap();
                // execute the operation on KH
                opImpl.Run();
            }
            else if (code is ICWhile)
            {
                ICWhile   icw = (ICWhile)code;
                WhileOnKH op  = new WhileOnKH(this, icw, program);
                op.Run();
            }
            else
            {
                ICIfElse   icie = (ICIfElse)code;
                IfElseOnKH op   = new IfElseOnKH(this, icie, program);
                op.Run();
            }
        }
Esempio n. 2
0
 protected void Evaluate(IntermediateCode code)
 {
     //System.Diagnostics.Debug.WriteLine("KH: " + code);
     if (code is ICAssignment)
     {
         ICAssignment ica = (ICAssignment)code;
         // create Operation instance
         ObjectHandle handle = Activator.CreateInstance("JOSPrototype", "JOSPrototype.Runtime.Operation." + ica.op + "OnKH", false, 0, null, new object[] { party, code, program, this }, null, null);
         Operation    op     = (Operation)handle.Unwrap();
         // execute the operation on EVH
         op.Run();
     }
     else if (code is ICWhile)
     {
         ICWhile   icw = (ICWhile)code;
         WhileOnKH op  = new WhileOnKH(party, icw, program, this);
         op.Run();
     }
     else
     {
         ICIfElse   icie = (ICIfElse)code;
         IfElseOnKH op   = new IfElseOnKH(party, icie, program, this);
         op.Run();
     }
 }
Esempio n. 3
0
 public WhileOnKH(Party party, ICWhile code, Program program, Operation caller)
     : base(party, code, program, caller, OperationType.While)
 {
     icw   = code;
     codes = new List <IntermediateCode>();
     codes.AddRange(code.conditionCodes.GetCodes());
     codes.AddRange(code.codes.GetCodes());
 }
Esempio n. 4
0
 // out most while loop
 public WhileOnEVH(Party party, ICWhile code, Program program)
     : base(party, code, program, OperationType.While)
 {
     icw   = (ICWhile)Program.TransformIntermediateCode(null, code, program)[0];
     codes = new List <IntermediateCode>();
     codes.AddRange(code.conditionCodes.GetCodes());
     codes.AddRange(code.codes.GetCodes());
 }
Esempio n. 5
0
 private bool IsDependent(IntermediateCode codei, IntermediateCode codej)
 {
     if (codei is ICAssignment && codej is ICAssignment)
     {
         ICAssignment assignmenti = (ICAssignment)codei, assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmenti.result, assignmentj.result) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand1) ||
             ETerminal.IsEqual(assignmentj.result, assignmenti.operand2) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand1) ||
             ETerminal.IsEqual(assignmenti.result, assignmentj.operand2))
         {
             return(true);
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICWhile)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICWhile      whilej      = (ICWhile)codej;
         if (ETerminal.IsEqual(assignmenti.result, whilej.condition))
         {
             return(true);
         }
         foreach (var entry in whilej.conditionCodes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         foreach (var entry in whilej.codes.GetCodes())
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICAssignment)
     {
         ICWhile      whilei      = (ICWhile)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, whilei.condition))
         {
             return(true);
         }
         foreach (var entry in whilei.conditionCodes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         foreach (var entry in whilei.codes.GetCodes())
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICWhile)
     {
         ICWhile whilei = (ICWhile)codei, whilej = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICAssignment && codej is ICIfElse)
     {
         ICAssignment assignmenti = (ICAssignment)codei;
         ICIfElse     ifelsej     = (ICIfElse)codej;
         if (ETerminal.IsEqual(assignmenti.result, ifelsej.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesj = new List <IntermediateCode>();
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entry in codesj)
         {
             if (IsDependent(assignmenti, entry))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICAssignment)
     {
         ICIfElse     ifelsei     = (ICIfElse)codei;
         ICAssignment assignmentj = (ICAssignment)codej;
         if (ETerminal.IsEqual(assignmentj.result, ifelsei.condition))
         {
             return(true);
         }
         List <IntermediateCode> codesi = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         foreach (var entry in codesi)
         {
             if (IsDependent(entry, assignmentj))
             {
                 return(true);
             }
         }
         return(false);
     }
     else if (codei is ICWhile && codej is ICIfElse)
     {
         ICWhile  whilei  = (ICWhile)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(whilei.conditionCodes.GetCodes());
         codesi.AddRange(whilei.codes.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else if (codei is ICIfElse && codej is ICWhile)
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICWhile  whilej  = (ICWhile)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(whilej.conditionCodes.GetCodes());
         codesj.AddRange(whilej.codes.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
     else
     {
         ICIfElse ifelsei = (ICIfElse)codei;
         ICIfElse ifelsej = (ICIfElse)codej;
         List <IntermediateCode>
         codesi     = new List <IntermediateCode>(),
             codesj = new List <IntermediateCode>();
         codesi.AddRange(ifelsei.conditionCodes.GetCodes());
         codesi.AddRange(ifelsei.codesIf.GetCodes());
         codesi.AddRange(ifelsei.codesElse.GetCodes());
         codesj.AddRange(ifelsej.conditionCodes.GetCodes());
         codesj.AddRange(ifelsej.codesIf.GetCodes());
         codesj.AddRange(ifelsej.codesElse.GetCodes());
         foreach (var entryi in codesi)
         {
             foreach (var entryj in codesj)
             {
                 if (IsDependent(entryi, entryj))
                 {
                     return(true);
                 }
             }
         }
         return(false);
     }
 }