add ci workflow
authorMichael Wallner <mike@php.net>
Wed, 12 Jan 2022 16:07:43 +0000 (17:07 +0100)
committerMichael Wallner <mike@php.net>
Wed, 12 Jan 2022 16:07:43 +0000 (17:07 +0100)
.editorconfig
.github/workflows/ci.yml [new file with mode: 0644]
.gitmodules
ion.stub.php
ion_arginfo.h
scripts/ci [new submodule]
scripts/gen_github_workflow_ci.php [new file with mode: 0755]

index ac09c3a4727080648e78ae31bca5308076b0306b..c3c616c874a1237e334799a4ad507ddf25739321 100644 (file)
@@ -29,3 +29,6 @@ indent_size = 1
 
 [config.w32]
 end_of_line = crlf
+
+[scripts/gen_github*.php]
+indent_size = 2
\ No newline at end of file
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644 (file)
index 0000000..9702e99
--- /dev/null
@@ -0,0 +1,149 @@
+# generated file; do not edit!
+
+name: ci
+on:
+  workflow_dispatch:
+  push:
+  pull_request:
+
+jobs:
+  cur-0:
+    name: "cur-0 (8.1)"
+    env:
+      PHP: "8.1"
+      enable_debug: "yes"
+      enable_zts: "yes"
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+
+  cur-1:
+    name: "cur-1 (8.1)"
+    env:
+      PHP: "8.1"
+      enable_debug: "no"
+      enable_zts: "yes"
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+
+  cur-2:
+    name: "cur-2 (8.1)"
+    env:
+      PHP: "8.1"
+      enable_debug: "yes"
+      enable_zts: "no"
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+
+  cur-3:
+    name: "cur-3 (8.1)"
+    env:
+      PHP: "8.1"
+      enable_debug: "no"
+      enable_zts: "no"
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+
+  cur-cov-0:
+    name: "cur-cov-0 (8.1)"
+    env:
+      CFLAGS: "-O0 -g --coverage"
+      CXXFLAGS: "-O0 -g --coverage"
+      PHP: "8.1"
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+      - name: Coverage
+        if: success()
+        run: |
+          cd src/.libs
+          bash <(curl -s https://codecov.io/bash) -X xcode -X coveragepy
+
index b1452eb78dba76f6a4f2fec3b759121eb7a505b2..9b0ae05731657b887c39af1afdeb096376f5a2b0 100644 (file)
@@ -2,3 +2,6 @@
        path = ion-c
        url = https://github.com/m6w6/ion-c
        branch = all-fixes-merged
+[submodule "scripts/ci"]
+       path = scripts/ci
+       url = https://github.com/m6w6/pecl-ci
index 750ee9c0bf6dd5166eeb1bf4011d3cc3e6d9a64a..aa897366bd48ed07f1d860f864643c55722f2e41 100644 (file)
@@ -5,8 +5,20 @@
  * @generate-function-entries static
  */
 
-
 namespace ion;
+
+function serialize(mixed $data, ?Serializer $serializer = null) : string {}
+/** @param string|resource $data */
+function unserialize($data, ?Unserializer $unserializer = null) : mixed {}
+
+interface Serializer {
+    public function serialize(mixed $data) : string;
+}
+interface Unserializer {
+    /** @param string|resource $data */
+    public function unserialize($data) : mixed;
+}
+
 enum Type : int {
     case Null       = 0x000;
     case Bool       = 0x100;
@@ -27,7 +39,151 @@ enum Type : int {
     case NONE       =-0x200;
 }
 
+class Symbol {
+    public function __construct(
+        public readonly ?string $value = null,
+        public readonly int $sid = -1,
+        public readonly ?Symbol\ImportLocation $importLocation = null,
+    ) {}
+
+    public function equals(Symbol $symbol): bool {}
+    public function __toString() : string {}
+    /** @alias ion\Symbol::__toString */
+    public function toString() : string {}
+}
+
+class Catalog implements Countable {
+    /** Internal cache */
+    private array $symbolTables = [];
+
+    public function __construct() {}
+
+    public function count() : int {}
+
+    public function add(Symbol\Table $table) : void {}
+    public function remove(Symbol\Table|string $table) : bool {}
+
+    public function find(string $name, int $version = 0) : ?Symbol\Table {}
+    public function findBest(string $name, int $version = 0) : ?Symbol\Table {}
+}
+
+class LOB {
+    public function __construct(
+        public readonly string $value,
+        public readonly Type $type = Type::CLob,
+    ) {
+    }
+}
+
+class Decimal {
+    public function __construct(
+        public readonly string|int $number,
+        public readonly ?Decimal\Context $context = null,
+    ) {}
+
+    public function equals(Decimal $decimal) : bool {}
+    public function isInt() : bool {}
+
+    public function __toString() : string {}
+    /** @alias ion\Decimal::__toString */
+    public function toString() : string {}
+    public function toInt() : int {}
+}
+
+class Timestamp extends \DateTime {
+    public readonly int $precision;
+    public readonly string $format;
+
+    public function __construct(
+        Timestamp\Precision|int $precision,
+        Timestamp\Format|string|null $format = null,
+        ?string $datetime = null,
+        ?\DateTimeZone $timezone = null,
+    ) {}
+
+    public function __toString() : string {}
+}
+
+interface Reader extends \RecursiveIterator {
+    public function getType() : Type;
+    public function hasAnnotations() : bool;
+    public function hasAnnotation(string $annotation) : bool;
+    public function isNull() : bool;
+    public function isInStruct() : bool;
+    public function getFieldName() : string;
+    public function getFieldNameSymbol() : Symbol;
+    public function getAnnotations() : array;
+    public function getAnnotationSymbols() : array;
+    public function countAnnotations() : int;
+    public function getAnnotation(int $index) : string;
+    public function getAnnotationSymbol(int $index) : Symbol;
+
+    public function readNull() : Type;
+    public function readBool() : bool;
+    public function readInt() : int|string;
+    public function readFloat() : float;
+    public function readDecimal() : Decimal;
+    public function readTimestamp() : Timestamp;
+    public function readSymbol() : Symbol;
+    public function readString() : string;
+    /** @param ref $string */
+    public function readStringPart(&$string, int $length = 0x1000) : bool;
+    public function readLob() : string;
+    /** @param ref $string */
+    public function readLobPart(&$string, int $length = 0x1000) : bool;
+
+    public function getPosition() : int;
+    public function getDepth() : int;
+
+    public function seek(int $offset, int $length = -1) : void;
+    /*
+    public function getSymbolTable() : SymbolTable;
+    public function setSymbolTable(SymbolTable $table) : void;
+    */
+    public function getValueOffset() : int;
+    public function getValueLength() : int;
+}
+
+interface Writer {
+    public function writeNull() : void;
+    public function writeTypedNull(Type $type) : void;
+    public function writeBool(bool $value) : void;
+    public function writeInt(int|string $value) : void;
+    public function writeFloat(float $value) : void;
+    public function writeDecimal(Decimal|string $value) : void;
+    public function writeTimestamp(Timestamp|string $value) : void;
+    public function writeSymbol(Symbol|string $value) : void;
+    public function writeString(string $value) : void;
+    public function writeCLob(string $value) : void;
+    public function writeBLob(string $value) : void;
+
+    public function startLob(Type $type) : void;
+    public function appendLob(string $data) : void;
+    public function finishLob() : void;
+
+    public function startContainer(Type $type) : void;
+    public function finishContainer() : void;
+
+    public function writeFieldName(string $name) : void;
+
+    public function writeAnnotation(Symbol|string ...$annotation) : void;
+
+    public function getDepth() : int;
+    public function flush() : int;
+    public function finish() : int;
+
+    // public function writeOne(Reader $reader) : void;
+    // public function writeAll(Reader $reader) : void;
+
+    // public function getCatalog() : Catalog;
+    // public function setCatalog(Catalog $catalog) : void;
+
+    // public function getSymbolTable() : Symbol\Table;
+    // puvlic function setSymbolTable(Symbol\Table $table) : void;
+}
+
 namespace ion\Symbol;
+
 class ImportLocation {
     public function __construct(
         public readonly string $name,
@@ -35,14 +191,25 @@ class ImportLocation {
     ) {}
 }
 
-namespace ion\Symbol;
 interface Enum {
     public function toSymbol() : \ion\Symbol;
     public function toSID() : int;
     public function toString() : string;
 }
 
+interface Table {
+    public function getMaxId() : int;
+
+    public function add(\ion\Symbol|string $symbol) : int;
+    public function find(string|int $id) : ?\ion\Symbol;
+    public function findLocal(string|int $id) : ?\ion\Symbol;
+}
+
 namespace ion\Symbol\Table;
+
+function PHP() : \ion\Symbol\Table {}
+function System() : \ion\Symbol\Table {}
+
 enum System : string implements \ion\Symbol\Enum {
     case Ion                = '$ion';
     case Ivm_1_0            = '$ion_1_0';
@@ -62,7 +229,6 @@ enum System : string implements \ion\Symbol\Enum {
     public function toString() : string {}
 }
 
-namespace ion\Symbol\Table;
 enum PHP : string implements \ion\Symbol\Enum {
     case PHP            = 'PHP';
     case Reference      = 'R';
@@ -83,34 +249,6 @@ enum PHP : string implements \ion\Symbol\Enum {
     public function toString() : string {}
 }
 
-namespace ion;
-class Symbol {
-    public function __construct(
-        public readonly ?string $value = null,
-        public readonly int $sid = -1,
-        public readonly ?Symbol\ImportLocation $importLocation = null,
-    ) {}
-
-    public function equals(Symbol $symbol): bool {}
-    public function __toString() : string {}
-    /** @alias ion\Symbol::__toString */
-    public function toString() : string {}
-}
-
-namespace ion\Symbol;
-interface Table {
-    public function getMaxId() : int;
-
-    public function add(\ion\Symbol|string $symbol) : int;
-    public function find(string|int $id) : ?\ion\Symbol;
-    public function findLocal(string|int $id) : ?\ion\Symbol;
-}
-
-namespace ion\Symbol\Table;
-function PHP() : \ion\Symbol\Table {}
-function System() : \ion\Symbol\Table {}
-
-namespace ion\Symbol\Table;
 class Local implements \ion\Symbol\Table {
     /** Internal cache */
     private array $imports = [];
@@ -131,7 +269,6 @@ class Local implements \ion\Symbol\Table {
     public function findLocal(string|int $id) : ?\ion\Symbol {}
 }
 
-namespace ion\Symbol\Table;
 class Shared implements \ion\Symbol\Table {
     public function __construct(
         public readonly string $name,
@@ -153,44 +290,8 @@ class Shared implements \ion\Symbol\Table {
     public function findLocal(string|int $id) : ?\ion\Symbol {}
 }
 
-namespace ion;
-class Catalog implements Countable {
-    /** Internal cache */
-    private array $symbolTables = [];
-
-    public function __construct() {}
-
-    public function count() : int {}
-
-    public function add(Symbol\Table $table) : void {}
-    public function remove(Symbol\Table|string $table) : bool {}
-
-    public function find(string $name, int $version = 0) : ?Symbol\Table {}
-    public function findBest(string $name, int $version = 0) : ?Symbol\Table {}
-}
-
-namespace ion;
-class LOB {
-    public function __construct(
-        public readonly string $value,
-        public readonly Type $type = Type::CLob,
-    ) {
-    }
-}
-
-namespace ion\Decimal\Context;
-enum Rounding : int {
-    case Ceiling    = 0;
-    case Up         = 1;
-    case HalfUp     = 2;
-    case HalfEven   = 3;
-    case HalfDown   = 4;
-    case Down       = 5;
-    case Floor      = 6;
-    case Down05Up   = 7;
-}
-
 namespace ion\Decimal;
+
 class Context {
     public function __construct(
         public readonly int $digits,
@@ -206,23 +307,21 @@ class Context {
     public static function DecMax(Context\Rounding|int $round = Context\Rounding::HalfEven) : Context {}
 }
 
-namespace ion;
-class Decimal {
-    public function __construct(
-        public readonly string|int $number,
-        public readonly ?Decimal\Context $context = null,
-    ) {}
-
-    public function equals(Decimal $decimal) : bool {}
-    public function isInt() : bool {}
+namespace ion\Decimal\Context;
 
-    public function __toString() : string {}
-    /** @alias ion\Decimal::__toString */
-    public function toString() : string {}
-    public function toInt() : int {}
+enum Rounding : int {
+    case Ceiling    = 0;
+    case Up         = 1;
+    case HalfUp     = 2;
+    case HalfEven   = 3;
+    case HalfDown   = 4;
+    case Down       = 5;
+    case Floor      = 6;
+    case Down05Up   = 7;
 }
 
 namespace ion\Timestamp;
+
 enum Precision : int {
     case Year           = 0x1;
     case Month          = 0x1|0x2;
@@ -235,7 +334,6 @@ enum Precision : int {
     case FracTZ         = 0x1|0x2|0x4|0x10|0x20|0x40|0x80;
 }
 
-namespace ion\Timestamp;
 enum Format : string {
     case Year           = "Y\T";
     case Month          = "Y-m\T";
@@ -247,64 +345,9 @@ enum Format : string {
     case SecTZ          = "Y-m-d\TH:i:sP";
     case FracTZ         = "Y-m-d\TH:i:s.vP";
 }
-namespace ion;
-class Timestamp extends \DateTime {
-    public readonly int $precision;
-    public readonly string $format;
-
-    public function __construct(
-        Timestamp\Precision|int $precision,
-        Timestamp\Format|string|null $format = null,
-        ?string $datetime = null,
-        ?\DateTimeZone $timezone = null,
-    ) {}
-
-    public function __toString() : string {}
-}
-
-
-namespace ion;
-interface Reader extends \RecursiveIterator {
-    public function getType() : Type;
-    public function hasAnnotations() : bool;
-    public function hasAnnotation(string $annotation) : bool;
-    public function isNull() : bool;
-    public function isInStruct() : bool;
-    public function getFieldName() : string;
-    public function getFieldNameSymbol() : Symbol;
-    public function getAnnotations() : array;
-    public function getAnnotationSymbols() : array;
-    public function countAnnotations() : int;
-    public function getAnnotation(int $index) : string;
-    public function getAnnotationSymbol(int $index) : Symbol;
-
-    public function readNull() : Type;
-    public function readBool() : bool;
-    public function readInt() : int|string;
-    public function readFloat() : float;
-    public function readDecimal() : Decimal;
-    public function readTimestamp() : Timestamp;
-    public function readSymbol() : Symbol;
-    public function readString() : string;
-    /** @param ref $string */
-    public function readStringPart(&$string, int $length = 0x1000) : bool;
-    public function readLob() : string;
-    /** @param ref $string */
-    public function readLobPart(&$string, int $length = 0x1000) : bool;
-
-    public function getPosition() : int;
-    public function getDepth() : int;
-
-    public function seek(int $offset, int $length = -1) : void;
-    /*
-    public function getSymbolTable() : SymbolTable;
-    public function setSymbolTable(SymbolTable $table) : void;
-    */
-    public function getValueOffset() : int;
-    public function getValueLength() : int;
-}
 
 namespace ion\Reader;
+
 class Options {
     public function __construct(
         public readonly ?\ion\Catalog $catalog = null,
@@ -323,7 +366,6 @@ class Options {
     ) {}
 }
 
-namespace ion\Reader;
 abstract class Reader implements \ion\Reader {
     public readonly ?Options $options;
 
@@ -374,12 +416,22 @@ abstract class Reader implements \ion\Reader {
     public function getValueOffset() : int {}
     public function getValueLength() : int {}
 }
-namespace ion\Reader;
+
 interface Buffer extends \ion\Reader {
     public function getBuffer() : string;
 }
 
+interface Stream extends \ion\Reader {
+    /** @return resource */
+    public function getStream();
+    /** @param resource $stream */
+    public function resetStream($stream) : void;
+    /** @param resource $stream */
+    public function resetStreamWithLength($stream, int $length) : void;
+}
+
 namespace ion\Reader\Buffer;
+
 class Reader extends \ion\Reader\Reader implements \ion\Reader\Buffer {
     public function __construct(
         string $buffer,
@@ -389,17 +441,8 @@ class Reader extends \ion\Reader\Reader implements \ion\Reader\Buffer {
     public function getBuffer() : string {}
 }
 
-namespace ion\Reader;
-interface Stream extends \ion\Reader {
-    /** @return resource */
-    public function getStream();
-    /** @param resource $stream */
-    public function resetStream($stream) : void;
-    /** @param resource $stream */
-    public function resetStreamWithLength($stream, int $length) : void;
-}
-
 namespace ion\Reader\Stream;
+
 class Reader extends \ion\Reader\Reader implements \ion\Reader\Stream {
     /** @param resource $stream */
     public function __construct(
@@ -416,6 +459,7 @@ class Reader extends \ion\Reader\Reader implements \ion\Reader\Stream {
 }
 
 namespace ion\Writer;
+
 class Options {
     public function __construct(
         public readonly ?\ion\Catalog $catalog = null,
@@ -436,46 +480,6 @@ class Options {
     ) {}
 }
 
-namespace ion;
-interface Writer {
-    public function writeNull() : void;
-    public function writeTypedNull(Type $type) : void;
-    public function writeBool(bool $value) : void;
-    public function writeInt(int|string $value) : void;
-    public function writeFloat(float $value) : void;
-    public function writeDecimal(Decimal|string $value) : void;
-    public function writeTimestamp(Timestamp|string $value) : void;
-    public function writeSymbol(Symbol|string $value) : void;
-    public function writeString(string $value) : void;
-    public function writeCLob(string $value) : void;
-    public function writeBLob(string $value) : void;
-
-    public function startLob(Type $type) : void;
-    public function appendLob(string $data) : void;
-    public function finishLob() : void;
-
-    public function startContainer(Type $type) : void;
-    public function finishContainer() : void;
-
-    public function writeFieldName(string $name) : void;
-
-    public function writeAnnotation(Symbol|string ...$annotation) : void;
-
-    public function getDepth() : int;
-    public function flush() : int;
-    public function finish() : int;
-
-    // public function writeOne(Reader $reader) : void;
-    // public function writeAll(Reader $reader) : void;
-
-    // public function getCatalog() : Catalog;
-    // public function setCatalog(Catalog $catalog) : void;
-
-    // public function getSymbolTable() : Symbol\Table;
-    // puvlic function setSymbolTable(Symbol\Table $table) : void;
-}
-
-namespace ion\Writer;
 abstract class Writer implements \ion\Writer {
     public function writeNull() : void {}
     public function writeTypedNull(\ion\Type $type) : void {}
@@ -508,13 +512,18 @@ abstract class Writer implements \ion\Writer {
     // public function writeAll(\ion\Reader $reader) : void {}
 }
 
-namespace ion\Writer;
 interface Buffer extends \ion\Writer {
     public function getBuffer() : string;
     public function resetBuffer() : void;
 }
 
+interface Stream extends \ion\Writer {
+    /** @return resource */
+    public function getStream();
+}
+
 namespace ion\Writer\Buffer;
+
 class Writer extends \ion\Writer\Writer implements \ion\Writer\Buffer {
     public function __construct(
         ?\ion\Writer\Options $options = null,
@@ -524,13 +533,8 @@ class Writer extends \ion\Writer\Writer implements \ion\Writer\Buffer {
     public function resetBuffer() : void {}
 }
 
-namespace ion\Writer;
-interface Stream extends \ion\Writer {
-    /** @return resource */
-    public function getStream();
-}
-
 namespace ion\Writer\Stream;
+
 class Writer extends \ion\Writer\Writer implements \ion\Writer\Stream {
     /** @param resource $stream */
     public function __construct(
@@ -541,17 +545,8 @@ class Writer extends \ion\Writer\Writer implements \ion\Writer\Stream {
     public function getStream() {}
 }
 
-namespace ion;
-interface Serializer {
-    public function serialize(mixed $data) : string;
-}
-namespace ion;
-interface Unserializer {
-    /** @param string|resource $data */
-    public function unserialize($data) : mixed;
-}
-
 namespace ion\Serializer;
+
 class PHP implements \ion\Serializer {
     public function __construct(
         public readonly ?\ion\Writer\Options $writerOptions = null,
@@ -563,6 +558,7 @@ class PHP implements \ion\Serializer {
 }
 
 namespace ion\Unserializer;
+
 class PHP implements \ion\Unserializer {
     public function __construct(
         public readonly ?\ion\Reader\Options $readerOptions = null,
@@ -573,8 +569,3 @@ class PHP implements \ion\Unserializer {
     /** @param string|resource $data */
     public function unserialize($data) : mixed {}
 }
-
-namespace ion;
-function serialize(mixed $data, ?Serializer $serializer = null) : string {}
-/** @param string|resource $data */
-function unserialize($data, ?Unserializer $unserializer = null) : mixed {}
index d23af5cc53101a6dffcfba17ae522c07481ad613..d347a575224d901d3025a296ce09a3bea64686a7 100644 (file)
@@ -1,19 +1,27 @@
 /* This is a generated file, edit the .stub.php file instead.
- * Stub hash: 3308325e021d22db87092646b58d431f8f988532 */
+ * Stub hash: fd212a098afd1b87f56162838ed409653a9c7a69 */
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ion_serialize, 0, 1, IS_STRING, 0)
+       ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0)
+       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, serializer, ion\\Serializer, 1, "null")
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ion_unserialize, 0, 1, IS_MIXED, 0)
+       ZEND_ARG_INFO(0, data)
+       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, unserializer, ion\\Unserializer, 1, "null")
+ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_ion_Symbol_Table_PHP, 0, 0, ion\\Symbol\\Table, 0)
 ZEND_END_ARG_INFO()
 
 #define arginfo_ion_Symbol_Table_System arginfo_ion_Symbol_Table_PHP
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ion_serialize, 0, 1, IS_STRING, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Serializer_serialize, 0, 1, IS_STRING, 0)
        ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0)
-       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, serializer, ion\\Serializer, 1, "null")
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ion_unserialize, 0, 1, IS_MIXED, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Unserializer_unserialize, 0, 1, IS_MIXED, 0)
        ZEND_ARG_INFO(0, data)
-       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, unserializer, ion\\Unserializer, 1, "null")
 ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol___construct, 0, 0, 0)
@@ -31,78 +39,16 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Symbol_toString arginfo_class_ion_Symbol___toString
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol_ImportLocation___construct, 0, 0, 2)
-       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
-       ZEND_ARG_TYPE_INFO(0, location, IS_LONG, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Symbol_Enum_toSymbol, 0, 0, ion\\Symbol, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Symbol_Enum_toSID, 0, 0, IS_LONG, 0)
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Symbol_Enum_toString arginfo_class_ion_Symbol___toString
-
-#define arginfo_class_ion_Symbol_Table_System_toSymbol arginfo_class_ion_Symbol_Enum_toSymbol
-
-#define arginfo_class_ion_Symbol_Table_System_toSID arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Symbol_Table_System_toString arginfo_class_ion_Symbol___toString
-
-#define arginfo_class_ion_Symbol_Table_PHP_toSymbol arginfo_class_ion_Symbol_Enum_toSymbol
-
-#define arginfo_class_ion_Symbol_Table_PHP_toSID arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Symbol_Table_PHP_toString arginfo_class_ion_Symbol___toString
-
-#define arginfo_class_ion_Symbol_Table_getMaxId arginfo_class_ion_Symbol_Enum_toSID
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Symbol_Table_add, 0, 1, IS_LONG, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, symbol, ion\\Symbol, MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Symbol_Table_find, 0, 1, ion\\Symbol, 1)
-       ZEND_ARG_TYPE_MASK(0, id, MAY_BE_STRING|MAY_BE_LONG, NULL)
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Catalog___construct, 0, 0, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Symbol_Table_findLocal arginfo_class_ion_Symbol_Table_find
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol_Table_Local___construct, 0, 0, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Catalog_count, 0, 0, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Symbol_Table_Local_import, 0, 1, IS_VOID, 0)
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Catalog_add, 0, 1, IS_VOID, 0)
        ZEND_ARG_OBJ_INFO(0, table, ion\\Symbol\\Table, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Symbol_Table_Local_getMaxId arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Symbol_Table_Local_add arginfo_class_ion_Symbol_Table_add
-
-#define arginfo_class_ion_Symbol_Table_Local_find arginfo_class_ion_Symbol_Table_find
-
-#define arginfo_class_ion_Symbol_Table_Local_findLocal arginfo_class_ion_Symbol_Table_find
-
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol_Table_Shared___construct, 0, 0, 1)
-       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
-       ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_LONG, 0, "1")
-       ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, symbols, IS_ARRAY, 1, "null")
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Symbol_Table_Shared_getMaxId arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Symbol_Table_Shared_add arginfo_class_ion_Symbol_Table_add
-
-#define arginfo_class_ion_Symbol_Table_Shared_find arginfo_class_ion_Symbol_Table_find
-
-#define arginfo_class_ion_Symbol_Table_Shared_findLocal arginfo_class_ion_Symbol_Table_find
-
-#define arginfo_class_ion_Catalog___construct arginfo_class_ion_Symbol_Table_Local___construct
-
-#define arginfo_class_ion_Catalog_count arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Catalog_add arginfo_class_ion_Symbol_Table_Local_import
-
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Catalog_remove, 0, 1, _IS_BOOL, 0)
        ZEND_ARG_OBJ_TYPE_MASK(0, table, ion\\Symbol\\Table, MAY_BE_STRING, NULL)
 ZEND_END_ARG_INFO()
@@ -119,25 +65,6 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_LOB___construct, 0, 0, 1)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, type, ion\\Type, 0, "ion\\Type::CLob")
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Decimal_Context___construct, 0, 0, 5)
-       ZEND_ARG_TYPE_INFO(0, digits, IS_LONG, 0)
-       ZEND_ARG_TYPE_INFO(0, eMax, IS_LONG, 0)
-       ZEND_ARG_TYPE_INFO(0, eMin, IS_LONG, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, round, ion\\Decimal\\Context\\Rounding, MAY_BE_LONG, NULL)
-       ZEND_ARG_TYPE_INFO(0, clamp, _IS_BOOL, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Decimal_Context_Dec32, 0, 0, ion\\Decimal\\Context, 0)
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Decimal_Context_Dec64 arginfo_class_ion_Decimal_Context_Dec32
-
-#define arginfo_class_ion_Decimal_Context_Dec128 arginfo_class_ion_Decimal_Context_Dec32
-
-ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Decimal_Context_DecMax, 0, 0, ion\\Decimal\\Context, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, round, ion\\Decimal\\Context\\Rounding, MAY_BE_LONG, "ion\\Decimal\\Context\\Rounding::HalfEven")
-ZEND_END_ARG_INFO()
-
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Decimal___construct, 0, 0, 1)
        ZEND_ARG_TYPE_MASK(0, number, MAY_BE_STRING|MAY_BE_LONG, NULL)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, context, ion\\Decimal\\Context, 1, "null")
@@ -154,7 +81,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Decimal_toString arginfo_class_ion_Symbol___toString
 
-#define arginfo_class_ion_Decimal_toInt arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Decimal_toInt arginfo_class_ion_Catalog_count
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Timestamp___construct, 0, 0, 1)
        ZEND_ARG_OBJ_TYPE_MASK(0, precision, ion\\Timestamp\\Precision, MAY_BE_LONG, NULL)
@@ -180,14 +107,15 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_getFieldName arginfo_class_ion_Symbol___toString
 
-#define arginfo_class_ion_Reader_getFieldNameSymbol arginfo_class_ion_Symbol_Enum_toSymbol
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Reader_getFieldNameSymbol, 0, 0, ion\\Symbol, 0)
+ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_getAnnotations, 0, 0, IS_ARRAY, 0)
 ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_getAnnotationSymbols arginfo_class_ion_Reader_getAnnotations
 
-#define arginfo_class_ion_Reader_countAnnotations arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_countAnnotations arginfo_class_ion_Catalog_count
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_getAnnotation, 0, 1, IS_STRING, 0)
        ZEND_ARG_TYPE_INFO(0, index, IS_LONG, 0)
