Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[`-D scriptable`]: functions with raw pointer arguments or return type don't compile

Abierto
#1,222 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
cpp
Área
compilers

Línea de trabajo

Comienza con los fragmentos de C++ generados para -D scriptable y sigue StackContext::runObject, StackContext::getObject y StackContext::returnObject. Reproduce los casos de punteros sin procesar y tipos definidos usando hxvlc o hxdiscord_rpc; después, inspecciona cómo los wrappers generados pasan y devuelven valores. La tarea estará terminada cuando estas firmas compilen sin conversiones no válidas de Dynamic a puntero o a tipos definidos.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I have noticed an issue when compiling a project with -D scriptable that uses hxvlc and hxdiscord_rpc.
Seemingly functions that have arguments that are raw pointers or a return type that is a raw pointer, don't compile.
Also functions that return a defined type from raw cpp code, also don't compile.

For example: It tries to cast Dynamic to void*, which isn't possible. The reason this happens is because it uses StackContext::runObject and StackContext::getObject return Dynamic.

generated cpp code snippets:

void* videoLock( void** planes ) {
	if (__scriptVTable[140] ) {
		::hx::CppiaCtx *__ctx = ::hx::CppiaCtx::getCurrent();
		::hx::AutoStack __as(__ctx);
		__ctx->pushObject(this);
		__ctx->pushObject(planes);
		return __ctx->runObject(__scriptVTable[140] ); // returns Dynamic, but we need void*
	}  else return Video_obj::videoLock(planes);return null();}

// ...

template<bool _HX_SUPER=false>
static void CPPIA_CALL __s_videoLock(::hx::CppiaCtx *ctx) {
ctx->returnObject( _HX_SUPER ? ((Video_obj*)ctx->getThis())->Video_obj::videoLock(ctx->getObject(sizeof(void*))) : ((Video_obj*)ctx->getThis())->videoLock(ctx->getObject(sizeof(void*))));
}
 DiscordRichPresence buildPresence(  ::Dynamic params ) {
if (__scriptVTable[6] ) {
	::hx::CppiaCtx *__ctx = ::hx::CppiaCtx::getCurrent();
	::hx::AutoStack __as(__ctx);
	__ctx->pushObject(this);
	__ctx->pushObject(params);
	return __ctx->runObject(__scriptVTable[6] ); // returns Dynamic, but we need DiscordRichPresence
}  else return DiscordClient_obj::buildPresence(params);return null();}

// ...

template<bool _HX_SUPER=false>
static void CPPIA_CALL __s_buildPresence(::hx::CppiaCtx *ctx) {
ctx->returnObject( _HX_SUPER ? ((DiscordClient_obj*)ctx->getThis())->DiscordClient_obj::buildPresence(ctx->getObject(sizeof(void*))) : ((DiscordClient_obj*)ctx->getThis())->buildPresence(ctx->getObject(sizeof(void*))));
}
Lenguaje dominante
C++
Estrellas
329
Forks
230
Merge medio
2 d 16 h
PR fusionados (30 d)
4

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de HaxeFoundation/hxcpp

Todos los issues de HaxeFoundation/hxcpp

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.