In accordance with one embodiment of the present invention, a technique
for supporting dynamically typed languages in typed assembly languages is
provided. According to one embodiment, a new bytecode instruction,
"invokedynamic," supplements "invokevirtual." Prior to the execution of a
typed assembly language program, it is determined whether a particular
method-invoking instruction is a particular kind of instruction. If the
instruction is of the particular kind, then the verifier refrains from
performing the usual pre-execution type checking of the arguments that
will be on the operand stack when the instruction is executed.
Consequently, the bytecode instruction may be used to represent the
invocation of a method that might not indicate formal parameter types.
Because the verifier performs less stringent type checking in response to
such an instruction, the JVM can execute assembly language programs that
were generated based on source code that was written in a dynamically
typed language.