private void ProcessVariableDeclaration(
            VariableDeclaration variableDeclaration,
            ParserContext context)
        {
            foreach (var variable in variableDeclaration.Declarations)
            {
                if (variable.Init != null)
                {
                    var childContext = new ParserContext(context);

                    ProcessExpression(variable.Id, childContext);
                    ProcessExpression(variable.Init, childContext);
                }
            }
        }
Beispiel #2
0
        public Completion ExecuteVariableDeclaration(VariableDeclaration statement)
        {
            foreach (var declaration in statement.Declarations)
            {
                if (declaration.Init != null)
                {
                    var lhs = _engine.EvaluateExpression(declaration.Id) as Reference;

                    if (lhs == null)
                    {
                        throw new ArgumentException();
                    }

                    if (lhs.IsStrict() && lhs.GetBase().TryCast<EnvironmentRecord>() != null &&
                        (lhs.GetReferencedName() == "eval" || lhs.GetReferencedName() == "arguments"))
                    {
                        throw new JavaScriptException(_engine.SyntaxError);
                    }

                    lhs.GetReferencedName();
                    var value = _engine.GetValue(_engine.EvaluateExpression(declaration.Init));
                    _engine.PutValue(lhs, value);
                }
            }

            return new Completion(Completion.Normal, Undefined.Instance, null);
        }
        private void EmitVariableDeclaration(VariableDeclaration e)
        {
            Write(e.Kind + " ");
            bool first = true;
            foreach (var decl in e.Declarations)
            {
                if (first) first = false;
                else Write(", ");
                Emit(decl);
            }

            Write(";");
        }