From 8e4b32fd7d9c427db9cd2b809b07e4bd97e5baa9 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Sat, 8 Jul 2023 17:47:23 +0200 Subject: [PATCH 1/8] TASK: Rename `NumberLiteralNode` -> `IntegerLiteralNode` --- src/Parser/Ast/EnumMemberDeclarationNode.php | 4 +-- src/Parser/Ast/ExpressionNode.php | 4 +-- ...LiteralNode.php => IntegerLiteralNode.php} | 4 +-- .../EnumDeclarationTranspiler.php | 6 ++-- .../Expression/ExpressionTranspiler.php | 4 +-- .../NumberLiteral/NumberLiteralTranspiler.php | 10 +++--- .../Expression/ExpressionTypeResolver.php | 4 +-- .../NumberLiteralTypeResolver.php | 4 +-- .../EnumWithNumberValue.ast.json | 6 ++-- .../Examples/Expression/Expression.ast.json | 4 +-- .../Examples/Numbers/Numbers.ast.json | 32 +++++++++---------- .../TemplateLiteral/TemplateLiteral.ast.json | 8 ++--- .../NumberLiteralTranspilerTest.php | 10 +++--- .../NumberLiteralTypeResolverTest.php | 8 ++--- 14 files changed, 54 insertions(+), 54 deletions(-) rename src/Parser/Ast/{NumberLiteralNode.php => IntegerLiteralNode.php} (94%) diff --git a/src/Parser/Ast/EnumMemberDeclarationNode.php b/src/Parser/Ast/EnumMemberDeclarationNode.php index 673bcd73..ccc03929 100644 --- a/src/Parser/Ast/EnumMemberDeclarationNode.php +++ b/src/Parser/Ast/EnumMemberDeclarationNode.php @@ -30,7 +30,7 @@ final class EnumMemberDeclarationNode implements \JsonSerializable { private function __construct( public readonly string $name, - public readonly null|StringLiteralNode|NumberLiteralNode $value + public readonly null|StringLiteralNode|IntegerLiteralNode $value ) { } @@ -54,7 +54,7 @@ public static function fromTokens(\Iterator $tokens): self /** @phpstan-ignore-next-line */ TokenType::STRING_QUOTED => StringLiteralNode::fromTokens($tokens), /** @phpstan-ignore-next-line */ - TokenType::NUMBER_DECIMAL => NumberLiteralNode::fromTokens($tokens), + TokenType::NUMBER_DECIMAL => IntegerLiteralNode::fromTokens($tokens), default => throw new \Exception('@TODO: Unexpected Token ' . Scanner::type($tokens)->value) }; /** @phpstan-ignore-next-line */ diff --git a/src/Parser/Ast/ExpressionNode.php b/src/Parser/Ast/ExpressionNode.php index d8437c1d..571c65d2 100644 --- a/src/Parser/Ast/ExpressionNode.php +++ b/src/Parser/Ast/ExpressionNode.php @@ -33,7 +33,7 @@ final class ExpressionNode implements \JsonSerializable { private function __construct( - public readonly IdentifierNode | NumberLiteralNode | BinaryOperationNode | UnaryOperationNode | AccessNode | TernaryOperationNode | TagNode | StringLiteralNode | MatchNode | TemplateLiteralNode | BooleanLiteralNode | NullLiteralNode $root + public readonly IdentifierNode | IntegerLiteralNode | BinaryOperationNode | UnaryOperationNode | AccessNode | TernaryOperationNode | TagNode | StringLiteralNode | MatchNode | TemplateLiteralNode | BooleanLiteralNode | NullLiteralNode $root ) { } @@ -89,7 +89,7 @@ public static function fromTokens(\Iterator &$tokens, Precedence $precedence = P case TokenType::NUMBER_DECIMAL: case TokenType::NUMBER_HEXADECIMAL: case TokenType::PERIOD: - $root = NumberLiteralNode::fromTokens($tokens); + $root = IntegerLiteralNode::fromTokens($tokens); break; case TokenType::KEYWORD_TRUE: case TokenType::KEYWORD_FALSE: diff --git a/src/Parser/Ast/NumberLiteralNode.php b/src/Parser/Ast/IntegerLiteralNode.php similarity index 94% rename from src/Parser/Ast/NumberLiteralNode.php rename to src/Parser/Ast/IntegerLiteralNode.php index 49a81b17..cba82d73 100644 --- a/src/Parser/Ast/NumberLiteralNode.php +++ b/src/Parser/Ast/IntegerLiteralNode.php @@ -26,7 +26,7 @@ use PackageFactory\ComponentEngine\Parser\Tokenizer\Scanner; use PackageFactory\ComponentEngine\Parser\Tokenizer\Token; -final class NumberLiteralNode implements \JsonSerializable +final class IntegerLiteralNode implements \JsonSerializable { private function __construct( public readonly string $value, @@ -54,7 +54,7 @@ public static function fromTokens(\Iterator $tokens): self public function jsonSerialize(): mixed { return [ - 'type' => 'NumberLiteralNode', + 'type' => 'IntegerLiteralNode', 'payload' => [ 'value' => $this->value, 'format' => $this->format->value diff --git a/src/Target/Php/Transpiler/EnumDeclaration/EnumDeclarationTranspiler.php b/src/Target/Php/Transpiler/EnumDeclaration/EnumDeclarationTranspiler.php index ef5d82a8..a73b9361 100644 --- a/src/Target/Php/Transpiler/EnumDeclaration/EnumDeclarationTranspiler.php +++ b/src/Target/Php/Transpiler/EnumDeclaration/EnumDeclarationTranspiler.php @@ -24,7 +24,7 @@ use PackageFactory\ComponentEngine\Parser\Ast\EnumDeclarationNode; use PackageFactory\ComponentEngine\Parser\Ast\EnumMemberDeclarationNode; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode; final class EnumDeclarationTranspiler @@ -62,7 +62,7 @@ public function transpile(EnumDeclarationNode $enumDeclarationNode): string private function transpileBackingType(EnumDeclarationNode $enumDeclarationNode): string { foreach ($enumDeclarationNode->memberDeclarations->items as $memberDeclarationNode) { - if ($memberDeclarationNode->value instanceof NumberLiteralNode) { + if ($memberDeclarationNode->value instanceof IntegerLiteralNode) { return 'int'; } else { return 'string'; @@ -74,7 +74,7 @@ private function transpileBackingType(EnumDeclarationNode $enumDeclarationNode): private function transpileMemberValue(EnumMemberDeclarationNode $enumMemberDeclarationNode): string { - if ($enumMemberDeclarationNode->value instanceof NumberLiteralNode) { + if ($enumMemberDeclarationNode->value instanceof IntegerLiteralNode) { return $enumMemberDeclarationNode->value->value; } else if ($enumMemberDeclarationNode->value instanceof StringLiteralNode) { return '\'' . $enumMemberDeclarationNode->value->value . '\''; diff --git a/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php b/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php index c54a503e..7e73478a 100644 --- a/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php +++ b/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php @@ -29,7 +29,7 @@ use PackageFactory\ComponentEngine\Parser\Ast\IdentifierNode; use PackageFactory\ComponentEngine\Parser\Ast\MatchNode; use PackageFactory\ComponentEngine\Parser\Ast\NullLiteralNode; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode; use PackageFactory\ComponentEngine\Parser\Ast\TagNode; use PackageFactory\ComponentEngine\Parser\Ast\TemplateLiteralNode; @@ -80,7 +80,7 @@ public function transpile(ExpressionNode $expressionNode): string scope: $this->scope ), NullLiteralNode::class => new NullLiteralTranspiler(), - NumberLiteralNode::class => new NumberLiteralTranspiler(), + IntegerLiteralNode::class => new NumberLiteralTranspiler(), StringLiteralNode::class => new StringLiteralTranspiler( shouldAddQuotes: $this->shouldAddQuotesIfNecessary ), diff --git a/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php b/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php index 60a68619..61149685 100644 --- a/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php +++ b/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php @@ -23,15 +23,15 @@ namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral; use PackageFactory\ComponentEngine\Definition\NumberFormat; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; final class NumberLiteralTranspiler { - public function transpile(NumberLiteralNode $numberLiteralNode): string + public function transpile(IntegerLiteralNode $IntegerLiteralNode): string { - return match ($numberLiteralNode->format) { - NumberFormat::BINARY => strtolower($numberLiteralNode->value), - default => $numberLiteralNode->value + return match ($IntegerLiteralNode->format) { + NumberFormat::BINARY => strtolower($IntegerLiteralNode->value), + default => $IntegerLiteralNode->value }; } } diff --git a/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php b/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php index fcc3b7ec..c540fc51 100644 --- a/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php +++ b/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php @@ -29,7 +29,7 @@ use PackageFactory\ComponentEngine\Parser\Ast\IdentifierNode; use PackageFactory\ComponentEngine\Parser\Ast\MatchNode; use PackageFactory\ComponentEngine\Parser\Ast\NullLiteralNode; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\Parser\Ast\StringLiteralNode; use PackageFactory\ComponentEngine\Parser\Ast\TagNode; use PackageFactory\ComponentEngine\Parser\Ast\TemplateLiteralNode; @@ -72,7 +72,7 @@ public function resolveTypeOf(ExpressionNode $expressionNode): TypeInterface ))->resolveTypeOf($rootNode), NullLiteralNode::class => (new NullLiteralTypeResolver()) ->resolveTypeOf($rootNode), - NumberLiteralNode::class => (new NumberLiteralTypeResolver()) + IntegerLiteralNode::class => (new NumberLiteralTypeResolver()) ->resolveTypeOf($rootNode), StringLiteralNode::class => (new StringLiteralTypeResolver()) ->resolveTypeOf($rootNode), diff --git a/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php b/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php index 82118710..2d313f4c 100644 --- a/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php +++ b/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php @@ -22,13 +22,13 @@ namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; final class NumberLiteralTypeResolver { - public function resolveTypeOf(NumberLiteralNode $numberLiteralNode): TypeInterface + public function resolveTypeOf(IntegerLiteralNode $IntegerLiteralNode): TypeInterface { return NumberType::get(); } diff --git a/test/Integration/Examples/EnumWithNumberValue/EnumWithNumberValue.ast.json b/test/Integration/Examples/EnumWithNumberValue/EnumWithNumberValue.ast.json index 150629c1..8633cd3d 100644 --- a/test/Integration/Examples/EnumWithNumberValue/EnumWithNumberValue.ast.json +++ b/test/Integration/Examples/EnumWithNumberValue/EnumWithNumberValue.ast.json @@ -11,7 +11,7 @@ "RED": { "name": "RED", "value": { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "1", "format": "DECIMAL" @@ -21,7 +21,7 @@ "YELLOW": { "name": "YELLOW", "value": { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "2", "format": "DECIMAL" @@ -31,7 +31,7 @@ "GREEN": { "name": "GREEN", "value": { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "3", "format": "DECIMAL" diff --git a/test/Integration/Examples/Expression/Expression.ast.json b/test/Integration/Examples/Expression/Expression.ast.json index 936ca0a0..3f816b38 100644 --- a/test/Integration/Examples/Expression/Expression.ast.json +++ b/test/Integration/Examples/Expression/Expression.ast.json @@ -44,7 +44,7 @@ "payload": "a" }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "120", "format": "DECIMAL" @@ -80,7 +80,7 @@ "operator": "MODULO", "operands": [ { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "17", "format": "DECIMAL" diff --git a/test/Integration/Examples/Numbers/Numbers.ast.json b/test/Integration/Examples/Numbers/Numbers.ast.json index 56d43578..87761cc6 100644 --- a/test/Integration/Examples/Numbers/Numbers.ast.json +++ b/test/Integration/Examples/Numbers/Numbers.ast.json @@ -84,14 +84,14 @@ "operator": "PLUS", "operands": [ { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0", "format": "DECIMAL" } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "1234567890", "format": "DECIMAL" @@ -101,7 +101,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "42", "format": "DECIMAL" @@ -111,7 +111,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0b10000000000000000000000000000000", "format": "BINARY" @@ -121,7 +121,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0b01111111100000000000000000000000", "format": "BINARY" @@ -131,7 +131,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0B00000000011111111111111111111111", "format": "BINARY" @@ -141,7 +141,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0o755", "format": "OCTAL" @@ -151,7 +151,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0o644", "format": "OCTAL" @@ -161,7 +161,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0xFFFFFFFFFFFFFFFFF", "format": "HEXADECIMAL" @@ -171,7 +171,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0x123456789ABCDEF", "format": "HEXADECIMAL" @@ -181,7 +181,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0xA", "format": "HEXADECIMAL" @@ -191,7 +191,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "1E3", "format": "DECIMAL" @@ -201,7 +201,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "2e6", "format": "DECIMAL" @@ -211,7 +211,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "123.456", "format": "DECIMAL" @@ -221,7 +221,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "0.1e2", "format": "DECIMAL" @@ -231,7 +231,7 @@ } }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": ".22", "format": "DECIMAL" diff --git a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json index 5ff62a8f..920d8799 100644 --- a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json +++ b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json @@ -58,7 +58,7 @@ "operator": "MULTIPLY_BY", "operands": [ { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "27", "format": "DECIMAL" } }, { @@ -78,7 +78,7 @@ "payload": "someNumber" }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "17", "format": "DECIMAL" } } ] @@ -114,7 +114,7 @@ "payload": "someNumber" }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "27", "format": "DECIMAL" @@ -140,7 +140,7 @@ "payload": [ { "type": "StringLiteralNode", "payload": "Number is " }, { - "type": "NumberLiteralNode", + "type": "IntegerLiteralNode", "payload": { "value": "27", "format": "DECIMAL" } } ] diff --git a/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php b/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php index 4f96d835..6efff513 100644 --- a/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php @@ -23,7 +23,7 @@ namespace PackageFactory\ComponentEngine\Test\Unit\Target\Php\Transpiler\NumberLiteral; use PackageFactory\ComponentEngine\Parser\Ast\ExpressionNode; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral\NumberLiteralTranspiler; use PHPUnit\Framework\TestCase; @@ -72,14 +72,14 @@ public static function numberLiteralExamples(): array * @param string $expectedTranspilationResult * @return void */ - public function transpilesNumberLiteralNodes(string $numberLiteralAsString, string $expectedTranspilationResult): void + public function transpilesIntegerLiteralNodes(string $numberLiteralAsString, string $expectedTranspilationResult): void { $numberLiteralTranspiler = new NumberLiteralTranspiler(); - $numberLiteralNode = ExpressionNode::fromString($numberLiteralAsString)->root; - assert($numberLiteralNode instanceof NumberLiteralNode); + $IntegerLiteralNode = ExpressionNode::fromString($numberLiteralAsString)->root; + assert($IntegerLiteralNode instanceof IntegerLiteralNode); $actualTranspilationResult = $numberLiteralTranspiler->transpile( - $numberLiteralNode + $IntegerLiteralNode ); $this->assertEquals( diff --git a/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php index 0fe6b4d8..6161ec9c 100644 --- a/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php @@ -23,7 +23,7 @@ namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Resolver\NumberLiteral; use PackageFactory\ComponentEngine\Parser\Ast\ExpressionNode; -use PackageFactory\ComponentEngine\Parser\Ast\NumberLiteralNode; +use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral\NumberLiteralTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; use PHPUnit\Framework\TestCase; @@ -36,11 +36,11 @@ final class NumberLiteralTypeResolverTest extends TestCase public function resolvesNumberLiteralToNumberType(): void { $numberLiteralTypeResolver = new NumberLiteralTypeResolver(); - $numberLiteralNode = ExpressionNode::fromString('42')->root; - assert($numberLiteralNode instanceof NumberLiteralNode); + $IntegerLiteralNode = ExpressionNode::fromString('42')->root; + assert($IntegerLiteralNode instanceof IntegerLiteralNode); $expectedType = NumberType::get(); - $actualType = $numberLiteralTypeResolver->resolveTypeOf($numberLiteralNode); + $actualType = $numberLiteralTypeResolver->resolveTypeOf($IntegerLiteralNode); $this->assertTrue( $expectedType->is($actualType), From a6af4fc96b296bfe30d40fe584f4bfe0d1b442d9 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 15:35:10 +0200 Subject: [PATCH 2/8] TASK: Remove arithmetic operators from `BinaryOperator` enum --- src/Definition/BinaryOperator.php | 19 ------ .../BinaryOperationTranspiler.php | 5 -- .../BinaryOperationTypeResolver.php | 23 ------- .../Examples/Expression/Expression.afx | 6 +- .../Examples/Expression/Expression.ast.json | 24 ++------ .../Examples/Expression/Expression.php | 2 +- .../Expression/Expression.tokens.json | 36 ++--------- test/Integration/Examples/Numbers/Numbers.afx | 30 +++++----- .../Examples/Numbers/Numbers.ast.json | 30 +++++----- test/Integration/Examples/Numbers/Numbers.php | 2 +- .../Examples/Numbers/Numbers.tokens.json | 60 +++++++++---------- .../TemplateLiteral/TemplateLiteral.afx | 2 +- .../TemplateLiteral/TemplateLiteral.ast.json | 50 ++++++---------- .../TemplateLiteral/TemplateLiteral.php | 2 +- .../TemplateLiteral.tokens.json | 32 ---------- .../Attribute/AttributeTranspilerTest.php | 1 - .../BinaryOperationTranspilerTest.php | 29 --------- .../TernaryOperationTranspilerTest.php | 2 +- .../BinaryOperationTypeResolverTest.php | 49 --------------- .../Expression/ExpressionTypeResolverTest.php | 6 -- 20 files changed, 99 insertions(+), 311 deletions(-) diff --git a/src/Definition/BinaryOperator.php b/src/Definition/BinaryOperator.php index 07ac8a2e..a46e840b 100644 --- a/src/Definition/BinaryOperator.php +++ b/src/Definition/BinaryOperator.php @@ -29,12 +29,6 @@ enum BinaryOperator: string case AND = 'AND'; case OR = 'OR'; - case PLUS = 'PLUS'; - case MINUS = 'MINUS'; - case MULTIPLY_BY = 'MULTIPLY_BY'; - case DIVIDE_BY = 'DIVIDE_BY'; - case MODULO = 'MODULO'; - case EQUAL = 'EQUAL'; case NOT_EQUAL = 'NOT_EQUAL'; case GREATER_THAN = 'GREATER_THAN'; @@ -48,12 +42,6 @@ public static function fromTokenType(TokenType $tokenType): self TokenType::OPERATOR_BOOLEAN_AND => self::AND, TokenType::OPERATOR_BOOLEAN_OR => self::OR, - TokenType::OPERATOR_ARITHMETIC_PLUS => self::PLUS, - TokenType::OPERATOR_ARITHMETIC_MINUS => self::MINUS, - TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY => self::MULTIPLY_BY, - TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY => self::DIVIDE_BY, - TokenType::OPERATOR_ARITHMETIC_MODULO => self::MODULO, - TokenType::COMPARATOR_EQUAL => self::EQUAL, TokenType::COMPARATOR_NOT_EQUAL => self::NOT_EQUAL, TokenType::COMPARATOR_GREATER_THAN => self::GREATER_THAN, @@ -72,13 +60,6 @@ public function toPrecedence(): Precedence self::OR => Precedence::LOGICAL_OR, - self::PLUS, - self::MINUS => Precedence::DASH, - - self::MULTIPLY_BY, - self::DIVIDE_BY, - self::MODULO => Precedence::POINT, - self::EQUAL, self::NOT_EQUAL => Precedence::EQUALITY, diff --git a/src/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspiler.php b/src/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspiler.php index b5268b19..abc7ff72 100644 --- a/src/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspiler.php +++ b/src/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspiler.php @@ -38,11 +38,6 @@ private function transpileBinaryOperator(BinaryOperator $binaryOperator): string return match ($binaryOperator) { BinaryOperator::AND => '&&', BinaryOperator::OR => '||', - BinaryOperator::PLUS => '+', - BinaryOperator::MINUS => '-', - BinaryOperator::MULTIPLY_BY => '*', - BinaryOperator::DIVIDE_BY => '/', - BinaryOperator::MODULO => '%', BinaryOperator::EQUAL => '===', BinaryOperator::NOT_EQUAL => '!==', BinaryOperator::GREATER_THAN => '>', diff --git a/src/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolver.php b/src/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolver.php index cf95fe8b..d6580a6c 100644 --- a/src/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolver.php +++ b/src/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolver.php @@ -27,7 +27,6 @@ use PackageFactory\ComponentEngine\TypeSystem\Resolver\Expression\ExpressionTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -44,12 +43,6 @@ public function resolveTypeOf(BinaryOperationNode $binaryOperationNode): TypeInt BinaryOperator::AND, BinaryOperator::OR => $this->resolveTypeOfBooleanOperation($binaryOperationNode), - BinaryOperator::PLUS, - BinaryOperator::MINUS, - BinaryOperator::MULTIPLY_BY, - BinaryOperator::DIVIDE_BY, - BinaryOperator::MODULO => $this->resolveTypeOfArithmeticOperation($binaryOperationNode), - BinaryOperator::EQUAL, BinaryOperator::NOT_EQUAL, BinaryOperator::GREATER_THAN, @@ -70,20 +63,4 @@ private function resolveTypeOfBooleanOperation(BinaryOperationNode $binaryOperat $expressionTypeResolver->resolveTypeOf($binaryOperationNode->right) ); } - - private function resolveTypeOfArithmeticOperation(BinaryOperationNode $binaryOperationNode): TypeInterface - { - $expressionTypeResolver = new ExpressionTypeResolver( - scope: $this->scope - ); - - foreach ([$binaryOperationNode->left, $binaryOperationNode->right] as $operandNode) { - $typeOfOperandNode = $expressionTypeResolver->resolveTypeOf($operandNode); - if (!$typeOfOperandNode->is(NumberType::get())) { - throw new \Exception('@TODO: Operand must be of type number'); - } - } - - return NumberType::get(); - } } diff --git a/test/Integration/Examples/Expression/Expression.afx b/test/Integration/Examples/Expression/Expression.afx index 5c4e9a82..a098cddd 100644 --- a/test/Integration/Examples/Expression/Expression.afx +++ b/test/Integration/Examples/Expression/Expression.afx @@ -3,6 +3,6 @@ export component Expression { b: number return a <= 120 - ? b * a + (17 % b) - : b / a -} \ No newline at end of file + ? b || a || 17 + : b && a +} diff --git a/test/Integration/Examples/Expression/Expression.ast.json b/test/Integration/Examples/Expression/Expression.ast.json index 3f816b38..a2055f1d 100644 --- a/test/Integration/Examples/Expression/Expression.ast.json +++ b/test/Integration/Examples/Expression/Expression.ast.json @@ -56,12 +56,12 @@ "true": { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "MULTIPLY_BY", + "operator": "OR", "operands": [ { "type": "Identifier", @@ -75,22 +75,10 @@ } }, { - "type": "BinaryOperationNode", + "type": "IntegerLiteralNode", "payload": { - "operator": "MODULO", - "operands": [ - { - "type": "IntegerLiteralNode", - "payload": { - "value": "17", - "format": "DECIMAL" - } - }, - { - "type": "Identifier", - "payload": "b" - } - ] + "value": "17", + "format": "DECIMAL" } } ] @@ -99,7 +87,7 @@ "false": { "type": "BinaryOperationNode", "payload": { - "operator": "DIVIDE_BY", + "operator": "AND", "operands": [ { "type": "Identifier", diff --git a/test/Integration/Examples/Expression/Expression.php b/test/Integration/Examples/Expression/Expression.php index 547282b8..d37ad8db 100644 --- a/test/Integration/Examples/Expression/Expression.php +++ b/test/Integration/Examples/Expression/Expression.php @@ -16,6 +16,6 @@ public function __construct( public function render(): string { - return (string) (($this->a <= 120) ? (($this->b * $this->a) + (17 % $this->b)) : ($this->b / $this->a)); + return (string) (($this->a <= 120) ? (($this->b || $this->a) || 17) : ($this->b && $this->a)); } } diff --git a/test/Integration/Examples/Expression/Expression.tokens.json b/test/Integration/Examples/Expression/Expression.tokens.json index eaa47363..0ff447a1 100644 --- a/test/Integration/Examples/Expression/Expression.tokens.json +++ b/test/Integration/Examples/Expression/Expression.tokens.json @@ -140,8 +140,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_MULTIPLY_BY", - "value": "*" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "SPACE", @@ -156,41 +156,17 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "SPACE", "value": " " }, - { - "type": "BRACKET_ROUND_OPEN", - "value": "(" - }, { "type": "NUMBER_DECIMAL", "value": "17" }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_ARITHMETIC_MODULO", - "value": "%" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "STRING", - "value": "b" - }, - { - "type": "BRACKET_ROUND_CLOSE", - "value": ")" - }, { "type": "END_OF_LINE", "value": "\n" @@ -216,8 +192,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_DIVIDE_BY", - "value": "/" + "type": "OPERATOR_BOOLEAN_AND", + "value": "&&" }, { "type": "SPACE", diff --git a/test/Integration/Examples/Numbers/Numbers.afx b/test/Integration/Examples/Numbers/Numbers.afx index a315619d..fe497e81 100644 --- a/test/Integration/Examples/Numbers/Numbers.afx +++ b/test/Integration/Examples/Numbers/Numbers.afx @@ -1,30 +1,30 @@ export component Numbers { return # Decimal - 0 + - 1234567890 + - 42 + + 0 || + 1234567890 || + 42 || # Binary - 0b10000000000000000000000000000000 + - 0b01111111100000000000000000000000 + - 0B00000000011111111111111111111111 + + 0b10000000000000000000000000000000 || + 0b01111111100000000000000000000000 || + 0B00000000011111111111111111111111 || # Octal - 0o755 + - 0o644 + + 0o755 || + 0o644 || # Hexadecimal - 0xFFFFFFFFFFFFFFFFF + - 0x123456789ABCDEF + - 0xA + + 0xFFFFFFFFFFFFFFFFF || + 0x123456789ABCDEF || + 0xA || # With Exponent - 1E3 + - 2e6 + + 1E3 || + 2e6 || # With Floating Point - 123.456 + - 0.1e2 + + 123.456 || + 0.1e2 || .22 } diff --git a/test/Integration/Examples/Numbers/Numbers.ast.json b/test/Integration/Examples/Numbers/Numbers.ast.json index 87761cc6..bf619950 100644 --- a/test/Integration/Examples/Numbers/Numbers.ast.json +++ b/test/Integration/Examples/Numbers/Numbers.ast.json @@ -11,77 +11,77 @@ "returnExpression": { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "BinaryOperationNode", "payload": { - "operator": "PLUS", + "operator": "OR", "operands": [ { "type": "IntegerLiteralNode", diff --git a/test/Integration/Examples/Numbers/Numbers.php b/test/Integration/Examples/Numbers/Numbers.php index 58555d25..bf363852 100644 --- a/test/Integration/Examples/Numbers/Numbers.php +++ b/test/Integration/Examples/Numbers/Numbers.php @@ -10,6 +10,6 @@ final class Numbers extends BaseClass { public function render(): string { - return (string) (((((((((((((((0 + 1234567890) + 42) + 0b10000000000000000000000000000000) + 0b01111111100000000000000000000000) + 0b00000000011111111111111111111111) + 0o755) + 0o644) + 0xFFFFFFFFFFFFFFFFF) + 0x123456789ABCDEF) + 0xA) + 1E3) + 2e6) + 123.456) + 0.1e2) + .22); + return (string) (((((((((((((((0 || 1234567890) || 42) || 0b10000000000000000000000000000000) || 0b01111111100000000000000000000000) || 0b00000000011111111111111111111111) || 0o755) || 0o644) || 0xFFFFFFFFFFFFFFFFF) || 0x123456789ABCDEF) || 0xA) || 1E3) || 2e6) || 123.456) || 0.1e2) || .22); } } diff --git a/test/Integration/Examples/Numbers/Numbers.tokens.json b/test/Integration/Examples/Numbers/Numbers.tokens.json index ff727ee2..ca42d670 100644 --- a/test/Integration/Examples/Numbers/Numbers.tokens.json +++ b/test/Integration/Examples/Numbers/Numbers.tokens.json @@ -68,8 +68,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -88,8 +88,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -108,8 +108,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -144,8 +144,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -164,8 +164,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -184,8 +184,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -220,8 +220,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -240,8 +240,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -276,8 +276,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -296,8 +296,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -316,8 +316,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -352,8 +352,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -372,8 +372,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -408,8 +408,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", @@ -428,8 +428,8 @@ "value": " " }, { - "type": "OPERATOR_ARITHMETIC_PLUS", - "value": "+" + "type": "OPERATOR_BOOLEAN_OR", + "value": "||" }, { "type": "END_OF_LINE", diff --git a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.afx b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.afx index 8e6a9987..8f467526 100644 --- a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.afx +++ b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.afx @@ -8,7 +8,7 @@ export component TemplateLiteral { It can span multiple lines. Interpolated Expressions can be arbitrarily complex: - ${isActive ? 27 * someNumber : someNumber % 17} + ${isActive ? 27 : 17} They can also contain other template literals: ${isActive ? `Is 27? ${someNumber === 27 ? "yes" : "no"}` : `Number is ${27}`} diff --git a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json index 920d8799..b477685b 100644 --- a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json +++ b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.ast.json @@ -12,21 +12,33 @@ "name": "expression", "type": { "type": "TypeReferenceNode", - "payload": { "name": "string", "isArray": false, "isOptional": false } + "payload": { + "name": "string", + "isArray": false, + "isOptional": false + } } }, { "name": "isActive", "type": { "type": "TypeReferenceNode", - "payload": { "name": "boolean", "isArray": false, "isOptional": false } + "payload": { + "name": "boolean", + "isArray": false, + "isOptional": false + } } }, { "name": "someNumber", "type": { "type": "TypeReferenceNode", - "payload": { "name": "number", "isArray": false, "isOptional": false } + "payload": { + "name": "number", + "isArray": false, + "isOptional": false + } } } ], @@ -53,36 +65,12 @@ "payload": "isActive" }, "true": { - "type": "BinaryOperationNode", - "payload": { - "operator": "MULTIPLY_BY", - "operands": [ - { - "type": "IntegerLiteralNode", - "payload": { "value": "27", "format": "DECIMAL" } - }, - { - "type": "Identifier", - "payload": "someNumber" - } - ] - } + "type": "IntegerLiteralNode", + "payload": { "value": "27", "format": "DECIMAL" } }, "false": { - "type": "BinaryOperationNode", - "payload": { - "operator": "MODULO", - "operands": [ - { - "type": "Identifier", - "payload": "someNumber" - }, - { - "type": "IntegerLiteralNode", - "payload": { "value": "17", "format": "DECIMAL" } - } - ] - } + "type": "IntegerLiteralNode", + "payload": { "value": "17", "format": "DECIMAL" } } } }, diff --git a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.php b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.php index 9cf72e63..a802f738 100644 --- a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.php +++ b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.php @@ -17,6 +17,6 @@ public function __construct( public function render(): string { - return 'A template literal may contain ' . $this->expression . 's.' . "\n\n" . ' It can span multiple lines.' . "\n\n" . ' Interpolated Expressions can be arbitrarily complex:' . "\n" . ' ' . ($this->isActive ? (27 * $this->someNumber) : ($this->someNumber % 17)) . "\n\n" . ' They can also contain other template literals:' . "\n" . ' ' . ($this->isActive ? 'Is 27? ' . (($this->someNumber === 27) ? 'yes' : 'no') : 'Number is ' . 27) . "\n\n" . ' Even markup:' . "\n" . ' ' . '

Number is ' . $this->someNumber . '

' . "\n" . ' '; + return 'A template literal may contain ' . $this->expression . 's.' . "\n\n" . ' It can span multiple lines.' . "\n\n" . ' Interpolated Expressions can be arbitrarily complex:' . "\n" . ' ' . ($this->isActive ? 27 : 17) . "\n\n" . ' They can also contain other template literals:' . "\n" . ' ' . ($this->isActive ? 'Is 27? ' . (($this->someNumber === 27) ? 'yes' : 'no') : 'Number is ' . 27) . "\n\n" . ' Even markup:' . "\n" . ' ' . '

Number is ' . $this->someNumber . '

' . "\n" . ' '; } } diff --git a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.tokens.json b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.tokens.json index 332127ce..a2d2c635 100644 --- a/test/Integration/Examples/TemplateLiteral/TemplateLiteral.tokens.json +++ b/test/Integration/Examples/TemplateLiteral/TemplateLiteral.tokens.json @@ -179,22 +179,6 @@ "type": "SPACE", "value": " " }, - { - "type": "OPERATOR_ARITHMETIC_MULTIPLY_BY", - "value": "*" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "STRING", - "value": "someNumber" - }, - { - "type": "SPACE", - "value": " " - }, { "type": "COLON", "value": ":" @@ -203,22 +187,6 @@ "type": "SPACE", "value": " " }, - { - "type": "STRING", - "value": "someNumber" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_ARITHMETIC_MODULO", - "value": "%" - }, - { - "type": "SPACE", - "value": " " - }, { "type": "NUMBER_DECIMAL", "value": "17" diff --git a/test/Unit/Target/Php/Transpiler/Attribute/AttributeTranspilerTest.php b/test/Unit/Target/Php/Transpiler/Attribute/AttributeTranspilerTest.php index 4e3efcdd..ea760619 100644 --- a/test/Unit/Target/Php/Transpiler/Attribute/AttributeTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/Attribute/AttributeTranspilerTest.php @@ -37,7 +37,6 @@ public static function attributeExamples(): array return [ 'foo="bar"' => ['foo="bar"', 'foo="bar"'], 'foo={42}' => ['foo={42}', 'foo="\' . 42 . \'"'], - 'foo={4 + 2}' => ['foo={4 + 2}', 'foo="\' . (4 + 2) . \'"'], 'foo={a}' => ['foo={a}', 'foo="\' . $this->a . \'"'], ]; } diff --git a/test/Unit/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspilerTest.php b/test/Unit/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspilerTest.php index 79f2de91..55c98e87 100644 --- a/test/Unit/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/BinaryOperation/BinaryOperationTranspilerTest.php @@ -49,34 +49,6 @@ public static function binaryOperationExamples(): array 'true && 42' => ['true && 42', '(true && 42)'], 'true || 42' => ['true || 42', '(true || 42)'], - '1 + 2' => ['1 + 2', '(1 + 2)'], - 'a + 2' => ['a + 2', '($this->a + 2)'], - '1 + b' => ['1 + b', '(1 + $this->b)'], - 'a + b' => ['a + b', '($this->a + $this->b)'], - '2 - 1' => ['2 - 1', '(2 - 1)'], - 'a - 1' => ['a - 1', '($this->a - 1)'], - '2 - b' => ['2 - b', '(2 - $this->b)'], - 'a - b' => ['a - b', '($this->a - $this->b)'], - '2 * 4' => ['2 * 4', '(2 * 4)'], - 'a * 4' => ['a * 4', '($this->a * 4)'], - '2 * b' => ['2 * b', '(2 * $this->b)'], - 'a * b' => ['a * b', '($this->a * $this->b)'], - '2 / 4' => ['2 / 4', '(2 / 4)'], - 'a / 4' => ['a / 4', '($this->a / 4)'], - '2 / b' => ['2 / b', '(2 / $this->b)'], - 'a / b' => ['a / b', '($this->a / $this->b)'], - '2 % 4' => ['2 % 4', '(2 % 4)'], - 'a % 4' => ['a % 4', '($this->a % 4)'], - '2 % b' => ['2 % b', '(2 % $this->b)'], - 'a % b' => ['a % b', '($this->a % $this->b)'], - - '!1 + 1' => ['!1 + 1', '((!1) + 1)'], - - '42 * a / 23 + b - 17 * c' => [ - '42 * a / 23 + b - 17 * c', - '((((42 * $this->a) / 23) + $this->b) - (17 * $this->c))' - ], - '4 === 2' => ['4 === 2', '(4 === 2)'], 'a === 2' => ['a === 2', '($this->a === 2)'], '4 === b' => ['4 === b', '(4 === $this->b)'], @@ -104,7 +76,6 @@ public static function binaryOperationExamples(): array 'true && true && true' => ['true && true && true', '((true && true) && true)'], '1 === 1 === true' => ['1 === 1 === true', '((1 === 1) === true)'], - '1 + 1 + 1' => ['1 + 1 + 1', '((1 + 1) + 1)'], ]; } diff --git a/test/Unit/Target/Php/Transpiler/TernaryOperation/TernaryOperationTranspilerTest.php b/test/Unit/Target/Php/Transpiler/TernaryOperation/TernaryOperationTranspilerTest.php index 242739ea..05e2ee0f 100644 --- a/test/Unit/Target/Php/Transpiler/TernaryOperation/TernaryOperationTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/TernaryOperation/TernaryOperationTranspilerTest.php @@ -61,7 +61,7 @@ public static function ternaryOperationWithVariablesInConditionExamples(): array 'true === someStruct.deep.foo ? "a" : "foo"' => ['true === someStruct.deep.foo ? "a" : "foo"', '((true === $this->someStruct->deep->foo) ? \'a\' : \'foo\')'], 'someStruct.foo === true ? "a" : "foo"' => ['someStruct.foo === true ? "a" : "foo"', '(($this->someStruct->foo === true) ? \'a\' : \'foo\')'], 'someStruct.foo === true || false ? "a" : "foo"' => ['someStruct.foo === true || false ? "a" : "foo"', '((($this->someStruct->foo === true) || false) ? \'a\' : \'foo\')'], - '1 + 2 + 3 === a || 5 * b || c === true && false ? "a" : "foo"' => ['1 + 2 + 3 === a || 5 * b || c === true && false ? "a" : "foo"', '((((((1 + 2) + 3) === $this->a) || (5 * $this->b)) || (($this->c === true) && false)) ? \'a\' : \'foo\')'], + '1 < 2 === a || 5 > b || c === true && false ? "a" : "foo"' => ['1 < 2 === a || 5 > b || c === true && false ? "a" : "foo"', '(((((1 < 2) === $this->a) || (5 > $this->b)) || (($this->c === true) && false)) ? \'a\' : \'foo\')'], ]; } diff --git a/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php index 5fb74494..a247c332 100644 --- a/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php @@ -48,12 +48,6 @@ public static function binaryOperationExamples(): array 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), NumberType::get())], 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), NumberType::get())], - '1 + 2' => ['1 + 2', NumberType::get()], - '2 - 1' => ['2 - 1', NumberType::get()], - '2 * 4' => ['2 * 4', NumberType::get()], - '2 / 4' => ['2 / 4', NumberType::get()], - '2 % 4' => ['2 % 4', NumberType::get()], - '4 === 2' => ['4 === 2', BooleanType::get()], '4 !== 2' => ['4 !== 2', BooleanType::get()], '4 > 2' => ['4 > 2', BooleanType::get()], @@ -63,7 +57,6 @@ public static function binaryOperationExamples(): array 'true && true && true' => ['true && true && true', BooleanType::get()], '1 === 1 === true' => ['1 === 1 === true', BooleanType::get()], - '1 + 1 + 1' => ['1 + 1 + 1', NumberType::get()], ]; } @@ -90,46 +83,4 @@ public function resolvesBinaryOperationToResultingType(string $binaryOperationAs sprintf('Expected %s, got %s', $expectedType::class, $actualType::class) ); } - - - /** - * @return array - */ - public static function faultyArithmeticOperationExamples(): array - { - return [ - '1 + false' => ['1 + false'], - '1 + "foo"' => ['1 + "foo"'], - '1 + null' => ['1 + null'], - '1 + ' => ['1 + '], - 'true + 1' => ['true + 1'], - '"bar" + 1' => ['"bar" + 1'], - 'null + 1' => ['null + 1'], - ' + 1' => [' + 1'], - 'true + false' => ['true + false'], - 'true + null' => ['true + null'], - 'null + "foobar"' => ['null + "foobar"'], - '"foobar" + ' => ['"foobar" + '], - ]; - } - - /** - * @dataProvider faultyArithmeticOperationExamples - * @test - * @param string $faultyArithmeticOperationAsString - * @return void - */ - public function throwsIfBinaryOperationIsArithmeticButOperandsAreNotOfTypeNumber(string $faultyArithmeticOperationAsString): void - { - $scope = new DummyScope(); - $binaryOperationTypeResolver = new BinaryOperationTypeResolver( - scope: $scope - ); - $arithmeticOperationNode = ExpressionNode::fromString($faultyArithmeticOperationAsString)->root; - assert($arithmeticOperationNode instanceof BinaryOperationNode); - - $this->expectExceptionMessageMatches('/number/i'); - - $binaryOperationTypeResolver->resolveTypeOf($arithmeticOperationNode); - } } diff --git a/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php index c2bc8824..f6c5a164 100644 --- a/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php @@ -48,12 +48,6 @@ public static function binaryOperationExamples(): array 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), NumberType::get())], 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), NumberType::get())], - '1 + 2' => ['1 + 2', NumberType::get()], - '2 - 1' => ['2 - 1', NumberType::get()], - '2 * 4' => ['2 * 4', NumberType::get()], - '2 / 4' => ['2 / 4', NumberType::get()], - '2 % 4' => ['2 % 4', NumberType::get()], - '4 === 2' => ['4 === 2', BooleanType::get()], '4 !== 2' => ['4 !== 2', BooleanType::get()], '4 > 2' => ['4 > 2', BooleanType::get()], From 634a2354334e8da7a60d278e73b1bb8ebd5ae7c2 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 16:01:12 +0200 Subject: [PATCH 3/8] TASK: Rename `NumberType` to `IntegerType` --- .../Expression/ExpressionTranspiler.php | 4 +-- .../IntegerLiteralTranspiler.php} | 4 +-- .../TypeReference/TypeReferenceTranspiler.php | 4 +-- .../Expression/ExpressionTypeResolver.php | 4 +-- .../IntegerLiteralTypeResolver.php} | 8 +++--- .../Scope/GlobalScope/GlobalScope.php | 5 ++-- .../IntegerType.php} | 4 +-- .../IntegerLiteralTranspilerTest.php} | 24 ++++++++-------- .../TypeReferenceTranspilerTest.php | 4 +-- .../BinaryOperationTypeResolverTest.php | 6 ++-- .../Expression/ExpressionTypeResolverTest.php | 22 +++++++-------- .../IntegerLiteralTypeResolverTest.php} | 18 ++++++------ .../Resolver/Match/MatchTypeResolverTest.php | 14 +++++----- .../TernaryOperationTypeResolverTest.php | 10 +++---- .../ComponentScope/ComponentScopeTest.php | 6 ++-- .../IntegerTypeTest.php} | 20 ++++++------- .../TypeSystem/Type/SlotType/SlotTypeTest.php | 4 +-- .../Type/StringType/StringTypeTest.php | 6 ++-- .../Type/UnionType/UnionTypeTest.php | 28 +++++++++---------- 19 files changed, 97 insertions(+), 98 deletions(-) rename src/Target/Php/Transpiler/{NumberLiteral/NumberLiteralTranspiler.php => IntegerLiteral/IntegerLiteralTranspiler.php} (91%) rename src/TypeSystem/Resolver/{NumberLiteral/NumberLiteralTypeResolver.php => IntegerLiteral/IntegerLiteralTypeResolver.php} (82%) rename src/TypeSystem/Type/{NumberType/NumberType.php => IntegerType/IntegerType.php} (91%) rename test/Unit/Target/Php/Transpiler/{NumberLiteral/NumberLiteralTranspilerTest.php => IntegerLiteral/IntegerLiteralTranspilerTest.php} (77%) rename test/Unit/TypeSystem/Resolver/{NumberLiteral/NumberLiteralTypeResolverTest.php => IntegerLiteral/IntegerLiteralTypeResolverTest.php} (67%) rename test/Unit/TypeSystem/Type/{NumberType/NumberTypeTest.php => IntegerType/IntegerTypeTest.php} (68%) diff --git a/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php b/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php index 7e73478a..450ff657 100644 --- a/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php +++ b/src/Target/Php/Transpiler/Expression/ExpressionTranspiler.php @@ -41,7 +41,7 @@ use PackageFactory\ComponentEngine\Target\Php\Transpiler\Identifier\IdentifierTranspiler; use PackageFactory\ComponentEngine\Target\Php\Transpiler\Match\MatchTranspiler; use PackageFactory\ComponentEngine\Target\Php\Transpiler\NullLiteral\NullLiteralTranspiler; -use PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral\NumberLiteralTranspiler; +use PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral\IntegerLiteralTranspiler; use PackageFactory\ComponentEngine\Target\Php\Transpiler\StringLiteral\StringLiteralTranspiler; use PackageFactory\ComponentEngine\Target\Php\Transpiler\Tag\TagTranspiler; use PackageFactory\ComponentEngine\Target\Php\Transpiler\TemplateLiteral\TemplateLiteralTranspiler; @@ -80,7 +80,7 @@ public function transpile(ExpressionNode $expressionNode): string scope: $this->scope ), NullLiteralNode::class => new NullLiteralTranspiler(), - IntegerLiteralNode::class => new NumberLiteralTranspiler(), + IntegerLiteralNode::class => new IntegerLiteralTranspiler(), StringLiteralNode::class => new StringLiteralTranspiler( shouldAddQuotes: $this->shouldAddQuotesIfNecessary ), diff --git a/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php similarity index 91% rename from src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php rename to src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php index 61149685..e9a84b76 100644 --- a/src/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspiler.php +++ b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php @@ -20,12 +20,12 @@ declare(strict_types=1); -namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral; +namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral; use PackageFactory\ComponentEngine\Definition\NumberFormat; use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; -final class NumberLiteralTranspiler +final class IntegerLiteralTranspiler { public function transpile(IntegerLiteralNode $IntegerLiteralNode): string { diff --git a/src/Target/Php/Transpiler/TypeReference/TypeReferenceTranspiler.php b/src/Target/Php/Transpiler/TypeReference/TypeReferenceTranspiler.php index b36a7e2b..2992d632 100644 --- a/src/Target/Php/Transpiler/TypeReference/TypeReferenceTranspiler.php +++ b/src/Target/Php/Transpiler/TypeReference/TypeReferenceTranspiler.php @@ -27,7 +27,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; use PackageFactory\ComponentEngine\TypeSystem\Type\ComponentType\ComponentType; use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\SlotType\SlotType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\StructType\StructType; @@ -44,7 +44,7 @@ public function transpile(TypeReferenceNode $typeReferenceNode): string { $type = $this->scope->resolveTypeReference($typeReferenceNode); $phpTypeReference = match ($type::class) { - NumberType::class => 'int|float', + IntegerType::class => 'int|float', StringType::class => 'string', BooleanType::class => 'bool', SlotType::class => $this->strategy->getPhpTypeReferenceForSlotType($type, $typeReferenceNode), diff --git a/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php b/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php index c540fc51..872b9da1 100644 --- a/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php +++ b/src/TypeSystem/Resolver/Expression/ExpressionTypeResolver.php @@ -40,7 +40,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Resolver\Identifier\IdentifierTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Resolver\Match\MatchTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Resolver\NullLiteral\NullLiteralTypeResolver; -use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral\NumberLiteralTypeResolver; +use PackageFactory\ComponentEngine\TypeSystem\Resolver\IntegerLiteral\IntegerLiteralTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Resolver\StringLiteral\StringLiteralTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Resolver\Tag\TagTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Resolver\TemplateLiteral\TemplateLiteralTypeResolver; @@ -72,7 +72,7 @@ public function resolveTypeOf(ExpressionNode $expressionNode): TypeInterface ))->resolveTypeOf($rootNode), NullLiteralNode::class => (new NullLiteralTypeResolver()) ->resolveTypeOf($rootNode), - IntegerLiteralNode::class => (new NumberLiteralTypeResolver()) + IntegerLiteralNode::class => (new IntegerLiteralTypeResolver()) ->resolveTypeOf($rootNode), StringLiteralNode::class => (new StringLiteralTypeResolver()) ->resolveTypeOf($rootNode), diff --git a/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php b/src/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolver.php similarity index 82% rename from src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php rename to src/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolver.php index 2d313f4c..93582f6c 100644 --- a/src/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolver.php +++ b/src/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolver.php @@ -20,16 +20,16 @@ declare(strict_types=1); -namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral; +namespace PackageFactory\ComponentEngine\TypeSystem\Resolver\IntegerLiteral; use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; -final class NumberLiteralTypeResolver +final class IntegerLiteralTypeResolver { public function resolveTypeOf(IntegerLiteralNode $IntegerLiteralNode): TypeInterface { - return NumberType::get(); + return IntegerType::get(); } } diff --git a/src/TypeSystem/Scope/GlobalScope/GlobalScope.php b/src/TypeSystem/Scope/GlobalScope/GlobalScope.php index a6ab1b87..f9253a55 100644 --- a/src/TypeSystem/Scope/GlobalScope/GlobalScope.php +++ b/src/TypeSystem/Scope/GlobalScope/GlobalScope.php @@ -22,11 +22,10 @@ namespace PackageFactory\ComponentEngine\TypeSystem\Scope\GlobalScope; -use PackageFactory\ComponentEngine\Parser\Ast\ComponentDeclarationNode; use PackageFactory\ComponentEngine\Parser\Ast\TypeReferenceNode; use PackageFactory\ComponentEngine\TypeSystem\ScopeInterface; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\SlotType\SlotType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -53,7 +52,7 @@ public function resolveTypeReference(TypeReferenceNode $typeReferenceNode): Type { return match ($typeReferenceNode->name) { 'string' => StringType::get(), - 'number' => NumberType::get(), + 'number' => IntegerType::get(), 'boolean' => BooleanType::get(), 'slot' => SlotType::get(), default => throw new \Exception('@TODO: Unknown Type ' . $typeReferenceNode->name) diff --git a/src/TypeSystem/Type/NumberType/NumberType.php b/src/TypeSystem/Type/IntegerType/IntegerType.php similarity index 91% rename from src/TypeSystem/Type/NumberType/NumberType.php rename to src/TypeSystem/Type/IntegerType/IntegerType.php index 26da9440..d7570833 100644 --- a/src/TypeSystem/Type/NumberType/NumberType.php +++ b/src/TypeSystem/Type/IntegerType/IntegerType.php @@ -20,11 +20,11 @@ declare(strict_types=1); -namespace PackageFactory\ComponentEngine\TypeSystem\Type\NumberType; +namespace PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; -final class NumberType implements TypeInterface +final class IntegerType implements TypeInterface { private static null|self $instance = null; diff --git a/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php similarity index 77% rename from test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php rename to test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php index 6efff513..7256db67 100644 --- a/test/Unit/Target/Php/Transpiler/NumberLiteral/NumberLiteralTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php @@ -20,19 +20,19 @@ declare(strict_types=1); -namespace PackageFactory\ComponentEngine\Test\Unit\Target\Php\Transpiler\NumberLiteral; +namespace PackageFactory\ComponentEngine\Test\Unit\Target\Php\Transpiler\IntegerLiteral; use PackageFactory\ComponentEngine\Parser\Ast\ExpressionNode; use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; -use PackageFactory\ComponentEngine\Target\Php\Transpiler\NumberLiteral\NumberLiteralTranspiler; +use PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral\IntegerLiteralTranspiler; use PHPUnit\Framework\TestCase; -final class NumberLiteralTranspilerTest extends TestCase +final class IntegerLiteralTranspilerTest extends TestCase { /** * @return array */ - public static function numberLiteralExamples(): array + public static function integerLiteralExamples(): array { return [ // Decimal @@ -66,20 +66,20 @@ public static function numberLiteralExamples(): array } /** - * @dataProvider numberLiteralExamples + * @dataProvider integerLiteralExamples * @test - * @param string $numberLiteralAsString + * @param string $integerLiteralAsString * @param string $expectedTranspilationResult * @return void */ - public function transpilesIntegerLiteralNodes(string $numberLiteralAsString, string $expectedTranspilationResult): void + public function transpilesIntegerLiteralNodes(string $integerLiteralAsString, string $expectedTranspilationResult): void { - $numberLiteralTranspiler = new NumberLiteralTranspiler(); - $IntegerLiteralNode = ExpressionNode::fromString($numberLiteralAsString)->root; - assert($IntegerLiteralNode instanceof IntegerLiteralNode); + $integerLiteralTranspiler = new IntegerLiteralTranspiler(); + $integerLiteralNode = ExpressionNode::fromString($integerLiteralAsString)->root; + assert($integerLiteralNode instanceof IntegerLiteralNode); - $actualTranspilationResult = $numberLiteralTranspiler->transpile( - $IntegerLiteralNode + $actualTranspilationResult = $integerLiteralTranspiler->transpile( + $integerLiteralNode ); $this->assertEquals( diff --git a/test/Unit/Target/Php/Transpiler/TypeReference/TypeReferenceTranspilerTest.php b/test/Unit/Target/Php/Transpiler/TypeReference/TypeReferenceTranspilerTest.php index a31a8bbe..6332b4bd 100644 --- a/test/Unit/Target/Php/Transpiler/TypeReference/TypeReferenceTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/TypeReference/TypeReferenceTranspilerTest.php @@ -32,7 +32,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; use PackageFactory\ComponentEngine\TypeSystem\Type\ComponentType\ComponentType; use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\StructType\StructType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -46,7 +46,7 @@ protected function getTypeReferenceTranspiler(): TypeReferenceTranspiler scope: new DummyScope([], [ 'string' => StringType::get(), 'boolean' => BooleanType::get(), - 'number' => NumberType::get(), + 'number' => IntegerType::get(), 'Button' => ComponentType::fromComponentDeclarationNode( ComponentDeclarationNode::fromString('component Button { return "" }') ), diff --git a/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php index a247c332..54f851ac 100644 --- a/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/BinaryOperation/BinaryOperationTypeResolverTest.php @@ -27,7 +27,7 @@ use PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Scope\Fixtures\DummyScope; use PackageFactory\ComponentEngine\TypeSystem\Resolver\BinaryOperation\BinaryOperationTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -45,8 +45,8 @@ public static function binaryOperationExamples(): array 'true || false' => ['true || false', BooleanType::get()], 'true && "foo"' => ['true && "foo"', UnionType::of(BooleanType::get(), StringType::get())], 'true || "foo"' => ['true || "foo"', UnionType::of(BooleanType::get(), StringType::get())], - 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), NumberType::get())], - 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), NumberType::get())], + 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), IntegerType::get())], + 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), IntegerType::get())], '4 === 2' => ['4 === 2', BooleanType::get()], '4 !== 2' => ['4 !== 2', BooleanType::get()], diff --git a/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php index f6c5a164..ca05a579 100644 --- a/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/Expression/ExpressionTypeResolverTest.php @@ -27,7 +27,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Resolver\Expression\ExpressionTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; use PackageFactory\ComponentEngine\TypeSystem\Type\NullType\NullType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -45,8 +45,8 @@ public static function binaryOperationExamples(): array 'true || false' => ['true || false', BooleanType::get()], 'true && "foo"' => ['true && "foo"', UnionType::of(BooleanType::get(), StringType::get())], 'true || "foo"' => ['true || "foo"', UnionType::of(BooleanType::get(), StringType::get())], - 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), NumberType::get())], - 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), NumberType::get())], + 'true && 42' => ['true && 42', UnionType::of(BooleanType::get(), IntegerType::get())], + 'true || 42' => ['true || 42', UnionType::of(BooleanType::get(), IntegerType::get())], '4 === 2' => ['4 === 2', BooleanType::get()], '4 !== 2' => ['4 !== 2', BooleanType::get()], @@ -124,7 +124,7 @@ public static function matchExamples(): array return [ 'match (true) { true -> 42 false -> "foo" }' => [ 'match (true) { true -> 42 false -> "foo" }', - NumberType::get() + IntegerType::get() ], 'match (false) { true -> 42 false -> "foo" }' => [ 'match (false) { true -> 42 false -> "foo" }', @@ -132,11 +132,11 @@ public static function matchExamples(): array ], 'match (variableOfTypeBoolean) { true -> 42 false -> "foo" }' => [ 'match (variableOfTypeBoolean) { true -> 42 false -> "foo" }', - UnionType::of(NumberType::get(), StringType::get()) + UnionType::of(IntegerType::get(), StringType::get()) ], 'match (variableOfTypeBoolean) { true -> variableOfTypeNumber false -> variableOfTypeString }' => [ 'match (variableOfTypeBoolean) { true -> variableOfTypeNumber false -> variableOfTypeString }', - UnionType::of(NumberType::get(), StringType::get()) + UnionType::of(IntegerType::get(), StringType::get()) ], ]; } @@ -153,7 +153,7 @@ public function resolvesMatchToResultingType(string $matchAsString, TypeInterfac $scope = new DummyScope([ 'variableOfTypeBoolean' => BooleanType::get(), 'variableOfTypeString' => StringType::get(), - 'variableOfTypeNumber' => NumberType::get(), + 'variableOfTypeNumber' => IntegerType::get(), ]); $expressionTypeResolver = new ExpressionTypeResolver(scope: $scope); $expressionNode = ExpressionNode::fromString($matchAsString); @@ -189,13 +189,13 @@ public function resolvesNullLiteralToNullType(): void * @test * @return void */ - public function resolvesNumberLiteralToNumberType(): void + public function resolvesNumberLiteralToIntegerType(): void { $scope = new DummyScope(); $expressionTypeResolver = new ExpressionTypeResolver(scope: $scope); $expressionNode = ExpressionNode::fromString('42'); - $expectedType = NumberType::get(); + $expectedType = IntegerType::get(); $actualType = $expressionTypeResolver->resolveTypeOf($expressionNode); $this->assertTrue( @@ -282,9 +282,9 @@ public function resolvesTemplateLiteralToStringType(string $templateLiteralAsStr public static function ternaryOperationExamples(): array { return [ - 'true ? 42 : "foo"' => ['true ? 42 : "foo"', NumberType::get()], + 'true ? 42 : "foo"' => ['true ? 42 : "foo"', IntegerType::get()], 'false ? 42 : "foo"' => ['false ? 42 : "foo"', StringType::get()], - '1 < 2 ? 42 : "foo"' => ['1 < 2 ? 42 : "foo"', UnionType::of(NumberType::get(), StringType::get())] + '1 < 2 ? 42 : "foo"' => ['1 < 2 ? 42 : "foo"', UnionType::of(IntegerType::get(), StringType::get())] ]; } diff --git a/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolverTest.php similarity index 67% rename from test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php rename to test/Unit/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolverTest.php index 6161ec9c..cc1499ef 100644 --- a/test/Unit/TypeSystem/Resolver/NumberLiteral/NumberLiteralTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/IntegerLiteral/IntegerLiteralTypeResolverTest.php @@ -24,23 +24,23 @@ use PackageFactory\ComponentEngine\Parser\Ast\ExpressionNode; use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; -use PackageFactory\ComponentEngine\TypeSystem\Resolver\NumberLiteral\NumberLiteralTypeResolver; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Resolver\IntegerLiteral\IntegerLiteralTypeResolver; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PHPUnit\Framework\TestCase; -final class NumberLiteralTypeResolverTest extends TestCase +final class IntegerLiteralTypeResolverTest extends TestCase { /** * @test */ - public function resolvesNumberLiteralToNumberType(): void + public function resolvesIntegerLiteralToIntegerType(): void { - $numberLiteralTypeResolver = new NumberLiteralTypeResolver(); - $IntegerLiteralNode = ExpressionNode::fromString('42')->root; - assert($IntegerLiteralNode instanceof IntegerLiteralNode); + $integerLiteralTypeResolver = new IntegerLiteralTypeResolver(); + $integerLiteralNode = ExpressionNode::fromString('42')->root; + assert($integerLiteralNode instanceof IntegerLiteralNode); - $expectedType = NumberType::get(); - $actualType = $numberLiteralTypeResolver->resolveTypeOf($IntegerLiteralNode); + $expectedType = IntegerType::get(); + $actualType = $integerLiteralTypeResolver->resolveTypeOf($integerLiteralNode); $this->assertTrue( $expectedType->is($actualType), diff --git a/test/Unit/TypeSystem/Resolver/Match/MatchTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/Match/MatchTypeResolverTest.php index d2f202a6..c5a97431 100644 --- a/test/Unit/TypeSystem/Resolver/Match/MatchTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/Match/MatchTypeResolverTest.php @@ -30,7 +30,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Resolver\Match\MatchTypeResolver; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -46,7 +46,7 @@ public static function matchExamples(): array return [ 'match (true) { true -> 42 false -> "foo" }' => [ 'match (true) { true -> 42 false -> "foo" }', - NumberType::get() + IntegerType::get() ], 'match (false) { true -> 42 false -> "foo" }' => [ 'match (false) { true -> 42 false -> "foo" }', @@ -54,11 +54,11 @@ public static function matchExamples(): array ], 'match (variableOfTypeBoolean) { true -> 42 false -> "foo" }' => [ 'match (variableOfTypeBoolean) { true -> 42 false -> "foo" }', - UnionType::of(NumberType::get(), StringType::get()) + UnionType::of(IntegerType::get(), StringType::get()) ], 'match (variableOfTypeBoolean) { true -> variableOfTypeNumber false -> variableOfTypeString }' => [ 'match (variableOfTypeBoolean) { true -> variableOfTypeNumber false -> variableOfTypeString }', - UnionType::of(NumberType::get(), StringType::get()) + UnionType::of(IntegerType::get(), StringType::get()) ], 'match enum with all declared members' => [ <<<'EOF' @@ -68,7 +68,7 @@ public static function matchExamples(): array SomeEnum.C -> variableOfTypeBoolean } EOF, - UnionType::of(NumberType::get(), StringType::get(), BooleanType::get()) + UnionType::of(IntegerType::get(), StringType::get(), BooleanType::get()) ], 'match enum with some declared members and default' => [ <<<'EOF' @@ -78,7 +78,7 @@ public static function matchExamples(): array default -> variableOfTypeBoolean } EOF, - UnionType::of(NumberType::get(), StringType::get(), BooleanType::get()) + UnionType::of(IntegerType::get(), StringType::get(), BooleanType::get()) ], ]; } @@ -101,7 +101,7 @@ public function resolvesMatchToResultingType(string $matchAsString, TypeInterfac $scope = new DummyScope([ 'variableOfTypeBoolean' => BooleanType::get(), 'variableOfTypeString' => StringType::get(), - 'variableOfTypeNumber' => NumberType::get(), + 'variableOfTypeNumber' => IntegerType::get(), 'someEnumValue' => $someStaticEnumType->toEnumInstanceType(), 'SomeEnum' => $someStaticEnumType ]); diff --git a/test/Unit/TypeSystem/Resolver/TernaryOperation/TernaryOperationTypeResolverTest.php b/test/Unit/TypeSystem/Resolver/TernaryOperation/TernaryOperationTypeResolverTest.php index fbce9ab6..5d27cf8c 100644 --- a/test/Unit/TypeSystem/Resolver/TernaryOperation/TernaryOperationTypeResolverTest.php +++ b/test/Unit/TypeSystem/Resolver/TernaryOperation/TernaryOperationTypeResolverTest.php @@ -26,7 +26,7 @@ use PackageFactory\ComponentEngine\Parser\Ast\TernaryOperationNode; use PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Scope\Fixtures\DummyScope; use PackageFactory\ComponentEngine\TypeSystem\Resolver\TernaryOperation\TernaryOperationTypeResolver; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PackageFactory\ComponentEngine\TypeSystem\TypeInterface; @@ -40,12 +40,12 @@ final class TernaryOperationTypeResolverTest extends TestCase public static function ternaryOperationExamples(): array { return [ - 'true ? 42 : "foo"' => ['true ? 42 : "foo"', NumberType::get()], + 'true ? 42 : "foo"' => ['true ? 42 : "foo"', IntegerType::get()], 'false ? 42 : "foo"' => ['false ? 42 : "foo"', StringType::get()], - '1 < 2 ? 42 : "foo"' => ['1 < 2 ? 42 : "foo"', UnionType::of(NumberType::get(), StringType::get())], + '1 < 2 ? 42 : "foo"' => ['1 < 2 ? 42 : "foo"', UnionType::of(IntegerType::get(), StringType::get())], '1 < 2 ? variableOfTypeString : variableOfTypeNumber' => [ '1 < 2 ? variableOfTypeString : variableOfTypeNumber', - UnionType::of(NumberType::get(), StringType::get()) + UnionType::of(IntegerType::get(), StringType::get()) ] ]; } @@ -61,7 +61,7 @@ public function resolvesTernaryOperationToResultingType(string $ternaryExpressio { $scope = new DummyScope([ 'variableOfTypeString' => StringType::get(), - 'variableOfTypeNumber' => NumberType::get(), + 'variableOfTypeNumber' => IntegerType::get(), ]); $ternaryOperationTypeResolver = new TernaryOperationTypeResolver( scope: $scope diff --git a/test/Unit/TypeSystem/Scope/ComponentScope/ComponentScopeTest.php b/test/Unit/TypeSystem/Scope/ComponentScope/ComponentScopeTest.php index c75e0ce7..4ccc7e31 100644 --- a/test/Unit/TypeSystem/Scope/ComponentScope/ComponentScopeTest.php +++ b/test/Unit/TypeSystem/Scope/ComponentScope/ComponentScopeTest.php @@ -30,7 +30,7 @@ use PackageFactory\ComponentEngine\TypeSystem\Scope\ComponentScope\ComponentScope; use PackageFactory\ComponentEngine\TypeSystem\Scope\GlobalScope\GlobalScope; use PackageFactory\ComponentEngine\TypeSystem\Type\EnumType\EnumStaticType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PHPUnit\Framework\TestCase; @@ -119,10 +119,10 @@ public function fallsBackToParentScope(): void $componentDeclarationNode = ComponentDeclarationNode::fromString($componentDeclarationAsString); $componentScope = new ComponentScope( componentDeclarationNode: $componentDeclarationNode, - parentScope: new DummyScope(['bar' => NumberType::get()], []) + parentScope: new DummyScope(['bar' => IntegerType::get()], []) ); - $expectedType = NumberType::get(); + $expectedType = IntegerType::get(); $actualType = $componentScope->lookupTypeFor('bar'); $this->assertNotNull($actualType); diff --git a/test/Unit/TypeSystem/Type/NumberType/NumberTypeTest.php b/test/Unit/TypeSystem/Type/IntegerType/IntegerTypeTest.php similarity index 68% rename from test/Unit/TypeSystem/Type/NumberType/NumberTypeTest.php rename to test/Unit/TypeSystem/Type/IntegerType/IntegerTypeTest.php index b3855537..2c67e3cd 100644 --- a/test/Unit/TypeSystem/Type/NumberType/NumberTypeTest.php +++ b/test/Unit/TypeSystem/Type/IntegerType/IntegerTypeTest.php @@ -20,35 +20,35 @@ declare(strict_types=1); -namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\NumberType; +namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\IntegerType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PHPUnit\Framework\TestCase; -final class NumberTypeTest extends TestCase +final class IntegerTypeTest extends TestCase { /** * @test */ - public function numberTypeIsSingleton(): void + public function integerTypeIsSingleton(): void { - $this->assertSame(NumberType::get(), NumberType::get()); + $this->assertSame(IntegerType::get(), IntegerType::get()); } /** * @test */ - public function isReturnsTrueIfGivenTypeIsNumberType(): void + public function isReturnsTrueIfGivenTypeIsIntegerType(): void { - $this->assertTrue(NumberType::get()->is(NumberType::get())); + $this->assertTrue(IntegerType::get()->is(IntegerType::get())); } /** * @test */ - public function isReturnsFalseIfGivenTypeIsNotNumberType(): void + public function isReturnsFalseIfGivenTypeIsNotIntegerType(): void { - $this->assertFalse(NumberType::get()->is(StringType::get())); + $this->assertFalse(IntegerType::get()->is(StringType::get())); } -} \ No newline at end of file +} diff --git a/test/Unit/TypeSystem/Type/SlotType/SlotTypeTest.php b/test/Unit/TypeSystem/Type/SlotType/SlotTypeTest.php index c9263528..d2c7e5c7 100644 --- a/test/Unit/TypeSystem/Type/SlotType/SlotTypeTest.php +++ b/test/Unit/TypeSystem/Type/SlotType/SlotTypeTest.php @@ -22,7 +22,7 @@ namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\SlotType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\SlotType\SlotType; use PHPUnit\Framework\TestCase; @@ -49,6 +49,6 @@ public function isReturnsTrueIfGivenTypeIsSlotType(): void */ public function isReturnsFalseIfGivenTypeIsNotSlotType(): void { - $this->assertFalse(SlotType::get()->is(NumberType::get())); + $this->assertFalse(SlotType::get()->is(IntegerType::get())); } } diff --git a/test/Unit/TypeSystem/Type/StringType/StringTypeTest.php b/test/Unit/TypeSystem/Type/StringType/StringTypeTest.php index e7a94893..44c6e812 100644 --- a/test/Unit/TypeSystem/Type/StringType/StringTypeTest.php +++ b/test/Unit/TypeSystem/Type/StringType/StringTypeTest.php @@ -22,7 +22,7 @@ namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\StringType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PHPUnit\Framework\TestCase; @@ -49,6 +49,6 @@ public function isReturnsTrueIfGivenTypeIsStringType(): void */ public function isReturnsFalseIfGivenTypeIsNotStringType(): void { - $this->assertFalse(StringType::get()->is(NumberType::get())); + $this->assertFalse(StringType::get()->is(IntegerType::get())); } -} \ No newline at end of file +} diff --git a/test/Unit/TypeSystem/Type/UnionType/UnionTypeTest.php b/test/Unit/TypeSystem/Type/UnionType/UnionTypeTest.php index 81f3a307..3604ae66 100644 --- a/test/Unit/TypeSystem/Type/UnionType/UnionTypeTest.php +++ b/test/Unit/TypeSystem/Type/UnionType/UnionTypeTest.php @@ -23,7 +23,7 @@ namespace PackageFactory\ComponentEngine\Test\Unit\TypeSystem\Type\UnionType; use PackageFactory\ComponentEngine\TypeSystem\Type\BooleanType\BooleanType; -use PackageFactory\ComponentEngine\TypeSystem\Type\NumberType\NumberType; +use PackageFactory\ComponentEngine\TypeSystem\Type\IntegerType\IntegerType; use PackageFactory\ComponentEngine\TypeSystem\Type\StringType\StringType; use PackageFactory\ComponentEngine\TypeSystem\Type\UnionType\UnionType; use PHPUnit\Framework\TestCase; @@ -39,17 +39,17 @@ public function staticOfResolvesToGivenTypeIfOnlyOneTypeIsGiven(): void $this->assertTrue($unionType->is(StringType::get())); $this->assertTrue(StringType::get()->is($unionType)); - $unionType = UnionType::of(NumberType::get()); - $this->assertTrue($unionType->is(NumberType::get())); - $this->assertTrue(NumberType::get()->is($unionType)); + $unionType = UnionType::of(IntegerType::get()); + $this->assertTrue($unionType->is(IntegerType::get())); + $this->assertTrue(IntegerType::get()->is($unionType)); $unionType = UnionType::of(UnionType::of(StringType::get())); $this->assertTrue($unionType->is(StringType::get())); $this->assertTrue(StringType::get()->is($unionType)); - $unionType = UnionType::of(UnionType::of(NumberType::get())); - $this->assertTrue($unionType->is(NumberType::get())); - $this->assertTrue(NumberType::get()->is($unionType)); + $unionType = UnionType::of(UnionType::of(IntegerType::get())); + $this->assertTrue($unionType->is(IntegerType::get())); + $this->assertTrue(IntegerType::get()->is($unionType)); } /** @@ -71,8 +71,8 @@ public function staticOfResolvesToGivenTypeIfAllGivenTypesAreIdentical(): void */ public function isReturnsTrueIfGivenTypeIsCongruentUnionType(): void { - $unionType = UnionType::of(StringType::get(), NumberType::get()); - $otherUnionType = UnionType::of(NumberType::get(), StringType::get()); + $unionType = UnionType::of(StringType::get(), IntegerType::get()); + $otherUnionType = UnionType::of(IntegerType::get(), StringType::get()); $this->assertTrue($unionType->is($otherUnionType)); } @@ -82,8 +82,8 @@ public function isReturnsTrueIfGivenTypeIsCongruentUnionType(): void */ public function isReturnsTrueIfGivenTypeIsCongruentUnionTypeWithRedundantMembers(): void { - $unionType = UnionType::of(StringType::get(), NumberType::get()); - $otherUnionType = UnionType::of(NumberType::get(), StringType::get(), NumberType::get(), StringType::get()); + $unionType = UnionType::of(StringType::get(), IntegerType::get()); + $otherUnionType = UnionType::of(IntegerType::get(), StringType::get(), IntegerType::get(), StringType::get()); $this->assertTrue($unionType->is($otherUnionType)); } @@ -93,9 +93,9 @@ public function isReturnsTrueIfGivenTypeIsCongruentUnionTypeWithRedundantMembers */ public function isReturnsFalseIfGivenTypeIsNotAUnionType(): void { - $unionType = UnionType::of(StringType::get(), NumberType::get()); + $unionType = UnionType::of(StringType::get(), IntegerType::get()); - $this->assertFalse($unionType->is(NumberType::get())); + $this->assertFalse($unionType->is(IntegerType::get())); $this->assertFalse($unionType->is(StringType::get())); } @@ -104,7 +104,7 @@ public function isReturnsFalseIfGivenTypeIsNotAUnionType(): void */ public function isReturnsFalseIfGivenTypeIsANonCongruentUnionType(): void { - $unionType = UnionType::of(StringType::get(), NumberType::get()); + $unionType = UnionType::of(StringType::get(), IntegerType::get()); $otherUnionType = UnionType::of(StringType::get(), BooleanType::get()); $this->assertFalse($unionType->is($otherUnionType)); From 0a83956bb66681575d1c0e59b34d60adfad530bc Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 16:25:45 +0200 Subject: [PATCH 4/8] TASK: Remove arithmetic operators from `TokenType` enum --- src/Definition/Precedence.php | 9 --------- src/Parser/Ast/ExpressionNode.php | 5 ----- src/Parser/Tokenizer/TokenType.php | 6 ------ src/Parser/Tokenizer/Tokenizer.php | 5 ----- 4 files changed, 25 deletions(-) diff --git a/src/Definition/Precedence.php b/src/Definition/Precedence.php index 49da1b56..3f48773b 100644 --- a/src/Definition/Precedence.php +++ b/src/Definition/Precedence.php @@ -34,8 +34,6 @@ enum Precedence: int case ACCESS = 18; case UNARY = 15; - case POINT = 13; - case DASH = 12; case COMPARISON = 10; case EQUALITY = 9; case LOGICAL_AND = 5; @@ -55,13 +53,6 @@ public static function forTokenType(TokenType $tokenType): self TokenType::OPERATOR_BOOLEAN_NOT => self::UNARY, - TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY, - TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY, - TokenType::OPERATOR_ARITHMETIC_MODULO => self::POINT, - - TokenType::OPERATOR_ARITHMETIC_PLUS, - TokenType::OPERATOR_ARITHMETIC_MINUS => self::DASH, - TokenType::COMPARATOR_GREATER_THAN, TokenType::COMPARATOR_GREATER_THAN_OR_EQUAL, TokenType::COMPARATOR_LESS_THAN, diff --git a/src/Parser/Ast/ExpressionNode.php b/src/Parser/Ast/ExpressionNode.php index 571c65d2..3d6bde7a 100644 --- a/src/Parser/Ast/ExpressionNode.php +++ b/src/Parser/Ast/ExpressionNode.php @@ -134,11 +134,6 @@ public static function fromTokens(\Iterator &$tokens, Precedence $precedence = P switch (Scanner::type($tokens)) { case TokenType::OPERATOR_BOOLEAN_AND: case TokenType::OPERATOR_BOOLEAN_OR: - case TokenType::OPERATOR_ARITHMETIC_PLUS: - case TokenType::OPERATOR_ARITHMETIC_MINUS: - case TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY: - case TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY: - case TokenType::OPERATOR_ARITHMETIC_MODULO: case TokenType::COMPARATOR_EQUAL: case TokenType::COMPARATOR_NOT_EQUAL: case TokenType::COMPARATOR_GREATER_THAN: diff --git a/src/Parser/Tokenizer/TokenType.php b/src/Parser/Tokenizer/TokenType.php index 090bcfda..4081183f 100644 --- a/src/Parser/Tokenizer/TokenType.php +++ b/src/Parser/Tokenizer/TokenType.php @@ -58,12 +58,6 @@ enum TokenType: string case OPERATOR_BOOLEAN_OR = 'OPERATOR_BOOLEAN_OR'; case OPERATOR_BOOLEAN_NOT = 'OPERATOR_BOOLEAN_NOT'; - case OPERATOR_ARITHMETIC_PLUS = 'OPERATOR_ARITHMETIC_PLUS'; - case OPERATOR_ARITHMETIC_MINUS = 'OPERATOR_ARITHMETIC_MINUS'; - case OPERATOR_ARITHMETIC_MULTIPLY_BY = 'OPERATOR_ARITHMETIC_MULTIPLY_BY'; - case OPERATOR_ARITHMETIC_DIVIDE_BY = 'OPERATOR_ARITHMETIC_DIVIDE_BY'; - case OPERATOR_ARITHMETIC_MODULO = 'OPERATOR_ARITHMETIC_MODULO'; - case COMPARATOR_EQUAL = 'COMPARATOR_EQUAL'; case COMPARATOR_NOT_EQUAL = 'COMPARATOR_NOT_EQUAL'; case COMPARATOR_GREATER_THAN = 'COMPARATOR_GREATER_THAN'; diff --git a/src/Parser/Tokenizer/Tokenizer.php b/src/Parser/Tokenizer/Tokenizer.php index 346861b6..dbdf3fd0 100644 --- a/src/Parser/Tokenizer/Tokenizer.php +++ b/src/Parser/Tokenizer/Tokenizer.php @@ -287,11 +287,6 @@ public static function symbol(\Iterator $fragments, ?Buffer $buffer = null): \It } yield from match ($buffer->value()) { - '+' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_PLUS), - '-' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MINUS), - '*' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MULTIPLY_BY), - '/' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_DIVIDE_BY), - '%' => $buffer->flush(TokenType::OPERATOR_ARITHMETIC_MODULO), '&&' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_AND), '||' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_OR), '!' => $buffer->flush(TokenType::OPERATOR_BOOLEAN_NOT), From e559831a29eb875363971639667c2f22fd74b592 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 16:38:42 +0200 Subject: [PATCH 5/8] TASK: Remove floating points from `NumberFormat` --- src/Definition/NumberFormat.php | 3 +-- .../Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Definition/NumberFormat.php b/src/Definition/NumberFormat.php index 9cb58b2c..771a1522 100644 --- a/src/Definition/NumberFormat.php +++ b/src/Definition/NumberFormat.php @@ -36,8 +36,7 @@ public static function fromTokenType(TokenType $tokenType): self return match ($tokenType) { TokenType::NUMBER_BINARY => self::BINARY, TokenType::NUMBER_OCTAL => self::OCTAL, - TokenType::NUMBER_DECIMAL, - TokenType::PERIOD => self::DECIMAL, + TokenType::NUMBER_DECIMAL => self::DECIMAL, TokenType::NUMBER_HEXADECIMAL => self::HEXADECIMAL, default => throw new \Exception('@TODO: Unknown Number Format: ' . $tokenType->value) diff --git a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php index 7256db67..1691f3e6 100644 --- a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php @@ -61,7 +61,6 @@ public static function integerLiteralExamples(): array // With Floating Point ' 123.456 ' => ['123.456', '123.456'], ' 0.1e2 ' => ['0.1e2', '0.1e2'], - ' .22 ' => ['.22', '.22'], ]; } From f3a1383e9f88cdbe701c5cccba1439e887cf06d2 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 16:59:02 +0200 Subject: [PATCH 6/8] TASK: Remove floating points from Parser --- src/Parser/Tokenizer/TokenType.php | 4 +- src/Parser/Tokenizer/Tokenizer.php | 29 +----- test/Integration/Examples/Numbers/Numbers.afx | 7 +- .../Examples/Numbers/Numbers.ast.json | 95 +++++-------------- test/Integration/Examples/Numbers/Numbers.php | 2 +- .../Examples/Numbers/Numbers.tokens.json | 76 --------------- .../IntegerLiteralTranspilerTest.php | 4 - 7 files changed, 31 insertions(+), 186 deletions(-) diff --git a/src/Parser/Tokenizer/TokenType.php b/src/Parser/Tokenizer/TokenType.php index 4081183f..20f2d207 100644 --- a/src/Parser/Tokenizer/TokenType.php +++ b/src/Parser/Tokenizer/TokenType.php @@ -111,6 +111,8 @@ public static function fromBuffer(Buffer $buffer): TokenType $value === 'false' => self::KEYWORD_FALSE, $value === 'null' => self::KEYWORD_NULL, + $value === '.' => self::PERIOD, + (bool) preg_match( '/^0[bB][0-1]+$/', $value @@ -120,7 +122,7 @@ public static function fromBuffer(Buffer $buffer): TokenType $value ) => self::NUMBER_OCTAL, $value !== '' && preg_match( - '/^([-+]?[0-9]+)?(\.[0-9]+)?([eE][0-9]+)?$/', + '/^([-+]?[0-9]+)?([eE][0-9]+)?$/', $value ) => self::NUMBER_DECIMAL, (bool) preg_match( diff --git a/src/Parser/Tokenizer/Tokenizer.php b/src/Parser/Tokenizer/Tokenizer.php index dbdf3fd0..c08eaa15 100644 --- a/src/Parser/Tokenizer/Tokenizer.php +++ b/src/Parser/Tokenizer/Tokenizer.php @@ -85,13 +85,7 @@ private static function block(\Iterator $fragments): \Iterator CharacterType::TEMPLATE_LITERAL_DELIMITER => self::templateLiteral($fragments), CharacterType::BRACKET_OPEN => self::block($fragments), CharacterType::ANGLE_OPEN => self::angle($fragments), - CharacterType::PERIOD => match (TokenType::fromBuffer($buffer)) { - TokenType::NUMBER_BINARY, - TokenType::NUMBER_OCTAL, - TokenType::NUMBER_DECIMAL, - TokenType::NUMBER_HEXADECIMAL => null, - default => self::period($fragments) - }, + CharacterType::PERIOD => self::period($fragments), CharacterType::ANGLE_CLOSE, CharacterType::FORWARD_SLASH, CharacterType::SYMBOL => self::symbol($fragments), @@ -235,27 +229,6 @@ public static function period(\Iterator $fragments): \Iterator $buffer = Buffer::empty()->append($fragments->current()); $fragments->next(); - if ($fragments->valid()) { - $fragment = $fragments->current(); - - if (CharacterType::DIGIT->is($fragment->value)) { - $buffer->append($fragment); - $fragments->next(); - - while ($fragments->valid()) { - $fragment = $fragments->current(); - - if (CharacterType::DIGIT->is($fragment->value)) { - $buffer->append($fragment); - $fragments->next(); - } else { - yield from $buffer->flush(TokenType::NUMBER_DECIMAL); - return; - } - } - } - } - yield from $buffer->flush(TokenType::PERIOD); } diff --git a/test/Integration/Examples/Numbers/Numbers.afx b/test/Integration/Examples/Numbers/Numbers.afx index fe497e81..aef66d03 100644 --- a/test/Integration/Examples/Numbers/Numbers.afx +++ b/test/Integration/Examples/Numbers/Numbers.afx @@ -21,10 +21,5 @@ export component Numbers { # With Exponent 1E3 || - 2e6 || - - # With Floating Point - 123.456 || - 0.1e2 || - .22 + 2e6 } diff --git a/test/Integration/Examples/Numbers/Numbers.ast.json b/test/Integration/Examples/Numbers/Numbers.ast.json index bf619950..c19d5fb9 100644 --- a/test/Integration/Examples/Numbers/Numbers.ast.json +++ b/test/Integration/Examples/Numbers/Numbers.ast.json @@ -69,62 +69,17 @@ "operator": "OR", "operands": [ { - "type": "BinaryOperationNode", + "type": "IntegerLiteralNode", "payload": { - "operator": "OR", - "operands": [ - { - "type": "BinaryOperationNode", - "payload": { - "operator": "OR", - "operands": [ - { - "type": "BinaryOperationNode", - "payload": { - "operator": "OR", - "operands": [ - { - "type": "IntegerLiteralNode", - "payload": { - "value": "0", - "format": "DECIMAL" - } - }, - { - "type": "IntegerLiteralNode", - "payload": { - "value": "1234567890", - "format": "DECIMAL" - } - } - ] - } - }, - { - "type": "IntegerLiteralNode", - "payload": { - "value": "42", - "format": "DECIMAL" - } - } - ] - } - }, - { - "type": "IntegerLiteralNode", - "payload": { - "value": "0b10000000000000000000000000000000", - "format": "BINARY" - } - } - ] + "value": "0", + "format": "DECIMAL" } }, { "type": "IntegerLiteralNode", "payload": { - "value": "0b01111111100000000000000000000000", - "format": "BINARY" + "value": "1234567890", + "format": "DECIMAL" } } ] @@ -133,8 +88,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0B00000000011111111111111111111111", - "format": "BINARY" + "value": "42", + "format": "DECIMAL" } } ] @@ -143,8 +98,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0o755", - "format": "OCTAL" + "value": "0b10000000000000000000000000000000", + "format": "BINARY" } } ] @@ -153,8 +108,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0o644", - "format": "OCTAL" + "value": "0b01111111100000000000000000000000", + "format": "BINARY" } } ] @@ -163,8 +118,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0xFFFFFFFFFFFFFFFFF", - "format": "HEXADECIMAL" + "value": "0B00000000011111111111111111111111", + "format": "BINARY" } } ] @@ -173,8 +128,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0x123456789ABCDEF", - "format": "HEXADECIMAL" + "value": "0o755", + "format": "OCTAL" } } ] @@ -183,8 +138,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0xA", - "format": "HEXADECIMAL" + "value": "0o644", + "format": "OCTAL" } } ] @@ -193,8 +148,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "1E3", - "format": "DECIMAL" + "value": "0xFFFFFFFFFFFFFFFFF", + "format": "HEXADECIMAL" } } ] @@ -203,8 +158,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "2e6", - "format": "DECIMAL" + "value": "0x123456789ABCDEF", + "format": "HEXADECIMAL" } } ] @@ -213,8 +168,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "123.456", - "format": "DECIMAL" + "value": "0xA", + "format": "HEXADECIMAL" } } ] @@ -223,7 +178,7 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0.1e2", + "value": "1E3", "format": "DECIMAL" } } @@ -233,7 +188,7 @@ { "type": "IntegerLiteralNode", "payload": { - "value": ".22", + "value": "2e6", "format": "DECIMAL" } } diff --git a/test/Integration/Examples/Numbers/Numbers.php b/test/Integration/Examples/Numbers/Numbers.php index bf363852..d4b69148 100644 --- a/test/Integration/Examples/Numbers/Numbers.php +++ b/test/Integration/Examples/Numbers/Numbers.php @@ -10,6 +10,6 @@ final class Numbers extends BaseClass { public function render(): string { - return (string) (((((((((((((((0 || 1234567890) || 42) || 0b10000000000000000000000000000000) || 0b01111111100000000000000000000000) || 0b00000000011111111111111111111111) || 0o755) || 0o644) || 0xFFFFFFFFFFFFFFFFF) || 0x123456789ABCDEF) || 0xA) || 1E3) || 2e6) || 123.456) || 0.1e2) || .22); + return (string) ((((((((((((0 || 1234567890) || 42) || 0b10000000000000000000000000000000) || 0b01111111100000000000000000000000) || 0b00000000011111111111111111111111) || 0o755) || 0o644) || 0xFFFFFFFFFFFFFFFFF) || 0x123456789ABCDEF) || 0xA) || 1E3) || 2e6); } } diff --git a/test/Integration/Examples/Numbers/Numbers.tokens.json b/test/Integration/Examples/Numbers/Numbers.tokens.json index ca42d670..aeda02c7 100644 --- a/test/Integration/Examples/Numbers/Numbers.tokens.json +++ b/test/Integration/Examples/Numbers/Numbers.tokens.json @@ -367,82 +367,6 @@ "type": "NUMBER_DECIMAL", "value": "2e6" }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_BOOLEAN_OR", - "value": "||" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "COMMENT", - "value": "# With Floating Point" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "NUMBER_DECIMAL", - "value": "123.456" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_BOOLEAN_OR", - "value": "||" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "NUMBER_DECIMAL", - "value": "0.1e2" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_BOOLEAN_OR", - "value": "||" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "NUMBER_DECIMAL", - "value": ".22" - }, { "type": "END_OF_LINE", "value": "\n" diff --git a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php index 1691f3e6..9c5cb2be 100644 --- a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php @@ -57,10 +57,6 @@ public static function integerLiteralExamples(): array // With Exponent ' 1E3 ' => ['1E3', '1E3'], ' 2e6 ' => ['2e6', '2e6'], - - // With Floating Point - ' 123.456 ' => ['123.456', '123.456'], - ' 0.1e2 ' => ['0.1e2', '0.1e2'], ]; } From 965a407bec5073d9295a1a67243a6cfbb5d75aed Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Wed, 19 Jul 2023 17:24:27 +0200 Subject: [PATCH 7/8] TASK: Remove exponents from Parser --- src/Parser/Tokenizer/TokenType.php | 2 +- .../IntegerLiteralTranspiler.php | 8 +- test/Integration/Examples/Numbers/Numbers.afx | 6 +- .../Examples/Numbers/Numbers.ast.json | 73 ++++++------------- test/Integration/Examples/Numbers/Numbers.php | 2 +- .../Examples/Numbers/Numbers.tokens.json | 56 -------------- .../IntegerLiteralTranspilerTest.php | 4 - 7 files changed, 29 insertions(+), 122 deletions(-) diff --git a/src/Parser/Tokenizer/TokenType.php b/src/Parser/Tokenizer/TokenType.php index 20f2d207..12d76b29 100644 --- a/src/Parser/Tokenizer/TokenType.php +++ b/src/Parser/Tokenizer/TokenType.php @@ -122,7 +122,7 @@ public static function fromBuffer(Buffer $buffer): TokenType $value ) => self::NUMBER_OCTAL, $value !== '' && preg_match( - '/^([-+]?[0-9]+)?([eE][0-9]+)?$/', + '/^([-+]?[0-9]+)$/', $value ) => self::NUMBER_DECIMAL, (bool) preg_match( diff --git a/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php index e9a84b76..bb713ad6 100644 --- a/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php +++ b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php @@ -27,11 +27,11 @@ final class IntegerLiteralTranspiler { - public function transpile(IntegerLiteralNode $IntegerLiteralNode): string + public function transpile(IntegerLiteralNode $integerLiteralNode): string { - return match ($IntegerLiteralNode->format) { - NumberFormat::BINARY => strtolower($IntegerLiteralNode->value), - default => $IntegerLiteralNode->value + return match ($integerLiteralNode->format) { + NumberFormat::BINARY => strtolower($integerLiteralNode->value), + default => $integerLiteralNode->value }; } } diff --git a/test/Integration/Examples/Numbers/Numbers.afx b/test/Integration/Examples/Numbers/Numbers.afx index aef66d03..852a474d 100644 --- a/test/Integration/Examples/Numbers/Numbers.afx +++ b/test/Integration/Examples/Numbers/Numbers.afx @@ -17,9 +17,5 @@ export component Numbers { # Hexadecimal 0xFFFFFFFFFFFFFFFFF || 0x123456789ABCDEF || - 0xA || - - # With Exponent - 1E3 || - 2e6 + 0xA } diff --git a/test/Integration/Examples/Numbers/Numbers.ast.json b/test/Integration/Examples/Numbers/Numbers.ast.json index c19d5fb9..6ba7112c 100644 --- a/test/Integration/Examples/Numbers/Numbers.ast.json +++ b/test/Integration/Examples/Numbers/Numbers.ast.json @@ -59,47 +59,18 @@ "operator": "OR", "operands": [ { - "type": "BinaryOperationNode", + "type": "IntegerLiteralNode", "payload": { - "operator": "OR", - "operands": [ - { - "type": "BinaryOperationNode", - "payload": { - "operator": "OR", - "operands": [ - { - "type": "IntegerLiteralNode", - "payload": { - "value": "0", - "format": "DECIMAL" - } - }, - { - "type": "IntegerLiteralNode", - "payload": { - "value": "1234567890", - "format": "DECIMAL" - } - } - ] - } - }, - { - "type": "IntegerLiteralNode", - "payload": { - "value": "42", - "format": "DECIMAL" - } - } - ] + "value": "0", + "format": "DECIMAL" } }, + { "type": "IntegerLiteralNode", "payload": { - "value": "0b10000000000000000000000000000000", - "format": "BINARY" + "value": "1234567890", + "format": "DECIMAL" } } ] @@ -108,8 +79,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0b01111111100000000000000000000000", - "format": "BINARY" + "value": "42", + "format": "DECIMAL" } } ] @@ -118,7 +89,7 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0B00000000011111111111111111111111", + "value": "0b10000000000000000000000000000000", "format": "BINARY" } } @@ -128,8 +99,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0o755", - "format": "OCTAL" + "value": "0b01111111100000000000000000000000", + "format": "BINARY" } } ] @@ -138,8 +109,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0o644", - "format": "OCTAL" + "value": "0B00000000011111111111111111111111", + "format": "BINARY" } } ] @@ -148,8 +119,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0xFFFFFFFFFFFFFFFFF", - "format": "HEXADECIMAL" + "value": "0o755", + "format": "OCTAL" } } ] @@ -158,8 +129,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0x123456789ABCDEF", - "format": "HEXADECIMAL" + "value": "0o644", + "format": "OCTAL" } } ] @@ -168,7 +139,7 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "0xA", + "value": "0xFFFFFFFFFFFFFFFFF", "format": "HEXADECIMAL" } } @@ -178,8 +149,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "1E3", - "format": "DECIMAL" + "value": "0x123456789ABCDEF", + "format": "HEXADECIMAL" } } ] @@ -188,8 +159,8 @@ { "type": "IntegerLiteralNode", "payload": { - "value": "2e6", - "format": "DECIMAL" + "value": "0xA", + "format": "HEXADECIMAL" } } ] diff --git a/test/Integration/Examples/Numbers/Numbers.php b/test/Integration/Examples/Numbers/Numbers.php index d4b69148..7a97cf95 100644 --- a/test/Integration/Examples/Numbers/Numbers.php +++ b/test/Integration/Examples/Numbers/Numbers.php @@ -10,6 +10,6 @@ final class Numbers extends BaseClass { public function render(): string { - return (string) ((((((((((((0 || 1234567890) || 42) || 0b10000000000000000000000000000000) || 0b01111111100000000000000000000000) || 0b00000000011111111111111111111111) || 0o755) || 0o644) || 0xFFFFFFFFFFFFFFFFF) || 0x123456789ABCDEF) || 0xA) || 1E3) || 2e6); + return (string) ((((((((((0 || 1234567890) || 42) || 0b10000000000000000000000000000000) || 0b01111111100000000000000000000000) || 0b00000000011111111111111111111111) || 0o755) || 0o644) || 0xFFFFFFFFFFFFFFFFF) || 0x123456789ABCDEF) || 0xA); } } diff --git a/test/Integration/Examples/Numbers/Numbers.tokens.json b/test/Integration/Examples/Numbers/Numbers.tokens.json index aeda02c7..c36ec52e 100644 --- a/test/Integration/Examples/Numbers/Numbers.tokens.json +++ b/test/Integration/Examples/Numbers/Numbers.tokens.json @@ -311,62 +311,6 @@ "type": "NUMBER_HEXADECIMAL", "value": "0xA" }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_BOOLEAN_OR", - "value": "||" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "COMMENT", - "value": "# With Exponent" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "NUMBER_DECIMAL", - "value": "1E3" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "OPERATOR_BOOLEAN_OR", - "value": "||" - }, - { - "type": "END_OF_LINE", - "value": "\n" - }, - { - "type": "SPACE", - "value": " " - }, - { - "type": "NUMBER_DECIMAL", - "value": "2e6" - }, { "type": "END_OF_LINE", "value": "\n" diff --git a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php index 9c5cb2be..58eeff3b 100644 --- a/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php +++ b/test/Unit/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspilerTest.php @@ -53,10 +53,6 @@ public static function integerLiteralExamples(): array ' 0xFFFFFFFFFFFFFFFFF ' => ['0xFFFFFFFFFFFFFFFFF', '0xFFFFFFFFFFFFFFFFF'], ' 0x123456789ABCDEF ' => ['0x123456789ABCDEF', '0x123456789ABCDEF'], ' 0xA ' => ['0xA', '0xA'], - - // With Exponent - ' 1E3 ' => ['1E3', '1E3'], - ' 2e6 ' => ['2e6', '2e6'], ]; } From 57b82e57f862b62da9f1705c24c61cca9bcb9603 Mon Sep 17 00:00:00 2001 From: Wilhelm Behncke Date: Mon, 24 Jul 2023 16:21:29 +0200 Subject: [PATCH 8/8] TASK: Rename `NumberFormat` -> `IntegerFormat` --- src/Definition/{NumberFormat.php => IntegerFormat.php} | 4 ++-- src/Parser/Ast/IntegerLiteralNode.php | 6 +++--- .../Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) rename src/Definition/{NumberFormat.php => IntegerFormat.php} (92%) diff --git a/src/Definition/NumberFormat.php b/src/Definition/IntegerFormat.php similarity index 92% rename from src/Definition/NumberFormat.php rename to src/Definition/IntegerFormat.php index 771a1522..5118d4c7 100644 --- a/src/Definition/NumberFormat.php +++ b/src/Definition/IntegerFormat.php @@ -24,7 +24,7 @@ use PackageFactory\ComponentEngine\Parser\Tokenizer\TokenType; -enum NumberFormat: string +enum IntegerFormat: string { case BINARY = 'BINARY'; case OCTAL = 'OCTAL'; @@ -39,7 +39,7 @@ public static function fromTokenType(TokenType $tokenType): self TokenType::NUMBER_DECIMAL => self::DECIMAL, TokenType::NUMBER_HEXADECIMAL => self::HEXADECIMAL, - default => throw new \Exception('@TODO: Unknown Number Format: ' . $tokenType->value) + default => throw new \Exception('@TODO: Unknown Integer Format: ' . $tokenType->value) }; } } diff --git a/src/Parser/Ast/IntegerLiteralNode.php b/src/Parser/Ast/IntegerLiteralNode.php index cba82d73..d3e26643 100644 --- a/src/Parser/Ast/IntegerLiteralNode.php +++ b/src/Parser/Ast/IntegerLiteralNode.php @@ -22,7 +22,7 @@ namespace PackageFactory\ComponentEngine\Parser\Ast; -use PackageFactory\ComponentEngine\Definition\NumberFormat; +use PackageFactory\ComponentEngine\Definition\IntegerFormat; use PackageFactory\ComponentEngine\Parser\Tokenizer\Scanner; use PackageFactory\ComponentEngine\Parser\Tokenizer\Token; @@ -30,7 +30,7 @@ final class IntegerLiteralNode implements \JsonSerializable { private function __construct( public readonly string $value, - public readonly NumberFormat $format + public readonly IntegerFormat $format ) { } @@ -40,7 +40,7 @@ private function __construct( */ public static function fromTokens(\Iterator $tokens): self { - $format = NumberFormat::fromTokenType(Scanner::type($tokens)); + $format = IntegerFormat::fromTokenType(Scanner::type($tokens)); $value = Scanner::value($tokens); Scanner::skipOne($tokens); diff --git a/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php index bb713ad6..14a45676 100644 --- a/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php +++ b/src/Target/Php/Transpiler/IntegerLiteral/IntegerLiteralTranspiler.php @@ -22,7 +22,7 @@ namespace PackageFactory\ComponentEngine\Target\Php\Transpiler\IntegerLiteral; -use PackageFactory\ComponentEngine\Definition\NumberFormat; +use PackageFactory\ComponentEngine\Definition\IntegerFormat; use PackageFactory\ComponentEngine\Parser\Ast\IntegerLiteralNode; final class IntegerLiteralTranspiler @@ -30,7 +30,7 @@ final class IntegerLiteralTranspiler public function transpile(IntegerLiteralNode $integerLiteralNode): string { return match ($integerLiteralNode->format) { - NumberFormat::BINARY => strtolower($integerLiteralNode->value), + IntegerFormat::BINARY => strtolower($integerLiteralNode->value), default => $integerLiteralNode->value }; }