コード例 #1
0
ファイル: Scope.cs プロジェクト: mdcuesta/Ongle
 public void SetDynamic( string identifier, Dynamic dynamic )
 {
     if ( !TrySetDynamic ( identifier, dynamic ) )
     {
         AddDynamic(identifier, dynamic);
     }
 }
コード例 #2
0
ファイル: Scope.cs プロジェクト: mdcuesta/Ongle
 /// <summary>
 /// Adds the varible at this level of scope 
 /// </summary>
 public void AddDynamic( string identifier, Dynamic dynamic )
 {
     if (dynamic == null)
         _lookup.Remove ( identifier );
     else
         _lookup[identifier] = dynamic;
 }
コード例 #3
0
ファイル: Block.cs プロジェクト: mdcuesta/Ongle
        /// <summary>
        /// Evaluate a block sticks it in a dynamic and returns it 
        /// for later execution.
        /// </summary>
        /// <param name="heap"></param>
        /// <returns></returns>
        public override Dynamic Evaluate()
        {
            var result = new Dynamic
            {
                Scope = Scope,
                BlockValue = this
            };

            return result;
        }
コード例 #4
0
ファイル: Scope.cs プロジェクト: mdcuesta/Ongle
        /// <summary>
        /// Setting a variable with an indexer - the original variable must have already been set
        /// </summary>
        public void SetDynamic( string identifier, Dynamic indexer, Dynamic dynamic )
        {
            Dynamic variable = TryGetDynamic ( identifier );
            if (variable == null) // TODO Better error
                throw new Exception ("Indexing into non-existant array");

            if (variable.Type != DynamicType.arrayType) // TODO Better error
                throw new Exception ("Indexing into non-array");

            variable.ArrayValue[(Int32)Math.Truncate(indexer.NumberValue)] = dynamic;
        }
コード例 #5
0
ファイル: Scope.cs プロジェクト: mdcuesta/Ongle
        public Dynamic GetDynamic( string identifier )
        {
            Dynamic result = TryGetDynamic ( identifier );

            if ( result != null )
                return result;

            Dynamic newDynamic = new Dynamic ()
            {
                Scope = this
            };

            _lookup.Add ( identifier, newDynamic );

            return newDynamic;
        }
コード例 #6
0
ファイル: ArithExpr.cs プロジェクト: mdcuesta/Ongle
 private Dynamic EvaluateSub( Dynamic left, Dynamic right )
 {
     return new Dynamic ( )
     {
         NumberValue = left.NumberValue - right.NumberValue,
         Scope = this.Scope
     };
 }
コード例 #7
0
ファイル: Executors.cs プロジェクト: mdcuesta/Ongle
        /// <summary>
        /// Calls a block that this variable is assigned to.
        /// Returns a Variable which holds a block if that was the 
        /// tail call of this block.
        /// </summary>
        public ITailCallExecution Execute( Variable variable, Dynamic parameters )
        {
            Dynamic dynamic = Scope.GetDynamic ( variable.Ident );
            if (dynamic.Type == DynamicType.arrayType)
            {
                Dynamic index = variable.Indexer.Evaluate();
                dynamic = dynamic.ArrayValue[(Int32)Math.Truncate (index.NumberValue)];
            }

            if ( dynamic.BlockValue != null )
            {
                _debug.PrintDebugInfo ( "Executing block : " + variable.Ident );

                dynamic.BlockValue.Scope.AddDynamic ( "$", parameters );
                ITailCallExecution tailCall = dynamic.BlockValue.ExecuteBlockWithTailCallElimination ();

                if (tailCall != null)
                    _debug.PrintDebugInfo ( "Tail call returned : " + tailCall.ToString()  );

                return tailCall;
            }

            return null;
        }
コード例 #8
0
ファイル: Scope.cs プロジェクト: mdcuesta/Ongle
        /// <summary>
        /// Try to set the variable at a scope level that has this defined. 
        /// </summary>
        /// <returns>
        /// True if variable has been set.
        /// False if variable has not been set <see cref="System.Boolean"/>
        /// </returns>
        public bool TrySetDynamic( string identifier, Dynamic dynamic )
        {
            if (_lookup.ContainsKey ( identifier ) )
            {
                _lookup[identifier] = dynamic;
                return true;
            }
            else if ( _inheritedScope != null )
                return _inheritedScope.TrySetDynamic( identifier, dynamic );

            return false;
        }