예제 #1
0
파일: jassbind.cpp 프로젝트: actboy168/YDWE
	void             push_string(lua_State* L, jass::jstring_t value)
	{
		if (value < 0x10000) {
			value = get_jass_vm()->string_table->get(value);
		}
		lua_pushstring(L, jass::from_trigstring(jass::from_string(value)));
	}
예제 #2
0
파일: jass.cpp 프로젝트: hjhong/YDWE
	void handle_set_ref(jass::jhandle_t h, bool dec)
	{
		jass_vm_t* vm = get_jass_vm();
		if (vm && vm->set_handle_reference)
		{
			fast_call<void>(vm->set_handle_reference, h, dec ? 1 : 0, vm->handle_table);
		}
	}
예제 #3
0
파일: jass.cpp 프로젝트: hjhong/YDWE
	const char* from_stringid(uint32_t strid)
	{
		return get_jass_vm()->symbol_table->string_table->at(strid)->str_;
	}
예제 #4
0
파일: common.cpp 프로젝트: actboy168/YDWE
	int jass_call_native_function(lua_State* L, const jass::func_value* nf, uintptr_t func_address)
	{
		LUA_PERFTRACE(kJassCall);

		if (!lua_isyieldable(L) && nf->has_sleep())
		{
			printf("Wanring: %s is disable.\n", lua_tostring(L, lua_upvalueindex(1)));
			lua_pushnil(L);
			return 1;
		}

		size_t param_size = nf->get_param().size();

		if ((int)param_size > lua_gettop(L))
		{
			lua_pushnil(L);
			return 1;
		}

		jass::call_param param(param_size);

		for (size_t i = 0; i < param_size; ++i)
		{
			jass::variable_type vt = nf->get_param()[i];
			switch (vt)
			{
			case jass::TYPE_BOOLEAN:
				param.push(i, jassbind::read_boolean(L, i + 1));
				break;
			case jass::TYPE_CODE:
				param.push(i, jassbind::read_code(L, i + 1));
				break;
			case jass::TYPE_HANDLE:
				param.push(i, jassbind::read_handle(L, i + 1));
				break;
			case jass::TYPE_INTEGER:
				param.push(i, jassbind::read_integer(L, i + 1));
				break;
			case jass::TYPE_REAL:
				param.push_real(i, jassbind::read_real(L, i + 1));
				break;
			case jass::TYPE_STRING:
				param.push(i, lua_tostring(L, i + 1));
				break;
			default:
				param.push(i, 0);
				break;
			}
		}

		if (func_address == 0) func_address = nf->get_address();

		uintptr_t retval = 0;
		if (runtime::catch_crash)
		{
			retval = safe_jass_call(L, func_address, param.data(), param_size);
		}
		else
		{
			retval = jass::call(func_address, param.data(), param_size);
		}


		if (nf->get_return() == jass::TYPE_STRING)
		{
			retval = get_jass_vm()->string_table->get(retval);
		}

		return jass_push(L, nf->get_return(), retval) ? 1 : 0;
	}