public AssignableNode addAssign(ISourcePosition position, RubySymbol symbolID, Node value) { int slot = addVariable(symbolID.idString()); // No bit math to store level since we know level is zero for this case return new DAsgnNode(position, symbolID, slot, value); }
public LocalVariable getNewLocalVariable(RubySymbol name, int scopeDepth) { assert scopeDepth == 0: "Scope depth is non-zero for new-var request " + name + " in " + this; LocalVariable lvar = new LocalVariable(name, scopeDepth, getStaticScope().addVariable(name.idString())); localVars.put(name, lvar); return lvar; }
public LocalVariable getNewLocalVariable(RubySymbol name, int scopeDepth) { assert scopeDepth == 0: "Scope depth is non-zero for new-var request " + name + " in " + this; LocalVariable lvar = new LocalVariable(name, scopeDepth, getStaticScope().addVariable(name.idString())); localVars.put(name, lvar); return lvar; }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = new UnnamedRestArgNode(((Token)yyVals[0+yyTop]).getPosition(), "", support.getCurrentScope().addVariable("*")); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { yyVal = new UnnamedRestArgNode(((Token)yyVals[0+yyTop]).getPosition(), "", support.getCurrentScope().addVariable("*")); return yyVal; } };
@JRubyMethod public IRubyObject local_variable_set(ThreadContext context, IRubyObject symbol, IRubyObject value) { String name = symbol.asJavaString().intern(); DynamicScope evalScope = binding.getEvalScope(context.runtime); int slot = evalScope.getStaticScope().isDefined(name); if (slot == -1) { // Yay! New variable associated with this binding slot = evalScope.getStaticScope().addVariable(name.intern()); evalScope.growIfNeeded(); } return evalScope.setValue(slot & 0xffff, value, slot >> 16); }
@JRubyMethod public IRubyObject local_variable_set(ThreadContext context, IRubyObject symbol, IRubyObject value) { String name = symbol.asJavaString().intern(); DynamicScope evalScope = binding.getEvalScope(context.runtime); int slot = evalScope.getStaticScope().isDefined(name); if (slot == -1) { // Yay! New variable associated with this binding slot = evalScope.getStaticScope().addVariable(name.intern()); evalScope.growIfNeeded(); } return evalScope.setValue(slot & 0xffff, value, slot >> 16); }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { RestArgNode rest = new UnnamedRestArgNode(((ListNode)yyVals[-1+yyTop]).getPosition(), null, support.getCurrentScope().addVariable("*")); yyVal = support.new_args(((ListNode)yyVals[-1+yyTop]).getPosition(), ((ListNode)yyVals[-1+yyTop]), null, rest, null, (ArgsTailHolder) null); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { RestArgNode rest = new UnnamedRestArgNode(((ListNode)yyVals[-1+yyTop]).getPosition(), null, support.getCurrentScope().addVariable("*")); yyVal = support.new_args(((ListNode)yyVals[-1+yyTop]).getPosition(), ((ListNode)yyVals[-1+yyTop]), null, rest, null, (ArgsTailHolder) null); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { RestArgNode rest = new UnnamedRestArgNode(((ListNode)yyVals[-1+yyTop]).getPosition(), null, support.getCurrentScope().addVariable("*")); yyVal = support.new_args(((ListNode)yyVals[-1+yyTop]).getPosition(), ((ListNode)yyVals[-1+yyTop]), null, rest, null, (BlockArgNode) null); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { RestArgNode rest = new UnnamedRestArgNode(((ListNode)yyVals[-1+yyTop]).getPosition(), null, support.getCurrentScope().addVariable("*")); yyVal = support.new_args(((ListNode)yyVals[-1+yyTop]).getPosition(), ((ListNode)yyVals[-1+yyTop]), null, rest, null, (ArgsTailHolder) null); return yyVal; } };
public ArgsTailHolder new_args_tail(ISourcePosition position, ListNode keywordArg, ByteList keywordRestArgName, BlockArgNode blockArg) { if (keywordRestArgName == null) return new ArgsTailHolder(position, keywordArg, null, blockArg); ByteList restKwargsName = keywordRestArgName; String raw = restKwargsName.toString(); int slot = currentScope.exists(raw); if (slot == -1) slot = currentScope.addVariable(raw); KeywordRestArgNode keywordRestArg = new KeywordRestArgNode(position, symbolID(restKwargsName), slot); return new ArgsTailHolder(position, keywordArg, keywordRestArg, blockArg); }
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { /* FIXME: bytelist_love: somewhat silly to remake the empty bytelist over and over but this type should change (using null vs "" is a strange distinction).*/ yyVal = new UnnamedRestArgNode(lexer.getPosition(), support.symbolID(new ByteList(new byte[] {})), support.getCurrentScope().addVariable("*")); return yyVal; } };
public ArgsTailHolder new_args_tail(ISourcePosition position, ListNode keywordArg, ByteList keywordRestArgName, BlockArgNode blockArg) { if (keywordRestArgName == null) return new ArgsTailHolder(position, keywordArg, null, blockArg); ByteList restKwargsName = keywordRestArgName; String raw = restKwargsName.toString(); int slot = currentScope.exists(raw); if (slot == -1) slot = currentScope.addVariable(raw); KeywordRestArgNode keywordRestArg = new KeywordRestArgNode(position, symbolID(restKwargsName), slot); return new ArgsTailHolder(position, keywordArg, keywordRestArg, blockArg); }
@Override public Object execute(ParserSupport support, RubyLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { /* FIXME: bytelist_love: somewhat silly to remake the empty bytelist over and over but this type should change (using null vs "" is a strange distinction).*/ yyVal = new UnnamedRestArgNode(lexer.getPosition(), support.symbolID(new ByteList(new byte[] {})), support.getCurrentScope().addVariable("*")); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { String identifier = (String) ((Token)yyVals[-2+yyTop]).getValue(); if (support.getCurrentScope().getLocalScope().isDefined(identifier) >= 0) { support.yyerror("duplicate optional argument name"); } support.getCurrentScope().getLocalScope().addVariable(identifier); yyVal = support.assignable(((Token)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { String identifier = (String) ((Token)yyVals[-2+yyTop]).getValue(); if (support.getCurrentScope().getLocalScope().isDefined(identifier) >= 0) { support.yyerror("duplicate optional argument name"); } support.getCurrentScope().getLocalScope().addVariable(identifier); yyVal = support.assignable(((Token)yyVals[-2+yyTop]), ((Node)yyVals[0+yyTop])); return yyVal; } };
public BlockArgNode newBlockArg(ISourcePosition position, Token nameToken) { String identifier = (String) nameToken.getValue(); if (getCurrentScope().getLocalScope().isDefined(identifier) >= 0) { throw new SyntaxException(PID.BAD_IDENTIFIER, position, lexer.getCurrentLine(), "duplicate block argument name"); } return new BlockArgNode(position, getCurrentScope().getLocalScope().addVariable(identifier), identifier); }
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { String identifier = (String) ((Token)yyVals[0+yyTop]).getValue(); if (support.getCurrentScope().getLocalScope().isDefined(identifier) >= 0) { support.yyerror("duplicate argument name"); } int location = support.getCurrentScope().getLocalScope().addVariable(identifier); yyVal = new ArgumentNode(((Token)yyVals[0+yyTop]).getPosition(), identifier, location); return yyVal; } };
@Override public Object execute(ParserSupport support, RubyYaccLexer lexer, Object yyVal, Object[] yyVals, int yyTop) { String identifier = (String) ((Token)yyVals[0+yyTop]).getValue(); if (support.getCurrentScope().getLocalScope().isDefined(identifier) >= 0) { support.yyerror("duplicate rest argument name"); } yyVal = new RestArgNode(((Token)yyVals[-1+yyTop]).getPosition(), (String) ((Token)yyVals[0+yyTop]).getValue(), support.getCurrentScope().getLocalScope().addVariable(identifier)); return yyVal; } };