Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/08/16 12:04:25 (7 years ago)
Author:
pkimmesw
Message:

#2665 Set .NET version to 4.5, C# version to 5.0, Added expression templates and factory

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.Algorithms.PushGP/HeuristicLab.Algorithms.PushGP/Expressions/Code/CodeDefineExpression.cs

    r14320 r14328  
    1 using HeuristicLab.Algorithms.PushGP.Stack;
     1using HeuristicLab.Algorithms.PushGP.Expressions.Exec;
     2using HeuristicLab.Algorithms.PushGP.Interpreter;
    23
    3 namespace HeuristicLab.Algorithms.PushGP.Expressions
     4namespace HeuristicLab.Algorithms.PushGP.Expressions.Code
    45{
    56    public class CodeDefineExpression : Expression
    67    {
    7         public CodeDefineExpression() : base(OpCode.CodeDefine)
    8         { }
     8        public override bool IsCodeOp { get { return true; } }
    99
    10         public override void Eval(IInterpreterService interpreterService)
     10        public override void Eval(IInterpreter interpreter)
    1111        {
    12             Define(
    13                 interpreterService.CodeStack,
    14                 interpreterService.NameStack,
    15                 interpreterService.CustomExpressions,
    16                 value => new ExecPushExpression(value));
     12            // not enough arguments on stack
     13            if (interpreter.NameStack.Count == 0 ||
     14                interpreter.CodeStack.Count == 0)
     15                return;
    1716
    18             // as the interpreter does not pop code expressions
    19             interpreterService.CodeStack.Pop();
     17            var name = interpreter.NameStack.Pop();
     18            var expression = new ExecPushExpression(interpreter.CodeStack.Top);
     19
     20            if (interpreter.CustomExpressions.ContainsKey(name))
     21            {
     22                interpreter.CustomExpressions[name] = expression;
     23            }
     24            else
     25            {
     26                interpreter.CustomExpressions.Add(name, expression);
     27            }
     28
     29            interpreter.CodeStack.Pop();
     30        }
     31
     32        public override string ToString()
     33        {
     34            return Symbols.CodeDefine;
    2035        }
    2136    }
Note: See TracChangeset for help on using the changeset viewer.