Skip to content

Commit d63b09a

Browse files
authored
Merge pull request livecode#5646 from livecodeali/bugfix-19962
[[ Bug 19962 ]] Various fixes and updates to lc-compile-ffi-java
2 parents fa8cdcf + 43fb8c2 commit d63b09a

1 file changed

Lines changed: 55 additions & 48 deletions

File tree

toolchain/lc-compile-ffi-java/src/generate.g

Lines changed: 55 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@
104104
ResolveIdName(Id -> RealName)
105105
|)
106106

107-
OutputWrite("foreign handler ")
107+
OutputWrite("__safe foreign handler ")
108108
OutputForeignHandlerName(Type, MethodName)
109109
OutputForeignHandlerSignatureWithParameter(Type, Signature, Modifiers)
110110
OutputMethodBindingString(Type, RealName, Signature, Modifiers)
@@ -120,7 +120,7 @@
120120
ResolveIdName(Id -> RealName)
121121
|)
122122

123-
OutputWrite("foreign handler ")
123+
OutputWrite("__safe foreign handler ")
124124
OutputForeignHandlerName(Type, MethodName)
125125
OutputForeignSignatureWithReturnType(Type, Signature)
126126
OutputConstructorBindingString(Type, RealName, Signature)
@@ -146,7 +146,7 @@
146146
'action' GenerateForeignGetterOfClass(TYPE, NAME, TYPE, MODIFIER)
147147

148148
'rule' GenerateForeignGetterOfClass(ClassType, Name, VarType, InstanceModifier)
149-
OutputWrite("foreign handler ")
149+
OutputWrite("__safe foreign handler ")
150150
OutputForeignGetterName(ClassType, Name)
151151
OutputForeignGetterSignature(ClassType, Name, VarType, InstanceModifier)
152152
OutputGetVariableBindingString(ClassType, Name, VarType, InstanceModifier)
@@ -155,7 +155,7 @@
155155
'action' GenerateForeignSetterOfClass(TYPE, NAME, TYPE, MODIFIER)
156156

157157
'rule' GenerateForeignSetterOfClass(ClassType, Name, VarType, InstanceModifier)
158-
OutputWrite("foreign handler ")
158+
OutputWrite("__safe foreign handler ")
159159
OutputForeignSetterName(ClassType, Name)
160160
OutputForeignSetterSignature(ClassType, Name, VarType, InstanceModifier)
161161
OutputSetVariableBindingString(ClassType, Name, VarType, InstanceModifier)
@@ -267,7 +267,7 @@
267267

