Здравствуйте,
Основная задача - сделать разделяемую между двумя и более скриптами переменную
Подробнее можно сказать так:
1) Есть 2 объекта класса QScriptEngine, т.е. 2 независимых скрипта
2) Каждому из них доступна ф-я, которая создаёт переменную по имени. Причём эта переменная создаётся только в том случае, если её ещё нет. Проверка осуществляется по имени.
3) Любой скрипт может менять переменную, причём, её новое значение, должен увидеть 2-й скрипт.
Проблемная часть в коде выглядит так:
C++ (Qt)
	QScriptValue getSet( QScriptContext *ctx, QScriptEngine *eng )
	{
		if( ctx->argumentCount() == 0 )
			return m_var;
		m_var = ctx->argument(0);
		return m_var;
	}
 
Сам код работает без ошибок. Но когда один скрипт с его помощью установил значение переменной m_var, а другой её взял и пытается использовать, вот тут и начинаются проблеммы. В отладчике видно, что на некотором этапе происходит проверка, является ли переменная созданной в скрипте, если да, то является ли она принадлежащей данному скрипту и если нет то дальше работать нехотим и получите ASSERT.
После долгих исканий я написал код при возврате в таком виде:
C++ (Qt)
	QScriptValue mkNew( const QScriptValue &v, QScriptEngine *eng )
	{
		QScriptEngine *pengOrig = v.engine();
		return (v.isValid()==false
				? eng->undefinedValue()
				: ((pengOrig==NULL || pengOrig==eng)
					? v
					: (v.isUndefined()
						? eng->undefinedValue()
						: (v.isNull()
							? eng->nullValue()
							: eng->toObject( v )
						  )
					  )
				  )
				);
	}
	QScriptValue getSet( QScriptContext *ctx, QScriptEngine *eng )
	{
		if( ctx->argumentCount() == 0 )
			return mkNew( m_var, eng );
		m_var = ctx->argument(0);
		return m_var;
	}
 
И радовался, пока не попытался так передать массив (объект не пробовал, но думаю будет тоже самое). пока ещё долго отладчиком не ходил, но по аналогии думаю, что проблемма в том, что мой код более-менее нормально преобразовывает только верхушку иерархии, а внутренние объекты так и остаются пренадлежащими другому скрипту, что опять вызывает проблеммы.
Неужели нужно всю иерархию вручную преобразовывать?
Есть ли готовый способ нужного мне преобразования?