@@ -213,7 +141,7 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Reader_readTimestamp, 0, 0, ion\\Timestamp, 0)
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Reader_readSymbol arginfo_class_ion_Symbol_Enum_toSymbol
+#define arginfo_class_ion_Reader_readSymbol arginfo_class_ion_Reader_getFieldNameSymbol
 
 #define arginfo_class_ion_Reader_readString arginfo_class_ion_Symbol___toString
 
@@ -226,18 +154,163 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_readLobPart arginfo_class_ion_Reader_readStringPart
 
-#define arginfo_class_ion_Reader_getPosition arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_getPosition arginfo_class_ion_Catalog_count
 
-#define arginfo_class_ion_Reader_getDepth arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_getDepth arginfo_class_ion_Catalog_count
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_seek, 0, 1, IS_VOID, 0)
        ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
        ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, length, IS_LONG, 0, "-1")
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Reader_getValueOffset arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_getValueOffset arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Reader_getValueLength arginfo_class_ion_Catalog_count
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeNull, 0, 0, IS_VOID, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeTypedNull, 0, 1, IS_VOID, 0)
+       ZEND_ARG_OBJ_INFO(0, type, ion\\Type, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeBool, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_INFO(0, value, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeInt, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeFloat, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeDecimal, 0, 1, IS_VOID, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Decimal, MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeTimestamp, 0, 1, IS_VOID, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Timestamp, MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeSymbol, 0, 1, IS_VOID, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Symbol, MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeString, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Writer_writeCLob arginfo_class_ion_Writer_writeString
+
+#define arginfo_class_ion_Writer_writeBLob arginfo_class_ion_Writer_writeString
+
+#define arginfo_class_ion_Writer_startLob arginfo_class_ion_Writer_writeTypedNull
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_appendLob, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Writer_finishLob arginfo_class_ion_Writer_writeNull
+
+#define arginfo_class_ion_Writer_startContainer arginfo_class_ion_Writer_writeTypedNull
+
+#define arginfo_class_ion_Writer_finishContainer arginfo_class_ion_Writer_writeNull
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeFieldName, 0, 1, IS_VOID, 0)
+       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeAnnotation, 0, 0, IS_VOID, 0)
+       ZEND_ARG_VARIADIC_OBJ_TYPE_MASK(0, annotation, ion\\Symbol, MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Writer_getDepth arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Writer_flush arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Writer_finish arginfo_class_ion_Catalog_count
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol_ImportLocation___construct, 0, 0, 2)
+       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+       ZEND_ARG_TYPE_INFO(0, location, IS_LONG, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Symbol_Enum_toSymbol arginfo_class_ion_Reader_getFieldNameSymbol
+
+#define arginfo_class_ion_Symbol_Enum_toSID arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Symbol_Enum_toString arginfo_class_ion_Symbol___toString
+
+#define arginfo_class_ion_Symbol_Table_getMaxId arginfo_class_ion_Catalog_count
+
+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Symbol_Table_add, 0, 1, IS_LONG, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, symbol, ion\\Symbol, MAY_BE_STRING, NULL)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Symbol_Table_find, 0, 1, ion\\Symbol, 1)
+       ZEND_ARG_TYPE_MASK(0, id, MAY_BE_STRING|MAY_BE_LONG, NULL)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Symbol_Table_findLocal arginfo_class_ion_Symbol_Table_find
+
+#define arginfo_class_ion_Symbol_Table_System_toSymbol arginfo_class_ion_Reader_getFieldNameSymbol
+
+#define arginfo_class_ion_Symbol_Table_System_toSID arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Symbol_Table_System_toString arginfo_class_ion_Symbol___toString
+
+#define arginfo_class_ion_Symbol_Table_PHP_toSymbol arginfo_class_ion_Reader_getFieldNameSymbol
+
+#define arginfo_class_ion_Symbol_Table_PHP_toSID arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Symbol_Table_PHP_toString arginfo_class_ion_Symbol___toString
+
+#define arginfo_class_ion_Symbol_Table_Local___construct arginfo_class_ion_Catalog___construct
+
+#define arginfo_class_ion_Symbol_Table_Local_import arginfo_class_ion_Catalog_add
+
+#define arginfo_class_ion_Symbol_Table_Local_getMaxId arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Symbol_Table_Local_add arginfo_class_ion_Symbol_Table_add
+
+#define arginfo_class_ion_Symbol_Table_Local_find arginfo_class_ion_Symbol_Table_find
+
+#define arginfo_class_ion_Symbol_Table_Local_findLocal arginfo_class_ion_Symbol_Table_find
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Symbol_Table_Shared___construct, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
+       ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, version, IS_LONG, 0, "1")
+       ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, symbols, IS_ARRAY, 1, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Symbol_Table_Shared_getMaxId arginfo_class_ion_Catalog_count
+
+#define arginfo_class_ion_Symbol_Table_Shared_add arginfo_class_ion_Symbol_Table_add
+
+#define arginfo_class_ion_Symbol_Table_Shared_find arginfo_class_ion_Symbol_Table_find
+
+#define arginfo_class_ion_Symbol_Table_Shared_findLocal arginfo_class_ion_Symbol_Table_find
+
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Decimal_Context___construct, 0, 0, 5)
+       ZEND_ARG_TYPE_INFO(0, digits, IS_LONG, 0)
+       ZEND_ARG_TYPE_INFO(0, eMax, IS_LONG, 0)
+       ZEND_ARG_TYPE_INFO(0, eMin, IS_LONG, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, round, ion\\Decimal\\Context\\Rounding, MAY_BE_LONG, NULL)
+       ZEND_ARG_TYPE_INFO(0, clamp, _IS_BOOL, 0)
+ZEND_END_ARG_INFO()
+
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Decimal_Context_Dec32, 0, 0, ion\\Decimal\\Context, 0)
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Decimal_Context_Dec64 arginfo_class_ion_Decimal_Context_Dec32
+
+#define arginfo_class_ion_Decimal_Context_Dec128 arginfo_class_ion_Decimal_Context_Dec32
 
