Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

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

Aperta
#1,222 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
cpp
Ambito
compilers

Direzione di ricerca

Inizia con gli snippet C++ generati per -D scriptable e traccia StackContext::runObject, StackContext::getObject e StackContext::returnObject. Riproduci i casi di puntatori raw e tipi definiti usando hxvlc o hxdiscord_rpc, quindi esamina come i wrapper generati passano e restituiscono i valori. Il lavoro è completato quando queste firme compilano senza conversioni non valide da Dynamic a puntatore o a tipo definito.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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*))));
}
Lingua principale
C++
Stelle
330
Fork
230
Merge medio
1g 6h
PR unite (30g)
9

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di HaxeFoundation/hxcpp

Tutte le issue di HaxeFoundation/hxcpp

Issue simili

Altre issue su C++

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.