File: InstructionSupport.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 (43 lines) | stat: -rw-r--r-- 1,605 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
extension Instruction {
    struct Memarg: Equatable {
        let offset: UInt64
        let align: UInt32
    }

    struct BlockType: Equatable {
        let parameters: UInt16
        let results: UInt16
    }

    struct BrTable: Equatable {
        private let bufferBase: UnsafePointer<LabelIndex>
        private let bufferCount: UInt32
        var labelIndices: UnsafeBufferPointer<LabelIndex> {
            UnsafeBufferPointer(start: bufferBase, count: Int(bufferCount - 1))
        }
        var defaultIndex: LabelIndex {
            bufferBase[Int(bufferCount - 1)]
        }

        init(labelIndices: [LabelIndex], defaultIndex: LabelIndex) {
            let buffer = UnsafeMutableBufferPointer<LabelIndex>.allocate(capacity: labelIndices.count + 1)
            for (index, labelindex) in labelIndices.enumerated() {
                buffer[index] = labelindex
            }
            buffer[labelIndices.count] = defaultIndex
            self.bufferBase = UnsafePointer(buffer.baseAddress!)
            self.bufferCount = UInt32(buffer.count)
        }

        static func == (lhs: Instruction.BrTable, rhs: Instruction.BrTable) -> Bool {
            lhs.labelIndices.baseAddress == rhs.labelIndices.baseAddress
        }
    }

    // Just for migration purpose
    static func control(_ x: Instruction) -> Instruction { x }
    static func numeric(_ x: Instruction) -> Instruction { x }
    static func parametric(_ x: Instruction) -> Instruction { x }
    static func variable(_ x: Instruction) -> Instruction { x }
    static func reference(_ x: Instruction) -> Instruction { x }
}