Skip to content

Commit 7bbd9f3

Browse files
committed
Merge branch 'topic/java_api/ni_pointers' into 'master'
Change 'Pointer' to 'WordPointer' when possible Closes #770 See merge request eng/libadalang/langkit!1023
2 parents 2957667 + e0cf069 commit 7bbd9f3

File tree

5 files changed

+80
-80
lines changed

5 files changed

+80
-80
lines changed

langkit/java_api.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ class JavaAPISettings(AbstractAPISettings):
233233
"PointerBase",
234234
"Pointer",
235235
"VoidPointer",
236+
"WordPointer",
236237
"CCharPointer",
237238
"CCharPointerPointer",
238239
"CDoublePointer",
@@ -628,12 +629,12 @@ def ni_reference_type(self, the_type: CompiledType) -> str:
628629
(T.Bool, lambda _: "CCharPointer"),
629630
(T.Int, lambda _: "CIntPointer"),
630631
(T.Character, lambda _: "CIntPointer"),
631-
(T.BigInt, lambda _: "Pointer"),
632-
(T.String, lambda _: "Pointer"),
633-
(T.AnalysisUnit, lambda _: "Pointer"),
634-
(T.AnalysisContext, lambda _: "Pointer"),
635-
(ct.ArrayType, lambda _: "Pointer"),
636-
(ct.IteratorType, lambda _: "Pointer"),
632+
(T.BigInt, lambda _: "WordPointer"),
633+
(T.String, lambda _: "WordPointer"),
634+
(T.AnalysisUnit, lambda _: "WordPointer"),
635+
(T.AnalysisContext, lambda _: "WordPointer"),
636+
(ct.ArrayType, lambda _: "WordPointer"),
637+
(ct.IteratorType, lambda _: "WordPointer"),
637638
(ct.EnumType, lambda _: "CIntPointer"),
638639
(object, lambda t: self.ni_type(t))
639640
])
@@ -646,7 +647,7 @@ def ni_stack_value(self, the_type: CompiledType) -> str:
646647
"""
647648
ref_type = self.ni_reference_type(the_type)
648649
if ref_type in self.ni_pointer_types:
649-
return "StackValue.get(SizeOf.get(VoidPointer.class))"
650+
return "StackValue.get(SizeOf.get(WordPointer.class))"
650651
else:
651652
return f"StackValue.get({ref_type}.class)"
652653

@@ -718,8 +719,9 @@ def ni_unwrap(self,
718719
(T.Character, lambda _: f"{source}.value;"),
719720
(
720721
T.BigInt, lambda t: (
721-
f"{self.ni_stack_value(t)};"
722-
f"BigIntegerWrapper.unwrap({source}, {export});"
722+
f"StackValue.get(SizeOf.get(WordPointer.class));"
723+
f"BigIntegerWrapper.unwrap({source},"
724+
f"(WordPointer) {export});"
723725
)
724726
),
725727
(ct.EnumType, lambda _: f"{source}.toC();"),
@@ -771,21 +773,19 @@ def object_unwrap(self,
771773
ref_type = self.ni_reference_type(the_type)
772774

773775
if ref_type not in self.ni_pointer_types:
774-
res = (
775-
f"{self.ni_stack_value(the_type)};"
776+
return (
777+
f"StackValue.get({ref_type}.class);"
776778
f"{source}.unwrap({export});"
777779
)
778780

779781
else:
780782
if the_type.is_ada_record:
781-
res = (
782-
f"{self.ni_stack_value(the_type)};"
783+
return (
784+
f"StackValue.get({ref_type}.class);"
783785
f"{source}.unwrap({export});"
784786
)
785787
else:
786-
res = f"{source}.unwrap();"
787-
788-
return res
788+
return f"{source}.unwrap();"
789789

790790
def ni_write(self,
791791
the_type: CompiledType,
@@ -799,6 +799,7 @@ def ni_write(self,
799799
:param source: The source Java expression to write.
800800
:param pointer: The pointer to write in.
801801
"""
802+
802803
return dispatch_on_type(the_type, [
803804
(
804805
T.Bool, lambda _:
@@ -821,15 +822,15 @@ def ni_write(self,
821822
),
822823
(
823824
T.AnalysisContext, lambda _:
824-
f"{pointer}.writeWord(0, {source}.unwrap());"
825+
f"{pointer}.write({source}.unwrap());"
825826
),
826827
(
827828
T.AnalysisUnit, lambda _:
828-
f"{pointer}.writeWord(0, {source}.unwrap());"
829+
f"{pointer}.write({source}.unwrap());"
829830
),
830831
(
831832
ct.IteratorType, lambda _:
832-
f"{pointer}.writeWord(0, {source}.unwrap());"
833+
f"{pointer}.write({source}.unwrap());"
833834
),
834835
(
835836
ct.ArrayType, lambda t:
@@ -925,7 +926,7 @@ def ni_field_unwrap(self, flat: FlatStructField) -> str:
925926
(ct.StructType, lambda _: f"{getter}.unwrap({to_write});"),
926927
(
927928
object, lambda t:
928-
f"{to_write}.writeWord(0, {getter}.unwrap());"
929+
f"{to_write}.write({getter}.unwrap());"
929930
),
930931
])
931932

langkit/templates/java_api/array.mako

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@
8080
* @return The newly wrapped array.
8181
*/
8282
static ${java_type} wrap(
83-
final Pointer pointer
83+
final WordPointer pointer
8484
) {
85-
return wrap((${ni_type}) pointer.readWord(0));
85+
return wrap((${ni_type}) pointer.read());
8686
}
8787
8888
/**
@@ -122,7 +122,7 @@
122122
* in.
123123
*/
124124
void unwrap(
125-
final Pointer pointer
125+
final WordPointer pointer
126126
${(
127127
", final AnalysisContext currentContext"
128128
if cls.element_type.is_symbol_type else
@@ -139,7 +139,7 @@
139139
);
140140
141141
// Place the result in the pointer
142-
pointer.writeWord(0, resNative);
142+
pointer.write(resNative);
143143
}
144144
145145
/**
@@ -188,9 +188,9 @@
188188
* @param The pointer to the array to release.
189189
*/
190190
static void release(
191-
final Pointer pointer
191+
final WordPointer pointer
192192
) {
193-
release((${ni_type}) pointer.readWord(0));
193+
release((${ni_type}) pointer.read());
194194
}
195195
196196
/**

langkit/templates/java_api/iterator.mako

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,10 @@
4545
* is null.
4646
*/
4747
static ${class_name} wrap(
48-
Pointer niPointer
48+
final WordPointer niPointer
4949
) {
5050
if(niPointer.isNull()) return null;
51-
else return wrap((${ni_name}) niPointer.readWord(0));
51+
else return wrap((${ni_name}) niPointer.read());
5252
}
5353
5454
/**

0 commit comments

Comments
 (0)