-#define arginfo_class_ion_Reader_getValueLength arginfo_class_ion_Symbol_Enum_toSID
+ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Decimal_Context_DecMax, 0, 0, ion\\Decimal\\Context, 0)
+       ZEND_ARG_OBJ_TYPE_MASK(0, round, ion\\Decimal\\Context\\Rounding, MAY_BE_LONG, "ion\\Decimal\\Context\\Rounding::HalfEven")
+ZEND_END_ARG_INFO()
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Reader_Options___construct, 0, 0, 0)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, catalog, ion\\Catalog, 1, "null")
@@ -260,10 +333,9 @@ ZEND_END_ARG_INFO()
 ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_ion_Reader_Reader_getChildren, 0, 0, ion\\Reader, 0)
 ZEND_END_ARG_INFO()
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_Reader_rewind, 0, 0, IS_VOID, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Reader_Reader_rewind arginfo_class_ion_Writer_writeNull
 
-#define arginfo_class_ion_Reader_Reader_next arginfo_class_ion_Reader_Reader_rewind
+#define arginfo_class_ion_Reader_Reader_next arginfo_class_ion_Writer_writeNull
 
 #define arginfo_class_ion_Reader_Reader_valid arginfo_class_ion_Decimal_isInt
 
@@ -284,13 +356,13 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_Reader_getFieldName arginfo_class_ion_Symbol___toString
 
