2909 lines
132 KiB
Diff
2909 lines
132 KiB
Diff
From 18f56c9de54318fb0357c3ba4b3fba06e370bb85
|
|
From: Ben Barham <ben_barham@apple.com>
|
|
Date: Sun, 21 May 2023 12:23:23 -0700
|
|
Subject: [PATCH] [NFC][ASTGen] Add wrapping structs for commonly bridged types
|
|
|
|
Adds wrapping structs for a bunch of commonly bridged types (but not all
|
|
the AST nodes yet).
|
|
|
|
diff --git a/swift/include/swift/AST/CASTBridging.h b/swift/include/swift/AST/CASTBridging.h
|
|
index 9647ddf561f14..4f181c1d1f916 100644
|
|
--- a/swift/include/swift/AST/CASTBridging.h
|
|
+++ b/swift/include/swift/AST/CASTBridging.h
|
|
@@ -42,27 +42,46 @@ SWIFT_BEGIN_NULLABILITY_ANNOTATIONS
|
|
typedef long SwiftInt;
|
|
typedef unsigned long SwiftUInt;
|
|
|
|
+typedef struct {
|
|
+ const unsigned char *_Nullable data;
|
|
+ long length;
|
|
+} BridgedString;
|
|
+
|
|
typedef struct {
|
|
const void *_Nullable data;
|
|
long numElements;
|
|
} BridgedArrayRef;
|
|
|
|
+typedef struct BridgedASTContext {
|
|
+ void *raw;
|
|
+} BridgedASTContext;
|
|
+
|
|
+typedef struct BridgedDeclContext {
|
|
+ void *raw;
|
|
+} BridgedDeclContext;
|
|
+
|
|
+typedef struct BridgedSourceLoc {
|
|
+ const void *_Nullable raw;
|
|
+} BridgedSourceLoc;
|
|
+
|
|
+typedef struct BridgedIdentifier {
|
|
+ const void *_Nullable raw;
|
|
+} BridgedIdentifier;
|
|
+
|
|
typedef struct {
|
|
void *start;
|
|
SwiftInt byteLength;
|
|
} BridgedCharSourceRange;
|
|
|
|
-typedef void *BridgedIdentifier;
|
|
-
|
|
typedef struct {
|
|
- BridgedIdentifier _Nullable Name;
|
|
- void *_Nullable NameLoc;
|
|
- BridgedIdentifier _Nullable SecondName;
|
|
- void *_Nullable SecondNameLoc;
|
|
- void *_Nullable UnderscoreLoc;
|
|
- void *_Nullable ColonLoc;
|
|
+ BridgedIdentifier Name;
|
|
+ BridgedSourceLoc NameLoc;
|
|
+ BridgedIdentifier SecondName;
|
|
+ BridgedSourceLoc SecondNameLoc;
|
|
+ BridgedSourceLoc UnderscoreLoc;
|
|
+ BridgedSourceLoc ColonLoc;
|
|
void *Type;
|
|
- void *_Nullable TrailingCommaLoc;
|
|
+ BridgedSourceLoc TrailingCommaLoc;
|
|
} BridgedTupleTypeElement;
|
|
|
|
typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedRequirementReprKind : long {
|
|
@@ -84,7 +103,7 @@ typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedRequirementReprKind : long {
|
|
} BridgedRequirementReprKind;
|
|
|
|
typedef struct {
|
|
- void *_Nullable SeparatorLoc;
|
|
+ BridgedSourceLoc SeparatorLoc;
|
|
BridgedRequirementReprKind Kind;
|
|
void *FirstType;
|
|
void *SecondType;
|
|
@@ -100,7 +119,13 @@ typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedDiagnosticSeverity : long {
|
|
BridgedNote,
|
|
} BridgedDiagnosticSeverity;
|
|
|
|
-typedef void* BridgedDiagnostic;
|
|
+typedef struct BridgedDiagnostic {
|
|
+ void *raw;
|
|
+} BridgedDiagnostic;
|
|
+
|
|
+typedef struct BridgedDiagnosticEngine {
|
|
+ void *raw;
|
|
+} BridgedDiagnosticEngine;
|
|
|
|
typedef enum ENUM_EXTENSIBILITY_ATTR(open) BridgedMacroDefinitionKind : long {
|
|
/// An expanded macro.
|
|
@@ -176,11 +200,37 @@ typedef enum ENUM_EXTENSIBILITY_ATTR(closed) BridgedTypeAttrKind : long {
|
|
BridgedTypeAttrKind_Count
|
|
} BridgedTypeAttrKind;
|
|
|
|
+typedef enum ENUM_EXTENSIBILITY_ATTR(open) ASTNodeKind : long {
|
|
+ ASTNodeKindExpr,
|
|
+ ASTNodeKindStmt,
|
|
+ ASTNodeKindDecl
|
|
+} ASTNodeKind;
|
|
+
|
|
+typedef struct BridgedASTNode {
|
|
+ void *ptr;
|
|
+ ASTNodeKind kind;
|
|
+} BridgedASTNode;
|
|
+
|
|
+typedef struct BridgedFuncDecl {
|
|
+ BridgedDeclContext declContext;
|
|
+ void *funcDecl;
|
|
+ void *decl;
|
|
+} BridgedFuncDecl;
|
|
+
|
|
+typedef struct BridgedDeclContextAndDecl {
|
|
+ BridgedDeclContext declContext;
|
|
+ void *nominalDecl;
|
|
+ void *decl;
|
|
+} BridgedDeclContextAndDecl;
|
|
+
|
|
+typedef struct BridgedTypeAttributes {
|
|
+ void *raw;
|
|
+} BridgedTypeAttributes;
|
|
+
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
|
|
#define _Bool bool
|
|
-
|
|
#endif
|
|
|
|
// Diagnostics
|
|
@@ -190,192 +240,212 @@ extern "C" {
|
|
///
|
|
/// \returns a diagnostic instance that can be extended with additional
|
|
/// information and then must be finished via \c SwiftDiagnostic_finish.
|
|
-BridgedDiagnostic SwiftDiagnostic_create(void *diagnosticEngine,
|
|
- BridgedDiagnosticSeverity severity,
|
|
- const void *_Nullable sourceLoc,
|
|
- const unsigned char *_Nullable text,
|
|
- long textLen);
|
|
+BridgedDiagnostic Diagnostic_create(BridgedDiagnosticEngine cDiags,
|
|
+ BridgedDiagnosticSeverity severity,
|
|
+ BridgedSourceLoc cLoc, BridgedString cText);
|
|
|
|
/// Highlight a source range as part of the diagnostic.
|
|
-void SwiftDiagnostic_highlight(
|
|
- BridgedDiagnostic diag, const void *_Nullable startLoc, const void *_Nullable endLoc);
|
|
+void Diagnostic_highlight(BridgedDiagnostic cDiag, BridgedSourceLoc cStartLoc,
|
|
+ BridgedSourceLoc cEndLoc);
|
|
|
|
/// Add a Fix-It to replace a source range as part of the diagnostic.
|
|
-void SwiftDiagnostic_fixItReplace(BridgedDiagnostic diag,
|
|
- const void *_Nullable replaceStartLoc,
|
|
- const void *_Nullable replaceEndLoc,
|
|
- const unsigned char *_Nullable newText,
|
|
- long newTextLen);
|
|
+void Diagnostic_fixItReplace(BridgedDiagnostic cDiag,
|
|
+ BridgedSourceLoc cStartLoc,
|
|
+ BridgedSourceLoc cEndLoc,
|
|
+ BridgedString cReplaceText);
|
|
|
|
/// Finish the given diagnostic and emit it.
|
|
-void SwiftDiagnostic_finish(BridgedDiagnostic diag);
|
|
+void Diagnostic_finish(BridgedDiagnostic cDiag);
|
|
|
|
-BridgedIdentifier
|
|
-SwiftASTContext_getIdentifier(void *ctx, const unsigned char *_Nullable str,
|
|
- long len);
|
|
+BridgedIdentifier ASTContext_getIdentifier(BridgedASTContext cContext,
|
|
+ BridgedString cStr);
|
|
|
|
-void *SwiftImportDecl_create(void *, void *, void *, char, void *,
|
|
- BridgedArrayRef, BridgedArrayRef);
|
|
+void *ImportDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cImportLoc, char kind,
|
|
+ BridgedSourceLoc cKindLoc, BridgedArrayRef path,
|
|
+ BridgedArrayRef cPathLocs);
|
|
|
|
-void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc,
|
|
- void *element, void *endLoc);
|
|
-void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc,
|
|
- void *element, void *endLoc);
|
|
+void *TopLevelCodeDecl_createStmt(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cStartLoc, void *element,
|
|
+ BridgedSourceLoc cEndLoc);
|
|
+void *TopLevelCodeDecl_createExpr(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cStartLoc, void *element,
|
|
+ BridgedSourceLoc cEndLoc);
|
|
|
|
-void *ReturnStmt_create(void *ctx, void *loc, void *_Nullable expr);
|
|
+void *ReturnStmt_create(BridgedASTContext cContext, BridgedSourceLoc cLoc,
|
|
+ void *_Nullable expr);
|
|
|
|
-void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs);
|
|
+void *SequenceExpr_create(BridgedASTContext cContext, BridgedArrayRef exprs);
|
|
|
|
-void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs,
|
|
- BridgedArrayRef names,
|
|
- BridgedArrayRef nameLocs,
|
|
- void *rparen);
|
|
+void *TupleExpr_create(BridgedASTContext cContext, BridgedSourceLoc cLParen,
|
|
+ BridgedArrayRef subs, BridgedArrayRef names,
|
|
+ BridgedArrayRef cNameLocs, BridgedSourceLoc cRParen);
|
|
|
|
-void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args);
|
|
+void *FunctionCallExpr_create(BridgedASTContext cContext, void *fn, void *args);
|
|
|
|
-void *SwiftIdentifierExpr_create(void *ctx, BridgedIdentifier base, void *loc);
|
|
+void *IdentifierExpr_create(BridgedASTContext cContext, BridgedIdentifier base,
|
|
+ BridgedSourceLoc cLoc);
|
|
|
|
-void *SwiftStringLiteralExpr_create(void *ctx,
|
|
- const unsigned char *_Nullable string,
|
|
- long len, void *TokenLoc);
|
|
+void *StringLiteralExpr_create(BridgedASTContext cContext, BridgedString cStr,
|
|
+ BridgedSourceLoc cTokenLoc);
|
|
|
|
-void *SwiftIntegerLiteralExpr_create(void *ctx,
|
|
- const unsigned char *_Nullable string,
|
|
- long len, void *TokenLoc);
|
|
+void *IntegerLiteralExpr_create(BridgedASTContext cContext, BridgedString cStr,
|
|
+ BridgedSourceLoc cTokenLoc);
|
|
|
|
-void *SwiftBooleanLiteralExpr_create(void *ctx, _Bool value, void *TokenLoc);
|
|
+void *BooleanLiteralExpr_create(BridgedASTContext cContext, _Bool value,
|
|
+ BridgedSourceLoc cTokenLoc);
|
|
|
|
-void *ArrayExpr_create(void *ctx, void *lLoc, BridgedArrayRef elements,
|
|
- BridgedArrayRef commas, void *rLoc);
|
|
+void *ArrayExpr_create(BridgedASTContext cContext, BridgedSourceLoc cLLoc,
|
|
+ BridgedArrayRef elements, BridgedArrayRef commas,
|
|
+ BridgedSourceLoc cRLoc);
|
|
|
|
-void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable name,
|
|
- void *initExpr, void *loc, _Bool isStatic,
|
|
- _Bool isLet, void *dc);
|
|
+void *VarDecl_create(BridgedASTContext cContext, void *nameExpr, void *initExpr,
|
|
+ BridgedSourceLoc cLoc, _Bool isStatic, _Bool isLet,
|
|
+ BridgedDeclContext cDeclContext);
|
|
|
|
-void *SingleValueStmtExpr_createWithWrappedBranches(void *ctx, void *S,
|
|
- void *DC, _Bool mustBeExpr);
|
|
+void *SingleValueStmtExpr_createWithWrappedBranches(
|
|
+ BridgedASTContext cContext, void *S, BridgedDeclContext cDeclContext,
|
|
+ _Bool mustBeExpr);
|
|
|
|
-void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then,
|
|
- void *_Nullable elseLoc, void *_Nullable elseStmt);
|
|
-
|
|
-typedef enum ENUM_EXTENSIBILITY_ATTR(open) ASTNodeKind : long {
|
|
- ASTNodeKindExpr,
|
|
- ASTNodeKindStmt,
|
|
- ASTNodeKindDecl
|
|
-} ASTNodeKind;
|
|
+void *IfStmt_create(BridgedASTContext cContext, BridgedSourceLoc cIfLoc,
|
|
+ void *cond, void *_Nullable then, BridgedSourceLoc cElseLoc,
|
|
+ void *_Nullable elseStmt);
|
|
|
|
-struct ASTNodeBridged {
|
|
- void *ptr;
|
|
- ASTNodeKind kind;
|
|
-};
|
|
+void *BraceStmt_create(BridgedASTContext cContext, BridgedSourceLoc cLBLoc,
|
|
+ BridgedArrayRef elements, BridgedSourceLoc cRBLoc);
|
|
|
|
-void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements,
|
|
- void *rbloc);
|
|
+BridgedSourceLoc SourceLoc_advanced(BridgedSourceLoc cLoc, long len);
|
|
|
|
-void *BridgedSourceLoc_advanced(void *loc, long len);
|
|
+void *ParamDecl_create(BridgedASTContext cContext, BridgedSourceLoc cLoc,
|
|
+ BridgedSourceLoc cArgLoc, BridgedIdentifier argName,
|
|
+ BridgedSourceLoc cParamLoc, BridgedIdentifier paramName,
|
|
+ void *_Nullable type, BridgedDeclContext cDeclContext);
|
|
|
|
-void *ParamDecl_create(void *ctx, void *loc, void *_Nullable argLoc,
|
|
- void *_Nullable argName, void *_Nullable paramLoc,
|
|
- void *_Nullable paramName, void *_Nullable type,
|
|
- void *declContext);
|
|
-struct FuncDeclBridged {
|
|
- void *declContext;
|
|
- void *funcDecl;
|
|
- void *decl;
|
|
-};
|
|
-
|
|
-struct FuncDeclBridged
|
|
-FuncDecl_create(void *ctx, void *staticLoc, _Bool isStatic, void *funcLoc,
|
|
- BridgedIdentifier name, void *nameLoc, _Bool isAsync,
|
|
- void *_Nullable asyncLoc, _Bool throws,
|
|
- void *_Nullable throwsLoc, void *paramLLoc,
|
|
- BridgedArrayRef params, void *paramRLoc,
|
|
- void *_Nullable returnType, void *declContext);
|
|
+struct BridgedFuncDecl
|
|
+FuncDecl_create(BridgedASTContext cContext, BridgedSourceLoc cStaticLoc,
|
|
+ _Bool isStatic, BridgedSourceLoc cFuncLoc,
|
|
+ BridgedIdentifier name, BridgedSourceLoc cNameLoc,
|
|
+ _Bool isAsync, BridgedSourceLoc cAsyncLoc, _Bool throws,
|
|
+ BridgedSourceLoc cThrowsLoc, BridgedSourceLoc cParamLLoc,
|
|
+ BridgedArrayRef params, BridgedSourceLoc cParamRLoc,
|
|
+ void *_Nullable returnType, BridgedDeclContext cDeclContext);
|
|
void FuncDecl_setBody(void *fn, void *body);
|
|
|
|
-void *SimpleIdentTypeRepr_create(void *ctx, void *loc, BridgedIdentifier id);
|
|
+void *SimpleIdentTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc, BridgedIdentifier id);
|
|
|
|
-void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc,
|
|
- BridgedIdentifier name, void *nameLoc);
|
|
+void *UnresolvedDotExpr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cDotLoc, BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc);
|
|
|
|
-void *ClosureExpr_create(void *ctx, void *body, void *dc);
|
|
+void *ClosureExpr_create(BridgedASTContext cContext, void *body,
|
|
+ BridgedDeclContext cDeclContext);
|
|
|
|
void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members);
|
|
|
|
-struct DeclContextAndDecl {
|
|
- void *declContext;
|
|
- void *nominalDecl;
|
|
- void *decl;
|
|
-};
|
|
-
|
|
-struct DeclContextAndDecl
|
|
-StructDecl_create(void *ctx, void *loc, BridgedIdentifier name, void *nameLoc,
|
|
- void *_Nullable genericParams, void *dc);
|
|
-struct DeclContextAndDecl ClassDecl_create(void *ctx, void *loc,
|
|
+BridgedDeclContextAndDecl StructDecl_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ void *_Nullable genericParams,
|
|
+ BridgedDeclContext cDeclContext);
|
|
+BridgedDeclContextAndDecl ClassDecl_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc,
|
|
BridgedIdentifier name,
|
|
- void *nameLoc, void *dc);
|
|
-
|
|
-void *ArrayTypeRepr_create(void *ctx, void *base, void *lsquareLoc,
|
|
- void *rsquareLoc);
|
|
-void *DictionaryTypeRepr_create(void *ctx, void *keyType, void *valueType,
|
|
- void *lsquareLoc, void *colonloc,
|
|
- void *rsquareLoc);
|
|
-void *OptionalTypeRepr_create(void *ctx, void *base, void *questionLoc);
|
|
-void *ImplicitlyUnwrappedOptionalTypeRepr_create(void *ctx, void *base,
|
|
- void *exclamationLoc);
|
|
-void *MetatypeTypeRepr_create(void *ctx, void *baseType, void *typeLoc);
|
|
-void *ProtocolTypeRepr_create(void *ctx, void *baseType, void *protoLoc);
|
|
-
|
|
-BridgedTypeAttrKind getBridgedTypeAttrKindFromString(
|
|
- const unsigned char * _Nullable str, long len);
|
|
-
|
|
-typedef void *BridgedTypeAttributes;
|
|
-BridgedTypeAttributes BridgedTypeAttributes_create(void);
|
|
-void BridgedTypeAttributes_addSimpleAttr(
|
|
- BridgedTypeAttributes typeAttributes, BridgedTypeAttrKind kind, void *atLoc, void *attrLoc);
|
|
-void *AttributedTypeRepr_create(void *ctx, void *base, BridgedTypeAttributes typeAttributes);
|
|
-
|
|
-void *AttributedTypeSpecifierRepr_create(
|
|
- void *ctx, void *base, BridgedAttributedTypeSpecifier specifier, void *specifierLoc);
|
|
-void *VarargTypeRepr_create(void *ctx, void *base, void *ellipsisLocPtr);
|
|
-void *PackExpansionTypeRepr_create(void *ctx, void *base, void *repeatLoc);
|
|
-void *TupleTypeRepr_create(void *ctx, BridgedArrayRef elements, void *lParenLoc,
|
|
- void *rParenLoc);
|
|
-void *MemberTypeRepr_create(void *ctx, void *baseComponent,
|
|
- BridgedArrayRef bridgedMemberComponents);
|
|
-void *GenericIdentTypeRepr_create(void *ctx, BridgedIdentifier name,
|
|
- void *nameLoc, BridgedArrayRef genericArgs,
|
|
- void *lAngle, void *rAngle);
|
|
-void *EmptyCompositionTypeRepr_create(void *ctx, void *anyLoc);
|
|
-void *CompositionTypeRepr_create(void *ctx, BridgedArrayRef types,
|
|
- void *firstTypeLoc, void *firstAmpLoc);
|
|
-void *FunctionTypeRepr_create(void *ctx, void *argsTy, void *_Nullable asyncLoc,
|
|
- void *_Nullable throwsLoc, void *arrowLoc,
|
|
- void *returnType);
|
|
-void *NamedOpaqueReturnTypeRepr_create(void *ctx, void *baseTy);
|
|
-void *OpaqueReturnTypeRepr_create(void *ctx, void *opaqueLoc, void *baseTy);
|
|
-void *ExistentialTypeRepr_create(void *ctx, void *anyLoc, void *baseTy);
|
|
-void *GenericParamList_create(void *ctx, void *lAngleLoc,
|
|
- BridgedArrayRef params, void *_Nullable whereLoc,
|
|
- BridgedArrayRef reqs, void *rAngleLoc);
|
|
-void *GenericTypeParamDecl_create(void *ctx, void *declContext,
|
|
- BridgedIdentifier name, void *nameLoc,
|
|
- void *_Nullable eachLoc, long index,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedDeclContext cDeclContext);
|
|
+
|
|
+void *GenericParamList_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLAngleLoc,
|
|
+ BridgedArrayRef params,
|
|
+ BridgedSourceLoc cWhereLoc, BridgedArrayRef reqs,
|
|
+ BridgedSourceLoc cRAngleLoc);
|
|
+void *GenericTypeParamDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedSourceLoc cEachLoc, long index,
|
|
_Bool isParameterPack);
|
|
-void GenericTypeParamDecl_setInheritedType(void *ctx, void *Param, void *ty);
|
|
+void GenericTypeParamDecl_setInheritedType(BridgedASTContext cContext,
|
|
+ void *Param, void *ty);
|
|
|
|
-struct DeclContextAndDecl TypeAliasDecl_create(void *ctx, void *declContext,
|
|
- void *aliasLoc, void *equalLoc,
|
|
+BridgedDeclContextAndDecl TypeAliasDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cAliasLoc,
|
|
+ BridgedSourceLoc cEqualLoc,
|
|
BridgedIdentifier name,
|
|
- void *nameLoc,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
void *_Nullable genericParams);
|
|
void TypeAliasDecl_setUnderlyingTypeRepr(void *decl, void *underlyingType);
|
|
|
|
-void TopLevelCodeDecl_dump(void *);
|
|
-void Expr_dump(void *);
|
|
-void Decl_dump(void *);
|
|
-void Stmt_dump(void *);
|
|
-void Type_dump(void *);
|
|
+BridgedTypeAttrKind TypeAttrKind_fromString(BridgedString cStr);
|
|
+BridgedTypeAttributes TypeAttributes_create(void);
|
|
+void TypeAttributes_addSimpleAttr(BridgedTypeAttributes cAttributes,
|
|
+ BridgedTypeAttrKind kind,
|
|
+ BridgedSourceLoc cAtLoc,
|
|
+ BridgedSourceLoc cAttrLoc);
|
|
+
|
|
+void *ArrayTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cLSquareLoc,
|
|
+ BridgedSourceLoc cRSquareLoc);
|
|
+void *AttributedTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedTypeAttributes cAttributes);
|
|
+void *
|
|
+AttributedTypeSpecifierRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedAttributedTypeSpecifier specifier,
|
|
+ BridgedSourceLoc cSpecifierLoc);
|
|
+void *CompositionTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedArrayRef types,
|
|
+ BridgedSourceLoc cFirstTypeLoc,
|
|
+ BridgedSourceLoc cFirstAmpLoc);
|
|
+void *DictionaryTypeRepr_create(BridgedASTContext cContext, void *keyType,
|
|
+ void *valueType, BridgedSourceLoc cLSquareLoc,
|
|
+ BridgedSourceLoc cColonloc,
|
|
+ BridgedSourceLoc cRSquareLoc);
|
|
+void *EmptyCompositionTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cAnyLoc);
|
|
+void *FunctionTypeRepr_create(BridgedASTContext cContext, void *argsTy,
|
|
+ BridgedSourceLoc cAsyncLoc,
|
|
+ BridgedSourceLoc cThrowsLoc,
|
|
+ BridgedSourceLoc cArrowLoc, void *returnType);
|
|
+void *GenericIdentTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedArrayRef genericArgs,
|
|
+ BridgedSourceLoc cLAngleLoc,
|
|
+ BridgedSourceLoc cRAngleLoc);
|
|
+void *OptionalTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cQuestionLoc);
|
|
+void *ImplicitlyUnwrappedOptionalTypeRepr_create(
|
|
+ BridgedASTContext cContext, void *base, BridgedSourceLoc cExclamationLoc);
|
|
+void *MemberTypeRepr_create(BridgedASTContext cContext, void *baseComponent,
|
|
+ BridgedArrayRef bridgedMemberComponents);
|
|
+void *MetatypeTypeRepr_create(BridgedASTContext cContext, void *baseType,
|
|
+ BridgedSourceLoc cTypeLoc);
|
|
+void *ProtocolTypeRepr_create(BridgedASTContext cContext, void *baseType,
|
|
+ BridgedSourceLoc cProtoLoc);
|
|
+void *PackExpansionTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cRepeatLoc);
|
|
+void *TupleTypeRepr_create(BridgedASTContext cContext, BridgedArrayRef elements,
|
|
+ BridgedSourceLoc cLParenLoc,
|
|
+ BridgedSourceLoc cRParenLoc);
|
|
+void *NamedOpaqueReturnTypeRepr_create(BridgedASTContext cContext,
|
|
+ void *baseTy);
|
|
+void *OpaqueReturnTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cOpaqueLoc, void *baseTy);
|
|
+void *ExistentialTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cAnyLoc, void *baseTy);
|
|
+void *VarargTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cEllipsisLoc);
|
|
+
|
|
+void TopLevelCodeDecl_dump(void *decl);
|
|
+void Expr_dump(void *expr);
|
|
+void Decl_dump(void *decl);
|
|
+void Stmt_dump(void *statement);
|
|
+void Type_dump(void *type);
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Plugins
|
|
diff --git a/swift/lib/AST/CASTBridging.cpp b/swift/lib/AST/CASTBridging.cpp
|
|
index b76dcfa8e5cc8..76b9b484e8f80 100644
|
|
--- a/swift/lib/AST/CASTBridging.cpp
|
|
+++ b/swift/lib/AST/CASTBridging.cpp
|
|
@@ -15,46 +15,91 @@
|
|
|
|
using namespace swift;
|
|
|
|
+namespace {
|
|
+struct BridgedDiagnosticImpl {
|
|
+ InFlightDiagnostic inFlight;
|
|
+ std::vector<StringRef> textBlobs;
|
|
+
|
|
+ BridgedDiagnosticImpl(const BridgedDiagnosticImpl &) = delete;
|
|
+ BridgedDiagnosticImpl(BridgedDiagnosticImpl &&) = delete;
|
|
+ BridgedDiagnosticImpl &operator=(const BridgedDiagnosticImpl &) = delete;
|
|
+ BridgedDiagnosticImpl &operator=(BridgedDiagnosticImpl &&) = delete;
|
|
+
|
|
+ ~BridgedDiagnosticImpl() {
|
|
+ inFlight.flush();
|
|
+ for (auto text : textBlobs) {
|
|
+ free((void *)text.data());
|
|
+ }
|
|
+ }
|
|
+};
|
|
+} // namespace
|
|
+
|
|
template <typename T>
|
|
-inline llvm::ArrayRef<T> getArrayRef(BridgedArrayRef bridged) {
|
|
+static inline llvm::ArrayRef<T> convertArrayRef(const BridgedArrayRef bridged) {
|
|
return {static_cast<const T *>(bridged.data), size_t(bridged.numElements)};
|
|
}
|
|
|
|
-static SourceLoc getSourceLocFromPointer(const void *loc) {
|
|
- auto smLoc = llvm::SMLoc::getFromPointer((const char *)loc);
|
|
+static inline StringRef convertString(BridgedString cStr) {
|
|
+ return StringRef{reinterpret_cast<const char *>(cStr.data),
|
|
+ size_t(cStr.length)};
|
|
+}
|
|
+
|
|
+static inline ASTContext &convertASTContext(BridgedASTContext cContext) {
|
|
+ return *static_cast<ASTContext *>(cContext.raw);
|
|
+}
|
|
+
|
|
+static inline DeclContext *convertDeclContext(BridgedDeclContext cDeclContext) {
|
|
+ return static_cast<DeclContext *>(cDeclContext.raw);
|
|
+}
|
|
+
|
|
+static inline BridgedDeclContext bridgeDeclContext(DeclContext *declContext) {
|
|
+ return BridgedDeclContext{declContext};
|
|
+}
|
|
+
|
|
+static inline SourceLoc convertSourceLoc(BridgedSourceLoc cLoc) {
|
|
+ auto smLoc = llvm::SMLoc::getFromPointer(static_cast<const char *>(cLoc.raw));
|
|
return SourceLoc(smLoc);
|
|
}
|
|
|
|
-namespace {
|
|
- struct BridgedDiagnosticImpl {
|
|
- InFlightDiagnostic inFlight;
|
|
- std::vector<StringRef> textBlobs;
|
|
-
|
|
- BridgedDiagnosticImpl(const BridgedDiagnosticImpl&) = delete;
|
|
- BridgedDiagnosticImpl(BridgedDiagnosticImpl &&) = delete;
|
|
- BridgedDiagnosticImpl &operator=(const BridgedDiagnosticImpl&) = delete;
|
|
- BridgedDiagnosticImpl &operator=(BridgedDiagnosticImpl &&) = delete;
|
|
-
|
|
- ~BridgedDiagnosticImpl() {
|
|
- inFlight.flush();
|
|
- for (auto text: textBlobs) {
|
|
- free((void*)text.data());
|
|
- }
|
|
- }
|
|
- };
|
|
+static inline Identifier convertIdentifier(BridgedIdentifier cIdentifier) {
|
|
+ return Identifier::getFromOpaquePointer(const_cast<void *>(cIdentifier.raw));
|
|
+}
|
|
+
|
|
+static inline BridgedDiagnosticImpl *
|
|
+convertDiagnostic(BridgedDiagnostic cDiag) {
|
|
+ return static_cast<BridgedDiagnosticImpl *>(cDiag.raw);
|
|
+}
|
|
+
|
|
+static inline DiagnosticEngine &
|
|
+convertDiagnosticEngine(BridgedDiagnosticEngine cEngine) {
|
|
+ return *static_cast<DiagnosticEngine *>(cEngine.raw);
|
|
+}
|
|
+
|
|
+static inline TypeAttributes *
|
|
+convertTypeAttributes(BridgedTypeAttributes cAttributes) {
|
|
+ return static_cast<TypeAttributes *>(cAttributes.raw);
|
|
+}
|
|
+
|
|
+static TypeAttrKind convertTypeAttrKind(BridgedTypeAttrKind kind) {
|
|
+ switch (kind) {
|
|
+#define TYPE_ATTR(X) \
|
|
+ case BridgedTypeAttrKind_##X: \
|
|
+ return TAK_##X;
|
|
+#include "swift/AST/Attr.def"
|
|
+ case BridgedTypeAttrKind_Count:
|
|
+ return TAK_Count;
|
|
+ }
|
|
}
|
|
|
|
-BridgedDiagnostic SwiftDiagnostic_create(void *diagnosticEngine,
|
|
- BridgedDiagnosticSeverity severity,
|
|
- const void *sourceLocPtr,
|
|
- const unsigned char *textPtr,
|
|
- long textLen) {
|
|
- StringRef origText{
|
|
- reinterpret_cast<const char *>(textPtr), size_t(textLen)};
|
|
+BridgedDiagnostic Diagnostic_create(BridgedDiagnosticEngine cDiags,
|
|
+ BridgedDiagnosticSeverity severity,
|
|
+ BridgedSourceLoc cLoc,
|
|
+ BridgedString cText) {
|
|
+ StringRef origText = convertString(cText);
|
|
llvm::MallocAllocator mallocAlloc;
|
|
StringRef text = origText.copy(mallocAlloc);
|
|
|
|
- SourceLoc loc = getSourceLocFromPointer(sourceLocPtr);
|
|
+ SourceLoc loc = convertSourceLoc(cLoc);
|
|
|
|
Diag<StringRef> diagID;
|
|
switch (severity) {
|
|
@@ -75,230 +120,232 @@ BridgedDiagnostic SwiftDiagnostic_create(void *diagnosticEngine,
|
|
break;
|
|
}
|
|
|
|
- DiagnosticEngine &diags = *static_cast<DiagnosticEngine *>(diagnosticEngine);
|
|
- return new BridgedDiagnosticImpl{diags.diagnose(loc, diagID, text), {text}};
|
|
+ DiagnosticEngine &diags = convertDiagnosticEngine(cDiags);
|
|
+ return {new BridgedDiagnosticImpl{diags.diagnose(loc, diagID, text), {text}}};
|
|
}
|
|
|
|
/// Highlight a source range as part of the diagnostic.
|
|
-void SwiftDiagnostic_highlight(
|
|
- BridgedDiagnostic diagPtr, const void *startLocPtr, const void *endLocPtr
|
|
-) {
|
|
- SourceLoc startLoc = getSourceLocFromPointer(startLocPtr);
|
|
- SourceLoc endLoc = getSourceLocFromPointer(endLocPtr);
|
|
+void Diagnostic_highlight(BridgedDiagnostic cDiag, BridgedSourceLoc cStartLoc,
|
|
+ BridgedSourceLoc cEndLoc) {
|
|
+ SourceLoc startLoc = convertSourceLoc(cStartLoc);
|
|
+ SourceLoc endLoc = convertSourceLoc(cEndLoc);
|
|
|
|
- BridgedDiagnosticImpl *impl = static_cast<BridgedDiagnosticImpl *>(diagPtr);
|
|
- impl->inFlight.highlightChars(startLoc, endLoc);
|
|
+ BridgedDiagnosticImpl *diag = convertDiagnostic(cDiag);
|
|
+ diag->inFlight.highlightChars(startLoc, endLoc);
|
|
}
|
|
|
|
/// Add a Fix-It to replace a source range as part of the diagnostic.
|
|
-void SwiftDiagnostic_fixItReplace(BridgedDiagnostic diagPtr,
|
|
- const void *replaceStartLocPtr,
|
|
- const void *replaceEndLocPtr,
|
|
- const unsigned char *newTextPtr,
|
|
- long newTextLen) {
|
|
+void Diagnostic_fixItReplace(BridgedDiagnostic cDiag,
|
|
+ BridgedSourceLoc cStartLoc,
|
|
+ BridgedSourceLoc cEndLoc,
|
|
+ BridgedString cReplaceText) {
|
|
|
|
- SourceLoc startLoc = getSourceLocFromPointer(replaceStartLocPtr);
|
|
- SourceLoc endLoc = getSourceLocFromPointer(replaceEndLocPtr);
|
|
+ SourceLoc startLoc = convertSourceLoc(cStartLoc);
|
|
+ SourceLoc endLoc = convertSourceLoc(cEndLoc);
|
|
|
|
- StringRef origReplaceText{
|
|
- reinterpret_cast<const char *>(newTextPtr), size_t(newTextLen)};
|
|
+ StringRef origReplaceText = convertString(cReplaceText);
|
|
llvm::MallocAllocator mallocAlloc;
|
|
StringRef replaceText = origReplaceText.copy(mallocAlloc);
|
|
|
|
- BridgedDiagnosticImpl *impl = static_cast<BridgedDiagnosticImpl *>(diagPtr);
|
|
- impl->textBlobs.push_back(replaceText);
|
|
- impl->inFlight.fixItReplaceChars(startLoc, endLoc, replaceText);
|
|
+ BridgedDiagnosticImpl *diag = convertDiagnostic(cDiag);
|
|
+ diag->textBlobs.push_back(replaceText);
|
|
+ diag->inFlight.fixItReplaceChars(startLoc, endLoc, replaceText);
|
|
}
|
|
|
|
/// Finish the given diagnostic and emit it.
|
|
-void SwiftDiagnostic_finish(BridgedDiagnostic diagPtr) {
|
|
- BridgedDiagnosticImpl *impl = static_cast<BridgedDiagnosticImpl *>(diagPtr);
|
|
- delete impl;
|
|
+void Diagnostic_finish(BridgedDiagnostic cDiag) {
|
|
+ BridgedDiagnosticImpl *diag = convertDiagnostic(cDiag);
|
|
+ delete diag;
|
|
}
|
|
|
|
-BridgedIdentifier
|
|
-SwiftASTContext_getIdentifier(void *ctx, const unsigned char *_Nullable str,
|
|
- long len) {
|
|
- if (len == 1 && str[0] == '_')
|
|
+BridgedIdentifier ASTContext_getIdentifier(BridgedASTContext cContext,
|
|
+ BridgedString cStr) {
|
|
+ StringRef str = convertString(cStr);
|
|
+ if (str.size() == 1 && str.front() == '_')
|
|
return BridgedIdentifier();
|
|
|
|
// If this was a back-ticked identifier, drop the back-ticks.
|
|
- if (len >= 2 && str[0] == '`' && str[len-1] == '`') {
|
|
- ++str;
|
|
- len -= 2;
|
|
+ if (str.size() >= 2 && str.front() == '`' && str.back() == '`') {
|
|
+ str = str.drop_front().drop_back();
|
|
}
|
|
|
|
- return const_cast<void *>(
|
|
- static_cast<ASTContext *>(ctx)
|
|
- ->getIdentifier(
|
|
- StringRef{reinterpret_cast<const char *>(str), size_t(len)})
|
|
- .getAsOpaquePointer());
|
|
+ return {convertASTContext(cContext).getIdentifier(str).getAsOpaquePointer()};
|
|
}
|
|
|
|
-void *SwiftImportDecl_create(void *ctx, void *dc, void *importLoc, char kind,
|
|
- void *kindLoc, BridgedArrayRef path,
|
|
- BridgedArrayRef pathLocs) {
|
|
- assert(path.numElements == pathLocs.numElements);
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *ImportDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cImportLoc, char kind,
|
|
+ BridgedSourceLoc cKindLoc, BridgedArrayRef path,
|
|
+ BridgedArrayRef cPathLocs) {
|
|
+ assert(path.numElements == cPathLocs.numElements);
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
ImportPath::Builder importPath;
|
|
- for (auto p : llvm::zip(getArrayRef<Identifier>(path),
|
|
- getArrayRef<SourceLoc>(pathLocs))) {
|
|
+ for (auto p : llvm::zip(convertArrayRef<Identifier>(path),
|
|
+ convertArrayRef<SourceLoc>(cPathLocs))) {
|
|
Identifier ident;
|
|
SourceLoc loc;
|
|
std::tie(ident, loc) = p;
|
|
importPath.push_back(ident, loc);
|
|
}
|
|
- return ImportDecl::create(
|
|
- Context, static_cast<DeclContext *>(dc),
|
|
- getSourceLocFromPointer(importLoc), static_cast<ImportKind>(kind),
|
|
- getSourceLocFromPointer(kindLoc), std::move(importPath).get());
|
|
+ return ImportDecl::create(context, declContext, convertSourceLoc(cImportLoc),
|
|
+ static_cast<ImportKind>(kind),
|
|
+ convertSourceLoc(cKindLoc),
|
|
+ std::move(importPath).get());
|
|
}
|
|
|
|
-void *BridgedSourceLoc_advanced(void *loc, long len) {
|
|
- SourceLoc l = getSourceLocFromPointer(loc).getAdvancedLoc(len);
|
|
- return const_cast<void *>(l.getOpaquePointerValue());
|
|
+BridgedSourceLoc SourceLoc_advanced(BridgedSourceLoc cLoc, long len) {
|
|
+ SourceLoc loc = convertSourceLoc(cLoc).getAdvancedLoc(len);
|
|
+ return {loc.getOpaquePointerValue()};
|
|
}
|
|
|
|
-void *SwiftTopLevelCodeDecl_createStmt(void *ctx, void *DC, void *startLoc,
|
|
- void *element, void *endLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *TopLevelCodeDecl_createStmt(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cStartLoc, void *element,
|
|
+ BridgedSourceLoc cEndLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
auto *S = static_cast<Stmt *>(element);
|
|
- auto Brace = BraceStmt::create(Context, getSourceLocFromPointer(startLoc),
|
|
- {S}, getSourceLocFromPointer(endLoc),
|
|
+ auto Brace = BraceStmt::create(context, convertSourceLoc(cStartLoc), {S},
|
|
+ convertSourceLoc(cEndLoc),
|
|
/*Implicit=*/true);
|
|
- auto *TLCD =
|
|
- new (Context) TopLevelCodeDecl(static_cast<DeclContext *>(DC), Brace);
|
|
+ auto *TLCD = new (context) TopLevelCodeDecl(declContext, Brace);
|
|
return (Decl *)TLCD;
|
|
}
|
|
|
|
-void *SwiftTopLevelCodeDecl_createExpr(void *ctx, void *DC, void *startLoc,
|
|
- void *element, void *endLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *TopLevelCodeDecl_createExpr(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cStartLoc, void *element,
|
|
+ BridgedSourceLoc cEndLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
auto *E = static_cast<Expr *>(element);
|
|
- auto Brace = BraceStmt::create(Context, getSourceLocFromPointer(startLoc),
|
|
- {E}, getSourceLocFromPointer(endLoc),
|
|
+ auto Brace = BraceStmt::create(context, convertSourceLoc(cStartLoc), {E},
|
|
+ convertSourceLoc(cEndLoc),
|
|
/*Implicit=*/true);
|
|
- auto *TLCD =
|
|
- new (Context) TopLevelCodeDecl(static_cast<DeclContext *>(DC), Brace);
|
|
+ auto *TLCD = new (context) TopLevelCodeDecl(declContext, Brace);
|
|
return (Decl *)TLCD;
|
|
}
|
|
|
|
-void *SwiftSequenceExpr_create(void *ctx, BridgedArrayRef exprs) {
|
|
- return SequenceExpr::create(*static_cast<ASTContext *>(ctx),
|
|
- getArrayRef<Expr *>(exprs));
|
|
+void *SequenceExpr_create(BridgedASTContext cContext, BridgedArrayRef exprs) {
|
|
+ return SequenceExpr::create(convertASTContext(cContext),
|
|
+ convertArrayRef<Expr *>(exprs));
|
|
}
|
|
|
|
-void *SwiftTupleExpr_create(void *ctx, void *lparen, BridgedArrayRef subs,
|
|
- BridgedArrayRef names,
|
|
- BridgedArrayRef nameLocs,
|
|
- void *rparen) {
|
|
- auto &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *TupleExpr_create(BridgedASTContext cContext, BridgedSourceLoc cLParen,
|
|
+ BridgedArrayRef subs, BridgedArrayRef names,
|
|
+ BridgedArrayRef cNameLocs, BridgedSourceLoc cRParen) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
return TupleExpr::create(
|
|
- Context, getSourceLocFromPointer(lparen),
|
|
- getArrayRef<Expr *>(subs), getArrayRef<Identifier>(names),
|
|
- getArrayRef<SourceLoc>(nameLocs), getSourceLocFromPointer(rparen),
|
|
+ context, convertSourceLoc(cLParen), convertArrayRef<Expr *>(subs),
|
|
+ convertArrayRef<Identifier>(names), convertArrayRef<SourceLoc>(cNameLocs),
|
|
+ convertSourceLoc(cRParen),
|
|
/*Implicit*/ false);
|
|
}
|
|
|
|
-void *SwiftFunctionCallExpr_create(void *ctx, void *fn, void *args) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *FunctionCallExpr_create(BridgedASTContext cContext, void *fn,
|
|
+ void *args) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
TupleExpr *TE = static_cast<TupleExpr *>(args);
|
|
SmallVector<Argument, 8> arguments;
|
|
for (unsigned i = 0; i < TE->getNumElements(); ++i) {
|
|
arguments.emplace_back(TE->getElementNameLoc(i), TE->getElementName(i),
|
|
TE->getElement(i));
|
|
}
|
|
- auto *argList = ArgumentList::create(Context, TE->getLParenLoc(), arguments,
|
|
+ auto *argList = ArgumentList::create(context, TE->getLParenLoc(), arguments,
|
|
TE->getRParenLoc(), llvm::None,
|
|
/*isImplicit*/ false);
|
|
- return CallExpr::create(Context, static_cast<Expr *>(fn), argList,
|
|
+ return CallExpr::create(context, static_cast<Expr *>(fn), argList,
|
|
/*implicit*/ false);
|
|
}
|
|
|
|
-void *SwiftIdentifierExpr_create(void *ctx, BridgedIdentifier base, void *loc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto name = DeclNameRef{swift::Identifier::getFromOpaquePointer(base)};
|
|
- Expr *E = new (Context) UnresolvedDeclRefExpr(
|
|
- name, DeclRefKind::Ordinary, DeclNameLoc{getSourceLocFromPointer(loc)});
|
|
+void *IdentifierExpr_create(BridgedASTContext cContext, BridgedIdentifier base,
|
|
+ BridgedSourceLoc cLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto name = DeclNameRef{convertIdentifier(base)};
|
|
+ Expr *E = new (context) UnresolvedDeclRefExpr(
|
|
+ name, DeclRefKind::Ordinary, DeclNameLoc{convertSourceLoc(cLoc)});
|
|
return E;
|
|
}
|
|
|
|
-void *SwiftStringLiteralExpr_create(void *ctx,
|
|
- const unsigned char *_Nullable string,
|
|
- long len, void *TokenLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto stringRef = Context.AllocateCopy(
|
|
- StringRef{reinterpret_cast<const char *>(string), size_t(len)});
|
|
- return new (Context)
|
|
- StringLiteralExpr(stringRef, getSourceLocFromPointer(TokenLoc));
|
|
+void *StringLiteralExpr_create(BridgedASTContext cContext, BridgedString cStr,
|
|
+ BridgedSourceLoc cTokenLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto str = context.AllocateCopy(convertString(cStr));
|
|
+ return new (context) StringLiteralExpr(str, convertSourceLoc(cTokenLoc));
|
|
}
|
|
|
|
-void *SwiftIntegerLiteralExpr_create(void *ctx,
|
|
- const unsigned char *_Nullable string,
|
|
- long len, void *TokenLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto stringRef = Context.AllocateCopy(
|
|
- StringRef{reinterpret_cast<const char *>(string), size_t(len)});
|
|
- return new (Context)
|
|
- IntegerLiteralExpr(stringRef, getSourceLocFromPointer(TokenLoc));
|
|
+void *IntegerLiteralExpr_create(BridgedASTContext cContext, BridgedString cStr,
|
|
+ BridgedSourceLoc cTokenLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto str = context.AllocateCopy(convertString(cStr));
|
|
+ return new (context) IntegerLiteralExpr(str, convertSourceLoc(cTokenLoc));
|
|
}
|
|
|
|
-void *ArrayExpr_create(void *ctx, void *lLoc, BridgedArrayRef elements,
|
|
- BridgedArrayRef commas, void *rLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *ArrayExpr_create(BridgedASTContext cContext, BridgedSourceLoc cLLoc,
|
|
+ BridgedArrayRef elements, BridgedArrayRef commas,
|
|
+ BridgedSourceLoc cRLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
return ArrayExpr::create(
|
|
- Context, getSourceLocFromPointer(lLoc), getArrayRef<Expr *>(elements),
|
|
- getArrayRef<SourceLoc>(commas), getSourceLocFromPointer(rLoc));
|
|
+ context, convertSourceLoc(cLLoc), convertArrayRef<Expr *>(elements),
|
|
+ convertArrayRef<SourceLoc>(commas), convertSourceLoc(cRLoc));
|
|
}
|
|
|
|
-void *SwiftBooleanLiteralExpr_create(void *ctx, bool value, void *TokenLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context)
|
|
- BooleanLiteralExpr(value, getSourceLocFromPointer(TokenLoc));
|
|
+void *BooleanLiteralExpr_create(BridgedASTContext cContext, bool value,
|
|
+ BridgedSourceLoc cTokenLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) BooleanLiteralExpr(value, convertSourceLoc(cTokenLoc));
|
|
}
|
|
|
|
-void *SwiftVarDecl_create(void *ctx, BridgedIdentifier _Nullable nameId,
|
|
- void *initExpr, void *loc, bool isStatic, bool isLet,
|
|
- void *dc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto name = (UnresolvedDeclRefExpr *)nameId;
|
|
- auto sourceLoc = getSourceLocFromPointer(loc);
|
|
- auto varDecl = new (Context) VarDecl(
|
|
+void *VarDecl_create(BridgedASTContext cContext, void *nameExpr, void *initExpr,
|
|
+ BridgedSourceLoc cLoc, bool isStatic, bool isLet,
|
|
+ BridgedDeclContext cDeclContext) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
+ auto name = (UnresolvedDeclRefExpr *)nameExpr;
|
|
+ auto sourceLoc = convertSourceLoc(cLoc);
|
|
+ auto varDecl = new (context) VarDecl(
|
|
isStatic, isLet ? VarDecl::Introducer::Let : VarDecl::Introducer::Var,
|
|
- sourceLoc, name->getName().getBaseIdentifier(),
|
|
- reinterpret_cast<DeclContext *>(dc));
|
|
- auto pattern = NamedPattern::createImplicit(Context, varDecl);
|
|
+ sourceLoc, name->getName().getBaseIdentifier(), declContext);
|
|
+ auto pattern = NamedPattern::createImplicit(context, varDecl);
|
|
return PatternBindingDecl::create(
|
|
- Context, sourceLoc,
|
|
+ context, sourceLoc,
|
|
isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None,
|
|
- sourceLoc, pattern, sourceLoc, (Expr *)initExpr,
|
|
- reinterpret_cast<DeclContext *>(dc));
|
|
+ sourceLoc, pattern, sourceLoc, (Expr *)initExpr, declContext);
|
|
}
|
|
|
|
-void *SingleValueStmtExpr_createWithWrappedBranches(void *_ctx, void *S,
|
|
- void *DC, bool mustBeExpr) {
|
|
- auto &ctx = *static_cast<ASTContext *>(_ctx);
|
|
+void *SingleValueStmtExpr_createWithWrappedBranches(
|
|
+ BridgedASTContext cContext, void *S, BridgedDeclContext cDeclContext,
|
|
+ bool mustBeExpr) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
return SingleValueStmtExpr::createWithWrappedBranches(
|
|
- ctx, (Stmt *)S, (DeclContext *)DC, mustBeExpr);
|
|
+ context, (Stmt *)S, declContext, mustBeExpr);
|
|
}
|
|
|
|
-void *IfStmt_create(void *ctx, void *ifLoc, void *cond, void *_Nullable then,
|
|
- void *_Nullable elseLoc, void *_Nullable elseStmt) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) IfStmt(getSourceLocFromPointer(ifLoc), (Expr *)cond,
|
|
- (Stmt *)then, getSourceLocFromPointer(elseLoc),
|
|
- (Stmt *)elseStmt, llvm::None, Context);
|
|
+void *IfStmt_create(BridgedASTContext cContext, BridgedSourceLoc cIfLoc,
|
|
+ void *cond, void *_Nullable then, BridgedSourceLoc cElseLoc,
|
|
+ void *_Nullable elseStmt) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ IfStmt(convertSourceLoc(cIfLoc), (Expr *)cond, (Stmt *)then,
|
|
+ convertSourceLoc(cElseLoc), (Stmt *)elseStmt, llvm::None, context);
|
|
}
|
|
|
|
-void *ReturnStmt_create(void *ctx, void *loc, void *_Nullable expr) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) ReturnStmt(getSourceLocFromPointer(loc), (Expr *)expr);
|
|
+void *ReturnStmt_create(BridgedASTContext cContext, BridgedSourceLoc cLoc,
|
|
+ void *_Nullable expr) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) ReturnStmt(convertSourceLoc(cLoc), (Expr *)expr);
|
|
}
|
|
|
|
-void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements,
|
|
- void *rbloc) {
|
|
+void *BraceStmt_create(BridgedASTContext cContext, BridgedSourceLoc cLBLoc,
|
|
+ BridgedArrayRef elements, BridgedSourceLoc cRBLoc) {
|
|
llvm::SmallVector<ASTNode, 6> nodes;
|
|
- for (auto node : getArrayRef<ASTNodeBridged>(elements)) {
|
|
+ for (auto node : convertArrayRef<BridgedASTNode>(elements)) {
|
|
if (node.kind == ASTNodeKindExpr) {
|
|
auto expr = (Expr *)node.ptr;
|
|
nodes.push_back(expr);
|
|
@@ -312,88 +359,94 @@ void *BraceStmt_create(void *ctx, void *lbloc, BridgedArrayRef elements,
|
|
}
|
|
}
|
|
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return BraceStmt::create(Context, getSourceLocFromPointer(lbloc),
|
|
- Context.AllocateCopy(nodes),
|
|
- getSourceLocFromPointer(rbloc));
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return BraceStmt::create(context, convertSourceLoc(cLBLoc),
|
|
+ context.AllocateCopy(nodes),
|
|
+ convertSourceLoc(cRBLoc));
|
|
}
|
|
|
|
-void *ParamDecl_create(void *ctx, void *loc, void *_Nullable argLoc,
|
|
- BridgedIdentifier _Nullable argName,
|
|
- void *_Nullable paramLoc,
|
|
- BridgedIdentifier _Nullable paramName,
|
|
- void *_Nullable type, void *declContext) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- if (!paramName)
|
|
+void *ParamDecl_create(BridgedASTContext cContext, BridgedSourceLoc cLoc,
|
|
+ BridgedSourceLoc cArgLoc, BridgedIdentifier argName,
|
|
+ BridgedSourceLoc cParamLoc, BridgedIdentifier paramName,
|
|
+ void *_Nullable type, BridgedDeclContext cDeclContext) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
+ if (!paramName.raw)
|
|
paramName = argName;
|
|
- auto paramDecl = new (Context) ParamDecl(
|
|
- getSourceLocFromPointer(loc), getSourceLocFromPointer(argLoc),
|
|
- Identifier::getFromOpaquePointer(argName),
|
|
- getSourceLocFromPointer(paramLoc),
|
|
- Identifier::getFromOpaquePointer(paramName), (DeclContext *)declContext);
|
|
+ auto paramDecl = new (context)
|
|
+ ParamDecl(convertSourceLoc(cLoc), convertSourceLoc(cArgLoc),
|
|
+ convertIdentifier(argName), convertSourceLoc(cParamLoc),
|
|
+ convertIdentifier(paramName), declContext);
|
|
paramDecl->setTypeRepr((TypeRepr *)type);
|
|
return paramDecl;
|
|
}
|
|
|
|
-struct FuncDeclBridged
|
|
-FuncDecl_create(void *ctx, void *staticLoc, bool isStatic, void *funcLoc,
|
|
- BridgedIdentifier name, void *nameLoc, bool isAsync,
|
|
- void *_Nullable asyncLoc, bool throws,
|
|
- void *_Nullable throwsLoc, void *paramLLoc,
|
|
- BridgedArrayRef params, void *paramRLoc,
|
|
- void *_Nullable returnType, void *declContext) {
|
|
- auto *paramList = ParameterList::create(
|
|
- *static_cast<ASTContext *>(ctx), getSourceLocFromPointer(paramLLoc),
|
|
- getArrayRef<ParamDecl *>(params), getSourceLocFromPointer(paramRLoc));
|
|
- auto declName = DeclName(*static_cast<ASTContext *>(ctx),
|
|
- Identifier::getFromOpaquePointer(name), paramList);
|
|
+BridgedFuncDecl
|
|
+FuncDecl_create(BridgedASTContext cContext, BridgedSourceLoc cStaticLoc,
|
|
+ bool isStatic, BridgedSourceLoc cFuncLoc,
|
|
+ BridgedIdentifier name, BridgedSourceLoc cNameLoc, bool isAsync,
|
|
+ BridgedSourceLoc cAsyncLoc, bool throws,
|
|
+ BridgedSourceLoc cThrowsLoc, BridgedSourceLoc cParamLLoc,
|
|
+ BridgedArrayRef params, BridgedSourceLoc cParamRLoc,
|
|
+ void *_Nullable returnType, BridgedDeclContext cDeclContext) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
+ auto *paramList = ParameterList::create(context, convertSourceLoc(cParamLLoc),
|
|
+ convertArrayRef<ParamDecl *>(params),
|
|
+ convertSourceLoc(cParamRLoc));
|
|
+ auto declName =
|
|
+ DeclName(convertASTContext(cContext), convertIdentifier(name), paramList);
|
|
auto *out = FuncDecl::create(
|
|
- *static_cast<ASTContext *>(ctx), getSourceLocFromPointer(staticLoc),
|
|
+ context, convertSourceLoc(cStaticLoc),
|
|
isStatic ? StaticSpellingKind::KeywordStatic : StaticSpellingKind::None,
|
|
- getSourceLocFromPointer(funcLoc), declName,
|
|
- getSourceLocFromPointer(nameLoc), isAsync,
|
|
- getSourceLocFromPointer(asyncLoc), throws,
|
|
- getSourceLocFromPointer(throwsLoc), nullptr, paramList,
|
|
- (TypeRepr *)returnType, (DeclContext *)declContext);
|
|
+ convertSourceLoc(cFuncLoc), declName, convertSourceLoc(cNameLoc), isAsync,
|
|
+ convertSourceLoc(cAsyncLoc), throws, convertSourceLoc(cThrowsLoc),
|
|
+ nullptr, paramList, (TypeRepr *)returnType, declContext);
|
|
|
|
- return {static_cast<DeclContext *>(out), static_cast<FuncDecl *>(out),
|
|
- static_cast<Decl *>(out)};
|
|
+ return {bridgeDeclContext(out), cast<FuncDecl>(out), cast<Decl>(out)};
|
|
}
|
|
|
|
void FuncDecl_setBody(void *fn, void *body) {
|
|
((FuncDecl *)fn)->setBody((BraceStmt *)body, FuncDecl::BodyKind::Parsed);
|
|
}
|
|
|
|
-void *SimpleIdentTypeRepr_create(void *ctx, void *loc, BridgedIdentifier id) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context)
|
|
- SimpleIdentTypeRepr(DeclNameLoc(getSourceLocFromPointer(loc)),
|
|
- DeclNameRef(Identifier::getFromOpaquePointer(id)));
|
|
-}
|
|
-
|
|
-void *GenericIdentTypeRepr_create(void *ctx, BridgedIdentifier name,
|
|
- void *nameLoc, BridgedArrayRef genericArgs,
|
|
- void *lAngle, void *rAngle) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto Loc = DeclNameLoc(getSourceLocFromPointer(nameLoc));
|
|
- auto Name = DeclNameRef(Identifier::getFromOpaquePointer(name));
|
|
- SourceLoc lAngleLoc = getSourceLocFromPointer(lAngle);
|
|
- SourceLoc rAngleLoc = getSourceLocFromPointer(rAngle);
|
|
- return GenericIdentTypeRepr::create(Context, Loc, Name,
|
|
- getArrayRef<TypeRepr *>(genericArgs),
|
|
+void *SimpleIdentTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc, BridgedIdentifier id) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) SimpleIdentTypeRepr(DeclNameLoc(convertSourceLoc(cLoc)),
|
|
+ DeclNameRef(convertIdentifier(id)));
|
|
+}
|
|
+
|
|
+void *GenericIdentTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedArrayRef genericArgs,
|
|
+ BridgedSourceLoc cLAngleLoc,
|
|
+ BridgedSourceLoc cRAngleLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto Loc = DeclNameLoc(convertSourceLoc(cNameLoc));
|
|
+ auto Name = DeclNameRef(convertIdentifier(name));
|
|
+ SourceLoc lAngleLoc = convertSourceLoc(cLAngleLoc);
|
|
+ SourceLoc rAngleLoc = convertSourceLoc(cRAngleLoc);
|
|
+ return GenericIdentTypeRepr::create(context, Loc, Name,
|
|
+ convertArrayRef<TypeRepr *>(genericArgs),
|
|
SourceRange{lAngleLoc, rAngleLoc});
|
|
}
|
|
|
|
-void *UnresolvedDotExpr_create(void *ctx, void *base, void *dotLoc,
|
|
- BridgedIdentifier name, void *nameLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context)
|
|
- UnresolvedDotExpr((Expr *)base, getSourceLocFromPointer(dotLoc),
|
|
- DeclNameRef(Identifier::getFromOpaquePointer(name)),
|
|
- DeclNameLoc(getSourceLocFromPointer(nameLoc)), false);
|
|
+void *UnresolvedDotExpr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cDotLoc, BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ UnresolvedDotExpr((Expr *)base, convertSourceLoc(cDotLoc),
|
|
+ DeclNameRef(convertIdentifier(name)),
|
|
+ DeclNameLoc(convertSourceLoc(cNameLoc)), false);
|
|
}
|
|
|
|
-void *ClosureExpr_create(void *ctx, void *body, void *dc) {
|
|
+void *ClosureExpr_create(BridgedASTContext cContext, void *body,
|
|
+ BridgedDeclContext cDeclContext) {
|
|
DeclAttributes attributes;
|
|
SourceRange bracketRange;
|
|
SourceLoc asyncLoc;
|
|
@@ -401,99 +454,118 @@ void *ClosureExpr_create(void *ctx, void *body, void *dc) {
|
|
SourceLoc arrowLoc;
|
|
SourceLoc inLoc;
|
|
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto params = ParameterList::create(Context, inLoc, {}, inLoc);
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
|
|
- auto *out = new (Context)
|
|
+ auto params = ParameterList::create(context, inLoc, {}, inLoc);
|
|
+
|
|
+ auto *out = new (context)
|
|
ClosureExpr(attributes, bracketRange, nullptr, nullptr, asyncLoc,
|
|
- throwsLoc, arrowLoc, inLoc, nullptr, (DeclContext *)dc);
|
|
+ throwsLoc, arrowLoc, inLoc, nullptr, declContext);
|
|
out->setBody((BraceStmt *)body, true);
|
|
out->setParameterList(params);
|
|
return (Expr *)out;
|
|
}
|
|
|
|
void NominalTypeDecl_setMembers(void *decl, BridgedArrayRef members) {
|
|
- auto declMembers = getArrayRef<Decl *>(members);
|
|
+ auto declMembers = convertArrayRef<Decl *>(members);
|
|
for (auto m : declMembers)
|
|
((NominalTypeDecl *)decl)->addMember(m);
|
|
}
|
|
|
|
-DeclContextAndDecl StructDecl_create(void *ctx, void *loc,
|
|
- BridgedIdentifier name, void *nameLoc,
|
|
- void *_Nullable genericParams, void *dc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto *out = new (Context) StructDecl(
|
|
- getSourceLocFromPointer(loc), Identifier::getFromOpaquePointer(name),
|
|
- getSourceLocFromPointer(nameLoc), {}, (GenericParamList *)genericParams,
|
|
- (DeclContext *)dc);
|
|
+BridgedDeclContextAndDecl StructDecl_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ void *_Nullable genericParams,
|
|
+ BridgedDeclContext cDeclContext) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
+ auto *out =
|
|
+ new (context) StructDecl(convertSourceLoc(cLoc), convertIdentifier(name),
|
|
+ convertSourceLoc(cNameLoc), {},
|
|
+ (GenericParamList *)genericParams, declContext);
|
|
out->setImplicit(); // TODO: remove this.
|
|
- return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out};
|
|
+ return {bridgeDeclContext(out->getDeclContext()), cast<NominalTypeDecl>(out), cast<Decl>(out)};
|
|
}
|
|
|
|
-DeclContextAndDecl ClassDecl_create(void *ctx, void *loc,
|
|
- BridgedIdentifier name, void *nameLoc,
|
|
- void *dc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto *out = new (Context) ClassDecl(
|
|
- getSourceLocFromPointer(loc), Identifier::getFromOpaquePointer(name),
|
|
- getSourceLocFromPointer(nameLoc), {}, nullptr, (DeclContext *)dc, false);
|
|
+BridgedDeclContextAndDecl ClassDecl_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLoc,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedDeclContext cDeclContext) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ DeclContext *declContext = convertDeclContext(cDeclContext);
|
|
+
|
|
+ auto *out = new (context)
|
|
+ ClassDecl(convertSourceLoc(cLoc), convertIdentifier(name),
|
|
+ convertSourceLoc(cNameLoc), {}, nullptr, declContext, false);
|
|
out->setImplicit(); // TODO: remove this.
|
|
- return {(DeclContext *)out, (NominalTypeDecl *)out, (Decl *)out};
|
|
+ return {BridgedDeclContext{out}, (NominalTypeDecl *)out, (Decl *)out};
|
|
}
|
|
|
|
-void *OptionalTypeRepr_create(void *ctx, void *base, void *questionLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context)
|
|
- OptionalTypeRepr((TypeRepr *)base, getSourceLocFromPointer(questionLoc));
|
|
+void *OptionalTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cQuestionLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ OptionalTypeRepr((TypeRepr *)base, convertSourceLoc(cQuestionLoc));
|
|
}
|
|
|
|
-void *ImplicitlyUnwrappedOptionalTypeRepr_create(void *ctx, void *base,
|
|
- void *exclamationLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) ImplicitlyUnwrappedOptionalTypeRepr(
|
|
- (TypeRepr *)base, getSourceLocFromPointer(exclamationLoc));
|
|
+void *ImplicitlyUnwrappedOptionalTypeRepr_create(
|
|
+ BridgedASTContext cContext, void *base, BridgedSourceLoc cExclamationLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) ImplicitlyUnwrappedOptionalTypeRepr(
|
|
+ (TypeRepr *)base, convertSourceLoc(cExclamationLoc));
|
|
}
|
|
|
|
-void *ArrayTypeRepr_create(void *ctx, void *base, void *lsquareLoc,
|
|
- void *rsquareLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc lSquareLoc = getSourceLocFromPointer(lsquareLoc);
|
|
- SourceLoc rSquareLoc = getSourceLocFromPointer(rsquareLoc);
|
|
- return new (Context)
|
|
+void *ArrayTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cLSquareLoc,
|
|
+ BridgedSourceLoc cRSquareLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc lSquareLoc = convertSourceLoc(cLSquareLoc);
|
|
+ SourceLoc rSquareLoc = convertSourceLoc(cRSquareLoc);
|
|
+ return new (context)
|
|
ArrayTypeRepr((TypeRepr *)base, SourceRange{lSquareLoc, rSquareLoc});
|
|
}
|
|
|
|
-void *DictionaryTypeRepr_create(void *ctx, void *keyType, void *valueType,
|
|
- void *lsquareLoc, void *colonloc,
|
|
- void *rsquareLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc lSquareLoc = getSourceLocFromPointer(lsquareLoc);
|
|
- SourceLoc colonLoc = getSourceLocFromPointer(colonloc);
|
|
- SourceLoc rSquareLoc = getSourceLocFromPointer(rsquareLoc);
|
|
- return new (Context)
|
|
+void *DictionaryTypeRepr_create(BridgedASTContext cContext, void *keyType,
|
|
+ void *valueType, BridgedSourceLoc cLSquareLoc,
|
|
+ BridgedSourceLoc cColonloc,
|
|
+ BridgedSourceLoc cRSquareLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc lSquareLoc = convertSourceLoc(cLSquareLoc);
|
|
+ SourceLoc colonLoc = convertSourceLoc(cColonloc);
|
|
+ SourceLoc rSquareLoc = convertSourceLoc(cRSquareLoc);
|
|
+ return new (context)
|
|
DictionaryTypeRepr((TypeRepr *)keyType, (TypeRepr *)valueType, colonLoc,
|
|
SourceRange{lSquareLoc, rSquareLoc});
|
|
}
|
|
|
|
-void *MetatypeTypeRepr_create(void *ctx, void *baseType, void *typeLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc tyLoc = getSourceLocFromPointer(typeLoc);
|
|
- return new (Context) MetatypeTypeRepr((TypeRepr *)baseType, tyLoc);
|
|
+void *MetatypeTypeRepr_create(BridgedASTContext cContext, void *baseType,
|
|
+ BridgedSourceLoc cTypeLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc tyLoc = convertSourceLoc(cTypeLoc);
|
|
+ return new (context) MetatypeTypeRepr((TypeRepr *)baseType, tyLoc);
|
|
}
|
|
|
|
-void *ProtocolTypeRepr_create(void *ctx, void *baseType, void *protoLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc protocolLoc = getSourceLocFromPointer(protoLoc);
|
|
- return new (Context) ProtocolTypeRepr((TypeRepr *)baseType, protocolLoc);
|
|
+void *ProtocolTypeRepr_create(BridgedASTContext cContext, void *baseType,
|
|
+ BridgedSourceLoc cProtoLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc protoLoc = convertSourceLoc(cProtoLoc);
|
|
+ return new (context) ProtocolTypeRepr((TypeRepr *)baseType, protoLoc);
|
|
}
|
|
|
|
-void *PackExpansionTypeRepr_create(void *ctx, void *base, void *repeatLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) PackExpansionTypeRepr(
|
|
- getSourceLocFromPointer(repeatLoc), (TypeRepr *)base);
|
|
+void *PackExpansionTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cRepeatLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ PackExpansionTypeRepr(convertSourceLoc(cRepeatLoc), (TypeRepr *)base);
|
|
}
|
|
|
|
-static BridgedTypeAttrKind bridgeTypeAttrKind(TypeAttrKind kind) {
|
|
+BridgedTypeAttrKind TypeAttrKind_fromString(BridgedString cStr) {
|
|
+ TypeAttrKind kind =
|
|
+ TypeAttributes::getAttrKindFromString(convertString(cStr));
|
|
switch (kind) {
|
|
#define TYPE_ATTR(X) case TAK_##X: return BridgedTypeAttrKind_##X;
|
|
#include "swift/AST/Attr.def"
|
|
@@ -501,212 +573,217 @@ static BridgedTypeAttrKind bridgeTypeAttrKind(TypeAttrKind kind) {
|
|
}
|
|
}
|
|
|
|
-static TypeAttrKind bridgeTypeAttrKind(BridgedTypeAttrKind kind) {
|
|
- switch (kind) {
|
|
-#define TYPE_ATTR(X) case BridgedTypeAttrKind_##X: return TAK_##X;
|
|
-#include "swift/AST/Attr.def"
|
|
- case BridgedTypeAttrKind_Count: return TAK_Count;
|
|
- }
|
|
-}
|
|
-
|
|
-BridgedTypeAttrKind getBridgedTypeAttrKindFromString(
|
|
- const unsigned char *str, intptr_t len) {
|
|
- return bridgeTypeAttrKind(
|
|
- TypeAttributes::getAttrKindFromString(StringRef((const char *)str, len)));
|
|
-}
|
|
+BridgedTypeAttributes TypeAttributes_create() { return {new TypeAttributes()}; }
|
|
|
|
-BridgedTypeAttributes BridgedTypeAttributes_create() {
|
|
- return new TypeAttributes();
|
|
-}
|
|
-
|
|
-void BridgedTypeAttributes_addSimpleAttr(
|
|
- BridgedTypeAttributes typeAttributesPtr, BridgedTypeAttrKind kind,
|
|
- void *atLoc, void *attrLoc
|
|
-) {
|
|
- TypeAttributes *typeAttributes = (TypeAttributes *)typeAttributesPtr;
|
|
- typeAttributes->setAttr(
|
|
- bridgeTypeAttrKind(kind), getSourceLocFromPointer(attrLoc));
|
|
+void TypeAttributes_addSimpleAttr(BridgedTypeAttributes cAttributes,
|
|
+ BridgedTypeAttrKind cKind,
|
|
+ BridgedSourceLoc cAtLoc,
|
|
+ BridgedSourceLoc cAttrLoc) {
|
|
+ TypeAttributes *typeAttributes = convertTypeAttributes(cAttributes);
|
|
+ typeAttributes->setAttr(convertTypeAttrKind(cKind),
|
|
+ convertSourceLoc(cAttrLoc));
|
|
if (typeAttributes->AtLoc.isInvalid())
|
|
- typeAttributes->AtLoc = getSourceLocFromPointer(atLoc);
|
|
+ typeAttributes->AtLoc = convertSourceLoc(cAtLoc);
|
|
}
|
|
|
|
-void *AttributedTypeRepr_create(
|
|
- void *ctx, void *base, BridgedTypeAttributes typeAttributesPtr) {
|
|
- TypeAttributes *typeAttributes = (TypeAttributes *)typeAttributesPtr;
|
|
+void *AttributedTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedTypeAttributes cAttributes) {
|
|
+ TypeAttributes *typeAttributes = convertTypeAttributes(cAttributes);
|
|
if (typeAttributes->empty())
|
|
return base;
|
|
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
auto attributedType =
|
|
- new (Context) AttributedTypeRepr(*typeAttributes, (TypeRepr *)base);
|
|
+ new (context) AttributedTypeRepr(*typeAttributes, (TypeRepr *)base);
|
|
delete typeAttributes;
|
|
return attributedType;
|
|
}
|
|
|
|
-void *AttributedTypeSpecifierRepr_create(
|
|
- void *ctx, void *base, BridgedAttributedTypeSpecifier specifier, void *specifierLoc
|
|
-) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc loc = getSourceLocFromPointer(specifierLoc);
|
|
+void *
|
|
+AttributedTypeSpecifierRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedAttributedTypeSpecifier specifier,
|
|
+ BridgedSourceLoc cSpecifierLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc loc = convertSourceLoc(cSpecifierLoc);
|
|
TypeRepr *baseType = (TypeRepr *)base;
|
|
switch (specifier) {
|
|
case BridgedAttributedTypeSpecifierInOut:
|
|
- return new (Context) OwnershipTypeRepr(baseType, ParamSpecifier::InOut, loc);
|
|
+ return new (context)
|
|
+ OwnershipTypeRepr(baseType, ParamSpecifier::InOut, loc);
|
|
case BridgedAttributedTypeSpecifierBorrowing:
|
|
- return new (Context) OwnershipTypeRepr(baseType, ParamSpecifier::Borrowing, loc);
|
|
+ return new (context)
|
|
+ OwnershipTypeRepr(baseType, ParamSpecifier::Borrowing, loc);
|
|
case BridgedAttributedTypeSpecifierConsuming:
|
|
- return new (Context) OwnershipTypeRepr(baseType, ParamSpecifier::Consuming, loc);
|
|
+ return new (context)
|
|
+ OwnershipTypeRepr(baseType, ParamSpecifier::Consuming, loc);
|
|
case BridgedAttributedTypeSpecifierLegacyShared:
|
|
- return new (Context) OwnershipTypeRepr(baseType, ParamSpecifier::LegacyShared, loc);
|
|
+ return new (context)
|
|
+ OwnershipTypeRepr(baseType, ParamSpecifier::LegacyShared, loc);
|
|
case BridgedAttributedTypeSpecifierLegacyOwned:
|
|
- return new (Context) OwnershipTypeRepr(baseType, ParamSpecifier::LegacyOwned, loc);
|
|
+ return new (context)
|
|
+ OwnershipTypeRepr(baseType, ParamSpecifier::LegacyOwned, loc);
|
|
case BridgedAttributedTypeSpecifierConst:
|
|
- return new (Context) CompileTimeConstTypeRepr(baseType, loc);
|
|
+ return new (context) CompileTimeConstTypeRepr(baseType, loc);
|
|
case BridgedAttributedTypeSpecifierIsolated:
|
|
- return new (Context) IsolatedTypeRepr(baseType, loc);
|
|
+ return new (context) IsolatedTypeRepr(baseType, loc);
|
|
}
|
|
}
|
|
|
|
-void *VarargTypeRepr_create(void *ctx, void *base, void *ellipsisLocPtr) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc ellipsisLoc = getSourceLocFromPointer(ellipsisLocPtr);
|
|
+void *VarargTypeRepr_create(BridgedASTContext cContext, void *base,
|
|
+ BridgedSourceLoc cEllipsisLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc ellipsisLoc = convertSourceLoc(cEllipsisLoc);
|
|
TypeRepr *baseType = (TypeRepr *)base;
|
|
- return new (Context) VarargTypeRepr(baseType, ellipsisLoc);
|
|
+ return new (context) VarargTypeRepr(baseType, ellipsisLoc);
|
|
}
|
|
|
|
-void *TupleTypeRepr_create(void *ctx, BridgedArrayRef elements, void *lParenLoc,
|
|
- void *rParenLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc lParen = getSourceLocFromPointer(lParenLoc);
|
|
- SourceLoc rParen = getSourceLocFromPointer(rParenLoc);
|
|
+void *TupleTypeRepr_create(BridgedASTContext cContext, BridgedArrayRef elements,
|
|
+ BridgedSourceLoc cLParenLoc,
|
|
+ BridgedSourceLoc cRParenLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc lParen = convertSourceLoc(cLParenLoc);
|
|
+ SourceLoc rParen = convertSourceLoc(cRParenLoc);
|
|
+
|
|
SmallVector<TupleTypeReprElement, 8> tupleElements;
|
|
- for (auto element : getArrayRef<BridgedTupleTypeElement>(elements)) {
|
|
+ for (auto element : convertArrayRef<BridgedTupleTypeElement>(elements)) {
|
|
TupleTypeReprElement elementRepr;
|
|
- elementRepr.Name = Identifier::getFromOpaquePointer(element.Name);
|
|
- elementRepr.NameLoc = getSourceLocFromPointer(element.NameLoc);
|
|
- elementRepr.SecondName =
|
|
- Identifier::getFromOpaquePointer(element.SecondName);
|
|
- elementRepr.SecondNameLoc = getSourceLocFromPointer(element.SecondNameLoc);
|
|
- elementRepr.UnderscoreLoc = getSourceLocFromPointer(element.UnderscoreLoc);
|
|
- elementRepr.ColonLoc = getSourceLocFromPointer(element.ColonLoc);
|
|
+ elementRepr.Name = convertIdentifier(element.Name);
|
|
+ elementRepr.NameLoc = convertSourceLoc(element.NameLoc);
|
|
+ elementRepr.SecondName = convertIdentifier(element.SecondName);
|
|
+ elementRepr.SecondNameLoc = convertSourceLoc(element.SecondNameLoc);
|
|
+ elementRepr.UnderscoreLoc = convertSourceLoc(element.UnderscoreLoc);
|
|
+ elementRepr.ColonLoc = convertSourceLoc(element.ColonLoc);
|
|
elementRepr.Type = (TypeRepr *)element.Type;
|
|
- elementRepr.TrailingCommaLoc =
|
|
- getSourceLocFromPointer(element.TrailingCommaLoc);
|
|
+ elementRepr.TrailingCommaLoc = convertSourceLoc(element.TrailingCommaLoc);
|
|
tupleElements.emplace_back(elementRepr);
|
|
}
|
|
|
|
- return TupleTypeRepr::create(Context, tupleElements,
|
|
+ return TupleTypeRepr::create(context, tupleElements,
|
|
SourceRange{lParen, rParen});
|
|
}
|
|
|
|
-void *MemberTypeRepr_create(void *ctx, void *baseComponent,
|
|
+void *MemberTypeRepr_create(BridgedASTContext cContext, void *baseComponent,
|
|
BridgedArrayRef bridgedMemberComponents) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto memberComponents = getArrayRef<IdentTypeRepr *>(bridgedMemberComponents);
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto memberComponents =
|
|
+ convertArrayRef<IdentTypeRepr *>(bridgedMemberComponents);
|
|
|
|
- return MemberTypeRepr::create(Context, (TypeRepr *)baseComponent,
|
|
+ return MemberTypeRepr::create(context, (TypeRepr *)baseComponent,
|
|
memberComponents);
|
|
}
|
|
|
|
-void *EmptyCompositionTypeRepr_create(void *ctx, void *anyLocPtr) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc anyLoc = getSourceLocFromPointer(anyLocPtr);
|
|
- return CompositionTypeRepr::createEmptyComposition(Context, anyLoc);
|
|
+void *EmptyCompositionTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cAnyLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc anyLoc = convertSourceLoc(cAnyLoc);
|
|
+ return CompositionTypeRepr::createEmptyComposition(context, anyLoc);
|
|
}
|
|
|
|
-void *CompositionTypeRepr_create(void *ctx, BridgedArrayRef typesPtr,
|
|
- void *firstTypeLoc, void *firstAmpLocPtr) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- SourceLoc firstType = getSourceLocFromPointer(firstTypeLoc);
|
|
- SourceLoc firstAmpLoc = getSourceLocFromPointer(firstAmpLocPtr);
|
|
- auto types = getArrayRef<TypeRepr *>(typesPtr);
|
|
+void *CompositionTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedArrayRef cTypes,
|
|
+ BridgedSourceLoc cFirstTypeLoc,
|
|
+ BridgedSourceLoc cFirstAmpLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ SourceLoc firstTypeLoc = convertSourceLoc(cFirstTypeLoc);
|
|
+ SourceLoc firstAmpLoc = convertSourceLoc(cFirstAmpLoc);
|
|
+ auto types = convertArrayRef<TypeRepr *>(cTypes);
|
|
return CompositionTypeRepr::create(
|
|
- Context, types, firstType,
|
|
+ context, types, firstTypeLoc,
|
|
SourceRange{firstAmpLoc, types.back()->getEndLoc()});
|
|
}
|
|
|
|
-void *FunctionTypeRepr_create(void *ctx, void *argsTy, void *_Nullable asyncLoc,
|
|
- void *_Nullable throwsLoc, void *arrowLoc,
|
|
- void *returnType) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) FunctionTypeRepr(
|
|
- nullptr, (TupleTypeRepr *)argsTy, getSourceLocFromPointer(asyncLoc),
|
|
- getSourceLocFromPointer(throwsLoc), getSourceLocFromPointer(arrowLoc),
|
|
+void *FunctionTypeRepr_create(BridgedASTContext cContext, void *argsTy,
|
|
+ BridgedSourceLoc cAsyncLoc,
|
|
+ BridgedSourceLoc cThrowsLoc,
|
|
+ BridgedSourceLoc cArrowLoc, void *returnType) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) FunctionTypeRepr(
|
|
+ nullptr, (TupleTypeRepr *)argsTy, convertSourceLoc(cAsyncLoc),
|
|
+ convertSourceLoc(cThrowsLoc), convertSourceLoc(cArrowLoc),
|
|
(TypeRepr *)returnType);
|
|
}
|
|
|
|
-void *NamedOpaqueReturnTypeRepr_create(void *ctx, void *baseTy) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) NamedOpaqueReturnTypeRepr((TypeRepr *)baseTy, nullptr);
|
|
+void *NamedOpaqueReturnTypeRepr_create(BridgedASTContext cContext,
|
|
+ void *baseTy) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context) NamedOpaqueReturnTypeRepr((TypeRepr *)baseTy, nullptr);
|
|
}
|
|
|
|
-void *OpaqueReturnTypeRepr_create(void *ctx, void *opaqueLoc, void *baseTy) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context) OpaqueReturnTypeRepr(getSourceLocFromPointer(opaqueLoc),
|
|
- (TypeRepr *)baseTy);
|
|
+void *OpaqueReturnTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cOpaqueLoc, void *baseTy) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ OpaqueReturnTypeRepr(convertSourceLoc(cOpaqueLoc), (TypeRepr *)baseTy);
|
|
}
|
|
-void *ExistentialTypeRepr_create(void *ctx, void *anyLoc, void *baseTy) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- return new (Context)
|
|
- ExistentialTypeRepr(getSourceLocFromPointer(anyLoc), (TypeRepr *)baseTy);
|
|
+void *ExistentialTypeRepr_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cAnyLoc, void *baseTy) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ return new (context)
|
|
+ ExistentialTypeRepr(convertSourceLoc(cAnyLoc), (TypeRepr *)baseTy);
|
|
}
|
|
|
|
-void *GenericParamList_create(void *ctx, void *lAngleLoc,
|
|
- BridgedArrayRef params, void *_Nullable whereLoc,
|
|
- BridgedArrayRef reqs, void *rAngleLoc) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
+void *GenericParamList_create(BridgedASTContext cContext,
|
|
+ BridgedSourceLoc cLAngleLoc,
|
|
+ BridgedArrayRef params,
|
|
+ BridgedSourceLoc cWhereLoc, BridgedArrayRef reqs,
|
|
+ BridgedSourceLoc cRAngleLoc) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
SmallVector<RequirementRepr> requirements;
|
|
- for (auto req : getArrayRef<BridgedRequirementRepr>(reqs)) {
|
|
+ for (auto req : convertArrayRef<BridgedRequirementRepr>(reqs)) {
|
|
switch (req.Kind) {
|
|
case BridgedRequirementReprKindTypeConstraint:
|
|
requirements.push_back(RequirementRepr::getTypeConstraint(
|
|
- (TypeRepr *)req.FirstType, getSourceLocFromPointer(req.SeparatorLoc),
|
|
- (TypeRepr *)req.SecondType, /*isExpansionPattern*/false));
|
|
+ (TypeRepr *)req.FirstType, convertSourceLoc(req.SeparatorLoc),
|
|
+ (TypeRepr *)req.SecondType, /*isExpansionPattern*/ false));
|
|
break;
|
|
case BridgedRequirementReprKindSameType:
|
|
requirements.push_back(RequirementRepr::getSameType(
|
|
- (TypeRepr *)req.FirstType, getSourceLocFromPointer(req.SeparatorLoc),
|
|
- (TypeRepr *)req.SecondType, /*isExpansionPattern*/false));
|
|
+ (TypeRepr *)req.FirstType, convertSourceLoc(req.SeparatorLoc),
|
|
+ (TypeRepr *)req.SecondType, /*isExpansionPattern*/ false));
|
|
break;
|
|
case BridgedRequirementReprKindLayoutConstraint:
|
|
llvm_unreachable("cannot handle layout constraints!");
|
|
}
|
|
}
|
|
- return GenericParamList::create(Context, getSourceLocFromPointer(lAngleLoc),
|
|
- getArrayRef<GenericTypeParamDecl *>(params),
|
|
- getSourceLocFromPointer(whereLoc),
|
|
- requirements,
|
|
- getSourceLocFromPointer(rAngleLoc));
|
|
+ return GenericParamList::create(
|
|
+ context, convertSourceLoc(cLAngleLoc),
|
|
+ convertArrayRef<GenericTypeParamDecl *>(params),
|
|
+ convertSourceLoc(cWhereLoc), requirements, convertSourceLoc(cRAngleLoc));
|
|
}
|
|
|
|
-void *GenericTypeParamDecl_create(void *ctx, void *declContext,
|
|
- BridgedIdentifier name, void *nameLoc,
|
|
- void *_Nullable eachLoc, long index,
|
|
+void *GenericTypeParamDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ BridgedSourceLoc cEachLoc, long index,
|
|
bool isParameterPack) {
|
|
return GenericTypeParamDecl::createParsed(
|
|
- static_cast<DeclContext *>(declContext),
|
|
- Identifier::getFromOpaquePointer(name), getSourceLocFromPointer(nameLoc),
|
|
- getSourceLocFromPointer(eachLoc),
|
|
+ convertDeclContext(cDeclContext), convertIdentifier(name),
|
|
+ convertSourceLoc(cNameLoc), convertSourceLoc(cEachLoc),
|
|
/*index*/ index, isParameterPack);
|
|
}
|
|
|
|
-void GenericTypeParamDecl_setInheritedType(void *ctx, void *Param, void *ty) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto entries = Context.AllocateCopy(
|
|
+void GenericTypeParamDecl_setInheritedType(BridgedASTContext cContext,
|
|
+ void *param, void *ty) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto entries = context.AllocateCopy(
|
|
ArrayRef<InheritedEntry>{InheritedEntry{(TypeRepr *)ty}});
|
|
- ((GenericTypeParamDecl *)Param)->setInherited(entries);
|
|
+ ((GenericTypeParamDecl *)param)->setInherited(entries);
|
|
}
|
|
|
|
-DeclContextAndDecl TypeAliasDecl_create(void *ctx, void *declContext,
|
|
- void *aliasLoc, void *equalLoc,
|
|
- BridgedIdentifier name, void *nameLoc,
|
|
- void *_Nullable genericParams) {
|
|
- ASTContext &Context = *static_cast<ASTContext *>(ctx);
|
|
- auto *out = new (Context) TypeAliasDecl(
|
|
- getSourceLocFromPointer(aliasLoc), getSourceLocFromPointer(equalLoc),
|
|
- Identifier::getFromOpaquePointer(name), getSourceLocFromPointer(nameLoc),
|
|
- (GenericParamList *)genericParams, (DeclContext *)declContext);
|
|
- return {(DeclContext *)out, (TypeAliasDecl *)out, (Decl *)out};
|
|
+BridgedDeclContextAndDecl TypeAliasDecl_create(BridgedASTContext cContext,
|
|
+ BridgedDeclContext cDeclContext,
|
|
+ BridgedSourceLoc cAliasLoc,
|
|
+ BridgedSourceLoc cEqualLoc,
|
|
+ BridgedIdentifier name,
|
|
+ BridgedSourceLoc cNameLoc,
|
|
+ void *_Nullable genericParams) {
|
|
+ ASTContext &context = convertASTContext(cContext);
|
|
+ auto *out = new (context) TypeAliasDecl(
|
|
+ convertSourceLoc(cAliasLoc), convertSourceLoc(cEqualLoc),
|
|
+ convertIdentifier(name), convertSourceLoc(cNameLoc),
|
|
+ (GenericParamList *)genericParams, convertDeclContext(cDeclContext));
|
|
+ return {BridgedDeclContext{out}, (TypeAliasDecl *)out, (Decl *)out};
|
|
}
|
|
|
|
void TypeAliasDecl_setUnderlyingTypeRepr(void *decl, void *underlyingType) {
|
|
@@ -717,13 +794,14 @@ void TypeAliasDecl_setUnderlyingTypeRepr(void *decl, void *underlyingType) {
|
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
|
|
void TopLevelCodeDecl_dump(void *decl) {
|
|
- ((TopLevelCodeDecl *)decl)->dump(llvm::errs());
|
|
+ static_cast<TopLevelCodeDecl *>(decl)->dump(llvm::errs());
|
|
}
|
|
-
|
|
-void Expr_dump(void *expr) { ((Expr *)expr)->dump(llvm::errs()); }
|
|
-void Decl_dump(void *expr) { ((Decl *)expr)->dump(llvm::errs()); }
|
|
-void Stmt_dump(void *expr) { ((Stmt *)expr)->dump(llvm::errs()); }
|
|
-void Type_dump(void *expr) { ((TypeRepr *)expr)->dump(); }
|
|
+void Expr_dump(void *expr) { static_cast<Expr *>(expr)->dump(llvm::errs()); }
|
|
+void Decl_dump(void *decl) { static_cast<Decl *>(decl)->dump(llvm::errs()); }
|
|
+void Stmt_dump(void *statement) {
|
|
+ static_cast<Stmt *>(statement)->dump(llvm::errs());
|
|
+}
|
|
+void Type_dump(void *type) { static_cast<TypeRepr *>(type)->dump(); }
|
|
|
|
#pragma clang diagnostic pop
|
|
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/ASTGen.swift b/swift/lib/ASTGen/Sources/ASTGen/ASTGen.swift
|
|
index 4aa3321190403..5cfedde85a4d6 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/ASTGen.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/ASTGen.swift
|
|
@@ -38,14 +38,14 @@ enum ASTNode {
|
|
}
|
|
}
|
|
|
|
- func bridged() -> ASTNodeBridged {
|
|
+ var bridged: BridgedASTNode {
|
|
switch self {
|
|
case .expr(let e):
|
|
- return ASTNodeBridged(ptr: e, kind: .expr)
|
|
+ return BridgedASTNode(ptr: e, kind: .expr)
|
|
case .stmt(let s):
|
|
- return ASTNodeBridged(ptr: s, kind: .stmt)
|
|
+ return BridgedASTNode(ptr: s, kind: .stmt)
|
|
case .decl(let d):
|
|
- return ASTNodeBridged(ptr: d, kind: .decl)
|
|
+ return BridgedASTNode(ptr: d, kind: .decl)
|
|
default:
|
|
fatalError("Must be expr, stmt, or decl.")
|
|
}
|
|
@@ -66,10 +66,10 @@ class Boxed<Value> {
|
|
struct ASTGenVisitor: SyntaxTransformVisitor {
|
|
typealias ResultType = ASTNode
|
|
|
|
- let ctx: UnsafeMutableRawPointer
|
|
- let base: UnsafePointer<UInt8>
|
|
+ let ctx: BridgedASTContext
|
|
+ let base: UnsafeBufferPointer<UInt8>
|
|
|
|
- @Boxed var declContext: UnsafeMutableRawPointer
|
|
+ @Boxed var declContext: BridgedDeclContext
|
|
|
|
// TODO: this some how messes up the witness table when I uncomment it locally :/
|
|
// public func visit<T>(_ node: T?) -> [UnsafeMutableRawPointer]? {
|
|
@@ -90,15 +90,15 @@ struct ASTGenVisitor: SyntaxTransformVisitor {
|
|
var out = [UnsafeMutableRawPointer]()
|
|
|
|
for element in node.statements {
|
|
- let loc = self.base.advanced(by: element.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: element)
|
|
let swiftASTNodes = visit(element)
|
|
switch swiftASTNodes {
|
|
case .decl(let d):
|
|
out.append(d)
|
|
case .stmt(let s):
|
|
- out.append(SwiftTopLevelCodeDecl_createStmt(ctx, declContext, loc, s, loc))
|
|
+ out.append(TopLevelCodeDecl_createStmt(ctx, declContext, loc, s, loc))
|
|
case .expr(let e):
|
|
- out.append(SwiftTopLevelCodeDecl_createExpr(ctx, declContext, loc, e, loc))
|
|
+ out.append(TopLevelCodeDecl_createExpr(ctx, declContext, loc, e, loc))
|
|
default:
|
|
fatalError("Top level nodes must be decls, stmts, or exprs.")
|
|
}
|
|
@@ -118,7 +118,7 @@ public func buildTopLevelASTNodes(
|
|
callback: @convention(c) (UnsafeMutableRawPointer, UnsafeMutableRawPointer) -> Void
|
|
) {
|
|
sourceFilePtr.withMemoryRebound(to: ExportedSourceFile.self, capacity: 1) { sourceFile in
|
|
- ASTGenVisitor(ctx: ctx, base: sourceFile.pointee.buffer.baseAddress!, declContext: dc)
|
|
+ ASTGenVisitor(ctx: BridgedASTContext(raw: ctx), base: sourceFile.pointee.buffer, declContext: BridgedDeclContext(raw: dc))
|
|
.visit(sourceFile.pointee.syntax)
|
|
.forEach { callback($0, outputContext) }
|
|
}
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Decls.swift b/swift/lib/ASTGen/Sources/ASTGen/Decls.swift
|
|
index 815bb696b137b..d1f60d3a94df3 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Decls.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Decls.swift
|
|
@@ -4,13 +4,13 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
public func visit(_ node: TypealiasDeclSyntax) -> ASTNode {
|
|
- let aliasLoc = self.base.advanced(by: node.typealiasKeyword.position.utf8Offset).raw
|
|
- let equalLoc = self.base.advanced(by: node.initializer.equal.position.utf8Offset).raw
|
|
+ let aliasLoc = bridgedSourceLoc(for: node.typealiasKeyword)
|
|
+ let equalLoc = bridgedSourceLoc(for: node.initializer.equal)
|
|
var nameText = node.identifier.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
- let nameLoc = self.base.advanced(by: node.identifier.position.utf8Offset).raw
|
|
+ let nameLoc = bridgedSourceLoc(for: node.identifier)
|
|
let genericParams = node.genericParameterClause.map { self.visit($0).rawValue }
|
|
let out = TypeAliasDecl_create(
|
|
self.ctx, self.declContext, aliasLoc, equalLoc, name, nameLoc, genericParams)
|
|
@@ -26,10 +26,10 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
public func visit(_ node: StructDeclSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
var nameText = node.identifier.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
|
|
let genericParams = node.genericParameterClause
|
|
@@ -49,10 +49,10 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
public func visit(_ node: ClassDeclSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
var nameText = node.identifier.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
|
|
let out = ClassDecl_create(ctx, loc, name, loc, declContext)
|
|
@@ -73,29 +73,29 @@ extension ASTGenVisitor {
|
|
let pattern = visit(node.bindings.first!.pattern).rawValue
|
|
let initializer = visit(node.bindings.first!.initializer!).rawValue
|
|
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
let isStatic = false // TODO: compute this
|
|
let isLet = node.bindingKeyword.tokenKind == .keyword(.let)
|
|
|
|
// TODO: don't drop "initializer" on the floor.
|
|
return .decl(
|
|
- SwiftVarDecl_create(
|
|
+ VarDecl_create(
|
|
ctx, pattern, initializer, loc, isStatic,
|
|
isLet, declContext))
|
|
}
|
|
|
|
public func visit(_ node: FunctionParameterSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
+
|
|
+ let firstName: BridgedIdentifier
|
|
+ let secondName: BridgedIdentifier
|
|
|
|
- let firstName: UnsafeMutableRawPointer?
|
|
- let secondName: UnsafeMutableRawPointer?
|
|
-
|
|
let nodeFirstName = node.firstName
|
|
if nodeFirstName.text != "_" {
|
|
// Swift AST represents "_" as nil.
|
|
var text = nodeFirstName.text
|
|
- firstName = text.withUTF8 { buf in
|
|
- SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ firstName = text.withBridgedString { bridgedName in
|
|
+ ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
} else {
|
|
firstName = nil
|
|
@@ -103,8 +103,8 @@ extension ASTGenVisitor {
|
|
|
|
if let nodeSecondName = node.secondName {
|
|
var text = nodeSecondName.text
|
|
- secondName = text.withUTF8 { buf in
|
|
- SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ secondName = text.withBridgedString { bridgedName in
|
|
+ ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
} else {
|
|
secondName = nil
|
|
@@ -116,15 +116,15 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
public func visit(_ node: FunctionDeclSyntax) -> ASTNode {
|
|
- let staticLoc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
- let funcLoc = self.base.advanced(by: node.funcKeyword.position.utf8Offset).raw
|
|
- let nameLoc = self.base.advanced(by: node.identifier.position.utf8Offset).raw
|
|
- let rParamLoc = self.base.advanced(by: node.signature.input.leftParen.position.utf8Offset).raw
|
|
- let lParamLoc = self.base.advanced(by: node.signature.input.rightParen.position.utf8Offset).raw
|
|
+ let staticLoc = bridgedSourceLoc(for: node)
|
|
+ let funcLoc = bridgedSourceLoc(for: node.funcKeyword)
|
|
+ let nameLoc = bridgedSourceLoc(for: node.identifier)
|
|
+ let rParamLoc = bridgedSourceLoc(for: node.signature.input.leftParen)
|
|
+ let lParamLoc = bridgedSourceLoc(for: node.signature.input.rightParen)
|
|
|
|
var nameText = node.identifier.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
|
|
let returnType: ASTNode?
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Diagnostics.swift b/swift/lib/ASTGen/Sources/ASTGen/Diagnostics.swift
|
|
index 7071029c43983..4d299cc6f19eb 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Diagnostics.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Diagnostics.swift
|
|
@@ -4,13 +4,15 @@ import SwiftSyntax
|
|
|
|
fileprivate func emitDiagnosticParts(
|
|
diagEnginePtr: UnsafeMutablePointer<UInt8>,
|
|
- sourceFileBuffer: UnsafeMutableBufferPointer<UInt8>,
|
|
+ sourceFileBuffer: UnsafeBufferPointer<UInt8>,
|
|
message: String,
|
|
severity: DiagnosticSeverity,
|
|
position: AbsolutePosition,
|
|
highlights: [Syntax] = [],
|
|
fixItChanges: [FixIt.Change] = []
|
|
) {
|
|
+ let bridgedDiagEngine = BridgedDiagnosticEngine(raw: diagEnginePtr)
|
|
+
|
|
// Map severity
|
|
let bridgedSeverity: BridgedDiagnosticSeverity
|
|
switch severity {
|
|
@@ -19,75 +21,66 @@ fileprivate func emitDiagnosticParts(
|
|
case .warning: bridgedSeverity = .warning
|
|
}
|
|
|
|
- // Form a source location for the given absolute position
|
|
- func sourceLoc(
|
|
- at position: AbsolutePosition
|
|
- ) -> UnsafeMutablePointer<UInt8>? {
|
|
- if let sourceFileBase = sourceFileBuffer.baseAddress,
|
|
- position.utf8Offset >= 0 &&
|
|
- position.utf8Offset < sourceFileBuffer.count {
|
|
- return sourceFileBase + position.utf8Offset
|
|
- }
|
|
-
|
|
- return nil
|
|
+ func bridgedSourceLoc(at position: AbsolutePosition) -> BridgedSourceLoc {
|
|
+ return BridgedSourceLoc(at: position, in: sourceFileBuffer)
|
|
}
|
|
|
|
// Emit the diagnostic
|
|
var mutableMessage = message
|
|
- let diag = mutableMessage.withUTF8 { messageBuffer in
|
|
- SwiftDiagnostic_create(
|
|
- diagEnginePtr, bridgedSeverity, sourceLoc(at: position),
|
|
- messageBuffer.baseAddress, messageBuffer.count
|
|
+ let diag = mutableMessage.withBridgedString { bridgedMessage in
|
|
+ Diagnostic_create(
|
|
+ bridgedDiagEngine, bridgedSeverity, bridgedSourceLoc(at: position),
|
|
+ bridgedMessage
|
|
)
|
|
}
|
|
|
|
// Emit highlights
|
|
for highlight in highlights {
|
|
- SwiftDiagnostic_highlight(
|
|
- diag, sourceLoc(at: highlight.positionAfterSkippingLeadingTrivia),
|
|
- sourceLoc(at: highlight.endPositionBeforeTrailingTrivia)
|
|
+ Diagnostic_highlight(
|
|
+ diag, bridgedSourceLoc(at: highlight.positionAfterSkippingLeadingTrivia),
|
|
+ bridgedSourceLoc(at: highlight.endPositionBeforeTrailingTrivia)
|
|
)
|
|
}
|
|
|
|
// Emit changes for a Fix-It.
|
|
for change in fixItChanges {
|
|
- let replaceStartLoc: UnsafeMutablePointer<UInt8>?
|
|
- let replaceEndLoc: UnsafeMutablePointer<UInt8>?
|
|
+ let replaceStartLoc: BridgedSourceLoc
|
|
+ let replaceEndLoc: BridgedSourceLoc
|
|
var newText: String
|
|
|
|
switch change {
|
|
case .replace(let oldNode, let newNode):
|
|
- replaceStartLoc = sourceLoc(at: oldNode.position)
|
|
- replaceEndLoc = sourceLoc(at: oldNode.endPosition)
|
|
+ replaceStartLoc = bridgedSourceLoc(at: oldNode.position)
|
|
+ replaceEndLoc = bridgedSourceLoc(at: oldNode.endPosition)
|
|
newText = newNode.description
|
|
|
|
case .replaceLeadingTrivia(let oldToken, let newTrivia):
|
|
- replaceStartLoc = sourceLoc(at: oldToken.position)
|
|
- replaceEndLoc = sourceLoc(
|
|
+ replaceStartLoc = bridgedSourceLoc(at: oldToken.position)
|
|
+ replaceEndLoc = bridgedSourceLoc(
|
|
at: oldToken.positionAfterSkippingLeadingTrivia)
|
|
newText = newTrivia.description
|
|
|
|
case .replaceTrailingTrivia(let oldToken, let newTrivia):
|
|
- replaceStartLoc = sourceLoc(at: oldToken.endPositionBeforeTrailingTrivia)
|
|
- replaceEndLoc = sourceLoc(at: oldToken.endPosition)
|
|
+ replaceStartLoc = bridgedSourceLoc(at: oldToken.endPositionBeforeTrailingTrivia)
|
|
+ replaceEndLoc = bridgedSourceLoc(at: oldToken.endPosition)
|
|
newText = newTrivia.description
|
|
}
|
|
|
|
- newText.withUTF8 { textBuffer in
|
|
- SwiftDiagnostic_fixItReplace(
|
|
+ newText.withBridgedString { bridgedMessage in
|
|
+ Diagnostic_fixItReplace(
|
|
diag, replaceStartLoc, replaceEndLoc,
|
|
- textBuffer.baseAddress, textBuffer.count
|
|
+ bridgedMessage
|
|
)
|
|
}
|
|
}
|
|
|
|
- SwiftDiagnostic_finish(diag);
|
|
+ Diagnostic_finish(diag);
|
|
}
|
|
|
|
/// Emit the given diagnostic via the diagnostic engine.
|
|
func emitDiagnostic(
|
|
diagEnginePtr: UnsafeMutablePointer<UInt8>,
|
|
- sourceFileBuffer: UnsafeMutableBufferPointer<UInt8>,
|
|
+ sourceFileBuffer: UnsafeBufferPointer<UInt8>,
|
|
diagnostic: Diagnostic,
|
|
diagnosticSeverity: DiagnosticSeverity,
|
|
messageSuffix: String? = nil
|
|
@@ -145,69 +138,69 @@ extension SourceManager {
|
|
|
|
// Emit the diagnostic
|
|
var mutableMessage = message
|
|
- let diag = mutableMessage.withUTF8 { messageBuffer in
|
|
- SwiftDiagnostic_create(
|
|
- cxxDiagnosticEngine, bridgedSeverity,
|
|
- cxxSourceLocation(for: node, at: position),
|
|
- messageBuffer.baseAddress, messageBuffer.count
|
|
+ let diag = mutableMessage.withBridgedString { bridgedMessage in
|
|
+ Diagnostic_create(
|
|
+ bridgedDiagEngine, bridgedSeverity,
|
|
+ bridgedSourceLoc(for: node, at: position),
|
|
+ bridgedMessage
|
|
)
|
|
}
|
|
|
|
// Emit highlights
|
|
for highlight in highlights {
|
|
- SwiftDiagnostic_highlight(
|
|
+ Diagnostic_highlight(
|
|
diag,
|
|
- cxxSourceLocation(for: highlight, at: highlight.positionAfterSkippingLeadingTrivia),
|
|
- cxxSourceLocation(for: highlight, at: highlight.endPositionBeforeTrailingTrivia)
|
|
+ bridgedSourceLoc(for: highlight, at: highlight.positionAfterSkippingLeadingTrivia),
|
|
+ bridgedSourceLoc(for: highlight, at: highlight.endPositionBeforeTrailingTrivia)
|
|
)
|
|
}
|
|
|
|
// Emit changes for a Fix-It.
|
|
for change in fixItChanges {
|
|
- let replaceStartLoc: CxxSourceLoc?
|
|
- let replaceEndLoc: CxxSourceLoc?
|
|
+ let replaceStartLoc: BridgedSourceLoc
|
|
+ let replaceEndLoc: BridgedSourceLoc
|
|
var newText: String
|
|
|
|
switch change {
|
|
case .replace(let oldNode, let newNode):
|
|
- replaceStartLoc = cxxSourceLocation(
|
|
+ replaceStartLoc = bridgedSourceLoc(
|
|
for: oldNode,
|
|
at: oldNode.positionAfterSkippingLeadingTrivia
|
|
)
|
|
- replaceEndLoc = cxxSourceLocation(
|
|
+ replaceEndLoc = bridgedSourceLoc(
|
|
for: oldNode,
|
|
at: oldNode.endPositionBeforeTrailingTrivia
|
|
)
|
|
newText = newNode.description
|
|
|
|
case .replaceLeadingTrivia(let oldToken, let newTrivia):
|
|
- replaceStartLoc = cxxSourceLocation(for: oldToken)
|
|
- replaceEndLoc = cxxSourceLocation(
|
|
+ replaceStartLoc = bridgedSourceLoc(for: oldToken)
|
|
+ replaceEndLoc = bridgedSourceLoc(
|
|
for: oldToken,
|
|
at: oldToken.positionAfterSkippingLeadingTrivia
|
|
)
|
|
newText = newTrivia.description
|
|
|
|
case .replaceTrailingTrivia(let oldToken, let newTrivia):
|
|
- replaceStartLoc = cxxSourceLocation(
|
|
+ replaceStartLoc = bridgedSourceLoc(
|
|
for: oldToken,
|
|
at: oldToken.endPositionBeforeTrailingTrivia)
|
|
- replaceEndLoc = cxxSourceLocation(
|
|
+ replaceEndLoc = bridgedSourceLoc(
|
|
for: oldToken,
|
|
at: oldToken.endPosition
|
|
)
|
|
newText = newTrivia.description
|
|
}
|
|
|
|
- newText.withUTF8 { textBuffer in
|
|
- SwiftDiagnostic_fixItReplace(
|
|
+ newText.withBridgedString { bridgedMessage in
|
|
+ Diagnostic_fixItReplace(
|
|
diag, replaceStartLoc, replaceEndLoc,
|
|
- textBuffer.baseAddress, textBuffer.count
|
|
+ bridgedMessage
|
|
)
|
|
}
|
|
}
|
|
|
|
- SwiftDiagnostic_finish(diag);
|
|
+ Diagnostic_finish(diag);
|
|
}
|
|
|
|
/// Emit a diagnostic via the C++ diagnostic engine.
|
|
@@ -357,21 +350,25 @@ public func addQueuedDiagnostic(
|
|
text: UnsafePointer<UInt8>,
|
|
textLength: Int,
|
|
severity: BridgedDiagnosticSeverity,
|
|
- position: CxxSourceLoc,
|
|
- highlightRangesPtr: UnsafePointer<CxxSourceLoc>?,
|
|
+ position: BridgedSourceLoc,
|
|
+ highlightRangesPtr: UnsafePointer<BridgedSourceLoc>?,
|
|
numHighlightRanges: Int
|
|
) {
|
|
let queuedDiagnostics = queuedDiagnosticsPtr.assumingMemoryBound(
|
|
to: QueuedDiagnostics.self
|
|
)
|
|
|
|
+ guard let rawPosition = position.raw else {
|
|
+ return
|
|
+ }
|
|
+
|
|
// Find the source file that contains this location.
|
|
let sourceFile = queuedDiagnostics.pointee.sourceFiles.first { sf in
|
|
guard let baseAddress = sf.buffer.baseAddress else {
|
|
return false
|
|
}
|
|
|
|
- return position >= baseAddress && position < baseAddress + sf.buffer.count
|
|
+ return rawPosition >= baseAddress && rawPosition < baseAddress + sf.buffer.count
|
|
}
|
|
guard let sourceFile = sourceFile else {
|
|
// FIXME: Hard to report an error here...
|
|
@@ -379,22 +376,24 @@ public func addQueuedDiagnostic(
|
|
}
|
|
|
|
// Find the token at that offset.
|
|
- let sourceFileBaseAddress = sourceFile.buffer.baseAddress!
|
|
+ let sourceFileBaseAddress = UnsafeRawPointer(sourceFile.buffer.baseAddress!)
|
|
let sourceFileEndAddress = sourceFileBaseAddress + sourceFile.buffer.count
|
|
- let offset = position - sourceFileBaseAddress
|
|
+ let offset = rawPosition - sourceFileBaseAddress
|
|
guard let token = sourceFile.syntax.token(at: AbsolutePosition(utf8Offset: offset)) else {
|
|
return
|
|
}
|
|
|
|
// Map the highlights.
|
|
var highlights: [Syntax] = []
|
|
- let highlightRanges = UnsafeBufferPointer<CxxSourceLoc>(
|
|
+ let highlightRanges = UnsafeBufferPointer<BridgedSourceLoc>(
|
|
start: highlightRangesPtr, count: numHighlightRanges * 2
|
|
)
|
|
for index in 0..<numHighlightRanges {
|
|
// Make sure both the start and the end land within this source file.
|
|
- let start = highlightRanges[index * 2]
|
|
- let end = highlightRanges[index * 2 + 1]
|
|
+ guard let start = highlightRanges[index * 2].raw,
|
|
+ let end = highlightRanges[index * 2 + 1].raw else {
|
|
+ continue
|
|
+ }
|
|
|
|
guard start >= sourceFileBaseAddress && start < sourceFileEndAddress,
|
|
end >= sourceFileBaseAddress && end <= sourceFileEndAddress else {
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Exprs.swift b/swift/lib/ASTGen/Sources/ASTGen/Exprs.swift
|
|
index 38097c72cc218..432a1e77cbee2 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Exprs.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Exprs.swift
|
|
@@ -4,10 +4,10 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
public func visit(_ node: ClosureExprSyntax) -> ASTNode {
|
|
- let statements = node.statements.map { self.visit($0).bridged() }
|
|
+ let statements = node.statements.map { self.visit($0).bridged }
|
|
let body: UnsafeMutableRawPointer = statements.withBridgedArrayRef { ref in
|
|
- let startLoc = self.base.advanced(by: node.leftBrace.position.utf8Offset).raw
|
|
- let endLoc = self.base.advanced(by: node.rightBrace.position.utf8Offset).raw
|
|
+ let startLoc = bridgedSourceLoc(for: node.leftBrace)
|
|
+ let endLoc = bridgedSourceLoc(for: node.rightBrace)
|
|
return BraceStmt_create(ctx, startLoc, ref, endLoc)
|
|
}
|
|
|
|
@@ -26,37 +26,37 @@ extension ASTGenVisitor {
|
|
let args = visit(node.argumentList).rawValue
|
|
let callee = visit(node.calledExpression).rawValue
|
|
|
|
- return .expr(SwiftFunctionCallExpr_create(self.ctx, callee, args))
|
|
+ return .expr(FunctionCallExpr_create(self.ctx, callee, args))
|
|
}
|
|
|
|
public func visit(_ node: IdentifierExprSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
|
|
var text = node.identifier.text
|
|
- let id = text.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let id = text.withBridgedString { bridgedText in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedText)
|
|
}
|
|
|
|
- return .expr(SwiftIdentifierExpr_create(ctx, id, loc))
|
|
+ return .expr(IdentifierExpr_create(ctx, id, loc))
|
|
}
|
|
|
|
public func visit(_ node: IdentifierPatternSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
|
|
var text = node.identifier.text
|
|
- let id = text.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let id = text.withBridgedString { bridgedText in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedText)
|
|
}
|
|
|
|
- return .expr(SwiftIdentifierExpr_create(ctx, id, loc))
|
|
+ return .expr(IdentifierExpr_create(ctx, id, loc))
|
|
}
|
|
|
|
public func visit(_ node: MemberAccessExprSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
let base = visit(node.base!).rawValue
|
|
var nameText = node.name.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
|
|
return .expr(UnresolvedDotExpr_create(ctx, base, loc, name, loc))
|
|
@@ -77,24 +77,24 @@ extension ASTGenVisitor {
|
|
guard var name = $0.label?.text else {
|
|
return nil
|
|
}
|
|
- return name.withUTF8 { buf in
|
|
- SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ return name.withBridgedString { bridgedName in
|
|
+ ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
}
|
|
- let labelLocs: [UnsafeMutableRawPointer] = node.map {
|
|
+ let labelLocs: [BridgedSourceLoc] = node.map {
|
|
let pos = $0.label?.position ?? $0.position
|
|
- return base.advanced(by: pos.utf8Offset).raw
|
|
+ return bridgedSourceLoc(at: pos)
|
|
}
|
|
|
|
- let lParenLoc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
- let rParenLoc = self.base.advanced(by: node.endPosition.utf8Offset).raw
|
|
+ let lParenLoc = bridgedSourceLoc(for: node)
|
|
+ let rParenLoc = bridgedSourceLoc(at: node.endPosition)
|
|
|
|
return .expr(
|
|
elements.withBridgedArrayRef { elementsRef in
|
|
labels.withBridgedArrayRef { labelsRef in
|
|
labelLocs.withBridgedArrayRef { labelLocRef in
|
|
- SwiftTupleExpr_create(self.ctx, lParenLoc, elementsRef, labelsRef,
|
|
- labelLocRef, rParenLoc)
|
|
+ TupleExpr_create(self.ctx, lParenLoc, elementsRef, labelsRef,
|
|
+ labelLocRef, rParenLoc)
|
|
}
|
|
}
|
|
})
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Generics.swift b/swift/lib/ASTGen/Sources/ASTGen/Generics.swift
|
|
index 22163381143b0..46b4b3bf90419 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Generics.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Generics.swift
|
|
@@ -4,11 +4,9 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
func visit(_ node: GenericParameterClauseSyntax) -> ASTNode {
|
|
- let lAngleLoc = self.base.advanced(by: node.leftAngleBracket.position.utf8Offset).raw
|
|
- let whereLoc = node.genericWhereClause.map {
|
|
- self.base.advanced(by: $0.whereKeyword.position.utf8Offset).raw
|
|
- }
|
|
- let rAngleLoc = self.base.advanced(by: node.rightAngleBracket.position.utf8Offset).raw
|
|
+ let lAngleLoc = bridgedSourceLoc(for: node.leftAngleBracket)
|
|
+ let whereLoc = bridgedSourceLoc(for: node.genericWhereClause?.whereKeyword)
|
|
+ let rAngleLoc = bridgedSourceLoc(for: node.rightAngleBracket)
|
|
return .misc(
|
|
self.withBridgedParametersAndRequirements(node) { params, reqs in
|
|
return GenericParamList_create(self.ctx, lAngleLoc, params, whereLoc, reqs, rAngleLoc)
|
|
@@ -17,11 +15,11 @@ extension ASTGenVisitor {
|
|
|
|
func visit(_ node: GenericParameterSyntax) -> ASTNode {
|
|
var nodeName = node.name.text
|
|
- let name = nodeName.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nodeName.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
- let nameLoc = self.base.advanced(by: node.name.position.utf8Offset).raw
|
|
- let eachLoc = node.each.map { self.base.advanced(by: $0.position.utf8Offset).raw }
|
|
+ let nameLoc = bridgedSourceLoc(for: node.name)
|
|
+ let eachLoc = bridgedSourceLoc(for: node.each)
|
|
|
|
var genericParameterIndex: Int?
|
|
for (index, sibling) in (node.parent?.as(GenericParameterListSyntax.self) ?? []).enumerated() {
|
|
@@ -37,7 +35,7 @@ extension ASTGenVisitor {
|
|
return .decl(
|
|
GenericTypeParamDecl_create(
|
|
self.ctx, self.declContext, name, nameLoc, eachLoc, genericParameterIndex,
|
|
- eachLoc != nil))
|
|
+ eachLoc.raw != nil))
|
|
}
|
|
}
|
|
|
|
@@ -65,7 +63,7 @@ extension ASTGenVisitor {
|
|
switch requirement.body {
|
|
case .conformanceRequirement(let conformance):
|
|
let firstType = self.visit(conformance.leftTypeIdentifier).rawValue
|
|
- let separatorLoc = self.base.advanced(by: conformance.colon.position.utf8Offset).raw
|
|
+ let separatorLoc = bridgedSourceLoc(for: conformance.colon)
|
|
let secondType = self.visit(conformance.rightTypeIdentifier).rawValue
|
|
requirements.append(
|
|
BridgedRequirementRepr(
|
|
@@ -75,7 +73,7 @@ extension ASTGenVisitor {
|
|
SecondType: secondType))
|
|
case .sameTypeRequirement(let sameType):
|
|
let firstType = self.visit(sameType.leftTypeIdentifier).rawValue
|
|
- let separatorLoc = self.base.advanced(by: sameType.equalityToken.position.utf8Offset).raw
|
|
+ let separatorLoc = bridgedSourceLoc(for: sameType.equalityToken)
|
|
let secondType = self.visit(sameType.rightTypeIdentifier).rawValue
|
|
requirements.append(
|
|
BridgedRequirementRepr(
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Literals.swift b/swift/lib/ASTGen/Sources/ASTGen/Literals.swift
|
|
index 1653d09ac348d..21d538df2d939 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Literals.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Literals.swift
|
|
@@ -4,38 +4,38 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
public func visit(_ node: StringLiteralExprSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
var segment = node.segments.first!.as(StringSegmentSyntax.self)!.content.text
|
|
return .expr(
|
|
- segment.withUTF8 { buf in
|
|
- return SwiftStringLiteralExpr_create(ctx, buf.baseAddress, buf.count, loc)
|
|
+ segment.withBridgedString { bridgedSegment in
|
|
+ return StringLiteralExpr_create(ctx, bridgedSegment, loc)
|
|
})
|
|
}
|
|
|
|
public func visit(_ node: IntegerLiteralExprSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
var segment = node.digits.text
|
|
return .expr(
|
|
- segment.withUTF8 { buf in
|
|
- return SwiftIntegerLiteralExpr_create(ctx, buf.baseAddress, buf.count, loc)
|
|
+ segment.withBridgedString { bridgedSegment in
|
|
+ return IntegerLiteralExpr_create(ctx, bridgedSegment, loc)
|
|
})
|
|
}
|
|
|
|
public func visit(_ node: BooleanLiteralExprSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
let value = node.booleanLiteral == .keyword(.true)
|
|
- return .expr(SwiftBooleanLiteralExpr_create(ctx, value, loc))
|
|
+ return .expr(BooleanLiteralExpr_create(ctx, value, loc))
|
|
}
|
|
|
|
public func visit(_ node: ArrayExprSyntax) -> ASTNode {
|
|
- let lLoc = self.base.advanced(by: node.leftSquare.position.utf8Offset).raw
|
|
- let rLoc = self.base.advanced(by: node.rightSquare.position.utf8Offset).raw
|
|
+ let lLoc = bridgedSourceLoc(for: node.leftSquare)
|
|
+ let rLoc = bridgedSourceLoc(for: node.rightSquare)
|
|
|
|
let elements = node.elements.map { self.visit($0).rawValue }
|
|
let commas = node.elements
|
|
.compactMap { $0.trailingComma }
|
|
.map {
|
|
- self.base.advanced(by: $0.position.utf8Offset).raw
|
|
+ bridgedSourceLoc(for: $0)
|
|
}
|
|
|
|
return elements.withBridgedArrayRef { elementsRef in
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Misc.swift b/swift/lib/ASTGen/Sources/ASTGen/Misc.swift
|
|
index bb63fd0b1b181..0cecfdbe7bb69 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Misc.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Misc.swift
|
|
@@ -26,4 +26,53 @@ extension ASTGenVisitor {
|
|
public func visit(_ node: ArrayElementSyntax) -> ASTNode {
|
|
visit(node.expression)
|
|
}
|
|
+
|
|
+ /// Form a source location at the given absolute position in the current
|
|
+ /// file.
|
|
+ public func bridgedSourceLoc(at position: AbsolutePosition) -> BridgedSourceLoc {
|
|
+ return BridgedSourceLoc(at: position, in: base)
|
|
+ }
|
|
+
|
|
+ /// Form a source location at the given node's position in the current file.
|
|
+ public func bridgedSourceLoc<Node: SyntaxProtocol>(for node: Node?) -> BridgedSourceLoc {
|
|
+ guard let node = node else {
|
|
+ return nil
|
|
+ }
|
|
+ return BridgedSourceLoc(at: node.position, in: base)
|
|
+ }
|
|
+}
|
|
+
|
|
+extension BridgedSourceLoc: ExpressibleByNilLiteral {
|
|
+ public init(nilLiteral: ()) {
|
|
+ self.init(raw: nil)
|
|
+ }
|
|
+}
|
|
+
|
|
+extension BridgedIdentifier: ExpressibleByNilLiteral {
|
|
+ public init(nilLiteral: ()) {
|
|
+ self.init(raw: nil)
|
|
+ }
|
|
+}
|
|
+
|
|
+extension BridgedSourceLoc {
|
|
+ /// Form a source location at the given absolute position in `buffer`.
|
|
+ init(
|
|
+ at position: AbsolutePosition,
|
|
+ in buffer: UnsafeBufferPointer<UInt8>
|
|
+ ) {
|
|
+ if let start = buffer.baseAddress,
|
|
+ position.utf8Offset >= 0 && position.utf8Offset < buffer.count {
|
|
+ self = SourceLoc_advanced(BridgedSourceLoc(raw: start), position.utf8Offset)
|
|
+ } else {
|
|
+ self = nil
|
|
+ }
|
|
+ }
|
|
+}
|
|
+
|
|
+extension String {
|
|
+ mutating func withBridgedString<R>(_ body: (BridgedString) throws -> R) rethrows -> R {
|
|
+ try withUTF8 { buffer in
|
|
+ try body(BridgedString(data: buffer.baseAddress, length: buffer.count))
|
|
+ }
|
|
+ }
|
|
}
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/PluginHost.swift b/swift/lib/ASTGen/Sources/ASTGen/PluginHost.swift
|
|
index ee90ad3990f2f..e14c14db41ded 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/PluginHost.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/PluginHost.swift
|
|
@@ -188,11 +188,11 @@ struct CompilerPlugin {
|
|
}
|
|
|
|
class PluginDiagnosticsEngine {
|
|
- private let cxxDiagnosticEngine: UnsafeMutablePointer<UInt8>
|
|
+ private let bridgedDiagEngine: BridgedDiagnosticEngine
|
|
private var exportedSourceFileByName: [String: UnsafePointer<ExportedSourceFile>] = [:]
|
|
|
|
init(cxxDiagnosticEngine: UnsafeMutablePointer<UInt8>) {
|
|
- self.cxxDiagnosticEngine = cxxDiagnosticEngine
|
|
+ self.bridgedDiagEngine = BridgedDiagnosticEngine(raw: cxxDiagnosticEngine)
|
|
}
|
|
|
|
/// Failable convenience initializer for optional cxx engine pointer.
|
|
@@ -258,34 +258,34 @@ class PluginDiagnosticsEngine {
|
|
|
|
// Emit the diagnostic
|
|
var mutableMessage = message
|
|
- let diag = mutableMessage.withUTF8 { messageBuffer in
|
|
- SwiftDiagnostic_create(
|
|
- cxxDiagnosticEngine, bridgedSeverity,
|
|
- cxxSourceLocation(at: position),
|
|
- messageBuffer.baseAddress, messageBuffer.count)
|
|
+ let diag = mutableMessage.withBridgedString { bridgedMessage in
|
|
+ Diagnostic_create(
|
|
+ bridgedDiagEngine, bridgedSeverity,
|
|
+ bridgedSourceLoc(at: position),
|
|
+ bridgedMessage)
|
|
}
|
|
|
|
// Emit highlights
|
|
for highlight in highlights {
|
|
- guard let (startLoc, endLoc) = cxxSourceRange(for: highlight) else {
|
|
+ guard let (startLoc, endLoc) = bridgedSourceRange(for: highlight) else {
|
|
continue
|
|
}
|
|
- SwiftDiagnostic_highlight(diag, startLoc, endLoc)
|
|
+ Diagnostic_highlight(diag, startLoc, endLoc)
|
|
}
|
|
|
|
// Emit changes for a Fix-It.
|
|
for change in fixItChanges {
|
|
- guard let (startLoc, endLoc) = cxxSourceRange(for: change.range) else {
|
|
+ guard let (startLoc, endLoc) = bridgedSourceRange(for: change.range) else {
|
|
continue
|
|
}
|
|
var newText = change.newText
|
|
- newText.withUTF8 { textBuffer in
|
|
- SwiftDiagnostic_fixItReplace(
|
|
- diag, startLoc, endLoc, textBuffer.baseAddress, textBuffer.count)
|
|
+ newText.withBridgedString { bridgedFixItText in
|
|
+ Diagnostic_fixItReplace(
|
|
+ diag, startLoc, endLoc, bridgedFixItText)
|
|
}
|
|
}
|
|
|
|
- SwiftDiagnostic_finish(diag)
|
|
+ Diagnostic_finish(diag)
|
|
}
|
|
|
|
/// Emit diagnostics.
|
|
@@ -312,40 +312,36 @@ class PluginDiagnosticsEngine {
|
|
|
|
/// Produce the C++ source location for a given position based on a
|
|
/// syntax node.
|
|
- private func cxxSourceLocation(
|
|
+ private func bridgedSourceLoc(
|
|
at offset: Int, in fileName: String
|
|
- ) -> CxxSourceLoc? {
|
|
+ ) -> BridgedSourceLoc {
|
|
// Find the corresponding exported source file.
|
|
- guard
|
|
- let exportedSourceFile = exportedSourceFileByName[fileName]
|
|
- else {
|
|
+ guard let exportedSourceFile = exportedSourceFileByName[fileName] else {
|
|
return nil
|
|
}
|
|
|
|
// Compute the resulting address.
|
|
- guard
|
|
- let bufferBaseAddress = exportedSourceFile.pointee.buffer.baseAddress
|
|
- else {
|
|
+ guard let bufferBaseAddress = exportedSourceFile.pointee.buffer.baseAddress else {
|
|
return nil
|
|
}
|
|
- return bufferBaseAddress.advanced(by: offset)
|
|
+ return SourceLoc_advanced(BridgedSourceLoc(raw: bufferBaseAddress), offset)
|
|
}
|
|
|
|
/// C++ source location from a position value from a plugin.
|
|
- private func cxxSourceLocation(
|
|
+ private func bridgedSourceLoc(
|
|
at position: PluginMessage.Diagnostic.Position
|
|
- ) -> CxxSourceLoc? {
|
|
- cxxSourceLocation(at: position.offset, in: position.fileName)
|
|
+ ) -> BridgedSourceLoc {
|
|
+ return bridgedSourceLoc(at: position.offset, in: position.fileName)
|
|
}
|
|
|
|
/// C++ source range from a range value from a plugin.
|
|
- private func cxxSourceRange(
|
|
+ private func bridgedSourceRange(
|
|
for range: PluginMessage.Diagnostic.PositionRange
|
|
- ) -> (start: CxxSourceLoc, end: CxxSourceLoc)? {
|
|
- guard
|
|
- let start = cxxSourceLocation(at: range.startOffset, in: range.fileName),
|
|
- let end = cxxSourceLocation(at: range.endOffset, in: range.fileName)
|
|
- else {
|
|
+ ) -> (start: BridgedSourceLoc, end: BridgedSourceLoc)? {
|
|
+ let start = bridgedSourceLoc(at: range.startOffset, in: range.fileName)
|
|
+ let end = bridgedSourceLoc(at: range.endOffset, in: range.fileName)
|
|
+
|
|
+ if start.raw == nil || end.raw == nil {
|
|
return nil
|
|
}
|
|
return (start: start, end: end )
|
|
@@ -364,9 +360,8 @@ extension PluginMessage.Syntax {
|
|
case syntax.is(AttributeSyntax.self): kind = .attribute
|
|
default: return nil
|
|
}
|
|
- let source = syntax.description
|
|
-
|
|
|
|
+ let source = syntax.description
|
|
let sourceStr = String(decoding: sourceFilePtr.pointee.buffer, as: UTF8.self)
|
|
let fileName = sourceFilePtr.pointee.fileName
|
|
let fileID = "\(sourceFilePtr.pointee.moduleName)/\(sourceFilePtr.pointee.fileName.basename)"
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/SourceFile.swift b/swift/lib/ASTGen/Sources/ASTGen/SourceFile.swift
|
|
index 5def6146f4a6a..227f00e83e75c 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/SourceFile.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/SourceFile.swift
|
|
@@ -110,8 +110,7 @@ public func emitParserDiagnostics(
|
|
|
|
emitDiagnostic(
|
|
diagEnginePtr: diagEnginePtr,
|
|
- sourceFileBuffer: UnsafeMutableBufferPointer(
|
|
- mutating: sourceFile.pointee.buffer),
|
|
+ sourceFileBuffer: sourceFile.pointee.buffer,
|
|
diagnostic: diag,
|
|
diagnosticSeverity: diagnosticSeverity
|
|
)
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/SourceManager.swift b/swift/lib/ASTGen/Sources/ASTGen/SourceManager.swift
|
|
index e7b410a2fa765..a3e2551e07dba 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/SourceManager.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/SourceManager.swift
|
|
@@ -1,18 +1,16 @@
|
|
+import CASTBridging
|
|
import SwiftOperators
|
|
import SwiftSyntax
|
|
import SwiftSyntaxMacros
|
|
|
|
-/// A C++ source location.
|
|
-public typealias CxxSourceLoc = UnsafePointer<UInt8>
|
|
-
|
|
/// A source manager that keeps track of the source files in the program.
|
|
class SourceManager {
|
|
init(cxxDiagnosticEngine: UnsafeMutablePointer<UInt8>) {
|
|
- self.cxxDiagnosticEngine = cxxDiagnosticEngine
|
|
+ self.bridgedDiagEngine = BridgedDiagnosticEngine(raw: cxxDiagnosticEngine)
|
|
}
|
|
|
|
- /// A pointer to the C++ diagnostic engine.
|
|
- let cxxDiagnosticEngine: UnsafeMutablePointer<UInt8>
|
|
+ /// The bridged diagnostic engine (just the wrapped C++ `DiagnosticEngine`).
|
|
+ let bridgedDiagEngine: BridgedDiagnosticEngine
|
|
|
|
/// The set of source files that have been exported to the C++ code of
|
|
/// the program.
|
|
@@ -100,10 +98,10 @@ extension SourceManager {
|
|
|
|
/// Produce the C++ source location for a given position based on a
|
|
/// syntax node.
|
|
- func cxxSourceLocation<Node: SyntaxProtocol>(
|
|
+ func bridgedSourceLoc<Node: SyntaxProtocol>(
|
|
for node: Node,
|
|
at position: AbsolutePosition? = nil
|
|
- ) -> CxxSourceLoc? {
|
|
+ ) -> BridgedSourceLoc {
|
|
// Find the source file and this node's position within it.
|
|
guard let (sourceFile, rootPosition) = rootSourceFile(of: node) else {
|
|
return nil
|
|
@@ -118,16 +116,9 @@ extension SourceManager {
|
|
// Find the offset of the given position based on the root of the given
|
|
// node.
|
|
let position = position ?? node.position
|
|
- let offsetWithinSyntaxNode =
|
|
- position.utf8Offset - node.position.utf8Offset
|
|
- let offsetFromSourceFile = rootPosition.utf8Offset + offsetWithinSyntaxNode
|
|
+ let nodeOffset = SourceLength(utf8Length: position.utf8Offset - node.position.utf8Offset)
|
|
+ let realPosition = rootPosition + nodeOffset
|
|
|
|
- // Compute the resulting address.
|
|
- guard let bufferBaseAddress = exportedSourceFile.pointee.buffer.baseAddress
|
|
- else {
|
|
- return nil
|
|
- }
|
|
- let address = bufferBaseAddress.advanced(by: offsetFromSourceFile)
|
|
- return address
|
|
+ return BridgedSourceLoc(at: realPosition, in: exportedSourceFile.pointee.buffer)
|
|
}
|
|
}
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Stmts.swift b/swift/lib/ASTGen/Sources/ASTGen/Stmts.swift
|
|
index 9b8b625974520..5b32bd6611270 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Stmts.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Stmts.swift
|
|
@@ -4,9 +4,9 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
public func visit(_ node: CodeBlockSyntax) -> ASTNode {
|
|
- let statements = node.statements.map { self.visit($0).bridged() }
|
|
- let startLoc = self.base.advanced(by: node.leftBrace.position.utf8Offset).raw
|
|
- let endLoc = self.base.advanced(by: node.rightBrace.position.utf8Offset).raw
|
|
+ let statements = node.statements.map { self.visit($0).bridged }
|
|
+ let startLoc = bridgedSourceLoc(for: node.leftBrace)
|
|
+ let endLoc = bridgedSourceLoc(for: node.rightBrace)
|
|
|
|
return .stmt(
|
|
statements.withBridgedArrayRef { ref in
|
|
@@ -19,7 +19,7 @@ extension ASTGenVisitor {
|
|
assert(conditions.count == 1) // TODO: handle multiple conditions.
|
|
|
|
let body = visit(node.body).rawValue
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
|
|
if let elseBody = node.elseBody, node.elseKeyword != nil {
|
|
return .stmt(IfStmt_create(ctx, loc, conditions.first!, body, loc,
|
|
@@ -39,7 +39,7 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
public func visit(_ node: ReturnStmtSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
|
|
let expr: ASTNode?
|
|
if let expression = node.expression {
|
|
diff --git a/swift/lib/ASTGen/Sources/ASTGen/Types.swift b/swift/lib/ASTGen/Sources/ASTGen/Types.swift
|
|
index 82bbca53bf4b2..34a185fe13fbf 100644
|
|
--- a/swift/lib/ASTGen/Sources/ASTGen/Types.swift
|
|
+++ b/swift/lib/ASTGen/Sources/ASTGen/Types.swift
|
|
@@ -4,7 +4,7 @@ import SwiftSyntax
|
|
|
|
extension ASTGenVisitor {
|
|
public func visit(_ node: SimpleTypeIdentifierSyntax) -> ASTNode {
|
|
- let loc = self.base.advanced(by: node.position.utf8Offset).raw
|
|
+ let loc = bridgedSourceLoc(for: node)
|
|
|
|
// If this is the bare 'Any' keyword, produce an empty composition type.
|
|
if node.name.tokenKind == .keyword(.Any) && node.genericArgumentClause == nil {
|
|
@@ -12,16 +12,16 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
var text = node.name.text
|
|
- let id = text.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let id = text.withBridgedString { bridgedText in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedText)
|
|
}
|
|
|
|
guard let generics = node.genericArgumentClause else {
|
|
return .type(SimpleIdentTypeRepr_create(ctx, loc, id))
|
|
}
|
|
|
|
- let lAngle = self.base.advanced(by: generics.leftAngleBracket.position.utf8Offset).raw
|
|
- let rAngle = self.base.advanced(by: generics.rightAngleBracket.position.utf8Offset).raw
|
|
+ let lAngle = bridgedSourceLoc(for: generics.leftAngleBracket)
|
|
+ let rAngle = bridgedSourceLoc(for: generics.rightAngleBracket)
|
|
return .type(
|
|
generics.arguments.map({
|
|
self.visit($0.argumentType).rawValue
|
|
@@ -42,14 +42,14 @@ extension ASTGenVisitor {
|
|
let generics = memberType.genericArgumentClause
|
|
|
|
var nameText = nameToken.text
|
|
- let name = nameText.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
+ let name = nameText.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
}
|
|
- let nameLoc = self.base.advanced(by: nameToken.position.utf8Offset).raw
|
|
+ let nameLoc = bridgedSourceLoc(for: nameToken)
|
|
|
|
if let generics = generics {
|
|
- let lAngle = self.base.advanced(by: generics.leftAngleBracket.position.utf8Offset).raw
|
|
- let rAngle = self.base.advanced(by: generics.rightAngleBracket.position.utf8Offset).raw
|
|
+ let lAngle = bridgedSourceLoc(for: generics.leftAngleBracket)
|
|
+ let rAngle = bridgedSourceLoc(for: generics.rightAngleBracket)
|
|
reverseMemberComponents.append(
|
|
generics.arguments.map({ self.visit($0.argumentType).rawValue }).withBridgedArrayRef {
|
|
genericArgs in
|
|
@@ -72,24 +72,24 @@ extension ASTGenVisitor {
|
|
|
|
public func visit(_ node: ArrayTypeSyntax) -> ASTNode {
|
|
let elementType = visit(node.elementType).rawValue
|
|
- let lSquareLoc = self.base.advanced(by: node.leftSquareBracket.position.utf8Offset).raw
|
|
- let rSquareLoc = self.base.advanced(by: node.rightSquareBracket.position.utf8Offset).raw
|
|
+ let lSquareLoc = bridgedSourceLoc(for: node.leftSquareBracket)
|
|
+ let rSquareLoc = bridgedSourceLoc(for: node.rightSquareBracket)
|
|
return .type(ArrayTypeRepr_create(self.ctx, elementType, lSquareLoc, rSquareLoc))
|
|
}
|
|
|
|
public func visit(_ node: DictionaryTypeSyntax) -> ASTNode {
|
|
let keyType = visit(node.keyType).rawValue
|
|
let valueType = visit(node.valueType).rawValue
|
|
- let colonLoc = self.base.advanced(by: node.colon.position.utf8Offset).raw
|
|
- let lSquareLoc = self.base.advanced(by: node.leftSquareBracket.position.utf8Offset).raw
|
|
- let rSquareLoc = self.base.advanced(by: node.rightSquareBracket.position.utf8Offset).raw
|
|
+ let colonLoc = bridgedSourceLoc(for: node.colon)
|
|
+ let lSquareLoc = bridgedSourceLoc(for: node.leftSquareBracket)
|
|
+ let rSquareLoc = bridgedSourceLoc(for: node.rightSquareBracket)
|
|
return .type(
|
|
DictionaryTypeRepr_create(self.ctx, keyType, valueType, colonLoc, lSquareLoc, rSquareLoc))
|
|
}
|
|
|
|
public func visit(_ node: MetatypeTypeSyntax) -> ASTNode {
|
|
let baseType = visit(node.baseType).rawValue
|
|
- let tyLoc = self.base.advanced(by: node.typeOrProtocol.position.utf8Offset).raw
|
|
+ let tyLoc = bridgedSourceLoc(for: node.typeOrProtocol)
|
|
if node.typeOrProtocol.text == "Type" {
|
|
return .type(MetatypeTypeRepr_create(self.ctx, baseType, tyLoc))
|
|
} else {
|
|
@@ -100,26 +100,26 @@ extension ASTGenVisitor {
|
|
|
|
public func visit(_ node: ImplicitlyUnwrappedOptionalTypeSyntax) -> ASTNode {
|
|
let base = visit(node.wrappedType).rawValue
|
|
- let exclaimLoc = self.base.advanced(by: node.exclamationMark.position.utf8Offset).raw
|
|
+ let exclaimLoc = bridgedSourceLoc(for: node.exclamationMark)
|
|
return .type(ImplicitlyUnwrappedOptionalTypeRepr_create(self.ctx, base, exclaimLoc))
|
|
}
|
|
|
|
public func visit(_ node: OptionalTypeSyntax) -> ASTNode {
|
|
let base = visit(node.wrappedType).rawValue
|
|
- let questionLoc = self.base.advanced(by: node.questionMark.position.utf8Offset).raw
|
|
+ let questionLoc = bridgedSourceLoc(for: node.questionMark)
|
|
return .type(OptionalTypeRepr_create(self.ctx, base, questionLoc))
|
|
}
|
|
|
|
public func visit(_ node: PackExpansionTypeSyntax) -> ASTNode {
|
|
let base = visit(node.patternType).rawValue
|
|
- let repeatLoc = self.base.advanced(by: node.repeatKeyword.position.utf8Offset).raw
|
|
+ let repeatLoc = bridgedSourceLoc(for: node.repeatKeyword)
|
|
return .type(PackExpansionTypeRepr_create(self.ctx, base, repeatLoc))
|
|
}
|
|
|
|
public func visit(_ node: TupleTypeSyntax) -> ASTNode {
|
|
return self.withBridgedTupleElements(node.elements) { elements in
|
|
- let lParenLoc = self.base.advanced(by: node.leftParen.position.utf8Offset).raw
|
|
- let rParenLoc = self.base.advanced(by: node.rightParen.position.utf8Offset).raw
|
|
+ let lParenLoc = bridgedSourceLoc(for: node.leftParen)
|
|
+ let rParenLoc = bridgedSourceLoc(for: node.rightParen)
|
|
return .type(TupleTypeRepr_create(self.ctx, elements, lParenLoc, rParenLoc))
|
|
}
|
|
}
|
|
@@ -127,9 +127,8 @@ extension ASTGenVisitor {
|
|
public func visit(_ node: CompositionTypeSyntax) -> ASTNode {
|
|
assert(node.elements.count > 1)
|
|
let types = node.elements.map { visit($0.type) }.map { $0.rawValue }
|
|
- let firstTypeLoc = self.base.advanced(by: node.elements.first!.type.position.utf8Offset).raw
|
|
- let firstAmpOffset = node.elements.first?.ampersand.map { $0.position.utf8Offset } ?? 0
|
|
- let firstAmpLoc = self.base.advanced(by: firstAmpOffset).raw
|
|
+ let firstTypeLoc = bridgedSourceLoc(for: node.elements.first?.type)
|
|
+ let firstAmpLoc = bridgedSourceLoc(for: node.elements.first?.ampersand)
|
|
return .type(
|
|
types.withBridgedArrayRef { types in
|
|
return CompositionTypeRepr_create(self.ctx, types, firstTypeLoc, firstAmpLoc)
|
|
@@ -138,14 +137,12 @@ extension ASTGenVisitor {
|
|
|
|
public func visit(_ node: FunctionTypeSyntax) -> ASTNode {
|
|
return self.withBridgedTupleElements(node.arguments) { elements in
|
|
- let lParenLoc = self.base.advanced(by: node.leftParen.position.utf8Offset).raw
|
|
- let rParenLoc = self.base.advanced(by: node.rightParen.position.utf8Offset).raw
|
|
+ let lParenLoc = bridgedSourceLoc(for: node.leftParen)
|
|
+ let rParenLoc = bridgedSourceLoc(for: node.rightParen)
|
|
let args = TupleTypeRepr_create(self.ctx, elements, lParenLoc, rParenLoc)
|
|
- let asyncLoc = node.effectSpecifiers?.asyncSpecifier.map { self.base.advanced(by: $0.position.utf8Offset).raw }
|
|
- let throwsLoc = node.effectSpecifiers?.throwsSpecifier.map {
|
|
- self.base.advanced(by: $0.position.utf8Offset).raw
|
|
- }
|
|
- let arrowLoc = self.base.advanced(by: node.output.arrow.position.utf8Offset).raw
|
|
+ let asyncLoc = bridgedSourceLoc(for: node.effectSpecifiers?.asyncSpecifier)
|
|
+ let throwsLoc = bridgedSourceLoc(for: node.effectSpecifiers?.throwsSpecifier)
|
|
+ let arrowLoc = bridgedSourceLoc(for: node.output.arrow)
|
|
let retTy = visit(node.output.returnType).rawValue
|
|
return .type(FunctionTypeRepr_create(self.ctx, args, asyncLoc, throwsLoc, arrowLoc, retTy))
|
|
}
|
|
@@ -157,7 +154,7 @@ extension ASTGenVisitor {
|
|
}
|
|
|
|
public func visit(_ node: ConstrainedSugarTypeSyntax) -> ASTNode {
|
|
- let someOrAnyLoc = self.base.advanced(by: node.someOrAnySpecifier.position.utf8Offset).raw
|
|
+ let someOrAnyLoc = bridgedSourceLoc(for: node.someOrAnySpecifier)
|
|
let baseTy = visit(node.baseType).rawValue
|
|
if node.someOrAnySpecifier.text == "some" {
|
|
return .type(OpaqueReturnTypeRepr_create(self.ctx, someOrAnyLoc, baseTy))
|
|
@@ -172,7 +169,7 @@ extension ASTGenVisitor {
|
|
|
|
// Handle specifiers.
|
|
if let specifier = node.specifier {
|
|
- let specifierLoc = self.base.advanced(by: specifier.position.utf8Offset).raw
|
|
+ let specifierLoc = bridgedSourceLoc(for: specifier)
|
|
|
|
let kind: BridgedAttributedTypeSpecifier
|
|
switch specifier.tokenKind {
|
|
@@ -191,7 +188,7 @@ extension ASTGenVisitor {
|
|
|
|
// Handle type attributes.
|
|
if let attributes = node.attributes {
|
|
- let typeAttributes = BridgedTypeAttributes_create()
|
|
+ let typeAttributes = TypeAttributes_create()
|
|
for attributeElt in attributes {
|
|
// FIXME: Ignoring #ifs entirely. We want to provide a filtered view,
|
|
// but we don't have that ability right now.
|
|
@@ -206,11 +203,11 @@ extension ASTGenVisitor {
|
|
|
|
let nameSyntax = identType.name
|
|
var name = nameSyntax.text
|
|
- let typeAttrKind = name.withUTF8 { buf in
|
|
- getBridgedTypeAttrKindFromString(buf.baseAddress, buf.count)
|
|
+ let typeAttrKind = name.withBridgedString { bridgedName in
|
|
+ TypeAttrKind_fromString(bridgedName)
|
|
}
|
|
- let atLoc = self.base.advanced(by: attribute.atSignToken.position.utf8Offset).raw
|
|
- let attrLoc = self.base.advanced(by: nameSyntax.position.utf8Offset).raw
|
|
+ let atLoc = bridgedSourceLoc(for: attribute.atSignToken)
|
|
+ let attrLoc = bridgedSourceLoc(for: nameSyntax)
|
|
switch typeAttrKind {
|
|
// SIL attributes
|
|
// FIXME: Diagnose if not in SIL mode? Or should that move to the
|
|
@@ -226,7 +223,7 @@ extension ASTGenVisitor {
|
|
.sendable, .unchecked, ._local, ._noMetadata, .pack_owned,
|
|
.pack_guaranteed, .pack_inout, .pack_out, .pseudogeneric,
|
|
.yields, .yield_once, .yield_many, .thin, .thick, .count:
|
|
- BridgedTypeAttributes_addSimpleAttr(typeAttributes, typeAttrKind, atLoc, attrLoc)
|
|
+ TypeAttributes_addSimpleAttr(typeAttributes, typeAttrKind, atLoc, attrLoc)
|
|
|
|
case .opened, .pack_element, .differentiable, .convention,
|
|
._opaqueReturnTypeOf:
|
|
@@ -250,28 +247,22 @@ extension ASTGenVisitor {
|
|
var elements = [BridgedTupleTypeElement]()
|
|
for element in elementList {
|
|
var nameText = element.name?.text
|
|
- let name = nameText?.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
- }
|
|
- let nameLoc = element.name.map { self.base.advanced(by: $0.position.utf8Offset).raw }
|
|
+ let name = nameText?.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
+ } ?? nil
|
|
+ let nameLoc = bridgedSourceLoc(for: element.name)
|
|
var secondNameText = element.secondName?.text
|
|
- let secondName = secondNameText?.withUTF8 { buf in
|
|
- return SwiftASTContext_getIdentifier(ctx, buf.baseAddress, buf.count)
|
|
- }
|
|
- let secondNameLoc = element.secondName.map {
|
|
- self.base.advanced(by: $0.position.utf8Offset).raw
|
|
- }
|
|
- let colonLoc = element.colon.map { self.base.advanced(by: $0.position.utf8Offset).raw }
|
|
-
|
|
+ let secondName = secondNameText?.withBridgedString { bridgedName in
|
|
+ return ASTContext_getIdentifier(ctx, bridgedName)
|
|
+ } ?? nil
|
|
+ let secondNameLoc = bridgedSourceLoc(for: element.secondName)
|
|
+ let colonLoc = bridgedSourceLoc(for: element.colon)
|
|
var type = visit(element.type).rawValue
|
|
if let ellipsis = element.ellipsis {
|
|
- let ellipsisLoc = self.base.advanced(by: ellipsis.positionAfterSkippingLeadingTrivia.utf8Offset).raw
|
|
+ let ellipsisLoc = bridgedSourceLoc(at: ellipsis.positionAfterSkippingLeadingTrivia)
|
|
type = VarargTypeRepr_create(self.ctx, type, ellipsisLoc)
|
|
}
|
|
-
|
|
- let trailingCommaLoc = element.trailingComma.map {
|
|
- self.base.advanced(by: $0.position.utf8Offset).raw
|
|
- }
|
|
+ let trailingCommaLoc = bridgedSourceLoc(for: element.trailingComma)
|
|
|
|
elements.append(
|
|
BridgedTupleTypeElement(
|
|
@@ -318,7 +309,7 @@ func buildTypeRepr(
|
|
endTypeLocPtr.pointee = sourceFile.pointee.buffer.baseAddress!.advanced(by: typeSyntax.endPosition.utf8Offset)
|
|
|
|
// Convert the type syntax node.
|
|
- let typeReprNode = ASTGenVisitor(ctx: ctx, base: sourceFile.pointee.buffer.baseAddress!, declContext: dc)
|
|
+ let typeReprNode = ASTGenVisitor(ctx: BridgedASTContext(raw: ctx), base: sourceFile.pointee.buffer, declContext: BridgedDeclContext(raw: dc))
|
|
.visit(typeSyntax)
|
|
|
|
return typeReprNode.rawValue
|