Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}