* Opens a new scope and returns a node to be used in this scope. This same node will later be called
* in {@link #closeNode(SimpleNode, int)} to have its scope closed (and at that time it may be changed
* for a new node that represents the scope more accurately.
*/
public final SimpleNode openNode(final int id) {
SimpleNode ret;
switch (id) {
case JJTFILE_INPUT:
ret = new Module(null);
break;
case JJTFALSE:
ret = new Name("False", Name.Load, true);
break;
case JJTTRUE:
ret = new Name("True", Name.Load, true);
break;
case JJTNONE:
ret = new Name("None", Name.Load, true);
break;
case JJTNAME:
case JJTDOTTED_NAME:
//the actual name will be set during the parsing (token image) -- see Name construct
ret = new Name(null, Name.Load, false);
break;
case JJTNUM://the actual number will be set during the parsing (token image) -- see Num construct
ret = new Num(null, -1, null);
break;
case JJTSTRING:
case JJTUNICODE:
case JJTBINARY:
//the actual number will be set during the parsing (token image) -- see Num construct
ret = new Str(null, -1, false, false, false);
break;
case JJTFOR_STMT:
ret = new For(null, null, null, null);
break;
case JJTEXEC_STMT:
ret = new Exec(null, null, null);
break;
case JJTPASS_STMT:
ret = new Pass();
break;
case JJTBREAK_STMT:
ret = new Break();
break;
case JJTCONTINUE_STMT:
ret = new Continue();
break;
case JJTBEGIN_DECORATOR:
ret = new decoratorsType(null, null, null, null, null, false);
break;
case JJTIF_STMT:
ret = new If(null, null, null);
break;
case JJTAUG_PLUS:
ret = new AugAssign(null, AugAssign.Add, null);
break;
case JJTAUG_MINUS:
ret = new AugAssign(null, AugAssign.Sub, null);
break;
case JJTAUG_MULTIPLY:
ret = new AugAssign(null, AugAssign.Mult, null);
break;
case JJTAUG_DIVIDE:
ret = new AugAssign(null, AugAssign.Div, null);
break;
case JJTAUG_MODULO:
ret = new AugAssign(null, AugAssign.Mod, null);
break;
case JJTAUG_AND:
ret = new AugAssign(null, AugAssign.BitAnd, null);
break;
case JJTAUG_OR:
ret = new AugAssign(null, AugAssign.BitOr, null);
break;
case JJTAUG_XOR:
ret = new AugAssign(null, AugAssign.BitXor, null);
break;
case JJTAUG_LSHIFT:
ret = new AugAssign(null, AugAssign.LShift, null);
break;
case JJTAUG_RSHIFT:
ret = new AugAssign(null, AugAssign.RShift, null);
break;
case JJTAUG_POWER:
ret = new AugAssign(null, AugAssign.Pow, null);
break;
case JJTAUG_FLOORDIVIDE:
ret = new AugAssign(null, AugAssign.FloorDiv, null);
break;
case JJTOR_2OP:
ret = new BinOp(null, BinOp.BitOr, null);
break;
case JJTXOR_2OP:
ret = new BinOp(null, BinOp.BitXor, null);
break;
case JJTAND_2OP:
ret = new BinOp(null, BinOp.BitAnd, null);
break;
case JJTLSHIFT_2OP:
ret = new BinOp(null, BinOp.LShift, null);
break;
case JJTRSHIFT_2OP:
ret = new BinOp(null, BinOp.RShift, null);
break;
case JJTADD_2OP:
ret = new BinOp(null, BinOp.Add, null);
break;
case JJTSUB_2OP:
ret = new BinOp(null, BinOp.Sub, null);
break;
case JJTMUL_2OP:
ret = new BinOp(null, BinOp.Mult, null);
break;
case JJTDIV_2OP:
ret = new BinOp(null, BinOp.Div, null);
break;
case JJTMOD_2OP:
ret = new BinOp(null, BinOp.Mod, null);
break;
case JJTPOW_2OP:
ret = new BinOp(null, BinOp.Pow, null);
break;
case JJTFLOORDIV_2OP:
ret = new BinOp(null, BinOp.FloorDiv, null);
break;
case JJTPOS_1OP:
ret = new UnaryOp(UnaryOp.UAdd, null);
break;
case JJTNEG_1OP:
ret = new UnaryOp(UnaryOp.USub, null);
break;
case JJTINVERT_1OP:
ret = new UnaryOp(UnaryOp.Invert, null);
break;
case JJTNOT_1OP:
ret = new UnaryOp(UnaryOp.Not, null);
break;
case JJTIMPORT:
ret = new Import(null);
break;
case JJTDOT_OP:
ret = new Attribute(null, null, Attribute.Load);
break;
case JJTSTAR_EXPR:
ret = new Starred(null, Starred.Store);
break;
default:
ret = new IdentityNode(id);
break;
}
ret.setId(id);
lastOpened = ret;
return ret;
}