###############################################################################
# Copyright (c) 2000, 2009 IBM Corporation and others.
#
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

AndAssignmentOperator_operator_1='&=\' operator
AndOperator_____operator_1='&\' operator
ArrayAccess_0=Null pointer exception: attempt to access null array object
ArrayAccess_array_access_1=array access
ArrayAccess_illegal_index=Attempt to access illegal array index: {0}
ArrayAllocation_array_allocation_1=array allocation
ArrayInitializerInstruction_array_initializer_1=array initializer
AssignmentOperator_operator_1='=\' operator
Cast_ClassCastException__Cannot_cast__0__as__1___1=ClassCastException: Cannot cast {0} to {1}
Cast_cast_3=cast
ConditionalJump_conditional_jump_1=conditional jump
Constructor_constructor__1=constructor
Run_Remote_1=run remote code
LocalVariableCreation_create_local_variable__0___1___1=Create local variable {1} {0}
DivideAssignmentOperator_operator_1='/=\' operator
DivideOperator_Divide_by_zero_1=Divide by zero
DivideOperator_Divide_by_zero_2=Divide by zero
DivideOperator______operator_3='/\' operator
EqualEqualOperator_operator_1='==\' operator
GreaterEqualOperator_operator_1='>=\' operator
GreaterOperator______operator_1='>\' operator
InstanceOfOperator__instanceof___operator_3='instanceof\' operator

Jump_jump_1=jump
LeftShiftAssignmentOperator_operator_1='<<=\' operator
LeftShiftOperator_______operator_1='<<\' operator
LessEqualOperator_operator_1='<=\' operator
LessOperator______operator_1='<\' operator
MinusAssignmentOperator_operator_1='-=\' operator
MinusOperator______operator_1='-\' operator
MultiplyAssignmentOperator_operator_1='*=\' operator
MultiplyOperator______operator_1='*\' operator
NoOp_no_op_1=no op
NotOperator______operator_1='!\' operator
OrAssignmentOperator_operator_1='|=\' operator
OrOperator______operator_1='|\' operator
PlusAssignmentOperator_operator_1='+=\' operator
PlusOperator______operator_2='+\' operator
Pop_pop_1=pop
PostfixMinusMinusOperator_postfix________operator_1=postfix \'--\' operator
PostfixPlusPlusOperator_postfix________operator_1=postfix \'++\' operator
PrefixMinusMinusOperator_prefix________operator_1=prefix \'--\' operator
PrefixPlusPlusOperator_prefix________operator_1=prefix \'++\' operator
PushBoolean_push__1=push
PushFieldVariable_0=Field access attempt on a null object
PushChar_push__1=push
PushClassLiteralValue_push_class_literal_value_1=push class literal value
PushDouble_push__1=push
PushFieldVariable_Cannot_find_the_field__0__for_the_object__1__1=Cannot find the field {0} for the object {1}
PushFieldVariable_push_field__0__2=push field {0}
PushArrayLength_push_array_length__1=push array length
PushFloat_push__1=push
PushInt_push__1=push
PushLong_push__1=push
PushNull_push___null__1=push \'null'
PushString_push__1=push
PushThis_push___this__1=push \'this'
PushThis_Unable_to_retrieve_the_correct_enclosing_instance_of__this__2=Unable to retrieve the correct enclosing instance of \'this'
PushType_push_type__1=push type
RemainderAssignmentOperator_operator_1='%=\' operator
RemainderOperator_Divide_by_zero_1=Divide by zero
RemainderOperator_Divide_by_zero_2=Divide by zero
RemainderOperator______operator_3='%\' operator
ReturnInstruction_return=return
RightShiftAssignmentOperator_operator_1='>>=\' operator
RightShiftOperator_______operator_1='>>\' operator
TwiddleOperator______operator_1='~\' operator
UnaryMinusOperator_unary_minus_operator_1=unary minus operator
UnaryPlusOperator_unary_plus_operator_1=unary plus operator
UnsignedRightShiftAssignmentOperator_operator_1='>>>=\' operator
UnsignedRightShiftOperator________operator_1='>>>\' operator
XorAssignmentOperator_operator_1='^=\' operator
XorOperator______operator_1='^\' operator
PushLocalVariable_Cannot_find_the_variable____1=Cannot find the variable {0}:
PushLocalVariable_push____0___2=push \"{0}\"
PushStaticFieldVariable_Cannot_find_the_field__0__in__1__1=Cannot find the field {0} in {1}
PushStaticFieldVariable_push_static_field__0__2=push static field {0}
SendMessage_Attempt_to_send_a_message_to_a_non_object_value_1=Attempt to send a message to a non object value
SendMessage_send_message__0___1__2=send message {0} {1}
SendStaticMessage_Cannot_send_a_static_message_to_a_non_class_type_object_1=Cannot send a static message to a non class type object
SendStaticMessage_send_static_message__0___1__2=send static message {0} {1}
Instruction_No_type=could not resolve type: {0}
InstanceOfOperator_No_class_object=could not get the class object for {0}
Cast_No_class_object=could not get the class object for {0}
LocalVariableCreation_Execution_failed___VM_disconnected__1=Execution failed - VM disconnected.
