File: CanonicalOperation.swift

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (67 lines) | stat: -rw-r--r-- 2,346 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import WIT

enum StaticMetaOperand: CustomStringConvertible {
    /// A case that represents a core value stored in the given variable name
    case variable(String)
    case literal(String)
    case call(_ name: String, arguments: [(String?, StaticMetaOperand)])
    indirect case forceUnwrap(StaticMetaOperand)
    indirect case liftOptional(isSome: StaticMetaOperand, payload: StaticMetaOperand)
    indirect case lowerBool(StaticMetaOperand)
    indirect case accessField(StaticMetaOperand, name: String)

    static func call(_ name: String, arguments: [StaticMetaOperand]) -> StaticMetaOperand {
        return .call(name, arguments: arguments.map { (nil, $0) })
    }

    var description: String {
        switch self {
        case .variable(let label): return label
        case .literal(let content): return content
        case .call(let typeName, let arguments):
            let arguments = arguments.map { label, operand in
                if let label { return "\(label): \(operand)" }
                return operand.description
            }
            return "\(typeName)(\(arguments.joined(separator: ", ")))"
        case .forceUnwrap(let operand):
            return "(\(operand))!"
        case .liftOptional(let isSome, let payload):
            return "\(isSome) == 0 ? nil : \(payload)"
        case .lowerBool(let value):
            return "Int32(\(value) ? 1 : 0)"
        case .accessField(let base, let name):
            return "\(base).\(name)"
        }
    }
}

struct StaticMetaPointer: Strideable, CustomStringConvertible {
    typealias Stride = Int
    let basePointerVar: String
    let offset: Int

    init(basePointerVar: String, offset: Int) {
        self.basePointerVar = basePointerVar
        self.offset = offset
    }

    func advanced(by n: Stride) -> StaticMetaPointer {
        return StaticMetaPointer(basePointerVar: basePointerVar, offset: offset + n)
    }

    func distance(to other: StaticMetaPointer) -> Int {
        assert(basePointerVar == other.basePointerVar)
        return offset - other.offset
    }

    var description: String {
        "\(basePointerVar).advanced(by: \(offset))"
    }
}

/// Meta view of ``WasmKit/CanonicalCallContext``
struct StaticMetaCanonicalCallContext {
    /// The variable name of the ``WasmKit/CanonicalCallContext``
    let contextVar: String
}