Skip to content

Commit 87532ce

Browse files
committed
1、优化GC回收处理
2、异常捕获优化,修正原生方法执行异常后无lua异常报告问题。 3、增加TmpValue,用于解决Table类型原生转换后再回传lua产生的变化问题。 4、修复iOS/OSX下父类属性在子类重写后无法正常调用问题。 Former-commit-id: 46d7d90dcb985e6fee55117c1ca372b4508bafb1
1 parent 5ae0103 commit 87532ce

53 files changed

Lines changed: 1926 additions & 505 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Sample/Android/app/app.iml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,6 @@
6969
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
7070
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
7171
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
72-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
73-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
74-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
75-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
76-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
77-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
78-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
79-
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
8072
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
8173
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
8274
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
@@ -85,6 +77,14 @@
8577
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
8678
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
8779
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
80+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
81+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
82+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
83+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
84+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
85+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
86+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
87+
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
8888
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
8989
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
9090
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Person.prototype.age = {
2+
3+
get = function (self)
4+
return self._age;
5+
end,
6+
set = function (self, value)
7+
self._age = value;
8+
end
9+
10+
};
11+
12+
local p = Person.create(); p.age = 12; print (p.age);

Sample/Android/app/src/main/java/cn/vimfung/luascriptcore/sample/MainActivity.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,19 @@ public LuaValue onExecute(LuaValue[] arguments) {
217217
}
218218
});
219219
}
220+
221+
Button definedPropertyBtn = (Button) findViewById(R.id.definedPropertyButton);
222+
if (definedPropertyBtn != null)
223+
{
224+
definedPropertyBtn.setOnClickListener(new View.OnClickListener() {
225+
@Override
226+
public void onClick(View v) {
227+
228+
_luaContext.evalScriptFromFile("defineProperty.lua");
229+
230+
}
231+
});
232+
}
220233
}
221234

