]>
git.saurik.com Git - apple/javascriptcore.git/blob - parser/NodeConstructors.h
2 * Copyright (C) 2009 Apple Inc. All rights reserved.
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
21 #ifndef NodeConstructors_h
22 #define NodeConstructors_h
30 inline void* ParserArenaFreeable::operator new(size_t size
, JSGlobalData
* globalData
)
32 return globalData
->parser
->arena().allocateFreeable(size
);
35 inline void* ParserArenaDeletable::operator new(size_t size
, JSGlobalData
* globalData
)
37 return globalData
->parser
->arena().allocateDeletable(size
);
40 inline ParserArenaRefCounted::ParserArenaRefCounted(JSGlobalData
* globalData
)
42 globalData
->parser
->arena().derefWithArena(adoptRef(this));
45 inline Node::Node(JSGlobalData
* globalData
)
46 : m_line(globalData
->lexer
->lineNumber())
50 inline ExpressionNode::ExpressionNode(JSGlobalData
* globalData
, ResultType resultType
)
52 , m_resultType(resultType
)
56 inline StatementNode::StatementNode(JSGlobalData
* globalData
)
62 inline NullNode::NullNode(JSGlobalData
* globalData
)
63 : ExpressionNode(globalData
, ResultType::nullType())
67 inline BooleanNode::BooleanNode(JSGlobalData
* globalData
, bool value
)
68 : ExpressionNode(globalData
, ResultType::booleanType())
73 inline NumberNode::NumberNode(JSGlobalData
* globalData
, double value
)
74 : ExpressionNode(globalData
, ResultType::numberType())
79 inline StringNode::StringNode(JSGlobalData
* globalData
, const Identifier
& value
)
80 : ExpressionNode(globalData
, ResultType::stringType())
85 inline RegExpNode::RegExpNode(JSGlobalData
* globalData
, const Identifier
& pattern
, const Identifier
& flags
)
86 : ExpressionNode(globalData
)
92 inline ThisNode::ThisNode(JSGlobalData
* globalData
)
93 : ExpressionNode(globalData
)
97 inline ResolveNode::ResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, int startOffset
)
98 : ExpressionNode(globalData
)
100 , m_startOffset(startOffset
)
104 inline ElementNode::ElementNode(JSGlobalData
*, int elision
, ExpressionNode
* node
)
111 inline ElementNode::ElementNode(JSGlobalData
*, ElementNode
* l
, int elision
, ExpressionNode
* node
)
119 inline ArrayNode::ArrayNode(JSGlobalData
* globalData
, int elision
)
120 : ExpressionNode(globalData
)
127 inline ArrayNode::ArrayNode(JSGlobalData
* globalData
, ElementNode
* element
)
128 : ExpressionNode(globalData
)
135 inline ArrayNode::ArrayNode(JSGlobalData
* globalData
, int elision
, ElementNode
* element
)
136 : ExpressionNode(globalData
)
143 inline PropertyNode::PropertyNode(JSGlobalData
*, const Identifier
& name
, ExpressionNode
* assign
, Type type
)
150 inline PropertyNode::PropertyNode(JSGlobalData
* globalData
, double name
, ExpressionNode
* assign
, Type type
)
151 : m_name(globalData
->parser
->arena().identifierArena().makeNumericIdentifier(globalData
, name
))
157 inline PropertyListNode::PropertyListNode(JSGlobalData
* globalData
, PropertyNode
* node
)
164 inline PropertyListNode::PropertyListNode(JSGlobalData
* globalData
, PropertyNode
* node
, PropertyListNode
* list
)
172 inline ObjectLiteralNode::ObjectLiteralNode(JSGlobalData
* globalData
)
173 : ExpressionNode(globalData
)
178 inline ObjectLiteralNode::ObjectLiteralNode(JSGlobalData
* globalData
, PropertyListNode
* list
)
179 : ExpressionNode(globalData
)
184 inline BracketAccessorNode::BracketAccessorNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, bool subscriptHasAssignments
)
185 : ExpressionNode(globalData
)
187 , m_subscript(subscript
)
188 , m_subscriptHasAssignments(subscriptHasAssignments
)
192 inline DotAccessorNode::DotAccessorNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
)
193 : ExpressionNode(globalData
)
199 inline ArgumentListNode::ArgumentListNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
206 inline ArgumentListNode::ArgumentListNode(JSGlobalData
* globalData
, ArgumentListNode
* listNode
, ExpressionNode
* expr
)
211 listNode
->m_next
= this;
214 inline ArgumentsNode::ArgumentsNode(JSGlobalData
*)
219 inline ArgumentsNode::ArgumentsNode(JSGlobalData
*, ArgumentListNode
* listNode
)
220 : m_listNode(listNode
)
224 inline NewExprNode::NewExprNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
225 : ExpressionNode(globalData
)
231 inline NewExprNode::NewExprNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, ArgumentsNode
* args
)
232 : ExpressionNode(globalData
)
238 inline EvalFunctionCallNode::EvalFunctionCallNode(JSGlobalData
* globalData
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
239 : ExpressionNode(globalData
)
240 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
245 inline FunctionCallValueNode::FunctionCallValueNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
246 : ExpressionNode(globalData
)
247 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
253 inline FunctionCallResolveNode::FunctionCallResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
254 : ExpressionNode(globalData
)
255 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
261 inline FunctionCallBracketNode::FunctionCallBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
262 : ExpressionNode(globalData
)
263 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
265 , m_subscript(subscript
)
270 inline FunctionCallDotNode::FunctionCallDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
271 : ExpressionNode(globalData
)
272 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
279 inline CallFunctionCallDotNode::CallFunctionCallDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
280 : FunctionCallDotNode(globalData
, base
, ident
, args
, divot
, startOffset
, endOffset
)
284 inline ApplyFunctionCallDotNode::ApplyFunctionCallDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, ArgumentsNode
* args
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
285 : FunctionCallDotNode(globalData
, base
, ident
, args
, divot
, startOffset
, endOffset
)
289 inline PrePostResolveNode::PrePostResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
290 : ExpressionNode(globalData
, ResultType::numberType()) // could be reusable for pre?
291 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
296 inline PostfixResolveNode::PostfixResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
297 : PrePostResolveNode(globalData
, ident
, divot
, startOffset
, endOffset
)
302 inline PostfixBracketNode::PostfixBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
303 : ExpressionNode(globalData
)
304 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
306 , m_subscript(subscript
)
311 inline PostfixDotNode::PostfixDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
312 : ExpressionNode(globalData
)
313 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
320 inline PostfixErrorNode::PostfixErrorNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
321 : ExpressionNode(globalData
)
322 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
328 inline DeleteResolveNode::DeleteResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
329 : ExpressionNode(globalData
)
330 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
335 inline DeleteBracketNode::DeleteBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
336 : ExpressionNode(globalData
)
337 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
339 , m_subscript(subscript
)
343 inline DeleteDotNode::DeleteDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
344 : ExpressionNode(globalData
)
345 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
351 inline DeleteValueNode::DeleteValueNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
352 : ExpressionNode(globalData
)
357 inline VoidNode::VoidNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
358 : ExpressionNode(globalData
)
363 inline TypeOfResolveNode::TypeOfResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
)
364 : ExpressionNode(globalData
, ResultType::stringType())
369 inline TypeOfValueNode::TypeOfValueNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
370 : ExpressionNode(globalData
, ResultType::stringType())
375 inline PrefixResolveNode::PrefixResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
376 : PrePostResolveNode(globalData
, ident
, divot
, startOffset
, endOffset
)
381 inline PrefixBracketNode::PrefixBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
382 : ExpressionNode(globalData
)
383 , ThrowablePrefixedSubExpressionData(divot
, startOffset
, endOffset
)
385 , m_subscript(subscript
)
390 inline PrefixDotNode::PrefixDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
391 : ExpressionNode(globalData
)
392 , ThrowablePrefixedSubExpressionData(divot
, startOffset
, endOffset
)
399 inline PrefixErrorNode::PrefixErrorNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, Operator oper
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
400 : ExpressionNode(globalData
)
401 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
407 inline UnaryOpNode::UnaryOpNode(JSGlobalData
* globalData
, ResultType type
, ExpressionNode
* expr
, OpcodeID opcodeID
)
408 : ExpressionNode(globalData
, type
)
410 , m_opcodeID(opcodeID
)
414 inline UnaryPlusNode::UnaryPlusNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
415 : UnaryOpNode(globalData
, ResultType::numberType(), expr
, op_to_jsnumber
)
419 inline NegateNode::NegateNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
420 : UnaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr
, op_negate
)
424 inline BitwiseNotNode::BitwiseNotNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
425 : UnaryOpNode(globalData
, ResultType::forBitOp(), expr
, op_bitnot
)
429 inline LogicalNotNode::LogicalNotNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
430 : UnaryOpNode(globalData
, ResultType::booleanType(), expr
, op_not
)
434 inline BinaryOpNode::BinaryOpNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
435 : ExpressionNode(globalData
)
438 , m_opcodeID(opcodeID
)
439 , m_rightHasAssignments(rightHasAssignments
)
443 inline BinaryOpNode::BinaryOpNode(JSGlobalData
* globalData
, ResultType type
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
444 : ExpressionNode(globalData
, type
)
447 , m_opcodeID(opcodeID
)
448 , m_rightHasAssignments(rightHasAssignments
)
452 inline ReverseBinaryOpNode::ReverseBinaryOpNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
453 : BinaryOpNode(globalData
, expr1
, expr2
, opcodeID
, rightHasAssignments
)
457 inline ReverseBinaryOpNode::ReverseBinaryOpNode(JSGlobalData
* globalData
, ResultType type
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
458 : BinaryOpNode(globalData
, type
, expr1
, expr2
, opcodeID
, rightHasAssignments
)
462 inline MultNode::MultNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
463 : BinaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr1
, expr2
, op_mul
, rightHasAssignments
)
467 inline DivNode::DivNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
468 : BinaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr1
, expr2
, op_div
, rightHasAssignments
)
473 inline ModNode::ModNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
474 : BinaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr1
, expr2
, op_mod
, rightHasAssignments
)
478 inline AddNode::AddNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
479 : BinaryOpNode(globalData
, ResultType::forAdd(expr1
->resultDescriptor(), expr2
->resultDescriptor()), expr1
, expr2
, op_add
, rightHasAssignments
)
483 inline SubNode::SubNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
484 : BinaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr1
, expr2
, op_sub
, rightHasAssignments
)
488 inline LeftShiftNode::LeftShiftNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
489 : BinaryOpNode(globalData
, ResultType::forBitOp(), expr1
, expr2
, op_lshift
, rightHasAssignments
)
493 inline RightShiftNode::RightShiftNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
494 : BinaryOpNode(globalData
, ResultType::forBitOp(), expr1
, expr2
, op_rshift
, rightHasAssignments
)
498 inline UnsignedRightShiftNode::UnsignedRightShiftNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
499 : BinaryOpNode(globalData
, ResultType::numberTypeCanReuse(), expr1
, expr2
, op_urshift
, rightHasAssignments
)
503 inline LessNode::LessNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
504 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_less
, rightHasAssignments
)
508 inline GreaterNode::GreaterNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
509 : ReverseBinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_less
, rightHasAssignments
)
513 inline LessEqNode::LessEqNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
514 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_lesseq
, rightHasAssignments
)
518 inline GreaterEqNode::GreaterEqNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
519 : ReverseBinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_lesseq
, rightHasAssignments
)
523 inline ThrowableBinaryOpNode::ThrowableBinaryOpNode(JSGlobalData
* globalData
, ResultType type
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
524 : BinaryOpNode(globalData
, type
, expr1
, expr2
, opcodeID
, rightHasAssignments
)
528 inline ThrowableBinaryOpNode::ThrowableBinaryOpNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, OpcodeID opcodeID
, bool rightHasAssignments
)
529 : BinaryOpNode(globalData
, expr1
, expr2
, opcodeID
, rightHasAssignments
)
533 inline InstanceOfNode::InstanceOfNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
534 : ThrowableBinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_instanceof
, rightHasAssignments
)
538 inline InNode::InNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
539 : ThrowableBinaryOpNode(globalData
, expr1
, expr2
, op_in
, rightHasAssignments
)
543 inline EqualNode::EqualNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
544 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_eq
, rightHasAssignments
)
548 inline NotEqualNode::NotEqualNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
549 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_neq
, rightHasAssignments
)
553 inline StrictEqualNode::StrictEqualNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
554 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_stricteq
, rightHasAssignments
)
558 inline NotStrictEqualNode::NotStrictEqualNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
559 : BinaryOpNode(globalData
, ResultType::booleanType(), expr1
, expr2
, op_nstricteq
, rightHasAssignments
)
563 inline BitAndNode::BitAndNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
564 : BinaryOpNode(globalData
, ResultType::forBitOp(), expr1
, expr2
, op_bitand
, rightHasAssignments
)
568 inline BitOrNode::BitOrNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
569 : BinaryOpNode(globalData
, ResultType::forBitOp(), expr1
, expr2
, op_bitor
, rightHasAssignments
)
573 inline BitXOrNode::BitXOrNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, bool rightHasAssignments
)
574 : BinaryOpNode(globalData
, ResultType::forBitOp(), expr1
, expr2
, op_bitxor
, rightHasAssignments
)
578 inline LogicalOpNode::LogicalOpNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, LogicalOperator oper
)
579 : ExpressionNode(globalData
, ResultType::booleanType())
586 inline ConditionalNode::ConditionalNode(JSGlobalData
* globalData
, ExpressionNode
* logical
, ExpressionNode
* expr1
, ExpressionNode
* expr2
)
587 : ExpressionNode(globalData
)
594 inline ReadModifyResolveNode::ReadModifyResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, Operator oper
, ExpressionNode
* right
, bool rightHasAssignments
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
595 : ExpressionNode(globalData
)
596 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
600 , m_rightHasAssignments(rightHasAssignments
)
604 inline AssignResolveNode::AssignResolveNode(JSGlobalData
* globalData
, const Identifier
& ident
, ExpressionNode
* right
, bool rightHasAssignments
)
605 : ExpressionNode(globalData
)
608 , m_rightHasAssignments(rightHasAssignments
)
612 inline ReadModifyBracketNode::ReadModifyBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, Operator oper
, ExpressionNode
* right
, bool subscriptHasAssignments
, bool rightHasAssignments
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
613 : ExpressionNode(globalData
)
614 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
616 , m_subscript(subscript
)
619 , m_subscriptHasAssignments(subscriptHasAssignments
)
620 , m_rightHasAssignments(rightHasAssignments
)
624 inline AssignBracketNode::AssignBracketNode(JSGlobalData
* globalData
, ExpressionNode
* base
, ExpressionNode
* subscript
, ExpressionNode
* right
, bool subscriptHasAssignments
, bool rightHasAssignments
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
625 : ExpressionNode(globalData
)
626 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
628 , m_subscript(subscript
)
630 , m_subscriptHasAssignments(subscriptHasAssignments
)
631 , m_rightHasAssignments(rightHasAssignments
)
635 inline AssignDotNode::AssignDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, ExpressionNode
* right
, bool rightHasAssignments
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
636 : ExpressionNode(globalData
)
637 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
641 , m_rightHasAssignments(rightHasAssignments
)
645 inline ReadModifyDotNode::ReadModifyDotNode(JSGlobalData
* globalData
, ExpressionNode
* base
, const Identifier
& ident
, Operator oper
, ExpressionNode
* right
, bool rightHasAssignments
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
646 : ExpressionNode(globalData
)
647 , ThrowableSubExpressionData(divot
, startOffset
, endOffset
)
652 , m_rightHasAssignments(rightHasAssignments
)
656 inline AssignErrorNode::AssignErrorNode(JSGlobalData
* globalData
, ExpressionNode
* left
, Operator oper
, ExpressionNode
* right
, unsigned divot
, unsigned startOffset
, unsigned endOffset
)
657 : ExpressionNode(globalData
)
658 , ThrowableExpressionData(divot
, startOffset
, endOffset
)
665 inline CommaNode::CommaNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
)
666 : ExpressionNode(globalData
)
668 m_expressions
.append(expr1
);
669 m_expressions
.append(expr2
);
672 inline ConstStatementNode::ConstStatementNode(JSGlobalData
* globalData
, ConstDeclNode
* next
)
673 : StatementNode(globalData
)
678 inline SourceElements::SourceElements(JSGlobalData
*)
682 inline EmptyStatementNode::EmptyStatementNode(JSGlobalData
* globalData
)
683 : StatementNode(globalData
)
687 inline DebuggerStatementNode::DebuggerStatementNode(JSGlobalData
* globalData
)
688 : StatementNode(globalData
)
692 inline ExprStatementNode::ExprStatementNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
693 : StatementNode(globalData
)
698 inline VarStatementNode::VarStatementNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
699 : StatementNode(globalData
)
704 inline IfNode::IfNode(JSGlobalData
* globalData
, ExpressionNode
* condition
, StatementNode
* ifBlock
)
705 : StatementNode(globalData
)
706 , m_condition(condition
)
711 inline IfElseNode::IfElseNode(JSGlobalData
* globalData
, ExpressionNode
* condition
, StatementNode
* ifBlock
, StatementNode
* elseBlock
)
712 : IfNode(globalData
, condition
, ifBlock
)
713 , m_elseBlock(elseBlock
)
717 inline DoWhileNode::DoWhileNode(JSGlobalData
* globalData
, StatementNode
* statement
, ExpressionNode
* expr
)
718 : StatementNode(globalData
)
719 , m_statement(statement
)
724 inline WhileNode::WhileNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, StatementNode
* statement
)
725 : StatementNode(globalData
)
727 , m_statement(statement
)
731 inline ForNode::ForNode(JSGlobalData
* globalData
, ExpressionNode
* expr1
, ExpressionNode
* expr2
, ExpressionNode
* expr3
, StatementNode
* statement
, bool expr1WasVarDecl
)
732 : StatementNode(globalData
)
736 , m_statement(statement
)
737 , m_expr1WasVarDecl(expr1
&& expr1WasVarDecl
)
742 inline ContinueNode::ContinueNode(JSGlobalData
* globalData
)
743 : StatementNode(globalData
)
744 , m_ident(globalData
->propertyNames
->nullIdentifier
)
748 inline ContinueNode::ContinueNode(JSGlobalData
* globalData
, const Identifier
& ident
)
749 : StatementNode(globalData
)
754 inline BreakNode::BreakNode(JSGlobalData
* globalData
)
755 : StatementNode(globalData
)
756 , m_ident(globalData
->propertyNames
->nullIdentifier
)
760 inline BreakNode::BreakNode(JSGlobalData
* globalData
, const Identifier
& ident
)
761 : StatementNode(globalData
)
766 inline ReturnNode::ReturnNode(JSGlobalData
* globalData
, ExpressionNode
* value
)
767 : StatementNode(globalData
)
772 inline WithNode::WithNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, StatementNode
* statement
, uint32_t divot
, uint32_t expressionLength
)
773 : StatementNode(globalData
)
775 , m_statement(statement
)
777 , m_expressionLength(expressionLength
)
781 inline LabelNode::LabelNode(JSGlobalData
* globalData
, const Identifier
& name
, StatementNode
* statement
)
782 : StatementNode(globalData
)
784 , m_statement(statement
)
788 inline ThrowNode::ThrowNode(JSGlobalData
* globalData
, ExpressionNode
* expr
)
789 : StatementNode(globalData
)
794 inline TryNode::TryNode(JSGlobalData
* globalData
, StatementNode
* tryBlock
, const Identifier
& exceptionIdent
, bool catchHasEval
, StatementNode
* catchBlock
, StatementNode
* finallyBlock
)
795 : StatementNode(globalData
)
796 , m_tryBlock(tryBlock
)
797 , m_exceptionIdent(exceptionIdent
)
798 , m_catchBlock(catchBlock
)
799 , m_finallyBlock(finallyBlock
)
800 , m_catchHasEval(catchHasEval
)
804 inline ParameterNode::ParameterNode(JSGlobalData
*, const Identifier
& ident
)
810 inline ParameterNode::ParameterNode(JSGlobalData
*, ParameterNode
* l
, const Identifier
& ident
)
817 inline FuncExprNode::FuncExprNode(JSGlobalData
* globalData
, const Identifier
& ident
, FunctionBodyNode
* body
, const SourceCode
& source
, ParameterNode
* parameter
)
818 : ExpressionNode(globalData
)
821 m_body
->finishParsing(source
, parameter
, ident
);
824 inline FuncDeclNode::FuncDeclNode(JSGlobalData
* globalData
, const Identifier
& ident
, FunctionBodyNode
* body
, const SourceCode
& source
, ParameterNode
* parameter
)
825 : StatementNode(globalData
)
828 m_body
->finishParsing(source
, parameter
, ident
);
831 inline CaseClauseNode::CaseClauseNode(JSGlobalData
*, ExpressionNode
* expr
, SourceElements
* statements
)
833 , m_statements(statements
)
837 inline ClauseListNode::ClauseListNode(JSGlobalData
*, CaseClauseNode
* clause
)
843 inline ClauseListNode::ClauseListNode(JSGlobalData
*, ClauseListNode
* clauseList
, CaseClauseNode
* clause
)
847 clauseList
->m_next
= this;
850 inline CaseBlockNode::CaseBlockNode(JSGlobalData
*, ClauseListNode
* list1
, CaseClauseNode
* defaultClause
, ClauseListNode
* list2
)
852 , m_defaultClause(defaultClause
)
857 inline SwitchNode::SwitchNode(JSGlobalData
* globalData
, ExpressionNode
* expr
, CaseBlockNode
* block
)
858 : StatementNode(globalData
)
864 inline ConstDeclNode::ConstDeclNode(JSGlobalData
* globalData
, const Identifier
& ident
, ExpressionNode
* init
)
865 : ExpressionNode(globalData
)
872 inline BlockNode::BlockNode(JSGlobalData
* globalData
, SourceElements
* statements
)
873 : StatementNode(globalData
)
874 , m_statements(statements
)
878 inline ForInNode::ForInNode(JSGlobalData
* globalData
, ExpressionNode
* l
, ExpressionNode
* expr
, StatementNode
* statement
)
879 : StatementNode(globalData
)
880 , m_ident(globalData
->propertyNames
->nullIdentifier
)
884 , m_statement(statement
)
885 , m_identIsVarDecl(false)
889 inline ForInNode::ForInNode(JSGlobalData
* globalData
, const Identifier
& ident
, ExpressionNode
* in
, ExpressionNode
* expr
, StatementNode
* statement
, int divot
, int startOffset
, int endOffset
)
890 : StatementNode(globalData
)
893 , m_lexpr(new (globalData
) ResolveNode(globalData
, ident
, divot
- startOffset
))
895 , m_statement(statement
)
896 , m_identIsVarDecl(true)
899 AssignResolveNode
* node
= new (globalData
) AssignResolveNode(globalData
, ident
, in
, true);
900 node
->setExceptionSourceCode(divot
, divot
- startOffset
, endOffset
- divot
);
903 // for( var foo = bar in baz )
908 #endif // NodeConstructors_h