MdsObject* int_int_(MdsObject* l, MdsObject* r, OperatorType op){ MdsIntObject* lint = (MdsIntObject*)l; MdsIntObject* rint = (MdsIntObject*)r; int a = lint->get_value(), b = rint->get_value(); int res; if (op == ADD) res = a + b; else if (op == MINUS) res = a - b; else if (op == TIMES) res = a * b; else if (op == DIV) res = a / b; else if (op == EQUAL) res = a == b ? 1 : 0; else if (op == NEQ) res = a != b ? 1 : 0; else if (op == GREAT) res = a > b ? 1 : 0; else if (op == LESS) res = a < b ? 1 : 0; else if (op == GE) res = a >= b ? 1 : 0; else if (op == LE) res = a <= b ? 1 : 0; else return NULL; MdsIntObject* newi = get_int_object(res); return newi; }
MdsObject* string_string_(MdsObject* l, MdsObject* r, OperatorType op){ MdsStringObject* lstr = (MdsStringObject*)l; MdsStringObject* rstr = (MdsStringObject*)r; string a = lstr->get_value(); string b = rstr->get_value(); if (op == ADD) { string res = a + b; MdsStringObject* news = get_string_object(res.data()); return news; } int res; if (op == EQUAL) res = a == b ? 1 : 0; else if (op == NEQ) res = a != b ? 1 : 0; else if (op == GREAT) res = a > b ? 1 : 0; else if (op == LESS) res = a < b ? 1 : 0; else if (op == GE) res = a >= b ? 1 : 0; else if (op == LE) res = a <= b ? 1 : 0; else return NULL; MdsIntObject* newi = get_int_object(res); return newi; }
static pyc_object *get_object(RBuffer *buffer) { RListIter *ref_idx; bool error = false; pyc_object *ret = NULL; ut8 code = get_ut8 (buffer, &error); ut8 flag = code & FLAG_REF; ut8 type = code & ~FLAG_REF; if (error) return NULL; if (flag) { ret = get_none_object (); if (!ret) return NULL; ref_idx = r_list_append (refs, ret); if (!ref_idx) { free (ret); return NULL; } } switch (type) { case TYPE_NULL: return NULL; case TYPE_TRUE: return get_true_object (); case TYPE_FALSE: return get_false_object (); case TYPE_NONE: return get_none_object (); case TYPE_REF: return get_ref_object (buffer); case TYPE_SMALL_TUPLE: ret = get_small_tuple_object (buffer); break; case TYPE_TUPLE: ret = get_tuple_object (buffer); break; case TYPE_STRING: ret = get_string_object (buffer); break; case TYPE_CODE_v1: ret = get_code_object (buffer); break; case TYPE_INT: ret = get_int_object (buffer); break; case TYPE_ASCII_INTERNED: ret = get_ascii_interned_object (buffer); break; case TYPE_SHORT_ASCII: ret = get_short_ascii_object (buffer); break; case TYPE_ASCII: ret = get_ascii_object (buffer); break; case TYPE_SHORT_ASCII_INTERNED: ret = get_short_ascii_interned_object (buffer); break; case TYPE_BINARY_COMPLEX: case TYPE_ELLIPSIS: case TYPE_BINARY_FLOAT: case TYPE_CODE_v0: case TYPE_COMPLEX: case TYPE_STRINGREF: case TYPE_DICT: case TYPE_FLOAT: case TYPE_FROZENSET: case TYPE_STOPITER: case TYPE_INT64: case TYPE_INTERNED: case TYPE_LIST: case TYPE_LONG: case TYPE_SET: case TYPE_UNICODE: case TYPE_UNKNOWN: eprintf ("Get not implemented for type %x\n", type); return NULL; default: eprintf ("Undefined type in get_object (%x)\n", type); return NULL; } if (flag) { free_object (ref_idx->data); ref_idx->data = copy_object (ret); } return ret; }