addFiles([$source]); $compiler->prepareFile($source); $compiler->convertFile($source); $this->arginfo = file_get_contents( TYPEPHP_ROOT_PATH . '/' . 'build/include/' . basename($compiler->getArgInfoHeaderFile($source)) ); } public function testDirectCaseRegistersConstantAst(): void { self::assertStringContainsString('const_CB_value_fetch_ast->kind = ZEND_AST_CLASS_CONST;', $this->arginfo); self::assertStringContainsString('zend_string_init_interned("CodegenEnum", sizeof("CodegenEnum") - 1, 1)', $this->arginfo); self::assertStringNotContainsString('ZVAL_LONG(&const_CB_value', $this->arginfo); } public function testConstantExpressionFoldsToCaseIdentity(): void { // true ? A : B folds to the A case identity, not to a scalar. self::assertMatchesRegularExpression( '/const_PICKED_value_case_name = zend_string_init_interned\("A"/', $this->arginfo, ); } public function testTypedConstantKeepsDeclaredTypeAndAstValue(): void { self::assertStringContainsString('const_CASE_VALUE_value_fetch_ast->kind = ZEND_AST_CLASS_CONST;', $this->arginfo); self::assertStringContainsString('zend_declare_typed_class_constant(class_entry, const_CASE_VALUE_name', $this->arginfo); } public function testInternalEnumCaseRegistersConstantAst(): void { self::assertStringContainsString('zend_string_init_interned("RoundingMode", sizeof("RoundingMode") - 1, 1)', $this->arginfo); } public function testExpressionValuedBackedCaseRegistersComputedValue(): void { self::assertStringContainsString('ZVAL_LONG(&enum_case_A_value, 2);', $this->arginfo); } }