268268
'rule' OutputMethodBindingStringInstance(ClassType, MethodName, Signature, InstanceModifier):
269269
TypeToQualifiedName(ClassType -> QualifiedClass)
270-
OutputWriteI(" binds to \"java:", QualifiedClass, ">")
270+
OutputWriteI(" \\\nbinds to \"java:", QualifiedClass, ">")
271271
OutputWriteI("", MethodName, "")
272272
OutputJavaSignature(Signature)
273273
(|
@@ -281,7 +281,7 @@
281281

282282
'rule' OutputConstructorBindingString(ClassType, MethodName, Signature):
283283
TypeToQualifiedName(ClassType -> QualifiedClass)
284-
OutputWriteI(" binds to \"java:", QualifiedClass, ">")
284+
OutputWriteI(" \\\nbinds to \"java:", QualifiedClass, ">")
285285
OutputWrite("new")
286286
OutputJavaSignature(Signature)
287287
OutputWrite("\"")
@@ -290,7 +290,7 @@
290290

291291
'rule' OutputSetVariableBindingString(ClassType, FieldName, VarType, InstanceModifier):
292292
TypeToQualifiedName(ClassType -> QualifiedClass)
293-
OutputWriteI(" binds to \"java:", QualifiedClass, ">")
293+
OutputWriteI(" \\\nbinds to \"java:", QualifiedClass, ">")
294294
OutputWriteI("set.", FieldName, "")
295295
OutputWrite("(")
296296
OutputJavaTypeCode(VarType)
@@ -306,7 +306,7 @@
306306

307307
'rule' OutputGetVariableBindingString(ClassType, FieldName, VarType, InstanceModifier):
308308
TypeToQualifiedName(ClassType -> QualifiedClass)
309-
OutputWriteI(" binds to \"java:", QualifiedClass, ">")
309+
OutputWriteI(" \\\nbinds to \"java:", QualifiedClass, ">")
310310
OutputWriteI("get.", FieldName, "")
311311
OutputWrite("(")
312312
OutputWrite(")")
@@ -324,7 +324,7 @@
324324
OutputWrite("(")
325325
OutputJavaParams(Params)
326326
OutputWrite(")")
327-
OutputJavaTypeCode(ReturnType)
327+
OutputJavaReturnTypeCode(ReturnType)
328328

329329
'action' OutputJavaParams(PARAMETERLIST)
330330

@@ -447,13 +447,11 @@
447447

448448
'rule' OutputCallForeignConstructor(ObjType, Name, signature(Params, nil))
449449
OutputConvertToForeignParams(Params)
450-
OutputWrite("\tunsafe\n\t\t")
451-
OutputWrite("return ")
450+
OutputWrite("\treturn ")
452451
OutputForeignHandlerName(ObjType, Name)
453452
OutputWrite("(")
454453
OutputForeignCallParams(Params)
455454
OutputWrite(")\n")
456-
OutputWrite("\tend unsafe\n")
457455

458456
'action' OutputCallForeignHandlerParams(TYPE, NAME, PARAMETERLIST, MODIFIER)
459457

@@ -488,56 +486,56 @@
488486
OutputConvertToForeignParams(Params)
489487
(|
490488
where(ReturnType -> nil)
491-
OutputWrite("\tunsafe\n\t\t")
489+
OutputWrite("\t")
492490
OutputCallForeignHandlerParams(ObjType, Name, Params, InstanceModifier)
493491
OutputWrite("\n")
494-
OutputWrite("\tend unsafe\n")
495492
||
496-
OutputWrite("\tvariable tJNIResult as ")
497493
(|
498494
RequiresConversion(ReturnType)
495+
OutputWrite("\tvariable tJNIResult as ")
499496
GenerateJavaType(ReturnType)
497+
OutputWrite("\n\tput ")
498+
OutputCallForeignHandlerParams(ObjType, Name, Params, InstanceModifier)
499+
OutputWrite(" into tJNIResult\n")
500+
OutputWrapperReturn(ReturnType)
500501
||
501-
GenerateType(ReturnType)
502+
OutputWrite("\treturn ")
503+
OutputCallForeignHandlerParams(ObjType, Name, Params, InstanceModifier)
502504
|)
503-
OutputWrite("\n\tunsafe\n")
504-
OutputWrite("\t\tput ")
505-
OutputCallForeignHandlerParams(ObjType, Name, Params, InstanceModifier)
506-
OutputWrite(" into tJNIResult\n")
507-
OutputWrite("\tend unsafe\n")
508-
OutputWrapperReturn(ReturnType)
509505
OutputWrite("\n")
510506
|)
511507

508+
'action' OutputForeignGetter(TYPE, NAME, MODIFIER)
509+
510+
'rule' OutputForeignGetter(ObjType, Name, class):
511+
OutputForeignGetterName(ObjType, Name)
512+
OutputWrite("(pObj)")
513+
514+
'rule' OutputForeignGetter(ObjType, Name, Instance):
515+
OutputForeignGetterName(ObjType, Name)
516+
OutputWrite("()")
517+
512518
'action' OutputCallForeignGetter(TYPE, NAME, TYPE, MODIFIER)
513519

514520
'rule' OutputCallForeignGetter(ObjType, Name, Type, InstanceModifier)
515-
OutputWrite("\tvariable tJNIResult as ")
516521
(|
517522
RequiresConversion(Type)
523+
OutputWrite("\tvariable tJNIResult as ")
518524
GenerateJavaType(Type)
525+
OutputWrite("\n\tput ")
526+
OutputForeignGetter(ObjType, Name, InstanceModifier)
527+
OutputWrite(" into tJNIResult\n")
528+
OutputWrapperReturn(Type)
519529
||
520-
GenerateType(Type)
521-
|)
522-
OutputWrite("\n\tunsafe\n")
523-
OutputWrite("\t\tput ")
524-
OutputForeignGetterName(ObjType, Name)
525-
OutputWrite("(")
526-
(|
527-
where(InstanceModifier -> class)
528-
||
529-
OutputWrite("pObj")
530+
OutputWrite("\treturn ")
531+
OutputForeignGetter(ObjType, Name, InstanceModifier)
530532
|)
531-
OutputWrite(")")
532-
OutputWrite(" into tJNIResult\n")
533-
OutputWrite("\tend unsafe\n")
534-
OutputWrapperReturn(Type)
535-
533+
536534
'action' OutputCallForeignSetter(TYPE, NAME, TYPE, MODIFIER)
537535

538536
'rule' OutputCallForeignSetter(ObjType, Name, Type, InstanceModifier)
539537
OutputConvertToForeignParameter(Name, Type)
540-
OutputWrite("\tunsafe\n\t\t")
538+
OutputWrite("\t")
541539
OutputForeignSetterName(ObjType, Name)
542540
OutputWrite("(")
543541
(|
@@ -552,7 +550,7 @@
552550
OutputWriteI("pParam_", Name, "")
553551
|)
554552
OutputWrite(")")
555-
OutputWrite("\n\tend unsafe\n")
553+
OutputWrite("\n")
556554

557555
'action' OutputConvertToForeignParams(PARAMETERLIST)
558556

@@ -808,28 +806,28 @@
808806
'action' GenerateJavaType(TYPE)
809807

810808
'rule' GenerateJavaType(byte):
811-
OutputWrite("CInt")
809+
OutputWrite("JByte")
812810

813811
'rule' GenerateJavaType(short):
814-
OutputWrite("CInt")
812+
OutputWrite("JShort")
815813

816814
'rule' GenerateJavaType(int):
817-
OutputWrite("CInt")
815+
OutputWrite("JInt")
818816

819817
'rule' GenerateJavaType(long):
820-
OutputWrite("CInt")
818+
OutputWrite("JLong")
821819

822820
'rule' GenerateJavaType(float):
823-
OutputWrite("CFloat")
821+
OutputWrite("JFloat")
824822

825823
'rule' GenerateJavaType(double):
826-
OutputWrite("CDouble")
824+
OutputWrite("JDouble")
827825

828826
'rule' GenerateJavaType(boolean):
829-
OutputWrite("CBool")
827+
OutputWrite("JBoolean")
830828

831829
'rule' GenerateJavaType(char):
832-
OutputWrite("CInt")
830+
OutputWrite("JChar")
833831

834832
'rule' GenerateJavaType(string):
835833
OutputWrite("JString")
@@ -960,6 +958,15 @@
960958

961959
'rule' OutputJavaTypeCode(nil):
962960

961+
-- Ensure return type code is always specified as V if returning nothing
962+
'action' OutputJavaReturnTypeCode(TYPE)
963+
964+
'rule' OutputJavaReturnTypeCode(nil):
965+
OutputWrite("V")
966+
967+
'rule' OutputJavaReturnTypeCode(Type):
968+
OutputJavaTypeCode(Type)
969+
963970
'action' OutputJavaArrayTypeCode(TYPE, INT)
964971

965972
-- output java array

0 commit comments

Comments
 (0)