-#define arginfo_class_ion_Reader_Reader_getFieldNameSymbol arginfo_class_ion_Symbol_Enum_toSymbol
+#define arginfo_class_ion_Reader_Reader_getFieldNameSymbol arginfo_class_ion_Reader_getFieldNameSymbol
 
 #define arginfo_class_ion_Reader_Reader_getAnnotations arginfo_class_ion_Reader_getAnnotations
 
 #define arginfo_class_ion_Reader_Reader_getAnnotationSymbols arginfo_class_ion_Reader_getAnnotations
 
-#define arginfo_class_ion_Reader_Reader_countAnnotations arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_Reader_countAnnotations arginfo_class_ion_Catalog_count
 
 #define arginfo_class_ion_Reader_Reader_getAnnotation arginfo_class_ion_Reader_getAnnotation
 
@@ -308,7 +380,7 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_Reader_readTimestamp arginfo_class_ion_Reader_readTimestamp
 
-#define arginfo_class_ion_Reader_Reader_readSymbol arginfo_class_ion_Symbol_Enum_toSymbol
+#define arginfo_class_ion_Reader_Reader_readSymbol arginfo_class_ion_Reader_getFieldNameSymbol
 
 #define arginfo_class_ion_Reader_Reader_readString arginfo_class_ion_Symbol___toString
 
@@ -318,26 +390,19 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Reader_Reader_readLobPart arginfo_class_ion_Reader_readStringPart
 
-#define arginfo_class_ion_Reader_Reader_getPosition arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_Reader_getPosition arginfo_class_ion_Catalog_count
 
-#define arginfo_class_ion_Reader_Reader_getDepth arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_Reader_getDepth arginfo_class_ion_Catalog_count
 
 #define arginfo_class_ion_Reader_Reader_seek arginfo_class_ion_Reader_seek
 
-#define arginfo_class_ion_Reader_Reader_getValueOffset arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_Reader_getValueOffset arginfo_class_ion_Catalog_count
 
-#define arginfo_class_ion_Reader_Reader_getValueLength arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Reader_Reader_getValueLength arginfo_class_ion_Catalog_count
 
 #define arginfo_class_ion_Reader_Buffer_getBuffer arginfo_class_ion_Symbol___toString
 
-ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Reader_Buffer_Reader___construct, 0, 0, 1)
-       ZEND_ARG_TYPE_INFO(0, buffer, IS_STRING, 0)
-       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, options, ion\\Reader\\Options, 1, "null")
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Reader_Buffer_Reader_getBuffer arginfo_class_ion_Symbol___toString
-
-#define arginfo_class_ion_Reader_Stream_getStream arginfo_class_ion_Symbol_Table_Local___construct
+#define arginfo_class_ion_Reader_Stream_getStream arginfo_class_ion_Catalog___construct
 
 ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_Stream_resetStream, 0, 1, IS_VOID, 0)
        ZEND_ARG_INFO(0, stream)
@@ -348,12 +413,19 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Reader_Stream_resetStr
        ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
 ZEND_END_ARG_INFO()
 
+ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Reader_Buffer_Reader___construct, 0, 0, 1)
+       ZEND_ARG_TYPE_INFO(0, buffer, IS_STRING, 0)
+       ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, options, ion\\Reader\\Options, 1, "null")
+ZEND_END_ARG_INFO()
+
+#define arginfo_class_ion_Reader_Buffer_Reader_getBuffer arginfo_class_ion_Symbol___toString
+
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Reader_Stream_Reader___construct, 0, 0, 1)
        ZEND_ARG_INFO(0, stream)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, options, ion\\Reader\\Options, 1, "null")
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Reader_Stream_Reader_getStream arginfo_class_ion_Symbol_Table_Local___construct
+#define arginfo_class_ion_Reader_Stream_Reader_getStream arginfo_class_ion_Catalog___construct
 
 #define arginfo_class_ion_Reader_Stream_Reader_resetStream arginfo_class_ion_Reader_Stream_resetStream
 
@@ -377,83 +449,19 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Writer_Options___construct, 0, 0, 0)
        ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, allocationPageSize, IS_LONG, 0, "0x10000")
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Writer_writeNull arginfo_class_ion_Reader_Reader_rewind
+#define arginfo_class_ion_Writer_Writer_writeNull arginfo_class_ion_Writer_writeNull
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeTypedNull, 0, 1, IS_VOID, 0)
-       ZEND_ARG_OBJ_INFO(0, type, ion\\Type, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Writer_writeTypedNull arginfo_class_ion_Writer_writeTypedNull
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeBool, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_INFO(0, value, _IS_BOOL, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Writer_writeBool arginfo_class_ion_Writer_writeBool
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeInt, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_MASK(0, value, MAY_BE_LONG|MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Writer_writeInt arginfo_class_ion_Writer_writeInt
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeFloat, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Writer_writeFloat arginfo_class_ion_Writer_writeFloat
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeDecimal, 0, 1, IS_VOID, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Decimal, MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Writer_writeDecimal arginfo_class_ion_Writer_writeDecimal
 
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeTimestamp, 0, 1, IS_VOID, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Timestamp, MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeSymbol, 0, 1, IS_VOID, 0)
-       ZEND_ARG_OBJ_TYPE_MASK(0, value, ion\\Symbol, MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeString, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_INFO(0, value, IS_STRING, 0)
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Writer_writeCLob arginfo_class_ion_Writer_writeString
-
-#define arginfo_class_ion_Writer_writeBLob arginfo_class_ion_Writer_writeString
-
-#define arginfo_class_ion_Writer_startLob arginfo_class_ion_Writer_writeTypedNull
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_appendLob, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0)
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Writer_finishLob arginfo_class_ion_Reader_Reader_rewind
-
-#define arginfo_class_ion_Writer_startContainer arginfo_class_ion_Writer_writeTypedNull
-
-#define arginfo_class_ion_Writer_finishContainer arginfo_class_ion_Reader_Reader_rewind
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeFieldName, 0, 1, IS_VOID, 0)
-       ZEND_ARG_TYPE_INFO(0, name, IS_STRING, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Writer_writeAnnotation, 0, 0, IS_VOID, 0)
-       ZEND_ARG_VARIADIC_OBJ_TYPE_MASK(0, annotation, ion\\Symbol, MAY_BE_STRING, NULL)
-ZEND_END_ARG_INFO()
-
-#define arginfo_class_ion_Writer_getDepth arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Writer_flush arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Writer_finish arginfo_class_ion_Symbol_Enum_toSID
-
-#define arginfo_class_ion_Writer_Writer_writeNull arginfo_class_ion_Reader_Reader_rewind
-
-#define arginfo_class_ion_Writer_Writer_writeTypedNull arginfo_class_ion_Writer_writeTypedNull
-
-#define arginfo_class_ion_Writer_Writer_writeBool arginfo_class_ion_Writer_writeBool
-
-#define arginfo_class_ion_Writer_Writer_writeInt arginfo_class_ion_Writer_writeInt
-
-#define arginfo_class_ion_Writer_Writer_writeFloat arginfo_class_ion_Writer_writeFloat
-
-#define arginfo_class_ion_Writer_Writer_writeDecimal arginfo_class_ion_Writer_writeDecimal
-
-#define arginfo_class_ion_Writer_Writer_writeTimestamp arginfo_class_ion_Writer_writeTimestamp
+#define arginfo_class_ion_Writer_Writer_writeTimestamp arginfo_class_ion_Writer_writeTimestamp
 
 #define arginfo_class_ion_Writer_Writer_writeSymbol arginfo_class_ion_Writer_writeSymbol
 
@@ -467,25 +475,27 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Writer_Writer_appendLob arginfo_class_ion_Writer_appendLob
 
-#define arginfo_class_ion_Writer_Writer_finishLob arginfo_class_ion_Reader_Reader_rewind
+#define arginfo_class_ion_Writer_Writer_finishLob arginfo_class_ion_Writer_writeNull
 
 #define arginfo_class_ion_Writer_Writer_startContainer arginfo_class_ion_Writer_writeTypedNull
 
-#define arginfo_class_ion_Writer_Writer_finishContainer arginfo_class_ion_Reader_Reader_rewind
+#define arginfo_class_ion_Writer_Writer_finishContainer arginfo_class_ion_Writer_writeNull
 
 #define arginfo_class_ion_Writer_Writer_writeFieldName arginfo_class_ion_Writer_writeFieldName
 
 #define arginfo_class_ion_Writer_Writer_writeAnnotation arginfo_class_ion_Writer_writeAnnotation
 
-#define arginfo_class_ion_Writer_Writer_getDepth arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Writer_Writer_getDepth arginfo_class_ion_Catalog_count
 
-#define arginfo_class_ion_Writer_Writer_flush arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Writer_Writer_flush arginfo_class_ion_Catalog_count
 
-#define arginfo_class_ion_Writer_Writer_finish arginfo_class_ion_Symbol_Enum_toSID
+#define arginfo_class_ion_Writer_Writer_finish arginfo_class_ion_Catalog_count
 
 #define arginfo_class_ion_Writer_Buffer_getBuffer arginfo_class_ion_Symbol___toString
 
-#define arginfo_class_ion_Writer_Buffer_resetBuffer arginfo_class_ion_Reader_Reader_rewind
+#define arginfo_class_ion_Writer_Buffer_resetBuffer arginfo_class_ion_Writer_writeNull
+
+#define arginfo_class_ion_Writer_Stream_getStream arginfo_class_ion_Catalog___construct
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Writer_Buffer_Writer___construct, 0, 0, 0)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, options, ion\\Writer\\Options, 1, "null")
@@ -493,24 +503,14 @@ ZEND_END_ARG_INFO()
 
 #define arginfo_class_ion_Writer_Buffer_Writer_getBuffer arginfo_class_ion_Symbol___toString
 
-#define arginfo_class_ion_Writer_Buffer_Writer_resetBuffer arginfo_class_ion_Reader_Reader_rewind
-
-#define arginfo_class_ion_Writer_Stream_getStream arginfo_class_ion_Symbol_Table_Local___construct
+#define arginfo_class_ion_Writer_Buffer_Writer_resetBuffer arginfo_class_ion_Writer_writeNull
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Writer_Stream_Writer___construct, 0, 0, 1)
        ZEND_ARG_INFO(0, stream)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, options, ion\\Writer\\Options, 1, "null")
 ZEND_END_ARG_INFO()
 
-#define arginfo_class_ion_Writer_Stream_Writer_getStream arginfo_class_ion_Symbol_Table_Local___construct
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Serializer_serialize, 0, 1, IS_STRING, 0)
-       ZEND_ARG_TYPE_INFO(0, data, IS_MIXED, 0)
-ZEND_END_ARG_INFO()
-
-ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_ion_Unserializer_unserialize, 0, 1, IS_MIXED, 0)
-       ZEND_ARG_INFO(0, data)
-ZEND_END_ARG_INFO()
+#define arginfo_class_ion_Writer_Stream_Writer_getStream arginfo_class_ion_Catalog___construct
 
 ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ion_Serializer_PHP___construct, 0, 0, 0)
        ZEND_ARG_OBJ_INFO_WITH_DEFAULT_VALUE(0, writerOptions, ion\\Writer\\Options, 1, "null")
@@ -531,17 +531,13 @@ ZEND_END_ARG_INFO()
 #define arginfo_class_ion_Unserializer_PHP_unserialize arginfo_class_ion_Unserializer_unserialize
 
 
