src/share/vm/c1/c1_Instruction.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/c1/c1_Instruction.cpp Mon Feb 15 19:35:48 2010
--- new/src/share/vm/c1/c1_Instruction.cpp Mon Feb 15 19:35:48 2010
*** 1,7 ****
--- 1,7 ----
/*
! * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved.
! * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 332,348 ****
--- 332,349 ----
// Implementation of Invoke
Invoke::Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args,
! int vtable_index, ciMethod* target, ValueStack* state_before)
: StateSplit(result_type)
, _code(code)
, _recv(recv)
, _args(args)
, _vtable_index(vtable_index)
, _target(target)
+ , _state_before(state_before)
{
set_flag(TargetIsLoadedFlag, target->is_loaded());
set_flag(TargetIsFinalFlag, target_is_loaded() && target->is_final_method());
set_flag(TargetIsStrictfpFlag, target_is_loaded() && target->is_strict());
*** 353,371 ****
--- 354,382 ----
// provide an initial guess of signature size.
_signature = new BasicTypeList(number_of_arguments() + (has_receiver() ? 1 : 0));
if (has_receiver()) {
_signature->append(as_BasicType(receiver()->type()));
+ } else if (is_invokedynamic()) {
+ // Add the synthetic MethodHandle argument to the signature.
+ _signature->append(T_OBJECT);
}
for (int i = 0; i < number_of_arguments(); i++) {
ValueType* t = argument_at(i)->type();
BasicType bt = as_BasicType(t);
_signature->append(bt);
}
}
+ void Invoke::state_values_do(void f(Value*)) {
+ StateSplit::state_values_do(f);
+ if (state_before() != NULL) state_before()->values_do(f);
+ if (state() != NULL) state()->values_do(f);
+ }
+
+
// Implementation of Contant
intx Constant::hash() const {
if (_state == NULL) {
switch (type()->tag()) {
case intTag:
src/share/vm/c1/c1_Instruction.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File