Skip to content

Commit c57ca14

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm/ffi] Refactor CFE transform to compound
In preparation of having `Union` besides `Struct`, renames all mentions of `Struct` to `Compound`. Also, changes the type checking to have `allowXYZ` named arguments always default to false, and remove redundant arguments. Bug: #38491 tools/test.py ffi ffi_2 TEST=tests/ffi(_2)/(.*)by_value_(*.)_test.dart Change-Id: Ie5f7cf4189dc315f896e3b3933ff0e0580ac540f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/194424 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Aske Simon Christensen <[email protected]>
1 parent 0889552 commit c57ca14

File tree

3 files changed

+170
-159
lines changed

3 files changed

+170
-159
lines changed

pkg/vm/lib/transformations/ffi.dart

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@ class FfiTransformer extends Transformer {
229229
final Field arraySizeDimension5Field;
230230
final Field arraySizeDimensionsField;
231231
final Class pointerClass;
232+
final Class compoundClass;
232233
final Class structClass;
233234
final Class ffiStructLayoutClass;
234235
final Field ffiStructLayoutTypesField;
@@ -330,6 +331,7 @@ class FfiTransformer extends Transformer {
330331
arraySizeDimensionsField =
331332
index.getMember('dart:ffi', '_ArraySize', 'dimensions'),
332333
pointerClass = index.getClass('dart:ffi', 'Pointer'),
334+
compoundClass = index.getClass('dart:ffi', '_Compound'),
333335
structClass = index.getClass('dart:ffi', 'Struct'),
334336
ffiStructLayoutClass = index.getClass('dart:ffi', '_FfiStructLayout'),
335337
ffiStructLayoutTypesField =
@@ -459,8 +461,7 @@ class FfiTransformer extends Transformer {
459461
/// [NativeFunction]<T1 Function(T2, T3) -> S1 Function(S2, S3)
460462
/// where DartRepresentationOf(Tn) -> Sn
461463
DartType convertNativeTypeToDartType(DartType nativeType,
462-
{bool allowStructs = false,
463-
bool allowStructItself = false,
464+
{bool allowCompounds = false,
464465
bool allowHandle = false,
465466
bool allowInlineArray = false}) {
466467
if (nativeType is! InterfaceType) {
@@ -476,11 +477,11 @@ class FfiTransformer extends Transformer {
476477
}
477478
return nativeType;
478479
}
479-
if (hierarchy.isSubclassOf(nativeClass, structClass)) {
480-
if (structClass == nativeClass) {
481-
return allowStructItself ? nativeType : null;
480+
if (hierarchy.isSubclassOf(nativeClass, compoundClass)) {
481+
if (nativeClass == structClass) {
482+
return null;
482483
}
483-
return allowStructs ? nativeType : null;
484+
return allowCompounds ? nativeType : null;
484485
}
485486
if (nativeType_ == null) {
486487
return null;
@@ -514,11 +515,11 @@ class FfiTransformer extends Transformer {
514515
if (fun.typeParameters.length != 0) return null;
515516

516517
final DartType returnType = convertNativeTypeToDartType(fun.returnType,
517-
allowStructs: allowStructs, allowHandle: true);
518+
allowCompounds: true, allowHandle: true);
518519
if (returnType == null) return null;
519520
final List<DartType> argumentTypes = fun.positionalParameters
520521
.map((t) => convertNativeTypeToDartType(t,
521-
allowStructs: allowStructs, allowHandle: true))
522+
allowCompounds: true, allowHandle: true))
522523
.toList();
523524
if (argumentTypes.contains(null)) return null;
524525
return FunctionType(argumentTypes, returnType, Nullability.legacy);
@@ -740,7 +741,7 @@ class FfiTransformer extends Transformer {
740741
return dimensions;
741742
}
742743

743-
bool isStructSubtype(DartType type) {
744+
bool isCompoundSubtype(DartType type) {
744745
if (type is InvalidType) {
745746
return false;
746747
}
@@ -762,9 +763,9 @@ class FfiTransformer extends Transformer {
762763
class FfiTransformerData {
763764
final Map<Field, Procedure> replacedGetters;
764765
final Map<Field, Procedure> replacedSetters;
765-
final Set<Class> emptyStructs;
766+
final Set<Class> emptyCompounds;
766767
FfiTransformerData(
767-
this.replacedGetters, this.replacedSetters, this.emptyStructs);
768+
this.replacedGetters, this.replacedSetters, this.emptyCompounds);
768769
}
769770

770771
/// Checks if any library depends on dart:ffi.

0 commit comments

Comments
 (0)