Changeset View
Changeset View
Standalone View
Standalone View
src/script/interpreter.cpp
Show First 20 Lines • Show All 293 Lines • ▼ Show 20 Lines | |||||
static bool IsOpcodeDisabled(opcodetype opcode, uint32_t flags) { | static bool IsOpcodeDisabled(opcodetype opcode, uint32_t flags) { | ||||
switch (opcode) { | switch (opcode) { | ||||
case OP_CAT: | case OP_CAT: | ||||
case OP_SPLIT: | case OP_SPLIT: | ||||
case OP_INVERT: | case OP_INVERT: | ||||
case OP_2MUL: | case OP_2MUL: | ||||
case OP_2DIV: | case OP_2DIV: | ||||
case OP_MUL: | case OP_MUL: | ||||
case OP_DIV: | |||||
case OP_MOD: | |||||
case OP_LSHIFT: | case OP_LSHIFT: | ||||
case OP_RSHIFT: | case OP_RSHIFT: | ||||
// Disabled opcodes. | // Disabled opcodes. | ||||
return true; | return true; | ||||
case OP_AND: | case OP_AND: | ||||
case OP_OR: | case OP_OR: | ||||
case OP_XOR: | case OP_XOR: | ||||
case OP_NUM2BIN: | case OP_NUM2BIN: | ||||
case OP_BIN2NUM: | case OP_BIN2NUM: | ||||
case OP_DIV: | |||||
case OP_MOD: | |||||
// Opcodes that have been reenabled. | // Opcodes that have been reenabled. | ||||
if ((flags & SCRIPT_ENABLE_MONOLITH_OPCODES) == 0) { | if ((flags & SCRIPT_ENABLE_MONOLITH_OPCODES) == 0) { | ||||
return true; | return true; | ||||
} | } | ||||
default: | default: | ||||
break; | break; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 599 Lines • ▼ Show 20 Lines | try { | ||||
break; | break; | ||||
} | } | ||||
popstack(stack); | popstack(stack); | ||||
stack.push_back(bn.getvch()); | stack.push_back(bn.getvch()); | ||||
} break; | } break; | ||||
case OP_ADD: | case OP_ADD: | ||||
case OP_SUB: | case OP_SUB: | ||||
case OP_DIV: | |||||
case OP_MOD: | |||||
case OP_BOOLAND: | case OP_BOOLAND: | ||||
case OP_BOOLOR: | case OP_BOOLOR: | ||||
case OP_NUMEQUAL: | case OP_NUMEQUAL: | ||||
case OP_NUMEQUALVERIFY: | case OP_NUMEQUALVERIFY: | ||||
case OP_NUMNOTEQUAL: | case OP_NUMNOTEQUAL: | ||||
case OP_LESSTHAN: | case OP_LESSTHAN: | ||||
case OP_GREATERTHAN: | case OP_GREATERTHAN: | ||||
case OP_LESSTHANOREQUAL: | case OP_LESSTHANOREQUAL: | ||||
Show All 12 Lines | try { | ||||
case OP_ADD: | case OP_ADD: | ||||
bn = bn1 + bn2; | bn = bn1 + bn2; | ||||
break; | break; | ||||
case OP_SUB: | case OP_SUB: | ||||
bn = bn1 - bn2; | bn = bn1 - bn2; | ||||
break; | break; | ||||
case OP_DIV: | |||||
// denominator must not be 0 | |||||
if (bn2 == 0) { | |||||
return set_error(serror, | |||||
SCRIPT_ERR_DIV_BY_ZERO); | |||||
} | |||||
bn = bn1 / bn2; | |||||
break; | |||||
case OP_MOD: | |||||
// divisor must not be 0 | |||||
if (bn2 == 0) { | |||||
return set_error(serror, | |||||
SCRIPT_ERR_MOD_BY_ZERO); | |||||
} | |||||
bn = bn1 % bn2; | |||||
break; | |||||
case OP_BOOLAND: | case OP_BOOLAND: | ||||
bn = (bn1 != bnZero && bn2 != bnZero); | bn = (bn1 != bnZero && bn2 != bnZero); | ||||
break; | break; | ||||
case OP_BOOLOR: | case OP_BOOLOR: | ||||
bn = (bn1 != bnZero || bn2 != bnZero); | bn = (bn1 != bnZero || bn2 != bnZero); | ||||
break; | break; | ||||
case OP_NUMEQUAL: | case OP_NUMEQUAL: | ||||
bn = (bn1 == bn2); | bn = (bn1 == bn2); | ||||
▲ Show 20 Lines • Show All 803 Lines • Show Last 20 Lines |