-static ZEND_FUNCTION(ion_Symbol_Table_PHP);
-static ZEND_FUNCTION(ion_Symbol_Table_System);
 static ZEND_FUNCTION(ion_serialize);
 static ZEND_FUNCTION(ion_unserialize);
+static ZEND_FUNCTION(ion_Symbol_Table_PHP);
+static ZEND_FUNCTION(ion_Symbol_Table_System);
 static ZEND_METHOD(ion_Symbol, __construct);
 static ZEND_METHOD(ion_Symbol, equals);
 static ZEND_METHOD(ion_Symbol, __toString);
-static ZEND_METHOD(ion_Symbol_ImportLocation, __construct);
-static ZEND_METHOD(ion_Symbol_Table_Local, __construct);
-static ZEND_METHOD(ion_Symbol_Table_Local, import);
-static ZEND_METHOD(ion_Symbol_Table_Shared, __construct);
 static ZEND_METHOD(ion_Catalog, __construct);
 static ZEND_METHOD(ion_Catalog, count);
 static ZEND_METHOD(ion_Catalog, add);
@@ -549,11 +545,6 @@ static ZEND_METHOD(ion_Catalog, remove);
 static ZEND_METHOD(ion_Catalog, find);
 static ZEND_METHOD(ion_Catalog, findBest);
 static ZEND_METHOD(ion_LOB, __construct);
-static ZEND_METHOD(ion_Decimal_Context, __construct);
-static ZEND_METHOD(ion_Decimal_Context, Dec32);
-static ZEND_METHOD(ion_Decimal_Context, Dec64);
-static ZEND_METHOD(ion_Decimal_Context, Dec128);
-static ZEND_METHOD(ion_Decimal_Context, DecMax);
 static ZEND_METHOD(ion_Decimal, __construct);
 static ZEND_METHOD(ion_Decimal, equals);
 static ZEND_METHOD(ion_Decimal, isInt);
@@ -561,6 +552,15 @@ static ZEND_METHOD(ion_Decimal, __toString);
 static ZEND_METHOD(ion_Decimal, toInt);
 static ZEND_METHOD(ion_Timestamp, __construct);
 static ZEND_METHOD(ion_Timestamp, __toString);
+static ZEND_METHOD(ion_Symbol_ImportLocation, __construct);
+static ZEND_METHOD(ion_Symbol_Table_Local, __construct);
+static ZEND_METHOD(ion_Symbol_Table_Local, import);
+static ZEND_METHOD(ion_Symbol_Table_Shared, __construct);
+static ZEND_METHOD(ion_Decimal_Context, __construct);
+static ZEND_METHOD(ion_Decimal_Context, Dec32);
+static ZEND_METHOD(ion_Decimal_Context, Dec64);
+static ZEND_METHOD(ion_Decimal_Context, Dec128);
+static ZEND_METHOD(ion_Decimal_Context, DecMax);
 static ZEND_METHOD(ion_Reader_Options, __construct);
 static ZEND_METHOD(ion_Reader_Reader, hasChildren);
 static ZEND_METHOD(ion_Reader_Reader, getChildren);
@@ -637,10 +637,22 @@ static ZEND_METHOD(ion_Unserializer_PHP, unserialize);
 
 
 static const zend_function_entry ext_functions[] = {
-       ZEND_NS_RAW_FENTRY("ion\\Symbol\\Table", "PHP", ZEND_FN(ion_Symbol_Table_PHP), arginfo_ion_Symbol_Table_PHP, 0)
-       ZEND_NS_RAW_FENTRY("ion\\Symbol\\Table", "System", ZEND_FN(ion_Symbol_Table_System), arginfo_ion_Symbol_Table_System, 0)
        ZEND_NS_RAW_FENTRY("ion", "serialize", ZEND_FN(ion_serialize), arginfo_ion_serialize, 0)
        ZEND_NS_RAW_FENTRY("ion", "unserialize", ZEND_FN(ion_unserialize), arginfo_ion_unserialize, 0)
+       ZEND_NS_RAW_FENTRY("ion\\Symbol\\Table", "PHP", ZEND_FN(ion_Symbol_Table_PHP), arginfo_ion_Symbol_Table_PHP, 0)
+       ZEND_NS_RAW_FENTRY("ion\\Symbol\\Table", "System", ZEND_FN(ion_Symbol_Table_System), arginfo_ion_Symbol_Table_System, 0)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Serializer_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Serializer, serialize, arginfo_class_ion_Serializer_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Unserializer_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Unserializer, unserialize, arginfo_class_ion_Unserializer_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
        ZEND_FE_END
 };
 
@@ -659,6 +671,100 @@ static const zend_function_entry class_ion_Symbol_methods[] = {
 };
 
 
