private GetCallSiteArguments ( |
||
targetExpression | ||
리턴 | ReadOnlyCollection |
internal ReadOnlyCollection<Expression>/*!*/ GetCallSiteArguments(Expression/*!*/ targetExpression) {
// context, target, arguments:
var result = new AstExpressions(CallSiteArgumentCount);
if (_hasScopeOrContextArg) {
result.Add(_signature.HasScope ? MetaScope.Expression : MetaContext.Expression);
}
result.Add(targetExpression);
for (int j = FirstArgumentIndex; j < _args.Length; j++) {
result.Add(_args[j].Expression);
}
return result.ToReadOnlyCollection();
}
// Only used if method_missing() is called directly on the main singleton. internal override void BuildCallNoFlow(MetaObjectBuilder/*!*/ metaBuilder, CallArguments/*!*/ args, string/*!*/ name) { var globalScope = args.TargetClass.GlobalScope; // TODO: this just calls super for now, so it doesn't look up the scope: metaBuilder.Result = AstUtils.LightDynamic( new RubyCallAction(globalScope.Context, Symbols.MethodMissing, new RubyCallSignature( args.Signature.ArgumentCount, args.Signature.Flags | RubyCallFlags.HasImplicitSelf | RubyCallFlags.IsSuperCall ) ), typeof(object), args.GetCallSiteArguments(args.TargetExpression) ); }