Example #1
0
        public override Statement Expand(MacroStatement macro)
        {
            if (macro.Arguments.Count != 1) {
                throw new ScriptParsingException("'with' must be called with only a single argument followed by a block.");
            }

            var arg = macro.Arguments[0];
            var instanceExpression = ConvertExpressionToTemporaryVariable(arg, macro.Body);
            var runnableParser = new RunnableParser(NameResolutionService);

            if (runnableParser.IsRunnable(arg)) {
                AddRunExpressionToBody(macro.Body, instanceExpression);
            }

            var visitor = new OmittedReferenceVisitor(instanceExpression);

            visitor.Visit(macro.Body);

            return macro.Body;
        }
Example #2
0
        public override Statement Expand(MacroStatement macro)
        {
            if (macro.Arguments.Count != 1)
            {
                throw new ScriptParsingException("'with' must be called with only a single argument followed by a block.");
            }

            var arg = macro.Arguments[0];
            var instanceExpression = ConvertExpressionToTemporaryVariable(arg, macro.Body);
            var runnableParser     = new RunnableParser(NameResolutionService);

            if (runnableParser.IsRunnable(arg))
            {
                AddRunExpressionToBody(macro.Body, instanceExpression);
            }

            var visitor = new OmittedReferenceVisitor(instanceExpression);

            visitor.Visit(macro.Body);

            return(macro.Body);
        }