Пример #1
0
        internal void CompileParameterAssignment(OperandsByValueAccessAssignment assignment)
        {
            //Compile the parameter in the active activation record
            var compiledLhsValue = CompileLhsValueAccess(assignment.LhsValueAccess);

            //Compile the rhs expression in the upper dynamic activation record
            var topAr = ActiveAr;

            ActiveAr = ActiveAr.UpperDynamicAr;

            var compiledRhsExpr = CompileExpression(assignment.RhsExpression);

            ActiveAr = topAr;

            _compiledBlock.AddCommand_Assign(compiledLhsValue, compiledRhsExpr);
        }
Пример #2
0
        private static LanguageValueAccess NonAtomicExpressionToValueAccess(this CommandBlock commandBlock, ILanguageExpression oldExpr)
        {
            if (oldExpr is ILanguageExpressionAtomic)
            {
                throw new InvalidOperationException("This should never happen!");
            }

            var localVar = commandBlock.DefineLocalVariable(oldExpr.ExpressionType).DataStore;

            //Create a local variable to hold value and return the local variable as a direct value access object
            var lhsValueAccess = LanguageValueAccess.Create(localVar);

            commandBlock.AddCommand_Assign(lhsValueAccess, oldExpr);

            return(lhsValueAccess);
        }
Пример #3
0
        /// <summary>
        /// Fill final optimized command block with optimized code
        /// </summary>
        private void FillOptimizedCommandBlock()
        {
            //Remove all statements from optimized block
            _optimizedBlock.ClearCommands();

            //Add optimized statements from stetements table to optimized block
            foreach (var commandInfo in _commandsInfoList)
            {
                if (commandInfo.AssociatedCommand.LhsValueAccess.IsLocalVariable)
                {
                    _optimizedBlock.AddCommand_Declare(commandInfo.AssociatedCommand.LhsValueAccess.RootSymbolAsDataStore);
                }

                _optimizedBlock.AddCommand_Assign(
                    commandInfo.AssociatedCommand.LhsValueAccess,
                    commandInfo.AssociatedCommand.RhsExpression
                    );
            }
        }