222235
/**

Sample/Android/app/src/main/res/layout/activity_main.xml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,20 @@
126126
android:layout_marginTop="29dp"
127127
android:layout_alignParentRight="true"
128128
android:layout_alignParentEnd="true" />
129+
130+
<Button
131+
android:layout_width="wrap_content"
132+
android:layout_height="wrap_content"
133+
android:text="Defined Property"
134+
android:id="@+id/definedPropertyButton"
135+
android:background="#4d5563"
136+
android:textColor="#ffffff"
137+
android:layout_below="@+id/coroutineButton"
138+
android:layout_alignParentLeft="true"
139+
android:layout_alignParentStart="true"
140+
android:layout_marginTop="29dp"
141+
android:layout_alignParentRight="true"
142+
android:layout_alignParentEnd="true" />
129143
</RelativeLayout>
130144
</ScrollView>
131145
</RelativeLayout>

Source/Android/luascriptcore/src/main/java/cn/vimfung/luascriptcore/LuaContext.java

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -410,33 +410,6 @@ public void registerMethod(String methodName, LuaMethodHandler handler)
410410
}
411411
}
412412

413-
// /**
414-
// * 注册模块
415-
// * @param moduleClass 模块类
416-
// */
417-
// public void registerModule(Class<? extends LuaModule> moduleClass)
418-
// {
419-
// try
420-
// {
421-
// Method regMethod = moduleClass.getMethod("_register", LuaContext.class, moduleClass.getClass());
422-
// regMethod.invoke(moduleClass, this, moduleClass);
423-
// }
424-
// catch (Exception e)
425-
// {
426-
//// e.printStackTrace();
427-
// }
428-
// }
429-
430-
// /**
431-
// * 判断模块是否已经注册
432-
// * @param moduleName 模块名称
433-
// * @return true 模块已注册, 否则尚未注册
434-
// */
435-
// public boolean isModuleRegisted(String moduleName)
436-
// {
437-
// return LuaNativeUtil.isModuleRegisted(_nativeId, moduleName);
438-
// }
439-
440413
/**
441414
* 调用方法
442415
* @param methodName 方法名称

Source/Android/luascriptcore/src/main/jni/Android-5.1.5.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ LOCAL_SRC_FILES := \
5959
$(LOCAL_PATH)/../../../../../lua-common/LuaObjectManager.cpp \
6060
$(LOCAL_PATH)/../../../../../lua-common/LuaPointer.cpp \
6161
$(LOCAL_PATH)/../../../../../lua-common/LuaValue.cpp \
62+
$(LOCAL_PATH)/../../../../../lua-common/LuaTmpValue.cpp \
6263
$(LOCAL_PATH)/../../../../../lua-common/LuaTuple.cpp \
6364
$(LOCAL_PATH)/../../../../../lua-common/StringUtils.cpp \
6465
$(LOCAL_PATH)/../../../../../lua-common/LuaDataExchanger.cpp \

Source/Android/luascriptcore/src/main/jni/Android.mk

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ LOCAL_SRC_FILES := \
6464
$(LOCAL_PATH)/../../../../../lua-common/LuaObjectManager.cpp \
6565
$(LOCAL_PATH)/../../../../../lua-common/LuaPointer.cpp \
6666
$(LOCAL_PATH)/../../../../../lua-common/LuaValue.cpp \
67+
$(LOCAL_PATH)/../../../../../lua-common/LuaTmpValue.cpp \
6768
$(LOCAL_PATH)/../../../../../lua-common/LuaTuple.cpp \
6869
$(LOCAL_PATH)/../../../../../lua-common/StringUtils.cpp \
6970
$(LOCAL_PATH)/../../../../../lua-common/LuaDataExchanger.cpp \

Source/Unity3D/UnityCommon/LuaScriptCoreForUnity.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include "LuaUnityExportMethodDescriptor.hpp"
2626
#include "LuaUnityExportPropertyDescriptor.hpp"
2727
#include "LuaValue.h"
28+
#include "LuaTmpValue.hpp"
2829
#include "LuaObjectDescriptor.h"
2930
#include "StringUtils.h"
3031

@@ -141,6 +142,8 @@ extern "C" {
141142
{
142143
//设置映射类型
143144
LuaObjectEncoder::setMappingClassType(typeid(LuaValue).name(), "cn.vimfung.luascriptcore.LuaValue");
145+
//让LuaTmpValue与LuaValue走一样的序列化操作
146+
LuaObjectEncoder::setMappingClassType(typeid(LuaTmpValue).name(), "cn.vimfung.luascriptcore.LuaValue");
144147
LuaObjectEncoder::setMappingClassType(typeid(LuaObjectDescriptor).name(), "cn.vimfung.luascriptcore.LuaObjectDescriptor");
145148
LuaObjectEncoder::setMappingClassType(typeid(LuaFunction).name(), "cn.vimfung.luascriptcore.LuaFunction");
146149
LuaObjectEncoder::setMappingClassType(typeid(LuaPointer).name(), "cn.vimfung.luascriptcore.LuaPointer");

Source/Unity3D/UnityCommon/LuaUnityExportPropertyDescriptor.cpp

Lines changed: 44 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -27,56 +27,67 @@ LuaUnityExportPropertyDescriptor::LuaUnityExportPropertyDescriptor(std::string n
2727

2828
LuaValue* LuaUnityExportPropertyDescriptor::invokeGetter(LuaSession *session, LuaObjectDescriptor *instance)
2929
{
30-
if (_getterHandler != NULL && canRead())
30+
LuaValue *retValue = NULL;
31+
if (canRead())
3132
{
32-
void *returnBuffer = _getterHandler (typeDescriptor -> objectId(), (long long) instance -> getObject(), name().c_str());
33-
34-
LuaValue *retValue = NULL;
35-
if (returnBuffer != NULL)
33+
if (_getterHandler != NULL)
3634
{
37-
LuaObjectDecoder *decoder = new LuaObjectDecoder(session -> getContext(), returnBuffer);
38-
retValue = dynamic_cast<LuaValue *>(decoder -> readObject());
39-
decoder -> release();
40-
41-
//释放C#中申请的内存
42-
free(returnBuffer);
35+
void *returnBuffer = _getterHandler (typeDescriptor -> objectId(), (long long) instance -> getObject(), name().c_str());
36+
if (returnBuffer != NULL)
37+
{
38+
LuaObjectDecoder *decoder = new LuaObjectDecoder(session -> getContext(), returnBuffer);
39+
retValue = dynamic_cast<LuaValue *>(decoder -> readObject());
40+
decoder -> release();
41+
42+
//释放C#中申请的内存
43+
free(returnBuffer);
44+
}
45+
else
46+
{
47+
retValue = LuaValue::NilValue();
48+
}
4349
}
4450
else
4551
{
46-
retValue = LuaValue::NilValue();
52+
retValue = LuaExportPropertyDescriptor::invokeGetter(session, instance);
4753
}
48-
49-
return retValue;
5054
}
5155

52-
return NULL;
56+
return retValue;
5357
}
5458

5559
void LuaUnityExportPropertyDescriptor::invokeSetter(LuaSession *session, LuaObjectDescriptor *instance, LuaValue *value)
5660
{
57-
if (_setterHandler != NULL && canWrite())
61+
if (canWrite())
5862
{
59-
LuaObjectEncoder *encoder = new LuaObjectEncoder(session -> getContext());
60-
if (value != NULL)
63+
if (_setterHandler != NULL)
6164
{
62-
encoder -> writeObject(value);
65+
LuaObjectEncoder *encoder = new LuaObjectEncoder(session -> getContext());
66+
if (value != NULL)
67+
{
68+
encoder -> writeObject(value);
69+
}
70+
else
71+
{
72+
LuaValue *nilValue = LuaValue::NilValue();
73+
encoder -> writeObject(nilValue);
74+
nilValue -> release();
75+
}
76+
77+
//valueBuf的内容由C#端进行释放
78+
const void *valueBuf = encoder -> cloneBuffer();
79+
80+
_setterHandler (typeDescriptor -> objectId(),
81+
(long long) instance -> getObject(),
82+
name().c_str(),
83+
valueBuf,
84+
encoder -> getBufferLength());
85+
86+
encoder -> release();
6387
}
6488
else
6589
{
66-
LuaValue *nilValue = LuaValue::NilValue();
67-
encoder -> writeObject(nilValue);
68-
nilValue -> release();
90+
LuaExportPropertyDescriptor::invokeSetter(session, instance, value);
6991
}
70-
71-
//valueBuf的内容由C#端进行释放
72-
const void *valueBuf = encoder -> cloneBuffer();
73-
74-
_setterHandler (typeDescriptor -> objectId(),
75-
(long long) instance -> getObject(),
76-
name().c_str(),
77-
valueBuf,
78-
encoder -> getBufferLength());
79-
80-
encoder -> release();
8192
}
8293
}
1.93 KB
Binary file not shown.

0 commit comments

Comments
 (0)