Showing preview only (895K chars total). Download the full file or copy to clipboard to get everything.
Repository: joaoventura/pybridge-ios
Branch: master
Commit: c29ddf3b4c1e
Files: 163
Total size: 42.8 MB
Directory structure:
gitextract_0pm91rqf/
├── .gitignore
├── PyApp/
│ ├── PyApp/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── PyApp-Bridging-Header.h
│ │ ├── ViewController.swift
│ │ ├── pybridge.c
│ │ ├── pybridge.h
│ │ └── pybridge.swift
│ └── PyApp.xcodeproj/
│ ├── project.pbxproj
│ └── project.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── README.md
├── docs/
│ └── references.md
└── python-for-ios/
└── dist/
├── lib/
│ ├── libcrypto.a
│ ├── libffi.a
│ ├── libpython3.a
│ └── libssl.a
└── root/
└── python3/
├── include/
│ └── python3.8/
│ ├── Python-ast.h
│ ├── Python.h
│ ├── abstract.h
│ ├── asdl.h
│ ├── ast.h
│ ├── bitset.h
│ ├── bltinmodule.h
│ ├── boolobject.h
│ ├── bytearrayobject.h
│ ├── bytes_methods.h
│ ├── bytesobject.h
│ ├── cellobject.h
│ ├── ceval.h
│ ├── classobject.h
│ ├── code.h
│ ├── codecs.h
│ ├── compile.h
│ ├── complexobject.h
│ ├── context.h
│ ├── cpython/
│ │ ├── abstract.h
│ │ ├── dictobject.h
│ │ ├── fileobject.h
│ │ ├── initconfig.h
│ │ ├── interpreteridobject.h
│ │ ├── object.h
│ │ ├── objimpl.h
│ │ ├── pyerrors.h
│ │ ├── pylifecycle.h
│ │ ├── pymem.h
│ │ ├── pystate.h
│ │ ├── sysmodule.h
│ │ ├── traceback.h
│ │ ├── tupleobject.h
│ │ └── unicodeobject.h
│ ├── datetime.h
│ ├── descrobject.h
│ ├── dictobject.h
│ ├── dtoa.h
│ ├── dynamic_annotations.h
│ ├── enumobject.h
│ ├── errcode.h
│ ├── eval.h
│ ├── fileobject.h
│ ├── fileutils.h
│ ├── floatobject.h
│ ├── frameobject.h
│ ├── funcobject.h
│ ├── genobject.h
│ ├── graminit.h
│ ├── grammar.h
│ ├── import.h
│ ├── internal/
│ │ ├── pycore_accu.h
│ │ ├── pycore_atomic.h
│ │ ├── pycore_ceval.h
│ │ ├── pycore_code.h
│ │ ├── pycore_condvar.h
│ │ ├── pycore_context.h
│ │ ├── pycore_fileutils.h
│ │ ├── pycore_getopt.h
│ │ ├── pycore_gil.h
│ │ ├── pycore_hamt.h
│ │ ├── pycore_initconfig.h
│ │ ├── pycore_object.h
│ │ ├── pycore_pathconfig.h
│ │ ├── pycore_pyerrors.h
│ │ ├── pycore_pyhash.h
│ │ ├── pycore_pylifecycle.h
│ │ ├── pycore_pymem.h
│ │ ├── pycore_pystate.h
│ │ ├── pycore_traceback.h
│ │ ├── pycore_tupleobject.h
│ │ └── pycore_warnings.h
│ ├── interpreteridobject.h
│ ├── intrcheck.h
│ ├── iterobject.h
│ ├── listobject.h
│ ├── longintrepr.h
│ ├── longobject.h
│ ├── marshal.h
│ ├── memoryobject.h
│ ├── methodobject.h
│ ├── modsupport.h
│ ├── moduleobject.h
│ ├── namespaceobject.h
│ ├── node.h
│ ├── object.h
│ ├── objimpl.h
│ ├── odictobject.h
│ ├── opcode.h
│ ├── osdefs.h
│ ├── osmodule.h
│ ├── parsetok.h
│ ├── patchlevel.h
│ ├── picklebufobject.h
│ ├── py_curses.h
│ ├── pyarena.h
│ ├── pycapsule.h
│ ├── pyconfig.h
│ ├── pyctype.h
│ ├── pydebug.h
│ ├── pydtrace.h
│ ├── pyerrors.h
│ ├── pyexpat.h
│ ├── pyfpe.h
│ ├── pyhash.h
│ ├── pylifecycle.h
│ ├── pymacconfig.h
│ ├── pymacro.h
│ ├── pymath.h
│ ├── pymem.h
│ ├── pyport.h
│ ├── pystate.h
│ ├── pystrcmp.h
│ ├── pystrhex.h
│ ├── pystrtod.h
│ ├── pythonrun.h
│ ├── pythread.h
│ ├── pytime.h
│ ├── rangeobject.h
│ ├── setobject.h
│ ├── sliceobject.h
│ ├── structmember.h
│ ├── structseq.h
│ ├── symtable.h
│ ├── sysmodule.h
│ ├── token.h
│ ├── traceback.h
│ ├── tracemalloc.h
│ ├── tupleobject.h
│ ├── typeslots.h
│ ├── ucnhash.h
│ ├── unicodeobject.h
│ ├── warnings.h
│ └── weakrefobject.h
└── lib/
├── bootstrap.py
└── python3.8/
├── config-3.8-darwin/
│ ├── Makefile
│ ├── Setup
│ ├── Setup.local
│ ├── config.c
│ └── python-config.py
└── site-packages/
├── README.txt
└── _sqlite3/
└── __init__.py
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
.build/
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build/
# Accio dependency management
Dependencies/
.accio/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
================================================
FILE: PyApp/PyApp/AppDelegate.swift
================================================
//
// AppDelegate.swift
// PyApp
//
// Created by João Ventura on 28/05/2020.
// Copyright © 2020 Ventura. All rights reserved.
//
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
return true
}
func applicationWillResignActive(_ application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
}
func applicationDidEnterBackground(_ application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
}
func applicationWillEnterForeground(_ application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(_ application: UIApplication) {
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}
}
================================================
FILE: PyApp/PyApp/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "20x20",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "20x20",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "29x29",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "40x40",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "1x"
},
{
"idiom" : "ipad",
"size" : "76x76",
"scale" : "2x"
},
{
"idiom" : "ipad",
"size" : "83.5x83.5",
"scale" : "2x"
},
{
"idiom" : "ios-marketing",
"size" : "1024x1024",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: PyApp/PyApp/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: PyApp/PyApp/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>
================================================
FILE: PyApp/PyApp/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<device id="retina4_0" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModule="PyApp" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="8hp-Og-3KK">
<rect key="frame" x="16" y="274" width="288" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
<connections>
<outlet property="label" destination="8hp-Og-3KK" id="uem-N8-L0s"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="138.75" y="109.85915492957747"/>
</scene>
</scenes>
</document>
================================================
FILE: PyApp/PyApp/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
</dict>
</plist>
================================================
FILE: PyApp/PyApp/PyApp-Bridging-Header.h
================================================
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#import "pybridge.h"
================================================
FILE: PyApp/PyApp/ViewController.swift
================================================
//
// ViewController.swift
// PyApp
//
// Created by João Ventura on 28/05/2020.
// Copyright © 2020 Ventura. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
// Start the python interpreter
PyBridge.start(path: Bundle.main.resourcePath!)
// Create dictionary
var req : [String:Any] = [:]
req["function"] = "greet"
req["name"] = "Python 3.8"
// Invoke function
let result = PyBridge.call(req: req)
// Set the label text
label.text = result
// Finalize the python interpreter
PyBridge.stop()
}
}
================================================
FILE: PyApp/PyApp/pybridge.c
================================================
#include <stdio.h>
#include <string.h>
#include "pybridge.h"
#include "Python.h"
void python_start(const char* resourcePath)
{
printf("Initializing the Python interpreter\n");
// Set python home
wchar_t *resources = Py_DecodeLocale(resourcePath, NULL);
Py_SetPythonHome(resources);
// Set paths
char paths[10000];
snprintf(paths, sizeof(paths),
"%s/lib/" \
":%s/lib/python38.zip" \
":%s/lib/python3.8/" \
":%s/lib/python3.8/site-packages",
resourcePath, resourcePath, resourcePath, resourcePath);
wchar_t *wchar_paths = Py_DecodeLocale(paths, NULL);
Py_SetPath(wchar_paths);
// Initialize
Py_InitializeEx(0);
// Bootstrap
PyRun_SimpleString("import bootstrap");
// Cleanup
PyMem_RawFree(wchar_paths);
}
void python_end()
{
printf("Finalizing the Python interpreter\n");
Py_Finalize();
}
char* python_call(const char* payload)
{
printf("Call into Python interpreter\n");
// Import module
PyObject* myModuleString = PyUnicode_FromString((char*) "bootstrap");
PyObject* myModule = PyImport_Import(myModuleString);
// Get reference to the router function
PyObject* myFunction = PyObject_GetAttrString(myModule, (char*) "router");
PyObject* args = PyTuple_Pack(1, PyUnicode_FromString(payload));
// Call function and get the resulting string
PyObject* myResult = PyObject_CallObject(myFunction, args);
const char *myResultChar = PyUnicode_AsUTF8(myResult);
// Cleanup
Py_DECREF(myModuleString);
Py_DECREF(myModule);
Py_DECREF(myFunction);
Py_DECREF(args);
Py_DECREF(myResult);
// Return result
unsigned long len = strlen(myResultChar);
const char *result = malloc(sizeof(char *) * len);
snprintf(result, len+1, "%s", myResultChar);
return strdup(result);
}
================================================
FILE: PyApp/PyApp/pybridge.h
================================================
#ifndef pybridge_h
#define pybridge_h
#include <stdio.h>
void python_start(const char* resourcePath);
void python_end(void);
char* python_call(const char* payload);
#endif /* pybridge_h */
================================================
FILE: PyApp/PyApp/pybridge.swift
================================================
//
// pybridge.swift
// PyApp
//
import Foundation
class PyBridge {
class func start(path: String) {
python_start(path)
}
class func stop() {
python_end()
}
class func call(req: Dictionary<String, Any>) -> String {
// Convert to string
let reqString = try? String(data: JSONSerialization.data(withJSONObject: req), encoding: .utf8)!
// Call the python interpreter
let res = python_call(reqString)
// Convert response to String and free the pointer
let resString = String(cString: res!)
free(UnsafeMutablePointer(res))
// Response
struct PyBridgeResponse: Codable {
var status: String
var result: String
}
// Convert to dictionary
let resData = resString.data(using: .utf8)!
let response = try! JSONDecoder().decode(PyBridgeResponse.self, from: resData)
return response.result
}
}
================================================
FILE: PyApp/PyApp.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
606574B724810A1200A36CE6 /* pybridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 606574B624810A1200A36CE6 /* pybridge.swift */; };
6088164E247FAB3F00861E80 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6088164D247FAB3F00861E80 /* AppDelegate.swift */; };
60881650247FAB3F00861E80 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6088164F247FAB3F00861E80 /* ViewController.swift */; };
60881653247FAB3F00861E80 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60881651247FAB3F00861E80 /* Main.storyboard */; };
60881655247FAB3F00861E80 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 60881654247FAB3F00861E80 /* Assets.xcassets */; };
60881658247FAB3F00861E80 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 60881656247FAB3F00861E80 /* LaunchScreen.storyboard */; };
60881662247FB25800861E80 /* pybridge.c in Sources */ = {isa = PBXBuildFile; fileRef = 60881661247FB25800861E80 /* pybridge.c */; };
6088167E247FBE2200861E80 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167A247FBE2200861E80 /* libcrypto.a */; };
6088167F247FBE2200861E80 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167B247FBE2200861E80 /* libssl.a */; };
60881680247FBE2200861E80 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167C247FBE2200861E80 /* libffi.a */; };
60881681247FBE2200861E80 /* libpython3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6088167D247FBE2200861E80 /* libpython3.a */; };
60881683247FBE2F00861E80 /* libz.1.2.8.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 60881682247FBE2F00861E80 /* libz.1.2.8.tbd */; };
60881685247FC03300861E80 /* lib in Resources */ = {isa = PBXBuildFile; fileRef = 60881684247FC03300861E80 /* lib */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
606574B624810A1200A36CE6 /* pybridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = pybridge.swift; sourceTree = "<group>"; };
6088164A247FAB3F00861E80 /* PyApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PyApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
6088164D247FAB3F00861E80 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
6088164F247FAB3F00861E80 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
60881652247FAB3F00861E80 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
60881654247FAB3F00861E80 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
60881657247FAB3F00861E80 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
60881659247FAB3F00861E80 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
6088165F247FB25800861E80 /* PyApp-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "PyApp-Bridging-Header.h"; sourceTree = "<group>"; };
60881660247FB25800861E80 /* pybridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pybridge.h; sourceTree = "<group>"; };
60881661247FB25800861E80 /* pybridge.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pybridge.c; sourceTree = "<group>"; };
6088167A247FBE2200861E80 /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = "../python-for-ios/dist/lib/libcrypto.a"; sourceTree = "<group>"; };
6088167B247FBE2200861E80 /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = "../python-for-ios/dist/lib/libssl.a"; sourceTree = "<group>"; };
6088167C247FBE2200861E80 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libffi.a; path = "../python-for-ios/dist/lib/libffi.a"; sourceTree = "<group>"; };
6088167D247FBE2200861E80 /* libpython3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpython3.a; path = "../python-for-ios/dist/lib/libpython3.a"; sourceTree = "<group>"; };
60881682247FBE2F00861E80 /* libz.1.2.8.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.1.2.8.tbd; path = usr/lib/libz.1.2.8.tbd; sourceTree = SDKROOT; };
60881684247FC03300861E80 /* lib */ = {isa = PBXFileReference; lastKnownFileType = folder; name = lib; path = "../python-for-ios/dist/root/python3/lib"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
60881647247FAB3F00861E80 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
60881683247FBE2F00861E80 /* libz.1.2.8.tbd in Frameworks */,
6088167E247FBE2200861E80 /* libcrypto.a in Frameworks */,
6088167F247FBE2200861E80 /* libssl.a in Frameworks */,
60881680247FBE2200861E80 /* libffi.a in Frameworks */,
60881681247FBE2200861E80 /* libpython3.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
60881641247FAB3F00861E80 = {
isa = PBXGroup;
children = (
60881684247FC03300861E80 /* lib */,
6088164C247FAB3F00861E80 /* PyApp */,
6088164B247FAB3F00861E80 /* Products */,
60881679247FBE2200861E80 /* Frameworks */,
);
sourceTree = "<group>";
};
6088164B247FAB3F00861E80 /* Products */ = {
isa = PBXGroup;
children = (
6088164A247FAB3F00861E80 /* PyApp.app */,
);
name = Products;
sourceTree = "<group>";
};
6088164C247FAB3F00861E80 /* PyApp */ = {
isa = PBXGroup;
children = (
6088164D247FAB3F00861E80 /* AppDelegate.swift */,
6088164F247FAB3F00861E80 /* ViewController.swift */,
60881651247FAB3F00861E80 /* Main.storyboard */,
60881654247FAB3F00861E80 /* Assets.xcassets */,
60881656247FAB3F00861E80 /* LaunchScreen.storyboard */,
60881659247FAB3F00861E80 /* Info.plist */,
60881660247FB25800861E80 /* pybridge.h */,
60881661247FB25800861E80 /* pybridge.c */,
6088165F247FB25800861E80 /* PyApp-Bridging-Header.h */,
606574B624810A1200A36CE6 /* pybridge.swift */,
);
path = PyApp;
sourceTree = "<group>";
};
60881679247FBE2200861E80 /* Frameworks */ = {
isa = PBXGroup;
children = (
60881682247FBE2F00861E80 /* libz.1.2.8.tbd */,
6088167A247FBE2200861E80 /* libcrypto.a */,
6088167C247FBE2200861E80 /* libffi.a */,
6088167D247FBE2200861E80 /* libpython3.a */,
6088167B247FBE2200861E80 /* libssl.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
60881649247FAB3F00861E80 /* PyApp */ = {
isa = PBXNativeTarget;
buildConfigurationList = 6088165C247FAB3F00861E80 /* Build configuration list for PBXNativeTarget "PyApp" */;
buildPhases = (
60881646247FAB3F00861E80 /* Sources */,
60881647247FAB3F00861E80 /* Frameworks */,
60881648247FAB3F00861E80 /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = PyApp;
productName = PyApp;
productReference = 6088164A247FAB3F00861E80 /* PyApp.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
60881642247FAB3F00861E80 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1030;
LastUpgradeCheck = 1030;
ORGANIZATIONNAME = Ventura;
TargetAttributes = {
60881649247FAB3F00861E80 = {
CreatedOnToolsVersion = 10.3;
LastSwiftMigration = 1030;
};
};
};
buildConfigurationList = 60881645247FAB3F00861E80 /* Build configuration list for PBXProject "PyApp" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 60881641247FAB3F00861E80;
productRefGroup = 6088164B247FAB3F00861E80 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
60881649247FAB3F00861E80 /* PyApp */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
60881648247FAB3F00861E80 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
60881685247FC03300861E80 /* lib in Resources */,
60881658247FAB3F00861E80 /* LaunchScreen.storyboard in Resources */,
60881655247FAB3F00861E80 /* Assets.xcassets in Resources */,
60881653247FAB3F00861E80 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
60881646247FAB3F00861E80 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
60881650247FAB3F00861E80 /* ViewController.swift in Sources */,
60881662247FB25800861E80 /* pybridge.c in Sources */,
6088164E247FAB3F00861E80 /* AppDelegate.swift in Sources */,
606574B724810A1200A36CE6 /* pybridge.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
60881651247FAB3F00861E80 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
60881652247FAB3F00861E80 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
60881656247FAB3F00861E80 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
60881657247FAB3F00861E80 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
6088165A247FAB3F00861E80 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
6088165B247FAB3F00861E80 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.4;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
6088165D247FAB3F00861E80 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 3JZR7F3AMV;
INFOPLIST_FILE = PyApp/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/lib";
PRODUCT_BUNDLE_IDENTIFIER = com.jventura.PyApp;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "PyApp/PyApp-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8/**";
};
name = Debug;
};
6088165E247FAB3F00861E80 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = 3JZR7F3AMV;
INFOPLIST_FILE = PyApp/Info.plist;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/lib";
PRODUCT_BUNDLE_IDENTIFIER = com.jventura.PyApp;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "PyApp/PyApp-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = "1,2";
USER_HEADER_SEARCH_PATHS = "$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8/**";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
60881645247FAB3F00861E80 /* Build configuration list for PBXProject "PyApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6088165A247FAB3F00861E80 /* Debug */,
6088165B247FAB3F00861E80 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
6088165C247FAB3F00861E80 /* Build configuration list for PBXNativeTarget "PyApp" */ = {
isa = XCConfigurationList;
buildConfigurations = (
6088165D247FAB3F00861E80 /* Debug */,
6088165E247FAB3F00861E80 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 60881642247FAB3F00861E80 /* Project object */;
}
================================================
FILE: PyApp/PyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:PyApp.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: PyApp/PyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: README.md
================================================
# PyBridge-iOS
PyBridge is a C implementation that allows to use Python code in native iOS applications. It allows to send String or JSON messages to the Python interpreter without the need for any web frameworks. Instead of using web applications, you can reuse your Python backend code and implement truly native iOS applications.
Shameless plug: I do contract work, check out my website at http://joaoventura.net/ or buy my apps!
## Overview
This repository shows the source code of an empty Xcode Swift project with a Label. When the application starts, it starts the Python interpreter and calls a Python function that returns a greet message that is then set on the Label.

## Running the project
Clone this project and open it on Xcode. All the libraries and python files are included.
Run the project and you should see a `Hello Python 3.8` message in the screen. You can also check the Xcode output to see some debug things.
## How it works?
I've documented all the process in the [references document](https://github.com/joaoventura/pybridge-ios/blob/master/docs/references.md). It shows how to compile a Python 3 distribution, how to include the libraries, and how everything works.
It's mostly a document for myself, but you can use and learn from it!
================================================
FILE: docs/references.md
================================================
# References for creating PyBridge-iOS
This document contains the necessary steps to create an Xcode project from scratch and embedding the Python 3 interpreter. It's mostly to document what I've done as a beginner in the iOS stack.
## Empty Xcode project
Create an empty Xcode project (Single View Application) named PyApp.
Add a Label to the storyboard and connect it to ViewController.swift (use Ctrl and drag the label from the storyboard to ViewController.swift). Set the label's text in `viewDidLoad` to see something working (`label.text = "Hello World"`) and run it.
References
- https://github.com/joaoventura/pybridge-ios/commit/bdc1a2623c19c724ef475f26190645143d3262ba
## Interface with C code
The process to interface Swift with C code is quite simple.
Over PyApp, right click, add a new C file and call it pybridge. This will create `pybridge.c` and `pybridge.h`. If it asks to create the Bridging header, do it as it will be necessary to export the C functions to swift. If not, just create an empty file called `PyApp-Bridging-Header.h` and `#import "pybridge.h"` inside it.
On `pybridge.c` write this function:
```
const char* greet(const char* name)
{
char msg[200];
snprintf(msg, sizeof msg, "Hello %s", name);
printf("Will return: %s\n", msg);
return strdup(msg);
}
```
On `pybridge.h` write the header:
```
const char* greet(const char* name);
```
And finally on `ViewController.swift`:
```
let msg = String(cString: greet("iPhone"))
label.text = msg
```
If everything works fine, you should see the label "Hello iPhone" in the simulator. You can now interface with C code from Swift.
References
- https://theswiftdev.com/how-to-call-c-code-from-swift/
- https://github.com/joaoventura/pybridge-ios/commit/8330b6e618c0fb13957fec29efb8eb7f05d7fcb0
## Compiling Python 3 for iOS
PyBridge-iOS uses the [kivy-ios](https://github.com/kivy/kivy-ios) toolchain to compile the Python static library (libpython3.a) and standard library modules.
Install the kivy-ios toolchain and run `toolchain build python3`. It will create a `build` and `dist` folder. The static libraries needed for the project are in `dist/lib`, the standard library is in `dist/root/python3/lib` and the include files (so that you can `#include "Python.h"` is in `dist/root/python3/include/python3.8`.
Copy `dist/lib` and `dist/root` for the root of your project (not inside the Xcode project!) to a folder called `python-for-ios`. You'll have `python-for-ios/dist/lib` and `python-for-ios/dist/root`.
References
- https://github.com/kivy/kivy-ios
- https://github.com/joaoventura/pybridge-ios/commit/6a06bb770d586a4def589b382d99a10318931b6f
## Include Python static libraries
Modify `pybridge.c` and include the following:
```
#include "Python.h"
void python()
{
printf("Initializing the Python interpreter\n");
Py_InitializeEx(0);
Py_Finalize();
}
```
This will throw a lot of errors in Xcode, such that Xcode must be able to find `Python.h` and all the Python header files, and the static libraries we compiled in the previous step.
On Xcode, on the root of PyApp, select **Build Phases**. On `Link Binary with Libraries` add all the libraries in `python-for-ios/dist/lib` (use "Add Other"). Add also the local framework `libz.1.2.8.tbd` as Python needs some symbols declared there.
On **Build Settings**, on `Search Paths/User Header Search Paths`, add the location of the Python header files: `$(SRCROOT)/../python-for-ios/dist/root/python3/include/python3.8`. Set to find as "recursive".
Finally, still on **Build Settings**, on `Search Paths/Library Search Paths`, add the location of the libraries: `$(SRCROOT)/../python-for-ios/dist/lib`.
If everything is working as expected, the project will compile, although we are not calling the `python()` function.
References
- https://www.chilkatsoft.com/xcode-link-static-lib.asp
- https://www.accusoft.com/resources/blog/using-static-library-ios-app/
- https://github.com/joaoventura/pybridge-ios/commit/63359cbe28d0b7f305190226a624e48292dbe2a5
## Use the Python interpreter
On `ViewController.swift` call the Python function `python()`. It will show the following error in the Xcode output:
```
Initializing the Python interpreter
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
```
This happens because the python interpreter cannot find the standard library files. We must fix this in two steps: copy the standard library files to the device and setting the python path to find them.
**To copy standard library files**
On Xcode, on the root of PyApp, select **Build Phases** again, and on `Copy Bundle Resources` select the *lib* folder at `/python-for-ios/dist/root/python3/lib`. This will copy the files `python38.zip` (standard library python modules) and all the other files inside lib to the device.
**To set python path**
To set the python path, we must pass the location of the files to the C code. iOS has the concept of bundles.
On `ViewController.swift`:
```
python(Bundle.main.resourcePath)
```
Update the arguments on `pybridge.c and pybridge.h` accordingly:
```
void python(const char* resourcePath)
```
Finally, and a big step here, include all the necessary code such that the Python interpreter finds the stdlib files.
```
void python(const char* resourcePath)
{
printf("Initializing the Python interpreter\n");
// Set python home
wchar_t *resources = Py_DecodeLocale(resourcePath, NULL);
Py_SetPythonHome(resources);
// Set paths
char paths[10000];
snprintf(paths, sizeof(paths),
"%s/lib/" \
":%s/lib/python38.zip" \
":%s/lib/python3.8/" \
":%s/lib/python3.8/site-packages",
resourcePath, resourcePath, resourcePath, resourcePath);
wchar_t *wchar_paths = Py_DecodeLocale(paths, NULL);
Py_SetPath(wchar_paths);
// Initialize
Py_InitializeEx(0);
// Run something
PyRun_SimpleString("print('Hello from Python')");
// Finalize
Py_Finalize();
}
```
If everything works fine, you should see **Hello from Python** in the Xcode output.
References
- https://github.com/joaoventura/pybridge-ios/tree/7922308461956b77d250242bdf0cf5d48db111be
## PyBridge routing
Finally, implement the necessary functions to be able to call a function on the Python interpreter.
Resources
- https://github.com/joaoventura/pybridge-ios/commit/fe3b2aec50e3494a2b5171e27d923c4c97ccab36
================================================
FILE: python-for-ios/dist/lib/libpython3.a
================================================
[File too large to display: 41.9 MB]
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/Python-ast.h
================================================
/* File automatically generated by Parser/asdl_c.py. */
#ifndef Py_PYTHON_AST_H
#define Py_PYTHON_AST_H
#ifdef __cplusplus
extern "C" {
#endif
#include "asdl.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
typedef struct _mod *mod_ty;
typedef struct _stmt *stmt_ty;
typedef struct _expr *expr_ty;
typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
Param=6 } expr_context_ty;
typedef struct _slice *slice_ty;
typedef enum _boolop { And=1, Or=2 } boolop_ty;
typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, Pow=7,
LShift=8, RShift=9, BitOr=10, BitXor=11, BitAnd=12,
FloorDiv=13 } operator_ty;
typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;
typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsNot=8,
In=9, NotIn=10 } cmpop_ty;
typedef struct _comprehension *comprehension_ty;
typedef struct _excepthandler *excepthandler_ty;
typedef struct _arguments *arguments_ty;
typedef struct _arg *arg_ty;
typedef struct _keyword *keyword_ty;
typedef struct _alias *alias_ty;
typedef struct _withitem *withitem_ty;
typedef struct _type_ignore *type_ignore_ty;
enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
FunctionType_kind=4, Suite_kind=5};
struct _mod {
enum _mod_kind kind;
union {
struct {
asdl_seq *body;
asdl_seq *type_ignores;
} Module;
struct {
asdl_seq *body;
} Interactive;
struct {
expr_ty body;
} Expression;
struct {
asdl_seq *argtypes;
expr_ty returns;
} FunctionType;
struct {
asdl_seq *body;
} Suite;
} v;
};
enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_kind=3,
Return_kind=4, Delete_kind=5, Assign_kind=6,
AugAssign_kind=7, AnnAssign_kind=8, For_kind=9,
AsyncFor_kind=10, While_kind=11, If_kind=12, With_kind=13,
AsyncWith_kind=14, Raise_kind=15, Try_kind=16,
Assert_kind=17, Import_kind=18, ImportFrom_kind=19,
Global_kind=20, Nonlocal_kind=21, Expr_kind=22, Pass_kind=23,
Break_kind=24, Continue_kind=25};
struct _stmt {
enum _stmt_kind kind;
union {
struct {
identifier name;
arguments_ty args;
asdl_seq *body;
asdl_seq *decorator_list;
expr_ty returns;
string type_comment;
} FunctionDef;
struct {
identifier name;
arguments_ty args;
asdl_seq *body;
asdl_seq *decorator_list;
expr_ty returns;
string type_comment;
} AsyncFunctionDef;
struct {
identifier name;
asdl_seq *bases;
asdl_seq *keywords;
asdl_seq *body;
asdl_seq *decorator_list;
} ClassDef;
struct {
expr_ty value;
} Return;
struct {
asdl_seq *targets;
} Delete;
struct {
asdl_seq *targets;
expr_ty value;
string type_comment;
} Assign;
struct {
expr_ty target;
operator_ty op;
expr_ty value;
} AugAssign;
struct {
expr_ty target;
expr_ty annotation;
expr_ty value;
int simple;
} AnnAssign;
struct {
expr_ty target;
expr_ty iter;
asdl_seq *body;
asdl_seq *orelse;
string type_comment;
} For;
struct {
expr_ty target;
expr_ty iter;
asdl_seq *body;
asdl_seq *orelse;
string type_comment;
} AsyncFor;
struct {
expr_ty test;
asdl_seq *body;
asdl_seq *orelse;
} While;
struct {
expr_ty test;
asdl_seq *body;
asdl_seq *orelse;
} If;
struct {
asdl_seq *items;
asdl_seq *body;
string type_comment;
} With;
struct {
asdl_seq *items;
asdl_seq *body;
string type_comment;
} AsyncWith;
struct {
expr_ty exc;
expr_ty cause;
} Raise;
struct {
asdl_seq *body;
asdl_seq *handlers;
asdl_seq *orelse;
asdl_seq *finalbody;
} Try;
struct {
expr_ty test;
expr_ty msg;
} Assert;
struct {
asdl_seq *names;
} Import;
struct {
identifier module;
asdl_seq *names;
int level;
} ImportFrom;
struct {
asdl_seq *names;
} Global;
struct {
asdl_seq *names;
} Nonlocal;
struct {
expr_ty value;
} Expr;
} v;
int lineno;
int col_offset;
int end_lineno;
int end_col_offset;
};
enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_kind=4,
Lambda_kind=5, IfExp_kind=6, Dict_kind=7, Set_kind=8,
ListComp_kind=9, SetComp_kind=10, DictComp_kind=11,
GeneratorExp_kind=12, Await_kind=13, Yield_kind=14,
YieldFrom_kind=15, Compare_kind=16, Call_kind=17,
FormattedValue_kind=18, JoinedStr_kind=19, Constant_kind=20,
Attribute_kind=21, Subscript_kind=22, Starred_kind=23,
Name_kind=24, List_kind=25, Tuple_kind=26};
struct _expr {
enum _expr_kind kind;
union {
struct {
boolop_ty op;
asdl_seq *values;
} BoolOp;
struct {
expr_ty target;
expr_ty value;
} NamedExpr;
struct {
expr_ty left;
operator_ty op;
expr_ty right;
} BinOp;
struct {
unaryop_ty op;
expr_ty operand;
} UnaryOp;
struct {
arguments_ty args;
expr_ty body;
} Lambda;
struct {
expr_ty test;
expr_ty body;
expr_ty orelse;
} IfExp;
struct {
asdl_seq *keys;
asdl_seq *values;
} Dict;
struct {
asdl_seq *elts;
} Set;
struct {
expr_ty elt;
asdl_seq *generators;
} ListComp;
struct {
expr_ty elt;
asdl_seq *generators;
} SetComp;
struct {
expr_ty key;
expr_ty value;
asdl_seq *generators;
} DictComp;
struct {
expr_ty elt;
asdl_seq *generators;
} GeneratorExp;
struct {
expr_ty value;
} Await;
struct {
expr_ty value;
} Yield;
struct {
expr_ty value;
} YieldFrom;
struct {
expr_ty left;
asdl_int_seq *ops;
asdl_seq *comparators;
} Compare;
struct {
expr_ty func;
asdl_seq *args;
asdl_seq *keywords;
} Call;
struct {
expr_ty value;
int conversion;
expr_ty format_spec;
} FormattedValue;
struct {
asdl_seq *values;
} JoinedStr;
struct {
constant value;
string kind;
} Constant;
struct {
expr_ty value;
identifier attr;
expr_context_ty ctx;
} Attribute;
struct {
expr_ty value;
slice_ty slice;
expr_context_ty ctx;
} Subscript;
struct {
expr_ty value;
expr_context_ty ctx;
} Starred;
struct {
identifier id;
expr_context_ty ctx;
} Name;
struct {
asdl_seq *elts;
expr_context_ty ctx;
} List;
struct {
asdl_seq *elts;
expr_context_ty ctx;
} Tuple;
} v;
int lineno;
int col_offset;
int end_lineno;
int end_col_offset;
};
enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3};
struct _slice {
enum _slice_kind kind;
union {
struct {
expr_ty lower;
expr_ty upper;
expr_ty step;
} Slice;
struct {
asdl_seq *dims;
} ExtSlice;
struct {
expr_ty value;
} Index;
} v;
};
struct _comprehension {
expr_ty target;
expr_ty iter;
asdl_seq *ifs;
int is_async;
};
enum _excepthandler_kind {ExceptHandler_kind=1};
struct _excepthandler {
enum _excepthandler_kind kind;
union {
struct {
expr_ty type;
identifier name;
asdl_seq *body;
} ExceptHandler;
} v;
int lineno;
int col_offset;
int end_lineno;
int end_col_offset;
};
struct _arguments {
asdl_seq *posonlyargs;
asdl_seq *args;
arg_ty vararg;
asdl_seq *kwonlyargs;
asdl_seq *kw_defaults;
arg_ty kwarg;
asdl_seq *defaults;
};
struct _arg {
identifier arg;
expr_ty annotation;
string type_comment;
int lineno;
int col_offset;
int end_lineno;
int end_col_offset;
};
struct _keyword {
identifier arg;
expr_ty value;
};
struct _alias {
identifier name;
identifier asname;
};
struct _withitem {
expr_ty context_expr;
expr_ty optional_vars;
};
enum _type_ignore_kind {TypeIgnore_kind=1};
struct _type_ignore {
enum _type_ignore_kind kind;
union {
struct {
int lineno;
string tag;
} TypeIgnore;
} v;
};
// Note: these macros affect function definitions, not only call sites.
#define Module(a0, a1, a2) _Py_Module(a0, a1, a2)
mod_ty _Py_Module(asdl_seq * body, asdl_seq * type_ignores, PyArena *arena);
#define Interactive(a0, a1) _Py_Interactive(a0, a1)
mod_ty _Py_Interactive(asdl_seq * body, PyArena *arena);
#define Expression(a0, a1) _Py_Expression(a0, a1)
mod_ty _Py_Expression(expr_ty body, PyArena *arena);
#define FunctionType(a0, a1, a2) _Py_FunctionType(a0, a1, a2)
mod_ty _Py_FunctionType(asdl_seq * argtypes, expr_ty returns, PyArena *arena);
#define Suite(a0, a1) _Py_Suite(a0, a1)
mod_ty _Py_Suite(asdl_seq * body, PyArena *arena);
#define FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_FunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
stmt_ty _Py_FunctionDef(identifier name, arguments_ty args, asdl_seq * body,
asdl_seq * decorator_list, expr_ty returns, string
type_comment, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) _Py_AsyncFunctionDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)
stmt_ty _Py_AsyncFunctionDef(identifier name, arguments_ty args, asdl_seq *
body, asdl_seq * decorator_list, expr_ty returns,
string type_comment, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena
*arena);
#define ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_ClassDef(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_ClassDef(identifier name, asdl_seq * bases, asdl_seq * keywords,
asdl_seq * body, asdl_seq * decorator_list, int lineno,
int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define Return(a0, a1, a2, a3, a4, a5) _Py_Return(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Return(expr_ty value, int lineno, int col_offset, int end_lineno,
int end_col_offset, PyArena *arena);
#define Delete(a0, a1, a2, a3, a4, a5) _Py_Delete(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Delete(asdl_seq * targets, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Assign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Assign(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, string type_comment, int
lineno, int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define AugAssign(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AugAssign(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_AnnAssign(a0, a1, a2, a3, a4, a5, a6, a7, a8)
stmt_ty _Py_AnnAssign(expr_ty target, expr_ty annotation, expr_ty value, int
simple, int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_For(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
orelse, string type_comment, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) _Py_AsyncFor(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9)
stmt_ty _Py_AsyncFor(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
orelse, string type_comment, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena *arena);
#define While(a0, a1, a2, a3, a4, a5, a6, a7) _Py_While(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_While(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
int col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define If(a0, a1, a2, a3, a4, a5, a6, a7) _Py_If(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_If(expr_ty test, asdl_seq * body, asdl_seq * orelse, int lineno,
int col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define With(a0, a1, a2, a3, a4, a5, a6, a7) _Py_With(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_With(asdl_seq * items, asdl_seq * body, string type_comment, int
lineno, int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7) _Py_AsyncWith(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_AsyncWith(asdl_seq * items, asdl_seq * body, string type_comment,
int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Raise(a0, a1, a2, a3, a4, a5, a6) _Py_Raise(a0, a1, a2, a3, a4, a5, a6)
stmt_ty _Py_Raise(expr_ty exc, expr_ty cause, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Try(a0, a1, a2, a3, a4, a5, a6, a7, a8) _Py_Try(a0, a1, a2, a3, a4, a5, a6, a7, a8)
stmt_ty _Py_Try(asdl_seq * body, asdl_seq * handlers, asdl_seq * orelse,
asdl_seq * finalbody, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Assert(a0, a1, a2, a3, a4, a5, a6) _Py_Assert(a0, a1, a2, a3, a4, a5, a6)
stmt_ty _Py_Assert(expr_ty test, expr_ty msg, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Import(a0, a1, a2, a3, a4, a5) _Py_Import(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Import(asdl_seq * names, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ImportFrom(a0, a1, a2, a3, a4, a5, a6, a7)
stmt_ty _Py_ImportFrom(identifier module, asdl_seq * names, int level, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Global(a0, a1, a2, a3, a4, a5) _Py_Global(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Global(asdl_seq * names, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Nonlocal(a0, a1, a2, a3, a4, a5) _Py_Nonlocal(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Nonlocal(asdl_seq * names, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Expr(a0, a1, a2, a3, a4, a5) _Py_Expr(a0, a1, a2, a3, a4, a5)
stmt_ty _Py_Expr(expr_ty value, int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Pass(a0, a1, a2, a3, a4) _Py_Pass(a0, a1, a2, a3, a4)
stmt_ty _Py_Pass(int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Break(a0, a1, a2, a3, a4) _Py_Break(a0, a1, a2, a3, a4)
stmt_ty _Py_Break(int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Continue(a0, a1, a2, a3, a4) _Py_Continue(a0, a1, a2, a3, a4)
stmt_ty _Py_Continue(int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define BoolOp(a0, a1, a2, a3, a4, a5, a6) _Py_BoolOp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_BoolOp(boolop_ty op, asdl_seq * values, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena *arena);
#define NamedExpr(a0, a1, a2, a3, a4, a5, a6) _Py_NamedExpr(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_NamedExpr(expr_ty target, expr_ty value, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define BinOp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_BinOp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_BinOp(expr_ty left, operator_ty op, expr_ty right, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define UnaryOp(a0, a1, a2, a3, a4, a5, a6) _Py_UnaryOp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_UnaryOp(unaryop_ty op, expr_ty operand, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena *arena);
#define Lambda(a0, a1, a2, a3, a4, a5, a6) _Py_Lambda(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Lambda(arguments_ty args, expr_ty body, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena *arena);
#define IfExp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_IfExp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_IfExp(expr_ty test, expr_ty body, expr_ty orelse, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define Dict(a0, a1, a2, a3, a4, a5, a6) _Py_Dict(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Dict(asdl_seq * keys, asdl_seq * values, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define Set(a0, a1, a2, a3, a4, a5) _Py_Set(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Set(asdl_seq * elts, int lineno, int col_offset, int end_lineno,
int end_col_offset, PyArena *arena);
#define ListComp(a0, a1, a2, a3, a4, a5, a6) _Py_ListComp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_ListComp(expr_ty elt, asdl_seq * generators, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define SetComp(a0, a1, a2, a3, a4, a5, a6) _Py_SetComp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_SetComp(expr_ty elt, asdl_seq * generators, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define DictComp(a0, a1, a2, a3, a4, a5, a6, a7) _Py_DictComp(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_DictComp(expr_ty key, expr_ty value, asdl_seq * generators, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define GeneratorExp(a0, a1, a2, a3, a4, a5, a6) _Py_GeneratorExp(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_GeneratorExp(expr_ty elt, asdl_seq * generators, int lineno, int
col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define Await(a0, a1, a2, a3, a4, a5) _Py_Await(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Await(expr_ty value, int lineno, int col_offset, int end_lineno,
int end_col_offset, PyArena *arena);
#define Yield(a0, a1, a2, a3, a4, a5) _Py_Yield(a0, a1, a2, a3, a4, a5)
expr_ty _Py_Yield(expr_ty value, int lineno, int col_offset, int end_lineno,
int end_col_offset, PyArena *arena);
#define YieldFrom(a0, a1, a2, a3, a4, a5) _Py_YieldFrom(a0, a1, a2, a3, a4, a5)
expr_ty _Py_YieldFrom(expr_ty value, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Compare(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Compare(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators,
int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Call(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Call(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, int
lineno, int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7) _Py_FormattedValue(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_FormattedValue(expr_ty value, int conversion, expr_ty format_spec,
int lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define JoinedStr(a0, a1, a2, a3, a4, a5) _Py_JoinedStr(a0, a1, a2, a3, a4, a5)
expr_ty _Py_JoinedStr(asdl_seq * values, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena *arena);
#define Constant(a0, a1, a2, a3, a4, a5, a6) _Py_Constant(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Constant(constant value, string kind, int lineno, int col_offset,
int end_lineno, int end_col_offset, PyArena *arena);
#define Attribute(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Attribute(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Subscript(a0, a1, a2, a3, a4, a5, a6, a7) _Py_Subscript(a0, a1, a2, a3, a4, a5, a6, a7)
expr_ty _Py_Subscript(expr_ty value, slice_ty slice, expr_context_ty ctx, int
lineno, int col_offset, int end_lineno, int
end_col_offset, PyArena *arena);
#define Starred(a0, a1, a2, a3, a4, a5, a6) _Py_Starred(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Starred(expr_ty value, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define Name(a0, a1, a2, a3, a4, a5, a6) _Py_Name(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Name(identifier id, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define List(a0, a1, a2, a3, a4, a5, a6) _Py_List(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_List(asdl_seq * elts, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define Tuple(a0, a1, a2, a3, a4, a5, a6) _Py_Tuple(a0, a1, a2, a3, a4, a5, a6)
expr_ty _Py_Tuple(asdl_seq * elts, expr_context_ty ctx, int lineno, int
col_offset, int end_lineno, int end_col_offset, PyArena
*arena);
#define Slice(a0, a1, a2, a3) _Py_Slice(a0, a1, a2, a3)
slice_ty _Py_Slice(expr_ty lower, expr_ty upper, expr_ty step, PyArena *arena);
#define ExtSlice(a0, a1) _Py_ExtSlice(a0, a1)
slice_ty _Py_ExtSlice(asdl_seq * dims, PyArena *arena);
#define Index(a0, a1) _Py_Index(a0, a1)
slice_ty _Py_Index(expr_ty value, PyArena *arena);
#define comprehension(a0, a1, a2, a3, a4) _Py_comprehension(a0, a1, a2, a3, a4)
comprehension_ty _Py_comprehension(expr_ty target, expr_ty iter, asdl_seq *
ifs, int is_async, PyArena *arena);
#define ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7) _Py_ExceptHandler(a0, a1, a2, a3, a4, a5, a6, a7)
excepthandler_ty _Py_ExceptHandler(expr_ty type, identifier name, asdl_seq *
body, int lineno, int col_offset, int
end_lineno, int end_col_offset, PyArena
*arena);
#define arguments(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arguments(a0, a1, a2, a3, a4, a5, a6, a7)
arguments_ty _Py_arguments(asdl_seq * posonlyargs, asdl_seq * args, arg_ty
vararg, asdl_seq * kwonlyargs, asdl_seq *
kw_defaults, arg_ty kwarg, asdl_seq * defaults,
PyArena *arena);
#define arg(a0, a1, a2, a3, a4, a5, a6, a7) _Py_arg(a0, a1, a2, a3, a4, a5, a6, a7)
arg_ty _Py_arg(identifier arg, expr_ty annotation, string type_comment, int
lineno, int col_offset, int end_lineno, int end_col_offset,
PyArena *arena);
#define keyword(a0, a1, a2) _Py_keyword(a0, a1, a2)
keyword_ty _Py_keyword(identifier arg, expr_ty value, PyArena *arena);
#define alias(a0, a1, a2) _Py_alias(a0, a1, a2)
alias_ty _Py_alias(identifier name, identifier asname, PyArena *arena);
#define withitem(a0, a1, a2) _Py_withitem(a0, a1, a2)
withitem_ty _Py_withitem(expr_ty context_expr, expr_ty optional_vars, PyArena
*arena);
#define TypeIgnore(a0, a1, a2) _Py_TypeIgnore(a0, a1, a2)
type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena);
PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
int PyAST_Check(PyObject* obj);
#ifdef __cplusplus
}
#endif
#endif /* !Py_PYTHON_AST_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/Python.h
================================================
#ifndef Py_PYTHON_H
#define Py_PYTHON_H
/* Since this is a "meta-include" file, no #ifdef __cplusplus / extern "C" { */
/* Include nearly all Python header files */
#include "patchlevel.h"
#include "pyconfig.h"
#include "pymacconfig.h"
#include <limits.h>
#ifndef UCHAR_MAX
#error "Something's broken. UCHAR_MAX should be defined in limits.h."
#endif
#if UCHAR_MAX != 255
#error "Python's source code assumes C's unsigned char is an 8-bit type."
#endif
#if defined(__sgi) && !defined(_SGI_MP_SOURCE)
#define _SGI_MP_SOURCE
#endif
#include <stdio.h>
#ifndef NULL
# error "Python.h requires that stdio.h define NULL."
#endif
#include <string.h>
#ifdef HAVE_ERRNO_H
#include <errno.h>
#endif
#include <stdlib.h>
#ifndef MS_WINDOWS
#include <unistd.h>
#endif
#ifdef HAVE_CRYPT_H
#if defined(HAVE_CRYPT_R) && !defined(_GNU_SOURCE)
/* Required for glibc to expose the crypt_r() function prototype. */
# define _GNU_SOURCE
# define _Py_GNU_SOURCE_FOR_CRYPT
#endif
#include <crypt.h>
#ifdef _Py_GNU_SOURCE_FOR_CRYPT
/* Don't leak the _GNU_SOURCE define to other headers. */
# undef _GNU_SOURCE
# undef _Py_GNU_SOURCE_FOR_CRYPT
#endif
#endif
/* For size_t? */
#ifdef HAVE_STDDEF_H
#include <stddef.h>
#endif
/* CAUTION: Build setups should ensure that NDEBUG is defined on the
* compiler command line when building Python in release mode; else
* assert() calls won't be removed.
*/
#include <assert.h>
#include "pyport.h"
#include "pymacro.h"
/* A convenient way for code to know if clang's memory sanitizer is enabled. */
#if defined(__has_feature)
# if __has_feature(memory_sanitizer)
# if !defined(_Py_MEMORY_SANITIZER)
# define _Py_MEMORY_SANITIZER
# endif
# endif
#endif
/* Debug-mode build with pymalloc implies PYMALLOC_DEBUG.
* PYMALLOC_DEBUG is in error if pymalloc is not in use.
*/
#if defined(Py_DEBUG) && defined(WITH_PYMALLOC) && !defined(PYMALLOC_DEBUG)
#define PYMALLOC_DEBUG
#endif
#if defined(PYMALLOC_DEBUG) && !defined(WITH_PYMALLOC)
#error "PYMALLOC_DEBUG requires WITH_PYMALLOC"
#endif
#include "pymath.h"
#include "pytime.h"
#include "pymem.h"
#include "object.h"
#include "objimpl.h"
#include "typeslots.h"
#include "pyhash.h"
#include "pydebug.h"
#include "bytearrayobject.h"
#include "bytesobject.h"
#include "unicodeobject.h"
#include "longobject.h"
#include "longintrepr.h"
#include "boolobject.h"
#include "floatobject.h"
#include "complexobject.h"
#include "rangeobject.h"
#include "memoryobject.h"
#include "tupleobject.h"
#include "listobject.h"
#include "dictobject.h"
#include "odictobject.h"
#include "enumobject.h"
#include "setobject.h"
#include "methodobject.h"
#include "moduleobject.h"
#include "funcobject.h"
#include "classobject.h"
#include "fileobject.h"
#include "pycapsule.h"
#include "traceback.h"
#include "sliceobject.h"
#include "cellobject.h"
#include "iterobject.h"
#include "genobject.h"
#include "descrobject.h"
#include "warnings.h"
#include "weakrefobject.h"
#include "structseq.h"
#include "namespaceobject.h"
#include "picklebufobject.h"
#include "codecs.h"
#include "pyerrors.h"
#include "cpython/initconfig.h"
#include "pystate.h"
#include "context.h"
#include "pyarena.h"
#include "modsupport.h"
#include "compile.h"
#include "pythonrun.h"
#include "pylifecycle.h"
#include "ceval.h"
#include "sysmodule.h"
#include "osmodule.h"
#include "intrcheck.h"
#include "import.h"
#include "abstract.h"
#include "bltinmodule.h"
#include "eval.h"
#include "pyctype.h"
#include "pystrtod.h"
#include "pystrcmp.h"
#include "dtoa.h"
#include "fileutils.h"
#include "pyfpe.h"
#include "tracemalloc.h"
#endif /* !Py_PYTHON_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/abstract.h
================================================
/* Abstract Object Interface (many thanks to Jim Fulton) */
#ifndef Py_ABSTRACTOBJECT_H
#define Py_ABSTRACTOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
/* === Object Protocol ================================================== */
/* Implemented elsewhere:
int PyObject_Print(PyObject *o, FILE *fp, int flags);
Print an object 'o' on file 'fp'. Returns -1 on error. The flags argument
is used to enable certain printing options. The only option currently
supported is Py_Print_RAW.
(What should be said about Py_Print_RAW?). */
/* Implemented elsewhere:
int PyObject_HasAttrString(PyObject *o, const char *attr_name);
Returns 1 if object 'o' has the attribute attr_name, and 0 otherwise.
This is equivalent to the Python expression: hasattr(o,attr_name).
This function always succeeds. */
/* Implemented elsewhere:
PyObject* PyObject_GetAttrString(PyObject *o, const char *attr_name);
Retrieve an attributed named attr_name form object o.
Returns the attribute value on success, or NULL on failure.
This is the equivalent of the Python expression: o.attr_name. */
/* Implemented elsewhere:
int PyObject_HasAttr(PyObject *o, PyObject *attr_name);
Returns 1 if o has the attribute attr_name, and 0 otherwise.
This is equivalent to the Python expression: hasattr(o,attr_name).
This function always succeeds. */
/* Implemented elsewhere:
PyObject* PyObject_GetAttr(PyObject *o, PyObject *attr_name);
Retrieve an attributed named 'attr_name' form object 'o'.
Returns the attribute value on success, or NULL on failure.
This is the equivalent of the Python expression: o.attr_name. */
/* Implemented elsewhere:
int PyObject_SetAttrString(PyObject *o, const char *attr_name, PyObject *v);
Set the value of the attribute named attr_name, for object 'o',
to the value 'v'. Raise an exception and return -1 on failure; return 0 on
success.
This is the equivalent of the Python statement o.attr_name=v. */
/* Implemented elsewhere:
int PyObject_SetAttr(PyObject *o, PyObject *attr_name, PyObject *v);
Set the value of the attribute named attr_name, for object 'o', to the value
'v'. an exception and return -1 on failure; return 0 on success.
This is the equivalent of the Python statement o.attr_name=v. */
/* Implemented as a macro:
int PyObject_DelAttrString(PyObject *o, const char *attr_name);
Delete attribute named attr_name, for object o. Returns
-1 on failure.
This is the equivalent of the Python statement: del o.attr_name. */
#define PyObject_DelAttrString(O,A) PyObject_SetAttrString((O),(A), NULL)
/* Implemented as a macro:
int PyObject_DelAttr(PyObject *o, PyObject *attr_name);
Delete attribute named attr_name, for object o. Returns -1
on failure. This is the equivalent of the Python
statement: del o.attr_name. */
#define PyObject_DelAttr(O,A) PyObject_SetAttr((O),(A), NULL)
/* Implemented elsewhere:
PyObject *PyObject_Repr(PyObject *o);
Compute the string representation of object 'o'. Returns the
string representation on success, NULL on failure.
This is the equivalent of the Python expression: repr(o).
Called by the repr() built-in function. */
/* Implemented elsewhere:
PyObject *PyObject_Str(PyObject *o);
Compute the string representation of object, o. Returns the
string representation on success, NULL on failure.
This is the equivalent of the Python expression: str(o).
Called by the str() and print() built-in functions. */
/* Declared elsewhere
PyAPI_FUNC(int) PyCallable_Check(PyObject *o);
Determine if the object, o, is callable. Return 1 if the object is callable
and 0 otherwise.
This function always succeeds. */
#ifdef PY_SSIZE_T_CLEAN
# define PyObject_CallFunction _PyObject_CallFunction_SizeT
# define PyObject_CallMethod _PyObject_CallMethod_SizeT
#endif
/* Call a callable Python object 'callable' with arguments given by the
tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
'args' must not be NULL, use an empty tuple if no arguments are
needed. If no named arguments are needed, 'kwargs' can be NULL.
This is the equivalent of the Python expression:
callable(*args, **kwargs). */
PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable,
PyObject *args, PyObject *kwargs);
/* Call a callable Python object 'callable', with arguments given by the
tuple 'args'. If no arguments are needed, then 'args' can be NULL.
Returns the result of the call on success, or NULL on failure.
This is the equivalent of the Python expression:
callable(*args). */
PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable,
PyObject *args);
/* Call a callable Python object, callable, with a variable number of C
arguments. The C arguments are described using a mkvalue-style format
string.
The format may be NULL, indicating that no arguments are provided.
Returns the result of the call on success, or NULL on failure.
This is the equivalent of the Python expression:
callable(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable,
const char *format, ...);
/* Call the method named 'name' of object 'obj' with a variable number of
C arguments. The C arguments are described by a mkvalue format string.
The format can be NULL, indicating that no arguments are provided.
Returns the result of the call on success, or NULL on failure.
This is the equivalent of the Python expression:
obj.name(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *obj,
const char *name,
const char *format, ...);
PyAPI_FUNC(PyObject *) _PyObject_CallFunction_SizeT(PyObject *callable,
const char *format,
...);
PyAPI_FUNC(PyObject *) _PyObject_CallMethod_SizeT(PyObject *obj,
const char *name,
const char *format,
...);
/* Call a callable Python object 'callable' with a variable number of C
arguments. The C arguments are provided as PyObject* values, terminated
by a NULL.
Returns the result of the call on success, or NULL on failure.
This is the equivalent of the Python expression:
callable(arg1, arg2, ...). */
PyAPI_FUNC(PyObject *) PyObject_CallFunctionObjArgs(PyObject *callable,
...);
/* Call the method named 'name' of object 'obj' with a variable number of
C arguments. The C arguments are provided as PyObject* values, terminated
by NULL.
Returns the result of the call on success, or NULL on failure.
This is the equivalent of the Python expression: obj.name(*args). */
PyAPI_FUNC(PyObject *) PyObject_CallMethodObjArgs(
PyObject *obj,
PyObject *name,
...);
/* Implemented elsewhere:
Py_hash_t PyObject_Hash(PyObject *o);
Compute and return the hash, hash_value, of an object, o. On
failure, return -1.
This is the equivalent of the Python expression: hash(o). */
/* Implemented elsewhere:
int PyObject_IsTrue(PyObject *o);
Returns 1 if the object, o, is considered to be true, 0 if o is
considered to be false and -1 on failure.
This is equivalent to the Python expression: not not o. */
/* Implemented elsewhere:
int PyObject_Not(PyObject *o);
Returns 0 if the object, o, is considered to be true, 1 if o is
considered to be false and -1 on failure.
This is equivalent to the Python expression: not o. */
/* Get the type of an object.
On success, returns a type object corresponding to the object type of object
'o'. On failure, returns NULL.
This is equivalent to the Python expression: type(o) */
PyAPI_FUNC(PyObject *) PyObject_Type(PyObject *o);
/* Return the size of object 'o'. If the object 'o' provides both sequence and
mapping protocols, the sequence size is returned.
On error, -1 is returned.
This is the equivalent to the Python expression: len(o) */
PyAPI_FUNC(Py_ssize_t) PyObject_Size(PyObject *o);
/* For DLL compatibility */
#undef PyObject_Length
PyAPI_FUNC(Py_ssize_t) PyObject_Length(PyObject *o);
#define PyObject_Length PyObject_Size
/* Return element of 'o' corresponding to the object 'key'. Return NULL
on failure.
This is the equivalent of the Python expression: o[key] */
PyAPI_FUNC(PyObject *) PyObject_GetItem(PyObject *o, PyObject *key);
/* Map the object 'key' to the value 'v' into 'o'.
Raise an exception and return -1 on failure; return 0 on success.
This is the equivalent of the Python statement: o[key]=v. */
PyAPI_FUNC(int) PyObject_SetItem(PyObject *o, PyObject *key, PyObject *v);
/* Remove the mapping for the string 'key' from the object 'o'.
Returns -1 on failure.
This is equivalent to the Python statement: del o[key]. */
PyAPI_FUNC(int) PyObject_DelItemString(PyObject *o, const char *key);
/* Delete the mapping for the object 'key' from the object 'o'.
Returns -1 on failure.
This is the equivalent of the Python statement: del o[key]. */
PyAPI_FUNC(int) PyObject_DelItem(PyObject *o, PyObject *key);
/* === Old Buffer API ============================================ */
/* FIXME: usage of these should all be replaced in Python itself
but for backwards compatibility we will implement them.
Their usage without a corresponding "unlock" mechanism
may create issues (but they would already be there). */
/* Takes an arbitrary object which must support the (character, single segment)
buffer interface and returns a pointer to a read-only memory location
useable as character based input for subsequent processing.
Return 0 on success. buffer and buffer_len are only set in case no error
occurs. Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsCharBuffer(PyObject *obj,
const char **buffer,
Py_ssize_t *buffer_len);
/* Checks whether an arbitrary object supports the (character, single segment)
buffer interface.
Returns 1 on success, 0 on failure. */
Py_DEPRECATED(3.0) PyAPI_FUNC(int) PyObject_CheckReadBuffer(PyObject *obj);
/* Same as PyObject_AsCharBuffer() except that this API expects (readable,
single segment) buffer interface and returns a pointer to a read-only memory
location which can contain arbitrary data.
0 is returned on success. buffer and buffer_len are only set in case no
error occurs. Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsReadBuffer(PyObject *obj,
const void **buffer,
Py_ssize_t *buffer_len);
/* Takes an arbitrary object which must support the (writable, single segment)
buffer interface and returns a pointer to a writable memory location in
buffer of size 'buffer_len'.
Return 0 on success. buffer and buffer_len are only set in case no error
occurs. Otherwise, -1 is returned and an exception set. */
Py_DEPRECATED(3.0)
PyAPI_FUNC(int) PyObject_AsWriteBuffer(PyObject *obj,
void **buffer,
Py_ssize_t *buffer_len);
/* === New Buffer API ============================================ */
/* Takes an arbitrary object and returns the result of calling
obj.__format__(format_spec). */
PyAPI_FUNC(PyObject *) PyObject_Format(PyObject *obj,
PyObject *format_spec);
/* ==== Iterators ================================================ */
/* Takes an object and returns an iterator for it.
This is typically a new iterator but if the argument is an iterator, this
returns itself. */
PyAPI_FUNC(PyObject *) PyObject_GetIter(PyObject *);
/* Returns 1 if the object 'obj' provides iterator protocols, and 0 otherwise.
This function always succeeds. */
PyAPI_FUNC(int) PyIter_Check(PyObject *);
/* Takes an iterator object and calls its tp_iternext slot,
returning the next value.
If the iterator is exhausted, this returns NULL without setting an
exception.
NULL with an exception means an error occurred. */
PyAPI_FUNC(PyObject *) PyIter_Next(PyObject *);
/* === Number Protocol ================================================== */
/* Returns 1 if the object 'o' provides numeric protocols, and 0 otherwise.
This function always succeeds. */
PyAPI_FUNC(int) PyNumber_Check(PyObject *o);
/* Returns the result of adding o1 and o2, or NULL on failure.
This is the equivalent of the Python expression: o1 + o2. */
PyAPI_FUNC(PyObject *) PyNumber_Add(PyObject *o1, PyObject *o2);
/* Returns the result of subtracting o2 from o1, or NULL on failure.
This is the equivalent of the Python expression: o1 - o2. */
PyAPI_FUNC(PyObject *) PyNumber_Subtract(PyObject *o1, PyObject *o2);
/* Returns the result of multiplying o1 and o2, or NULL on failure.
This is the equivalent of the Python expression: o1 * o2. */
PyAPI_FUNC(PyObject *) PyNumber_Multiply(PyObject *o1, PyObject *o2);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* This is the equivalent of the Python expression: o1 @ o2. */
PyAPI_FUNC(PyObject *) PyNumber_MatrixMultiply(PyObject *o1, PyObject *o2);
#endif
/* Returns the result of dividing o1 by o2 giving an integral result,
or NULL on failure.
This is the equivalent of the Python expression: o1 // o2. */
PyAPI_FUNC(PyObject *) PyNumber_FloorDivide(PyObject *o1, PyObject *o2);
/* Returns the result of dividing o1 by o2 giving a float result, or NULL on
failure.
This is the equivalent of the Python expression: o1 / o2. */
PyAPI_FUNC(PyObject *) PyNumber_TrueDivide(PyObject *o1, PyObject *o2);
/* Returns the remainder of dividing o1 by o2, or NULL on failure.
This is the equivalent of the Python expression: o1 % o2. */
PyAPI_FUNC(PyObject *) PyNumber_Remainder(PyObject *o1, PyObject *o2);
/* See the built-in function divmod.
Returns NULL on failure.
This is the equivalent of the Python expression: divmod(o1, o2). */
PyAPI_FUNC(PyObject *) PyNumber_Divmod(PyObject *o1, PyObject *o2);
/* See the built-in function pow. Returns NULL on failure.
This is the equivalent of the Python expression: pow(o1, o2, o3),
where o3 is optional. */
PyAPI_FUNC(PyObject *) PyNumber_Power(PyObject *o1, PyObject *o2,
PyObject *o3);
/* Returns the negation of o on success, or NULL on failure.
This is the equivalent of the Python expression: -o. */
PyAPI_FUNC(PyObject *) PyNumber_Negative(PyObject *o);
/* Returns the positive of o on success, or NULL on failure.
This is the equivalent of the Python expression: +o. */
PyAPI_FUNC(PyObject *) PyNumber_Positive(PyObject *o);
/* Returns the absolute value of 'o', or NULL on failure.
This is the equivalent of the Python expression: abs(o). */
PyAPI_FUNC(PyObject *) PyNumber_Absolute(PyObject *o);
/* Returns the bitwise negation of 'o' on success, or NULL on failure.
This is the equivalent of the Python expression: ~o. */
PyAPI_FUNC(PyObject *) PyNumber_Invert(PyObject *o);
/* Returns the result of left shifting o1 by o2 on success, or NULL on failure.
This is the equivalent of the Python expression: o1 << o2. */
PyAPI_FUNC(PyObject *) PyNumber_Lshift(PyObject *o1, PyObject *o2);
/* Returns the result of right shifting o1 by o2 on success, or NULL on
failure.
This is the equivalent of the Python expression: o1 >> o2. */
PyAPI_FUNC(PyObject *) PyNumber_Rshift(PyObject *o1, PyObject *o2);
/* Returns the result of bitwise and of o1 and o2 on success, or NULL on
failure.
This is the equivalent of the Python expression: o1 & o2. */
PyAPI_FUNC(PyObject *) PyNumber_And(PyObject *o1, PyObject *o2);
/* Returns the bitwise exclusive or of o1 by o2 on success, or NULL on failure.
This is the equivalent of the Python expression: o1 ^ o2. */
PyAPI_FUNC(PyObject *) PyNumber_Xor(PyObject *o1, PyObject *o2);
/* Returns the result of bitwise or on o1 and o2 on success, or NULL on
failure.
This is the equivalent of the Python expression: o1 | o2. */
PyAPI_FUNC(PyObject *) PyNumber_Or(PyObject *o1, PyObject *o2);
/* Returns 1 if obj is an index integer (has the nb_index slot of the
tp_as_number structure filled in), and 0 otherwise. */
PyAPI_FUNC(int) PyIndex_Check(PyObject *);
/* Returns the object 'o' converted to a Python int, or NULL with an exception
raised on failure. */
PyAPI_FUNC(PyObject *) PyNumber_Index(PyObject *o);
/* Returns the object 'o' converted to Py_ssize_t by going through
PyNumber_Index() first.
If an overflow error occurs while converting the int to Py_ssize_t, then the
second argument 'exc' is the error-type to return. If it is NULL, then the
overflow error is cleared and the value is clipped. */
PyAPI_FUNC(Py_ssize_t) PyNumber_AsSsize_t(PyObject *o, PyObject *exc);
/* Returns the object 'o' converted to an integer object on success, or NULL
on failure.
This is the equivalent of the Python expression: int(o). */
PyAPI_FUNC(PyObject *) PyNumber_Long(PyObject *o);
/* Returns the object 'o' converted to a float object on success, or NULL
on failure.
This is the equivalent of the Python expression: float(o). */
PyAPI_FUNC(PyObject *) PyNumber_Float(PyObject *o);
/* --- In-place variants of (some of) the above number protocol functions -- */
/* Returns the result of adding o2 to o1, possibly in-place, or NULL
on failure.
This is the equivalent of the Python expression: o1 += o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAdd(PyObject *o1, PyObject *o2);
/* Returns the result of subtracting o2 from o1, possibly in-place or
NULL on failure.
This is the equivalent of the Python expression: o1 -= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceSubtract(PyObject *o1, PyObject *o2);
/* Returns the result of multiplying o1 by o2, possibly in-place, or NULL on
failure.
This is the equivalent of the Python expression: o1 *= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMultiply(PyObject *o1, PyObject *o2);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* This is the equivalent of the Python expression: o1 @= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceMatrixMultiply(PyObject *o1, PyObject *o2);
#endif
/* Returns the result of dividing o1 by o2 giving an integral result, possibly
in-place, or NULL on failure.
This is the equivalent of the Python expression: o1 /= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceFloorDivide(PyObject *o1,
PyObject *o2);
/* Returns the result of dividing o1 by o2 giving a float result, possibly
in-place, or null on failure.
This is the equivalent of the Python expression: o1 /= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceTrueDivide(PyObject *o1,
PyObject *o2);
/* Returns the remainder of dividing o1 by o2, possibly in-place, or NULL on
failure.
This is the equivalent of the Python expression: o1 %= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRemainder(PyObject *o1, PyObject *o2);
/* Returns the result of raising o1 to the power of o2, possibly in-place,
or NULL on failure.
This is the equivalent of the Python expression: o1 **= o2,
or o1 = pow(o1, o2, o3) if o3 is present. */
PyAPI_FUNC(PyObject *) PyNumber_InPlacePower(PyObject *o1, PyObject *o2,
PyObject *o3);
/* Returns the result of left shifting o1 by o2, possibly in-place, or NULL
on failure.
This is the equivalent of the Python expression: o1 <<= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceLshift(PyObject *o1, PyObject *o2);
/* Returns the result of right shifting o1 by o2, possibly in-place or NULL
on failure.
This is the equivalent of the Python expression: o1 >>= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceRshift(PyObject *o1, PyObject *o2);
/* Returns the result of bitwise and of o1 and o2, possibly in-place, or NULL
on failure.
This is the equivalent of the Python expression: o1 &= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceAnd(PyObject *o1, PyObject *o2);
/* Returns the bitwise exclusive or of o1 by o2, possibly in-place, or NULL
on failure.
This is the equivalent of the Python expression: o1 ^= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceXor(PyObject *o1, PyObject *o2);
/* Returns the result of bitwise or of o1 and o2, possibly in-place,
or NULL on failure.
This is the equivalent of the Python expression: o1 |= o2. */
PyAPI_FUNC(PyObject *) PyNumber_InPlaceOr(PyObject *o1, PyObject *o2);
/* Returns the integer n converted to a string with a base, with a base
marker of 0b, 0o or 0x prefixed if applicable.
If n is not an int object, it is converted with PyNumber_Index first. */
PyAPI_FUNC(PyObject *) PyNumber_ToBase(PyObject *n, int base);
/* === Sequence protocol ================================================ */
/* Return 1 if the object provides sequence protocol, and zero
otherwise.
This function always succeeds. */
PyAPI_FUNC(int) PySequence_Check(PyObject *o);
/* Return the size of sequence object o, or -1 on failure. */
PyAPI_FUNC(Py_ssize_t) PySequence_Size(PyObject *o);
/* For DLL compatibility */
#undef PySequence_Length
PyAPI_FUNC(Py_ssize_t) PySequence_Length(PyObject *o);
#define PySequence_Length PySequence_Size
/* Return the concatenation of o1 and o2 on success, and NULL on failure.
This is the equivalent of the Python expression: o1 + o2. */
PyAPI_FUNC(PyObject *) PySequence_Concat(PyObject *o1, PyObject *o2);
/* Return the result of repeating sequence object 'o' 'count' times,
or NULL on failure.
This is the equivalent of the Python expression: o * count. */
PyAPI_FUNC(PyObject *) PySequence_Repeat(PyObject *o, Py_ssize_t count);
/* Return the ith element of o, or NULL on failure.
This is the equivalent of the Python expression: o[i]. */
PyAPI_FUNC(PyObject *) PySequence_GetItem(PyObject *o, Py_ssize_t i);
/* Return the slice of sequence object o between i1 and i2, or NULL on failure.
This is the equivalent of the Python expression: o[i1:i2]. */
PyAPI_FUNC(PyObject *) PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
/* Assign object 'v' to the ith element of the sequence 'o'. Raise an exception
and return -1 on failure; return 0 on success.
This is the equivalent of the Python statement o[i] = v. */
PyAPI_FUNC(int) PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v);
/* Delete the 'i'-th element of the sequence 'v'. Returns -1 on failure.
This is the equivalent of the Python statement: del o[i]. */
PyAPI_FUNC(int) PySequence_DelItem(PyObject *o, Py_ssize_t i);
/* Assign the sequence object 'v' to the slice in sequence object 'o',
from 'i1' to 'i2'. Returns -1 on failure.
This is the equivalent of the Python statement: o[i1:i2] = v. */
PyAPI_FUNC(int) PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2,
PyObject *v);
/* Delete the slice in sequence object 'o' from 'i1' to 'i2'.
Returns -1 on failure.
This is the equivalent of the Python statement: del o[i1:i2]. */
PyAPI_FUNC(int) PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2);
/* Returns the sequence 'o' as a tuple on success, and NULL on failure.
This is equivalent to the Python expression: tuple(o). */
PyAPI_FUNC(PyObject *) PySequence_Tuple(PyObject *o);
/* Returns the sequence 'o' as a list on success, and NULL on failure.
This is equivalent to the Python expression: list(o) */
PyAPI_FUNC(PyObject *) PySequence_List(PyObject *o);
/* Return the sequence 'o' as a list, unless it's already a tuple or list.
Use PySequence_Fast_GET_ITEM to access the members of this list, and
PySequence_Fast_GET_SIZE to get its length.
Returns NULL on failure. If the object does not support iteration, raises a
TypeError exception with 'm' as the message text. */
PyAPI_FUNC(PyObject *) PySequence_Fast(PyObject *o, const char* m);
/* Return the size of the sequence 'o', assuming that 'o' was returned by
PySequence_Fast and is not NULL. */
#define PySequence_Fast_GET_SIZE(o) \
(PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
by PySequence_Fast, and that i is within bounds. */
#define PySequence_Fast_GET_ITEM(o, i)\
(PyList_Check(o) ? PyList_GET_ITEM(o, i) : PyTuple_GET_ITEM(o, i))
/* Return a pointer to the underlying item array for
an object retured by PySequence_Fast */
#define PySequence_Fast_ITEMS(sf) \
(PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
: ((PyTupleObject *)(sf))->ob_item)
/* Return the number of occurrences on value on 'o', that is, return
the number of keys for which o[key] == value.
On failure, return -1. This is equivalent to the Python expression:
o.count(value). */
PyAPI_FUNC(Py_ssize_t) PySequence_Count(PyObject *o, PyObject *value);
/* Return 1 if 'ob' is in the sequence 'seq'; 0 if 'ob' is not in the sequence
'seq'; -1 on error.
Use __contains__ if possible, else _PySequence_IterSearch(). */
PyAPI_FUNC(int) PySequence_Contains(PyObject *seq, PyObject *ob);
/* For DLL-level backwards compatibility */
#undef PySequence_In
/* Determine if the sequence 'o' contains 'value'. If an item in 'o' is equal
to 'value', return 1, otherwise return 0. On error, return -1.
This is equivalent to the Python expression: value in o. */
PyAPI_FUNC(int) PySequence_In(PyObject *o, PyObject *value);
/* For source-level backwards compatibility */
#define PySequence_In PySequence_Contains
/* Return the first index for which o[i] == value.
On error, return -1.
This is equivalent to the Python expression: o.index(value). */
PyAPI_FUNC(Py_ssize_t) PySequence_Index(PyObject *o, PyObject *value);
/* --- In-place versions of some of the above Sequence functions --- */
/* Append sequence 'o2' to sequence 'o1', in-place when possible. Return the
resulting object, which could be 'o1', or NULL on failure.
This is the equivalent of the Python expression: o1 += o2. */
PyAPI_FUNC(PyObject *) PySequence_InPlaceConcat(PyObject *o1, PyObject *o2);
/* Repeat sequence 'o' by 'count', in-place when possible. Return the resulting
object, which could be 'o', or NULL on failure.
This is the equivalent of the Python expression: o1 *= count. */
PyAPI_FUNC(PyObject *) PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count);
/* === Mapping protocol ================================================= */
/* Return 1 if the object provides mapping protocol, and 0 otherwise.
This function always succeeds. */
PyAPI_FUNC(int) PyMapping_Check(PyObject *o);
/* Returns the number of keys in mapping object 'o' on success, and -1 on
failure. This is equivalent to the Python expression: len(o). */
PyAPI_FUNC(Py_ssize_t) PyMapping_Size(PyObject *o);
/* For DLL compatibility */
#undef PyMapping_Length
PyAPI_FUNC(Py_ssize_t) PyMapping_Length(PyObject *o);
#define PyMapping_Length PyMapping_Size
/* Implemented as a macro:
int PyMapping_DelItemString(PyObject *o, const char *key);
Remove the mapping for the string 'key' from the mapping 'o'. Returns -1 on
failure.
This is equivalent to the Python statement: del o[key]. */
#define PyMapping_DelItemString(O,K) PyObject_DelItemString((O),(K))
/* Implemented as a macro:
int PyMapping_DelItem(PyObject *o, PyObject *key);
Remove the mapping for the object 'key' from the mapping object 'o'.
Returns -1 on failure.
This is equivalent to the Python statement: del o[key]. */
#define PyMapping_DelItem(O,K) PyObject_DelItem((O),(K))
/* On success, return 1 if the mapping object 'o' has the key 'key',
and 0 otherwise.
This is equivalent to the Python expression: key in o.
This function always succeeds. */
PyAPI_FUNC(int) PyMapping_HasKeyString(PyObject *o, const char *key);
/* Return 1 if the mapping object has the key 'key', and 0 otherwise.
This is equivalent to the Python expression: key in o.
This function always succeeds. */
PyAPI_FUNC(int) PyMapping_HasKey(PyObject *o, PyObject *key);
/* On success, return a list or tuple of the keys in mapping object 'o'.
On failure, return NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Keys(PyObject *o);
/* On success, return a list or tuple of the values in mapping object 'o'.
On failure, return NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Values(PyObject *o);
/* On success, return a list or tuple of the items in mapping object 'o',
where each item is a tuple containing a key-value pair. On failure, return
NULL. */
PyAPI_FUNC(PyObject *) PyMapping_Items(PyObject *o);
/* Return element of 'o' corresponding to the string 'key' or NULL on failure.
This is the equivalent of the Python expression: o[key]. */
PyAPI_FUNC(PyObject *) PyMapping_GetItemString(PyObject *o,
const char *key);
/* Map the string 'key' to the value 'v' in the mapping 'o'.
Returns -1 on failure.
This is the equivalent of the Python statement: o[key]=v. */
PyAPI_FUNC(int) PyMapping_SetItemString(PyObject *o, const char *key,
PyObject *value);
/* isinstance(object, typeorclass) */
PyAPI_FUNC(int) PyObject_IsInstance(PyObject *object, PyObject *typeorclass);
/* issubclass(object, typeorclass) */
PyAPI_FUNC(int) PyObject_IsSubclass(PyObject *object, PyObject *typeorclass);
#ifndef Py_LIMITED_API
# define Py_CPYTHON_ABSTRACTOBJECT_H
# include "cpython/abstract.h"
# undef Py_CPYTHON_ABSTRACTOBJECT_H
#endif
#ifdef __cplusplus
}
#endif
#endif /* Py_ABSTRACTOBJECT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/asdl.h
================================================
#ifndef Py_ASDL_H
#define Py_ASDL_H
typedef PyObject * identifier;
typedef PyObject * string;
typedef PyObject * bytes;
typedef PyObject * object;
typedef PyObject * singleton;
typedef PyObject * constant;
/* It would be nice if the code generated by asdl_c.py was completely
independent of Python, but it is a goal the requires too much work
at this stage. So, for example, I'll represent identifiers as
interned Python strings.
*/
/* XXX A sequence should be typed so that its use can be typechecked. */
typedef struct {
Py_ssize_t size;
void *elements[1];
} asdl_seq;
typedef struct {
Py_ssize_t size;
int elements[1];
} asdl_int_seq;
asdl_seq *_Py_asdl_seq_new(Py_ssize_t size, PyArena *arena);
asdl_int_seq *_Py_asdl_int_seq_new(Py_ssize_t size, PyArena *arena);
#define asdl_seq_GET(S, I) (S)->elements[(I)]
#define asdl_seq_LEN(S) ((S) == NULL ? 0 : (S)->size)
#ifdef Py_DEBUG
#define asdl_seq_SET(S, I, V) \
do { \
Py_ssize_t _asdl_i = (I); \
assert((S) != NULL); \
assert(0 <= _asdl_i && _asdl_i < (S)->size); \
(S)->elements[_asdl_i] = (V); \
} while (0)
#else
#define asdl_seq_SET(S, I, V) (S)->elements[I] = (V)
#endif
#endif /* !Py_ASDL_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/ast.h
================================================
#ifndef Py_AST_H
#define Py_AST_H
#ifdef __cplusplus
extern "C" {
#endif
#include "Python-ast.h" /* mod_ty */
#include "node.h" /* node */
PyAPI_FUNC(int) PyAST_Validate(mod_ty);
PyAPI_FUNC(mod_ty) PyAST_FromNode(
const node *n,
PyCompilerFlags *flags,
const char *filename, /* decoded from the filesystem encoding */
PyArena *arena);
PyAPI_FUNC(mod_ty) PyAST_FromNodeObject(
const node *n,
PyCompilerFlags *flags,
PyObject *filename,
PyArena *arena);
#ifndef Py_LIMITED_API
/* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
PyAPI_FUNC(PyObject *) _PyAST_ExprAsUnicode(expr_ty);
/* Return the borrowed reference to the first literal string in the
sequence of statemnts or NULL if it doesn't start from a literal string.
Doesn't set exception. */
PyAPI_FUNC(PyObject *) _PyAST_GetDocString(asdl_seq *);
#endif /* !Py_LIMITED_API */
#ifdef __cplusplus
}
#endif
#endif /* !Py_AST_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bitset.h
================================================
#ifndef Py_BITSET_H
#define Py_BITSET_H
#ifdef __cplusplus
extern "C" {
#endif
/* Bitset interface */
#define BYTE char
typedef BYTE *bitset;
#define testbit(ss, ibit) (((ss)[BIT2BYTE(ibit)] & BIT2MASK(ibit)) != 0)
#define BITSPERBYTE (8*sizeof(BYTE))
#define BIT2BYTE(ibit) ((ibit) / BITSPERBYTE)
#define BIT2SHIFT(ibit) ((ibit) % BITSPERBYTE)
#define BIT2MASK(ibit) (1 << BIT2SHIFT(ibit))
#ifdef __cplusplus
}
#endif
#endif /* !Py_BITSET_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bltinmodule.h
================================================
#ifndef Py_BLTINMODULE_H
#define Py_BLTINMODULE_H
#ifdef __cplusplus
extern "C" {
#endif
PyAPI_DATA(PyTypeObject) PyFilter_Type;
PyAPI_DATA(PyTypeObject) PyMap_Type;
PyAPI_DATA(PyTypeObject) PyZip_Type;
#ifdef __cplusplus
}
#endif
#endif /* !Py_BLTINMODULE_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/boolobject.h
================================================
/* Boolean object interface */
#ifndef Py_BOOLOBJECT_H
#define Py_BOOLOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
PyAPI_DATA(PyTypeObject) PyBool_Type;
#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type)
/* Py_False and Py_True are the only two bools in existence.
Don't forget to apply Py_INCREF() when returning either!!! */
/* Don't use these directly */
PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct;
/* Use these macros */
#define Py_False ((PyObject *) &_Py_FalseStruct)
#define Py_True ((PyObject *) &_Py_TrueStruct)
/* Macros for returning Py_True or Py_False, respectively */
#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True
#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False
/* Function to return a bool from a C long */
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
#ifdef __cplusplus
}
#endif
#endif /* !Py_BOOLOBJECT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h
================================================
/* ByteArray object interface */
#ifndef Py_BYTEARRAYOBJECT_H
#define Py_BYTEARRAYOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h>
/* Type PyByteArrayObject represents a mutable array of bytes.
* The Python API is that of a sequence;
* the bytes are mapped to ints in [0, 256).
* Bytes are not characters; they may be used to encode characters.
* The only way to go between bytes and str/unicode is via encoding
* and decoding.
* For the convenience of C programmers, the bytes type is considered
* to contain a char pointer, not an unsigned char pointer.
*/
/* Object layout */
#ifndef Py_LIMITED_API
typedef struct {
PyObject_VAR_HEAD
Py_ssize_t ob_alloc; /* How many bytes allocated in ob_bytes */
char *ob_bytes; /* Physical backing buffer */
char *ob_start; /* Logical start inside ob_bytes */
/* XXX(nnorwitz): should ob_exports be Py_ssize_t? */
int ob_exports; /* How many buffer exports */
} PyByteArrayObject;
#endif
/* Type object */
PyAPI_DATA(PyTypeObject) PyByteArray_Type;
PyAPI_DATA(PyTypeObject) PyByteArrayIter_Type;
/* Type check macros */
#define PyByteArray_Check(self) PyObject_TypeCheck(self, &PyByteArray_Type)
#define PyByteArray_CheckExact(self) (Py_TYPE(self) == &PyByteArray_Type)
/* Direct API functions */
PyAPI_FUNC(PyObject *) PyByteArray_FromObject(PyObject *);
PyAPI_FUNC(PyObject *) PyByteArray_Concat(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyByteArray_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(Py_ssize_t) PyByteArray_Size(PyObject *);
PyAPI_FUNC(char *) PyByteArray_AsString(PyObject *);
PyAPI_FUNC(int) PyByteArray_Resize(PyObject *, Py_ssize_t);
/* Macros, trading safety for speed */
#ifndef Py_LIMITED_API
#define PyByteArray_AS_STRING(self) \
(assert(PyByteArray_Check(self)), \
Py_SIZE(self) ? ((PyByteArrayObject *)(self))->ob_start : _PyByteArray_empty_string)
#define PyByteArray_GET_SIZE(self) (assert(PyByteArray_Check(self)), Py_SIZE(self))
PyAPI_DATA(char) _PyByteArray_empty_string[];
#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_BYTEARRAYOBJECT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytes_methods.h
================================================
#ifndef Py_LIMITED_API
#ifndef Py_BYTES_CTYPE_H
#define Py_BYTES_CTYPE_H
/*
* The internal implementation behind PyBytes (bytes) and PyByteArray (bytearray)
* methods of the given names, they operate on ASCII byte strings.
*/
extern PyObject* _Py_bytes_isspace(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isalpha(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isalnum(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isascii(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isdigit(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_islower(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_isupper(const char *cptr, Py_ssize_t len);
extern PyObject* _Py_bytes_istitle(const char *cptr, Py_ssize_t len);
/* These store their len sized answer in the given preallocated *result arg. */
extern void _Py_bytes_lower(char *result, const char *cptr, Py_ssize_t len);
extern void _Py_bytes_upper(char *result, const char *cptr, Py_ssize_t len);
extern void _Py_bytes_title(char *result, const char *s, Py_ssize_t len);
extern void _Py_bytes_capitalize(char *result, const char *s, Py_ssize_t len);
extern void _Py_bytes_swapcase(char *result, const char *s, Py_ssize_t len);
extern PyObject *_Py_bytes_find(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_index(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_rfind(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_rindex(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_count(const char *str, Py_ssize_t len, PyObject *args);
extern int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg);
extern PyObject *_Py_bytes_startswith(const char *str, Py_ssize_t len, PyObject *args);
extern PyObject *_Py_bytes_endswith(const char *str, Py_ssize_t len, PyObject *args);
/* The maketrans() static method. */
extern PyObject* _Py_bytes_maketrans(Py_buffer *frm, Py_buffer *to);
/* Shared __doc__ strings. */
extern const char _Py_isspace__doc__[];
extern const char _Py_isalpha__doc__[];
extern const char _Py_isalnum__doc__[];
extern const char _Py_isascii__doc__[];
extern const char _Py_isdigit__doc__[];
extern const char _Py_islower__doc__[];
extern const char _Py_isupper__doc__[];
extern const char _Py_istitle__doc__[];
extern const char _Py_lower__doc__[];
extern const char _Py_upper__doc__[];
extern const char _Py_title__doc__[];
extern const char _Py_capitalize__doc__[];
extern const char _Py_swapcase__doc__[];
extern const char _Py_count__doc__[];
extern const char _Py_find__doc__[];
extern const char _Py_index__doc__[];
extern const char _Py_rfind__doc__[];
extern const char _Py_rindex__doc__[];
extern const char _Py_startswith__doc__[];
extern const char _Py_endswith__doc__[];
extern const char _Py_maketrans__doc__[];
extern const char _Py_expandtabs__doc__[];
extern const char _Py_ljust__doc__[];
extern const char _Py_rjust__doc__[];
extern const char _Py_center__doc__[];
extern const char _Py_zfill__doc__[];
/* this is needed because some docs are shared from the .o, not static */
#define PyDoc_STRVAR_shared(name,str) const char name[] = PyDoc_STR(str)
#endif /* !Py_BYTES_CTYPE_H */
#endif /* !Py_LIMITED_API */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/bytesobject.h
================================================
/* Bytes (String) object interface */
#ifndef Py_BYTESOBJECT_H
#define Py_BYTESOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdarg.h>
/*
Type PyBytesObject represents a character string. An extra zero byte is
reserved at the end to ensure it is zero-terminated, but a size is
present so strings with null bytes in them can be represented. This
is an immutable object type.
There are functions to create new string objects, to test
an object for string-ness, and to get the
string value. The latter function returns a null pointer
if the object is not of the proper type.
There is a variant that takes an explicit size as well as a
variant that assumes a zero-terminated string. Note that none of the
functions should be applied to nil objects.
*/
/* Caching the hash (ob_shash) saves recalculation of a string's hash value.
This significantly speeds up dict lookups. */
#ifndef Py_LIMITED_API
typedef struct {
PyObject_VAR_HEAD
Py_hash_t ob_shash;
char ob_sval[1];
/* Invariants:
* ob_sval contains space for 'ob_size+1' elements.
* ob_sval[ob_size] == 0.
* ob_shash is the hash of the string or -1 if not computed yet.
*/
} PyBytesObject;
#endif
PyAPI_DATA(PyTypeObject) PyBytes_Type;
PyAPI_DATA(PyTypeObject) PyBytesIter_Type;
#define PyBytes_Check(op) \
PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_BYTES_SUBCLASS)
#define PyBytes_CheckExact(op) (Py_TYPE(op) == &PyBytes_Type)
PyAPI_FUNC(PyObject *) PyBytes_FromStringAndSize(const char *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyBytes_FromString(const char *);
PyAPI_FUNC(PyObject *) PyBytes_FromObject(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_FromFormatV(const char*, va_list)
Py_GCC_ATTRIBUTE((format(printf, 1, 0)));
PyAPI_FUNC(PyObject *) PyBytes_FromFormat(const char*, ...)
Py_GCC_ATTRIBUTE((format(printf, 1, 2)));
PyAPI_FUNC(Py_ssize_t) PyBytes_Size(PyObject *);
PyAPI_FUNC(char *) PyBytes_AsString(PyObject *);
PyAPI_FUNC(PyObject *) PyBytes_Repr(PyObject *, int);
PyAPI_FUNC(void) PyBytes_Concat(PyObject **, PyObject *);
PyAPI_FUNC(void) PyBytes_ConcatAndDel(PyObject **, PyObject *);
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyBytes_Resize(PyObject **, Py_ssize_t);
PyAPI_FUNC(PyObject*) _PyBytes_FormatEx(
const char *format,
Py_ssize_t format_len,
PyObject *args,
int use_bytearray);
PyAPI_FUNC(PyObject*) _PyBytes_FromHex(
PyObject *string,
int use_bytearray);
#endif
PyAPI_FUNC(PyObject *) PyBytes_DecodeEscape(const char *, Py_ssize_t,
const char *, Py_ssize_t,
const char *);
#ifndef Py_LIMITED_API
/* Helper for PyBytes_DecodeEscape that detects invalid escape chars. */
PyAPI_FUNC(PyObject *) _PyBytes_DecodeEscape(const char *, Py_ssize_t,
const char *, Py_ssize_t,
const char *,
const char **);
#endif
/* Macro, trading safety for speed */
#ifndef Py_LIMITED_API
#define PyBytes_AS_STRING(op) (assert(PyBytes_Check(op)), \
(((PyBytesObject *)(op))->ob_sval))
#define PyBytes_GET_SIZE(op) (assert(PyBytes_Check(op)),Py_SIZE(op))
#endif
/* _PyBytes_Join(sep, x) is like sep.join(x). sep must be PyBytesObject*,
x must be an iterable object. */
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyBytes_Join(PyObject *sep, PyObject *x);
#endif
/* Provides access to the internal data buffer and size of a string
object or the default encoded version of a Unicode object. Passing
NULL as *len parameter will force the string buffer to be
0-terminated (passing a string with embedded NULL characters will
cause an exception). */
PyAPI_FUNC(int) PyBytes_AsStringAndSize(
PyObject *obj, /* string or Unicode object */
char **s, /* pointer to buffer variable */
Py_ssize_t *len /* pointer to length variable or NULL
(only possible for 0-terminated
strings) */
);
/* Using the current locale, insert the thousands grouping
into the string pointed to by buffer. For the argument descriptions,
see Objects/stringlib/localeutil.h */
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGroupingLocale(char *buffer,
Py_ssize_t n_buffer,
char *digits,
Py_ssize_t n_digits,
Py_ssize_t min_width);
/* Using explicit passed-in values, insert the thousands grouping
into the string pointed to by buffer. For the argument descriptions,
see Objects/stringlib/localeutil.h */
PyAPI_FUNC(Py_ssize_t) _PyBytes_InsertThousandsGrouping(char *buffer,
Py_ssize_t n_buffer,
char *digits,
Py_ssize_t n_digits,
Py_ssize_t min_width,
const char *grouping,
const char *thousands_sep);
#endif
/* Flags used by string formatting */
#define F_LJUST (1<<0)
#define F_SIGN (1<<1)
#define F_BLANK (1<<2)
#define F_ALT (1<<3)
#define F_ZERO (1<<4)
#ifndef Py_LIMITED_API
/* The _PyBytesWriter structure is big: it contains an embedded "stack buffer".
A _PyBytesWriter variable must be declared at the end of variables in a
function to optimize the memory allocation on the stack. */
typedef struct {
/* bytes, bytearray or NULL (when the small buffer is used) */
PyObject *buffer;
/* Number of allocated size. */
Py_ssize_t allocated;
/* Minimum number of allocated bytes,
incremented by _PyBytesWriter_Prepare() */
Py_ssize_t min_size;
/* If non-zero, use a bytearray instead of a bytes object for buffer. */
int use_bytearray;
/* If non-zero, overallocate the buffer (default: 0).
This flag must be zero if use_bytearray is non-zero. */
int overallocate;
/* Stack buffer */
int use_small_buffer;
char small_buffer[512];
} _PyBytesWriter;
/* Initialize a bytes writer
By default, the overallocation is disabled. Set the overallocate attribute
to control the allocation of the buffer. */
PyAPI_FUNC(void) _PyBytesWriter_Init(_PyBytesWriter *writer);
/* Get the buffer content and reset the writer.
Return a bytes object, or a bytearray object if use_bytearray is non-zero.
Raise an exception and return NULL on error. */
PyAPI_FUNC(PyObject *) _PyBytesWriter_Finish(_PyBytesWriter *writer,
void *str);
/* Deallocate memory of a writer (clear its internal buffer). */
PyAPI_FUNC(void) _PyBytesWriter_Dealloc(_PyBytesWriter *writer);
/* Allocate the buffer to write size bytes.
Return the pointer to the beginning of buffer data.
Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_Alloc(_PyBytesWriter *writer,
Py_ssize_t size);
/* Ensure that the buffer is large enough to write *size* bytes.
Add size to the writer minimum size (min_size attribute).
str is the current pointer inside the buffer.
Return the updated current pointer inside the buffer.
Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_Prepare(_PyBytesWriter *writer,
void *str,
Py_ssize_t size);
/* Resize the buffer to make it larger.
The new buffer may be larger than size bytes because of overallocation.
Return the updated current pointer inside the buffer.
Raise an exception and return NULL on error.
Note: size must be greater than the number of allocated bytes in the writer.
This function doesn't use the writer minimum size (min_size attribute).
See also _PyBytesWriter_Prepare().
*/
PyAPI_FUNC(void*) _PyBytesWriter_Resize(_PyBytesWriter *writer,
void *str,
Py_ssize_t size);
/* Write bytes.
Raise an exception and return NULL on error. */
PyAPI_FUNC(void*) _PyBytesWriter_WriteBytes(_PyBytesWriter *writer,
void *str,
const void *bytes,
Py_ssize_t size);
#endif /* Py_LIMITED_API */
#ifdef __cplusplus
}
#endif
#endif /* !Py_BYTESOBJECT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cellobject.h
================================================
/* Cell object interface */
#ifndef Py_LIMITED_API
#ifndef Py_CELLOBJECT_H
#define Py_CELLOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
PyObject_HEAD
PyObject *ob_ref; /* Content of the cell or NULL when empty */
} PyCellObject;
PyAPI_DATA(PyTypeObject) PyCell_Type;
#define PyCell_Check(op) (Py_TYPE(op) == &PyCell_Type)
PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)
#ifdef __cplusplus
}
#endif
#endif /* !Py_TUPLEOBJECT_H */
#endif /* Py_LIMITED_API */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/ceval.h
================================================
#ifndef Py_CEVAL_H
#define Py_CEVAL_H
#ifdef __cplusplus
extern "C" {
#endif
/* Interface to random parts in ceval.c */
/* PyEval_CallObjectWithKeywords(), PyEval_CallObject(), PyEval_CallFunction
* and PyEval_CallMethod are kept for backward compatibility: PyObject_Call(),
* PyObject_CallFunction() and PyObject_CallMethod() are recommended to call
* a callable object.
*/
PyAPI_FUNC(PyObject *) PyEval_CallObjectWithKeywords(
PyObject *callable,
PyObject *args,
PyObject *kwargs);
/* Inline this */
#define PyEval_CallObject(callable, arg) \
PyEval_CallObjectWithKeywords(callable, arg, (PyObject *)NULL)
PyAPI_FUNC(PyObject *) PyEval_CallFunction(PyObject *callable,
const char *format, ...);
PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
const char *name,
const char *format, ...);
#ifndef Py_LIMITED_API
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
PyAPI_FUNC(void) _PyEval_SetAsyncGenFinalizer(PyObject *);
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFinalizer(void);
#endif
struct _frame; /* Avoid including frameobject.h */
PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
#ifndef Py_LIMITED_API
/* Helper to look up a builtin object */
PyAPI_FUNC(PyObject *) _PyEval_GetBuiltinId(_Py_Identifier *);
/* Look at the current frame's (if any) code's co_flags, and turn on
the corresponding compiler flags in cf->cf_flags. Return 1 if any
flag was set, else return 0. */
PyAPI_FUNC(int) PyEval_MergeCompilerFlags(PyCompilerFlags *cf);
#endif
PyAPI_FUNC(int) Py_AddPendingCall(int (*func)(void *), void *arg);
PyAPI_FUNC(int) Py_MakePendingCalls(void);
/* Protection against deeply nested recursive calls
In Python 3.0, this protection has two levels:
* normal anti-recursion protection is triggered when the recursion level
exceeds the current recursion limit. It raises a RecursionError, and sets
the "overflowed" flag in the thread state structure. This flag
temporarily *disables* the normal protection; this allows cleanup code
to potentially outgrow the recursion limit while processing the
RecursionError.
* "last chance" anti-recursion protection is triggered when the recursion
level exceeds "current recursion limit + 50". By construction, this
protection can only be triggered when the "overflowed" flag is set. It
means the cleanup code has itself gone into an infinite loop, or the
RecursionError has been mistakingly ignored. When this protection is
triggered, the interpreter aborts with a Fatal Error.
In addition, the "overflowed" flag is automatically reset when the
recursion level drops below "current recursion limit - 50". This heuristic
is meant to ensure that the normal anti-recursion protection doesn't get
disabled too long.
Please note: this scheme has its own limitations. See:
http://mail.python.org/pipermail/python-dev/2008-August/082106.html
for some observations.
*/
PyAPI_FUNC(void) Py_SetRecursionLimit(int);
PyAPI_FUNC(int) Py_GetRecursionLimit(void);
#define Py_EnterRecursiveCall(where) \
(_Py_MakeRecCheck(PyThreadState_GET()->recursion_depth) && \
_Py_CheckRecursiveCall(where))
#define Py_LeaveRecursiveCall() \
do{ if(_Py_MakeEndRecCheck(PyThreadState_GET()->recursion_depth)) \
PyThreadState_GET()->overflowed = 0; \
} while(0)
PyAPI_FUNC(int) _Py_CheckRecursiveCall(const char *where);
/* Due to the macros in which it's used, _Py_CheckRecursionLimit is in
the stable ABI. It should be removed therefrom when possible.
*/
PyAPI_DATA(int) _Py_CheckRecursionLimit;
#ifdef USE_STACKCHECK
/* With USE_STACKCHECK, trigger stack checks in _Py_CheckRecursiveCall()
on every 64th call to Py_EnterRecursiveCall.
*/
# define _Py_MakeRecCheck(x) \
(++(x) > _Py_CheckRecursionLimit || \
++(PyThreadState_GET()->stackcheck_counter) > 64)
#else
# define _Py_MakeRecCheck(x) (++(x) > _Py_CheckRecursionLimit)
#endif
/* Compute the "lower-water mark" for a recursion limit. When
* Py_LeaveRecursiveCall() is called with a recursion depth below this mark,
* the overflowed flag is reset to 0. */
#define _Py_RecursionLimitLowerWaterMark(limit) \
(((limit) > 200) \
? ((limit) - 50) \
: (3 * ((limit) >> 2)))
#define _Py_MakeEndRecCheck(x) \
(--(x) < _Py_RecursionLimitLowerWaterMark(_Py_CheckRecursionLimit))
#define Py_ALLOW_RECURSION \
do { unsigned char _old = PyThreadState_GET()->recursion_critical;\
PyThreadState_GET()->recursion_critical = 1;
#define Py_END_ALLOW_RECURSION \
PyThreadState_GET()->recursion_critical = _old; \
} while(0);
PyAPI_FUNC(const char *) PyEval_GetFuncName(PyObject *);
PyAPI_FUNC(const char *) PyEval_GetFuncDesc(PyObject *);
PyAPI_FUNC(PyObject *) PyEval_EvalFrame(struct _frame *);
PyAPI_FUNC(PyObject *) PyEval_EvalFrameEx(struct _frame *f, int exc);
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyEval_EvalFrameDefault(struct _frame *f, int exc);
#endif
/* Interface for threads.
A module that plans to do a blocking system call (or something else
that lasts a long time and doesn't touch Python data) can allow other
threads to run as follows:
...preparations here...
Py_BEGIN_ALLOW_THREADS
...blocking system call here...
Py_END_ALLOW_THREADS
...interpret result here...
The Py_BEGIN_ALLOW_THREADS/Py_END_ALLOW_THREADS pair expands to a
{}-surrounded block.
To leave the block in the middle (e.g., with return), you must insert
a line containing Py_BLOCK_THREADS before the return, e.g.
if (...premature_exit...) {
Py_BLOCK_THREADS
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
An alternative is:
Py_BLOCK_THREADS
if (...premature_exit...) {
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
Py_UNBLOCK_THREADS
For convenience, that the value of 'errno' is restored across
Py_END_ALLOW_THREADS and Py_BLOCK_THREADS.
WARNING: NEVER NEST CALLS TO Py_BEGIN_ALLOW_THREADS AND
Py_END_ALLOW_THREADS!!!
The function PyEval_InitThreads() should be called only from
init_thread() in "_threadmodule.c".
Note that not yet all candidates have been converted to use this
mechanism!
*/
PyAPI_FUNC(PyThreadState *) PyEval_SaveThread(void);
PyAPI_FUNC(void) PyEval_RestoreThread(PyThreadState *);
PyAPI_FUNC(int) PyEval_ThreadsInitialized(void);
PyAPI_FUNC(void) PyEval_InitThreads(void);
Py_DEPRECATED(3.2) PyAPI_FUNC(void) PyEval_AcquireLock(void);
/* Py_DEPRECATED(3.2) */ PyAPI_FUNC(void) PyEval_ReleaseLock(void);
PyAPI_FUNC(void) PyEval_AcquireThread(PyThreadState *tstate);
PyAPI_FUNC(void) PyEval_ReleaseThread(PyThreadState *tstate);
#ifndef Py_LIMITED_API
PyAPI_FUNC(void) _PyEval_SetSwitchInterval(unsigned long microseconds);
PyAPI_FUNC(unsigned long) _PyEval_GetSwitchInterval(void);
#endif
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_ssize_t) _PyEval_RequestCodeExtraIndex(freefunc);
#endif
#define Py_BEGIN_ALLOW_THREADS { \
PyThreadState *_save; \
_save = PyEval_SaveThread();
#define Py_BLOCK_THREADS PyEval_RestoreThread(_save);
#define Py_UNBLOCK_THREADS _save = PyEval_SaveThread();
#define Py_END_ALLOW_THREADS PyEval_RestoreThread(_save); \
}
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyEval_SliceIndex(PyObject *, Py_ssize_t *);
PyAPI_FUNC(int) _PyEval_SliceIndexNotNone(PyObject *, Py_ssize_t *);
#endif
/* Masks and values used by FORMAT_VALUE opcode. */
#define FVC_MASK 0x3
#define FVC_NONE 0x0
#define FVC_STR 0x1
#define FVC_REPR 0x2
#define FVC_ASCII 0x3
#define FVS_MASK 0x4
#define FVS_HAVE_SPEC 0x4
#ifdef __cplusplus
}
#endif
#endif /* !Py_CEVAL_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/classobject.h
================================================
/* Former class object interface -- now only bound methods are here */
/* Revealing some structures (not for general use) */
#ifndef Py_LIMITED_API
#ifndef Py_CLASSOBJECT_H
#define Py_CLASSOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
PyObject_HEAD
PyObject *im_func; /* The callable object implementing the method */
PyObject *im_self; /* The instance it is bound to */
PyObject *im_weakreflist; /* List of weak references */
vectorcallfunc vectorcall;
} PyMethodObject;
PyAPI_DATA(PyTypeObject) PyMethod_Type;
#define PyMethod_Check(op) ((op)->ob_type == &PyMethod_Type)
PyAPI_FUNC(PyObject *) PyMethod_New(PyObject *, PyObject *);
PyAPI_FUNC(PyObject *) PyMethod_Function(PyObject *);
PyAPI_FUNC(PyObject *) PyMethod_Self(PyObject *);
/* Macros for direct access to these values. Type checks are *not*
done, so use with care. */
#define PyMethod_GET_FUNCTION(meth) \
(((PyMethodObject *)meth) -> im_func)
#define PyMethod_GET_SELF(meth) \
(((PyMethodObject *)meth) -> im_self)
PyAPI_FUNC(int) PyMethod_ClearFreeList(void);
typedef struct {
PyObject_HEAD
PyObject *func;
} PyInstanceMethodObject;
PyAPI_DATA(PyTypeObject) PyInstanceMethod_Type;
#define PyInstanceMethod_Check(op) ((op)->ob_type == &PyInstanceMethod_Type)
PyAPI_FUNC(PyObject *) PyInstanceMethod_New(PyObject *);
PyAPI_FUNC(PyObject *) PyInstanceMethod_Function(PyObject *);
/* Macros for direct access to these values. Type checks are *not*
done, so use with care. */
#define PyInstanceMethod_GET_FUNCTION(meth) \
(((PyInstanceMethodObject *)meth) -> func)
#ifdef __cplusplus
}
#endif
#endif /* !Py_CLASSOBJECT_H */
#endif /* Py_LIMITED_API */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/code.h
================================================
/* Definitions for bytecode */
#ifndef Py_LIMITED_API
#ifndef Py_CODE_H
#define Py_CODE_H
#ifdef __cplusplus
extern "C" {
#endif
typedef uint16_t _Py_CODEUNIT;
#ifdef WORDS_BIGENDIAN
# define _Py_OPCODE(word) ((word) >> 8)
# define _Py_OPARG(word) ((word) & 255)
#else
# define _Py_OPCODE(word) ((word) & 255)
# define _Py_OPARG(word) ((word) >> 8)
#endif
typedef struct _PyOpcache _PyOpcache;
/* Bytecode object */
typedef struct {
PyObject_HEAD
int co_argcount; /* #arguments, except *args */
int co_posonlyargcount; /* #positional only arguments */
int co_kwonlyargcount; /* #keyword only arguments */
int co_nlocals; /* #local variables */
int co_stacksize; /* #entries needed for evaluation stack */
int co_flags; /* CO_..., see below */
int co_firstlineno; /* first source line number */
PyObject *co_code; /* instruction opcodes */
PyObject *co_consts; /* list (constants used) */
PyObject *co_names; /* list of strings (names used) */
PyObject *co_varnames; /* tuple of strings (local variable names) */
PyObject *co_freevars; /* tuple of strings (free variable names) */
PyObject *co_cellvars; /* tuple of strings (cell variable names) */
/* The rest aren't used in either hash or comparisons, except for co_name,
used in both. This is done to preserve the name and line number
for tracebacks and debuggers; otherwise, constant de-duplication
would collapse identical functions/lambdas defined on different lines.
*/
Py_ssize_t *co_cell2arg; /* Maps cell vars which are arguments. */
PyObject *co_filename; /* unicode (where it was loaded from) */
PyObject *co_name; /* unicode (name, for reference) */
PyObject *co_lnotab; /* string (encoding addr<->lineno mapping) See
Objects/lnotab_notes.txt for details. */
void *co_zombieframe; /* for optimization only (see frameobject.c) */
PyObject *co_weakreflist; /* to support weakrefs to code objects */
/* Scratch space for extra data relating to the code object.
Type is a void* to keep the format private in codeobject.c to force
people to go through the proper APIs. */
void *co_extra;
/* Per opcodes just-in-time cache
*
* To reduce cache size, we use indirect mapping from opcode index to
* cache object:
* cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1]
*/
// co_opcache_map is indexed by (next_instr - first_instr).
// * 0 means there is no cache for this opcode.
// * n > 0 means there is cache in co_opcache[n-1].
unsigned char *co_opcache_map;
_PyOpcache *co_opcache;
int co_opcache_flag; // used to determine when create a cache.
unsigned char co_opcache_size; // length of co_opcache.
} PyCodeObject;
/* Masks for co_flags above */
#define CO_OPTIMIZED 0x0001
#define CO_NEWLOCALS 0x0002
#define CO_VARARGS 0x0004
#define CO_VARKEYWORDS 0x0008
#define CO_NESTED 0x0010
#define CO_GENERATOR 0x0020
/* The CO_NOFREE flag is set if there are no free or cell variables.
This information is redundant, but it allows a single flag test
to determine whether there is any extra work to be done when the
call frame it setup.
*/
#define CO_NOFREE 0x0040
/* The CO_COROUTINE flag is set for coroutine functions (defined with
``async def`` keywords) */
#define CO_COROUTINE 0x0080
#define CO_ITERABLE_COROUTINE 0x0100
#define CO_ASYNC_GENERATOR 0x0200
/* These are no longer used. */
#if 0
#define CO_GENERATOR_ALLOWED 0x1000
#endif
#define CO_FUTURE_DIVISION 0x2000
#define CO_FUTURE_ABSOLUTE_IMPORT 0x4000 /* do absolute imports by default */
#define CO_FUTURE_WITH_STATEMENT 0x8000
#define CO_FUTURE_PRINT_FUNCTION 0x10000
#define CO_FUTURE_UNICODE_LITERALS 0x20000
#define CO_FUTURE_BARRY_AS_BDFL 0x40000
#define CO_FUTURE_GENERATOR_STOP 0x80000
#define CO_FUTURE_ANNOTATIONS 0x100000
/* This value is found in the co_cell2arg array when the associated cell
variable does not correspond to an argument. */
#define CO_CELL_NOT_AN_ARG (-1)
/* This should be defined if a future statement modifies the syntax.
For example, when a keyword is added.
*/
#define PY_PARSER_REQUIRES_FUTURE_KEYWORD
#define CO_MAXBLOCKS 20 /* Max static block nesting within a function */
PyAPI_DATA(PyTypeObject) PyCode_Type;
#define PyCode_Check(op) (Py_TYPE(op) == &PyCode_Type)
#define PyCode_GetNumFree(op) (PyTuple_GET_SIZE((op)->co_freevars))
/* Public interface */
PyAPI_FUNC(PyCodeObject *) PyCode_New(
int, int, int, int, int, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, PyObject *,
PyObject *, PyObject *, int, PyObject *);
PyAPI_FUNC(PyCodeObject *) PyCode_NewWithPosOnlyArgs(
int, int, int, int, int, int, PyObject *, PyObject *,
PyObject *, PyObject *, PyObject *, PyObject *,
PyObject *, PyObject *, int, PyObject *);
/* same as struct above */
/* Creates a new empty code object with the specified source location. */
PyAPI_FUNC(PyCodeObject *)
PyCode_NewEmpty(const char *filename, const char *funcname, int firstlineno);
/* Return the line number associated with the specified bytecode index
in this code object. If you just need the line number of a frame,
use PyFrame_GetLineNumber() instead. */
PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int);
/* for internal use only */
typedef struct _addr_pair {
int ap_lower;
int ap_upper;
} PyAddrPair;
#ifndef Py_LIMITED_API
/* Update *bounds to describe the first and one-past-the-last instructions in the
same line as lasti. Return the number of that line.
*/
PyAPI_FUNC(int) _PyCode_CheckLineNumber(PyCodeObject* co,
int lasti, PyAddrPair *bounds);
/* Create a comparable key used to compare constants taking in account the
* object type. It is used to make sure types are not coerced (e.g., float and
* complex) _and_ to distinguish 0.0 from -0.0 e.g. on IEEE platforms
*
* Return (type(obj), obj, ...): a tuple with variable size (at least 2 items)
* depending on the type and the value. The type is the first item to not
* compare bytes and str which can raise a BytesWarning exception. */
PyAPI_FUNC(PyObject*) _PyCode_ConstantKey(PyObject *obj);
#endif
PyAPI_FUNC(PyObject*) PyCode_Optimize(PyObject *code, PyObject* consts,
PyObject *names, PyObject *lnotab);
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyCode_GetExtra(PyObject *code, Py_ssize_t index,
void **extra);
PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index,
void *extra);
#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_CODE_H */
#endif /* Py_LIMITED_API */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/codecs.h
================================================
#ifndef Py_CODECREGISTRY_H
#define Py_CODECREGISTRY_H
#ifdef __cplusplus
extern "C" {
#endif
/* ------------------------------------------------------------------------
Python Codec Registry and support functions
Written by Marc-Andre Lemburg (mal@lemburg.com).
Copyright (c) Corporation for National Research Initiatives.
------------------------------------------------------------------------ */
/* Register a new codec search function.
As side effect, this tries to load the encodings package, if not
yet done, to make sure that it is always first in the list of
search functions.
The search_function's refcount is incremented by this function. */
PyAPI_FUNC(int) PyCodec_Register(
PyObject *search_function
);
/* Codec registry lookup API.
Looks up the given encoding and returns a CodecInfo object with
function attributes which implement the different aspects of
processing the encoding.
The encoding string is looked up converted to all lower-case
characters. This makes encodings looked up through this mechanism
effectively case-insensitive.
If no codec is found, a KeyError is set and NULL returned.
As side effect, this tries to load the encodings package, if not
yet done. This is part of the lazy load strategy for the encodings
package.
*/
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) _PyCodec_Lookup(
const char *encoding
);
PyAPI_FUNC(int) _PyCodec_Forget(
const char *encoding
);
#endif
/* Codec registry encoding check API.
Returns 1/0 depending on whether there is a registered codec for
the given encoding.
*/
PyAPI_FUNC(int) PyCodec_KnownEncoding(
const char *encoding
);
/* Generic codec based encoding API.
object is passed through the encoder function found for the given
encoding using the error handling method defined by errors. errors
may be NULL to use the default method defined for the codec.
Raises a LookupError in case no encoder can be found.
*/
PyAPI_FUNC(PyObject *) PyCodec_Encode(
PyObject *object,
const char *encoding,
const char *errors
);
/* Generic codec based decoding API.
object is passed through the decoder function found for the given
encoding using the error handling method defined by errors. errors
may be NULL to use the default method defined for the codec.
Raises a LookupError in case no encoder can be found.
*/
PyAPI_FUNC(PyObject *) PyCodec_Decode(
PyObject *object,
const char *encoding,
const char *errors
);
#ifndef Py_LIMITED_API
/* Text codec specific encoding and decoding API.
Checks the encoding against a list of codecs which do not
implement a str<->bytes encoding before attempting the
operation.
Please note that these APIs are internal and should not
be used in Python C extensions.
XXX (ncoghlan): should we make these, or something like them, public
in Python 3.5+?
*/
PyAPI_FUNC(PyObject *) _PyCodec_LookupTextEncoding(
const char *encoding,
const char *alternate_command
);
PyAPI_FUNC(PyObject *) _PyCodec_EncodeText(
PyObject *object,
const char *encoding,
const char *errors
);
PyAPI_FUNC(PyObject *) _PyCodec_DecodeText(
PyObject *object,
const char *encoding,
const char *errors
);
/* These two aren't actually text encoding specific, but _io.TextIOWrapper
* is the only current API consumer.
*/
PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalDecoder(
PyObject *codec_info,
const char *errors
);
PyAPI_FUNC(PyObject *) _PyCodecInfo_GetIncrementalEncoder(
PyObject *codec_info,
const char *errors
);
#endif
/* --- Codec Lookup APIs --------------------------------------------------
All APIs return a codec object with incremented refcount and are
based on _PyCodec_Lookup(). The same comments w/r to the encoding
name also apply to these APIs.
*/
/* Get an encoder function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_Encoder(
const char *encoding
);
/* Get a decoder function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_Decoder(
const char *encoding
);
/* Get an IncrementalEncoder object for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder(
const char *encoding,
const char *errors
);
/* Get an IncrementalDecoder object function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder(
const char *encoding,
const char *errors
);
/* Get a StreamReader factory function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_StreamReader(
const char *encoding,
PyObject *stream,
const char *errors
);
/* Get a StreamWriter factory function for the given encoding. */
PyAPI_FUNC(PyObject *) PyCodec_StreamWriter(
const char *encoding,
PyObject *stream,
const char *errors
);
/* Unicode encoding error handling callback registry API */
/* Register the error handling callback function error under the given
name. This function will be called by the codec when it encounters
unencodable characters/undecodable bytes and doesn't know the
callback name, when name is specified as the error parameter
in the call to the encode/decode function.
Return 0 on success, -1 on error */
PyAPI_FUNC(int) PyCodec_RegisterError(const char *name, PyObject *error);
/* Lookup the error handling callback function registered under the given
name. As a special case NULL can be passed, in which case
the error handling callback for "strict" will be returned. */
PyAPI_FUNC(PyObject *) PyCodec_LookupError(const char *name);
/* raise exc as an exception */
PyAPI_FUNC(PyObject *) PyCodec_StrictErrors(PyObject *exc);
/* ignore the unicode error, skipping the faulty input */
PyAPI_FUNC(PyObject *) PyCodec_IgnoreErrors(PyObject *exc);
/* replace the unicode encode error with ? or U+FFFD */
PyAPI_FUNC(PyObject *) PyCodec_ReplaceErrors(PyObject *exc);
/* replace the unicode encode error with XML character references */
PyAPI_FUNC(PyObject *) PyCodec_XMLCharRefReplaceErrors(PyObject *exc);
/* replace the unicode encode error with backslash escapes (\x, \u and \U) */
PyAPI_FUNC(PyObject *) PyCodec_BackslashReplaceErrors(PyObject *exc);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* replace the unicode encode error with backslash escapes (\N, \x, \u and \U) */
PyAPI_FUNC(PyObject *) PyCodec_NameReplaceErrors(PyObject *exc);
#endif
#ifndef Py_LIMITED_API
PyAPI_DATA(const char *) Py_hexdigits;
#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_CODECREGISTRY_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/compile.h
================================================
#ifndef Py_COMPILE_H
#define Py_COMPILE_H
#ifndef Py_LIMITED_API
#include "code.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Public interface */
struct _node; /* Declare the existence of this type */
PyAPI_FUNC(PyCodeObject *) PyNode_Compile(struct _node *, const char *);
/* XXX (ncoghlan): Unprefixed type name in a public API! */
#define PyCF_MASK (CO_FUTURE_DIVISION | CO_FUTURE_ABSOLUTE_IMPORT | \
CO_FUTURE_WITH_STATEMENT | CO_FUTURE_PRINT_FUNCTION | \
CO_FUTURE_UNICODE_LITERALS | CO_FUTURE_BARRY_AS_BDFL | \
CO_FUTURE_GENERATOR_STOP | CO_FUTURE_ANNOTATIONS)
#define PyCF_MASK_OBSOLETE (CO_NESTED)
#define PyCF_SOURCE_IS_UTF8 0x0100
#define PyCF_DONT_IMPLY_DEDENT 0x0200
#define PyCF_ONLY_AST 0x0400
#define PyCF_IGNORE_COOKIE 0x0800
#define PyCF_TYPE_COMMENTS 0x1000
#define PyCF_ALLOW_TOP_LEVEL_AWAIT 0x2000
#ifndef Py_LIMITED_API
typedef struct {
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */
} PyCompilerFlags;
#define _PyCompilerFlags_INIT \
(PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
#endif
/* Future feature support */
typedef struct {
int ff_features; /* flags set by future statements */
int ff_lineno; /* line number of last future statement */
} PyFutureFeatures;
#define FUTURE_NESTED_SCOPES "nested_scopes"
#define FUTURE_GENERATORS "generators"
#define FUTURE_DIVISION "division"
#define FUTURE_ABSOLUTE_IMPORT "absolute_import"
#define FUTURE_WITH_STATEMENT "with_statement"
#define FUTURE_PRINT_FUNCTION "print_function"
#define FUTURE_UNICODE_LITERALS "unicode_literals"
#define FUTURE_BARRY_AS_BDFL "barry_as_FLUFL"
#define FUTURE_GENERATOR_STOP "generator_stop"
#define FUTURE_ANNOTATIONS "annotations"
struct _mod; /* Declare the existence of this type */
#define PyAST_Compile(mod, s, f, ar) PyAST_CompileEx(mod, s, f, -1, ar)
PyAPI_FUNC(PyCodeObject *) PyAST_CompileEx(
struct _mod *mod,
const char *filename, /* decoded from the filesystem encoding */
PyCompilerFlags *flags,
int optimize,
PyArena *arena);
PyAPI_FUNC(PyCodeObject *) PyAST_CompileObject(
struct _mod *mod,
PyObject *filename,
PyCompilerFlags *flags,
int optimize,
PyArena *arena);
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromAST(
struct _mod * mod,
const char *filename /* decoded from the filesystem encoding */
);
PyAPI_FUNC(PyFutureFeatures *) PyFuture_FromASTObject(
struct _mod * mod,
PyObject *filename
);
/* _Py_Mangle is defined in compile.c */
PyAPI_FUNC(PyObject*) _Py_Mangle(PyObject *p, PyObject *name);
#define PY_INVALID_STACK_EFFECT INT_MAX
PyAPI_FUNC(int) PyCompile_OpcodeStackEffect(int opcode, int oparg);
PyAPI_FUNC(int) PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump);
PyAPI_FUNC(int) _PyAST_Optimize(struct _mod *, PyArena *arena, int optimize);
#ifdef __cplusplus
}
#endif
#endif /* !Py_LIMITED_API */
/* These definitions must match corresponding definitions in graminit.h. */
#define Py_single_input 256
#define Py_file_input 257
#define Py_eval_input 258
#define Py_func_type_input 345
#endif /* !Py_COMPILE_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/complexobject.h
================================================
/* Complex number structure */
#ifndef Py_COMPLEXOBJECT_H
#define Py_COMPLEXOBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef Py_LIMITED_API
typedef struct {
double real;
double imag;
} Py_complex;
/* Operations on complex numbers from complexmodule.c */
PyAPI_FUNC(Py_complex) _Py_c_sum(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_diff(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_neg(Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_prod(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_quot(Py_complex, Py_complex);
PyAPI_FUNC(Py_complex) _Py_c_pow(Py_complex, Py_complex);
PyAPI_FUNC(double) _Py_c_abs(Py_complex);
#endif
/* Complex object interface */
/*
PyComplexObject represents a complex number with double-precision
real and imaginary parts.
*/
#ifndef Py_LIMITED_API
typedef struct {
PyObject_HEAD
Py_complex cval;
} PyComplexObject;
#endif
PyAPI_DATA(PyTypeObject) PyComplex_Type;
#define PyComplex_Check(op) PyObject_TypeCheck(op, &PyComplex_Type)
#define PyComplex_CheckExact(op) (Py_TYPE(op) == &PyComplex_Type)
#ifndef Py_LIMITED_API
PyAPI_FUNC(PyObject *) PyComplex_FromCComplex(Py_complex);
#endif
PyAPI_FUNC(PyObject *) PyComplex_FromDoubles(double real, double imag);
PyAPI_FUNC(double) PyComplex_RealAsDouble(PyObject *op);
PyAPI_FUNC(double) PyComplex_ImagAsDouble(PyObject *op);
#ifndef Py_LIMITED_API
PyAPI_FUNC(Py_complex) PyComplex_AsCComplex(PyObject *op);
#endif
/* Format the object based on the format_spec, as defined in PEP 3101
(Advanced String Formatting). */
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) _PyComplex_FormatAdvancedWriter(
_PyUnicodeWriter *writer,
PyObject *obj,
PyObject *format_spec,
Py_ssize_t start,
Py_ssize_t end);
#endif
#ifdef __cplusplus
}
#endif
#endif /* !Py_COMPLEXOBJECT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/context.h
================================================
#ifndef Py_CONTEXT_H
#define Py_CONTEXT_H
#ifdef __cplusplus
extern "C" {
#endif
#ifndef Py_LIMITED_API
PyAPI_DATA(PyTypeObject) PyContext_Type;
typedef struct _pycontextobject PyContext;
PyAPI_DATA(PyTypeObject) PyContextVar_Type;
typedef struct _pycontextvarobject PyContextVar;
PyAPI_DATA(PyTypeObject) PyContextToken_Type;
typedef struct _pycontexttokenobject PyContextToken;
#define PyContext_CheckExact(o) (Py_TYPE(o) == &PyContext_Type)
#define PyContextVar_CheckExact(o) (Py_TYPE(o) == &PyContextVar_Type)
#define PyContextToken_CheckExact(o) (Py_TYPE(o) == &PyContextToken_Type)
PyAPI_FUNC(PyObject *) PyContext_New(void);
PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *);
PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void);
PyAPI_FUNC(int) PyContext_Enter(PyObject *);
PyAPI_FUNC(int) PyContext_Exit(PyObject *);
/* Create a new context variable.
default_value can be NULL.
*/
PyAPI_FUNC(PyObject *) PyContextVar_New(
const char *name, PyObject *default_value);
/* Get a value for the variable.
Returns -1 if an error occurred during lookup.
Returns 0 if value either was or was not found.
If value was found, *value will point to it.
If not, it will point to:
- default_value, if not NULL;
- the default value of "var", if not NULL;
- NULL.
'*value' will be a new ref, if not NULL.
*/
PyAPI_FUNC(int) PyContextVar_Get(
PyObject *var, PyObject *default_value, PyObject **value);
/* Set a new value for the variable.
Returns NULL if an error occurs.
*/
PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value);
/* Reset a variable to its previous value.
Returns 0 on success, -1 on error.
*/
PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token);
/* This method is exposed only for CPython tests. Don not use it. */
PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void);
PyAPI_FUNC(int) PyContext_ClearFreeList(void);
#endif /* !Py_LIMITED_API */
#ifdef __cplusplus
}
#endif
#endif /* !Py_CONTEXT_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h
================================================
#ifndef Py_CPYTHON_ABSTRACTOBJECT_H
# error "this header file must not be included directly"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* === Object Protocol ================================================== */
#ifdef PY_SSIZE_T_CLEAN
# define _PyObject_CallMethodId _PyObject_CallMethodId_SizeT
#endif
/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple)
format to a Python dictionary ("kwargs" dict).
The type of kwnames keys is not checked. The final function getting
arguments is responsible to check if all keys are strings, for example using
PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments().
Duplicate keys are merged using the last value. If duplicate keys must raise
an exception, the caller is responsible to implement an explicit keys on
kwnames. */
PyAPI_FUNC(PyObject *) _PyStack_AsDict(
PyObject *const *values,
PyObject *kwnames);
/* Convert (args, nargs, kwargs: dict) into a (stack, nargs, kwnames: tuple).
Return 0 on success, raise an exception and return -1 on error.
Write the new stack into *p_stack. If *p_stack is differen than args, it
must be released by PyMem_Free().
The stack uses borrowed references.
The type of keyword keys is not checked, these checks should be done
later (ex: _PyArg_ParseStackAndKeywords). */
PyAPI_FUNC(int) _PyStack_UnpackDict(
PyObject *const *args,
Py_ssize_t nargs,
PyObject *kwargs,
PyObject *const **p_stack,
PyObject **p_kwnames);
/* Suggested size (number of positional arguments) for arrays of PyObject*
allocated on a C stack to avoid allocating memory on the heap memory. Such
array is used to pass positional arguments to call functions of the
_PyObject_Vectorcall() family.
The size is chosen to not abuse the C stack and so limit the risk of stack
overflow. The size is also chosen to allow using the small stack for most
function calls of the Python standard library. On 64-bit CPU, it allocates
40 bytes on the stack. */
#define _PY_FASTCALL_SMALL_STACK 5
PyAPI_FUNC(PyObject *) _Py_CheckFunctionResult(PyObject *callable,
PyObject *result,
const char *where);
/* === Vectorcall protocol (PEP 590) ============================= */
/* Call callable using tp_call. Arguments are like _PyObject_Vectorcall()
or _PyObject_FastCallDict() (both forms are supported),
except that nargs is plainly the number of arguments without flags. */
PyAPI_FUNC(PyObject *) _PyObject_MakeTpCall(
PyObject *callable,
PyObject *const *args, Py_ssize_t nargs,
PyObject *keywords);
#define PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1))
static inline Py_ssize_t
PyVectorcall_NARGS(size_t n)
{
return n & ~PY_VECTORCALL_ARGUMENTS_OFFSET;
}
static inline vectorcallfunc
_PyVectorcall_Function(PyObject *callable)
{
PyTypeObject *tp = Py_TYPE(callable);
Py_ssize_t offset = tp->tp_vectorcall_offset;
vectorcallfunc *ptr;
if (!PyType_HasFeature(tp, _Py_TPFLAGS_HAVE_VECTORCALL)) {
return NULL;
}
assert(PyCallable_Check(callable));
assert(offset > 0);
ptr = (vectorcallfunc*)(((char *)callable) + offset);
return *ptr;
}
/* Call the callable object 'callable' with the "vectorcall" calling
convention.
args is a C array for positional arguments.
nargsf is the number of positional arguments plus optionally the flag
PY_VECTORCALL_ARGUMENTS_OFFSET which means that the caller is allowed to
modify args[-1].
kwnames is a tuple of keyword names. The values of the keyword arguments
are stored in "args" after the positional arguments (note that the number
of keyword arguments does not change nargsf). kwnames can also be NULL if
there are no keyword arguments.
keywords must only contains str strings (no subclass), and all keys must
be unique.
Return the result on success. Raise an exception and return NULL on
error. */
static inline PyObject *
_PyObject_Vectorcall(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwnames)
{
PyObject *res;
vectorcallfunc func;
assert(kwnames == NULL || PyTuple_Check(kwnames));
assert(args != NULL || PyVectorcall_NARGS(nargsf) == 0);
func = _PyVectorcall_Function(callable);
if (func == NULL) {
Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
return _PyObject_MakeTpCall(callable, args, nargs, kwnames);
}
res = func(callable, args, nargsf, kwnames);
return _Py_CheckFunctionResult(callable, res, NULL);
}
/* Same as _PyObject_Vectorcall except that keyword arguments are passed as
dict, which may be NULL if there are no keyword arguments. */
PyAPI_FUNC(PyObject *) _PyObject_FastCallDict(
PyObject *callable,
PyObject *const *args,
size_t nargsf,
PyObject *kwargs);
/* Call "callable" (which must support vectorcall) with positional arguments
"tuple" and keyword arguments "dict". "dict" may also be NULL */
PyAPI_FUNC(PyObject *) PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *dict);
/* Same as _PyObject_Vectorcall except without keyword arguments */
static inline PyObject *
_PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
{
return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
}
/* Call a callable without any arguments */
static inline PyObject *
_PyObject_CallNoArg(PyObject *func) {
return _PyObject_Vectorcall(func, NULL, 0, NULL);
}
PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
PyObject *callable,
PyObject *obj,
PyObject *args,
PyObject *kwargs);
PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
PyObject *callable,
PyObject *obj,
PyObject *const *args,
Py_ssize_t nargs);
/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
as the method name. */
PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
_Py_Identifier *name,
const char *format, ...);
PyAPI_FUNC(PyObject *) _PyObject_CallMethodId_SizeT(PyObject *obj,
_Py_Identifier *name,
const char *format,
...);
PyAPI_FUNC(PyObject *) _PyObject_CallMethodIdObjArgs(
PyObject *obj,
struct _Py_Identifier *name,
...);
PyAPI_FUNC(int) _PyObject_HasLen(PyObject *o);
/* Guess the size of object 'o' using len(o) or o.__length_hint__().
If neither of those return a non-negative value, then return the default
value. If one of the calls fails, this function returns -1. */
PyAPI_FUNC(Py_ssize_t) PyObject_LengthHint(PyObject *o, Py_ssize_t);
/* === New Buffer API ============================================ */
/* Return 1 if the getbuffer function is available, otherwise return 0. */
#define PyObject_CheckBuffer(obj) \
(((obj)->ob_type->tp_as_buffer != NULL) && \
((obj)->ob_type->tp_as_buffer->bf_getbuffer != NULL))
/* This is a C-API version of the getbuffer function call. It checks
to make sure object has the required function pointer and issues the
call.
Returns -1 and raises an error on failure and returns 0 on success. */
PyAPI_FUNC(int) PyObject_GetBuffer(PyObject *obj, Py_buffer *view,
int flags);
/* Get the memory area pointed to by the indices for the buffer given.
Note that view->ndim is the assumed size of indices. */
PyAPI_FUNC(void *) PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices);
/* Return the implied itemsize of the data-format area from a
struct-style description. */
PyAPI_FUNC(int) PyBuffer_SizeFromFormat(const char *);
/* Implementation in memoryobject.c */
PyAPI_FUNC(int) PyBuffer_ToContiguous(void *buf, Py_buffer *view,
Py_ssize_t len, char order);
PyAPI_FUNC(int) PyBuffer_FromContiguous(Py_buffer *view, void *buf,
Py_ssize_t len, char order);
/* Copy len bytes of data from the contiguous chunk of memory
pointed to by buf into the buffer exported by obj. Return
0 on success and return -1 and raise a PyBuffer_Error on
error (i.e. the object does not have a buffer interface or
it is not working).
If fort is 'F', then if the object is multi-dimensional,
then the data will be copied into the array in
Fortran-style (first dimension varies the fastest). If
fort is 'C', then the data will be copied into the array
in C-style (last dimension varies the fastest). If fort
is 'A', then it does not matter and the copy will be made
in whatever way is more efficient. */
PyAPI_FUNC(int) PyObject_CopyData(PyObject *dest, PyObject *src);
/* Copy the data from the src buffer to the buffer of destination. */
PyAPI_FUNC(int) PyBuffer_IsContiguous(const Py_buffer *view, char fort);
/*Fill the strides array with byte-strides of a contiguous
(Fortran-style if fort is 'F' or C-style otherwise)
array of the given shape with the given number of bytes
per element. */
PyAPI_FUNC(void) PyBuffer_FillContiguousStrides(int ndims,
Py_ssize_t *shape,
Py_ssize_t *strides,
int itemsize,
char fort);
/* Fills in a buffer-info structure correctly for an exporter
that can only share a contiguous chunk of memory of
"unsigned bytes" of the given length.
Returns 0 on success and -1 (with raising an error) on error. */
PyAPI_FUNC(int) PyBuffer_FillInfo(Py_buffer *view, PyObject *o, void *buf,
Py_ssize_t len, int readonly,
int flags);
/* Releases a Py_buffer obtained from getbuffer ParseTuple's "s*". */
PyAPI_FUNC(void) PyBuffer_Release(Py_buffer *view);
/* ==== Iterators ================================================ */
#define PyIter_Check(obj) \
((obj)->ob_type->tp_iternext != NULL && \
(obj)->ob_type->tp_iternext != &_PyObject_NextNotImplemented)
/* === Number Protocol ================================================== */
#define PyIndex_Check(obj) \
((obj)->ob_type->tp_as_number != NULL && \
(obj)->ob_type->tp_as_number->nb_index != NULL)
/* === Sequence protocol ================================================ */
/* Assume tp_as_sequence and sq_item exist and that 'i' does not
need to be corrected for a negative index. */
#define PySequence_ITEM(o, i)\
( Py_TYPE(o)->tp_as_sequence->sq_item(o, i) )
#define PY_ITERSEARCH_COUNT 1
#define PY_ITERSEARCH_INDEX 2
#define PY_ITERSEARCH_CONTAINS 3
/* Iterate over seq.
Result depends on the operation:
PY_ITERSEARCH_COUNT: return # of times obj appears in seq; -1 if
error.
PY_ITERSEARCH_INDEX: return 0-based index of first occurrence of
obj in seq; set ValueError and return -1 if none found;
also return -1 on error.
PY_ITERSEARCH_CONTAINS: return 1 if obj in seq, else 0; -1 on
error. */
PyAPI_FUNC(Py_ssize_t) _PySequence_IterSearch(PyObject *seq,
PyObject *obj, int operation);
/* === Mapping protocol ================================================= */
PyAPI_FUNC(int) _PyObject_RealIsInstance(PyObject *inst, PyObject *cls);
PyAPI_FUNC(int) _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls);
PyAPI_FUNC(char *const *) _PySequence_BytesToCharpArray(PyObject* self);
PyAPI_FUNC(void) _Py_FreeCharPArray(char *const array[]);
/* For internal use by buffer API functions */
PyAPI_FUNC(void) _Py_add_one_to_index_F(int nd, Py_ssize_t *index,
const Py_ssize_t *shape);
PyAPI_FUNC(void) _Py_add_one_to_index_C(int nd, Py_ssize_t *index,
const Py_ssize_t *shape);
/* Convert Python int to Py_ssize_t. Do nothing if the argument is None. */
PyAPI_FUNC(int) _Py_convert_optional_to_ssize_t(PyObject *, void *);
#ifdef __cplusplus
}
#endif
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h
================================================
#ifndef Py_CPYTHON_DICTOBJECT_H
# error "this header file must not be included directly"
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _dictkeysobject PyDictKeysObject;
/* The ma_values pointer is NULL for a combined table
* or points to an array of PyObject* for a split table
*/
typedef struct {
PyObject_HEAD
/* Number of items in the dictionary */
Py_ssize_t ma_used;
/* Dictionary version: globally unique, value change each time
the dictionary is modified */
uint64_t ma_version_tag;
PyDictKeysObject *ma_keys;
/* If ma_values is NULL, the table is "combined": keys and values
are stored in ma_keys.
If ma_values is not NULL, the table is splitted:
keys are stored in ma_keys and values are stored in ma_values */
PyObject **ma_values;
} PyDictObject;
PyAPI_FUNC(PyObject *) _PyDict_GetItem_KnownHash(PyObject *mp, PyObject *key,
Py_hash_t hash);
PyAPI_FUNC(PyObject *) _PyDict_GetItemIdWithError(PyObject *dp,
struct _Py_Identifier *key);
PyAPI_FUNC(PyObject *) _PyDict_GetItemStringWithError(PyObject *, const char *);
PyAPI_FUNC(PyObject *) PyDict_SetDefault(
PyObject *mp, PyObject *key, PyObject *defaultobj);
PyAPI_FUNC(int) _PyDict_SetItem_KnownHash(PyObject *mp, PyObject *key,
PyObject *item, Py_hash_t hash);
PyAPI_FUNC(int) _PyDict_DelItem_KnownHash(PyObject *mp, PyObject *key,
Py_hash_t hash);
PyAPI_FUNC(int) _PyDict_DelItemIf(PyObject *mp, PyObject *key,
int (*predicate)(PyObject *value));
PyDictKeysObject *_PyDict_NewKeysForClass(void);
PyAPI_FUNC(PyObject *) PyObject_GenericGetDict(PyObject *, void *);
PyAPI_FUNC(int) _PyDict_Next(
PyObject *mp, Py_ssize_t *pos, PyObject **key, PyObject **value, Py_hash_t *hash);
/* Get the number of items of a dictionary. */
#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),((PyDictObject *)mp)->ma_used)
PyAPI_FUNC(int) _PyDict_Contains(PyObject *mp, PyObject *key, Py_hash_t hash);
PyAPI_FUNC(PyObject *) _PyDict_NewPresized(Py_ssize_t minused);
PyAPI_FUNC(void) _PyDict_MaybeUntrack(PyObject *mp);
PyAPI_FUNC(int) _PyDict_HasOnlyStringKeys(PyObject *mp);
Py_ssize_t _PyDict_KeysSize(PyDictKeysObject *keys);
PyAPI_FUNC(Py_ssize_t) _PyDict_SizeOf(PyDictObject *);
PyAPI_FUNC(PyObject *) _PyDict_Pop(PyObject *, PyObject *, PyObject *);
PyObject *_PyDict_Pop_KnownHash(PyObject *, PyObject *, Py_hash_t, PyObject *);
PyObject *_PyDict_FromKeys(PyObject *, PyObject *, PyObject *);
#define _PyDict_HasSplitTable(d) ((d)->ma_values != NULL)
PyAPI_FUNC(int) PyDict_ClearFreeList(void);
/* Like PyDict_Merge, but override can be 0, 1 or 2. If override is 0,
the first occurrence of a key wins, if override is 1, the last occurrence
of a key wins, if override is 2, a KeyError with conflicting key as
argument is raised.
*/
PyAPI_FUNC(int) _PyDict_MergeEx(PyObject *mp, PyObject *other, int override);
PyAPI_FUNC(PyObject *) _PyDict_GetItemId(PyObject *dp, struct _Py_Identifier *key);
PyAPI_FUNC(int) _PyDict_SetItemId(PyObject *dp, struct _Py_Identifier *key, PyObject *item);
PyAPI_FUNC(int) _PyDict_DelItemId(PyObject *mp, struct _Py_Identifier *key);
PyAPI_FUNC(void) _PyDict_DebugMallocStats(FILE *out);
int _PyObjectDict_SetItem(PyTypeObject *tp, PyObject **dictptr, PyObject *name, PyObject *value);
PyObject *_PyDict_LoadGlobal(PyDictObject *, PyDictObject *, PyObject *);
/* _PyDictView */
typedef struct {
PyObject_HEAD
PyDictObject *dv_dict;
} _PyDictViewObject;
PyAPI_FUNC(PyObject *) _PyDictView_New(PyObject *, PyTypeObject *);
PyAPI_FUNC(PyObject *) _PyDictView_Intersect(PyObject* self, PyObject *other);
#ifdef __cplusplus
}
#endif
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h
================================================
#ifndef Py_CPYTHON_FILEOBJECT_H
# error "this header file must not be included directly"
#endif
#ifdef __cplusplus
extern "C" {
#endif
PyAPI_FUNC(char *) Py_UniversalNewlineFgets(char *, int, FILE*, PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
PyAPI_DATA(const char *) Py_FileSystemDefaultEncodeErrors;
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
PyAPI_DATA(int) Py_UTF8Mode;
#endif
/* The std printer acts as a preliminary sys.stderr until the new io
infrastructure is in place. */
PyAPI_FUNC(PyObject *) PyFile_NewStdPrinter(int);
PyAPI_DATA(PyTypeObject) PyStdPrinter_Type;
typedef PyObject * (*Py_OpenCodeHookFunction)(PyObject *, void *);
PyAPI_FUNC(PyObject *) PyFile_OpenCode(const char *utf8path);
PyAPI_FUNC(PyObject *) PyFile_OpenCodeObject(PyObject *path);
PyAPI_FUNC(int) PyFile_SetOpenCodeHook(Py_OpenCodeHookFunction hook, void *userData);
#ifdef __cplusplus
}
#endif
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h
================================================
#ifndef Py_PYCORECONFIG_H
#define Py_PYCORECONFIG_H
#ifndef Py_LIMITED_API
#ifdef __cplusplus
extern "C" {
#endif
/* --- PyStatus ----------------------------------------------- */
typedef struct {
enum {
_PyStatus_TYPE_OK=0,
_PyStatus_TYPE_ERROR=1,
_PyStatus_TYPE_EXIT=2
} _type;
const char *func;
const char *err_msg;
int exitcode;
} PyStatus;
PyAPI_FUNC(PyStatus) PyStatus_Ok(void);
PyAPI_FUNC(PyStatus) PyStatus_Error(const char *err_msg);
PyAPI_FUNC(PyStatus) PyStatus_NoMemory(void);
PyAPI_FUNC(PyStatus) PyStatus_Exit(int exitcode);
PyAPI_FUNC(int) PyStatus_IsError(PyStatus err);
PyAPI_FUNC(int) PyStatus_IsExit(PyStatus err);
PyAPI_FUNC(int) PyStatus_Exception(PyStatus err);
/* --- PyWideStringList ------------------------------------------------ */
typedef struct {
/* If length is greater than zero, items must be non-NULL
and all items strings must be non-NULL */
Py_ssize_t length;
wchar_t **items;
} PyWideStringList;
PyAPI_FUNC(PyStatus) PyWideStringList_Append(PyWideStringList *list,
const wchar_t *item);
PyAPI_FUNC(PyStatus) PyWideStringList_Insert(PyWideStringList *list,
Py_ssize_t index,
const wchar_t *item);
/* --- PyPreConfig ----------------------------------------------- */
typedef struct {
int _config_init; /* _PyConfigInitEnum value */
/* Parse Py_PreInitializeFromBytesArgs() arguments?
See PyConfig.parse_argv */
int parse_argv;
/* If greater than 0, enable isolated mode: sys.path contains
neither the script's directory nor the user's site-packages directory.
Set to 1 by the -I command line option. If set to -1 (default), inherit
Py_IsolatedFlag value. */
int isolated;
/* If greater than 0: use environment variables.
Set to 0 by -E command line option. If set to -1 (default), it is
set to !Py_IgnoreEnvironmentFlag. */
int use_environment;
/* Set the LC_CTYPE locale to the user preferred locale? If equals to 0,
set coerce_c_locale and coerce_c_locale_warn to 0. */
int configure_locale;
/* Coerce the LC_CTYPE locale if it's equal to "C"? (PEP 538)
Set to 0 by PYTHONCOERCECLOCALE=0. Set to 1 by PYTHONCOERCECLOCALE=1.
Set to 2 if the user preferred LC_CTYPE locale is "C".
If it is equal to 1, LC_CTYPE locale is read to decide if it should be
coerced or not (ex: PYTHONCOERCECLOCALE=1). Internally, it is set to 2
if the LC_CTYPE locale must be coerced.
Disable by default (set to 0). Set it to -1 to let Python decide if it
should be enabled or not. */
int coerce_c_locale;
/* Emit a warning if the LC_CTYPE locale is coerced?
Set to 1 by PYTHONCOERCECLOCALE=warn.
Disable by default (set to 0). Set it to -1 to let Python decide if it
should be enabled or not. */
int coerce_c_locale_warn;
#ifdef MS_WINDOWS
/* If greater than 1, use the "mbcs" encoding instead of the UTF-8
encoding for the filesystem encoding.
Set to 1 if the PYTHONLEGACYWINDOWSFSENCODING environment variable is
set to a non-empty string. If set to -1 (default), inherit
Py_LegacyWindowsFSEncodingFlag value.
See PEP 529 for more details. */
int legacy_windows_fs_encoding;
#endif
/* Enable UTF-8 mode? (PEP 540)
Disabled by default (equals to 0).
Set to 1 by "-X utf8" and "-X utf8=1" command line options.
Set to 1 by PYTHONUTF8=1 environment variable.
Set to 0 by "-X utf8=0" and PYTHONUTF8=0.
If equals to -1, it is set to 1 if the LC_CTYPE locale is "C" or
"POSIX", otherwise it is set to 0. Inherit Py_UTF8Mode value value. */
int utf8_mode;
int dev_mode; /* Development mode. PYTHONDEVMODE, -X dev */
/* Memory allocator: PYTHONMALLOC env var.
See PyMemAllocatorName for valid values. */
int allocator;
} PyPreConfig;
PyAPI_FUNC(void) PyPreConfig_InitPythonConfig(PyPreConfig *config);
PyAPI_FUNC(void) PyPreConfig_InitIsolatedConfig(PyPreConfig *config);
/* --- PyConfig ---------------------------------------------- */
typedef struct {
int _config_init; /* _PyConfigInitEnum value */
int isolated; /* Isolated mode? see PyPreConfig.isolated */
int use_environment; /* Use environment variables? see PyPreConfig.use_environment */
int dev_mode; /* Development mode? See PyPreConfig.dev_mode */
/* Install signal handlers? Yes by default. */
int install_signal_handlers;
int use_hash_seed; /* PYTHONHASHSEED=x */
unsigned long hash_seed;
/* Enable faulthandler?
Set to 1 by -X faulthandler and PYTHONFAULTHANDLER. -1 means unset. */
int faulthandler;
/* Enable tracemalloc?
Set by -X tracemalloc=N and PYTHONTRACEMALLOC. -1 means unset */
int tracemalloc;
int import_time; /* PYTHONPROFILEIMPORTTIME, -X importtime */
int show_ref_count; /* -X showrefcount */
int show_alloc_count; /* -X showalloccount */
int dump_refs; /* PYTHONDUMPREFS */
int malloc_stats; /* PYTHONMALLOCSTATS */
/* Python filesystem encoding and error handler:
sys.getfilesystemencoding() and sys.getfilesystemencodeerrors().
Default encoding and error handler:
* if Py_SetStandardStreamEncoding() has been called: they have the
highest priority;
* PYTHONIOENCODING environment variable;
* The UTF-8 Mode uses UTF-8/surrogateescape;
* If Python forces the usage of the ASCII encoding (ex: C locale
or POSIX locale on FreeBSD or HP-UX), use ASCII/surrogateescape;
* locale encoding: ANSI code page on Windows, UTF-8 on Android and
VxWorks, LC_CTYPE locale encoding on other platforms;
* On Windows, "surrogateescape" error handler;
* "surrogateescape" error handler if the LC_CTYPE locale is "C" or "POSIX";
* "surrogateescape" error handler if the LC_CTYPE locale has been coerced
(PEP 538);
* "strict" error handler.
Supported error handlers: "strict", "surrogateescape" and
"surrogatepass". The surrogatepass error handler is only supported
if Py_DecodeLocale() and Py_EncodeLocale() use directly the UTF-8 codec;
it's only used on Windows.
initfsencoding() updates the encoding to the Python codec name.
For example, "ANSI_X3.4-1968" is replaced with "ascii".
On Windows, sys._enablelegacywindowsfsencoding() sets the
encoding/errors to mbcs/replace at runtime.
See Py_FileSystemDefaultEncoding and Py_FileSystemDefaultEncodeErrors.
*/
wchar_t *filesystem_encoding;
wchar_t *filesystem_errors;
wchar_t *pycache_prefix; /* PYTHONPYCACHEPREFIX, -X pycache_prefix=PATH */
int parse_argv; /* Parse argv command line arguments? */
/* Command line arguments (sys.argv).
Set parse_argv to 1 to parse argv as Python command line arguments
and then strip Python arguments from argv.
If argv is empty, an empty string is added to ensure that sys.argv
always exists and is never empty. */
PyWideStringList argv;
/* Program name:
- If Py_SetProgramName() was called, use its value.
- On macOS, use PYTHONEXECUTABLE environment variable if set.
- If WITH_NEXT_FRAMEWORK macro is defined, use __PYVENV_LAUNCHER__
environment variable is set.
- Use argv[0] if available and non-empty.
- Use "python" on Windows, or "python3 on other platforms. */
wchar_t *program_name;
PyWideStringList xoptions; /* Command line -X options */
/* Warnings options: lowest to highest priority. warnings.filters
is built in the reverse order (highest to lowest priority). */
PyWideStringList warnoptions;
/* If equal to zero, disable the import of the module site and the
site-dependent manipulations of sys.path that it entails. Also disable
these manipulations if site is explicitly imported later (call
site.main() if you want them to be triggered).
Set to 0 by the -S command line option. If set to -1 (default), it is
set to !Py_NoSiteFlag. */
int site_import;
/* Bytes warnings:
* If equal to 1, issue a warning when comparing bytes or bytearray with
str or bytes with int.
* If equal or greater to 2, issue an error.
Incremented by the -b command line option. If set to -1 (default), inherit
Py_BytesWarningFlag value. */
int bytes_warning;
/* If greater than 0, enable inspect: when a script is passed as first
argument or the -c option is used, enter interactive mode after
executing the script or the command, even when sys.stdin does not appear
to be a terminal.
Incremented by the -i command line option. Set to 1 if the PYTHONINSPECT
environment variable is non-empty. If set to -1 (default), inherit
Py_InspectFlag value. */
int inspect;
/* If greater than 0: enable the interactive mode (REPL).
Incremented by the -i command line option. If set to -1 (default),
inherit Py_InteractiveFlag value. */
int interactive;
/* Optimization level.
Incremented by the -O command line option. Set by the PYTHONOPTIMIZE
environment variable. If set to -1 (default), inherit Py_OptimizeFlag
value. */
int optimization_level;
/* If greater than 0, enable the debug mode: turn on parser debugging
output (for expert only, depending on compilation options).
Incremented by the -d command line option. Set by the PYTHONDEBUG
environment variable. If set to -1 (default), inherit Py_DebugFlag
value. */
int parser_debug;
/* If equal to 0, Python won't try to write ``.pyc`` files on the
import of source modules.
Set to 0 by the -B command line option and the PYTHONDONTWRITEBYTECODE
environment variable. If set to -1 (default), it is set to
!Py_DontWriteBytecodeFlag. */
int write_bytecode;
/* If greater than 0, enable the verbose mode: print a message each time a
module is initialized, showing the place (filename or built-in module)
from which it is loaded.
If greater or equal to 2, print a message for each file that is checked
for when searching for a module. Also provides information on module
cleanup at exit.
Incremented by the -v option. Set by the PYTHONVERBOSE environment
variable. If set to -1 (default), inherit Py_VerboseFlag value. */
int verbose;
/* If greater than 0, enable the quiet mode: Don't display the copyright
and version messages even in interactive mode.
Incremented by the -q option. If set to -1 (default), inherit
Py_QuietFlag value. */
int quiet;
/* If greater than 0, don't add the user site-packages directory to
sys.path.
Set to 0 by the -s and -I command line options , and the PYTHONNOUSERSITE
environment variable. If set to -1 (default), it is set to
!Py_NoUserSiteDirectory. */
int user_site_directory;
/* If non-zero, configure C standard steams (stdio, stdout,
stderr):
- Set O_BINARY mode on Windows.
- If buffered_stdio is equal to zero, make streams unbuffered.
Otherwise, enable streams buffering if interactive is non-zero. */
int configure_c_stdio;
/* If equal to 0, enable unbuffered mode: force the stdout and stderr
streams to be unbuffered.
Set to 0 by the -u option. Set by the PYTHONUNBUFFERED environment
variable.
If set to -1 (default), it is set to !Py_UnbufferedStdioFlag. */
int buffered_stdio;
/* Encoding of sys.stdin, sys.stdout and sys.stderr.
Value set from PYTHONIOENCODING environment variable and
Py_SetStandardStreamEncoding() function.
See also 'stdio_errors' attribute. */
wchar_t *stdio_encoding;
/* Error handler of sys.stdin and sys.stdout.
Value set from PYTHONIOENCODING environment variable and
Py_SetStandardStreamEncoding() function.
See also 'stdio_encoding' attribute. */
wchar_t *stdio_errors;
#ifdef MS_WINDOWS
/* If greater than zero, use io.FileIO instead of WindowsConsoleIO for sys
standard streams.
Set to 1 if the PYTHONLEGACYWINDOWSSTDIO environment variable is set to
a non-empty string. If set to -1 (default), inherit
Py_LegacyWindowsStdioFlag value.
See PEP 528 for more details. */
int legacy_windows_stdio;
#endif
/* Value of the --check-hash-based-pycs command line option:
- "default" means the 'check_source' flag in hash-based pycs
determines invalidation
- "always" causes the interpreter to hash the source file for
invalidation regardless of value of 'check_source' bit
- "never" causes the interpreter to always assume hash-based pycs are
valid
The default value is "default".
See PEP 552 "Deterministic pycs" for more details. */
wchar_t *check_hash_pycs_mode;
/* --- Path configuration inputs ------------ */
/* If greater than 0, suppress _PyPathConfig_Calculate() warnings on Unix.
The parameter has no effect on Windows.
If set to -1 (default), inherit !Py_FrozenFlag value. */
int pathconfig_warnings;
wchar_t *pythonpath_env; /* PYTHONPATH environment variable */
wchar_t *home; /* PYTHONHOME environment variable,
see also Py_SetPythonHome(). */
/* --- Path configuration outputs ----------- */
int module_search_paths_set; /* If non-zero, use module_search_paths */
PyWideStringList module_search_paths; /* sys.path paths. Computed if
module_search_paths_set is equal
to zero. */
wchar_t *executable; /* sys.executable */
wchar_t *base_executable; /* sys._base_executable */
wchar_t *prefix; /* sys.prefix */
wchar_t *base_prefix; /* sys.base_prefix */
wchar_t *exec_prefix; /* sys.exec_prefix */
wchar_t *base_exec_prefix; /* sys.base_exec_prefix */
/* --- Parameter only used by Py_Main() ---------- */
/* Skip the first line of the source ('run_filename' parameter), allowing use of non-Unix forms of
"#!cmd". This is intended for a DOS specific hack only.
Set by the -x command line option. */
int skip_source_first_line;
wchar_t *run_command; /* -c command line argument */
wchar_t *run_module; /* -m command line argument */
wchar_t *run_filename; /* Trailing command line argument without -c or -m */
/* --- Private fields ---------------------------- */
/* Install importlib? If set to 0, importlib is not initialized at all.
Needed by freeze_importlib. */
int _install_importlib;
/* If equal to 0, stop Python initialization before the "main" phase */
int _init_main;
} PyConfig;
PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
PyAPI_FUNC(void) PyConfig_InitIsolatedConfig(PyConfig *config);
PyAPI_FUNC(void) PyConfig_Clear(PyConfig *);
PyAPI_FUNC(PyStatus) PyConfig_SetString(
PyConfig *config,
wchar_t **config_str,
const wchar_t *str);
PyAPI_FUNC(PyStatus) PyConfig_SetBytesString(
PyConfig *config,
wchar_t **config_str,
const char *str);
PyAPI_FUNC(PyStatus) PyConfig_Read(PyConfig *config);
PyAPI_FUNC(PyStatus) PyConfig_SetBytesArgv(
PyConfig *config,
Py_ssize_t argc,
char * const *argv);
PyAPI_FUNC(PyStatus) PyConfig_SetArgv(PyConfig *config,
Py_ssize_t argc,
wchar_t * const *argv);
PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
PyWideStringList *list,
Py_ssize_t length, wchar_t **items);
#ifdef __cplusplus
}
#endif
#endif /* !Py_LIMITED_API */
#endif /* !Py_PYCORECONFIG_H */
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/interpreteridobject.h
================================================
#ifndef Py_CPYTHON_INTERPRETERIDOBJECT_H
# error "this header file must not be included directly"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/* Interpreter ID Object */
PyAPI_DATA(PyTypeObject) _PyInterpreterID_Type;
PyAPI_FUNC(PyObject *) _PyInterpreterID_New(int64_t);
PyAPI_FUNC(PyObject *) _PyInterpreterState_GetIDObject(PyInterpreterState *);
PyAPI_FUNC(PyInterpreterState *) _PyInterpreterID_LookUp(PyObject *);
#ifdef __cplusplus
}
#endif
================================================
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/object.h
================================================
#ifndef Py_CPYTHON_OBJECT_H
# error "this header file must not be included directly"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/********************* String Literals ****************************************/
/* This structure helps managing static strings. The basic usage goes like this:
Instead of doing
r = PyObject_CallMethod(o, "foo", "args", ...);
do
_Py_IDENTIFIER(foo);
...
r = _PyObject_CallMethodId(o, &PyId_foo, "args", ...);
PyId_foo is a static variable, either on block level or file level. On first
usage, the string "foo" is interned, and the structures are linked. On interpreter
shutdown, all strings are released (through _PyUnicode_ClearStaticStrings).
Alternatively, _Py_static_string allows choosing the variable name.
_PyUnicode_FromId returns a borrowed reference to the interned string.
_PyObject_{Get,Set,Has}AttrId are __getattr__ versions using _Py_Identifier*.
*/
typedef struct _Py_Identifier {
struct _Py_Identifier *next;
const char* string;
PyObject *object;
} _Py_Identifier;
#define _Py_static_string_init(value) { .next = NULL, .string = value, .object = NULL }
#define _Py_static_string(varname, value) static _Py_Identifier varname = _Py_static_string_init(value)
#define _Py_IDENTIFIER(varname) _Py_static_string(PyId_##varname, #varname)
/* buffer interface */
typedef struct bufferinfo {
void *buf;
PyObject *obj; /* owned reference */
Py_ssize_t len;
Py_ssize_t itemsize; /* This is Py_ssize_t so it can be
pointed to by strides in simple case.*/
int readonly;
int ndim;
char *format;
Py_ssize_t *shape;
Py_ssize_t *strides;
Py_ssize_t *suboffsets;
void *internal;
} Py_buffer;
typedef int (*getbufferproc)(PyObject *, Py_buffer *, int);
typedef void (*releasebufferproc)(PyObject *, Py_buffer *);
typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwnames);
/* Maximum number of dimensions */
#define PyBUF_MAX_NDIM 64
/* Flags for getting buffers */
#define PyBUF_SIMPLE 0
#define PyBUF_WRITABLE 0x0001
/* we used to include an E, backwards compatible alias */
#define PyBUF_WRITEABLE PyBUF_WRITABLE
#define PyBUF_FORMAT 0x0004
#define PyBUF_ND 0x0008
#define PyBUF_STRIDES (0x0010 | PyBUF_ND)
#define PyBUF_C_CONTIGUOUS (0x0020 | PyBUF_STRIDES)
#define PyBUF_F_CONTIGUOUS (0x0040 | PyBUF_STRIDES)
#define PyBUF_ANY_CONTIGUOUS (0x0080 | PyBUF_STRIDES)
#define PyBUF_INDIRECT (0x0100 | PyBUF_STRIDES)
#define PyBUF_CONTIG (PyBUF_ND | PyBUF_WRITABLE)
#define PyBUF_CONTIG_RO (PyBUF_ND)
#define PyBUF_STRIDED (PyBUF_STRIDES | PyBUF_WRITABLE)
#define PyBUF_STRIDED_RO (PyBUF_STRIDES)
#define PyBUF_RECORDS (PyBUF_STRIDES | PyBUF_WRITABLE | PyBUF_FORMAT)
#define PyBUF_RECORDS_RO (PyBUF_STRIDES | PyBUF_FORMAT)
#define PyBUF_FULL (PyBUF_INDIRECT | PyBUF_WRITABLE | PyBUF_FORMAT)
#define PyBUF_FULL_RO (PyBUF_INDIRECT | PyBUF_FORMAT)
#define PyBUF_READ 0x100
#define PyBUF_WRITE 0x200
/* End buffer interface */
typedef struct {
/* Number implementations must check *both*
arguments for proper type and implement the necessary conversions
in the slot functions themselves. */
binaryfunc nb_add;
binaryfunc nb_subtract;
binaryfunc nb_multiply;
binaryfunc nb_remainder;
binaryfunc nb_divmod;
ternaryfunc nb_power;
unaryfunc nb_negative;
unaryfunc nb_positive;
unaryfunc nb_absolute;
inquiry nb_bool;
unaryfunc nb_invert;
binaryfunc nb_lshift;
binaryfunc nb_rshift;
binaryfunc nb_and;
binaryfunc nb_xor;
binaryfunc nb_or;
unaryfunc nb_int;
void *nb_reserved; /* the slot formerly known as nb_long */
unaryfunc nb_float;
binaryfunc nb_inplace_add;
binaryfunc nb_inplace_subtract;
binaryfunc nb_inplace_multiply;
binaryfunc nb_inplace_remainder;
ternaryfunc nb_inplace_power;
binaryfunc nb_inplace_lshift;
binaryfunc nb_inplace_rshift;
binaryfunc nb_inplace_and;
binaryfunc nb_inplace_xor;
binaryfunc nb_inplace_or;
binaryfunc nb_floor_divide;
binaryfunc nb_true_divide;
binaryfunc nb_inplace_floor_divide;
binaryfunc nb_inplace_true_divide;
unaryfunc nb_index;
binaryfunc nb_matrix_multiply;
binaryfunc nb_inplace_matrix_multiply;
} PyNumberMethods;
typedef struct {
lenfunc sq_length;
binaryfunc sq_concat;
ssizeargfunc sq_repeat;
ssizeargfunc sq_item;
void *was_sq_slice;
ssizeobjargproc sq_ass_item;
void *was_sq_ass_slice;
objobjproc sq_contains;
binaryfunc sq_inplace_concat;
ssizeargfunc sq_inplace_repeat;
} PySequenceMethods;
typedef struct {
lenfunc mp_length;
binaryfunc mp_subscript;
objobjargproc mp_ass_subscript;
} PyMappingMethods;
typedef struct {
unaryfunc am_await;
unaryfunc am_aiter;
unaryfunc am_anext;
} PyAsyncMethods;
typedef struct {
getbufferproc bf_getbuffer;
releasebufferproc bf_releasebuffer;
} PyBufferProcs;
/* Allow printfunc in the tp_vectorcall_offset slot for
* backwards-compatibility */
typedef Py_ssize_t printfunc;
typedef struct _typeobject {
PyObject_VAR_HEAD
const char *tp_name; /* For printing, in format "<module>.<name>" */
Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */
/* Methods to implement standard operations */
destructor tp_dealloc;
Py_ssize_t tp_vectorcall_offset;
getattrfunc tp_getattr;
setattrfunc tp_setattr;
PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)
or tp_reserved (Python 3) */
reprfunc tp_repr;
/* Method suites for standard classes */
PyNumberMethods *tp_as_number;
PySequenceMethods *tp_as_sequence;
PyMappingMethods *tp_as_mapping;
/* More standard operations (here for binary compatibility) */
hashfunc tp_hash;
ternaryfunc tp_call;
reprfunc tp_str;
getattrofunc tp_getattro;
setattrofunc tp_setattro;
/* Functions to access object as input/output buffer */
PyBufferProcs *tp_as_buffer;
/* Flags to define presence of optional/expanded features */
unsigned long tp_flags;
const char *tp_doc; /* Documentation string */
/* Assigned meaning in release 2.0 */
/* call function for all accessible objects */
traverseproc tp_traverse;
/* delete references to contained objects */
inquiry tp_clear;
/* Assigned meaning in release 2.1 */
/* rich comparisons */
richcmpfunc tp_richcompare;
/* weak reference enabler */
Py_ssize_t tp_weaklistoffset;
/* Iterators */
getiterfunc tp_iter;
iternextfunc tp_iternext;
/* Attribute descriptor and subclassing stuff */
struct PyMethodDef *tp_methods;
struct PyMemberDef *tp_members;
struct PyGetSetDef *tp_getset;
struct _typeobject *tp_base;
PyObject *tp_dict;
descrgetfunc tp_descr_get;
descrsetfunc tp_descr_set;
Py_ssize_t tp_dictoffset;
initproc tp_init;
allocfunc tp_alloc;
newfunc tp_new;
freefunc tp_free; /* Low-level free-memory routine */
inquiry tp_is_gc; /* For PyObject_IS_GC */
PyObject *tp_bases;
PyObject *tp_mro; /* method resolution order */
PyObject *tp_cache;
PyObject *tp_subclasses;
PyObject *tp_weaklist;
destructor tp_del;
/* Type attribute cache version tag. Added in version 2.6 */
unsigned int tp_version_tag;
destructor tp_finalize;
vectorcallfunc tp_vectorcall;
/* bpo-37250: kept for backwards compatibility in CPython 3.8 only */
Py_DEPRECATED(3.8) int (*tp_print)(PyObject *, FILE *, int);
#ifdef COUNT_ALLOCS
/* these must be last and never explicitly initialized */
Py_ssize_t tp_allocs;
Py_ssize_t tp_frees;
Py_ssize_t tp_maxalloc;
struct _typeobject *tp_prev;
struct _typeobject *tp_next;
#endif
} PyTypeObject;
/* The *real* layout of a type object when allocated on the heap */
typedef struct _heaptypeobject {
/* Note: there's a dependency on the order of these members
in slotptr() in typeobject.c . */
PyTypeObject ht_type;
PyAsyncMethods as_async;
PyNumberMethods as_number;
PyMappingMethods as_mapping;
PySequenceMethods as_sequence; /* as_sequence comes after as_mapping,
gitextract_0pm91rqf/
├── .gitignore
├── PyApp/
│ ├── PyApp/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── PyApp-Bridging-Header.h
│ │ ├── ViewController.swift
│ │ ├── pybridge.c
│ │ ├── pybridge.h
│ │ └── pybridge.swift
│ └── PyApp.xcodeproj/
│ ├── project.pbxproj
│ └── project.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── README.md
├── docs/
│ └── references.md
└── python-for-ios/
└── dist/
├── lib/
│ ├── libcrypto.a
│ ├── libffi.a
│ ├── libpython3.a
│ └── libssl.a
└── root/
└── python3/
├── include/
│ └── python3.8/
│ ├── Python-ast.h
│ ├── Python.h
│ ├── abstract.h
│ ├── asdl.h
│ ├── ast.h
│ ├── bitset.h
│ ├── bltinmodule.h
│ ├── boolobject.h
│ ├── bytearrayobject.h
│ ├── bytes_methods.h
│ ├── bytesobject.h
│ ├── cellobject.h
│ ├── ceval.h
│ ├── classobject.h
│ ├── code.h
│ ├── codecs.h
│ ├── compile.h
│ ├── complexobject.h
│ ├── context.h
│ ├── cpython/
│ │ ├── abstract.h
│ │ ├── dictobject.h
│ │ ├── fileobject.h
│ │ ├── initconfig.h
│ │ ├── interpreteridobject.h
│ │ ├── object.h
│ │ ├── objimpl.h
│ │ ├── pyerrors.h
│ │ ├── pylifecycle.h
│ │ ├── pymem.h
│ │ ├── pystate.h
│ │ ├── sysmodule.h
│ │ ├── traceback.h
│ │ ├── tupleobject.h
│ │ └── unicodeobject.h
│ ├── datetime.h
│ ├── descrobject.h
│ ├── dictobject.h
│ ├── dtoa.h
│ ├── dynamic_annotations.h
│ ├── enumobject.h
│ ├── errcode.h
│ ├── eval.h
│ ├── fileobject.h
│ ├── fileutils.h
│ ├── floatobject.h
│ ├── frameobject.h
│ ├── funcobject.h
│ ├── genobject.h
│ ├── graminit.h
│ ├── grammar.h
│ ├── import.h
│ ├── internal/
│ │ ├── pycore_accu.h
│ │ ├── pycore_atomic.h
│ │ ├── pycore_ceval.h
│ │ ├── pycore_code.h
│ │ ├── pycore_condvar.h
│ │ ├── pycore_context.h
│ │ ├── pycore_fileutils.h
│ │ ├── pycore_getopt.h
│ │ ├── pycore_gil.h
│ │ ├── pycore_hamt.h
│ │ ├── pycore_initconfig.h
│ │ ├── pycore_object.h
│ │ ├── pycore_pathconfig.h
│ │ ├── pycore_pyerrors.h
│ │ ├── pycore_pyhash.h
│ │ ├── pycore_pylifecycle.h
│ │ ├── pycore_pymem.h
│ │ ├── pycore_pystate.h
│ │ ├── pycore_traceback.h
│ │ ├── pycore_tupleobject.h
│ │ └── pycore_warnings.h
│ ├── interpreteridobject.h
│ ├── intrcheck.h
│ ├── iterobject.h
│ ├── listobject.h
│ ├── longintrepr.h
│ ├── longobject.h
│ ├── marshal.h
│ ├── memoryobject.h
│ ├── methodobject.h
│ ├── modsupport.h
│ ├── moduleobject.h
│ ├── namespaceobject.h
│ ├── node.h
│ ├── object.h
│ ├── objimpl.h
│ ├── odictobject.h
│ ├── opcode.h
│ ├── osdefs.h
│ ├── osmodule.h
│ ├── parsetok.h
│ ├── patchlevel.h
│ ├── picklebufobject.h
│ ├── py_curses.h
│ ├── pyarena.h
│ ├── pycapsule.h
│ ├── pyconfig.h
│ ├── pyctype.h
│ ├── pydebug.h
│ ├── pydtrace.h
│ ├── pyerrors.h
│ ├── pyexpat.h
│ ├── pyfpe.h
│ ├── pyhash.h
│ ├── pylifecycle.h
│ ├── pymacconfig.h
│ ├── pymacro.h
│ ├── pymath.h
│ ├── pymem.h
│ ├── pyport.h
│ ├── pystate.h
│ ├── pystrcmp.h
│ ├── pystrhex.h
│ ├── pystrtod.h
│ ├── pythonrun.h
│ ├── pythread.h
│ ├── pytime.h
│ ├── rangeobject.h
│ ├── setobject.h
│ ├── sliceobject.h
│ ├── structmember.h
│ ├── structseq.h
│ ├── symtable.h
│ ├── sysmodule.h
│ ├── token.h
│ ├── traceback.h
│ ├── tracemalloc.h
│ ├── tupleobject.h
│ ├── typeslots.h
│ ├── ucnhash.h
│ ├── unicodeobject.h
│ ├── warnings.h
│ └── weakrefobject.h
└── lib/
├── bootstrap.py
└── python3.8/
├── config-3.8-darwin/
│ ├── Makefile
│ ├── Setup
│ ├── Setup.local
│ ├── config.c
│ └── python-config.py
└── site-packages/
├── README.txt
└── _sqlite3/
└── __init__.py
SYMBOL INDEX (454 symbols across 91 files)
FILE: PyApp/PyApp/pybridge.c
function python_start (line 7) | void python_start(const char* resourcePath)
function python_end (line 37) | void python_end()
FILE: python-for-ios/dist/root/python3/include/python3.8/Python-ast.h
type _mod (line 13) | struct _mod
type _stmt (line 15) | struct _stmt
type _expr (line 17) | struct _expr
type expr_context_ty (line 19) | typedef enum _expr_context { Load=1, Store=2, Del=3, AugLoad=4, AugStore=5,
type _slice (line 22) | struct _slice
type boolop_ty (line 24) | typedef enum _boolop { And=1, Or=2 } boolop_ty;
type operator_ty (line 26) | typedef enum _operator { Add=1, Sub=2, Mult=3, MatMult=4, Div=5, Mod=6, ...
type unaryop_ty (line 30) | typedef enum _unaryop { Invert=1, Not=2, UAdd=3, USub=4 } unaryop_ty;
type cmpop_ty (line 32) | typedef enum _cmpop { Eq=1, NotEq=2, Lt=3, LtE=4, Gt=5, GtE=6, Is=7, IsN...
type _comprehension (line 35) | struct _comprehension
type _excepthandler (line 37) | struct _excepthandler
type _arguments (line 39) | struct _arguments
type _arg (line 41) | struct _arg
type _keyword (line 43) | struct _keyword
type _alias (line 45) | struct _alias
type _withitem (line 47) | struct _withitem
type _type_ignore (line 49) | struct _type_ignore
type _mod_kind (line 52) | enum _mod_kind {Module_kind=1, Interactive_kind=2, Expression_kind=3,
type _mod (line 54) | struct _mod {
type _stmt_kind (line 82) | enum _stmt_kind {FunctionDef_kind=1, AsyncFunctionDef_kind=2, ClassDef_k...
type _stmt (line 90) | struct _stmt {
type _expr_kind (line 232) | enum _expr_kind {BoolOp_kind=1, NamedExpr_kind=2, BinOp_kind=3, UnaryOp_...
type _expr (line 240) | struct _expr {
type _slice_kind (line 383) | enum _slice_kind {Slice_kind=1, ExtSlice_kind=2, Index_kind=3}
type _slice (line 384) | struct _slice {
type _comprehension (line 404) | struct _comprehension {
type _excepthandler_kind (line 411) | enum _excepthandler_kind {ExceptHandler_kind=1}
type _excepthandler (line 412) | struct _excepthandler {
type _arguments (line 428) | struct _arguments {
type _arg (line 438) | struct _arg {
type _keyword (line 448) | struct _keyword {
type _alias (line 453) | struct _alias {
type _withitem (line 458) | struct _withitem {
type _type_ignore_kind (line 463) | enum _type_ignore_kind {TypeIgnore_kind=1}
type _type_ignore (line 464) | struct _type_ignore {
FILE: python-for-ios/dist/root/python3/include/python3.8/asdl.h
type PyObject (line 4) | typedef PyObject * identifier;
type PyObject (line 5) | typedef PyObject * string;
type PyObject (line 6) | typedef PyObject * bytes;
type PyObject (line 7) | typedef PyObject * object;
type PyObject (line 8) | typedef PyObject * singleton;
type PyObject (line 9) | typedef PyObject * constant;
type asdl_seq (line 19) | typedef struct {
type asdl_int_seq (line 24) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/bitset.h
type BYTE (line 11) | typedef BYTE *bitset;
FILE: python-for-ios/dist/root/python3/include/python3.8/boolobject.h
type _longobject (line 18) | struct _longobject
FILE: python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h
type PyByteArrayObject (line 23) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/bytesobject.h
type PyBytesObject (line 31) | typedef struct {
type _PyBytesWriter (line 144) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cellobject.h
type PyCellObject (line 9) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/ceval.h
type _frame (line 42) | struct _frame
type _frame (line 47) | struct _frame
type _frame (line 136) | struct _frame
type _frame (line 137) | struct _frame
type _frame (line 139) | struct _frame
FILE: python-for-ios/dist/root/python3/include/python3.8/classobject.h
type PyMethodObject (line 12) | typedef struct {
type PyInstanceMethodObject (line 38) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/code.h
type _Py_CODEUNIT (line 10) | typedef uint16_t _Py_CODEUNIT;
type _PyOpcache (line 20) | typedef struct _PyOpcache _PyOpcache;
type PyCodeObject (line 23) | typedef struct {
type PyAddrPair (line 143) | typedef struct _addr_pair {
FILE: python-for-ios/dist/root/python3/include/python3.8/compile.h
type _node (line 12) | struct _node
type _node (line 13) | struct _node
type PyCompilerFlags (line 29) | typedef struct {
type PyFutureFeatures (line 40) | typedef struct {
type _mod (line 56) | struct _mod
type _mod (line 59) | struct _mod
type _mod (line 65) | struct _mod
type _mod (line 71) | struct _mod
type _mod (line 75) | struct _mod
type _mod (line 86) | struct _mod
FILE: python-for-ios/dist/root/python3/include/python3.8/complexobject.h
type Py_complex (line 10) | typedef struct {
type PyComplexObject (line 33) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/context.h
type PyContext (line 11) | typedef struct _pycontextobject PyContext;
type PyContextVar (line 14) | typedef struct _pycontextvarobject PyContextVar;
type PyContextToken (line 17) | typedef struct _pycontexttokenobject PyContextToken;
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h
function Py_ssize_t (line 74) | static inline Py_ssize_t
function vectorcallfunc (line 80) | static inline vectorcallfunc
function PyObject (line 114) | static inline PyObject *
function PyObject (line 144) | static inline PyObject *
function PyObject (line 151) | static inline PyObject *
type _Py_Identifier (line 181) | struct _Py_Identifier
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h
type PyDictKeysObject (line 9) | typedef struct _dictkeysobject PyDictKeysObject;
type PyDictObject (line 14) | typedef struct {
type _Py_Identifier (line 37) | struct _Py_Identifier
type _Py_Identifier (line 73) | struct _Py_Identifier
type _Py_Identifier (line 74) | struct _Py_Identifier
type _Py_Identifier (line 76) | struct _Py_Identifier
type _PyDictViewObject (line 84) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h
type PyObject (line 24) | typedef PyObject * (*Py_OpenCodeHookFunction)(PyObject *, void *);
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h
type PyStatus (line 10) | typedef struct {
type PyWideStringList (line 31) | typedef struct {
type PyPreConfig (line 47) | typedef struct {
type PyConfig (line 129) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/object.h
type _Py_Identifier (line 29) | typedef struct _Py_Identifier {
type Py_buffer (line 40) | typedef struct bufferinfo {
type PyObject (line 58) | typedef PyObject *(*vectorcallfunc)(PyObject *callable, PyObject *const ...
type PyNumberMethods (line 95) | typedef struct {
type PySequenceMethods (line 142) | typedef struct {
type PyMappingMethods (line 156) | typedef struct {
type PyAsyncMethods (line 162) | typedef struct {
type PyBufferProcs (line 168) | typedef struct {
type Py_ssize_t (line 175) | typedef Py_ssize_t printfunc;
type PyTypeObject (line 177) | typedef struct _typeobject {
type PyHeapTypeObject (line 273) | typedef struct _heaptypeobject {
type _Py_Identifier (line 303) | struct _Py_Identifier
type _Py_Identifier (line 310) | struct _Py_Identifier
type _Py_Identifier (line 311) | struct _Py_Identifier
type _Py_Identifier (line 312) | struct _Py_Identifier
type _Py_Identifier (line 323) | struct _Py_Identifier
function _Py_Dealloc_inline (line 339) | static inline void _Py_Dealloc_inline(PyObject *op)
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/objimpl.h
type PyObjectArenaAllocator (line 18) | typedef struct {
type PyGC_Head (line 46) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pyerrors.h
type PyBaseExceptionObject (line 17) | typedef struct {
type PySyntaxErrorObject (line 21) | typedef struct {
type PyImportErrorObject (line 31) | typedef struct {
type PyUnicodeErrorObject (line 38) | typedef struct {
type PySystemExitObject (line 47) | typedef struct {
type PyOSErrorObject (line 52) | typedef struct {
type PyStopIterationObject (line 64) | typedef struct {
type PyOSErrorObject (line 70) | typedef PyOSErrorObject PyEnvironmentErrorObject;
type PyOSErrorObject (line 72) | typedef PyOSErrorObject PyWindowsErrorObject;
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pymem.h
type PyMemAllocatorDomain (line 29) | typedef enum {
type PyMemAllocatorName (line 40) | typedef enum {
type PyMemAllocatorEx (line 53) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/pystate.h
type _frame (line 19) | struct _frame
type _PyErr_StackItem (line 36) | typedef struct _err_stackitem {
type _ts (line 51) | struct _ts {
type PyModuleDef (line 150) | struct PyModuleDef
type _frame (line 188) | struct _frame
type _xid (line 192) | struct _xid
type _PyCrossInterpreterData (line 197) | typedef struct _xid {
type _xid (line 244) | struct _xid
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/traceback.h
type PyTracebackObject (line 9) | typedef struct _traceback {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/tupleobject.h
type PyTupleObject (line 9) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/cpython/unicodeobject.h
type wchar_t (line 14) | typedef wchar_t Py_UNICODE;
type PyASCIIObject (line 88) | typedef struct {
type PyCompactUnicodeObject (line 227) | typedef struct {
type PyUnicodeObject (line 239) | typedef struct {
type PyUnicode_Kind (line 320) | enum PyUnicode_Kind {
type _PyUnicodeWriter (line 605) | typedef struct {
type PyUnicode_Kind (line 668) | enum PyUnicode_Kind
FILE: python-for-ios/dist/root/python3/include/python3.8/datetime.h
type PyDateTime_Delta (line 34) | typedef struct
type PyDateTime_TZInfo (line 43) | typedef struct
type _PyDateTime_BaseTZInfo (line 61) | typedef struct
type _PyDateTime_BaseTime (line 76) | typedef struct
type PyDateTime_Time (line 81) | typedef struct
type PyDateTime_Date (line 94) | typedef struct
type _PyDateTime_BaseDateTime (line 104) | typedef struct
type PyDateTime_DateTime (line 109) | typedef struct
type PyDateTime_CAPI (line 150) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/descrobject.h
type PyObject (line 8) | typedef PyObject *(*getter)(PyObject *, void *);
type PyGetSetDef (line 11) | typedef struct PyGetSetDef {
type PyObject (line 20) | typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
type PyObject (line 23) | typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
type wrapperbase (line 26) | struct wrapperbase {
type PyDescrObject (line 41) | typedef struct {
type PyMethodDescrObject (line 53) | typedef struct {
type PyMemberDescrObject (line 59) | typedef struct {
type PyGetSetDescrObject (line 64) | typedef struct {
type PyWrapperDescrObject (line 69) | typedef struct {
type PyMemberDef (line 88) | struct PyMemberDef
type PyMemberDef (line 90) | struct PyMemberDef
type PyGetSetDef (line 92) | struct PyGetSetDef
type wrapperbase (line 95) | struct wrapperbase
FILE: python-for-ios/dist/root/python3/include/python3.8/dynamic_annotations.h
function T (line 473) | T _Py_ANNOTATE_UNPROTECTED_READ(const volatile T &x) {
FILE: python-for-ios/dist/root/python3/include/python3.8/fileutils.h
type _Py_error_handler (line 23) | typedef enum {
type _Py_stat_struct (line 71) | struct _Py_stat_struct {
type _Py_stat_struct (line 95) | struct _Py_stat_struct
type _Py_stat_struct (line 99) | struct _Py_stat_struct
type stat (line 103) | struct stat
FILE: python-for-ios/dist/root/python3/include/python3.8/floatobject.h
type PyFloatObject (line 15) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/frameobject.h
type PyTryBlock (line 10) | typedef struct {
type PyFrameObject (line 16) | typedef struct _frame {
FILE: python-for-ios/dist/root/python3/include/python3.8/funcobject.h
type PyFunctionObject (line 21) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/genobject.h
type _frame (line 13) | struct _frame
type PyGenObject (line 33) | typedef struct {
type _frame (line 43) | struct _frame
type _frame (line 44) | struct _frame
type PyCoroObject (line 54) | typedef struct {
type _frame (line 66) | struct _frame
type PyAsyncGenObject (line 71) | typedef struct {
type _frame (line 92) | struct _frame
FILE: python-for-ios/dist/root/python3/include/python3.8/grammar.h
type label (line 14) | typedef struct {
type labellist (line 23) | typedef struct {
type arc (line 30) | typedef struct {
type state (line 37) | typedef struct {
type dfa (line 50) | typedef struct {
type grammar (line 60) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/import.h
type _Py_Identifier (line 44) | struct _Py_Identifier
type _inittab (line 118) | struct _inittab {
type _inittab (line 122) | struct _inittab
type _inittab (line 123) | struct _inittab
type _frozen (line 134) | struct _frozen {
type _frozen (line 143) | struct _frozen
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_accu.h
type _PyAccu (line 24) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_atomic.h
type _Py_memory_order (line 38) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 46) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 50) | typedef struct _Py_atomic_int {
type _Py_memory_order (line 69) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 77) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 81) | typedef struct _Py_atomic_int {
type _Py_memory_order (line 107) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 115) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 119) | typedef struct _Py_atomic_int {
function _Py_atomic_signal_fence (line 124) | static __inline__ void
function _Py_atomic_thread_fence (line 131) | static __inline__ void
function _Py_ANNOTATE_MEMORY_ORDER (line 139) | static __inline__ void
type _Py_memory_order (line 243) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 251) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 255) | typedef struct _Py_atomic_int {
function _Py_atomic_load_64bit_impl (line 295) | inline intptr_t _Py_atomic_load_64bit_impl(volatile uintptr_t* value, in...
function _Py_atomic_load_32bit_impl (line 333) | inline int _Py_atomic_load_32bit_impl(volatile int* value, int order) {
type _Py_memory_order (line 379) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 387) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 391) | typedef struct _Py_atomic_int {
function _Py_atomic_load_64bit_impl (line 431) | inline intptr_t _Py_atomic_load_64bit_impl(volatile uintptr_t* value, in...
function _Py_atomic_load_32bit_impl (line 469) | inline int _Py_atomic_load_32bit_impl(volatile int* value, int order) {
type _Py_memory_order (line 516) | typedef enum _Py_memory_order {
type _Py_atomic_address (line 524) | typedef struct _Py_atomic_address {
type _Py_atomic_int (line 528) | typedef struct _Py_atomic_int {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_ceval.h
type _ceval_runtime_state (line 16) | struct _ceval_runtime_state
type _ceval_runtime_state (line 18) | struct _ceval_runtime_state
type _ceval_runtime_state (line 20) | struct _ceval_runtime_state
type _ceval_runtime_state (line 23) | struct _ceval_runtime_state
type _ceval_runtime_state (line 27) | struct _ceval_runtime_state
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_code.h
type _PyOpcache_LoadGlobal (line 7) | typedef struct {
type _PyOpcache (line 13) | struct _PyOpcache {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_condvar.h
type CRITICAL_SECTION (line 57) | typedef CRITICAL_SECTION PyMUTEX_T;
type PyCOND_T (line 76) | typedef struct _PyCOND_T
type SRWLOCK (line 87) | typedef SRWLOCK PyMUTEX_T;
type CONDITION_VARIABLE (line 89) | typedef CONDITION_VARIABLE PyCOND_T;
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_context.h
type _pycontextobject (line 10) | struct _pycontextobject {
type _pycontextvarobject (line 19) | struct _pycontextvarobject {
type _pycontexttokenobject (line 30) | struct _pycontexttokenobject {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_fileutils.h
type lconv (line 47) | struct lconv
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_getopt.h
type _PyOS_LongOption (line 14) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_gil.h
type _gil_runtime_state (line 23) | struct _gil_runtime_state {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_hamt.h
type PyHamtNode (line 15) | typedef struct {
type PyHamtObject (line 21) | typedef struct {
type PyHamtIteratorState (line 41) | typedef struct {
type PyHamtIterator (line 56) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_initconfig.h
type _PyArgv (line 63) | typedef struct {
type _PyPreCmdline (line 96) | typedef struct {
type _PyConfigInitEnum (line 140) | typedef enum {
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_object.h
function _PyObject_GC_TRACK_impl (line 27) | static inline void _PyObject_GC_TRACK_impl(const char *filename, int lin...
function _PyObject_GC_UNTRACK_impl (line 59) | static inline void _PyObject_GC_UNTRACK_impl(const char *filename, int l...
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pathconfig.h
type _PyPathConfig (line 11) | typedef struct _PyPathConfig {
type _PyPathConfig (line 51) | struct _PyPathConfig
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyerrors.h
function PyObject (line 11) | static inline PyObject* _PyErr_Occurred(PyThreadState *tstate)
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pymem.h
type gc_generation (line 97) | struct gc_generation {
type gc_generation_stats (line 105) | struct gc_generation_stats {
type _gc_runtime_state (line 114) | struct _gc_runtime_state {
type _gc_runtime_state (line 148) | struct _gc_runtime_state
function _PyMem_IsPtrFreed (line 182) | static inline int _PyMem_IsPtrFreed(void *ptr)
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pystate.h
type _pending_calls (line 25) | struct _pending_calls {
type _ceval_runtime_state (line 43) | struct _ceval_runtime_state {
type PyObject (line 64) | typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
type _is (line 67) | struct _is {
type _is (line 140) | struct _is
type _is (line 142) | struct _is
type _is (line 143) | struct _is
type _is (line 144) | struct _is
type _xidregitem (line 153) | struct _xidregitem
type _xidregitem (line 155) | struct _xidregitem {
type _Py_AuditHookEntry (line 163) | typedef struct _Py_AuditHookEntry {
type _gilstate_runtime_state (line 171) | struct _gilstate_runtime_state {
type _PyRuntimeState (line 195) | typedef struct pyruntimestate {
type _gilstate_runtime_state (line 312) | struct _gilstate_runtime_state
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_traceback.h
type _frame (line 91) | struct _frame
FILE: python-for-ios/dist/root/python3/include/python3.8/internal/pycore_warnings.h
type _warnings_runtime_state (line 13) | struct _warnings_runtime_state {
FILE: python-for-ios/dist/root/python3/include/python3.8/listobject.h
type PyListObject (line 23) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/longintrepr.h
type digit (line 45) | typedef uint32_t digit;
type sdigit (line 46) | typedef int32_t sdigit;
type twodigits (line 47) | typedef uint64_t twodigits;
type stwodigits (line 48) | typedef int64_t stwodigits;
type digit (line 53) | typedef unsigned short digit;
type sdigit (line 54) | typedef short sdigit;
type twodigits (line 55) | typedef unsigned long twodigits;
type stwodigits (line 56) | typedef long stwodigits;
type _longobject (line 85) | struct _longobject {
FILE: python-for-ios/dist/root/python3/include/python3.8/longobject.h
type PyLongObject (line 10) | typedef struct _longobject PyLongObject;
FILE: python-for-ios/dist/root/python3/include/python3.8/memoryobject.h
type _PyManagedBufferObject (line 42) | typedef struct {
type PyMemoryViewObject (line 57) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/methodobject.h
type PyObject (line 18) | typedef PyObject *(*PyCFunction)(PyObject *, PyObject *);
type PyObject (line 19) | typedef PyObject *(*_PyCFunctionFast) (PyObject *, PyObject *const *, Py...
type PyObject (line 20) | typedef PyObject *(*PyCFunctionWithKeywords)(PyObject *, PyObject *,
type PyObject (line 22) | typedef PyObject *(*_PyCFunctionFastWithKeywords) (PyObject *,
type PyObject (line 25) | typedef PyObject *(*PyNoArgsFunction)(PyObject *);
type PyMethodDef (line 51) | struct PyMethodDef {
type PyMethodDef (line 58) | typedef struct PyMethodDef PyMethodDef;
type PyCFunctionObject (line 97) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/modsupport.h
type _PyArg_Parser (line 89) | typedef struct _PyArg_Parser {
type _PyArg_Parser (line 107) | struct _PyArg_Parser
type _PyArg_Parser (line 117) | struct _PyArg_Parser
type _PyArg_Parser (line 120) | struct _PyArg_Parser
type _PyArg_Parser (line 124) | struct _PyArg_Parser
type PyModuleDef (line 211) | struct PyModuleDef
type PyModuleDef (line 214) | struct PyModuleDef
FILE: python-for-ios/dist/root/python3/include/python3.8/moduleobject.h
type PyModuleDef (line 35) | struct PyModuleDef
type PyModuleDef (line 40) | struct PyModuleDef
type PyModuleDef_Base (line 44) | typedef struct PyModuleDef_Base {
type PyModuleDef_Slot (line 61) | typedef struct PyModuleDef_Slot{
type PyModuleDef (line 75) | typedef struct PyModuleDef{
FILE: python-for-ios/dist/root/python3/include/python3.8/node.h
type node (line 10) | typedef struct _node {
FILE: python-for-ios/dist/root/python3/include/python3.8/object.h
type PyObject (line 104) | typedef struct _object {
type PyVarObject (line 113) | typedef struct {
type PyObject (line 140) | typedef PyObject * (*unaryfunc)(PyObject *);
type PyObject (line 141) | typedef PyObject * (*binaryfunc)(PyObject *, PyObject *);
type PyObject (line 142) | typedef PyObject * (*ternaryfunc)(PyObject *, PyObject *, PyObject *);
type Py_ssize_t (line 144) | typedef Py_ssize_t (*lenfunc)(PyObject *);
type PyObject (line 145) | typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
type PyObject (line 146) | typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
type PyObject (line 158) | typedef PyObject *(*getattrfunc)(PyObject *, char *);
type PyObject (line 159) | typedef PyObject *(*getattrofunc)(PyObject *, PyObject *);
type PyObject (line 162) | typedef PyObject *(*reprfunc)(PyObject *);
type Py_hash_t (line 163) | typedef Py_hash_t (*hashfunc)(PyObject *);
type PyObject (line 164) | typedef PyObject *(*richcmpfunc) (PyObject *, PyObject *, int);
type PyObject (line 165) | typedef PyObject *(*getiterfunc) (PyObject *);
type PyObject (line 166) | typedef PyObject *(*iternextfunc) (PyObject *);
type PyObject (line 167) | typedef PyObject *(*descrgetfunc) (PyObject *, PyObject *, PyObject *);
type PyObject (line 170) | typedef PyObject *(*newfunc)(struct _typeobject *, PyObject *, PyObject *);
type PyObject (line 171) | typedef PyObject *(*allocfunc)(struct _typeobject *, Py_ssize_t);
type PyTypeObject (line 175) | typedef struct _typeobject PyTypeObject;
type PyType_Slot (line 180) | typedef struct{
type PyType_Spec (line 185) | typedef struct{
type _typeobject (line 198) | struct _typeobject
type _typeobject (line 202) | struct _typeobject
type _typeobject (line 202) | struct _typeobject
type _typeobject (line 206) | struct _typeobject
type _typeobject (line 207) | struct _typeobject
type _typeobject (line 208) | struct _typeobject
type _typeobject (line 210) | struct _typeobject
type _typeobject (line 216) | struct _typeobject
type _typeobject (line 217) | struct _typeobject
type _typeobject (line 218) | struct _typeobject
type _typeobject (line 221) | struct _typeobject
type _typeobject (line 409) | struct _typeobject
type _typeobject (line 410) | struct _typeobject
function _Py_NewReference (line 436) | static inline void _Py_NewReference(PyObject *op)
function _Py_ForgetReference (line 446) | static inline void _Py_ForgetReference(PyObject *op)
function _Py_INCREF (line 456) | static inline void _Py_INCREF(PyObject *op)
function _Py_DECREF (line 464) | static inline void _Py_DECREF(const char *filename, int lineno,
function _Py_XINCREF (line 529) | static inline void _Py_XINCREF(PyObject *op)
function _Py_XDECREF (line 538) | static inline void _Py_XDECREF(PyObject *op)
FILE: python-for-ios/dist/root/python3/include/python3.8/objimpl.h
function PyObject (line 136) | static inline PyObject*
function PyVarObject (line 151) | static inline PyVarObject*
FILE: python-for-ios/dist/root/python3/include/python3.8/odictobject.h
type PyODictObject (line 13) | typedef struct _odictobject PyODictObject;
FILE: python-for-ios/dist/root/python3/include/python3.8/opcode.h
type cmp_op (line 139) | enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py...
FILE: python-for-ios/dist/root/python3/include/python3.8/parsetok.h
type perrdetail (line 13) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/py_curses.h
type PyCursesWindowObject (line 61) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/pyarena.h
type PyArena (line 12) | typedef struct _arena PyArena;
FILE: python-for-ios/dist/root/python3/include/python3.8/pydtrace.h
function PyDTrace_LINE (line 28) | static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int...
function PyDTrace_FUNCTION_ENTRY (line 29) | static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char ...
function PyDTrace_FUNCTION_RETURN (line 30) | static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char...
function PyDTrace_GC_START (line 31) | static inline void PyDTrace_GC_START(int arg0) {}
function PyDTrace_GC_DONE (line 32) | static inline void PyDTrace_GC_DONE(Py_ssize_t arg0) {}
function PyDTrace_INSTANCE_NEW_START (line 33) | static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {}
function PyDTrace_INSTANCE_NEW_DONE (line 34) | static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {}
function PyDTrace_INSTANCE_DELETE_START (line 35) | static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {}
function PyDTrace_INSTANCE_DELETE_DONE (line 36) | static inline void PyDTrace_INSTANCE_DELETE_DONE(int arg0) {}
function PyDTrace_IMPORT_FIND_LOAD_START (line 37) | static inline void PyDTrace_IMPORT_FIND_LOAD_START(const char *arg0) {}
function PyDTrace_IMPORT_FIND_LOAD_DONE (line 38) | static inline void PyDTrace_IMPORT_FIND_LOAD_DONE(const char *arg0, int ...
function PyDTrace_AUDIT (line 39) | static inline void PyDTrace_AUDIT(const char *arg0, void *arg1) {}
function PyDTrace_LINE_ENABLED (line 41) | static inline int PyDTrace_LINE_ENABLED(void) { return 0; }
function PyDTrace_FUNCTION_ENTRY_ENABLED (line 42) | static inline int PyDTrace_FUNCTION_ENTRY_ENABLED(void) { return 0; }
function PyDTrace_FUNCTION_RETURN_ENABLED (line 43) | static inline int PyDTrace_FUNCTION_RETURN_ENABLED(void) { return 0; }
function PyDTrace_GC_START_ENABLED (line 44) | static inline int PyDTrace_GC_START_ENABLED(void) { return 0; }
function PyDTrace_GC_DONE_ENABLED (line 45) | static inline int PyDTrace_GC_DONE_ENABLED(void) { return 0; }
function PyDTrace_INSTANCE_NEW_START_ENABLED (line 46) | static inline int PyDTrace_INSTANCE_NEW_START_ENABLED(void) { return 0; }
function PyDTrace_INSTANCE_NEW_DONE_ENABLED (line 47) | static inline int PyDTrace_INSTANCE_NEW_DONE_ENABLED(void) { return 0; }
function PyDTrace_INSTANCE_DELETE_START_ENABLED (line 48) | static inline int PyDTrace_INSTANCE_DELETE_START_ENABLED(void) { return ...
function PyDTrace_INSTANCE_DELETE_DONE_ENABLED (line 49) | static inline int PyDTrace_INSTANCE_DELETE_DONE_ENABLED(void) { return 0; }
function PyDTrace_IMPORT_FIND_LOAD_START_ENABLED (line 50) | static inline int PyDTrace_IMPORT_FIND_LOAD_START_ENABLED(void) { return...
function PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED (line 51) | static inline int PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED(void) { return ...
function PyDTrace_AUDIT_ENABLED (line 52) | static inline int PyDTrace_AUDIT_ENABLED(void) { return 0; }
FILE: python-for-ios/dist/root/python3/include/python3.8/pyexpat.h
type PyExpat_CAPI (line 9) | struct PyExpat_CAPI
FILE: python-for-ios/dist/root/python3/include/python3.8/pyhash.h
type _Py_HashSecret_t (line 54) | typedef union {
type PyHash_FuncDef (line 87) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/pymath.h
function __icc_nan (line 167) | __declspec(noinline)
FILE: python-for-ios/dist/root/python3/include/python3.8/pymem.h
type _PyTraceMalloc_Config (line 109) | struct _PyTraceMalloc_Config {
type _PyTraceMalloc_Config (line 131) | struct _PyTraceMalloc_Config
FILE: python-for-ios/dist/root/python3/include/python3.8/pyport.h
type Py_uintptr_t (line 97) | typedef uintptr_t Py_uintptr_t;
type Py_intptr_t (line 98) | typedef intptr_t Py_intptr_t;
type Py_ssize_t (line 105) | typedef ssize_t Py_ssize_t;
type Py_intptr_t (line 107) | typedef Py_intptr_t Py_ssize_t;
type Py_ssize_t (line 114) | typedef Py_ssize_t Py_hash_t;
type Py_uhash_t (line 117) | typedef size_t Py_uhash_t;
type Py_ssize_t (line 121) | typedef Py_ssize_t Py_ssize_clean_t;
type Py_ssize_clean_t (line 123) | typedef int Py_ssize_clean_t;
FILE: python-for-ios/dist/root/python3/include/python3.8/pystate.h
type _frame (line 18) | struct _frame
type _ts (line 19) | struct _ts
type _is (line 20) | struct _is
type PyThreadState (line 23) | typedef struct _ts PyThreadState;
type PyInterpreterState (line 25) | typedef struct _is PyInterpreterState;
type PyModuleDef (line 45) | struct PyModuleDef
type PyModuleDef (line 46) | struct PyModuleDef
type PyModuleDef (line 48) | struct PyModuleDef
type PyGILState_STATE (line 80) | typedef
FILE: python-for-ios/dist/root/python3/include/python3.8/pythonrun.h
type _mod (line 35) | struct _mod
type _mod (line 41) | struct _mod
type _mod (line 47) | struct _mod
type _mod (line 57) | struct _mod
type _node (line 75) | struct _node
type _node (line 78) | struct _node
type _node (line 82) | struct _node
type symtable (line 116) | struct symtable
type symtable (line 128) | struct symtable
type symtable (line 133) | struct symtable
FILE: python-for-ios/dist/root/python3/include/python3.8/pythread.h
type PyLockStatus (line 14) | typedef enum PyLockStatus {
type Py_tss_t (line 115) | typedef struct _Py_tss_t Py_tss_t;
type _Py_tss_t (line 135) | struct _Py_tss_t {
FILE: python-for-ios/dist/root/python3/include/python3.8/pytime.h
type _PyTime_t (line 19) | typedef int64_t _PyTime_t;
type _PyTime_round_t (line 23) | typedef enum {
type timeval (line 123) | struct timeval
type timeval (line 130) | struct timeval
type timeval (line 135) | struct timeval
type timespec (line 153) | struct timespec
type timespec (line 158) | struct timespec
type _Py_clock_info_t (line 184) | typedef struct {
type tm (line 218) | struct tm
type tm (line 222) | struct tm
FILE: python-for-ios/dist/root/python3/include/python3.8/setobject.h
type setentry (line 26) | typedef struct {
type PySetObject (line 42) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/sliceobject.h
type PySliceObject (line 22) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/structmember.h
type PyMemberDef (line 18) | typedef struct PyMemberDef {
type PyMemberDef (line 67) | struct PyMemberDef
type PyMemberDef (line 68) | struct PyMemberDef
FILE: python-for-ios/dist/root/python3/include/python3.8/structseq.h
type PyStructSequence_Field (line 10) | typedef struct PyStructSequence_Field {
type PyStructSequence_Desc (line 15) | typedef struct PyStructSequence_Desc {
type PyTupleObject (line 35) | typedef PyTupleObject PyStructSequence;
FILE: python-for-ios/dist/root/python3/include/python3.8/symtable.h
type _Py_block_ty (line 14) | typedef enum _block_type { FunctionBlock, ClassBlock, ModuleBlock }
type _symtable_entry (line 17) | struct _symtable_entry
type symtable (line 19) | struct symtable {
type PySTEntryObject (line 38) | typedef struct _symtable_entry {
type symtable (line 76) | struct symtable
type symtable (line 80) | struct symtable
type symtable (line 84) | struct symtable
type symtable (line 86) | struct symtable
FILE: python-for-ios/dist/root/python3/include/python3.8/traceback.h
type _frame (line 7) | struct _frame
type _frame (line 11) | struct _frame
FILE: python-for-ios/dist/root/python3/include/python3.8/ucnhash.h
type _PyUnicode_Name_CAPI (line 13) | typedef struct {
FILE: python-for-ios/dist/root/python3/include/python3.8/unicodeobject.h
type Py_UCS4 (line 102) | typedef uint32_t Py_UCS4;
type Py_UCS2 (line 103) | typedef uint16_t Py_UCS2;
type Py_UCS1 (line 104) | typedef uint8_t Py_UCS1;
FILE: python-for-ios/dist/root/python3/include/python3.8/weakrefobject.h
type PyWeakReference (line 10) | typedef struct _PyWeakReference PyWeakReference;
type _PyWeakReference (line 16) | struct _PyWeakReference {
FILE: python-for-ios/dist/root/python3/lib/bootstrap.py
function router (line 15) | def router(args):
function greet (line 39) | def greet(args):
function add (line 44) | def add(args):
function mul (line 49) | def mul(args):
FILE: python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/config.c
type _inittab (line 108) | struct _inittab
FILE: python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/python-config.py
function exit_with_usage (line 15) | def exit_with_usage(code=1):
Condensed preview — 163 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (905K chars).
[
{
"path": ".gitignore",
"chars": 2171,
"preview": "# Xcode\n#\n# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore\n\n"
},
{
"path": "PyApp/PyApp/AppDelegate.swift",
"chars": 2169,
"preview": "//\n// AppDelegate.swift\n// PyApp\n//\n// Created by João Ventura on 28/05/2020.\n// Copyright © 2020 Ventura. All right"
},
{
"path": "PyApp/PyApp/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1590,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"iphone\",\n \"size\" : \"20x20\",\n \"scale\" : \"2x\"\n },\n {\n \"idiom\""
},
{
"path": "PyApp/PyApp/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "PyApp/PyApp/Base.lproj/LaunchScreen.storyboard",
"chars": 1658,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "PyApp/PyApp/Base.lproj/Main.storyboard",
"chars": 2895,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "PyApp/PyApp/Info.plist",
"chars": 1463,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "PyApp/PyApp/PyApp-Bridging-Header.h",
"chars": 125,
"preview": "//\n// Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"pybridg"
},
{
"path": "PyApp/PyApp/ViewController.swift",
"chars": 779,
"preview": "//\n// ViewController.swift\n// PyApp\n//\n// Created by João Ventura on 28/05/2020.\n// Copyright © 2020 Ventura. All ri"
},
{
"path": "PyApp/PyApp/pybridge.c",
"chars": 1924,
"preview": "#include <stdio.h>\n#include <string.h>\n\n#include \"pybridge.h\"\n#include \"Python.h\"\n\nvoid python_start(const char* resourc"
},
{
"path": "PyApp/PyApp/pybridge.h",
"chars": 192,
"preview": "#ifndef pybridge_h\n#define pybridge_h\n\n#include <stdio.h>\n\nvoid python_start(const char* resourcePath);\nvoid python_end("
},
{
"path": "PyApp/PyApp/pybridge.swift",
"chars": 1029,
"preview": "//\n// pybridge.swift\n// PyApp\n//\n\nimport Foundation\n\nclass PyBridge {\n \n class func start(path: String) {\n "
},
{
"path": "PyApp/PyApp.xcodeproj/project.pbxproj",
"chars": 17065,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "PyApp/PyApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 150,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:PyApp.xcodeproj"
},
{
"path": "PyApp/PyApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "README.md",
"chars": 1371,
"preview": "# PyBridge-iOS\n\nPyBridge is a C implementation that allows to use Python code in native iOS applications. It allows to s"
},
{
"path": "docs/references.md",
"chars": 6575,
"preview": "# References for creating PyBridge-iOS\n\nThis document contains the necessary steps to create an Xcode project from scrat"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/Python-ast.h",
"chars": 26491,
"preview": "/* File automatically generated by Parser/asdl_c.py. */\n\n#ifndef Py_PYTHON_AST_H\n#define Py_PYTHON_AST_H\n#ifdef __cplusp"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/Python.h",
"chars": 3615,
"preview": "#ifndef Py_PYTHON_H\n#define Py_PYTHON_H\n/* Since this is a \"meta-include\" file, no #ifdef __cplusplus / extern \"C\" { */\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/abstract.h",
"chars": 30286,
"preview": "/* Abstract Object Interface (many thanks to Jim Fulton) */\n\n#ifndef Py_ABSTRACTOBJECT_H\n#define Py_ABSTRACTOBJECT_H\n#if"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/asdl.h",
"chars": 1229,
"preview": "#ifndef Py_ASDL_H\n#define Py_ASDL_H\n\ntypedef PyObject * identifier;\ntypedef PyObject * string;\ntypedef PyObject * bytes;"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/ast.h",
"chars": 948,
"preview": "#ifndef Py_AST_H\n#define Py_AST_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"Python-ast.h\" /* mod_ty */\n#includ"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/bitset.h",
"chars": 468,
"preview": "\n#ifndef Py_BITSET_H\n#define Py_BITSET_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Bitset interface */\n\n#define BYTE "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/bltinmodule.h",
"chars": 264,
"preview": "#ifndef Py_BLTINMODULE_H\n#define Py_BLTINMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_DATA(PyTypeObject) PyFil"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/boolobject.h",
"chars": 886,
"preview": "/* Boolean object interface */\n\n#ifndef Py_BOOLOBJECT_H\n#define Py_BOOLOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/bytearrayobject.h",
"chars": 2114,
"preview": "/* ByteArray object interface */\n\n#ifndef Py_BYTEARRAYOBJECT_H\n#define Py_BYTEARRAYOBJECT_H\n#ifdef __cplusplus\nextern \"C"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/bytes_methods.h",
"chars": 3301,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_BYTES_CTYPE_H\n#define Py_BYTES_CTYPE_H\n\n/*\n * The internal implementation behind PyByt"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/bytesobject.h",
"chars": 8493,
"preview": "\n/* Bytes (String) object interface */\n\n#ifndef Py_BYTESOBJECT_H\n#define Py_BYTESOBJECT_H\n#ifdef __cplusplus\nextern \"C\" "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cellobject.h",
"chars": 713,
"preview": "/* Cell object interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_CELLOBJECT_H\n#define Py_CELLOBJECT_H\n#ifdef __cplusplus\nex"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/ceval.h",
"chars": 8366,
"preview": "#ifndef Py_CEVAL_H\n#define Py_CEVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Interface to random parts in ceval.c *"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/classobject.h",
"chars": 1710,
"preview": "/* Former class object interface -- now only bound methods are here */\n\n/* Revealing some structures (not for general u"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/code.h",
"chars": 6982,
"preview": "/* Definitions for bytecode */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_CODE_H\n#define Py_CODE_H\n#ifdef __cplusplus\nextern \"C\""
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/codecs.h",
"chars": 6793,
"preview": "#ifndef Py_CODECREGISTRY_H\n#define Py_CODECREGISTRY_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* -----------------------"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/compile.h",
"chars": 3256,
"preview": "#ifndef Py_COMPILE_H\n#define Py_COMPILE_H\n\n#ifndef Py_LIMITED_API\n#include \"code.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#en"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/complexobject.h",
"chars": 1807,
"preview": "/* Complex number structure */\n\n#ifndef Py_COMPLEXOBJECT_H\n#define Py_COMPLEXOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#e"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/context.h",
"chars": 2014,
"preview": "#ifndef Py_CONTEXT_H\n#define Py_CONTEXT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\n\n\nPyAPI_DATA(Py"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/abstract.h",
"chars": 12295,
"preview": "#ifndef Py_CPYTHON_ABSTRACTOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/dictobject.h",
"chars": 3845,
"preview": "#ifndef Py_CPYTHON_DICTOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\next"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/fileobject.h",
"chars": 951,
"preview": "#ifndef Py_CPYTHON_FILEOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\next"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/initconfig.h",
"chars": 16028,
"preview": "#ifndef Py_PYCORECONFIG_H\n#define Py_PYCORECONFIG_H\n#ifndef Py_LIMITED_API\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* --"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/interpreteridobject.h",
"chars": 456,
"preview": "#ifndef Py_CPYTHON_INTERPRETERIDOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplu"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/object.h",
"chars": 15691,
"preview": "#ifndef Py_CPYTHON_OBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/objimpl.h",
"chars": 3600,
"preview": "#ifndef Py_CPYTHON_OBJIMPL_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pyerrors.h",
"chars": 4607,
"preview": "#ifndef Py_CPYTHON_ERRORS_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pylifecycle.h",
"chars": 2263,
"preview": "#ifndef Py_CPYTHON_PYLIFECYCLE_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nex"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pymem.h",
"chars": 3511,
"preview": "#ifndef Py_CPYTHON_PYMEM_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern \""
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/pystate.h",
"chars": 9743,
"preview": "#ifndef Py_CPYTHON_PYSTATE_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nextern"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/sysmodule.h",
"chars": 547,
"preview": "#ifndef Py_CPYTHON_SYSMODULE_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nexte"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/traceback.h",
"chars": 473,
"preview": "#ifndef Py_CPYTHON_TRACEBACK_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nexte"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/tupleobject.h",
"chars": 1036,
"preview": "#ifndef Py_CPYTHON_TUPLEOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\nex"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/cpython/unicodeobject.h",
"chars": 46299,
"preview": "#ifndef Py_CPYTHON_UNICODEOBJECT_H\n# error \"this header file must not be included directly\"\n#endif\n\n#ifdef __cplusplus\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/datetime.h",
"chars": 9260,
"preview": "/* datetime.h\n */\n#ifndef Py_LIMITED_API\n#ifndef DATETIME_H\n#define DATETIME_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/descrobject.h",
"chars": 3019,
"preview": "/* Descriptors */\n#ifndef Py_DESCROBJECT_H\n#define Py_DESCROBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef PyOb"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/dictobject.h",
"chars": 3716,
"preview": "#ifndef Py_DICTOBJECT_H\n#define Py_DICTOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Dictionary object type -- map"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/dtoa.h",
"chars": 458,
"preview": "#ifndef Py_LIMITED_API\n#ifndef PY_NO_SHORT_FLOAT_REPR\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(double) _Py_dg_"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/dynamic_annotations.h",
"chars": 22469,
"preview": "/* Copyright (c) 2008-2009, Google Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms,"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/enumobject.h",
"chars": 253,
"preview": "#ifndef Py_ENUMOBJECT_H\n#define Py_ENUMOBJECT_H\n\n/* Enumerate Object */\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_D"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/errcode.h",
"chars": 1695,
"preview": "#ifndef Py_ERRCODE_H\n#define Py_ERRCODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Error codes passed around between "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/eval.h",
"chars": 1209,
"preview": "\n/* Interface to execute compiled code */\n\n#ifndef Py_EVAL_H\n#define Py_EVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nP"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/fileobject.h",
"chars": 1342,
"preview": "/* File object interface (what's left of it -- see io.py) */\n\n#ifndef Py_FILEOBJECT_H\n#define Py_FILEOBJECT_H\n#ifdef __c"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/fileutils.h",
"chars": 4352,
"preview": "#ifndef Py_FILEUTILS_H\n#define Py_FILEUTILS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !defined(Py_LIMITED_API) || Py"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/floatobject.h",
"chars": 4794,
"preview": "\n/* Float object interface */\n\n/*\nPyFloatObject represents a (double precision) floating point number.\n*/\n\n#ifndef Py_FL"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/frameobject.h",
"chars": 3317,
"preview": "/* Frame object interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_FRAMEOBJECT_H\n#define Py_FRAMEOBJECT_H\n#ifdef __cplusplu"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/funcobject.h",
"chars": 4200,
"preview": "\n/* Function object interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_FUNCOBJECT_H\n#define Py_FUNCOBJECT_H\n#ifdef __cpluspl"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/genobject.h",
"chars": 3720,
"preview": "\n/* Generator object interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_GENOBJECT_H\n#define Py_GENOBJECT_H\n#ifdef __cpluspl"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/graminit.h",
"chars": 2118,
"preview": "/* Generated by Parser/pgen */\n\n#define single_input 256\n#define file_input 257\n#define eval_input 258\n#define decorator"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/grammar.h",
"chars": 1821,
"preview": "\n/* Grammar interface */\n\n#ifndef Py_GRAMMAR_H\n#define Py_GRAMMAR_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"bi"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/import.h",
"chars": 4926,
"preview": "\n/* Module definition and import interface */\n\n#ifndef Py_IMPORT_H\n#define Py_IMPORT_H\n#ifdef __cplusplus\nextern \"C\" {\n#"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_accu.h",
"chars": 1126,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_INTERNAL_ACCU_H\n#define Py_INTERNAL_ACCU_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/**"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_atomic.h",
"chars": 16944,
"preview": "#ifndef Py_ATOMIC_H\n#define Py_ATOMIC_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# error \"this hea"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_ceval.h",
"chars": 966,
"preview": "#ifndef Py_INTERNAL_CEVAL_H\n#define Py_INTERNAL_CEVAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_code.h",
"chars": 542,
"preview": "#ifndef Py_INTERNAL_CODE_H\n#define Py_INTERNAL_CODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n \ntypedef struct {\n PyOb"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_condvar.h",
"chars": 2809,
"preview": "#ifndef Py_INTERNAL_CONDVAR_H\n#define Py_INTERNAL_CONDVAR_H\n\n#ifndef Py_BUILD_CORE\n# error \"this header requires Py_BUI"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_context.h",
"chars": 779,
"preview": "#ifndef Py_INTERNAL_CONTEXT_H\n#define Py_INTERNAL_CONTEXT_H\n\n#ifndef Py_BUILD_CORE\n# error \"this header requires Py_BUI"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_fileutils.h",
"chars": 1254,
"preview": "#ifndef Py_INTERNAL_FILEUTILS_H\n#define Py_INTERNAL_FILEUTILS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_getopt.h",
"chars": 490,
"preview": "#ifndef Py_INTERNAL_PYGETOPT_H\n#define Py_INTERNAL_PYGETOPT_H\n\n#ifndef Py_BUILD_CORE\n# error \"this header requires Py_B"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_gil.h",
"chars": 1520,
"preview": "#ifndef Py_INTERNAL_GIL_H\n#define Py_INTERNAL_GIL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# err"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_hamt.h",
"chars": 3128,
"preview": "#ifndef Py_INTERNAL_HAMT_H\n#define Py_INTERNAL_HAMT_H\n\n#ifndef Py_BUILD_CORE\n# error \"this header requires Py_BUILD_COR"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_initconfig.h",
"chars": 5168,
"preview": "#ifndef Py_INTERNAL_CORECONFIG_H\n#define Py_INTERNAL_CORECONFIG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUI"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_object.h",
"chars": 2896,
"preview": "#ifndef Py_INTERNAL_OBJECT_H\n#define Py_INTERNAL_OBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pathconfig.h",
"chars": 2037,
"preview": "#ifndef Py_INTERNAL_PATHCONFIG_H\n#define Py_INTERNAL_PATHCONFIG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUI"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyerrors.h",
"chars": 1329,
"preview": "#ifndef Py_INTERNAL_PYERRORS_H\n#define Py_INTERNAL_PYERRORS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_C"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pyhash.h",
"chars": 206,
"preview": "#ifndef Py_INTERNAL_HASH_H\n#define Py_INTERNAL_HASH_H\n\n#ifndef Py_BUILD_CORE\n# error \"this header requires Py_BUILD_COR"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pylifecycle.h",
"chars": 3758,
"preview": "#ifndef Py_INTERNAL_LIFECYCLE_H\n#define Py_INTERNAL_LIFECYCLE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pymem.h",
"chars": 8216,
"preview": "#ifndef Py_INTERNAL_PYMEM_H\n#define Py_INTERNAL_PYMEM_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_CORE\n# "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_pystate.h",
"chars": 9494,
"preview": "#ifndef Py_INTERNAL_PYSTATE_H\n#define Py_INTERNAL_PYSTATE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_COR"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_traceback.h",
"chars": 3076,
"preview": "#ifndef Py_INTERNAL_TRACEBACK_H\n#define Py_INTERNAL_TRACEBACK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_tupleobject.h",
"chars": 418,
"preview": "#ifndef Py_INTERNAL_TUPLEOBJECT_H\n#define Py_INTERNAL_TUPLEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_B"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/internal/pycore_warnings.h",
"chars": 591,
"preview": "#ifndef Py_INTERNAL_WARNINGS_H\n#define Py_INTERNAL_WARNINGS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_BUILD_C"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/interpreteridobject.h",
"chars": 334,
"preview": "#ifndef Py_INTERPRETERIDOBJECT_H\n#define Py_INTERPRETERIDOBJECT_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LI"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/intrcheck.h",
"chars": 861,
"preview": "\n#ifndef Py_INTRCHECK_H\n#define Py_INTRCHECK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(int) PyOS_InterruptOcc"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/iterobject.h",
"chars": 567,
"preview": "#ifndef Py_ITEROBJECT_H\n#define Py_ITEROBJECT_H\n/* Iterators (the basic kind, over a sequence) */\n#ifdef __cplusplus\next"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/listobject.h",
"chars": 2927,
"preview": "\n/* List object interface */\n\n/*\nAnother generally useful object type is a list of object pointers.\nThis is a mutable ty"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/longintrepr.h",
"chars": 3799,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_LONGINTREPR_H\n#define Py_LONGINTREPR_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Thi"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/longobject.h",
"chars": 9520,
"preview": "#ifndef Py_LONGOBJECT_H\n#define Py_LONGOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Long (arbitrary precision) i"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/marshal.h",
"chars": 803,
"preview": "\n/* Interface for marshal.c */\n\n#ifndef Py_MARSHAL_H\n#define Py_MARSHAL_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#defin"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/memoryobject.h",
"chars": 2765,
"preview": "/* Memory view object. In Python this is available as \"memoryview\". */\n\n#ifndef Py_MEMORYOBJECT_H\n#define Py_MEMORYOBJEC"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/methodobject.h",
"chars": 4406,
"preview": "\n/* Method object interface */\n\n#ifndef Py_METHODOBJECT_H\n#define Py_METHODOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#end"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/modsupport.h",
"chars": 9591,
"preview": "\n#ifndef Py_MODSUPPORT_H\n#define Py_MODSUPPORT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Module support interface */\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/moduleobject.h",
"chars": 2362,
"preview": "\n/* Module object interface */\n\n#ifndef Py_MODULEOBJECT_H\n#define Py_MODULEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#end"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/namespaceobject.h",
"chars": 349,
"preview": "\n/* simple namespace object interface */\n\n#ifndef NAMESPACEOBJECT_H\n#define NAMESPACEOBJECT_H\n#ifdef __cplusplus\nextern "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/node.h",
"chars": 1328,
"preview": "\n/* Parse tree node interface */\n\n#ifndef Py_NODE_H\n#define Py_NODE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\ntypedef st"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/object.h",
"chars": 29600,
"preview": "#ifndef Py_OBJECT_H\n#define Py_OBJECT_H\n\n#include \"pymem.h\" /* _Py_tracemalloc_config */\n\n#ifdef __cplusplus\nextern \"C"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/objimpl.h",
"chars": 10537,
"preview": "/* The PyObject_ memory family: high-level object memory interfaces.\n See pymem.h for the low-level PyMem_ family.\n*/"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/odictobject.h",
"chars": 1300,
"preview": "#ifndef Py_ODICTOBJECT_H\n#define Py_ODICTOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* OrderedDict */\n/* This API"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/opcode.h",
"chars": 5164,
"preview": "/* Auto-generated by Tools/scripts/generate_opcode_h.py from Lib/opcode.py */\n#ifndef Py_OPCODE_H\n#define Py_OPCODE_H\n#i"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/osdefs.h",
"chars": 737,
"preview": "#ifndef Py_OSDEFS_H\n#define Py_OSDEFS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Operating system dependencies */\n\n#i"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/osmodule.h",
"chars": 291,
"preview": "\n/* os module interface */\n\n#ifndef Py_OSMODULE_H\n#define Py_OSMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if !def"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/parsetok.h",
"chars": 2958,
"preview": "/* Parser-tokenizer link interface */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_PARSETOK_H\n#define Py_PARSETOK_H\n#ifdef __cplus"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/patchlevel.h",
"chars": 1297,
"preview": "\n/* Python version identification scheme.\n\n When the major or minor version changes, the VERSION variable in\n config"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/picklebufobject.h",
"chars": 847,
"preview": "/* PickleBuffer object. This is built-in for ease of use from third-party\n * C extensions.\n */\n\n#ifndef Py_PICKLEBUFOBJE"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/py_curses.h",
"chars": 2477,
"preview": "\n#ifndef Py_CURSES_H\n#define Py_CURSES_H\n\n#ifdef __APPLE__\n/*\n** On Mac OS X 10.2 [n]curses.h and stdlib.h use different"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyarena.h",
"chars": 2744,
"preview": "/* An arena-like memory interface for the compiler.\n */\n\n#ifndef Py_LIMITED_API\n#ifndef Py_PYARENA_H\n#define Py_PYARENA_"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pycapsule.h",
"chars": 1726,
"preview": "\n/* Capsule objects let you wrap a C \"void *\" pointer in a Python\n object. They're a way of passing data through the "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyconfig.h",
"chars": 47437,
"preview": "/* pyconfig.h. Generated from pyconfig.h.in by configure. */\n/* pyconfig.h.in. Generated from configure.ac by autohea"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyctype.h",
"chars": 1320,
"preview": "#ifndef Py_LIMITED_API\n#ifndef PYCTYPE_H\n#define PYCTYPE_H\n\n#define PY_CTF_LOWER 0x01\n#define PY_CTF_UPPER 0x02\n#defin"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pydebug.h",
"chars": 1214,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_PYDEBUG_H\n#define Py_PYDEBUG_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* These global"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pydtrace.h",
"chars": 2413,
"preview": "/* Static DTrace probes interface */\n\n#ifndef Py_DTRACE_H\n#define Py_DTRACE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#i"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyerrors.h",
"chars": 12786,
"preview": "#ifndef Py_ERRORS_H\n#define Py_ERRORS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Error handling definitions */\n\nPyAPI_"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyexpat.h",
"chars": 2450,
"preview": "/* Stuff to export relevant 'expat' entry points from pyexpat to other\n * parser modules, such as cElementTree. */\n\n/* n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyfpe.h",
"chars": 341,
"preview": "#ifndef Py_PYFPE_H\n#define Py_PYFPE_H\n\n/* These macros used to do something when Python was built with --with-fpectl,\n *"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyhash.h",
"chars": 4140,
"preview": "#ifndef Py_HASH_H\n\n#define Py_HASH_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* Helpers for hash functions */\n#ifndef Py"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pylifecycle.h",
"chars": 2081,
"preview": "\n/* Interfaces to configure, query, create & destroy the Python runtime */\n\n#ifndef Py_PYLIFECYCLE_H\n#define Py_PYLIFECY"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pymacconfig.h",
"chars": 2989,
"preview": "#ifndef PYMACCONFIG_H\n#define PYMACCONFIG_H\n /*\n * This file moves some of the autoconf magic to compile-time\n "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pymacro.h",
"chars": 3778,
"preview": "#ifndef Py_PYMACRO_H\n#define Py_PYMACRO_H\n\n/* Minimum value between x and y */\n#define Py_MIN(x, y) (((x) > (y)) ? (y) :"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pymath.h",
"chars": 8312,
"preview": "#ifndef Py_PYMATH_H\n#define Py_PYMATH_H\n\n#include \"pyconfig.h\" /* include for defines */\n\n/*****************************"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pymem.h",
"chars": 5406,
"preview": "/* The PyMem_ family: low-level memory allocation interfaces.\n See objimpl.h for the PyObject_ memory family.\n*/\n\n#if"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pyport.h",
"chars": 30221,
"preview": "#ifndef Py_PYPORT_H\n#define Py_PYPORT_H\n\n#include \"pyconfig.h\" /* include for defines */\n\n#include <inttypes.h>\n\n\n/* Def"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pystate.h",
"chars": 4686,
"preview": "/* Thread and interpreter state structures and their interfaces */\n\n\n#ifndef Py_PYSTATE_H\n#define Py_PYSTATE_H\n#ifdef __"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pystrcmp.h",
"chars": 436,
"preview": "#ifndef Py_STRCMP_H\n#define Py_STRCMP_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPyAPI_FUNC(int) PyOS_mystrnicmp(const c"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pystrhex.h",
"chars": 849,
"preview": "#ifndef Py_STRHEX_H\n#define Py_STRHEX_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\n/* Returns a str"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pystrtod.h",
"chars": 1483,
"preview": "#ifndef Py_STRTOD_H\n#define Py_STRTOD_H\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\nPyAPI_FUNC(double) PyOS_string_to_doub"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pythonrun.h",
"chars": 7645,
"preview": "\n/* Interfaces to parse and execute pieces of python code */\n\n#ifndef Py_PYTHONRUN_H\n#define Py_PYTHONRUN_H\n#ifdef __cpl"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pythread.h",
"chars": 5660,
"preview": "\n#ifndef Py_PYTHREAD_H\n#define Py_PYTHREAD_H\n\ntypedef void *PyThread_type_lock;\ntypedef void *PyThread_type_sema;\n\n#ifde"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/pytime.h",
"chars": 8926,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_PYTIME_H\n#define Py_PYTIME_H\n\n#include \"pyconfig.h\" /* include for defines */\n#include"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/rangeobject.h",
"chars": 629,
"preview": "\n/* Range object interface */\n\n#ifndef Py_RANGEOBJECT_H\n#define Py_RANGEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/setobject.h",
"chars": 3362,
"preview": "/* Set object interface */\n\n#ifndef Py_SETOBJECT_H\n#define Py_SETOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifnde"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/sliceobject.h",
"chars": 2517,
"preview": "#ifndef Py_SLICEOBJECT_H\n#define Py_SLICEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/* The unique ellipsis object "
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/structmember.h",
"chars": 2030,
"preview": "#ifndef Py_STRUCTMEMBER_H\n#define Py_STRUCTMEMBER_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n\n/* Interface to map C struc"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/structseq.h",
"chars": 1377,
"preview": "\n/* Named tuple object interface */\n\n#ifndef Py_STRUCTSEQ_H\n#define Py_STRUCTSEQ_H\n#ifdef __cplusplus\nextern \"C\" {\n#endi"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/symtable.h",
"chars": 5308,
"preview": "#ifndef Py_LIMITED_API\n#ifndef Py_SYMTABLE_H\n#define Py_SYMTABLE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#include \"Pyt"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/sysmodule.h",
"chars": 1242,
"preview": "\n/* System module interface */\n\n#ifndef Py_SYSMODULE_H\n#define Py_SYSMODULE_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nPy"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/token.h",
"chars": 2429,
"preview": "/* Auto-generated by Tools/scripts/generate_token.py */\n\n/* Token types */\n#ifndef Py_LIMITED_API\n#ifndef Py_TOKEN_H\n#de"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/traceback.h",
"chars": 601,
"preview": "#ifndef Py_TRACEBACK_H\n#define Py_TRACEBACK_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nstruct _frame;\n\n/* Traceback inter"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/tracemalloc.h",
"chars": 1114,
"preview": "#ifndef Py_TRACEMALLOC_H\n#define Py_TRACEMALLOC_H\n\n#ifndef Py_LIMITED_API\n/* Track an allocated memory block in the trac"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/tupleobject.h",
"chars": 1661,
"preview": "/* Tuple object interface */\n\n#ifndef Py_TUPLEOBJECT_H\n#define Py_TUPLEOBJECT_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/typeslots.h",
"chars": 2253,
"preview": "/* Do not renumber the file; these numbers are part of the stable ABI. */\n/* Disabled, see #10181 */\n#undef Py_bf_getbuf"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/ucnhash.h",
"chars": 1056,
"preview": "/* Unicode name database interface */\n#ifndef Py_LIMITED_API\n#ifndef Py_UCNHASH_H\n#define Py_UCNHASH_H\n#ifdef __cplusplu"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/unicodeobject.h",
"chars": 35732,
"preview": "#ifndef Py_UNICODEOBJECT_H\n#define Py_UNICODEOBJECT_H\n\n#include <stdarg.h>\n\n/*\n\nUnicode implementation based on original"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/warnings.h",
"chars": 1776,
"preview": "#ifndef Py_WARNINGS_H\n#define Py_WARNINGS_H\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#ifndef Py_LIMITED_API\nPyAPI_FUNC(Py"
},
{
"path": "python-for-ios/dist/root/python3/include/python3.8/weakrefobject.h",
"chars": 2866,
"preview": "/* Weak references objects for Python. */\n\n#ifndef Py_WEAKREFOBJECT_H\n#define Py_WEAKREFOBJECT_H\n#ifdef __cplusplus\nexte"
},
{
"path": "python-for-ios/dist/root/python3/lib/bootstrap.py",
"chars": 1015,
"preview": "\"\"\"\nThis file is executed when the Python interpreter is started.\nUse this file to configure all your necessary python c"
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Makefile",
"chars": 99152,
"preview": "# Generated automatically from Makefile.pre by makesetup.\n# Top-level Makefile for Python\n#\n# As distributed, this file "
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Setup",
"chars": 14786,
"preview": "# -*- makefile -*-\n# The file Setup is used by the makesetup script to construct the files\n# Makefile and config.c, from"
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/Setup.local",
"chars": 3164,
"preview": "#####################################################################\n# Static compilation instructions for all binary m"
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/config.c",
"chars": 6802,
"preview": "/* Generated automatically from ./Modules/config.c.in by makesetup. */\n/* -*- C -*- ************************************"
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/config-3.8-darwin/python-config.py",
"chars": 2189,
"preview": "#!/Users/jventura/Documents/Projectos/pybridge_ios/dist/root/python3/bin/python3.8\n# -*- python -*-\n\n# Keep this script "
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/site-packages/README.txt",
"chars": 119,
"preview": "This directory exists so that 3rd party packages can be installed\nhere. Read the source for site.py for more details.\n"
},
{
"path": "python-for-ios/dist/root/python3/lib/python3.8/site-packages/_sqlite3/__init__.py",
"chars": 69,
"preview": "__version__ = 'kivy-ios'\nfrom ._sqlite3 import * # noqa: F401, F403\n"
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the joaoventura/pybridge-ios GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 163 files (42.8 MB), approximately 234.0k tokens, and a symbol index with 454 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.