mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This currently does a little dance to handle PolymorphicFunctionTypes. These are currently implemented by referencing the GenericParamList of an actual polymorphic function, so they can't be deserialized without knowing which function they are attached to. To solve this, PolymorphicFunctionTypes are serialized as regular FunctionTypes. Then, when a generic function decl is being deserialized, it will rebuild a PolymorphicFunctionType from the serialized type and its own generic parameter list. Requirements on the generic types are coming next. Swift SVN r5983
49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
//===--- BCReadingExtras.h - Useful helpers for bitcode reading -*- C++ -*-===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See http://swift.org/LICENSE.txt for license information
|
|
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_SERIALIZATION_BCREADINGEXTRAS_H
|
|
#define SWIFT_SERIALIZATION_BCREADINGEXTRAS_H
|
|
|
|
#include "llvm/Bitcode/BitstreamReader.h"
|
|
|
|
namespace swift {
|
|
namespace serialization {
|
|
|
|
/// Saves and restores a BitstreamCursor's bit offset in its stream.
|
|
class BCOffsetRAII {
|
|
llvm::BitstreamCursor *Cursor;
|
|
decltype(Cursor->GetCurrentBitNo()) Offset;
|
|
|
|
public:
|
|
explicit BCOffsetRAII(llvm::BitstreamCursor &cursor)
|
|
: Cursor(&cursor), Offset(cursor.GetCurrentBitNo()) {}
|
|
|
|
void reset() {
|
|
if (Cursor)
|
|
Offset = Cursor->GetCurrentBitNo();
|
|
}
|
|
|
|
void cancel() {
|
|
Cursor = nullptr;
|
|
}
|
|
|
|
~BCOffsetRAII() {
|
|
if (Cursor)
|
|
Cursor->JumpToBit(Offset);
|
|
};
|
|
};
|
|
|
|
} // end namespace serialization
|
|
} // end namespace swift
|
|
|
|
#endif
|