+static const zend_function_entry class_ion_Catalog_methods[] = {
+       ZEND_ME(ion_Catalog, __construct, arginfo_class_ion_Catalog___construct, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Catalog, count, arginfo_class_ion_Catalog_count, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Catalog, add, arginfo_class_ion_Catalog_add, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Catalog, remove, arginfo_class_ion_Catalog_remove, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Catalog, find, arginfo_class_ion_Catalog_find, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Catalog, findBest, arginfo_class_ion_Catalog_findBest, ZEND_ACC_PUBLIC)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_LOB_methods[] = {
+       ZEND_ME(ion_LOB, __construct, arginfo_class_ion_LOB___construct, ZEND_ACC_PUBLIC)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Decimal_methods[] = {
+       ZEND_ME(ion_Decimal, __construct, arginfo_class_ion_Decimal___construct, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Decimal, equals, arginfo_class_ion_Decimal_equals, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Decimal, isInt, arginfo_class_ion_Decimal_isInt, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Decimal, __toString, arginfo_class_ion_Decimal___toString, ZEND_ACC_PUBLIC)
+       ZEND_MALIAS(ion_Decimal, toString, __toString, arginfo_class_ion_Decimal_toString, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Decimal, toInt, arginfo_class_ion_Decimal_toInt, ZEND_ACC_PUBLIC)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Timestamp_methods[] = {
+       ZEND_ME(ion_Timestamp, __construct, arginfo_class_ion_Timestamp___construct, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Timestamp, __toString, arginfo_class_ion_Timestamp___toString, ZEND_ACC_PUBLIC)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Reader_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getType, arginfo_class_ion_Reader_getType, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, hasAnnotations, arginfo_class_ion_Reader_hasAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, hasAnnotation, arginfo_class_ion_Reader_hasAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, isNull, arginfo_class_ion_Reader_isNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, isInStruct, arginfo_class_ion_Reader_isInStruct, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getFieldName, arginfo_class_ion_Reader_getFieldName, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getFieldNameSymbol, arginfo_class_ion_Reader_getFieldNameSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotations, arginfo_class_ion_Reader_getAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotationSymbols, arginfo_class_ion_Reader_getAnnotationSymbols, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, countAnnotations, arginfo_class_ion_Reader_countAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotation, arginfo_class_ion_Reader_getAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotationSymbol, arginfo_class_ion_Reader_getAnnotationSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readNull, arginfo_class_ion_Reader_readNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readBool, arginfo_class_ion_Reader_readBool, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readInt, arginfo_class_ion_Reader_readInt, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readFloat, arginfo_class_ion_Reader_readFloat, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readDecimal, arginfo_class_ion_Reader_readDecimal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readTimestamp, arginfo_class_ion_Reader_readTimestamp, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readSymbol, arginfo_class_ion_Reader_readSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readString, arginfo_class_ion_Reader_readString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readStringPart, arginfo_class_ion_Reader_readStringPart, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readLob, arginfo_class_ion_Reader_readLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readLobPart, arginfo_class_ion_Reader_readLobPart, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getPosition, arginfo_class_ion_Reader_getPosition, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getDepth, arginfo_class_ion_Reader_getDepth, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, seek, arginfo_class_ion_Reader_seek, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getValueOffset, arginfo_class_ion_Reader_getValueOffset, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getValueLength, arginfo_class_ion_Reader_getValueLength, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_FE_END
+};
+
+
+static const zend_function_entry class_ion_Writer_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeNull, arginfo_class_ion_Writer_writeNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeTypedNull, arginfo_class_ion_Writer_writeTypedNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeBool, arginfo_class_ion_Writer_writeBool, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeInt, arginfo_class_ion_Writer_writeInt, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeFloat, arginfo_class_ion_Writer_writeFloat, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeDecimal, arginfo_class_ion_Writer_writeDecimal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeTimestamp, arginfo_class_ion_Writer_writeTimestamp, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeSymbol, arginfo_class_ion_Writer_writeSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeString, arginfo_class_ion_Writer_writeString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeCLob, arginfo_class_ion_Writer_writeCLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeBLob, arginfo_class_ion_Writer_writeBLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, startLob, arginfo_class_ion_Writer_startLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, appendLob, arginfo_class_ion_Writer_appendLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finishLob, arginfo_class_ion_Writer_finishLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, startContainer, arginfo_class_ion_Writer_startContainer, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finishContainer, arginfo_class_ion_Writer_finishContainer, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeFieldName, arginfo_class_ion_Writer_writeFieldName, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeAnnotation, arginfo_class_ion_Writer_writeAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, getDepth, arginfo_class_ion_Writer_getDepth, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, flush, arginfo_class_ion_Writer_flush, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finish, arginfo_class_ion_Writer_finish, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_FE_END
+};
+
+
 static const zend_function_entry class_ion_Symbol_ImportLocation_methods[] = {
        ZEND_ME(ion_Symbol_ImportLocation, __construct, arginfo_class_ion_Symbol_ImportLocation___construct, ZEND_ACC_PUBLIC)
        ZEND_FE_END
@@ -673,6 +779,15 @@ static const zend_function_entry class_ion_Symbol_Enum_methods[] = {
 };
 
 
+static const zend_function_entry class_ion_Symbol_Table_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, getMaxId, arginfo_class_ion_Symbol_Table_getMaxId, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, add, arginfo_class_ion_Symbol_Table_add, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, find, arginfo_class_ion_Symbol_Table_find, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, findLocal, arginfo_class_ion_Symbol_Table_findLocal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+       ZEND_FE_END
+};
+
+
 static const zend_function_entry class_ion_Symbol_Table_System_methods[] = {
        ZEND_MALIAS(ion_Symbol_Enum, toSymbol, toSymbol, arginfo_class_ion_Symbol_Table_System_toSymbol, ZEND_ACC_PUBLIC)
        ZEND_MALIAS(ion_Symbol_Enum, toSID, toSID, arginfo_class_ion_Symbol_Table_System_toSID, ZEND_ACC_PUBLIC)
@@ -689,15 +804,6 @@ static const zend_function_entry class_ion_Symbol_Table_PHP_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Symbol_Table_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, getMaxId, arginfo_class_ion_Symbol_Table_getMaxId, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, add, arginfo_class_ion_Symbol_Table_add, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, find, arginfo_class_ion_Symbol_Table_find, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Symbol_Table, findLocal, arginfo_class_ion_Symbol_Table_findLocal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Symbol_Table_Local_methods[] = {
        ZEND_ME(ion_Symbol_Table_Local, __construct, arginfo_class_ion_Symbol_Table_Local___construct, ZEND_ACC_PUBLIC)
        ZEND_ME(ion_Symbol_Table_Local, import, arginfo_class_ion_Symbol_Table_Local_import, ZEND_ACC_PUBLIC)
@@ -719,28 +825,6 @@ static const zend_function_entry class_ion_Symbol_Table_Shared_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Catalog_methods[] = {
-       ZEND_ME(ion_Catalog, __construct, arginfo_class_ion_Catalog___construct, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Catalog, count, arginfo_class_ion_Catalog_count, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Catalog, add, arginfo_class_ion_Catalog_add, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Catalog, remove, arginfo_class_ion_Catalog_remove, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Catalog, find, arginfo_class_ion_Catalog_find, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Catalog, findBest, arginfo_class_ion_Catalog_findBest, ZEND_ACC_PUBLIC)
-       ZEND_FE_END
-};
-
-
-static const zend_function_entry class_ion_LOB_methods[] = {
-       ZEND_ME(ion_LOB, __construct, arginfo_class_ion_LOB___construct, ZEND_ACC_PUBLIC)
-       ZEND_FE_END
-};
-
-
-static const zend_function_entry class_ion_Decimal_Context_Rounding_methods[] = {
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Decimal_Context_methods[] = {
        ZEND_ME(ion_Decimal_Context, __construct, arginfo_class_ion_Decimal_Context___construct, ZEND_ACC_PUBLIC)
        ZEND_ME(ion_Decimal_Context, Dec32, arginfo_class_ion_Decimal_Context_Dec32, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)
@@ -751,13 +835,7 @@ static const zend_function_entry class_ion_Decimal_Context_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Decimal_methods[] = {
-       ZEND_ME(ion_Decimal, __construct, arginfo_class_ion_Decimal___construct, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Decimal, equals, arginfo_class_ion_Decimal_equals, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Decimal, isInt, arginfo_class_ion_Decimal_isInt, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Decimal, __toString, arginfo_class_ion_Decimal___toString, ZEND_ACC_PUBLIC)
-       ZEND_MALIAS(ion_Decimal, toString, __toString, arginfo_class_ion_Decimal_toString, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Decimal, toInt, arginfo_class_ion_Decimal_toInt, ZEND_ACC_PUBLIC)
+static const zend_function_entry class_ion_Decimal_Context_Rounding_methods[] = {
        ZEND_FE_END
 };
 
@@ -772,46 +850,6 @@ static const zend_function_entry class_ion_Timestamp_Format_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Timestamp_methods[] = {
-       ZEND_ME(ion_Timestamp, __construct, arginfo_class_ion_Timestamp___construct, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Timestamp, __toString, arginfo_class_ion_Timestamp___toString, ZEND_ACC_PUBLIC)
-       ZEND_FE_END
-};
-
-
-static const zend_function_entry class_ion_Reader_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getType, arginfo_class_ion_Reader_getType, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, hasAnnotations, arginfo_class_ion_Reader_hasAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, hasAnnotation, arginfo_class_ion_Reader_hasAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, isNull, arginfo_class_ion_Reader_isNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, isInStruct, arginfo_class_ion_Reader_isInStruct, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getFieldName, arginfo_class_ion_Reader_getFieldName, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getFieldNameSymbol, arginfo_class_ion_Reader_getFieldNameSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotations, arginfo_class_ion_Reader_getAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotationSymbols, arginfo_class_ion_Reader_getAnnotationSymbols, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, countAnnotations, arginfo_class_ion_Reader_countAnnotations, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotation, arginfo_class_ion_Reader_getAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getAnnotationSymbol, arginfo_class_ion_Reader_getAnnotationSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readNull, arginfo_class_ion_Reader_readNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readBool, arginfo_class_ion_Reader_readBool, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readInt, arginfo_class_ion_Reader_readInt, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readFloat, arginfo_class_ion_Reader_readFloat, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readDecimal, arginfo_class_ion_Reader_readDecimal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readTimestamp, arginfo_class_ion_Reader_readTimestamp, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readSymbol, arginfo_class_ion_Reader_readSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readString, arginfo_class_ion_Reader_readString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readStringPart, arginfo_class_ion_Reader_readStringPart, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readLob, arginfo_class_ion_Reader_readLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, readLobPart, arginfo_class_ion_Reader_readLobPart, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getPosition, arginfo_class_ion_Reader_getPosition, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getDepth, arginfo_class_ion_Reader_getDepth, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, seek, arginfo_class_ion_Reader_seek, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getValueOffset, arginfo_class_ion_Reader_getValueOffset, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader, getValueLength, arginfo_class_ion_Reader_getValueLength, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Reader_Options_methods[] = {
        ZEND_ME(ion_Reader_Options, __construct, arginfo_class_ion_Reader_Options___construct, ZEND_ACC_PUBLIC)
        ZEND_FE_END
@@ -864,13 +902,6 @@ static const zend_function_entry class_ion_Reader_Buffer_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Reader_Buffer_Reader_methods[] = {
-       ZEND_ME(ion_Reader_Buffer_Reader, __construct, arginfo_class_ion_Reader_Buffer_Reader___construct, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Reader_Buffer_Reader, getBuffer, arginfo_class_ion_Reader_Buffer_Reader_getBuffer, ZEND_ACC_PUBLIC)
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Reader_Stream_methods[] = {
        ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader_Stream, getStream, arginfo_class_ion_Reader_Stream_getStream, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
        ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Reader_Stream, resetStream, arginfo_class_ion_Reader_Stream_resetStream, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
@@ -879,6 +910,13 @@ static const zend_function_entry class_ion_Reader_Stream_methods[] = {
 };
 
 
+static const zend_function_entry class_ion_Reader_Buffer_Reader_methods[] = {
+       ZEND_ME(ion_Reader_Buffer_Reader, __construct, arginfo_class_ion_Reader_Buffer_Reader___construct, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Reader_Buffer_Reader, getBuffer, arginfo_class_ion_Reader_Buffer_Reader_getBuffer, ZEND_ACC_PUBLIC)
+       ZEND_FE_END
+};
+
+
 static const zend_function_entry class_ion_Reader_Stream_Reader_methods[] = {
        ZEND_ME(ion_Reader_Stream_Reader, __construct, arginfo_class_ion_Reader_Stream_Reader___construct, ZEND_ACC_PUBLIC)
        ZEND_ME(ion_Reader_Stream_Reader, getStream, arginfo_class_ion_Reader_Stream_Reader_getStream, ZEND_ACC_PUBLIC)
@@ -894,32 +932,6 @@ static const zend_function_entry class_ion_Writer_Options_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Writer_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeNull, arginfo_class_ion_Writer_writeNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeTypedNull, arginfo_class_ion_Writer_writeTypedNull, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeBool, arginfo_class_ion_Writer_writeBool, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeInt, arginfo_class_ion_Writer_writeInt, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeFloat, arginfo_class_ion_Writer_writeFloat, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeDecimal, arginfo_class_ion_Writer_writeDecimal, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeTimestamp, arginfo_class_ion_Writer_writeTimestamp, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeSymbol, arginfo_class_ion_Writer_writeSymbol, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeString, arginfo_class_ion_Writer_writeString, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeCLob, arginfo_class_ion_Writer_writeCLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeBLob, arginfo_class_ion_Writer_writeBLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, startLob, arginfo_class_ion_Writer_startLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, appendLob, arginfo_class_ion_Writer_appendLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finishLob, arginfo_class_ion_Writer_finishLob, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, startContainer, arginfo_class_ion_Writer_startContainer, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finishContainer, arginfo_class_ion_Writer_finishContainer, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeFieldName, arginfo_class_ion_Writer_writeFieldName, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, writeAnnotation, arginfo_class_ion_Writer_writeAnnotation, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, getDepth, arginfo_class_ion_Writer_getDepth, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, flush, arginfo_class_ion_Writer_flush, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer, finish, arginfo_class_ion_Writer_finish, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Writer_Writer_methods[] = {
        ZEND_ME(ion_Writer_Writer, writeNull, arginfo_class_ion_Writer_Writer_writeNull, ZEND_ACC_PUBLIC)
        ZEND_ME(ion_Writer_Writer, writeTypedNull, arginfo_class_ion_Writer_Writer_writeTypedNull, ZEND_ACC_PUBLIC)
@@ -953,16 +965,16 @@ static const zend_function_entry class_ion_Writer_Buffer_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Writer_Buffer_Writer_methods[] = {
-       ZEND_ME(ion_Writer_Buffer_Writer, __construct, arginfo_class_ion_Writer_Buffer_Writer___construct, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Writer_Buffer_Writer, getBuffer, arginfo_class_ion_Writer_Buffer_Writer_getBuffer, ZEND_ACC_PUBLIC)
-       ZEND_ME(ion_Writer_Buffer_Writer, resetBuffer, arginfo_class_ion_Writer_Buffer_Writer_resetBuffer, ZEND_ACC_PUBLIC)
+static const zend_function_entry class_ion_Writer_Stream_methods[] = {
+       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer_Stream, getStream, arginfo_class_ion_Writer_Stream_getStream, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
        ZEND_FE_END
 };
 
 
-static const zend_function_entry class_ion_Writer_Stream_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Writer_Stream, getStream, arginfo_class_ion_Writer_Stream_getStream, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
+static const zend_function_entry class_ion_Writer_Buffer_Writer_methods[] = {
+       ZEND_ME(ion_Writer_Buffer_Writer, __construct, arginfo_class_ion_Writer_Buffer_Writer___construct, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Writer_Buffer_Writer, getBuffer, arginfo_class_ion_Writer_Buffer_Writer_getBuffer, ZEND_ACC_PUBLIC)
+       ZEND_ME(ion_Writer_Buffer_Writer, resetBuffer, arginfo_class_ion_Writer_Buffer_Writer_resetBuffer, ZEND_ACC_PUBLIC)
        ZEND_FE_END
 };
 
@@ -974,18 +986,6 @@ static const zend_function_entry class_ion_Writer_Stream_Writer_methods[] = {
 };
 
 
-static const zend_function_entry class_ion_Serializer_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Serializer, serialize, arginfo_class_ion_Serializer_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_FE_END
-};
-
-
-static const zend_function_entry class_ion_Unserializer_methods[] = {
-       ZEND_ABSTRACT_ME_WITH_FLAGS(ion_Unserializer, unserialize, arginfo_class_ion_Unserializer_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT)
-       ZEND_FE_END
-};
-
-
 static const zend_function_entry class_ion_Serializer_PHP_methods[] = {
        ZEND_ME(ion_Serializer_PHP, __construct, arginfo_class_ion_Serializer_PHP___construct, ZEND_ACC_PUBLIC)
        ZEND_ME(ion_Serializer_PHP, serialize, arginfo_class_ion_Serializer_PHP_serialize, ZEND_ACC_PUBLIC)
@@ -999,6 +999,26 @@ static const zend_function_entry class_ion_Unserializer_PHP_methods[] = {
        ZEND_FE_END
 };
 
+static zend_class_entry *register_class_ion_Serializer(void)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Serializer", class_ion_Serializer_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_Unserializer(void)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Unserializer", class_ion_Unserializer_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
 static zend_class_entry *register_class_ion_Type(void)
 {
        zend_class_entry *class_entry = zend_register_internal_enum("ion\\Type", IS_LONG, class_ion_Type_methods);
@@ -1077,24 +1097,130 @@ static zend_class_entry *register_class_ion_Symbol(void)
        INIT_NS_CLASS_ENTRY(ce, "ion", "Symbol", class_ion_Symbol_methods);
        class_entry = zend_register_internal_class_ex(&ce, NULL);
 
-       zval property_value_default_value;
-       ZVAL_UNDEF(&property_value_default_value);
-       zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1);
-       zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));
-       zend_string_release(property_value_name);
+       zval property_value_default_value;
+       ZVAL_UNDEF(&property_value_default_value);
+       zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1);
+       zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_NULL));
+       zend_string_release(property_value_name);
+
+       zval property_sid_default_value;
+       ZVAL_UNDEF(&property_sid_default_value);
+       zend_string *property_sid_name = zend_string_init("sid", sizeof("sid") - 1, 1);
+       zend_declare_typed_property(class_entry, property_sid_name, &property_sid_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+       zend_string_release(property_sid_name);
+
+       zend_string *property_importLocation_class_ion_Symbol_ImportLocation = zend_string_init("ion\\Symbol\\ImportLocation", sizeof("ion\\Symbol\\ImportLocation")-1, 1);
+       zval property_importLocation_default_value;
+       ZVAL_UNDEF(&property_importLocation_default_value);
+       zend_string *property_importLocation_name = zend_string_init("importLocation", sizeof("importLocation") - 1, 1);
+       zend_declare_typed_property(class_entry, property_importLocation_name, &property_importLocation_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_importLocation_class_ion_Symbol_ImportLocation, 0, MAY_BE_NULL));
+       zend_string_release(property_importLocation_name);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_Catalog(zend_class_entry *class_entry_ion_Countable)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Catalog", class_ion_Catalog_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       zend_class_implements(class_entry, 1, class_entry_ion_Countable);
+
+       zval property_symbolTables_default_value;
+       ZVAL_EMPTY_ARRAY(&property_symbolTables_default_value);
+       zend_string *property_symbolTables_name = zend_string_init("symbolTables", sizeof("symbolTables") - 1, 1);
+       zend_declare_typed_property(class_entry, property_symbolTables_name, &property_symbolTables_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY));
+       zend_string_release(property_symbolTables_name);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_LOB(void)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "LOB", class_ion_LOB_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+
+       zval property_value_default_value;
+       ZVAL_UNDEF(&property_value_default_value);
+       zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1);
+       zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
+       zend_string_release(property_value_name);
+
+       zend_string *property_type_class_ion_Type = zend_string_init("ion\\Type", sizeof("ion\\Type")-1, 1);
+       zval property_type_default_value;
+       ZVAL_UNDEF(&property_type_default_value);
+       zend_string *property_type_name = zend_string_init("type", sizeof("type") - 1, 1);
+       zend_declare_typed_property(class_entry, property_type_name, &property_type_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_type_class_ion_Type, 0, 0));
+       zend_string_release(property_type_name);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_Decimal(void)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Decimal", class_ion_Decimal_methods);
+       class_entry = zend_register_internal_class_ex(&ce, NULL);
+
+       zval property_number_default_value;
+       ZVAL_UNDEF(&property_number_default_value);
+       zend_string *property_number_name = zend_string_init("number", sizeof("number") - 1, 1);
+       zend_declare_typed_property(class_entry, property_number_name, &property_number_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_LONG));
+       zend_string_release(property_number_name);
+
+       zend_string *property_context_class_ion_Decimal_Context = zend_string_init("ion\\Decimal\\Context", sizeof("ion\\Decimal\\Context")-1, 1);
+       zval property_context_default_value;
+       ZVAL_UNDEF(&property_context_default_value);
+       zend_string *property_context_name = zend_string_init("context", sizeof("context") - 1, 1);
+       zend_declare_typed_property(class_entry, property_context_name, &property_context_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_context_class_ion_Decimal_Context, 0, MAY_BE_NULL));
+       zend_string_release(property_context_name);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_Timestamp(zend_class_entry *class_entry_DateTime)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Timestamp", class_ion_Timestamp_methods);
+       class_entry = zend_register_internal_class_ex(&ce, class_entry_DateTime);
+
+       zval property_precision_default_value;
+       ZVAL_UNDEF(&property_precision_default_value);
+       zend_string *property_precision_name = zend_string_init("precision", sizeof("precision") - 1, 1);
+       zend_declare_typed_property(class_entry, property_precision_name, &property_precision_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+       zend_string_release(property_precision_name);
+
+       zval property_format_default_value;
+       ZVAL_UNDEF(&property_format_default_value);
+       zend_string *property_format_name = zend_string_init("format", sizeof("format") - 1, 1);
+       zend_declare_typed_property(class_entry, property_format_name, &property_format_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
+       zend_string_release(property_format_name);
+
+       return class_entry;
+}
+
+static zend_class_entry *register_class_ion_Reader(zend_class_entry *class_entry_RecursiveIterator)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Reader", class_ion_Reader_methods);
+       class_entry = zend_register_internal_interface(&ce);
+       zend_class_implements(class_entry, 1, class_entry_RecursiveIterator);
+
+       return class_entry;
+}
 
-       zval property_sid_default_value;
-       ZVAL_UNDEF(&property_sid_default_value);
-       zend_string *property_sid_name = zend_string_init("sid", sizeof("sid") - 1, 1);
-       zend_declare_typed_property(class_entry, property_sid_name, &property_sid_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
-       zend_string_release(property_sid_name);
+static zend_class_entry *register_class_ion_Writer(void)
+{
+       zend_class_entry ce, *class_entry;
 
-       zend_string *property_importLocation_class_ion_Symbol_ImportLocation = zend_string_init("ion\\Symbol\\ImportLocation", sizeof("ion\\Symbol\\ImportLocation")-1, 1);
-       zval property_importLocation_default_value;
-       ZVAL_UNDEF(&property_importLocation_default_value);
-       zend_string *property_importLocation_name = zend_string_init("importLocation", sizeof("importLocation") - 1, 1);
-       zend_declare_typed_property(class_entry, property_importLocation_name, &property_importLocation_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_importLocation_class_ion_Symbol_ImportLocation, 0, MAY_BE_NULL));
-       zend_string_release(property_importLocation_name);
+       INIT_NS_CLASS_ENTRY(ce, "ion", "Writer", class_ion_Writer_methods);
+       class_entry = zend_register_internal_interface(&ce);
 
        return class_entry;
 }
@@ -1131,6 +1257,16 @@ static zend_class_entry *register_class_ion_Symbol_Enum(void)
        return class_entry;
 }
 
+static zend_class_entry *register_class_ion_Symbol_Table(void)
+{
+       zend_class_entry ce, *class_entry;
+
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Symbol", "Table", class_ion_Symbol_Table_methods);
+       class_entry = zend_register_internal_interface(&ce);
+
+       return class_entry;
+}
+
 static zend_class_entry *register_class_ion_Symbol_Table_System(zend_class_entry *class_entry_ion_Symbol_Enum)
 {
        zend_class_entry *class_entry = zend_register_internal_enum("ion\\Symbol\\Table\\System", IS_STRING, class_ion_Symbol_Table_System_methods);
@@ -1242,16 +1378,6 @@ static zend_class_entry *register_class_ion_Symbol_Table_PHP(zend_class_entry *c
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Symbol_Table(void)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Symbol", "Table", class_ion_Symbol_Table_methods);
-       class_entry = zend_register_internal_interface(&ce);
-
-       return class_entry;
-}
-
 static zend_class_entry *register_class_ion_Symbol_Table_Local(zend_class_entry *class_entry_ion_Symbol_Table)
 {
        zend_class_entry ce, *class_entry;
@@ -1304,42 +1430,43 @@ static zend_class_entry *register_class_ion_Symbol_Table_Shared(zend_class_entry
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Catalog(zend_class_entry *class_entry_ion_Countable)
+static zend_class_entry *register_class_ion_Decimal_Context(void)
 {
        zend_class_entry ce, *class_entry;
 
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Catalog", class_ion_Catalog_methods);
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Decimal", "Context", class_ion_Decimal_Context_methods);
        class_entry = zend_register_internal_class_ex(&ce, NULL);
-       zend_class_implements(class_entry, 1, class_entry_ion_Countable);
-
-       zval property_symbolTables_default_value;
-       ZVAL_EMPTY_ARRAY(&property_symbolTables_default_value);
-       zend_string *property_symbolTables_name = zend_string_init("symbolTables", sizeof("symbolTables") - 1, 1);
-       zend_declare_typed_property(class_entry, property_symbolTables_name, &property_symbolTables_default_value, ZEND_ACC_PRIVATE, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_ARRAY));
-       zend_string_release(property_symbolTables_name);
 
-       return class_entry;
-}
+       zval property_digits_default_value;
+       ZVAL_UNDEF(&property_digits_default_value);
+       zend_string *property_digits_name = zend_string_init("digits", sizeof("digits") - 1, 1);
+       zend_declare_typed_property(class_entry, property_digits_name, &property_digits_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+       zend_string_release(property_digits_name);
 
-static zend_class_entry *register_class_ion_LOB(void)
-{
-       zend_class_entry ce, *class_entry;
+       zval property_eMax_default_value;
+       ZVAL_UNDEF(&property_eMax_default_value);
+       zend_string *property_eMax_name = zend_string_init("eMax", sizeof("eMax") - 1, 1);
+       zend_declare_typed_property(class_entry, property_eMax_name, &property_eMax_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+       zend_string_release(property_eMax_name);
 
-       INIT_NS_CLASS_ENTRY(ce, "ion", "LOB", class_ion_LOB_methods);
-       class_entry = zend_register_internal_class_ex(&ce, NULL);
+       zval property_eMin_default_value;
+       ZVAL_UNDEF(&property_eMin_default_value);
+       zend_string *property_eMin_name = zend_string_init("eMin", sizeof("eMin") - 1, 1);
+       zend_declare_typed_property(class_entry, property_eMin_name, &property_eMin_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
+       zend_string_release(property_eMin_name);
 
-       zval property_value_default_value;
-       ZVAL_UNDEF(&property_value_default_value);
-       zend_string *property_value_name = zend_string_init("value", sizeof("value") - 1, 1);
-       zend_declare_typed_property(class_entry, property_value_name, &property_value_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
-       zend_string_release(property_value_name);
+       zend_string *property_round_class_ion_Decimal_Context_Rounding = zend_string_init("ion\\Decimal\\Context\\Rounding", sizeof("ion\\Decimal\\Context\\Rounding")-1, 1);
+       zval property_round_default_value;
+       ZVAL_UNDEF(&property_round_default_value);
+       zend_string *property_round_name = zend_string_init("round", sizeof("round") - 1, 1);
+       zend_declare_typed_property(class_entry, property_round_name, &property_round_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_round_class_ion_Decimal_Context_Rounding, 0, MAY_BE_LONG));
+       zend_string_release(property_round_name);
 
-       zend_string *property_type_class_ion_Type = zend_string_init("ion\\Type", sizeof("ion\\Type")-1, 1);
-       zval property_type_default_value;
-       ZVAL_UNDEF(&property_type_default_value);
-       zend_string *property_type_name = zend_string_init("type", sizeof("type") - 1, 1);
-       zend_declare_typed_property(class_entry, property_type_name, &property_type_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_type_class_ion_Type, 0, 0));
-       zend_string_release(property_type_name);
+       zval property_clamp_default_value;
+       ZVAL_UNDEF(&property_clamp_default_value);
+       zend_string *property_clamp_name = zend_string_init("clamp", sizeof("clamp") - 1, 1);
+       zend_declare_typed_property(class_entry, property_clamp_name, &property_clamp_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL));
+       zend_string_release(property_clamp_name);
 
        return class_entry;
 }
@@ -1383,70 +1510,6 @@ static zend_class_entry *register_class_ion_Decimal_Context_Rounding(void)
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Decimal_Context(void)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Decimal", "Context", class_ion_Decimal_Context_methods);
-       class_entry = zend_register_internal_class_ex(&ce, NULL);
-
-       zval property_digits_default_value;
-       ZVAL_UNDEF(&property_digits_default_value);
-       zend_string *property_digits_name = zend_string_init("digits", sizeof("digits") - 1, 1);
-       zend_declare_typed_property(class_entry, property_digits_name, &property_digits_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
-       zend_string_release(property_digits_name);
-
-       zval property_eMax_default_value;
-       ZVAL_UNDEF(&property_eMax_default_value);
-       zend_string *property_eMax_name = zend_string_init("eMax", sizeof("eMax") - 1, 1);
-       zend_declare_typed_property(class_entry, property_eMax_name, &property_eMax_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
-       zend_string_release(property_eMax_name);
-
-       zval property_eMin_default_value;
-       ZVAL_UNDEF(&property_eMin_default_value);
-       zend_string *property_eMin_name = zend_string_init("eMin", sizeof("eMin") - 1, 1);
-       zend_declare_typed_property(class_entry, property_eMin_name, &property_eMin_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
-       zend_string_release(property_eMin_name);
-
-       zend_string *property_round_class_ion_Decimal_Context_Rounding = zend_string_init("ion\\Decimal\\Context\\Rounding", sizeof("ion\\Decimal\\Context\\Rounding")-1, 1);
-       zval property_round_default_value;
-       ZVAL_UNDEF(&property_round_default_value);
-       zend_string *property_round_name = zend_string_init("round", sizeof("round") - 1, 1);
-       zend_declare_typed_property(class_entry, property_round_name, &property_round_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_round_class_ion_Decimal_Context_Rounding, 0, MAY_BE_LONG));
-       zend_string_release(property_round_name);
-
-       zval property_clamp_default_value;
-       ZVAL_UNDEF(&property_clamp_default_value);
-       zend_string *property_clamp_name = zend_string_init("clamp", sizeof("clamp") - 1, 1);
-       zend_declare_typed_property(class_entry, property_clamp_name, &property_clamp_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_BOOL));
-       zend_string_release(property_clamp_name);
-
-       return class_entry;
-}
-
-static zend_class_entry *register_class_ion_Decimal(void)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Decimal", class_ion_Decimal_methods);
-       class_entry = zend_register_internal_class_ex(&ce, NULL);
-
-       zval property_number_default_value;
-       ZVAL_UNDEF(&property_number_default_value);
-       zend_string *property_number_name = zend_string_init("number", sizeof("number") - 1, 1);
-       zend_declare_typed_property(class_entry, property_number_name, &property_number_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING|MAY_BE_LONG));
-       zend_string_release(property_number_name);
-
-       zend_string *property_context_class_ion_Decimal_Context = zend_string_init("ion\\Decimal\\Context", sizeof("ion\\Decimal\\Context")-1, 1);
-       zval property_context_default_value;
-       ZVAL_UNDEF(&property_context_default_value);
-       zend_string *property_context_name = zend_string_init("context", sizeof("context") - 1, 1);
-       zend_declare_typed_property(class_entry, property_context_name, &property_context_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_CLASS(property_context_class_ion_Decimal_Context, 0, MAY_BE_NULL));
-       zend_string_release(property_context_name);
-
-       return class_entry;
-}
-
 static zend_class_entry *register_class_ion_Timestamp_Precision(void)
 {
        zend_class_entry *class_entry = zend_register_internal_enum("ion\\Timestamp\\Precision", IS_LONG, class_ion_Timestamp_Precision_methods);
@@ -1542,39 +1605,6 @@ static zend_class_entry *register_class_ion_Timestamp_Format(void)
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Timestamp(zend_class_entry *class_entry_DateTime)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Timestamp", class_ion_Timestamp_methods);
-       class_entry = zend_register_internal_class_ex(&ce, class_entry_DateTime);
-
-       zval property_precision_default_value;
-       ZVAL_UNDEF(&property_precision_default_value);
-       zend_string *property_precision_name = zend_string_init("precision", sizeof("precision") - 1, 1);
-       zend_declare_typed_property(class_entry, property_precision_name, &property_precision_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_LONG));
-       zend_string_release(property_precision_name);
-
-       zval property_format_default_value;
-       ZVAL_UNDEF(&property_format_default_value);
-       zend_string *property_format_name = zend_string_init("format", sizeof("format") - 1, 1);
-       zend_declare_typed_property(class_entry, property_format_name, &property_format_default_value, ZEND_ACC_PUBLIC|ZEND_ACC_READONLY, NULL, (zend_type) ZEND_TYPE_INIT_MASK(MAY_BE_STRING));
-       zend_string_release(property_format_name);
-
-       return class_entry;
-}
-
-static zend_class_entry *register_class_ion_Reader(zend_class_entry *class_entry_RecursiveIterator)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Reader", class_ion_Reader_methods);
-       class_entry = zend_register_internal_interface(&ce);
-       zend_class_implements(class_entry, 1, class_entry_RecursiveIterator);
-
-       return class_entry;
-}
-
 static zend_class_entry *register_class_ion_Reader_Options(void)
 {
        zend_class_entry ce, *class_entry;
@@ -1696,24 +1726,24 @@ static zend_class_entry *register_class_ion_Reader_Buffer(zend_class_entry *clas
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Reader_Buffer_Reader(zend_class_entry *class_entry_ion_Reader_Reader, zend_class_entry *class_entry_ion_Reader_Buffer)
+static zend_class_entry *register_class_ion_Reader_Stream(zend_class_entry *class_entry_ion_Reader)
 {
        zend_class_entry ce, *class_entry;
 
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Reader\\Buffer", "Reader", class_ion_Reader_Buffer_Reader_methods);
-       class_entry = zend_register_internal_class_ex(&ce, class_entry_ion_Reader_Reader);
-       zend_class_implements(class_entry, 1, class_entry_ion_Reader_Buffer);
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Reader", "Stream", class_ion_Reader_Stream_methods);
+       class_entry = zend_register_internal_interface(&ce);
+       zend_class_implements(class_entry, 1, class_entry_ion_Reader);
 
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Reader_Stream(zend_class_entry *class_entry_ion_Reader)
+static zend_class_entry *register_class_ion_Reader_Buffer_Reader(zend_class_entry *class_entry_ion_Reader_Reader, zend_class_entry *class_entry_ion_Reader_Buffer)
 {
        zend_class_entry ce, *class_entry;
 
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Reader", "Stream", class_ion_Reader_Stream_methods);
-       class_entry = zend_register_internal_interface(&ce);
-       zend_class_implements(class_entry, 1, class_entry_ion_Reader);
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Reader\\Buffer", "Reader", class_ion_Reader_Buffer_Reader_methods);
+       class_entry = zend_register_internal_class_ex(&ce, class_entry_ion_Reader_Reader);
+       zend_class_implements(class_entry, 1, class_entry_ion_Reader_Buffer);
 
        return class_entry;
 }
@@ -1831,16 +1861,6 @@ static zend_class_entry *register_class_ion_Writer_Options(void)
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Writer(void)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Writer", class_ion_Writer_methods);
-       class_entry = zend_register_internal_interface(&ce);
-
-       return class_entry;
-}
-
 static zend_class_entry *register_class_ion_Writer_Writer(zend_class_entry *class_entry_ion_Writer)
 {
        zend_class_entry ce, *class_entry;
@@ -1864,17 +1884,6 @@ static zend_class_entry *register_class_ion_Writer_Buffer(zend_class_entry *clas
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Writer_Buffer_Writer(zend_class_entry *class_entry_ion_Writer_Writer, zend_class_entry *class_entry_ion_Writer_Buffer)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Writer\\Buffer", "Writer", class_ion_Writer_Buffer_Writer_methods);
-       class_entry = zend_register_internal_class_ex(&ce, class_entry_ion_Writer_Writer);
-       zend_class_implements(class_entry, 1, class_entry_ion_Writer_Buffer);
-
-       return class_entry;
-}
-
 static zend_class_entry *register_class_ion_Writer_Stream(zend_class_entry *class_entry_ion_Writer)
 {
        zend_class_entry ce, *class_entry;
@@ -1886,33 +1895,24 @@ static zend_class_entry *register_class_ion_Writer_Stream(zend_class_entry *clas
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Writer_Stream_Writer(zend_class_entry *class_entry_ion_Writer_Writer, zend_class_entry *class_entry_ion_Writer_Stream)
+static zend_class_entry *register_class_ion_Writer_Buffer_Writer(zend_class_entry *class_entry_ion_Writer_Writer, zend_class_entry *class_entry_ion_Writer_Buffer)
 {
        zend_class_entry ce, *class_entry;
 
-       INIT_NS_CLASS_ENTRY(ce, "ion\\Writer\\Stream", "Writer", class_ion_Writer_Stream_Writer_methods);
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Writer\\Buffer", "Writer", class_ion_Writer_Buffer_Writer_methods);
        class_entry = zend_register_internal_class_ex(&ce, class_entry_ion_Writer_Writer);
-       zend_class_implements(class_entry, 1, class_entry_ion_Writer_Stream);
-
-       return class_entry;
-}
-
-static zend_class_entry *register_class_ion_Serializer(void)
-{
-       zend_class_entry ce, *class_entry;
-
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Serializer", class_ion_Serializer_methods);
-       class_entry = zend_register_internal_interface(&ce);
+       zend_class_implements(class_entry, 1, class_entry_ion_Writer_Buffer);
 
        return class_entry;
 }
 
-static zend_class_entry *register_class_ion_Unserializer(void)
+static zend_class_entry *register_class_ion_Writer_Stream_Writer(zend_class_entry *class_entry_ion_Writer_Writer, zend_class_entry *class_entry_ion_Writer_Stream)
 {
        zend_class_entry ce, *class_entry;
 
-       INIT_NS_CLASS_ENTRY(ce, "ion", "Unserializer", class_ion_Unserializer_methods);
-       class_entry = zend_register_internal_interface(&ce);
+       INIT_NS_CLASS_ENTRY(ce, "ion\\Writer\\Stream", "Writer", class_ion_Writer_Stream_Writer_methods);
+       class_entry = zend_register_internal_class_ex(&ce, class_entry_ion_Writer_Writer);
+       zend_class_implements(class_entry, 1, class_entry_ion_Writer_Stream);
 
        return class_entry;
 }
diff --git a/scripts/ci b/scripts/ci
new file mode 160000 (submodule)
index 0000000..9214803
--- /dev/null
@@ -0,0 +1 @@
+Subproject commit 9214803fbc41fe0d43bc0ef4778927c378456c8f
diff --git a/scripts/gen_github_workflow_ci.php b/scripts/gen_github_workflow_ci.php
new file mode 100755 (executable)
index 0000000..62fa42b
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/bin/env php
+<?php echo "# generated file; do not edit!\n"; ?>
+
+name: ci
+on:
+  workflow_dispatch:
+  push:
+  pull_request:
+
+jobs:
+<?php
+$gen = include __DIR__ . "/ci/gen-matrix.php";
+$cur = "8.1";
+$job = $gen->github([
+"cur" => [
+    "PHP" => $cur,
+    "enable_debug",
+    "enable_zts",
+],
+"cur-cov" => [
+    "CFLAGS" => "-O0 -g --coverage",
+    "CXXFLAGS" => "-O0 -g --coverage",
+    "PHP" => $cur,
+]]);
+foreach ($job as $id => $env) {
+    printf("  %s:\n", $id);
+    printf("    name: \"%s (%s)\"\n", $id, $env["PHP"]);
+    if ($env["PHP"] == "master") {
+        printf("    continue-on-error: true\n");
+    }
+    printf("    env:\n");
+    foreach ($env as $key => $val) {
+        printf("      %s: \"%s\"\n", $key, $val);
+    }
+?>
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@v2
+        with:
+          submodules: recursive
+      - name: Install
+        run: |
+          sudo apt-get install -y \
+            php-cli \
+            php-pear \
+            re2c
+      - name: Prepare
+        run: |
+          make -f scripts/ci/Makefile php || make -f scripts/ci/Makefile clean php
+      - name: Build
+        run: |
+          make -f scripts/ci/Makefile ext PECL=ion || true # no package.xml yet
+      - name: Test
+        run: |
+          make -f scripts/ci/Makefile test
+<?php if (isset($env["CFLAGS"]) && strpos($env["CFLAGS"], "--coverage") != false) : ?>
+      - name: Coverage
+        if: success()
+        run: |
+          cd src/.libs
+          bash <(curl -s https://codecov.io/bash) -X xcode -X coveragepy
+<?php endif; ?>
+
+<?php
+}