tuple.__add__(tuple)
This commit is contained in:
parent
8314e4c35d
commit
87f6c316bd
@ -206,6 +206,25 @@ KRK_METHOD(tuple,__repr__,{
|
|||||||
return finishStringBuilder(&sb);
|
return finishStringBuilder(&sb);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
KRK_METHOD(tuple,__add__,{
|
||||||
|
METHOD_TAKES_EXACTLY(1);
|
||||||
|
if (!IS_tuple(argv[1]))
|
||||||
|
return krk_runtimeError(vm.exceptions->typeError,
|
||||||
|
"can only concatenate tuple (not \"%s\") to tuple",
|
||||||
|
krk_typeName(argv[1]));
|
||||||
|
|
||||||
|
KrkTuple * other = AS_tuple(argv[1]);
|
||||||
|
KrkTuple * out = krk_newTuple(self->values.count + other->values.count);
|
||||||
|
krk_push(OBJECT_VAL(out));
|
||||||
|
for (size_t i = 0; i < self->values.count; ++i) {
|
||||||
|
out->values.values[out->values.count++] = self->values.values[i];
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < other->values.count; ++i) {
|
||||||
|
out->values.values[out->values.count++] = other->values.values[i];
|
||||||
|
}
|
||||||
|
return krk_pop();
|
||||||
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Iterator over the values in a tuple.
|
* @brief Iterator over the values in a tuple.
|
||||||
* @extends KrkInstance
|
* @extends KrkInstance
|
||||||
@ -281,6 +300,7 @@ void _createAndBind_tupleClass(void) {
|
|||||||
BIND_METHOD(tuple,__le__);
|
BIND_METHOD(tuple,__le__);
|
||||||
BIND_METHOD(tuple,__ge__);
|
BIND_METHOD(tuple,__ge__);
|
||||||
BIND_METHOD(tuple,__hash__);
|
BIND_METHOD(tuple,__hash__);
|
||||||
|
BIND_METHOD(tuple,__add__);
|
||||||
krk_defineNative(&tuple->methods, "__init__", _tuple_init);
|
krk_defineNative(&tuple->methods, "__init__", _tuple_init);
|
||||||
krk_defineNative(&tuple->methods, "__str__", FUNC_NAME(tuple,__repr__));
|
krk_defineNative(&tuple->methods, "__str__", FUNC_NAME(tuple,__repr__));
|
||||||
krk_finalizeClass(tuple);
|
krk_finalizeClass(tuple);
|
||||||
|
Loading…
Reference in New Issue
Block a user