2011-08-29 3 views
1

공식 릴리스가 오래되어 더 이상 부스트의 최신 버전으로 컴파일되지 않아서 현재 luabind를 사용하고 있습니다. 특히 https://github.com/rpavlik/luabind입니다.luabind :: object의 이상한 문제

나는 그물에서 어디에도 찾을 수없는 매우 이상한 문제를 겪고 있습니다. 나는 그 사건을 매우 간단한 시나리오로 축소 할 수 있었다.

하나 개의 모듈에서 내가 가진 것

luabind::object value; 

void functionA() { 
    lua_pushstring(L,"yo"); 
    luabind::object temp(luabind::from_stack(L,-1)); 
    value = temp; 
} 

을 다른 모듈에서 내가 가진 것 : 나는 루아에서 functionA 및 functionB 사용할 수 있도록하면

void functionB() { 
    printf("My Value: %s\n",luabind::object_cast<const char*>(value)); 
    printf("My Original value type: %d\n",luabind::type(value)); 
    value.push(L); 
    luabind::object a1(luabind::from_stack(L,-1)); 
    printf("My Copy value type: %d\n",luabind::type(a1)); 
} 

을하고 연속적으로 그들에게 전화, 출력은 것 be :

My Value: yo 
My Original value type: 4 
My Copy value type: 0 

여러분도 알다시피, 객체는 여전히 루아 바인드가 할 수있는 것을 참조합니다. 인쇄. 하지만 스택에 밀어 넣고 스택 개체에서 새 개체를 만들려고하면 결과가 무효가됩니다.

이 경우에만 발생합니다. 모든 것을 하나의 함수에 넣으면 잘 작동합니다. 코드를 같은 모듈의 함수에 넣으면 잘 작동합니다. 독립형 테스트 프로젝트를 아직 만들지는 못했지만, 내 코드를 간섭하는 것으로 생각할 수 없다. 함수는 루아에서 직접 연속적으로 호출된다.

내가 잘못 했나요? 아니면이 버그입니까? 그리고 그것이 버그라면, 나는 이런 식으로 들어 본 적이 없다.

+0

Luabind를 제거하고 Lua C API를 사용하여 테스트 케이스를 단순화 할 수 있다면 궁금 할 것입니다. (분명히 할 수 있습니다 - 복사/붙여 넣기 -하지만 흥미로운 "버그" 루아 또는 루아 바인드에서). –

+0

@ 존 Zwinck : 가능성이 아니라, 루아 바인드에 의해 래핑 된 클래스를 사용하여 보는 것은 버그를 일으키는 전제 조건입니다. luabind에 의해 래핑 된 클래스에 함수를 두는 방법을 이해하려고하는지 (함수 자체는 래핑 할 필요가 없음) 동작을 변경시킬 수 있는지 알고 싶지 않습니다. – cib

답변

0

테스트 케이스가 불완전한 것으로 보입니다. functionB는 또한 루아 바인드에 의해 래핑 된 클래스에 있어야합니다. 클래스의 함수를 프록시 함수로 만들고 거기에서 코드를 포함하는 전역 함수를 호출하여 문제를 "해결할"수있었습니다.

+0

그러면 버그 같아 보입니다. 왜 그 말을 들어 보지 못했는지 확신 할 수 없습니다. 아마도 그 특별한 시나리오가 자주 이루어지지 않았을 수도 있습니다. 이것을 https://github.com/rpavlik/luabind/blob/master/test/test_object_identity.cpp와 같은 작은 테스트 프로그램으로 얻을 수 있다면 내 지사의 테스트 스위트에 추가 할 수 있습니다. luabind 메일 링리스트에 질문 해보십시오. 특히 자동 테스트가있는 경우 - 알고있는 사람이있을 수 있습니다. –