From 3799725c3eaf6eda60fad609dc1c73548133e154 Mon Sep 17 00:00:00 2001 From: Stan Hebben Date: Wed, 27 Aug 2014 21:27:30 +0200 Subject: [PATCH 01/15] - Changing scripting engine to use three-step compilation and improving language - Added named method arguments and default argument values - Added OptionalInt, OptionalFloat, OptionalDouble, OptionalString --- .../java/minetweaker/IBracketHandler.java | 6 +- .../main/java/minetweaker/MineTweakerAPI.java | 9 +- .../java/minetweaker/api/block/IBlock.java | 4 +- .../api/block/IBlockDefinition.java | 4 +- .../minetweaker/api/block/IBlockPattern.java | 10 +- .../minetweaker/api/chat/IChatMessage.java | 6 +- .../java/minetweaker/api/client/IClient.java | 4 +- .../minetweaker/api/container/IContainer.java | 6 +- .../main/java/minetweaker/api/data/IData.java | 16 +- .../java/minetweaker/api/entity/IEntity.java | 6 +- .../api/entity/IEntityDefinition.java | 4 +- .../minetweaker/api/entity/IEntityItem.java | 2 +- .../minetweaker/api/entity/IEntityXp.java | 4 +- .../minetweaker/api/event/IEventHandle.java | 4 +- .../api/event/PlayerAttackEntityEvent.java | 6 +- .../api/event/PlayerBonemealEvent.java | 6 +- .../event/PlayerChangedDimensionEvent.java | 4 +- .../api/event/PlayerCraftedEvent.java | 4 +- .../api/event/PlayerDeathDropsEvent.java | 4 +- .../api/event/PlayerFillBucketEvent.java | 8 +- .../api/event/PlayerInteractEntityEvent.java | 6 +- .../api/event/PlayerInteractEvent.java | 6 +- .../api/event/PlayerLoggedInEvent.java | 4 +- .../api/event/PlayerLoggedOutEvent.java | 4 +- .../api/event/PlayerOpenContainerEvent.java | 6 +- .../api/event/PlayerPickupEvent.java | 6 +- .../api/event/PlayerPickupItemEvent.java | 4 +- .../api/event/PlayerPickupXpEvent.java | 6 +- .../api/event/PlayerRespawnEvent.java | 4 +- .../api/event/PlayerSleepInBedEvent.java | 4 +- .../api/event/PlayerSmeltedEvent.java | 2 +- .../api/event/PlayerUseHoeEvent.java | 6 +- .../api/event/PlayerUseItemStartEvent.java | 6 +- .../api/event/PlayerUseItemTickEvent.java | 6 +- .../main/java/minetweaker/api/game/IGame.java | 4 +- .../minetweaker/api/item/IIngredient.java | 10 +- .../minetweaker/api/item/IItemCondition.java | 2 +- .../minetweaker/api/item/IItemDefinition.java | 8 +- .../java/minetweaker/api/item/IItemStack.java | 14 +- .../api/item/IItemTransformer.java | 4 +- .../api/item/IngredientCondition.java | 4 +- .../api/item/IngredientTransform.java | 4 +- .../api/item/WeightedItemStack.java | 4 +- .../api/liquid/ILiquidDefinition.java | 12 +- .../minetweaker/api/liquid/ILiquidStack.java | 10 +- .../api/liquid/WeightedLiquidStack.java | 4 +- .../minetweaker/api/mods/ILoadedMods.java | 8 +- .../main/java/minetweaker/api/mods/IMod.java | 2 +- .../minetweaker/api/oredict/IOreDict.java | 6 +- .../api/oredict/IOreDictEntry.java | 10 +- .../java/minetweaker/api/player/IPlayer.java | 6 +- .../api/recipes/ICraftingInfo.java | 4 +- .../api/recipes/ICraftingInventory.java | 6 +- .../api/recipes/ICraftingRecipe.java | 2 +- .../api/recipes/IFurnaceManager.java | 6 +- .../api/recipes/IRecipeFunction.java | 2 +- .../api/recipes/IRecipeManager.java | 6 +- .../api/resource/IResourceFile.java | 4 +- .../api/server/CommandValidators.java | 4 +- .../api/server/ICommandFunction.java | 2 +- .../api/server/ICommandTabCompletion.java | 2 +- .../api/server/ICommandValidator.java | 2 +- .../java/minetweaker/api/server/IServer.java | 6 +- .../java/minetweaker/api/util/Position3f.java | 4 +- .../minetweaker/api/world/IBlockGroup.java | 6 +- .../minetweaker/api/world/IDimension.java | 6 +- .../minetweaker/expand/ExpandAnyArray.java | 4 +- .../minetweaker/expand/ExpandAnyDict.java | 4 +- .../java/minetweaker/expand/ExpandBool.java | 4 +- .../java/minetweaker/expand/ExpandByte.java | 4 +- .../minetweaker/expand/ExpandByteArray.java | 22 + .../java/minetweaker/expand/ExpandDouble.java | 4 +- .../java/minetweaker/expand/ExpandFloat.java | 4 +- .../java/minetweaker/expand/ExpandInt.java | 4 +- .../minetweaker/expand/ExpandIntArray.java | 22 + .../minetweaker/expand/ExpandItemStack.java | 4 +- .../java/minetweaker/expand/ExpandLong.java | 4 +- .../java/minetweaker/expand/ExpandShort.java | 4 +- .../java/minetweaker/expand/ExpandString.java | 8 +- .../minetweaker/runtime/GlobalRegistry.java | 16 +- .../java/minetweaker/runtime/ITweaker.java | 65 --- .../java/minetweaker/runtime/MTTweaker.java | 34 +- .../mc164/brackets/ItemBracketHandler.java | 43 +- .../mc164/brackets/LiquidBracketHandler.java | 14 +- .../mc164/brackets/OreBracketHandler.java | 14 +- .../mc1710/brackets/ItemBracketHandler.java | 18 +- .../mc1710/brackets/LiquidBracketHandler.java | 14 +- .../mc1710/brackets/OreBracketHandler.java | 14 +- .../mc172/brackets/ItemBracketHandler.java | 18 +- .../mc172/brackets/LiquidBracketHandler.java | 14 +- .../mc172/brackets/OreBracketHandler.java | 14 +- .../zenscript/IZenCompileEnvironment.java | 11 +- .../stanhebben/zenscript/TypeExpansion.java | 48 +- .../java/stanhebben/zenscript/ZenModule.java | 30 +- .../stanhebben/zenscript/ZenParsedFile.java | 187 ------- .../zenscript/compiler/EnvironmentClass.java | 30 +- .../zenscript/compiler/EnvironmentGlobal.java | 23 +- .../zenscript/compiler/EnvironmentScript.java | 21 +- ...EnvironmentClass.java => IScopeClass.java} | 6 +- ...vironmentGlobal.java => IScopeGlobal.java} | 11 +- ...vironmentMethod.java => IScopeMethod.java} | 10 +- ...nvironmentMethod.java => ScopeMethod.java} | 59 +-- ...entScope.java => ScopeStatementBlock.java} | 77 +-- .../zenscript/compiler/TypeRegistry.java | 128 ----- .../zenscript/definitions/Import.java | 2 +- .../zenscript/definitions/ParsedFunction.java | 134 ----- .../definitions/ParsedFunctionArgument.java | 25 - .../zenscript/expression/Expression.java | 95 ++-- .../expression/ExpressionAndAnd.java | 26 +- .../expression/ExpressionArgument.java | 13 +- .../ExpressionArithmeticBinary.java | 46 +- .../ExpressionArithmeticCompare.java | 46 +- .../expression/ExpressionArithmeticUnary.java | 41 +- .../zenscript/expression/ExpressionArray.java | 30 +- .../expression/ExpressionArrayGet.java | 17 +- .../expression/ExpressionArrayLength.java | 20 +- .../expression/ExpressionArraySet.java | 33 +- .../zenscript/expression/ExpressionAs.java | 33 +- .../zenscript/expression/ExpressionBool.java | 37 +- .../expression/ExpressionCallStatic.java | 24 +- .../expression/ExpressionCallVirtual.java | 26 +- .../expression/ExpressionCompareGeneric.java | 19 +- .../expression/ExpressionConditional.java | 25 +- .../zenscript/expression/ExpressionFloat.java | 21 +- .../expression/ExpressionFunction.java | 31 +- .../zenscript/expression/ExpressionInt.java | 35 +- .../expression/ExpressionIntegerRange.java | 25 +- .../expression/ExpressionInvalid.java | 34 +- .../expression/ExpressionJavaLambda.java | 16 +- .../ExpressionJavaMethodCurled.java | 12 +- .../ExpressionJavaMethodStatic.java | 12 +- .../expression/ExpressionListGet.java | 48 ++ .../expression/ExpressionListLength.java | 41 ++ .../expression/ExpressionListSet.java | 57 +++ .../expression/ExpressionLocalGet.java | 15 +- .../expression/ExpressionLocalSet.java | 19 +- .../zenscript/expression/ExpressionMap.java | 39 +- .../expression/ExpressionMapContains.java | 22 +- .../expression/ExpressionMapIndexGet.java | 20 +- .../expression/ExpressionMapIndexSet.java | 40 +- .../expression/ExpressionMapSize.java | 19 +- .../zenscript/expression/ExpressionNew.java | 50 ++ .../zenscript/expression/ExpressionNull.java | 29 +- .../zenscript/expression/ExpressionOrOr.java | 41 +- .../expression/ExpressionString.java | 16 +- .../expression/ExpressionStringConcat.java | 19 +- .../expression/ExpressionStringContains.java | 19 +- .../expression/ExpressionStringIndex.java | 25 +- .../partial/ExpressionJavaStaticField.java | 21 +- .../partial/IPartialExpression.java | 21 +- .../expression/partial/PartialJavaClass.java | 74 --- .../expression/partial/PartialLocal.java | 42 +- .../expression/partial/PartialPackage.java | 43 +- .../partial/PartialStaticGenerated.java | 95 ---- .../partial/PartialStaticGetter.java | 31 +- .../partial/PartialStaticMethod.java | 39 +- .../expression/partial/PartialType.java | 37 +- .../zenscript/parser/ParseException.java | 57 --- .../parser/expression/ParsedExpression.java | 465 ------------------ .../expression/ParsedExpressionCall.java | 44 -- .../expression/ParsedExpressionFunction.java | 83 ---- .../zenscript/statements/Statement.java | 103 +--- .../zenscript/statements/StatementBlock.java | 15 +- .../zenscript/statements/StatementBreak.java | 39 ++ .../statements/StatementContinue.java | 39 ++ .../statements/StatementDoWhile.java | 46 ++ .../statements/StatementExpression.java | 21 +- .../statements/StatementForeach.java | 65 ++- .../zenscript/statements/StatementIf.java | 51 +- .../zenscript/statements/StatementNull.java | 11 +- .../zenscript/statements/StatementReturn.java | 30 +- .../zenscript/statements/StatementSwitch.java | 63 +++ .../zenscript/statements/StatementVar.java | 40 +- .../zenscript/statements/StatementWhile.java | 44 ++ .../zenscript/symbols/IZenSymbol.java | 5 +- .../zenscript/symbols/SymbolArgument.java | 31 -- .../zenscript/symbols/SymbolJavaClass.java | 29 -- .../symbols/SymbolJavaStaticField.java | 12 +- .../symbols/SymbolJavaStaticGetter.java | 7 +- .../symbols/SymbolJavaStaticMethod.java | 7 +- .../zenscript/symbols/SymbolLocal.java | 7 +- .../zenscript/symbols/SymbolPackage.java | 11 +- .../zenscript/symbols/SymbolType.java | 7 +- .../symbols/SymbolZenStaticMethod.java | 37 -- .../zenscript/type/IZenIterator.java | 14 +- .../stanhebben/zenscript/type/ZenType.java | 311 +++--------- .../stanhebben/zenscript/type/ZenTypeAny.java | 260 ++++++---- .../zenscript/type/ZenTypeArray.java | 72 +-- .../zenscript/type/ZenTypeArrayBasic.java | 146 +++--- .../zenscript/type/ZenTypeArrayList.java | 72 +-- .../zenscript/type/ZenTypeAssociative.java | 128 +++-- .../zenscript/type/ZenTypeBool.java | 180 +++---- .../zenscript/type/ZenTypeBoolObject.java | 147 +++--- .../zenscript/type/ZenTypeByte.java | 251 ++++------ .../zenscript/type/ZenTypeByteObject.java | 194 +++----- .../zenscript/type/ZenTypeDouble.java | 250 ++++------ .../zenscript/type/ZenTypeDoubleObject.java | 209 ++++---- .../zenscript/type/ZenTypeFloat.java | 250 ++++------ .../zenscript/type/ZenTypeFloatObject.java | 201 ++++---- .../zenscript/type/ZenTypeFunction.java | 158 +++--- .../stanhebben/zenscript/type/ZenTypeInt.java | 249 ++++------ .../zenscript/type/ZenTypeIntObject.java | 201 ++++---- .../zenscript/type/ZenTypeIntRange.java | 220 --------- .../zenscript/type/ZenTypeLong.java | 249 ++++------ .../zenscript/type/ZenTypeLongObject.java | 203 ++++---- .../zenscript/type/ZenTypeNative.java | 304 ++++++------ .../zenscript/type/ZenTypeNull.java | 103 ++-- .../zenscript/type/ZenTypeShort.java | 231 ++++----- .../zenscript/type/ZenTypeShortObject.java | 201 ++++---- .../zenscript/type/ZenTypeString.java | 240 ++++----- .../zenscript/type/ZenTypeVoid.java | 96 ++-- .../type/casting/CastingRuleAny.java | 39 -- .../type/expand/ZenExpandCaster.java | 16 +- .../type/expand/ZenExpandMember.java | 112 ++--- .../type/iterator/IteratorIterable.java | 36 +- .../zenscript/type/iterator/IteratorList.java | 45 +- .../zenscript/type/iterator/IteratorMap.java | 42 +- .../type/iterator/IteratorMapKeys.java | 34 +- .../zenscript/type/natives/IJavaMethod.java | 19 +- .../zenscript/type/natives/JavaMethod.java | 381 ++++++-------- .../type/natives/JavaMethodArgument.java | 38 ++ .../type/natives/JavaMethodExpanding.java | 92 ++++ .../type/natives/JavaMethodGenerated.java | 154 +++--- .../type/natives/JavaMethodPrefixed.java | 96 ++++ .../type/natives/ZenNativeCaster.java | 10 +- .../type/natives/ZenNativeMember.java | 71 +-- .../type/natives/ZenNativeOperator.java | 2 +- .../zenscript/util/AnyClassWriter.java | 40 +- .../stanhebben/zenscript/util/ErrorUtil.java | 52 ++ .../zenscript/util/MethodOutput.java | 61 +++ .../zenscript/util/ZenTypeUtil.java | 4 - .../builtin/expansion/IByteExpansion.java | 2 +- .../zenscript/IZenErrorLogger.java | 4 +- .../zenscript/annotations/CompareType.java | 2 +- .../zenscript/annotations/IterableList.java | 2 +- .../zenscript/annotations/IterableMap.java | 2 +- .../zenscript/annotations/IterableSimple.java | 2 +- .../java/zenscript/annotations/Named.java | 22 + .../zenscript/annotations/NotNull.java | 2 +- .../zenscript/annotations/OperatorType.java | 2 +- .../zenscript/annotations/Optional.java | 2 +- .../zenscript/annotations/OptionalDouble.java | 19 + .../zenscript/annotations/OptionalFloat.java | 19 + .../zenscript/annotations/OptionalInt.java | 19 + .../zenscript/annotations/OptionalLong.java | 19 + .../zenscript/annotations/OptionalString.java | 19 + .../zenscript/annotations/ZenCaster.java | 2 +- .../zenscript/annotations/ZenClass.java | 2 +- .../zenscript/annotations/ZenExpansion.java | 2 +- .../zenscript/annotations/ZenGetter.java | 2 +- .../annotations/ZenMemberGetter.java | 2 +- .../annotations/ZenMemberSetter.java | 2 +- .../zenscript/annotations/ZenMethod.java | 2 +- .../annotations/ZenMethodStatic.java | 2 +- .../zenscript/annotations/ZenOperator.java | 2 +- .../zenscript/annotations/ZenSetter.java | 2 +- .../lexer}/ArrayListI.java | 2 +- .../lexer}/CharStream.java | 2 +- .../lexer}/CompiledDFA.java | 2 +- .../parser => zenscript/lexer}/DFA.java | 2 +- .../parser => zenscript/lexer}/HashMapI.java | 2 +- .../parser => zenscript/lexer}/HashMapII.java | 2 +- .../parser => zenscript/lexer}/HashSetI.java | 2 +- .../parser => zenscript/lexer}/IteratorI.java | 2 +- .../parser => zenscript/lexer}/NFA.java | 2 +- .../java/zenscript/lexer/ParseException.java | 38 ++ .../parser => zenscript/lexer}/Token.java | 6 +- .../lexer}/TokenException.java | 6 +- .../lexer}/TokenStream.java | 12 +- .../lexer}/ZenTokener.java | 90 ++-- .../java/zenscript/parser/IFileLoader.java | 17 + .../java/zenscript/parser/ParsedFile.java | 223 +++++++++ .../java/zenscript/parser/ParsedImport.java | 107 ++++ .../java/zenscript/parser/ParsedModule.java | 73 +++ .../java/zenscript/parser/ParsedPackage.java | 23 + .../zenscript/parser/ParserEnvironment.java | 35 ++ .../parser/elements/ParsedFunction.java | 84 ++++ .../elements/ParsedFunctionArgument.java | 39 ++ .../parser/elements/ParsedFunctionHeader.java | 111 +++++ .../expression/ParsedCallArguments.java | 337 +++++++++++++ .../parser/expression/ParsedExpression.java | 457 +++++++++++++++++ .../expression/ParsedExpressionAndAnd.java | 22 +- .../expression/ParsedExpressionArray.java | 27 +- .../expression/ParsedExpressionAssign.java | 16 +- .../expression/ParsedExpressionBinary.java | 14 +- .../expression/ParsedExpressionBool.java | 10 +- .../expression/ParsedExpressionBracket.java | 51 ++ .../expression/ParsedExpressionCall.java | 52 ++ .../expression/ParsedExpressionCast.java | 20 +- .../expression/ParsedExpressionCompare.java | 18 +- .../ParsedExpressionConditional.java | 15 +- .../expression/ParsedExpressionDollar.java | 39 ++ .../expression/ParsedExpressionFloat.java | 36 ++ .../expression/ParsedExpressionFunction.java | 195 ++++++++ .../expression/ParsedExpressionIndex.java | 14 +- .../expression/ParsedExpressionIndexSet.java | 16 +- .../expression/ParsedExpressionInt.java | 38 ++ .../expression/ParsedExpressionInvalid.java | 10 +- .../expression/ParsedExpressionMap.java | 20 +- .../expression/ParsedExpressionMember.java | 10 +- .../expression/ParsedExpressionNew.java | 38 ++ .../expression/ParsedExpressionNull.java | 10 +- .../expression/ParsedExpressionOpAssign.java | 16 +- .../expression/ParsedExpressionOrOr.java | 23 +- .../expression/ParsedExpressionRange.java | 36 ++ .../expression/ParsedExpressionString.java | 32 ++ .../expression/ParsedExpressionUnary.java | 12 +- .../expression/ParsedExpressionValue.java | 8 +- .../expression/ParsedExpressionVariable.java | 23 +- .../parser/statement/ParsedStatement.java | 81 +++ .../statement/ParsedStatementBlock.java | 62 +++ .../statement/ParsedStatementBreak.java | 62 +++ .../parser/statement/ParsedStatementCase.java | 36 ++ .../statement/ParsedStatementContinue.java | 56 +++ .../statement/ParsedStatementDefault.java | 29 ++ .../statement/ParsedStatementDoWhile.java | 63 +++ .../statement/ParsedStatementExpression.java | 41 ++ .../parser/statement/ParsedStatementFor.java | 87 ++++ .../parser/statement/ParsedStatementIf.java | 78 +++ .../statement/ParsedStatementReturn.java | 51 ++ .../statement/ParsedStatementSwitch.java | 49 ++ .../parser/statement/ParsedStatementVar.java | 78 +++ .../statement/ParsedStatementWhile.java | 61 +++ .../parser/type/IParsedType.java} | 8 +- .../parser/type/ParsedTypeArray.java | 28 ++ .../parser/type/ParsedTypeAssociative.java | 33 ++ .../parser/type/ParsedTypeBasic.java | 48 ++ .../parser/type/ParsedTypeClass.java | 83 ++++ .../parser/type/ParsedTypeNullable.java | 36 ++ .../zenscript/parser/type/TypeParser.java | 112 +++++ .../main/java/zenscript/runtime/AnyBool.java | 191 +++++++ .../main/java/zenscript/runtime/AnyInt.java | 193 ++++++++ .../java/zenscript/runtime/AnyString.java | 217 ++++++++ .../value => zenscript/runtime}/IAny.java | 5 +- .../runtime/Range.java} | 10 +- .../java/zenscript/symbolic/TypeRegistry.java | 342 +++++++++++++ .../type/casting/BaseCastingRule.java | 8 +- .../type/casting/CastingAnyBool.java | 21 +- .../type/casting/CastingAnyByte.java | 21 +- .../type/casting/CastingAnyDouble.java | 21 +- .../type/casting/CastingAnyFloat.java | 21 +- .../symbolic}/type/casting/CastingAnyInt.java | 21 +- .../type/casting/CastingAnyLong.java | 21 +- .../type/casting/CastingAnyShort.java | 21 +- .../type/casting/CastingAnyString.java | 19 +- .../type/casting/CastingNotNull.java | 14 +- .../type/casting/CastingRuleAnyAs.java | 19 +- .../type/casting/CastingRuleArrayArray.java | 8 +- .../type/casting/CastingRuleArrayList.java | 7 +- .../type/casting/CastingRuleD2F.java | 19 +- .../type/casting/CastingRuleD2I.java | 19 +- .../type/casting/CastingRuleD2L.java | 19 +- .../casting/CastingRuleDelegateArray.java | 11 +- .../type/casting/CastingRuleDelegateList.java | 11 +- .../type/casting/CastingRuleDelegateMap.java | 2 +- .../CastingRuleDelegateStaticMethod.java | 2 +- .../type/casting/CastingRuleF2D.java | 19 +- .../type/casting/CastingRuleF2I.java | 19 +- .../type/casting/CastingRuleF2L.java | 19 +- .../type/casting/CastingRuleI2B.java | 19 +- .../type/casting/CastingRuleI2D.java | 19 +- .../type/casting/CastingRuleI2F.java | 19 +- .../type/casting/CastingRuleI2L.java | 19 +- .../type/casting/CastingRuleI2S.java | 19 +- .../type/casting/CastingRuleL2D.java | 19 +- .../type/casting/CastingRuleL2F.java | 19 +- .../type/casting/CastingRuleL2I.java | 19 +- .../type/casting/CastingRuleListArray.java | 7 +- .../type/casting/CastingRuleListList.java | 7 +- .../type/casting/CastingRuleMap.java | 6 +- .../casting/CastingRuleMatchedFunction.java | 6 +- .../type/casting/CastingRuleNone.java | 6 +- .../CastingRuleNullableStaticMethod.java | 13 +- .../CastingRuleNullableVirtualMethod.java | 9 +- .../type/casting/CastingRuleStaticMethod.java | 10 +- .../casting/CastingRuleVirtualMethod.java | 14 +- .../symbolic}/type/casting/ICastingRule.java | 6 +- .../type/casting/ICastingRuleDelegate.java | 2 +- .../symbolic/type/generic/ITypeVariable.java | 15 + .../symbolic/type/generic/TypeCapture.java | 41 ++ .../type/generic/TypeVariableNative.java | 43 ++ .../symbolic/unit/SymbolicFunction.java | 35 ++ .../symbolic/util/CommonMethods.java | 220 +++++++++ .../zenscript/util/StringUtil.java | 10 +- .../zenscript/util/ZenPosition.java | 10 +- 385 files changed, 9888 insertions(+), 6905 deletions(-) create mode 100644 MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByteArray.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/expand/ExpandIntArray.java delete mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/ITweaker.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java rename ZenScript/src/main/java/stanhebben/zenscript/compiler/{IEnvironmentClass.java => IScopeClass.java} (64%) rename ZenScript/src/main/java/stanhebben/zenscript/compiler/{IEnvironmentGlobal.java => IScopeGlobal.java} (80%) rename ZenScript/src/main/java/stanhebben/zenscript/compiler/{IEnvironmentMethod.java => IScopeMethod.java} (52%) rename ZenScript/src/main/java/stanhebben/zenscript/compiler/{EnvironmentMethod.java => ScopeMethod.java} (65%) rename ZenScript/src/main/java/stanhebben/zenscript/compiler/{EnvironmentScope.java => ScopeStatementBlock.java} (56%) delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/compiler/TypeRegistry.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunction.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunctionArgument.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListGet.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListLength.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListSet.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialJavaClass.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGenerated.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/parser/ParseException.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpression.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCall.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionFunction.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBreak.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/statements/StatementContinue.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/statements/StatementDoWhile.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/statements/StatementWhile.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolArgument.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaClass.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolZenStaticMethod.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntRange.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAny.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/IZenErrorLogger.java (88%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/CompareType.java (75%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/IterableList.java (90%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/IterableMap.java (90%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/IterableSimple.java (90%) create mode 100644 ZenScript/src/main/java/zenscript/annotations/Named.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/NotNull.java (89%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/OperatorType.java (86%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/Optional.java (92%) create mode 100644 ZenScript/src/main/java/zenscript/annotations/OptionalDouble.java create mode 100644 ZenScript/src/main/java/zenscript/annotations/OptionalFloat.java create mode 100644 ZenScript/src/main/java/zenscript/annotations/OptionalInt.java create mode 100644 ZenScript/src/main/java/zenscript/annotations/OptionalLong.java create mode 100644 ZenScript/src/main/java/zenscript/annotations/OptionalString.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenCaster.java (92%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenClass.java (93%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenExpansion.java (95%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenGetter.java (94%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenMemberGetter.java (94%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenMemberSetter.java (94%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenMethod.java (94%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenMethodStatic.java (94%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenOperator.java (91%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/annotations/ZenSetter.java (94%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/ArrayListI.java (97%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/CharStream.java (98%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/CompiledDFA.java (99%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/DFA.java (99%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/HashMapI.java (99%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/HashMapII.java (99%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/HashSetI.java (99%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/IteratorI.java (94%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/NFA.java (99%) create mode 100644 ZenScript/src/main/java/zenscript/lexer/ParseException.java rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/Token.java (85%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/TokenException.java (71%) rename ZenScript/src/main/java/{stanhebben/zenscript/parser => zenscript/lexer}/TokenStream.java (96%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/lexer}/ZenTokener.java (74%) create mode 100644 ZenScript/src/main/java/zenscript/parser/IFileLoader.java create mode 100644 ZenScript/src/main/java/zenscript/parser/ParsedFile.java create mode 100644 ZenScript/src/main/java/zenscript/parser/ParsedImport.java create mode 100644 ZenScript/src/main/java/zenscript/parser/ParsedModule.java create mode 100644 ZenScript/src/main/java/zenscript/parser/ParsedPackage.java create mode 100644 ZenScript/src/main/java/zenscript/parser/ParserEnvironment.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionArgument.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionAndAnd.java (59%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionArray.java (75%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionAssign.java (66%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionBinary.java (75%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionBool.java (67%) create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionCast.java (55%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionCompare.java (65%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionConditional.java (66%) create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionIndex.java (65%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionIndexSet.java (69%) create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionInvalid.java (61%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionMap.java (77%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionMember.java (72%) create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionNull.java (65%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionOpAssign.java (75%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionOrOr.java (67%) create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionUnary.java (73%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionValue.java (73%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/parser/expression/ParsedExpressionVariable.java (69%) create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatement.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBlock.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBreak.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java create mode 100644 ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java rename ZenScript/src/main/java/{stanhebben/zenscript/compiler/ITypeRegistry.java => zenscript/parser/type/IParsedType.java} (61%) create mode 100644 ZenScript/src/main/java/zenscript/parser/type/ParsedTypeArray.java create mode 100644 ZenScript/src/main/java/zenscript/parser/type/ParsedTypeAssociative.java create mode 100644 ZenScript/src/main/java/zenscript/parser/type/ParsedTypeBasic.java create mode 100644 ZenScript/src/main/java/zenscript/parser/type/ParsedTypeClass.java create mode 100644 ZenScript/src/main/java/zenscript/parser/type/ParsedTypeNullable.java create mode 100644 ZenScript/src/main/java/zenscript/parser/type/TypeParser.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyBool.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyInt.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyString.java rename ZenScript/src/main/java/{stanhebben/zenscript/value => zenscript/runtime}/IAny.java (92%) rename ZenScript/src/main/java/{stanhebben/zenscript/value/IntRange.java => zenscript/runtime/Range.java} (58%) create mode 100644 ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/BaseCastingRule.java (76%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyBool.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyByte.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyDouble.java (50%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyFloat.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyInt.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyLong.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyShort.java (51%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingAnyString.java (67%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingNotNull.java (73%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleAnyAs.java (53%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleArrayArray.java (88%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleArrayList.java (88%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleD2F.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleD2I.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleD2L.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleDelegateArray.java (52%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleDelegateList.java (52%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleDelegateMap.java (95%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleDelegateStaticMethod.java (94%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleF2D.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleF2I.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleF2L.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleI2B.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleI2D.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleI2F.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleI2L.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleI2S.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleL2D.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleL2F.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleL2I.java (55%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleListArray.java (88%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleListList.java (88%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleMap.java (87%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleMatchedFunction.java (87%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleNone.java (81%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleNullableStaticMethod.java (79%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleNullableVirtualMethod.java (81%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleStaticMethod.java (78%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/CastingRuleVirtualMethod.java (66%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/ICastingRule.java (70%) rename ZenScript/src/main/java/{stanhebben/zenscript => zenscript/symbolic}/type/casting/ICastingRuleDelegate.java (89%) create mode 100644 ZenScript/src/main/java/zenscript/symbolic/type/generic/ITypeVariable.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeCapture.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeVariableNative.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java rename ZenScript/src/main/java/{stanhebben => }/zenscript/util/StringUtil.java (98%) rename ZenScript/src/main/java/{stanhebben => }/zenscript/util/ZenPosition.java (77%) diff --git a/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java index 616449eb..9092a655 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java +++ b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java @@ -1,8 +1,8 @@ package minetweaker; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.parser.Token; +import stanhebben.zenscript.compiler.IScopeGlobal; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; /** @@ -28,5 +28,5 @@ public interface IBracketHandler { * @param tokens token stream to be detected * @return the resolved symbol, or null */ - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens); + public IZenSymbol resolve(IScopeGlobal environment, List tokens); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java index 02e86344..cc9a80f5 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java @@ -15,7 +15,6 @@ import minetweaker.api.event.IEventManager; import minetweaker.api.game.IGame; import minetweaker.api.mods.ILoadedMods; -import minetweaker.runtime.ITweaker; import minetweaker.runtime.ILogger; import minetweaker.runtime.MTTweaker; import minetweaker.api.recipes.IRecipeManager; @@ -23,14 +22,14 @@ import minetweaker.api.recipes.IFurnaceManager; import minetweaker.api.server.IServer; import minetweaker.runtime.GlobalRegistry; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenExpansion; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolJavaStaticField; import stanhebben.zenscript.symbols.SymbolJavaStaticGetter; import stanhebben.zenscript.symbols.SymbolJavaStaticMethod; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenExpansion; /** * Provides access to the MineTweaker API. @@ -96,7 +95,7 @@ private MineTweakerAPI() {} * The Tweaker is where you apply undoable actions. Any kind of action that * reloads with the scripts should always be submitted to the tweaker. */ - public static final ITweaker tweaker = new MTTweaker(); + private static final MTTweaker TWEAKER = new MTTweaker(); /** * The logger can be used to write logging messages to the client. Error and @@ -154,7 +153,7 @@ public static final ILogger getLogger() { * @param action action object */ public static void apply(IUndoableAction action) { - tweaker.apply(action); + TWEAKER.apply(action); } /** diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java index 938277f8..273ab0f9 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java @@ -1,8 +1,8 @@ package minetweaker.api.block; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Block interface. Used to interact with blocks in the world. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java index f6fa0dc3..f5cfe759 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java @@ -1,7 +1,7 @@ package minetweaker.api.block; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Blocks definitions provide additional information about blocks. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockPattern.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockPattern.java index 41af7b1d..0892089a 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockPattern.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockPattern.java @@ -7,11 +7,11 @@ package minetweaker.api.block; import java.util.List; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/chat/IChatMessage.java b/MineTweaker3-API/src/main/java/minetweaker/api/chat/IChatMessage.java index f7711405..c4d7eda5 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/chat/IChatMessage.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/chat/IChatMessage.java @@ -1,8 +1,8 @@ package minetweaker.api.chat; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenOperator; /** * Represents a chat message. Strings can be converted into chat messages, diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/client/IClient.java b/MineTweaker3-API/src/main/java/minetweaker/api/client/IClient.java index 5d9f5e04..20a589cf 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/client/IClient.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/client/IClient.java @@ -1,8 +1,8 @@ package minetweaker.api.client; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Interface for client interaction. Only available on clients. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/container/IContainer.java b/MineTweaker3-API/src/main/java/minetweaker/api/container/IContainer.java index 89c28b3e..88b925ba 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/container/IContainer.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/container/IContainer.java @@ -1,9 +1,9 @@ package minetweaker.api.container; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * Container interface. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java b/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java index 53aebce0..38eab806 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/data/IData.java @@ -2,14 +2,14 @@ import java.util.List; import java.util.Map; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMemberGetter; -import stanhebben.zenscript.annotations.ZenMemberSetter; -import stanhebben.zenscript.annotations.ZenOperator; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMemberGetter; +import zenscript.annotations.ZenMemberSetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; /** * Generic data interface. A data element may contain any kind of basic data diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java index 5237c8a3..5e4eaf15 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java @@ -2,9 +2,9 @@ import minetweaker.api.util.Position3f; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenSetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenSetter; /** * Entity interface. Used to obtain information about entities, and modify diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityDefinition.java index 9bffc8bc..419348dc 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityDefinition.java @@ -6,8 +6,8 @@ package minetweaker.api.entity; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityItem.java b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityItem.java index af9d2fe3..271c5c25 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityItem.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityItem.java @@ -1,7 +1,7 @@ package minetweaker.api.entity; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenGetter; /** * Represents an item entity. Item entities are entities representing an item diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityXp.java b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityXp.java index 9613f09f..d86a9c19 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityXp.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntityXp.java @@ -1,7 +1,7 @@ package minetweaker.api.entity; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Represents an xp orb. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/IEventHandle.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/IEventHandle.java index 00066040..e27a08ac 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/IEventHandle.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/IEventHandle.java @@ -1,8 +1,8 @@ package minetweaker.api.event; import java.io.Closeable; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenMethod; /** * Represents an event handle. Event handles are used to cancel event listeners. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerAttackEntityEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerAttackEntityEvent.java index 13981c9e..b390d783 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerAttackEntityEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerAttackEntityEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.entity.IEntity; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerBonemealEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerBonemealEvent.java index af61f079..d678c7b9 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerBonemealEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerBonemealEvent.java @@ -10,9 +10,9 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IBlockGroup; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerChangedDimensionEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerChangedDimensionEvent.java index 0912b6e2..ec0117f4 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerChangedDimensionEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerChangedDimensionEvent.java @@ -8,8 +8,8 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerCraftedEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerCraftedEvent.java index 8709ccd0..321e59f2 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerCraftedEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerCraftedEvent.java @@ -9,8 +9,8 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; import minetweaker.api.recipes.ICraftingInventory; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerDeathDropsEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerDeathDropsEvent.java index dcad378f..66d2881b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerDeathDropsEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerDeathDropsEvent.java @@ -10,8 +10,8 @@ import minetweaker.api.damage.IDamageSource; import minetweaker.api.entity.IEntityItem; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerFillBucketEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerFillBucketEvent.java index b91091cd..202cf8a7 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerFillBucketEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerFillBucketEvent.java @@ -11,10 +11,10 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IBlockGroup; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenSetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenSetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEntityEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEntityEvent.java index 9af68feb..ab3c0916 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEntityEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEntityEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.entity.IEntity; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEvent.java index 9dcd682c..f8ea4d53 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerInteractEvent.java @@ -10,9 +10,9 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IBlockGroup; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedInEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedInEvent.java index eaa2795e..df3e2e2d 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedInEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedInEvent.java @@ -7,8 +7,8 @@ package minetweaker.api.event; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedOutEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedOutEvent.java index ecd959b3..18648947 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedOutEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerLoggedOutEvent.java @@ -7,8 +7,8 @@ package minetweaker.api.event; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerOpenContainerEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerOpenContainerEvent.java index d308ed29..138eb42e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerOpenContainerEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerOpenContainerEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.container.IContainer; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupEvent.java index 1776a7d8..7cbb0ba8 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.entity.IEntity; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupItemEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupItemEvent.java index 5c556e8e..5f454779 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupItemEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupItemEvent.java @@ -8,8 +8,8 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupXpEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupXpEvent.java index f7c341ab..fa92402b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupXpEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerPickupXpEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.entity.IEntityXp; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerRespawnEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerRespawnEvent.java index da6eb738..df65fb2b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerRespawnEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerRespawnEvent.java @@ -7,8 +7,8 @@ package minetweaker.api.event; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSleepInBedEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSleepInBedEvent.java index 5294ba78..22be5853 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSleepInBedEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSleepInBedEvent.java @@ -7,8 +7,8 @@ package minetweaker.api.event; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSmeltedEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSmeltedEvent.java index 62d5743e..8f9f59bd 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSmeltedEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerSmeltedEvent.java @@ -8,7 +8,7 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseHoeEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseHoeEvent.java index a6fe85d9..33429a53 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseHoeEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseHoeEvent.java @@ -11,9 +11,9 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IBlockGroup; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemStartEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemStartEvent.java index 37ac12f7..d922b52b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemStartEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemStartEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemTickEvent.java b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemTickEvent.java index 0595e803..5eaf475c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemTickEvent.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/event/PlayerUseItemTickEvent.java @@ -8,9 +8,9 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java index c45cf382..8859b7f1 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java @@ -6,8 +6,8 @@ import minetweaker.api.item.IItemDefinition; import minetweaker.api.liquid.ILiquidDefinition; import minetweaker.api.world.IBiome; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Game interface. Used to obtain general game information. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java index 48f5b5bf..caac9ea5 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java @@ -1,11 +1,11 @@ package minetweaker.api.item; import java.util.List; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; /** * Represents a recipe ingredient. An ingredient can be an item, an ore diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemCondition.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemCondition.java index 0e3e73e9..82242eed 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemCondition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemCondition.java @@ -1,6 +1,6 @@ package minetweaker.api.item; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * Item conditions apply additional conditions on item stacks. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java index 3908e031..7a218c6c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java @@ -1,9 +1,9 @@ package minetweaker.api.item; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * Contains an item definition. Item definitions provide general information diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java index 2a51b0c6..1e16ffaa 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java @@ -3,13 +3,13 @@ import minetweaker.api.block.IBlock; import minetweaker.api.data.IData; import minetweaker.api.liquid.ILiquidStack; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenOperator; -import stanhebben.zenscript.annotations.ZenSetter; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; +import zenscript.annotations.ZenSetter; /** * Contains an item stack. An item stack consists of an item definition, diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemTransformer.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemTransformer.java index 48e954d3..33cd7caf 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemTransformer.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemTransformer.java @@ -1,7 +1,7 @@ package minetweaker.api.item; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenMethod; /** * An item transformer modifies an item stack. Used to apply damage, grab multiple diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientCondition.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientCondition.java index 12421d5b..b396f187 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientCondition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientCondition.java @@ -1,8 +1,8 @@ package minetweaker.api.item; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenExpansion; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenMethod; /** * Conditions can be used to set requirements for matching items. They can be diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java index 196f7c42..9502515c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java @@ -1,7 +1,7 @@ package minetweaker.api.item; -import stanhebben.zenscript.annotations.ZenExpansion; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenMethod; /** * Transformations can be used to modify an ingredient after it is used in a diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/WeightedItemStack.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/WeightedItemStack.java index a5e6f0a6..a1b9765e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/WeightedItemStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/WeightedItemStack.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Contains a weighted item stack. Weighted item stacks simply contain a stack diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidDefinition.java index 9472168a..2a91fc86 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidDefinition.java @@ -2,12 +2,12 @@ import java.util.List; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenOperator; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenSetter; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; +import zenscript.annotations.ZenSetter; /** * Contains a liquid definition. Liquid definitions provide additional information diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidStack.java b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidStack.java index 2df1a696..8d5ef91e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/ILiquidStack.java @@ -7,11 +7,11 @@ package minetweaker.api.liquid; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/WeightedLiquidStack.java b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/WeightedLiquidStack.java index 871c9f5c..edc69bc2 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/liquid/WeightedLiquidStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/liquid/WeightedLiquidStack.java @@ -3,8 +3,8 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * Contains a weighted item stack. Weighted item stacks simply contain a stack diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/mods/ILoadedMods.java b/MineTweaker3-API/src/main/java/minetweaker/api/mods/ILoadedMods.java index 39971e5b..1551f4fd 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/mods/ILoadedMods.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/mods/ILoadedMods.java @@ -6,10 +6,10 @@ package minetweaker.api.mods; -import stanhebben.zenscript.annotations.IterableSimple; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.IterableSimple; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenOperator; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/mods/IMod.java b/MineTweaker3-API/src/main/java/minetweaker/api/mods/IMod.java index e7c447ee..c44dee91 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/mods/IMod.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/mods/IMod.java @@ -1,6 +1,6 @@ package minetweaker.api.mods; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDict.java b/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDict.java index d8766c1a..d76d5572 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDict.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDict.java @@ -7,9 +7,9 @@ package minetweaker.api.oredict; import java.util.List; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMemberGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMemberGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDictEntry.java b/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDictEntry.java index 2f9c89b2..9e9b1f67 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDictEntry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/oredict/IOreDictEntry.java @@ -8,11 +8,11 @@ import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/player/IPlayer.java b/MineTweaker3-API/src/main/java/minetweaker/api/player/IPlayer.java index ce7436eb..1c1d2324 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/player/IPlayer.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/player/IPlayer.java @@ -9,9 +9,9 @@ import minetweaker.api.chat.IChatMessage; import minetweaker.api.data.IData; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInfo.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInfo.java index 52f3926a..587e1d46 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInfo.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInfo.java @@ -8,8 +8,8 @@ import minetweaker.api.player.IPlayer; import minetweaker.api.world.IDimension; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java index 37968188..8adce821 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingInventory.java @@ -8,9 +8,9 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * Crafting inventory interface. The crafting inventory is the 2x2 grid in the diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java index 058bf5b7..5e5105e9 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java @@ -7,7 +7,7 @@ package minetweaker.api.recipes; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IFurnaceManager.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IFurnaceManager.java index a460e283..c587c629 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IFurnaceManager.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IFurnaceManager.java @@ -8,9 +8,9 @@ import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java index 9a1ae0bc..bb972572 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeFunction.java @@ -8,7 +8,7 @@ import java.util.Map; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java index 41727016..fd9e93fb 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java @@ -2,9 +2,9 @@ import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenMethod; /** * The RecipeManager adds and removes crafting recipes. The IRecipeManager diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/resource/IResourceFile.java b/MineTweaker3-API/src/main/java/minetweaker/api/resource/IResourceFile.java index fa89730f..075ac3ae 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/resource/IResourceFile.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/resource/IResourceFile.java @@ -6,8 +6,8 @@ package minetweaker.api.resource; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/CommandValidators.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/CommandValidators.java index 70be81dc..84e83bc8 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/CommandValidators.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/CommandValidators.java @@ -8,8 +8,8 @@ import minetweaker.MineTweakerAPI; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandFunction.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandFunction.java index 4eadd1c2..4a49dcee 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandFunction.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandFunction.java @@ -7,7 +7,7 @@ package minetweaker.api.server; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandTabCompletion.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandTabCompletion.java index e64a52cf..353fd5cc 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandTabCompletion.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandTabCompletion.java @@ -7,7 +7,7 @@ package minetweaker.api.server; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandValidator.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandValidator.java index dcfeb04a..c23abd3b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandValidator.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/ICommandValidator.java @@ -7,7 +7,7 @@ package minetweaker.api.server; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.ZenClass; +import zenscript.annotations.ZenClass; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java b/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java index 58c643bc..34a5c46a 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/server/IServer.java @@ -11,9 +11,9 @@ import minetweaker.api.event.PlayerLoggedOutEvent; import minetweaker.api.player.IPlayer; import minetweaker.util.IEventHandler; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java b/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java index 516b6caa..e2ab68c1 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java @@ -6,8 +6,8 @@ package minetweaker.api.util; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java b/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java index 61d13a13..ddb1e9e6 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java @@ -7,9 +7,9 @@ package minetweaker.api.world; import minetweaker.api.block.IBlock; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/world/IDimension.java b/MineTweaker3-API/src/main/java/minetweaker/api/world/IDimension.java index 800c4a43..c362cfdb 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/world/IDimension.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/world/IDimension.java @@ -6,9 +6,9 @@ package minetweaker.api.world; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyArray.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyArray.java index 14c2242c..5b02e36c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyArray.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyArray.java @@ -3,8 +3,8 @@ import java.util.Arrays; import minetweaker.api.data.DataList; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * Makes arrays convertable to IData. diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyDict.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyDict.java index 477f3c23..be642939 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyDict.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandAnyDict.java @@ -9,8 +9,8 @@ import java.util.Map; import minetweaker.api.data.DataMap; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandBool.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandBool.java index d9c899ac..90c0e40c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandBool.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandBool.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataBool; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByte.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByte.java index 691267f3..1ef57162 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByte.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByte.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataByte; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByteArray.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByteArray.java new file mode 100644 index 00000000..623c2520 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandByteArray.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.expand; + +import minetweaker.api.data.DataByteArray; +import minetweaker.api.data.IData; +import zenscript.annotations.ZenExpansion; + +/** + * + * @author Stan + */ +@ZenExpansion("byte[]") +public class ExpandByteArray { + public static IData asData(byte[] data) { + return new DataByteArray(data, true); + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandDouble.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandDouble.java index 93141fd0..28e2a2a0 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandDouble.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandDouble.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataDouble; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandFloat.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandFloat.java index cd5cbbdd..66ac99c3 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandFloat.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandFloat.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataFloat; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandInt.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandInt.java index b98fe9ca..eeb920ce 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandInt.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandInt.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataInt; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandIntArray.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandIntArray.java new file mode 100644 index 00000000..d37101ec --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandIntArray.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.expand; + +import minetweaker.api.data.DataIntArray; +import minetweaker.api.data.IData; +import zenscript.annotations.ZenExpansion; + +/** + * + * @author Stan + */ +@ZenExpansion("int[]") +public class ExpandIntArray { + public static IData asData(int[] data) { + return new DataIntArray(data, true); + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandItemStack.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandItemStack.java index ffac22c7..12a5503b 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandItemStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandItemStack.java @@ -8,8 +8,8 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.item.WeightedItemStack; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandLong.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandLong.java index 330dd12b..94a906d7 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandLong.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandLong.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataLong; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandShort.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandShort.java index cdaaf27c..a787e0d4 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandShort.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandShort.java @@ -8,8 +8,8 @@ import minetweaker.api.data.DataShort; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java index e3ecd440..a4bc97bf 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java @@ -12,10 +12,10 @@ import minetweaker.api.chat.IChatMessage; import minetweaker.api.data.DataString; import minetweaker.api.data.IData; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenExpansion; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java index 7f731233..640028f6 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java @@ -20,14 +20,14 @@ import minetweaker.IRecipeRemover; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; -import stanhebben.zenscript.IZenErrorLogger; +import zenscript.IZenErrorLogger; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.annotations.ZenExpansion; import stanhebben.zenscript.compiler.ClassNameGenerator; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.TypeRegistry; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolJavaStaticField; @@ -38,7 +38,7 @@ import stanhebben.zenscript.type.ZenTypeNative; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -107,7 +107,7 @@ public static void remove(IIngredient ingredient) { } } - public static IZenSymbol resolveBracket(IEnvironmentGlobal environment, List tokens) { + public static IZenSymbol resolveBracket(IScopeGlobal environment, List tokens) { for (IBracketHandler handler : bracketHandlers) { IZenSymbol symbol = handler.resolve(environment, tokens); if (symbol != null) { @@ -137,7 +137,7 @@ public static IZenSymbol getStaticField(Class cls, String name) { } } - public static IEnvironmentGlobal makeGlobalEnvironment(Map classes) { + public static IScopeGlobal makeGlobalEnvironment(Map classes) { return new MyGlobalEnvironment(classes); } @@ -182,7 +182,7 @@ public IZenSymbol getDollar(String name) { } @Override - public IZenSymbol getBracketed(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol getBracketed(IScopeGlobal environment, List tokens) { return resolveBracket(environment, tokens); } @@ -197,7 +197,7 @@ public TypeExpansion getExpansion(String type) { } } - private static class MyGlobalEnvironment implements IEnvironmentGlobal { + private static class MyGlobalEnvironment implements IScopeGlobal { private final Map classes; private final Map symbols; private final ClassNameGenerator generator; diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/ITweaker.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/ITweaker.java deleted file mode 100644 index 93b00679..00000000 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/ITweaker.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package minetweaker.runtime; - -import java.util.List; -import minetweaker.IUndoableAction; -import minetweaker.api.item.IIngredient; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenMethod; - -/** - * - * @author Stan - */ -@ZenClass("minetweaker.IMineTweaker") -public interface ITweaker { - /** - * Executes a specified MineTweaker action. Will print a log message and - * adds the action to the undo list. - * - * @param action action to execute - */ - public void apply(IUndoableAction action); - - /** - * Removes a specific item from all known recipes handlers. - * - * @param items items to remove - */ - @ZenMethod - public void remove(IIngredient items); - - /** - * Rolls back all actions performed by MineTweaker. Returns the list of - * actions that could not be rolled back (the "stuck" ones that are not - * undoable). - * - * @return stuck action list - */ - public List rollback(); - - /** - * Sets the script provider. - * - * @param provider - * @return - */ - public void setScriptProvider(IScriptProvider provider); - - /** - * Executes all scripts provided by the script provider. - */ - public void load(); - - /** - * Retrieves the data from the scripts that were loaded last. - * - * @return scripts data - */ - public byte[] getScriptData(); -} diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java index 8e184ad4..b7042d2e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java @@ -25,17 +25,17 @@ import stanhebben.zenscript.ZenModule; import static stanhebben.zenscript.ZenModule.compileScripts; import static stanhebben.zenscript.ZenModule.extractClassName; -import stanhebben.zenscript.ZenParsedFile; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.parser.ParseException; +import zenscript.parser.ParsedFile; +import zenscript.lexer.ZenTokener; +import stanhebben.zenscript.compiler.IScopeGlobal; +import zenscript.lexer.ParseException; /** * * * @author Stan Hebben */ -public class MTTweaker implements ITweaker { +public final class MTTweaker { private static final boolean DEBUG = false; private final List actions = new ArrayList(); @@ -45,7 +45,6 @@ public class MTTweaker implements ITweaker { private IScriptProvider scriptProvider; private byte[] scriptData; - @Override public void apply(IUndoableAction action) { MineTweakerAPI.logInfo(action.describe()); @@ -67,13 +66,11 @@ public void apply(IUndoableAction action) { actions.add(action); } - - @Override + public void remove(IIngredient items) { GlobalRegistry.remove(items); } - - @Override + public List rollback() { List stuck = new ArrayList(); for (int i = actions.size() - 1; i >= 0; i--) { @@ -95,13 +92,11 @@ public List rollback() { actions.clear(); return stuck; } - - @Override + public void setScriptProvider(IScriptProvider provider) { scriptProvider = provider; } - - @Override + public void load() { System.out.println("Loading scripts"); @@ -116,9 +111,9 @@ public void load() { executed.add(script.getGroupName()); Map classes = new HashMap(); - IEnvironmentGlobal environmentGlobal = GlobalRegistry.makeGlobalEnvironment(classes); + IScopeGlobal environmentGlobal = GlobalRegistry.makeGlobalEnvironment(classes); - List files = new ArrayList(); + List files = new ArrayList(); while (script.next()) { Reader reader = null; @@ -128,8 +123,8 @@ public void load() { String filename = script.getName(); String className = extractClassName(filename); - ZenTokener parser = new ZenTokener(reader, environmentGlobal.getEnvironment()); - ZenParsedFile pfile = new ZenParsedFile(filename, className, parser, environmentGlobal); + ZenTokener parser = new ZenTokener(reader); + ParsedFile pfile = new ParsedFile(filename, className, parser, environmentGlobal); files.add(pfile); } catch (IOException ex) { MineTweakerAPI.logError("Could not load script " + script.getName() + ": " + ex.getMessage()); @@ -170,8 +165,7 @@ public void load() { } } } - - @Override + public byte[] getScriptData() { return scriptData; } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/ItemBracketHandler.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/ItemBracketHandler.java index 5bed0c4a..a60cc9e4 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/ItemBracketHandler.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/ItemBracketHandler.java @@ -17,17 +17,18 @@ import static minetweaker.api.minecraft.MineTweakerMC.getIItemStackWildcardSize; import net.minecraft.item.Item; import net.minecraftforge.oredict.OreDictionary; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import zenscript.lexer.ZenTokener; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -83,7 +84,7 @@ public ItemBracketHandler() { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { // any symbol if (tokens.size() == 1 && tokens.get(0).getValue().equals("*")) { return symbolAny; @@ -101,7 +102,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { if (tokens.get(0).getValue().equals("item") && tokens.get(1).getValue().equals(":")) { fromIndex = 2; } - if (tokens.get(tokens.size() - 1).getType() == ZenTokener.T_INTVALUE + if (tokens.get(tokens.size() - 1).getType() == ZenTokener.TOKEN_INTVALUE && tokens.get(tokens.size() - 2).getValue().equals(":")) { toIndex = tokens.size() - 2; meta = Integer.parseInt(tokens.get(tokens.size() - 1).getValue()); @@ -112,17 +113,17 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { } } - return find(environment, tokens, fromIndex, toIndex, meta); + return find(tokens, fromIndex, toIndex, meta); } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex, int meta) { - if (endIndex == startIndex + 1 && tokens.get(startIndex).getType() == ZenTokener.T_INTVALUE) { + private IZenSymbol find(List tokens, int startIndex, int endIndex, int meta) { + if (endIndex == startIndex + 1 && tokens.get(startIndex).getType() == ZenTokener.TOKEN_INTVALUE) { int id = Integer.parseInt(tokens.get(startIndex).getValue()); if (id < 0 || id > Item.itemsList.length || Item.itemsList[id] == null) { return null; } - return new ItemReferenceSymbolId(environment, id, meta); + return new ItemReferenceSymbolId(id, meta); } StringBuilder valueBuilder = new StringBuilder(); @@ -132,53 +133,49 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } if (itemNames.containsKey(valueBuilder.toString())) { - return new ItemReferenceSymbol(environment, valueBuilder.toString(), meta); + return new ItemReferenceSymbol(valueBuilder.toString(), meta); } return null; } private class ItemReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; private final String name; private final int meta; - public ItemReferenceSymbol(IEnvironmentGlobal environment, String name, int meta) { - this.environment = environment; + public ItemReferenceSymbol(String name, int meta) { this.name = name; this.meta = meta; } @Override - public IPartialExpression instance(ZenPosition position) { + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { return new ExpressionCallStatic( position, environment, method, - new ExpressionString(position, name), - new ExpressionInt(position, meta, ZenType.INT)); + new ExpressionString(position, environment, name), + new ExpressionInt(position, environment, meta, environment.getTypes().INT)); } } private class ItemReferenceSymbolId implements IZenSymbol { - private final IEnvironmentGlobal environment; private final int id; private final int meta; - public ItemReferenceSymbolId(IEnvironmentGlobal environment, int id, int meta) { - this.environment = environment; + public ItemReferenceSymbolId(int id, int meta) { this.id = id; this.meta = meta; } @Override - public IPartialExpression instance(ZenPosition position) { + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { return new ExpressionCallStatic( position, environment, method2, - new ExpressionInt(position, id, ZenType.INT), - new ExpressionInt(position, meta, ZenType.INT)); + new ExpressionInt(position, environment, id, environment.getTypes().INT), + new ExpressionInt(position, environment, meta, environment.getTypes().INT)); } } } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/LiquidBracketHandler.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/LiquidBracketHandler.java index bee40e9e..41a0e909 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/LiquidBracketHandler.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/LiquidBracketHandler.java @@ -9,15 +9,15 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -35,7 +35,7 @@ public static ILiquidStack getLiquid(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("liquid") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -45,7 +45,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -61,10 +61,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class LiquidReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public LiquidReferenceSymbol(IEnvironmentGlobal environment, String name) { + public LiquidReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/OreBracketHandler.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/OreBracketHandler.java index a64cc057..b3261846 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/OreBracketHandler.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/brackets/OreBracketHandler.java @@ -12,15 +12,15 @@ import static minetweaker.api.minecraft.MineTweakerMC.getOreDict; import minetweaker.api.oredict.IOreDictEntry; import minetweaker.runtime.GlobalRegistry; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -33,7 +33,7 @@ public static IOreDictEntry getOre(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -43,7 +43,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -54,10 +54,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class OreReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public OreReferenceSymbol(IEnvironmentGlobal environment, String name) { + public OreReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java index 7d2525a4..84c05cf5 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java @@ -18,17 +18,17 @@ import static minetweaker.api.minecraft.MineTweakerMC.getIItemStackWildcardSize; import net.minecraft.item.Item; import net.minecraftforge.oredict.OreDictionary; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import zenscript.lexer.ZenTokener; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -67,7 +67,7 @@ public ItemBracketHandler() { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { // any symbol if (tokens.size() == 1 && tokens.get(0).getValue().equals("*")) { return symbolAny; @@ -85,7 +85,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { if (tokens.get(0).getValue().equals("item") && tokens.get(1).getValue().equals(":")) { fromIndex = 2; } - if (tokens.get(tokens.size() - 1).getType() == ZenTokener.T_INTVALUE + if (tokens.get(tokens.size() - 1).getType() == ZenTokener.TOKEN_INTVALUE && tokens.get(tokens.size() - 2).getValue().equals(":")) { toIndex = tokens.size() - 2; meta = Integer.parseInt(tokens.get(tokens.size() - 1).getValue()); @@ -99,7 +99,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return find(environment, tokens, fromIndex, toIndex, meta); } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex, int meta) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex, int meta) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -115,11 +115,11 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class ItemReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; private final int meta; - public ItemReferenceSymbol(IEnvironmentGlobal environment, String name, int meta) { + public ItemReferenceSymbol(IScopeGlobal environment, String name, int meta) { this.environment = environment; this.name = name; this.meta = meta; diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java index 421d0cba..43436b71 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java @@ -9,15 +9,15 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -35,7 +35,7 @@ public static ILiquidStack getLiquid(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("liquid") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -45,7 +45,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -61,10 +61,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class LiquidReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public LiquidReferenceSymbol(IEnvironmentGlobal environment, String name) { + public LiquidReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java index ad5c021d..a2e5d3ea 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java @@ -12,15 +12,15 @@ import minetweaker.mc1710.oredict.MCOreDictEntry; import minetweaker.api.oredict.IOreDictEntry; import minetweaker.runtime.GlobalRegistry; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -33,7 +33,7 @@ public static IOreDictEntry getOre(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -43,7 +43,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -54,10 +54,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class OreReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public OreReferenceSymbol(IEnvironmentGlobal environment, String name) { + public OreReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/ItemBracketHandler.java b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/ItemBracketHandler.java index 3aa05406..805f17b0 100644 --- a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/ItemBracketHandler.java +++ b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/ItemBracketHandler.java @@ -18,17 +18,17 @@ import static minetweaker.api.minecraft.MineTweakerMC.getIItemStackWildcardSize; import net.minecraft.item.Item; import net.minecraftforge.oredict.OreDictionary; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import zenscript.lexer.ZenTokener; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -67,7 +67,7 @@ public ItemBracketHandler() { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { // any symbol if (tokens.size() == 1 && tokens.get(0).getValue().equals("*")) { return symbolAny; @@ -85,7 +85,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { if (tokens.get(0).getValue().equals("item") && tokens.get(1).getValue().equals(":")) { fromIndex = 2; } - if (tokens.get(tokens.size() - 1).getType() == ZenTokener.T_INTVALUE + if (tokens.get(tokens.size() - 1).getType() == ZenTokener.TOKEN_INTVALUE && tokens.get(tokens.size() - 2).getValue().equals(":")) { toIndex = tokens.size() - 2; meta = Integer.parseInt(tokens.get(tokens.size() - 1).getValue()); @@ -99,7 +99,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return find(environment, tokens, fromIndex, toIndex, meta); } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex, int meta) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex, int meta) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -115,11 +115,11 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class ItemReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; private final int meta; - public ItemReferenceSymbol(IEnvironmentGlobal environment, String name, int meta) { + public ItemReferenceSymbol(IScopeGlobal environment, String name, int meta) { this.environment = environment; this.name = name; this.meta = meta; diff --git a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/LiquidBracketHandler.java b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/LiquidBracketHandler.java index 4df20de3..58fa95b7 100644 --- a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/LiquidBracketHandler.java +++ b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/LiquidBracketHandler.java @@ -9,15 +9,15 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -35,7 +35,7 @@ public static ILiquidStack getLiquid(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("liquid") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -45,7 +45,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -61,10 +61,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class LiquidReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public LiquidReferenceSymbol(IEnvironmentGlobal environment, String name) { + public LiquidReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java index 99ffa4e8..6d0e32de 100644 --- a/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java +++ b/MineTweaker3-MC172-Main/src/main/java/minetweaker/mc172/brackets/OreBracketHandler.java @@ -12,14 +12,14 @@ import minetweaker.annotations.BracketHandler; import static minetweaker.api.minecraft.MineTweakerMC.getOreDict; import minetweaker.api.oredict.IOreDictEntry; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -32,7 +32,7 @@ public static IOreDictEntry getOre(String name) { } @Override - public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { + public IZenSymbol resolve(IScopeGlobal environment, List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) { return find(environment, tokens, 2, tokens.size()); @@ -42,7 +42,7 @@ public IZenSymbol resolve(IEnvironmentGlobal environment, List tokens) { return null; } - private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int startIndex, int endIndex) { + private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -53,10 +53,10 @@ private IZenSymbol find(IEnvironmentGlobal environment, List tokens, int } private class OreReferenceSymbol implements IZenSymbol { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; private final String name; - public OreReferenceSymbol(IEnvironmentGlobal environment, String name) { + public OreReferenceSymbol(IScopeGlobal environment, String name) { this.environment = environment; this.name = name; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java b/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java index 2035011a..d3f071b2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java @@ -6,11 +6,12 @@ package stanhebben.zenscript; +import zenscript.IZenErrorLogger; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.TypeRegistry; -import stanhebben.zenscript.parser.Token; +import stanhebben.zenscript.compiler.IScopeGlobal; +import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.symbolic.TypeRegistry; /** * @@ -23,9 +24,9 @@ public interface IZenCompileEnvironment { public IZenSymbol getDollar(String name); - public IZenSymbol getBracketed(IEnvironmentGlobal environment, List tokens); + public IZenSymbol getBracketed(IScopeGlobal environment, List tokens); - public TypeRegistry getTypeRegistry(); + public TypeRegistry getTypes(); public TypeExpansion getExpansion(String type); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java b/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java index 22108a5f..f69d9c07 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java @@ -9,29 +9,27 @@ import java.util.Map; import org.objectweb.asm.Label; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.annotations.ZenMethodStatic; -import stanhebben.zenscript.annotations.ZenOperator; -import stanhebben.zenscript.annotations.ZenSetter; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.compiler.ITypeRegistry; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenMethodStatic; +import zenscript.annotations.ZenOperator; +import zenscript.annotations.ZenSetter; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.expand.ZenExpandCaster; import stanhebben.zenscript.type.expand.ZenExpandMember; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.type.natives.ZenNativeOperator; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; -import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * Type expansions provide additional members for existing types. They can @@ -75,7 +73,7 @@ public TypeExpansion(String type) { * @param cls expanding class * @param types type registry */ - public void expand(Class cls, ITypeRegistry types) { + public void expand(Class cls, TypeRegistry types) { for (Method method : cls.getMethods()) { String methodName = method.getName(); @@ -177,7 +175,7 @@ public void expand(Class cls, ITypeRegistry types) { * @param environment compilation environment * @param rules target delegate */ - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules) { + public void constructCastingRules(IScopeGlobal environment, ICastingRuleDelegate rules) { for (ZenExpandCaster caster : casters) { caster.constructCastingRules(environment, rules); } @@ -193,7 +191,7 @@ public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDe */ public ZenExpandCaster getCaster( ZenType type, - IEnvironmentGlobal environment) { + IScopeGlobal environment) { for (ZenExpandCaster caster : casters) { if (caster.getTarget().equals(type)) { return caster; @@ -221,7 +219,7 @@ public ZenExpandCaster getCaster( */ public Expression unary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeGlobal environment, Expression value, OperatorType operator) { for (ZenNativeOperator op : unaryOperators) { @@ -246,7 +244,7 @@ public Expression unary( */ public Expression binary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeGlobal environment, Expression left, Expression right, OperatorType operator) { @@ -273,7 +271,7 @@ public Expression binary( */ public Expression ternary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeGlobal environment, Expression first, Expression second, Expression third, @@ -299,7 +297,7 @@ public Expression ternary( */ public IPartialExpression instanceMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeGlobal environment, Expression value, String member) { if (members.containsKey(member)) { @@ -318,7 +316,7 @@ public IPartialExpression instanceMember( * @param member member name * @return resulting static member expression, or null if no such member was available */ - public IPartialExpression staticMember(ZenPosition position, IEnvironmentGlobal environment, String member) { + public IPartialExpression staticMember(ZenPosition position, IScopeGlobal environment, String member) { if (staticMembers.containsKey(member)) { return staticMembers.get(member).instance(position, environment); } @@ -326,7 +324,7 @@ public IPartialExpression staticMember(ZenPosition position, IEnvironmentGlobal return null; } - public void compileAnyCast(ZenType type, MethodOutput output, IEnvironmentGlobal environment, int localValue, int localClass) { + public void compileAnyCast(ZenType type, MethodOutput output, IScopeGlobal environment, int localValue, int localClass) { if (type == null) throw new IllegalArgumentException("type cannot be null"); @@ -365,7 +363,7 @@ public void compileAnyCast(ZenType type, MethodOutput output, IEnvironmentGlobal } } - public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IEnvironmentGlobal environment, int localClass) { + public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IScopeGlobal environment, int localClass) { for (ZenExpandCaster caster : casters) { Label skip = new Label(); output.loadObject(localClass); @@ -393,7 +391,7 @@ public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IEnviro } } - public boolean compileAnyUnary(MethodOutput output, OperatorType type, IEnvironmentMethod environment) { + public boolean compileAnyUnary(MethodOutput output, OperatorType type, IScopeMethod environment) { for (ZenNativeOperator operator : unaryOperators) { if (operator.getOperator() == type) { ZenType returnType = operator.getMethod().getReturnType(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/ZenModule.java b/ZenScript/src/main/java/stanhebben/zenscript/ZenModule.java index 50627ea0..42ac81c1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/ZenModule.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/ZenModule.java @@ -1,5 +1,7 @@ package stanhebben.zenscript; +import zenscript.lexer.ZenTokener; +import zenscript.parser.ParsedFile; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -20,11 +22,11 @@ import stanhebben.zenscript.compiler.ClassNameGenerator; import stanhebben.zenscript.compiler.EnvironmentClass; import stanhebben.zenscript.compiler.EnvironmentGlobal; -import stanhebben.zenscript.compiler.EnvironmentMethod; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunction; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import stanhebben.zenscript.compiler.ScopeMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; +import zenscript.parser.elements.ParsedFunction; +import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementReturn; import stanhebben.zenscript.symbols.SymbolArgument; @@ -52,7 +54,7 @@ public class ZenModule { * @param environmentGlobal global compile environment * @param debug enable debug mode (outputs classes to generated directory) */ - public static void compileScripts(String mainFileName, List scripts, IEnvironmentGlobal environmentGlobal, boolean debug) { + public static void compileScripts(String mainFileName, List scripts, IScopeGlobal environmentGlobal, boolean debug) { ClassWriter clsMain = new ClassWriter(ClassWriter.COMPUTE_FRAMES); clsMain.visitSource(mainFileName, null); @@ -60,7 +62,7 @@ public static void compileScripts(String mainFileName, List scrip MethodOutput mainRun = new MethodOutput(clsMain, Opcodes.ACC_PUBLIC, "run", "()V", null, null); mainRun.start(); - for (ZenParsedFile script : scripts) { + for (ParsedFile script : scripts) { for (Map.Entry function : script.getFunctions().entrySet()) { ParsedFunction fn = function.getValue(); environmentGlobal.putValue(function.getKey(), new SymbolZenStaticMethod( @@ -72,7 +74,7 @@ public static void compileScripts(String mainFileName, List scrip } } - for (ZenParsedFile script : scripts) { + for (ParsedFile script : scripts) { ClassWriter clsScript = new ClassWriter(ClassWriter.COMPUTE_FRAMES); clsScript.visitSource(script.getFileName(), null); EnvironmentClass environmentScript = new EnvironmentClass(clsScript, script.getEnvironment()); @@ -84,7 +86,7 @@ public static void compileScripts(String mainFileName, List scrip String signature = fn.getSignature(); MethodOutput methodOutput = new MethodOutput(clsScript, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, function.getKey(), signature, null, null); - EnvironmentMethod methodEnvironment = new EnvironmentMethod(methodOutput, environmentScript); + ScopeMethod methodEnvironment = new ScopeMethod(methodOutput, environmentScript); List arguments = function.getValue().getArguments(); for (int i = 0; i < arguments.size(); i++) { @@ -117,7 +119,7 @@ public static void compileScripts(String mainFileName, List scrip if (script.getStatements().size() > 0) { MethodOutput scriptOutput = new MethodOutput(clsScript, Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, "__script__", "()V", null, null); - IEnvironmentMethod functionMethod = new EnvironmentMethod(scriptOutput, environmentScript); + IScopeMethod functionMethod = new ScopeMethod(scriptOutput, environmentScript); //scriptOutput.enableDebug(); scriptOutput.start(); for (Statement statement : script.getStatements()) { @@ -194,10 +196,10 @@ public static ZenModule compileScriptFile(File single, IZenCompileEnvironment en FileInputStream input = new FileInputStream(single); Reader reader = new InputStreamReader(new BufferedInputStream(input)); ZenTokener parser = new ZenTokener(reader, environment); - ZenParsedFile file = new ZenParsedFile(filename, className, parser, environmentGlobal); + ParsedFile file = new ParsedFile(filename, className, parser, environmentGlobal); reader.close(); - List files = new ArrayList(); + List files = new ArrayList(); files.add(file); compileScripts(filename, files, environmentGlobal, false); @@ -242,7 +244,7 @@ public static ZenModule compileZip( nameGen ); - List files = new ArrayList(); + List files = new ArrayList(); ZipFile zipFile = new ZipFile(file); Enumeration entries = zipFile.entries(); @@ -255,7 +257,7 @@ public static ZenModule compileZip( Reader reader = new InputStreamReader(new BufferedInputStream(zipFile.getInputStream(entry))); ZenTokener parser = new ZenTokener(reader, environment); - ZenParsedFile pfile = new ZenParsedFile(filename, className, parser, environmentGlobal); + ParsedFile pfile = new ParsedFile(filename, className, parser, environmentGlobal); files.add(pfile); reader.close(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java b/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java deleted file mode 100644 index afa6dfba..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/ZenParsedFile.java +++ /dev/null @@ -1,187 +0,0 @@ -package stanhebben.zenscript; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import static stanhebben.zenscript.ZenTokener.*; -import stanhebben.zenscript.compiler.EnvironmentScript; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.definitions.Import; -import stanhebben.zenscript.definitions.ParsedFunction; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.Token; -import stanhebben.zenscript.statements.Statement; -import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolType; -import stanhebben.zenscript.type.ZenType; - -/** - * Contains a parsed file. - * - * A parsed file contains: - *
    - *
  • A set of imports
  • - *
  • A set of parsed functions
  • - *
  • A set of statuments
  • - *
- * - * This parsed file cannot be executed by itself, but it can be compiled into - * a module, possibly together with other files. - * - * @author Stan Hebben - */ -public class ZenParsedFile { - private final String filename; - private final String classname; - private final List imports; - private final Map functions; - private final List statements; - private final IEnvironmentGlobal environmentScript; - - /** - * Constructs and parses a given file. - * - * @param filename parsed filename - * @param classname output class name - * @param tokener input tokener - * @param environment compile environment - */ - public ZenParsedFile(String filename, String classname, ZenTokener tokener, IEnvironmentGlobal environment) { - this.filename = filename; - this.classname = classname; - - imports = new ArrayList(); - functions = new HashMap(); - statements = new ArrayList(); - environmentScript = new EnvironmentScript(environment); - - tokener.setFile(this); - - while (tokener.peek() != null && tokener.peek().getType() == T_IMPORT) { - Token start = tokener.next(); - - List importName = new ArrayList(); - Token tName = tokener.required(T_ID, "identifier expected"); - importName.add(tName.getValue()); - - while (tokener.optional(T_DOT) != null) { - Token tNamePart = tokener.required(T_ID, "identifier expected"); - importName.add(tNamePart.getValue()); - } - - String rename = null; - if (tokener.optional(T_AS) != null) { - Token tRename = tokener.required(T_ID, "identifier expected"); - rename = tRename.getValue(); - } - - tokener.required(T_SEMICOLON, "; expected"); - - imports.add(new Import(start.getPosition(), importName, rename)); - } - - for (Import imprt : imports) { - List name = imprt.getName(); - IPartialExpression type = null; - - StringBuilder nameSoFar = new StringBuilder(); - - for (String part : name) { - if (type == null) { - nameSoFar.append(part); - type = environment.getValue(part, imprt.getPosition()); - if (type == null) { - environment.error(imprt.getPosition(), "could not find package " + type); - break; - } - } else { - nameSoFar.append('.').append(part); - type = type.getMember(imprt.getPosition(), environment, part); - if (type == null) { - environment.error(imprt.getPosition(), "could not find type or package " + nameSoFar); - break; - } - } - } - - if (type != null) { - IZenSymbol symbol = type.toSymbol(); - if (symbol == null) { - environmentScript.error(imprt.getPosition(), "Not a valid type"); - } else { - environmentScript.putValue(imprt.getRename(), type.toSymbol(), imprt.getPosition()); - } - } else { - environmentScript.putValue(imprt.getRename(), new SymbolType(ZenType.ANY), imprt.getPosition()); - } - } - - while (tokener.hasNext()) { - Token next = tokener.peek(); - if (next.getType() == T_FUNCTION) { - ParsedFunction function = ParsedFunction.parse(tokener, environmentScript); - if (functions.containsKey(function.getName())) { - environment.error(function.getPosition(), "function " + function.getName() + " already exists"); - } - functions.put(function.getName(), function); - } else { - statements.add(Statement.read(tokener, environmentScript, null)); - } - } - } - - public IEnvironmentGlobal getEnvironment() { - return environmentScript; - } - - /** - * Gets the output classname for this file. - * - * @return output classname - */ - public String getClassName() { - return classname; - } - - /** - * Gets the input filename for this file. - * - * @return input filename - */ - public String getFileName() { - return filename; - } - - /** - * Gets the imports list. - * - * @return imports list - */ - public List getImports() { - return imports; - } - - /** - * Gets this file's script statements. - * - * @return script statement list - */ - public List getStatements() { - return statements; - } - - /** - * Gets the functions defined inside this file. - * - * @return script functions - */ - public Map getFunctions() { - return functions; - } - - @Override - public String toString() { - return filename; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentClass.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentClass.java index 3ac0b7c7..6d2fc8fb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentClass.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentClass.java @@ -6,7 +6,6 @@ package stanhebben.zenscript.compiler; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -15,32 +14,25 @@ import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stan */ -public class EnvironmentClass implements IEnvironmentClass { - private final ClassVisitor output; - private final IEnvironmentGlobal global; +public class EnvironmentClass implements IScopeClass { + private final IScopeGlobal global; private final Map local; - public EnvironmentClass(ClassVisitor output, IEnvironmentGlobal global) { - this.output = output; + public EnvironmentClass(IScopeGlobal global) { this.global = global; this.local = new HashMap(); } - - @Override - public ClassVisitor getClassOutput() { - return output; - } - + @Override - public ZenType getType(Type type) { - return global.getType(type); + public TypeRegistry getTypes() { + return global.getTypes(); } @Override @@ -69,11 +61,11 @@ public void putClass(String name, byte[] data) { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { if (local.containsKey(name)) { - return local.get(name).instance(position); + return local.get(name).instance(position, environment); } else { - return global.getValue(name, position); + return global.getValue(name, position, environment); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java index ba7f4ea7..6bdc316b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java @@ -6,23 +6,22 @@ package stanhebben.zenscript.compiler; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; import java.util.Set; -import stanhebben.zenscript.IZenErrorLogger; +import zenscript.IZenErrorLogger; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ -public class EnvironmentGlobal implements IEnvironmentGlobal { +public class EnvironmentGlobal implements IScopeGlobal { private final IZenCompileEnvironment environment; private final IZenErrorLogger errors; private final Map classes; @@ -38,7 +37,7 @@ public EnvironmentGlobal( this.errors = environment.getErrorLogger(); this.classes = classes; this.nameGen = nameGen; - this.types = environment.getTypeRegistry(); + this.types = environment.getTypes(); this.local = new HashMap(); } @@ -47,8 +46,8 @@ public IZenCompileEnvironment getCompileEnvironment() { } @Override - public ZenType getType(Type type) { - return types.getType(type); + public TypeRegistry getTypes() { + return types; } @Override @@ -87,12 +86,12 @@ public IZenCompileEnvironment getEnvironment() { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { if (local.containsKey(name)) { - return local.get(name).instance(position); + return local.get(name).instance(position, environment); } else { - IZenSymbol symbol = environment.getGlobal(name); - return symbol == null ? null : symbol.instance(position); + IZenSymbol symbol = this.environment.getGlobal(name); + return symbol == null ? null : symbol.instance(position, environment); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java index 6ecb5fff..7b3c3fe7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScript.java @@ -6,7 +6,6 @@ package stanhebben.zenscript.compiler; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -14,18 +13,18 @@ import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stan */ -public class EnvironmentScript implements IEnvironmentGlobal { - private final IEnvironmentGlobal parent; +public class EnvironmentScript implements IScopeGlobal { + private final IScopeGlobal parent; private final Map imports; - public EnvironmentScript(IEnvironmentGlobal parent) { + public EnvironmentScript(IScopeGlobal parent) { this.parent = parent; imports = new HashMap(); } @@ -56,13 +55,13 @@ public void putClass(String name, byte[] data) { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { if (imports.containsKey(name)) { IZenSymbol imprt = imports.get(name); if (imprt == null) throw new RuntimeException("How could this happen?"); - return imprt.instance(position); + return imprt.instance(position, environment); } else { - return parent.getValue(name, position); + return parent.getValue(name, position, environment); } } @@ -78,8 +77,8 @@ public void putValue(String name, IZenSymbol value, ZenPosition position) { } @Override - public ZenType getType(Type type) { - return parent.getType(type); + public TypeRegistry getTypes() { + return parent.getTypes(); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentClass.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeClass.java similarity index 64% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentClass.java rename to ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeClass.java index bc7a9c10..3cc4d329 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentClass.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeClass.java @@ -6,12 +6,10 @@ package stanhebben.zenscript.compiler; -import org.objectweb.asm.ClassVisitor; - /** * * @author Stan */ -public interface IEnvironmentClass extends IEnvironmentGlobal { - public ClassVisitor getClassOutput(); +public interface IScopeClass extends IScopeGlobal { + } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentGlobal.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java similarity index 80% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentGlobal.java rename to ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java index e64fc5e5..ab8e4638 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentGlobal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java @@ -7,18 +7,21 @@ package stanhebben.zenscript.compiler; import java.util.Set; -import stanhebben.zenscript.IZenErrorLogger; +import zenscript.IZenErrorLogger; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stan */ -public interface IEnvironmentGlobal extends ITypeRegistry, IZenErrorLogger { +public interface IScopeGlobal extends IZenErrorLogger { + public TypeRegistry getTypes(); + public IZenCompileEnvironment getEnvironment(); public TypeExpansion getExpansion(String name); @@ -33,7 +36,7 @@ public interface IEnvironmentGlobal extends ITypeRegistry, IZenErrorLogger { public void putClass(String name, byte[] data); - public IPartialExpression getValue(String name, ZenPosition position); + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment); public void putValue(String name, IZenSymbol value, ZenPosition position); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeMethod.java similarity index 52% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentMethod.java rename to ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeMethod.java index 158a4a93..a3e4fc28 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IEnvironmentMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeMethod.java @@ -6,15 +6,15 @@ package stanhebben.zenscript.compiler; -import stanhebben.zenscript.symbols.SymbolLocal; -import stanhebben.zenscript.util.MethodOutput; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.type.ZenType; /** * * @author Stan */ -public interface IEnvironmentMethod extends IEnvironmentClass { - public MethodOutput getOutput(); +public interface IScopeMethod extends IScopeClass { + public Statement getControlStatement(String label); - public int getLocal(SymbolLocal variable); + public ZenType getReturnType(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeMethod.java similarity index 65% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentMethod.java rename to ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeMethod.java index 3834bc03..43ec4eab 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeMethod.java @@ -6,58 +6,37 @@ package stanhebben.zenscript.compiler; -import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.objectweb.asm.ClassVisitor; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementSwitch; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ -public class EnvironmentMethod implements IEnvironmentMethod { - private final MethodOutput output; - private final HashMap locals; - private final IEnvironmentClass environment; +public class ScopeMethod implements IScopeMethod { + private final IScopeClass environment; private final Map local; + private final ZenType returnType; - public EnvironmentMethod(MethodOutput output, IEnvironmentClass environment) { - this.output = output; - this.locals = new HashMap(); + public ScopeMethod(IScopeClass environment, ZenType returnType) { this.environment = environment; this.local = new HashMap(); + this.returnType = returnType; } @Override - public MethodOutput getOutput() { - return output; - } - - @Override - public ClassVisitor getClassOutput() { - return environment.getClassOutput(); - } - - @Override - public int getLocal(SymbolLocal variable) { - if (!locals.containsKey(variable)) { - locals.put(variable, output.local(variable.getType().toASMType())); - } - return locals.get(variable); - } - - @Override - public ZenType getType(Type type) { - return environment.getType(type); + public TypeRegistry getTypes() { + return environment.getTypes(); } @Override @@ -96,11 +75,11 @@ public boolean containsClass(String name) { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { if (local.containsKey(name)) { - return local.get(name).instance(position); + return local.get(name).instance(position, environment); } else { - return environment.getValue(name, position); + return environment.getValue(name, position, environment); } } @@ -122,4 +101,14 @@ public Set getClassNames() { public byte[] getClass(String name) { return environment.getClass(name); } + + @Override + public Statement getControlStatement(String label) { + return null; + } + + @Override + public ZenType getReturnType() { + return returnType; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScope.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeStatementBlock.java similarity index 56% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScope.java rename to ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeStatementBlock.java index c6c88539..62c7d6e4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentScope.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/ScopeStatementBlock.java @@ -6,57 +6,60 @@ package stanhebben.zenscript.compiler; -import java.lang.reflect.Type; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Set; -import org.objectweb.asm.ClassVisitor; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; +import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * * @author Stan */ -public class EnvironmentScope implements IEnvironmentMethod { - private final IEnvironmentMethod outer; +public class ScopeStatementBlock implements IScopeMethod { + private final IScopeMethod outer; private final Map local; private final Map locals; - public EnvironmentScope(IEnvironmentMethod outer) { + private final Statement controlStatement; + private final List labels; + + public ScopeStatementBlock(IScopeMethod outer) { this.outer = outer; this.local = new HashMap(); this.locals = new HashMap(); + this.controlStatement = null; + this.labels = null; } - - @Override - public MethodOutput getOutput() { - return outer.getOutput(); - } - - @Override - public int getLocal(SymbolLocal variable) { - if (locals.containsKey(variable)) { - return locals.get(variable); - } else { - return outer.getLocal(variable); - } + + public ScopeStatementBlock(IScopeMethod outer, Statement controlStatement, String label) { + this.outer = outer; + this.local = new HashMap(); + this.locals = new HashMap(); + this.controlStatement = controlStatement; + this.labels = label == null ? null : Collections.singletonList(label); } - - @Override - public ClassVisitor getClassOutput() { - return outer.getClassOutput(); + + public ScopeStatementBlock(IScopeMethod outer, Statement controlStatement, List labels) { + this.outer = outer; + this.local = new HashMap(); + this.locals = new HashMap(); + this.controlStatement = controlStatement; + this.labels = labels; } @Override - public ZenType getType(Type type) { - return outer.getType(type); + public TypeRegistry getTypes() { + return outer.getTypes(); } @Override @@ -85,11 +88,11 @@ public void putClass(String name, byte[] data) { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { if (local.containsKey(name)) { - return local.get(name).instance(position); + return local.get(name).instance(position, environment); } else { - return outer.getValue(name, position); + return outer.getValue(name, position, environment); } } @@ -121,4 +124,20 @@ public Set getClassNames() { public byte[] getClass(String name) { return outer.getClass(name); } + + @Override + public Statement getControlStatement(String label) { + if (label == null && controlStatement != null) { + return controlStatement; + } else if (this.labels != null && this.labels.contains(label)) { + return controlStatement; + } else { + return outer.getControlStatement(label); + } + } + + @Override + public ZenType getReturnType() { + return outer.getReturnType(); + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/TypeRegistry.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/TypeRegistry.java deleted file mode 100644 index 5cc60cd2..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/TypeRegistry.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.compiler; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.type.ZenTypeArrayBasic; -import stanhebben.zenscript.type.ZenTypeArrayList; -import stanhebben.zenscript.type.ZenTypeAssociative; -import stanhebben.zenscript.type.ZenTypeBool; -import stanhebben.zenscript.type.ZenTypeBoolObject; -import stanhebben.zenscript.type.ZenTypeByte; -import stanhebben.zenscript.type.ZenTypeByteObject; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeDoubleObject; -import stanhebben.zenscript.type.ZenTypeFloat; -import stanhebben.zenscript.type.ZenTypeFloatObject; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.type.ZenTypeIntObject; -import stanhebben.zenscript.type.ZenTypeLong; -import stanhebben.zenscript.type.ZenTypeLongObject; -import stanhebben.zenscript.type.ZenTypeNative; -import stanhebben.zenscript.type.ZenTypeShort; -import stanhebben.zenscript.type.ZenTypeShortObject; -import stanhebben.zenscript.type.ZenTypeString; -import stanhebben.zenscript.type.ZenTypeVoid; -import stanhebben.zenscript.value.IAny; - -/** - * - * @author Stanneke - */ -public class TypeRegistry implements ITypeRegistry { - private final Map types; - - public TypeRegistry() { - types = new HashMap(); - - types.put(boolean.class, ZenType.BOOL); - types.put(byte.class, ZenTypeByte.INSTANCE); - types.put(short.class, ZenTypeShort.INSTANCE); - types.put(int.class, ZenTypeInt.INSTANCE); - types.put(long.class, ZenTypeLong.INSTANCE); - types.put(float.class, ZenTypeFloat.INSTANCE); - types.put(double.class, ZenTypeDouble.INSTANCE); - types.put(void.class, ZenTypeVoid.INSTANCE); - - types.put(Boolean.class, ZenTypeBoolObject.INSTANCE); - types.put(Byte.class, ZenTypeByteObject.INSTANCE); - types.put(Short.class, ZenTypeShortObject.INSTANCE); - types.put(Integer.class, ZenTypeIntObject.INSTANCE); - types.put(Long.class, ZenTypeLongObject.INSTANCE); - types.put(Float.class, ZenTypeFloatObject.INSTANCE); - types.put(Double.class, ZenTypeDoubleObject.INSTANCE); - - types.put(IAny.class, ZenTypeAny.INSTANCE); - - types.put(String.class, ZenTypeString.INSTANCE); - types.put(List.class, new ZenTypeArrayBasic(ZenTypeAny.INSTANCE)); - } - - public ZenType getClassType(Class cls) { - if (types.containsKey(cls)) { - return types.get(cls); - } else if (cls.isArray()) { - ZenType result = new ZenTypeArrayBasic(getType(cls.getComponentType())); - types.put(cls, result); - return result; - } else { - ZenTypeNative result = new ZenTypeNative(cls); - types.put(cls, result); - result.complete(this); - return result; - } - } - - @Override - public ZenType getType(Type type) { - if (type instanceof ParameterizedType) { - ParameterizedType pType = (ParameterizedType) type; - Type raw = pType.getRawType(); - if (raw instanceof Class) { - Class rawClass = (Class) raw; - if (List.class.isAssignableFrom(rawClass)) { - return getListType(pType); - } else if (Map.class.isAssignableFrom(rawClass)) { - return getMapType(pType); - } else { - return getClassType(rawClass); - } - } else { - return getType(raw); - } - } else if (type instanceof Class) { - return getClassType((Class) type); - } else { - // TODO: cannot retrieve type - return null; - } - } - - private ZenType getListType(ParameterizedType type) { - if (type.getRawType() == List.class) { - return new ZenTypeArrayList(getType(type.getActualTypeArguments()[0])); - } - - return null; - } - - private ZenType getMapType(ParameterizedType type) { - if (type.getRawType() == Map.class) { - return new ZenTypeAssociative( - getType(type.getActualTypeArguments()[1]), - getType(type.getActualTypeArguments()[0])); - } - - return null; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/definitions/Import.java b/ZenScript/src/main/java/stanhebben/zenscript/definitions/Import.java index 75af0e0d..71cb78be 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/definitions/Import.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/definitions/Import.java @@ -7,7 +7,7 @@ package stanhebben.zenscript.definitions; import java.util.List; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * diff --git a/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunction.java deleted file mode 100644 index 56ef89c1..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunction.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.definitions; - -import static stanhebben.zenscript.ZenTokener.*; - -import java.util.ArrayList; -import java.util.List; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.parser.Token; -import stanhebben.zenscript.statements.Statement; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class ParsedFunction { - public static ParsedFunction parse(ZenTokener parser, IEnvironmentGlobal environment) { - parser.next(); - Token tName = parser.required(ZenTokener.T_ID, "identifier expected"); - - // function (argname [as type], argname [as type], ...) [as type] { ...contents... } - parser.required(T_BROPEN, "( expected"); - - List arguments = new ArrayList(); - if (parser.optional(T_BRCLOSE) == null) { - Token argName = parser.required(T_ID, "identifier expected"); - ZenType type = ZenTypeAny.INSTANCE; - if (parser.optional(T_AS) != null) { - type = ZenType.read(parser, environment); - } - - arguments.add(new ParsedFunctionArgument(argName.getValue(), type)); - - while (parser.optional(T_COMMA) != null) { - Token argName2 = parser.required(T_ID, "identifier expected"); - ZenType type2 = ZenTypeAny.INSTANCE; - if (parser.optional(T_AS) != null) { - type2 = ZenType.read(parser, environment); - } - - arguments.add(new ParsedFunctionArgument(argName2.getValue(), type2)); - } - - parser.required(T_BRCLOSE, ") expected"); - } - - ZenType type = ZenTypeAny.INSTANCE; - if (parser.optional(T_AS) != null) { - type = ZenType.read(parser, environment); - } - - parser.required(T_AOPEN, "{ expected"); - - Statement[] statements; - if (parser.optional(T_ACLOSE) != null) { - statements = new Statement[0]; - } else { - ArrayList statementsAL = new ArrayList(); - - while (parser.optional(T_ACLOSE) == null) { - statementsAL.add(Statement.read(parser, environment, type)); - } - statements = statementsAL.toArray(new Statement[statementsAL.size()]); - } - - return new ParsedFunction(tName.getPosition(), tName.getValue(), arguments, type, statements); - } - - private final ZenPosition position; - private final String name; - private final List arguments; - private final ZenType returnType; - private final Statement[] statements; - - private final String signature; - - private ParsedFunction(ZenPosition position, String name, List arguments, ZenType returnType, Statement[] statements) { - this.position = position; - this.name = name; - this.arguments = arguments; - this.returnType = returnType; - this.statements = statements; - - StringBuilder sig = new StringBuilder(); - sig.append("("); - for (ParsedFunctionArgument argument : arguments) { - sig.append(argument.getType().getSignature()); - } - sig.append(")"); - sig.append(returnType.getSignature()); - signature = sig.toString(); - } - - public ZenPosition getPosition() { - return position; - } - - public String getName() { - return name; - } - - public String getSignature() { - return signature; - } - - public ZenType getReturnType() { - return returnType; - } - - public List getArguments() { - return arguments; - } - - public ZenType[] getArgumentTypes() { - ZenType[] result = new ZenType[arguments.size()]; - for (int i = 0; i < arguments.size(); i++) { - result[i] = arguments.get(i).getType(); - } - return result; - } - - public Statement[] getStatements() { - return statements; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunctionArgument.java b/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunctionArgument.java deleted file mode 100644 index bdf89de9..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/definitions/ParsedFunctionArgument.java +++ /dev/null @@ -1,25 +0,0 @@ -package stanhebben.zenscript.definitions; - -import stanhebben.zenscript.type.ZenType; - -/** - * - * @author Stanneke - */ -public class ParsedFunctionArgument { - private final String name; - private final ZenType type; - - public ParsedFunctionArgument(String name, ZenType type) { - this.name = name; - this.type = type; - } - - public String getName() { - return name; - } - - public ZenType getType() { - return type; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java index f76e7769..31fc03f4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java @@ -1,56 +1,77 @@ package stanhebben.zenscript.expression; +import java.util.List; import org.objectweb.asm.Label; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.parser.expression.ParsedExpression; +import zenscript.parser.expression.ParsedExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.util.ZenPosition; +import zenscript.lexer.ZenTokener; +import zenscript.symbolic.unit.SymbolicFunction; public abstract class Expression implements IPartialExpression { - public static final Expression parse(ZenTokener parser, IEnvironmentMethod environment, ZenType predictedType) { - return ParsedExpression.read(parser, environment) + public static final Expression parse(ZenTokener parser, IScopeMethod environment, ZenType predictedType) { + return ParsedExpression.parse(parser, environment) .compile(environment, predictedType) - .eval(environment); + .eval(); } private final ZenPosition position; + private final IScopeMethod environment; - public Expression(ZenPosition position) { + public Expression(ZenPosition position, IScopeMethod environment) { this.position = position; + this.environment = environment; } public ZenPosition getPosition() { return position; } - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + public IScopeMethod getEnvironment() { + return environment; + } + + public Expression cast(ZenPosition position, ZenType type) { if (getType().equals(type)) { return this; } else { - ICastingRule castingRule = getType().getCastingRule(type, environment); + ICastingRule castingRule = getType().getCastingRule(type); if (castingRule == null) { - environment.error(position, "Cannot cast " + this.getType() + " to " + type); - return new ExpressionInvalid(position, type); + getEnvironment().error(position, "Cannot cast " + this.getType() + " to " + type); + return new ExpressionInvalid(position, getEnvironment(), type); } else { - return new ExpressionAs(position, this, castingRule); + return new ExpressionAs(position, getEnvironment(), this, castingRule); } } } - public abstract void compile(boolean result, IEnvironmentMethod environment); + public abstract void compile(boolean result, MethodOutput output); + + public void compileIf(Label onIf, MethodOutput output) { + if (getType() == getEnvironment().getTypes().BOOL) { + compile(true, output); + output.ifNE(onIf); + } else if (getType().isNullable()) { + compile(true, output); + output.ifNonNull(onIf); + } else { + throw new RuntimeException("cannot compile non-pointer non-boolean value to if condition"); + } + } - public void compileIf(Label onElse, IEnvironmentMethod environment) { - if (getType() == ZenType.BOOL) { - compile(true, environment); - environment.getOutput().ifEQ(onElse); - } else if (getType().isPointer()) { - compile(true, environment); - environment.getOutput().ifNull(onElse); + public void compileElse(Label onElse, MethodOutput output) { + if (getType() == getEnvironment().getTypes().BOOL) { + compile(true, output); + output.ifEQ(onElse); + } else if (getType().isNullable()) { + compile(true, output); + output.ifNull(onElse); } else { throw new RuntimeException("cannot compile non-pointer non-boolean value to if condition"); } @@ -61,39 +82,39 @@ public void compileIf(Label onElse, IEnvironmentMethod environment) { // ######################################### @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { return this; } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { environment.error(position, "not a valid lvalue"); - return new ExpressionInvalid(position, getType()); + return new ExpressionInvalid(position, getEnvironment(), getType()); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return getType().getMember(position, environment, this, name); + public IPartialExpression getMember(ZenPosition position, String name) { + return getType().getMember(position, getEnvironment(), this, name); } @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - return getType().call(position, environment, this, values); + public IZenSymbol toSymbol() { + return null; } @Override - public ZenType[] predictCallTypes(int numArguments) { - return getType().predictCallTypes(numArguments); + public ZenType toType(List genericTypes) { + environment.error(position, "not a valid type"); + return environment.getTypes().ANY; } @Override - public IZenSymbol toSymbol() { - return null; + public List getMethods() { + return getType().getMethods(); } @Override - public ZenType toType(IEnvironmentGlobal environment) { - environment.error(position, "not a valid type"); - return ZenType.ANY; + public IPartialExpression via(SymbolicFunction function) { + return this; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAndAnd.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAndAnd.java index 474f4415..065be118 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAndAnd.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAndAnd.java @@ -1,17 +1,17 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; public class ExpressionAndAnd extends Expression { private final Expression a; private final Expression b; - public ExpressionAndAnd(ZenPosition position, Expression a, Expression b) { - super(position); + public ExpressionAndAnd(ZenPosition position, IScopeMethod environment, Expression a, Expression b) { + super(position, environment); this.a = a; this.b = b; @@ -23,17 +23,15 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { // if not a: return false // if not b: return false // return true - MethodOutput output = environment.getOutput(); - Label skip = new Label(); - a.compile(true, environment); + a.compile(true, output); output.ifEQ(skip); - b.compile(true, environment); + b.compile(true, output); output.ifEQ(skip); output.iConst1(); output.label(skip); @@ -44,10 +42,10 @@ public void compile(boolean result, IEnvironmentMethod environment) { } @Override - public void compileIf(Label onElse, IEnvironmentMethod environment) { - a.compile(true, environment); - environment.getOutput().ifEQ(onElse); - b.compile(true, environment); - environment.getOutput().ifEQ(onElse); + public void compileElse(Label onElse, MethodOutput output) { + a.compile(true, output); + output.ifEQ(onElse); + b.compile(true, output); + output.ifEQ(onElse); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArgument.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArgument.java index 78e8846c..a2292517 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArgument.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArgument.java @@ -6,9 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,8 +19,8 @@ public class ExpressionArgument extends Expression { private final int id; private final ZenType type; - public ExpressionArgument(ZenPosition position, int id, ZenType type) { - super(position); + public ExpressionArgument(ZenPosition position, IScopeMethod environment, int id, ZenType type) { + super(position, environment); this.id = id; this.type = type; @@ -31,7 +32,7 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - environment.getOutput().load(type.toASMType(), id); + public void compile(boolean result, MethodOutput output) { + output.load(type.toASMType(), id); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticBinary.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticBinary.java index 0a779d80..b0a8296f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticBinary.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticBinary.java @@ -6,18 +6,12 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeBool; -import stanhebben.zenscript.type.ZenTypeByte; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeFloat; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.type.ZenTypeLong; -import stanhebben.zenscript.type.ZenTypeShort; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * @@ -28,8 +22,13 @@ public class ExpressionArithmeticBinary extends Expression { private final Expression a; private final Expression b; - public ExpressionArithmeticBinary(ZenPosition position, OperatorType operator, Expression a, Expression b) { - super(position); + public ExpressionArithmeticBinary( + ZenPosition position, + IScopeMethod environment, + OperatorType operator, + Expression a, + Expression b) { + super(position, environment); this.operator = operator; this.a = a; @@ -42,15 +41,16 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - a.compile(result, environment); - b.compile(result, environment); + TypeRegistry types = getEnvironment().getTypes(); + + a.compile(result, output); + b.compile(result, output); ZenType type = a.getType(); - MethodOutput output = environment.getOutput(); - if (type == ZenType.BOOL) { + if (type == types.BOOL) { switch (operator) { case AND: output.iAnd(); @@ -64,7 +64,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { default: throw new RuntimeException("Unsupported operator on " + type + ": " + operator); } - } else if (type == ZenTypeByte.INSTANCE || type == ZenTypeShort.INSTANCE || type == ZenTypeInt.INSTANCE) { + } else if (type == types.BYTE || type == types.SHORT || type == types.INT) { switch (operator) { case ADD: output.iAdd(); @@ -93,7 +93,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { default: throw new RuntimeException("Unsupported operator on " + type + ": " + operator); } - } else if (type == ZenTypeLong.INSTANCE) { + } else if (type == types.LONG) { switch (operator) { case ADD: output.lAdd(); @@ -122,7 +122,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { default: throw new RuntimeException("Unsupported operator on " + type + ": " + operator); } - } else if (type == ZenTypeFloat.INSTANCE) { + } else if (type == types.FLOAT) { switch (operator) { case ADD: output.fAdd(); @@ -142,7 +142,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { default: throw new RuntimeException("Unsupported operator on " + type + ": " + operator); } - } else if (type == ZenTypeDouble.INSTANCE) { + } else if (type == types.DOUBLE) { switch (operator) { case ADD: output.dAdd(); @@ -166,8 +166,8 @@ public void compile(boolean result, IEnvironmentMethod environment) { throw new RuntimeException("Internal compilation error: " + type + " is not a supported arithmetic type"); } } else { - a.compile(result, environment); - b.compile(result, environment); + a.compile(result, output); + b.compile(result, output); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticCompare.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticCompare.java index 9c75cea0..31402f29 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticCompare.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticCompare.java @@ -1,26 +1,20 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeBool; -import stanhebben.zenscript.type.ZenTypeByte; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeFloat; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.type.ZenTypeLong; -import stanhebben.zenscript.type.ZenTypeShort; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.annotations.CompareType; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; public class ExpressionArithmeticCompare extends Expression { private final Expression a; private final Expression b; private final CompareType type; - public ExpressionArithmeticCompare(ZenPosition position, CompareType type, Expression a, Expression b) { - super(position); + public ExpressionArithmeticCompare(ZenPosition position, IScopeMethod method, CompareType type, Expression a, Expression b) { + super(position, method); this.a = a; this.b = b; @@ -29,17 +23,16 @@ public ExpressionArithmeticCompare(ZenPosition position, CompareType type, Expre @Override public ZenType getType() { - return ZenType.BOOL; + return getEnvironment().getTypes().BOOL; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - a.compile(result, environment); - b.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + a.compile(result, output); + b.compile(result, output); if (result) { - MethodOutput output = environment.getOutput(); - if (a.getType() == ZenType.BOOL) { + if (a.getType() == getEnvironment().getTypes().BOOL) { if (type == CompareType.EQ) { Label onThen = new Label(); Label onEnd = new Label(); @@ -61,21 +54,22 @@ public void compile(boolean result, IEnvironmentMethod environment) { output.iConst1(); output.label(onEnd); } else { - environment.error(getPosition(), "this kind of comparison is not supported on bool values"); + getEnvironment().error(getPosition(), "this kind of comparison is not supported on bool values"); } } else { Label onThen = new Label(); Label onEnd = new Label(); - if (a.getType() == ZenTypeLong.INSTANCE) { + TypeRegistry types = getEnvironment().getTypes(); + if (a.getType() == types.LONG) { output.lCmp(); - } else if (a.getType() == ZenTypeFloat.INSTANCE) { + } else if (a.getType() == types.FLOAT) { output.fCmp(); - } else if (a.getType() == ZenTypeDouble.INSTANCE) { + } else if (a.getType() == types.DOUBLE) { output.dCmp(); - } else if (a.getType() == ZenTypeByte.INSTANCE - || a.getType() == ZenTypeShort.INSTANCE - || a.getType() == ZenTypeInt.INSTANCE) { + } else if (a.getType() == types.BYTE + || a.getType() == types.SHORT + || a.getType() == types.INT) { // nothing to do } else { throw new RuntimeException("Unsupported type for arithmetic compare"); @@ -89,7 +83,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { case LT: output.ifICmpLT(onThen); break; case GT: output.ifICmpGT(onThen); break; default: - environment.error(getPosition(), "this kind of comparison is not supported on int values"); + getEnvironment().error(getPosition(), "this kind of comparison is not supported on int values"); return; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticUnary.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticUnary.java index eba3ea72..5105aa09 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticUnary.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArithmeticUnary.java @@ -1,24 +1,22 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeBool; -import stanhebben.zenscript.type.ZenTypeByte; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeFloat; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.type.ZenTypeLong; -import stanhebben.zenscript.type.ZenTypeShort; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.annotations.OperatorType; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; public class ExpressionArithmeticUnary extends Expression { private final Expression base; private final OperatorType operator; - public ExpressionArithmeticUnary(ZenPosition position, OperatorType operator, Expression base) { - super(position); + public ExpressionArithmeticUnary( + ZenPosition position, + IScopeMethod environment, + OperatorType operator, + Expression base) { + super(position, environment); this.base = base; this.operator = operator; @@ -30,18 +28,19 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - base.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + base.compile(result, output); - MethodOutput output = environment.getOutput(); if (result) { + TypeRegistry types = getEnvironment().getTypes(); + ZenType type = base.getType(); - if (type == ZenType.BOOL) { + if (type == types.BOOL) { if (operator == OperatorType.NOT) { output.iNot(); return; } - } else if (type == ZenTypeByte.INSTANCE || type == ZenTypeShort.INSTANCE || type == ZenTypeInt.INSTANCE) { + } else if (type == types.BYTE || type == types.SHORT || type == types.INT) { if (operator == OperatorType.NOT) { output.iNot(); return; @@ -49,7 +48,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { output.iNeg(); return; } - } else if (type == ZenTypeLong.INSTANCE) { + } else if (type == types.LONG) { if (operator == OperatorType.NOT) { output.lNot(); return; @@ -57,12 +56,12 @@ public void compile(boolean result, IEnvironmentMethod environment) { output.lNeg(); return; } - } else if (type == ZenTypeFloat.INSTANCE) { + } else if (type == types.FLOAT) { if (operator == OperatorType.NEG) { output.fNeg(); return; } - } else if (type == ZenTypeDouble.INSTANCE) { + } else if (type == types.DOUBLE) { if (operator == OperatorType.NEG) { output.fNeg(); return; @@ -70,6 +69,6 @@ public void compile(boolean result, IEnvironmentMethod environment) { } } - environment.error(getPosition(), "Invalid operation"); + getEnvironment().error(getPosition(), "Invalid operation"); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArray.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArray.java index a51f0cae..3f86b68d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArray.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArray.java @@ -1,28 +1,27 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; -import stanhebben.zenscript.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRule; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; public class ExpressionArray extends Expression { private final Expression[] contents; private final ZenTypeArrayBasic type; - public ExpressionArray(ZenPosition position, ZenTypeArrayBasic type, Expression... contents) { - super(position); + public ExpressionArray(ZenPosition position, IScopeMethod environment, ZenTypeArrayBasic type, Expression... contents) { + super(position, environment); this.contents = contents; this.type = type; } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + public Expression cast(ZenPosition position, ZenType type) { if (this.type.equals(type)) { return this; } @@ -31,17 +30,17 @@ public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Zen ZenTypeArrayBasic arrayType = (ZenTypeArrayBasic) type; Expression[] newContents = new Expression[contents.length]; for (int i = 0; i < contents.length; i++) { - newContents[i] = contents[i].cast(position, environment, arrayType.getBaseType()); + newContents[i] = contents[i].cast(position, arrayType.getBaseType()); } - return new ExpressionArray(getPosition(), arrayType, newContents); + return new ExpressionArray(getPosition(), getEnvironment(), arrayType, newContents); } else { - ICastingRule castingRule = this.type.getCastingRule(type, environment); + ICastingRule castingRule = this.type.getCastingRule(type); if (castingRule == null) { - environment.error(position, "cannot cast " + this.type + " to " + type); - return new ExpressionInvalid(position, type); + getEnvironment().error(position, "cannot cast " + this.type + " to " + type); + return new ExpressionInvalid(position, getEnvironment(), type); } else { - return new ExpressionAs(position, this, castingRule); + return new ExpressionAs(position, getEnvironment(), this, castingRule); } } } @@ -52,18 +51,17 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { ZenType baseType = type.getBaseType(); Type asmBaseType = type.getBaseType().toASMType(); - MethodOutput output = environment.getOutput(); output.constant(contents.length); output.newArray(asmBaseType); for (int i = 0; i < contents.length; i++) { output.dup(); output.constant(i); - contents[i].cast(this.getPosition(), environment, baseType).compile(result, environment); + contents[i].cast(this.getPosition(), baseType).compile(result, output); output.arrayStore(asmBaseType); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayGet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayGet.java index 60f9fd71..199bede6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayGet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayGet.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArray; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -20,8 +21,8 @@ public class ExpressionArrayGet extends Expression { private final Expression index; private final ZenType baseType; - public ExpressionArrayGet(ZenPosition position, Expression array, Expression index) { - super(position); + public ExpressionArrayGet(ZenPosition position, IScopeMethod environment, Expression array, Expression index) { + super(position, environment); this.array = array; this.index = index; @@ -34,12 +35,12 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - array.compile(result, environment); - index.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + array.compile(result, output); + index.compile(result, output); if (result) { - environment.getOutput().arrayLoad(baseType.toASMType()); + output.arrayLoad(baseType.toASMType()); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayLength.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayLength.java index e77c8d34..4d458e89 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayLength.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArrayLength.java @@ -6,10 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,19 +18,23 @@ public class ExpressionArrayLength extends Expression { private final Expression value; - public ExpressionArrayLength(ZenPosition position, Expression value) { - super(position); + public ExpressionArrayLength(ZenPosition position, IScopeMethod environment, Expression value) { + super(position, environment); this.value = value; } @Override public ZenType getType() { - return ZenTypeInt.INSTANCE; + return getEnvironment().getTypes().INT; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - environment.getOutput().arrayLength(); + public void compile(boolean result, MethodOutput output) { + value.compile(result, output); + + if (result) { + output.arrayLength(); + } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArraySet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArraySet.java index c50f8166..8e11f92e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArraySet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionArraySet.java @@ -6,9 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -19,8 +20,8 @@ public class ExpressionArraySet extends Expression { private final Expression index; private final Expression value; - public ExpressionArraySet(ZenPosition position, Expression array, Expression index, Expression value) { - super(position); + public ExpressionArraySet(ZenPosition position, IScopeMethod environment, Expression array, Expression index, Expression value) { + super(position, environment); this.array = array; this.index = index; @@ -29,17 +30,27 @@ public ExpressionArraySet(ZenPosition position, Expression array, Expression ind @Override public ZenType getType() { - return ZenType.VOID; + return value.getType(); } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - array.compile(result, environment); - index.compile(result, environment); - value.compile(result, environment); - + public void compile(boolean result, MethodOutput output) { if (result) { - environment.getOutput().arrayStore(value.getType().toASMType()); + value.compile(result, output); + array.compile(result, output); + index.compile(result, output); + + if (value.getType().isLarge()) { + output.dup2X2(); + } else { + output.dupX2(); + } + } else { + array.compile(result, output); + index.compile(result, output); + value.compile(result, output); } + + output.arrayStore(value.getType().toASMType()); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAs.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAs.java index 7bb989b8..7918b7c8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAs.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionAs.java @@ -1,48 +1,33 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.util.ZenPosition; public class ExpressionAs extends Expression { private final Expression value; private final ICastingRule castingRule; - public ExpressionAs(ZenPosition position, Expression value, ICastingRule castingRule) { - super(position); + public ExpressionAs(ZenPosition position, IScopeMethod environment, Expression value, ICastingRule castingRule) { + super(position, environment); this.value = value; this.castingRule = castingRule; } - /*@Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { - if (castingRule.getResultingType().equals(type)) { - return this; - } - - ICastingRule newCastingRule = type.getCastingRule(type, environment); - if (newCastingRule == null) { - environment.error(position, "Cannot cast " + getType() + " to " + type); - return new ExpressionInvalid(position, type); - } else { - return new ExpressionAs(position, this, newCastingRule); - } - }*/ - @Override public ZenType getType() { return castingRule.getResultingType(); } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - value.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + value.compile(result, output); if (result) { - castingRule.compile(environment); + castingRule.compile(output); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionBool.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionBool.java index 278a32f2..789132b1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionBool.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionBool.java @@ -7,10 +7,10 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -19,47 +19,32 @@ public class ExpressionBool extends Expression { private final boolean value; - public ExpressionBool(ZenPosition position, boolean value) { - super(position); + public ExpressionBool(ZenPosition position, IScopeMethod environment, boolean value) { + super(position, environment); this.value = value; } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { - if (type == ZenType.BOOL) { - return this; - } else { - return super.cast(position, environment, type); - } - } - - @Override - public Expression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - environment.error(position, "Bool constants do not have members"); - return new ExpressionInvalid(position, ZenType.BOOL); - } @Override public ZenType getType() { - return ZenType.BOOL; + return getEnvironment().getTypes().BOOL; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { if (value) { - environment.getOutput().iConst1(); + output.iConst1(); } else { - environment.getOutput().iConst0(); + output.iConst0(); } } } @Override - public void compileIf(Label onElse, IEnvironmentMethod environment) { + public void compileElse(Label onElse, MethodOutput method) { if (!value) { - environment.getOutput().goTo(onElse); + method.goTo(onElse); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java index 84e2b2a1..939d556f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java @@ -6,13 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -24,13 +22,13 @@ public class ExpressionCallStatic extends Expression { public ExpressionCallStatic( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IJavaMethod method, Expression... arguments) { - super(position); + super(position, environment); this.method = method; - this.arguments = JavaMethod.rematch(position, method, environment, arguments); + this.arguments = arguments; } @Override @@ -39,16 +37,10 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - MethodOutput output = environment.getOutput(); + public void compile(boolean result, MethodOutput output) { + method.invokeStatic(output, arguments); - for (Expression argument : arguments) { - argument.compile(true, environment); - } - - method.invokeStatic(output); - - if (method.getReturnType() != ZenType.VOID && !result) { + if (method.getReturnType() != getEnvironment().getTypes().VOID && !result) { output.pop(method.getReturnType().isLarge()); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java index caf818d4..8f42c3ae 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java @@ -6,12 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -25,16 +24,16 @@ public class ExpressionCallVirtual extends Expression { public ExpressionCallVirtual( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IJavaMethod method, Expression receiver, Expression... arguments) { - super(position); + super(position, environment); this.method = method; this.receiver = receiver; - this.arguments = JavaMethod.rematch(position, method, environment, arguments); + this.arguments = arguments; } @Override @@ -43,16 +42,11 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - receiver.compile(true, environment); + public void compile(boolean result, MethodOutput output) { + method.invokeVirtual(output, receiver, arguments); - for (Expression argument : arguments) { - argument.compile(true, environment); - } - - method.invokeVirtual(environment.getOutput()); - if (method.getReturnType() != ZenType.VOID && !result) { - environment.getOutput().pop(method.getReturnType().isLarge()); + if (method.getReturnType() != getEnvironment().getTypes().VOID && !result) { + output.pop(method.getReturnType().isLarge()); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCompareGeneric.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCompareGeneric.java index 6ff29721..2b7bfe3f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCompareGeneric.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCompareGeneric.java @@ -7,12 +7,11 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeBool; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -22,8 +21,8 @@ public class ExpressionCompareGeneric extends Expression { private final Expression value; // should return a compareTo value (<=>0) private final CompareType type; - public ExpressionCompareGeneric(ZenPosition position, Expression value, CompareType type) { - super(position); + public ExpressionCompareGeneric(ZenPosition position, IScopeMethod environment, Expression value, CompareType type) { + super(position, environment); this.value = value; this.type = type; @@ -31,14 +30,14 @@ public ExpressionCompareGeneric(ZenPosition position, Expression value, CompareT @Override public ZenType getType() { - return ZenType.BOOL; + return getEnvironment().getTypes().BOOL; } @Override - public void compile(boolean result, IEnvironmentMethod environment) {; - value.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + value.compile(result, output); + if (result) { - MethodOutput output = environment.getOutput(); Label lblThen = new Label(); Label lblEnd = new Label(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionConditional.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionConditional.java index 132e4001..b6239977 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionConditional.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionConditional.java @@ -1,17 +1,18 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public class ExpressionConditional extends Expression { private final Expression condition; private final Expression onIf; private final Expression onElse; - public ExpressionConditional(ZenPosition position, Expression condition, Expression onIf, Expression onElse) { - super(position); + public ExpressionConditional(ZenPosition position, IScopeMethod environment, Expression condition, Expression onIf, Expression onElse) { + super(position, environment); this.condition = condition; this.onIf = onIf; @@ -20,19 +21,19 @@ public ExpressionConditional(ZenPosition position, Expression condition, Express @Override public ZenType getType() { - return onIf.getType(); // TODO: improve + return onIf.getType(); // TODO: improve this - merge types } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { Label lblElse = new Label(); Label lblExit = new Label(); - condition.compileIf(lblElse, environment); - onIf.compile(result, environment); - environment.getOutput().goTo(lblExit); - environment.getOutput().label(lblElse); - onElse.compile(result, environment); - environment.getOutput().label(lblExit); + condition.compileElse(lblElse, output); + onIf.compile(result, output); + output.goTo(lblExit); + output.label(lblElse); + onElse.compile(result, output); + output.label(lblExit); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFloat.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFloat.java index b11fe7f4..34d610aa 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFloat.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFloat.java @@ -6,11 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeFloat; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -20,8 +19,8 @@ public class ExpressionFloat extends Expression { private final double value; private final ZenType type; - public ExpressionFloat(ZenPosition position, double value, ZenType type) { - super(position); + public ExpressionFloat(ZenPosition position, IScopeMethod environment, double value, ZenType type) { + super(position, environment); this.value = value; this.type = type; @@ -33,13 +32,13 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (!result) return; - if (type == ZenTypeFloat.INSTANCE) { - environment.getOutput().constant((float) value); - } else if (type == ZenTypeDouble.INSTANCE) { - environment.getOutput().constant(value); + if (type == getEnvironment().getTypes().FLOAT) { + output.constant((float) value); + } else if (type == getEnvironment().getTypes().DOUBLE) { + output.constant(value); } else { throw new RuntimeException("Internal compiler error: source type is not a floating point type"); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java index 4da10b48..9da22b3e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java @@ -6,47 +6,36 @@ package stanhebben.zenscript.expression; -import java.lang.reflect.Method; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; import stanhebben.zenscript.type.ZenTypeFunction; import stanhebben.zenscript.type.ZenTypeNative; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.JavaMethodArgument; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class ExpressionFunction extends Expression { - private final List arguments; - private final ZenType returnType; - private final List statements; - private final ZenTypeFunction functionType; + private final List statements; - public ExpressionFunction(ZenPosition position, List arguments, ZenType returnType, List statements) { - super(position); + public ExpressionFunction(ZenPosition position, IScopeMethod environment, List arguments, ZenType returnType, List statements) { + super(position, environment); System.out.println("Function expression: " + arguments.size() + " arguments"); - this.arguments = arguments; - this.returnType = returnType; this.statements = statements; - ZenType[] argumentTypes = new ZenType[arguments.size()]; - for (int i = 0; i < arguments.size(); i++) { - argumentTypes[i] = arguments.get(i).getType(); - } - functionType = new ZenTypeFunction(returnType, argumentTypes); + functionType = new ZenTypeFunction(environment, returnType, arguments); } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + public Expression cast(ZenPosition position, ZenType type) { if (type instanceof ZenTypeNative) { ZenTypeNative nativeType = (ZenTypeNative) type; Class nativeClass = nativeType.getNativeClass(); @@ -93,7 +82,7 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { // TODO: implement // TODO: make sure the function is compiled properly throw new UnsupportedOperationException("not yet implemented"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java index f03d1da3..aed7e770 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java @@ -6,15 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeByte; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.type.ZenTypeLong; -import stanhebben.zenscript.type.ZenTypeShort; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.TypeRegistry; +import zenscript.util.ZenPosition; /** * @@ -24,15 +20,15 @@ public class ExpressionInt extends Expression { private final long value; private final ZenType type; - public ExpressionInt(ZenPosition position, long value, ZenType type) { - super(position); + public ExpressionInt(ZenPosition position, IScopeMethod environment, long value, ZenType type) { + super(position, environment); this.value = value; this.type = type; } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + public Expression cast(ZenPosition position, ZenType type) { if (type == this.type) return this; switch (type.getNumberType()) { @@ -40,13 +36,13 @@ public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Zen case ZenType.NUM_SHORT: case ZenType.NUM_INT: case ZenType.NUM_LONG: - return new ExpressionInt(getPosition(), value, type); + return new ExpressionInt(getPosition(), getEnvironment(), value, type); case ZenType.NUM_FLOAT: case ZenType.NUM_DOUBLE: - return new ExpressionFloat(getPosition(), value, type); + return new ExpressionFloat(getPosition(), getEnvironment(), value, type); } - return super.cast(position, environment, type); + return super.cast(position, type); } @Override @@ -55,17 +51,18 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (!result) return; - MethodOutput output = environment.getOutput(); - if (type == ZenTypeByte.INSTANCE) { + TypeRegistry types = getEnvironment().getTypes(); + + if (type == types.BYTE) { output.biPush((byte) value); - } else if (type == ZenTypeShort.INSTANCE) { + } else if (type == types.SHORT) { output.siPush((short) value); - } else if (type == ZenTypeInt.INSTANCE) { + } else if (type == types.INT) { output.constant((int) value); - } else if (type == ZenTypeLong.INSTANCE) { + } else if (type == types.LONG) { output.constant(value); } else { throw new RuntimeException("Internal compiler error: int constant type is not an int"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionIntegerRange.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionIntegerRange.java index 7fc03c95..a6f23995 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionIntegerRange.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionIntegerRange.java @@ -4,9 +4,11 @@ */ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.Range; +import zenscript.util.ZenPosition; /** * @@ -16,8 +18,8 @@ public class ExpressionIntegerRange extends Expression { private final Expression from; private final Expression to; - public ExpressionIntegerRange(ZenPosition position, Expression from, Expression to) { - super(position); + public ExpressionIntegerRange(ZenPosition position, IScopeMethod environment, Expression from, Expression to) { + super(position, environment); this.from = from; this.to = to; @@ -25,11 +27,20 @@ public ExpressionIntegerRange(ZenPosition position, Expression from, Expression @Override public ZenType getType() { - return null; // TODO: implement + return getEnvironment().getTypes().RANGE; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - // TODO: implement + public void compile(boolean result, MethodOutput output) { + if (result) { + output.newObject(Range.class); + } + + from.compile(result, output); + to.compile(result, output); + + if (result) { + output.construct(Range.class, int.class, int.class); + } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInvalid.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInvalid.java index 9d25606c..12b7b46c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInvalid.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInvalid.java @@ -7,11 +7,10 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -20,29 +19,24 @@ public class ExpressionInvalid extends Expression { private final ZenType type; - public ExpressionInvalid(ZenPosition position) { - super(position); + public ExpressionInvalid(ZenPosition position, IScopeMethod environment) { + super(position, environment); - type = ZenTypeAny.INSTANCE; + type = environment.getTypes().ANY; } - public ExpressionInvalid(ZenPosition position, ZenType type) { - super(position); + public ExpressionInvalid(ZenPosition position, IScopeMethod environment, ZenType type) { + super(position, environment); this.type = type; // XXX: remove before release //throw new RuntimeException("Constructing invalid expression"); } - - @Override - public Expression getMember(ZenPosition position, IEnvironmentGlobal errors, String name) { - return new ExpressionInvalid(position); - } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal errors, ZenType type) { - return new ExpressionInvalid(position, type); + public Expression cast(ZenPosition position, ZenType type) { + return new ExpressionInvalid(position, getEnvironment(), type); } @Override @@ -51,14 +45,14 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - environment.getOutput().aConstNull(); + type.defaultValue(getPosition(), getEnvironment()).compile(result, output); } } @Override - public void compileIf(Label onElse, IEnvironmentMethod environment) { - environment.getOutput().goTo(onElse); + public void compileElse(Label onElse, MethodOutput output) { + output.goTo(onElse); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java index 48d03a17..d5da51d0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java @@ -11,15 +11,15 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import stanhebben.zenscript.compiler.EnvironmentClass; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.compiler.EnvironmentMethod; -import stanhebben.zenscript.compiler.IEnvironmentClass; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.compiler.ScopeMethod; +import stanhebben.zenscript.compiler.IScopeClass; +import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.symbols.SymbolArgument; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.descriptor; import static stanhebben.zenscript.util.ZenTypeUtil.internal; @@ -55,7 +55,7 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, IScopeMethod environment) { if (!result) return; Method method = interfaceClass.getMethods()[0]; @@ -75,8 +75,8 @@ public void compile(boolean result, IEnvironmentMethod environment) { MethodOutput output = new MethodOutput(cw, Opcodes.ACC_PUBLIC, method.getName(), descriptor(method), null, null); - IEnvironmentClass environmentClass = new EnvironmentClass(cw, environment); - IEnvironmentMethod environmentMethod = new EnvironmentMethod(output, environmentClass); + IScopeClass environmentClass = new EnvironmentClass(cw, environment); + IScopeMethod environmentMethod = new ScopeMethod(output, environmentClass); for (int i = 0; i < arguments.size(); i++) { environmentMethod.putValue( diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java index cb05ca40..3c6ba27c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java @@ -8,13 +8,13 @@ import java.util.ArrayList; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; +import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -28,7 +28,7 @@ public class ExpressionJavaMethodCurled extends Expression { public ExpressionJavaMethodCurled( ZenPosition position, JavaMethod method, - IEnvironmentGlobal environment, + IScopeGlobal environment, Expression receiver) { super(position); @@ -49,7 +49,7 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, IScopeMethod environment) { // TODO: compile } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java index 5e317d5d..f4773e69 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java @@ -8,13 +8,13 @@ import java.util.ArrayList; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; +import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -24,7 +24,7 @@ public class ExpressionJavaMethodStatic extends Expression { private final JavaMethod method; private final ZenType type; - public ExpressionJavaMethodStatic(ZenPosition position, JavaMethod method, IEnvironmentGlobal environment) { + public ExpressionJavaMethodStatic(ZenPosition position, JavaMethod method, IScopeGlobal environment) { super(position); this.method = method; @@ -43,7 +43,7 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, IScopeMethod environment) { // TODO: compile } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListGet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListGet.java new file mode 100644 index 00000000..35e6b274 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListGet.java @@ -0,0 +1,48 @@ +package stanhebben.zenscript.expression; + +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.ZenTypeArrayList; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +/** + * + * @author Stan + */ +public class ExpressionListGet extends Expression { + private final Expression list; + private final Expression index; + private final ZenTypeArrayList type; + + public ExpressionListGet(ZenPosition position, IScopeMethod environment, Expression list, Expression index) { + super(position, environment); + + this.list = list; + this.index = index; + type = (ZenTypeArrayList) list.getType(); + } + + @Override + public void compile(boolean result, MethodOutput output) { + list.compile(result, output); + index.compile(result, output); + + if (result) { + output.invokeInterface(List.class, "get", Object.class, int.class); + output.checkCast(type.getBaseType().toJavaClass()); + } + } + + @Override + public ZenType getType() { + return type.getBaseType(); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListLength.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListLength.java new file mode 100644 index 00000000..897e6656 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListLength.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.expression; + +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ExpressionListLength extends Expression { + private final Expression value; + + public ExpressionListLength(ZenPosition position, IScopeMethod environment, Expression value) { + super(position, environment); + + this.value = value; + } + + @Override + public ZenType getType() { + return getEnvironment().getTypes().INT; + } + + @Override + public void compile(boolean result, MethodOutput output) { + value.compile(result, output); + + if (result) { + output.invokeInterface(List.class, "size", int.class); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListSet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListSet.java new file mode 100644 index 00000000..97b23355 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionListSet.java @@ -0,0 +1,57 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.expression; + +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ExpressionListSet extends Expression { + private final Expression list; + private final Expression index; + private final Expression value; + + public ExpressionListSet(ZenPosition position, IScopeMethod environment, Expression list, Expression index, Expression value) { + super(position, environment); + + this.list = list; + this.index = index; + this.value = value; + } + + @Override + public void compile(boolean result, MethodOutput output) { + if (result) { + value.compile(result, output); + list.compile(result, output); + index.compile(result, output); + + if (value.getType().isLarge()) { + output.dup2X2(); + } else { + output.dupX2(); + } + } else { + list.compile(result, output); + index.compile(result, output); + value.compile(result, output); + } + + output.invokeInterface(List.class, "set", Object.class, int.class, Object.class); + } + + @Override + public ZenType getType() { + return value.getType(); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalGet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalGet.java index 6f9bdd94..e7f59ea1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalGet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalGet.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,8 +19,8 @@ public class ExpressionLocalGet extends Expression { private final SymbolLocal variable; - public ExpressionLocalGet(ZenPosition position, SymbolLocal variable) { - super(position); + public ExpressionLocalGet(ZenPosition position, IScopeMethod environment, SymbolLocal variable) { + super(position, environment); this.variable = variable; } @@ -30,8 +31,8 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - int local = environment.getLocal(variable); - environment.getOutput().load(variable.getType().toASMType(), local); + public void compile(boolean result, MethodOutput output) { + int local = output.getLocal(variable); + output.load(variable.getType().toASMType(), local); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalSet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalSet.java index 3be42595..02ea3ce0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalSet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionLocalSet.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -19,8 +20,8 @@ public class ExpressionLocalSet extends Expression { private final SymbolLocal variable; private final Expression value; - public ExpressionLocalSet(ZenPosition position, SymbolLocal variable, Expression value) { - super(position); + public ExpressionLocalSet(ZenPosition position, IScopeMethod environment, SymbolLocal variable, Expression value) { + super(position, environment); this.variable = variable; this.value = value; @@ -32,13 +33,13 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - int local = environment.getLocal(variable); + public void compile(boolean result, MethodOutput output) { + int local = output.getLocal(variable); - value.compile(true, environment); + value.compile(true, output); if (result) { - environment.getOutput().dup(); + output.dup(); } - environment.getOutput().store(variable.getType().toASMType(), local); + output.store(variable.getType().toASMType(), local); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMap.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMap.java index b2abbd2b..a6bc52b9 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMap.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMap.java @@ -2,14 +2,12 @@ import java.util.HashMap; import java.util.Map; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; import stanhebben.zenscript.type.ZenTypeAssociative; -import stanhebben.zenscript.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRule; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; public class ExpressionMap extends Expression { @@ -17,8 +15,8 @@ public class ExpressionMap extends Expression { private final Expression[] values; private final ZenTypeAssociative type; - public ExpressionMap(ZenPosition position, Expression[] keys, Expression[] values, ZenTypeAssociative type) { - super(position); + public ExpressionMap(ZenPosition position, IScopeMethod environment, Expression[] keys, Expression[] values, ZenTypeAssociative type) { + super(position, environment); this.keys = keys; this.values = values; @@ -32,35 +30,34 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { ZenType keyType = type.getKeyType(); ZenType valueType = type.getValueType(); - MethodOutput output = environment.getOutput(); output.newObject(HashMap.class); output.dup(); output.invokeSpecial(internal(HashMap.class), "", "()V"); for (int i = 0; i < keys.length; i++) { output.dup(); - keys[i].cast(getPosition(), environment, keyType).compile(true, environment); - values[i].cast(getPosition(), environment, valueType).compile(true, environment); + keys[i].cast(getPosition(), keyType).compile(true, output); + values[i].cast(getPosition(), valueType).compile(true, output); output.invokeInterface(internal(Map.class), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); output.pop(); } } else { for (Expression key : keys) { - key.compile(false, environment); + key.compile(false, output); } for (Expression value : values) { - value.compile(false, environment); + value.compile(false, output); } } } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { + public Expression cast(ZenPosition position, ZenType type) { if (this.type.equals(type)) { return this; } @@ -71,18 +68,18 @@ public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Zen Expression[] newValues = new Expression[values.length]; for (int i = 0; i < keys.length; i++) { - newKeys[i] = keys[i].cast(position, environment, associativeType.getKeyType()); - newValues[i] = values[i].cast(position, environment, associativeType.getValueType()); + newKeys[i] = keys[i].cast(position, associativeType.getKeyType()); + newValues[i] = values[i].cast(position, associativeType.getValueType()); } - return new ExpressionMap(getPosition(), newKeys, newValues, associativeType); + return new ExpressionMap(getPosition(), getEnvironment(), newKeys, newValues, associativeType); } else { - ICastingRule castingRule = this.type.getCastingRule(type, environment); + ICastingRule castingRule = this.type.getCastingRule(type); if (castingRule == null) { - environment.error(position, "cannot cast " + this.type + " to " + type); - return new ExpressionInvalid(position, type); + getEnvironment().error(position, "cannot cast " + this.type + " to " + type); + return new ExpressionInvalid(position, getEnvironment(), type); } else { - return new ExpressionAs(position, this, castingRule); + return new ExpressionAs(position, getEnvironment(), this, castingRule); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapContains.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapContains.java index 97ce1f73..49073561 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapContains.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapContains.java @@ -7,10 +7,10 @@ package stanhebben.zenscript.expression; import java.util.Map; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeBool; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; /** @@ -21,8 +21,8 @@ public class ExpressionMapContains extends Expression { private final Expression map; private final Expression key; - public ExpressionMapContains(ZenPosition position, Expression map, Expression key) { - super(position); + public ExpressionMapContains(ZenPosition position, IScopeMethod environment, Expression map, Expression key) { + super(position, environment); this.map = map; this.key = key; @@ -30,16 +30,16 @@ public ExpressionMapContains(ZenPosition position, Expression map, Expression ke @Override public ZenType getType() { - return ZenType.BOOL; + return getEnvironment().getTypes().ANY; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { + map.compile(result, output); + key.compile(result, output); + if (result) { - map.compile(result, environment); - key.compile(result, environment); - - environment.getOutput().invokeInterface(internal(Map.class), "containsKey", "()Ljava/lang/Object;"); + output.invokeInterface(internal(Map.class), "containsKey", "()Ljava/lang/Object;"); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexGet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexGet.java index 757c7f1a..fe4b831a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexGet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexGet.java @@ -7,10 +7,11 @@ package stanhebben.zenscript.expression; import java.util.Map; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeAssociative; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; /** @@ -23,8 +24,8 @@ public class ExpressionMapIndexGet extends Expression { private final ZenType type; - public ExpressionMapIndexGet(ZenPosition position, Expression map, Expression index) { - super(position); + public ExpressionMapIndexGet(ZenPosition position, IScopeMethod environment, Expression map, Expression index) { + super(position, environment); this.map = map; this.index = index; @@ -38,15 +39,16 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - map.compile(result, environment); - index.compile(result, environment); - environment.getOutput().invokeInterface( + map.compile(result, output); + index.compile(result, output); + + output.invokeInterface( internal(Map.class), "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); - environment.getOutput().checkCast(type.toASMType().getInternalName()); + output.checkCast(type.toASMType().getInternalName()); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexSet.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexSet.java index 38182452..6602099a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexSet.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapIndexSet.java @@ -7,10 +7,11 @@ package stanhebben.zenscript.expression; import java.util.Map; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeVoid; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; /** @@ -22,29 +23,42 @@ public class ExpressionMapIndexSet extends Expression { private final Expression index; private final Expression value; - private final ZenType type; - - public ExpressionMapIndexSet(ZenPosition position, Expression map, Expression index, Expression value) { - super(position); + public ExpressionMapIndexSet(ZenPosition position, IScopeMethod environment, Expression map, Expression index, Expression value) { + super(position, environment); this.map = map; this.index = index; this.value = value; - - type = ZenTypeVoid.INSTANCE; } @Override public ZenType getType() { - return type; + return value.getType(); } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - map.compile(result, environment); - index.compile(result, environment); - environment.getOutput().invokeInterface( + value.compile(result, output); + map.compile(result, output); + index.compile(result, output); + + if (value.getType().isLarge()) { + output.dup2X2(); + } else { + output.dupX2(); + } + + output.invokeInterface( + internal(Map.class), + "put", + "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + } else { + map.compile(result, output); + index.compile(result, output); + value.compile(result, output); + + output.invokeInterface( internal(Map.class), "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapSize.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapSize.java index 72d1b4dd..e9c07dac 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapSize.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMapSize.java @@ -7,10 +7,10 @@ package stanhebben.zenscript.expression; import java.util.Map; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeInt; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; /** @@ -20,22 +20,23 @@ public class ExpressionMapSize extends Expression { private final Expression map; - public ExpressionMapSize(ZenPosition position, Expression map) { - super(position); + public ExpressionMapSize(ZenPosition position, IScopeMethod environment, Expression map) { + super(position, environment); this.map = map; } @Override public ZenType getType() { - return ZenTypeInt.INSTANCE; + return getEnvironment().getTypes().INT; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { + map.compile(result, output); + if (result) { - map.compile(true, environment); - environment.getOutput().invokeInterface(internal(Map.class), "size", "()I"); + output.invokeInterface(internal(Map.class), "size", "()I"); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java new file mode 100644 index 00000000..cc8a6802 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java @@ -0,0 +1,50 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ExpressionNew extends Expression { + private final ZenType type; + private final IJavaMethod constructor; + private final Expression[] arguments; + + public ExpressionNew(ZenPosition position, IScopeMethod environment, ZenType type, IJavaMethod constructor, Expression[] arguments) { + super(position, environment); + + this.type = type; + this.constructor = constructor; + this.arguments = arguments; + } + + @Override + public void compile(boolean result, MethodOutput output) { + output.newObject(type.toASMType()); + + if (result) + output.dup(); + + for (Expression argument : arguments) { + argument.compile(true, output); + } + + constructor.invokeSpecial(output); + } + + @Override + public ZenType getType() { + return type; + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNull.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNull.java index f6d72b18..5fa3ba80 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNull.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNull.java @@ -7,45 +7,44 @@ package stanhebben.zenscript.expression; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeNull; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class ExpressionNull extends Expression { - public ExpressionNull(ZenPosition position) { - super(position); + public ExpressionNull(ZenPosition position, IScopeMethod environment) { + super(position, environment); } @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, ZenType type) { - if (type.isPointer()) { + public Expression cast(ZenPosition position, ZenType type) { + if (type.isNullable()) { return this; } else { - environment.error(position, "Cannot convert null to " + type); - return new ExpressionInvalid(position); + getEnvironment().error(position, "Cannot convert null to " + type); + return new ExpressionInvalid(position, getEnvironment()); } } @Override public ZenType getType() { - return ZenTypeNull.INSTANCE; + return getEnvironment().getTypes().NULL; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - environment.getOutput().aConstNull(); + output.aConstNull(); } } @Override - public void compileIf(Label onElse, IEnvironmentMethod environment) { - environment.getOutput().goTo(onElse); + public void compileElse(Label onElse, MethodOutput output) { + output.goTo(onElse); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionOrOr.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionOrOr.java index 4af75223..bc0627d7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionOrOr.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionOrOr.java @@ -1,15 +1,22 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import org.objectweb.asm.Label; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public class ExpressionOrOr extends Expression { private final Expression a; private final Expression b; - public ExpressionOrOr(ZenPosition position, Expression a, Expression b) { - super(position); + public ExpressionOrOr(ZenPosition position, IScopeMethod environment, Expression a, Expression b) { + super(position, environment); + + if (!a.getType().isNullable() && (a.getType() != environment.getTypes().BOOL)) + throw new IllegalArgumentException("invalid || input type: " + a.getType().getName()); + if (!b.getType().isNullable() && (b.getType() != environment.getTypes().BOOL)) + throw new IllegalArgumentException("invalid || input type: " + a.getType().getName()); this.a = a; this.b = b; @@ -21,7 +28,29 @@ public ZenType getType() { } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - // TODO: implement + public void compile(boolean result, MethodOutput output) { + Label lblOther = new Label(); + Label lblAfter = new Label(); + + a.compile(true, output); + + if (a.getType().isNullable()) { + output.dup(); + output.ifNull(lblOther); + } else { + output.dup(); + output.ifEQ(lblOther); + } + + output.goTo(lblAfter); + output.label(lblOther); + output.pop(); + + b.compile(true, output); + output.label(lblAfter); + + if (!result) { + output.pop(); + } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionString.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionString.java index a5ef50e6..1292326b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionString.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionString.java @@ -6,10 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeString; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,21 +18,21 @@ public class ExpressionString extends Expression { private final String value; - public ExpressionString(ZenPosition position, String value) { - super(position); + public ExpressionString(ZenPosition position, IScopeMethod environment, String value) { + super(position, environment); this.value = value; } @Override public ZenType getType() { - return ZenTypeString.INSTANCE; + return getEnvironment().getTypes().STRING; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - environment.getOutput().constant(value); + output.constant(value); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringConcat.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringConcat.java index 5bc92e9e..4fe843fa 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringConcat.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringConcat.java @@ -7,11 +7,10 @@ package stanhebben.zenscript.expression; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeString; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -20,8 +19,8 @@ public class ExpressionStringConcat extends Expression { private final List values; - public ExpressionStringConcat(ZenPosition position, List values) { - super(position); + public ExpressionStringConcat(ZenPosition position, IScopeMethod environment, List values) { + super(position, environment); this.values = values; } @@ -32,14 +31,12 @@ public void add(Expression value) { @Override public ZenType getType() { - return ZenTypeString.INSTANCE; + return getEnvironment().getTypes().STRING; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - MethodOutput output = environment.getOutput(); - // Step 1: construct StringBuilder output.newObject(StringBuilder.class); output.dup(); @@ -47,7 +44,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { // Step 2: concatenate Strings for (Expression value : values) { - value.compile(true, environment); + value.compile(true, output); output.invoke(StringBuilder.class, "append", StringBuilder.class, String.class); } @@ -55,7 +52,7 @@ public void compile(boolean result, IEnvironmentMethod environment) { output.invoke(StringBuilder.class, "toString", String.class); } else { for (Expression value : values) { - value.compile(false, environment); + value.compile(false, output); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringContains.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringContains.java index ad1c1b90..3e6ef06b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringContains.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringContains.java @@ -6,9 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,8 +19,8 @@ public class ExpressionStringContains extends Expression { private final Expression haystack; private final Expression needle; - public ExpressionStringContains(ZenPosition position, Expression haystack, Expression needle) { - super(position); + public ExpressionStringContains(ZenPosition position, IScopeMethod environment, Expression haystack, Expression needle) { + super(position, environment); this.haystack = haystack; this.needle = needle; @@ -27,16 +28,16 @@ public ExpressionStringContains(ZenPosition position, Expression haystack, Expre @Override public ZenType getType() { - return ZenType.STRING; + return getEnvironment().getTypes().BOOL; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - haystack.compile(result, environment); - needle.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + haystack.compile(result, output); + needle.compile(result, output); if (result) { - environment.getOutput().invokeVirtual(String.class, "contains", CharSequence.class); + output.invokeVirtual(String.class, "contains", CharSequence.class); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringIndex.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringIndex.java index c7dd8456..ed6a9c58 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringIndex.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionStringIndex.java @@ -6,9 +6,10 @@ package stanhebben.zenscript.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * @@ -18,8 +19,8 @@ public class ExpressionStringIndex extends Expression { private final Expression source; private final Expression index; - public ExpressionStringIndex(ZenPosition position, Expression source, Expression index) { - super(position); + public ExpressionStringIndex(ZenPosition position, IScopeMethod environment, Expression source, Expression index) { + super(position, environment); this.source = source; this.index = index; @@ -27,19 +28,19 @@ public ExpressionStringIndex(ZenPosition position, Expression source, Expression @Override public ZenType getType() { - return ZenType.STRING; + return getEnvironment().getTypes().STRING; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { - source.compile(result, environment); - index.compile(result, environment); + public void compile(boolean result, MethodOutput output) { + source.compile(result, output); + index.compile(result, output); if (result) { - environment.getOutput().dup(); - environment.getOutput().iConst1(); - environment.getOutput().iAdd(); - environment.getOutput().invokeVirtual(String.class, "substring", String.class, int.class, int.class); + output.dup(); + output.iConst1(); + output.iAdd(); + output.invokeVirtual(String.class, "substring", String.class, int.class, int.class); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java index 73d7a043..ad7aff11 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java @@ -7,11 +7,12 @@ package stanhebben.zenscript.expression.partial; import java.lang.reflect.Field; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.compiler.ITypeRegistry; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.type.generic.TypeCapture; +import zenscript.util.ZenPosition; /** * @@ -20,25 +21,25 @@ public class ExpressionJavaStaticField extends Expression { private final Class cls; private final Field field; - private final ITypeRegistry types; + private final ZenType type; - public ExpressionJavaStaticField(ZenPosition position, Class cls, Field field, ITypeRegistry types) { - super(position); + public ExpressionJavaStaticField(ZenPosition position, IScopeMethod environment, Class cls, Field field) { + super(position, environment); this.cls = cls; this.field = field; - this.types = types; + type = environment.getTypes().getNativeType(position, field.getGenericType(), TypeCapture.EMPTY); } @Override public ZenType getType() { - return types.getType(field.getGenericType()); + return type; } @Override - public void compile(boolean result, IEnvironmentMethod environment) { + public void compile(boolean result, MethodOutput output) { if (result) { - environment.getOutput().getStaticField(cls, field); + output.getStaticField(cls, field); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java index b258cbab..e2c74524 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java @@ -6,31 +6,32 @@ package stanhebben.zenscript.expression.partial; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.List; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.unit.SymbolicFunction; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public interface IPartialExpression { - public Expression eval(IEnvironmentGlobal environment); + public Expression eval(); - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other); + public Expression assign(ZenPosition position, Expression other); - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name); + public IPartialExpression getMember(ZenPosition position, String name); - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values); - - public ZenType[] predictCallTypes(int numArguments); + public List getMethods(); public IZenSymbol toSymbol(); public ZenType getType(); - public ZenType toType(IEnvironmentGlobal environment); + public ZenType toType(List genericTypes); + + public IPartialExpression via(SymbolicFunction function); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialJavaClass.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialJavaClass.java deleted file mode 100644 index 468a727a..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialJavaClass.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.expression.partial; - -import java.lang.reflect.Type; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolJavaClass; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class PartialJavaClass implements IPartialExpression { - private final ZenPosition position; - private final Type cls; - - public PartialJavaClass(ZenPosition position, Type cls) { - this.position = position; - this.cls = cls; - } - - @Override - public Expression eval(IEnvironmentGlobal environment) { - environment.error(position, "cannot use class name as expression"); - return new ExpressionInvalid(position); - } - - @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { - environment.error(position, "cannot assign to a class name"); - return new ExpressionInvalid(position); - } - - @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return environment.getType(cls).getStaticMember(position, environment, name); - } - - @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - environment.error(position, "cannot call a class name"); - return new ExpressionInvalid(position); - } - - @Override - public IZenSymbol toSymbol() { - return new SymbolJavaClass(cls); - } - - @Override - public ZenType getType() { - return null; - } - - @Override - public ZenType toType(IEnvironmentGlobal environment) { - return environment.getType(cls); - } - - @Override - public ZenType[] predictCallTypes(int numArguments) { - return new ZenType[numArguments]; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java index 65d2af0e..46c564e1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java @@ -6,8 +6,8 @@ package stanhebben.zenscript.expression.partial; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionLocalGet; @@ -15,7 +15,9 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.unit.SymbolicFunction; +import zenscript.util.ZenPosition; /** * @@ -23,34 +25,36 @@ */ public class PartialLocal implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final SymbolLocal variable; - public PartialLocal(ZenPosition position, SymbolLocal variable) { + public PartialLocal(ZenPosition position, IScopeMethod environment, SymbolLocal variable) { this.position = position; + this.environment = environment; this.variable = variable; } @Override - public Expression eval(IEnvironmentGlobal environment) { - return new ExpressionLocalGet(position, variable); + public Expression eval() { + return new ExpressionLocalGet(position, environment, variable); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return variable.getType().getMember(position, environment, this, name); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { if (variable.isFinal()) { environment.error(position, "value cannot be changed"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { - return new ExpressionLocalSet(position, variable, other); + return new ExpressionLocalSet(position, environment, variable, other); } } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { return variable.getType().call(position, environment, eval(environment), values); } @@ -58,7 +62,7 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp @Override public ZenType[] predictCallTypes(int numArguments) { return variable.getType().predictCallTypes(numArguments); - } + }*/ @Override public IZenSymbol toSymbol() { @@ -71,8 +75,18 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return variable.getType().getMethods(); + } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return function.addCapture(variable); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java index 93d71414..ca13fef5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java @@ -6,14 +6,16 @@ package stanhebben.zenscript.expression.partial; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.Collections; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolPackage; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.util.ZenPosition; /** * @@ -21,46 +23,48 @@ */ public class PartialPackage implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final SymbolPackage contents; - public PartialPackage(ZenPosition position, SymbolPackage contents) { + public PartialPackage(ZenPosition position, IScopeMethod environment, SymbolPackage contents) { this.position = position; + this.environment = environment; this.contents = contents; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { environment.error(position, "Cannot use package name as expression"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { environment.error(position, "Cannot assign to a package"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { IZenSymbol member = contents.get(name); if (member == null) { environment.error(position, "No such member: " + name); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { - return member.instance(position); + return member.instance(position, environment); } } - @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { + /*@Override + public Expression call(ZenPosition position, Expression... values) { environment.error(position, "cannot call a package"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override public ZenType[] predictCallTypes(int numArguments) { return new ZenType[numArguments]; - } + }*/ @Override public IZenSymbol toSymbol() { @@ -73,8 +77,13 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List types) { environment.error(position, "not a valid type"); - return ZenType.ANY; + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return Collections.EMPTY_LIST; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGenerated.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGenerated.java deleted file mode 100644 index 05fb62f4..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGenerated.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.expression.partial; - -import java.util.Arrays; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionCallStatic; -import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolZenStaticMethod; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stan - */ -public class PartialStaticGenerated implements IPartialExpression { - private final ZenPosition position; - private final String owner; - private final String method; - private final String signature; - private final ZenType[] argumentTypes; - private final ZenType returnType; - - public PartialStaticGenerated(ZenPosition position, String owner, String method, String signature, ZenType[] argumentTypes, ZenType returnType) { - this.position = position; - this.owner = owner; - this.method = method; - this.signature = signature; - this.argumentTypes = argumentTypes; - this.returnType = returnType; - } - - @Override - public Expression eval(IEnvironmentGlobal environment) { - environment.error(position, "cannot use a function as value"); - return new ExpressionInvalid(position); - } - - @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { - environment.error(position, "cannot assign to a function"); - return new ExpressionInvalid(position); - } - - @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - environment.error(position, "functions don't have members"); - return new ExpressionInvalid(position); - } - - @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - if (values.length != argumentTypes.length) { - environment.error(position, "invalid number of arguments"); - return new ExpressionInvalid(position); - } - - Expression[] arguments = new Expression[argumentTypes.length]; - for (int i = 0; i < arguments.length; i++) { - arguments[i] = values[i].cast(position, environment, argumentTypes[i]); - } - - return new ExpressionCallStatic(position, environment, JavaMethod.getStatic(owner, method, returnType, argumentTypes), arguments); - } - - @Override - public ZenType[] predictCallTypes(int numArguments) { - return Arrays.copyOf(argumentTypes, numArguments); - } - - @Override - public IZenSymbol toSymbol() { - return new SymbolZenStaticMethod(owner, method, signature, argumentTypes, returnType); - } - - @Override - public ZenType getType() { - return returnType; - } - - @Override - public ZenType toType(IEnvironmentGlobal environment) { - environment.error(position, "not a valid type"); - return ZenType.ANY; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java index d517e0f0..4730ebb2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java @@ -6,8 +6,8 @@ package stanhebben.zenscript.expression.partial; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionInvalid; @@ -15,7 +15,7 @@ import stanhebben.zenscript.symbols.SymbolJavaStaticGetter; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -23,30 +23,32 @@ */ public class PartialStaticGetter implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final IJavaMethod method; - public PartialStaticGetter(ZenPosition position, IJavaMethod method) { + public PartialStaticGetter(ZenPosition position, IScopeMethod environment, IJavaMethod method) { this.position = position; + this.environment = environment; this.method = method; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { return new ExpressionCallStatic(position, environment, method); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { environment.error(position, "cannot alter this final"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return method.getReturnType().getMember(position, environment, this, name); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { environment.error(position, "value cannot be called"); return new ExpressionInvalid(position); @@ -55,7 +57,7 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp @Override public ZenType[] predictCallTypes(int numArguments) { return new ZenType[numArguments]; - } + }*/ @Override public IZenSymbol toSymbol() { @@ -68,8 +70,13 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return method.getReturnType().getMethods(); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java index 9ca831af..1d3434a1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java @@ -6,17 +6,16 @@ package stanhebben.zenscript.expression.partial; -import java.util.Arrays; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.Collections; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolJavaStaticMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -24,32 +23,34 @@ */ public class PartialStaticMethod implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final IJavaMethod method; - public PartialStaticMethod(ZenPosition position, IJavaMethod method) { + public PartialStaticMethod(ZenPosition position, IScopeMethod environment, IJavaMethod method) { this.position = position; + this.environment = environment; this.method = method; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { environment.error(position, "not a valid expression"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { environment.error(position, "cannot alter this final"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { environment.error(position, "methods have no members"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { if (method.accepts(environment, values)) { return new ExpressionCallStatic(position, environment, method, values); @@ -62,7 +63,7 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp @Override public ZenType[] predictCallTypes(int numArguments) { return Arrays.copyOf(method.getParameterTypes(), numArguments); - } + }*/ @Override public IZenSymbol toSymbol() { @@ -75,7 +76,13 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { - return ZenType.ANY; + public ZenType toType(List genericTypes) { + environment.error(position, "not a valid type"); + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return Collections.singletonList(method); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java index 9ee7061a..d8553ee5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java @@ -6,14 +6,16 @@ package stanhebben.zenscript.expression.partial; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import java.util.Collections; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolType; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.util.ZenPosition; /** * @@ -21,35 +23,37 @@ */ public class PartialType implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final ZenType type; - public PartialType(ZenPosition position, ZenType type) { + public PartialType(ZenPosition position, IScopeMethod environment, ZenType type) { this.position = position; + this.environment = environment; this.type = type; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { environment.error(position, "cannot use type as expression"); - return new ExpressionInvalid(position, type); + return new ExpressionInvalid(position, environment, type); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { environment.error(position, "cannot assign to a type"); - return new ExpressionInvalid(position, type); + return new ExpressionInvalid(position, environment, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return type.getStaticMember(position, environment, name); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { environment.error(position, "cannot call a type"); return new ExpressionInvalid(position, type); - } + }*/ @Override public IZenSymbol toSymbol() { @@ -61,13 +65,18 @@ public ZenType getType() { return null; // not an expression } - @Override + /*@Override public ZenType[] predictCallTypes(int numArguments) { return new ZenType[numArguments]; - } + }*/ @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { return type; } + + @Override + public List getMethods() { + return Collections.EMPTY_LIST; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/ParseException.java b/ZenScript/src/main/java/stanhebben/zenscript/parser/ParseException.java deleted file mode 100644 index 74ffa000..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/ParseException.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is subject to the license.txt file in the main folder - * of this project. - */ - -package stanhebben.zenscript.parser; - -import stanhebben.zenscript.ZenParsedFile; - -/** - * - * @author Stan - */ -public class ParseException extends RuntimeException { - private final ZenParsedFile file; - private final int line; - private final int lineOffset; - - private final Token token; - private final String message; - - public ParseException(Token token, String error) { - super("Error parsing line " + token.getPosition().getLine() + ":" + token.getPosition().getLineOffset() + " - " + error + " (last token: " + token.getValue() + ")"); - - this.file = token.getPosition().getFile(); - this.line = token.getPosition().getLine(); - this.lineOffset = token.getPosition().getLineOffset(); - - this.token = token; - this.message = error; - } - - public ParseException(ZenParsedFile file, int line, int lineOffset, String error) { - this.file = file; - this.line = line; - this.lineOffset = lineOffset; - - token = null; - message = error; - } - - public ZenParsedFile getFile() { - return file; - } - - public int getLine() { - return line; - } - - public int getLineOffset() { - return lineOffset; - } - - public String getExplanation() { - return message; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpression.java b/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpression.java deleted file mode 100644 index e457db14..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpression.java +++ /dev/null @@ -1,465 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.parser.expression; - -import java.util.ArrayList; -import java.util.List; -import stanhebben.zenscript.ZenTokener; -import static stanhebben.zenscript.ZenTokener.*; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; -import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionFloat; -import stanhebben.zenscript.expression.ExpressionInt; -import stanhebben.zenscript.expression.ExpressionString; -import stanhebben.zenscript.parser.ParseException; -import stanhebben.zenscript.parser.Token; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.statements.Statement; -import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.type.ZenTypeDouble; -import stanhebben.zenscript.type.ZenTypeInt; -import static stanhebben.zenscript.util.StringUtil.unescapeString; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public abstract class ParsedExpression { - public static ParsedExpression read(ZenTokener parser, IEnvironmentGlobal environment) { - return readAssignExpression(parser, environment); - } - - private static ParsedExpression readAssignExpression(ZenTokener parser, IEnvironmentGlobal environment) { - Token token = parser.peek(); - if (token == null) { - ZenPosition position = new ZenPosition(parser.getFile(), parser.getLine(), parser.getLineOffset()); - environment.error(position, "unexpected end of file; expression expected"); - return new ParsedExpressionInvalid(position); - } - - ZenPosition position = token.getPosition(); - - ParsedExpression left = readConditionalExpression(position, parser, environment); - - if (parser.peek() == null) { - ZenPosition position2 = new ZenPosition(parser.getFile(), parser.getLine(), parser.getLineOffset()); - environment.error(position2, "unexpected end of file - ; expected"); - return new ParsedExpressionInvalid(position2); - } - - switch (parser.peek().getType()) { - case T_ASSIGN: - parser.next(); - return new ParsedExpressionAssign(position, left, readAssignExpression(parser, environment)); - case T_PLUSASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.ADD); - case T_MINUSASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.SUB); - case T_TILDEASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.CAT); - case T_MULASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.MUL); - case T_DIVASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.DIV); - case T_MODASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.MOD); - case T_ORASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.OR); - case T_ANDASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.AND); - case T_XORASSIGN: - parser.next(); - return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, environment), OperatorType.XOR); - } - - return left; - } - - private static ParsedExpression readConditionalExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readOrOrExpression(position, parser, environment); - - if (parser.optional(T_QUEST) != null) { - ParsedExpression onIf = readOrOrExpression(parser.peek().getPosition(), parser, environment); - parser.required(T_COLON, ": expected"); - ParsedExpression onElse = readConditionalExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionConditional(position, left, onIf, onElse); - } - - return left; - } - - private static ParsedExpression readOrOrExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readAndAndExpression(position, parser, environment); - - while (parser.optional(T_OR2) != null) { - ParsedExpression right = readAndAndExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionOrOr(position, left, right); - } - return left; - } - - private static ParsedExpression readAndAndExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readOrExpression(position, parser, environment); - - while (parser.optional(T_AND2) != null) { - ParsedExpression right = readOrExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionAndAnd(position, left, right); - } - return left; - } - - private static ParsedExpression readOrExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readXorExpression(position, parser, environment); - - while (parser.optional(T_OR) != null) { - ParsedExpression right = readXorExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.OR); - } - return left; - } - - private static ParsedExpression readXorExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readAndExpression(position, parser, environment); - - while (parser.optional(T_XOR) != null) { - ParsedExpression right = readAndExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.XOR); - } - return left; - } - - private static ParsedExpression readAndExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readCompareExpression(position, parser, environment); - - while (parser.optional(T_AND) != null) { - ParsedExpression right = readCompareExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.AND); - } - return left; - } - - private static ParsedExpression readCompareExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readAddExpression(position, parser, environment); - - switch (parser.peek() == null ? -1 : parser.peek().getType()) { - case T_EQ: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.EQ); - } - case T_NOTEQ: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.NE); - } - case T_LT: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.LT); - } - case T_LTEQ: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.LE); - } - case T_GT: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.GT); - } - case T_GTEQ: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionCompare(position, left, right, CompareType.GE); - } - case T_IN: { - parser.next(); - ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, environment); - return new ParsedExpressionBinary(position, left, right, OperatorType.CONTAINS); - } - } - - return left; - } - - private static ParsedExpression readAddExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readMulExpression(position, parser, environment); - - while (true) { - if (parser.optional(T_PLUS) != null) { - ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.ADD); - } else if (parser.optional(T_MINUS) != null) { - ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.SUB); - } else if (parser.optional(T_TILDE) != null) { - ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.CAT); - } else { - break; - } - } - return left; - } - - private static ParsedExpression readMulExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression left = readUnaryExpression(position, parser, environment); - - while (true) { - if (parser.optional(T_MUL) != null) { - ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.MUL); - } else if (parser.optional(T_DIV) != null) { - ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.DIV); - } else if (parser.optional(T_MOD) != null) { - ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, environment); - left = new ParsedExpressionBinary(position, left, right, OperatorType.MOD); - } else { - break; - } - } - - return left; - } - - private static ParsedExpression readUnaryExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - switch (parser.peek().getType()) { - case T_NOT: - parser.next(); - return new ParsedExpressionUnary( - position, - readUnaryExpression(parser.peek().getPosition(), parser, environment), - OperatorType.NOT); - case T_MINUS: - parser.next(); - return new ParsedExpressionUnary( - position, - readUnaryExpression(parser.peek().getPosition(), parser, environment), - OperatorType.NEG); - default: - return readPostfixExpression(position, parser, environment); - } - } - - private static ParsedExpression readPostfixExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - ParsedExpression base = readPrimaryExpression(position, parser, environment); - - while (true) { - if (parser.optional(T_DOT) != null) { - Token indexString = parser.optional(T_ID); - if (indexString != null) { - base = new ParsedExpressionMember(position, base, indexString.getValue()); - } else { - Token indexString2 = parser.optional(T_STRING); - if (indexString2 != null) { - base = new ParsedExpressionMember(position, base, unescapeString(indexString2.getValue())); - } else { - Token last = parser.next(); - throw new ParseException(last, "Invalid expression, last token: " + last.getValue()); - } - } - } else if (parser.optional(T_DOT2) != null) { - //ParsedExpression to = readAssignExpression(parser, errors); - //base = base.range(position, errors, to); - throw new RuntimeException("not yet supported"); - } else if (parser.optional(T_SQBROPEN) != null) { - ParsedExpression index = readAssignExpression(parser, environment); - base = new ParsedExpressionIndex(position, base, index); - parser.required(T_SQBRCLOSE, "] expected"); - } else if (parser.optional(T_BROPEN) != null) { - ArrayList arguments = new ArrayList(); - if (parser.optional(T_BRCLOSE) == null) { - arguments.add(readAssignExpression(parser, environment)); - while (parser.optional(T_COMMA) != null) { - arguments.add(readAssignExpression(parser, environment)); - } - parser.required(T_BRCLOSE, ") expected"); - } - base = new ParsedExpressionCall(position, base, arguments); - } else if (parser.optional(T_AS) != null) { - ZenType type = ZenType.read(parser, environment); - base = new ParsedExpressionCast(position, base, type); - } else { - break; - } - } - - return base; - } - - private static ParsedExpression readPrimaryExpression(ZenPosition position, ZenTokener parser, IEnvironmentGlobal environment) { - switch (parser.peek().getType()) { - case T_INTVALUE: - return new ParsedExpressionValue( - position, - new ExpressionInt(position, Long.parseLong(parser.next().getValue()), ZenTypeInt.INSTANCE)); - case T_FLOATVALUE: - return new ParsedExpressionValue( - position, - new ExpressionFloat(position, Double.parseDouble(parser.next().getValue()), ZenTypeDouble.INSTANCE)); - case T_STRINGVALUE: - return new ParsedExpressionValue( - position, - new ExpressionString(position, unescapeString(parser.next().getValue()))); - /*case T_DOLLAR: { - Expression result = new ExpressionDollar(position); - if (parser.isNext(T_STRINGVALUE)) { - return new ExpressionIndexString(position, result, unescapeString(parser.next().getValue())); - } - return result; - }*/ - case T_ID: - return new ParsedExpressionVariable(position, parser.next().getValue()); - case T_FUNCTION: - // function (argname, argname, ...) { ...contents... } - parser.next(); - parser.required(T_BROPEN, "( expected"); - - List arguments = new ArrayList(); - if (parser.optional(T_BRCLOSE) == null) { - do { - String name = parser.required(T_ID, "identifier expected").getValue(); - ZenType type = ZenTypeAny.INSTANCE; - - if (parser.optional(T_AS) != null) { - type = ZenType.read(parser, environment); - } - - arguments.add(new ParsedFunctionArgument(name, type)); - } while (parser.optional(T_COMMA) != null); - - parser.required(T_BRCLOSE, ") expected"); - } - - ZenType returnType = ZenTypeAny.INSTANCE; - if (parser.optional(T_AS) != null) { - returnType = ZenType.read(parser, environment); - } - - parser.required(T_AOPEN, "{ expected"); - - List statements = new ArrayList(); - if (parser.optional(T_ACLOSE) == null) { - while (parser.optional(T_ACLOSE) == null) { - statements.add(Statement.read(parser, environment, returnType)); - } - } - - return new ParsedExpressionFunction(position, returnType, arguments, statements); - case T_LT: { - Token start = parser.next(); - List tokens = new ArrayList(); - Token next = parser.next(); - while (next.getType() != ZenTokener.T_GT) { - tokens.add(next); - next = parser.next(); - } - IZenSymbol resolved = parser.getEnvironment().getBracketed(environment, tokens); - if (resolved == null) { - StringBuilder builder = new StringBuilder(); - builder.append('<'); - Token last = null; - for (Token token : tokens) { - if (last != null) builder.append(' '); - builder.append(token.getValue()); - last = token; - } - builder.append('>'); - - parser.getEnvironment().getErrorLogger().error(start.getPosition(), "Could not resolve " + builder.toString()); - return new ParsedExpressionInvalid(start.getPosition()); - } else { - return new ParsedExpressionValue( - start.getPosition(), - parser.getEnvironment().getBracketed(environment, tokens).instance(start.getPosition())); - } - } - case T_SQBROPEN: { - parser.next(); - List contents = new ArrayList(); - if (parser.optional(T_SQBRCLOSE) == null) { - while (parser.optional(T_SQBRCLOSE) == null) { - contents.add(readAssignExpression(parser, environment)); - if (parser.optional(T_COMMA) == null) { - parser.required(T_SQBRCLOSE, "] or , expected"); - break; - } - } - } - return new ParsedExpressionArray(position, contents); - } - case T_AOPEN: { - parser.next(); - - List keys = new ArrayList(); - List values = new ArrayList(); - if (parser.optional(T_ACLOSE) == null) { - while (parser.optional(T_ACLOSE) == null) { - keys.add(readAssignExpression(parser, environment)); - parser.required(T_COLON, ": expected"); - values.add(readAssignExpression(parser, environment)); - - if (parser.optional(T_COMMA) == null) { - parser.required(T_ACLOSE, "} or , expected"); - break; - } - } - - return new ParsedExpressionMap(position, keys, values); - } - } - case T_TRUE: - parser.next(); - return new ParsedExpressionBool(position, true); - case T_FALSE: - parser.next(); - return new ParsedExpressionBool(position, false); - case T_NULL: - parser.next(); - return new ParsedExpressionNull(position); - case T_BROPEN: - parser.next(); - ParsedExpression result = readAssignExpression(parser, environment); - parser.required(T_BRCLOSE, ") expected"); - return result; - default: - Token last = parser.next(); - throw new ParseException(last, "Invalid expression, last token: " + last.getValue()); - } - } - private final ZenPosition position; - - public ParsedExpression(ZenPosition position) { - this.position = position; - } - - public ZenPosition getPosition() { - return position; - } - - public abstract IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType); - - public Expression compileKey(IEnvironmentMethod environment, ZenType predictedType) { - return compile(environment, predictedType).eval(environment); - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCall.java b/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCall.java deleted file mode 100644 index 21bd8759..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCall.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.parser.expression; - -import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class ParsedExpressionCall extends ParsedExpression { - private final ParsedExpression receiver; - private final List arguments; - - public ParsedExpressionCall(ZenPosition position, ParsedExpression receiver, List arguments) { - super(position); - - this.receiver = receiver; - this.arguments = arguments; - } - - @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - IPartialExpression cReceiver = receiver.compile(environment, null); - ZenType[] predictedTypes = cReceiver.predictCallTypes(arguments.size()); - - Expression[] cArguments = new Expression[arguments.size()]; - for (int i = 0; i < cArguments.length; i++) { - IPartialExpression cArgument = arguments.get(i).compile(environment, predictedTypes[i]); - cArguments[i] = cArgument.eval(environment); - } - - return cReceiver.call(getPosition(), environment, cArguments); - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionFunction.java deleted file mode 100644 index 4183170f..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionFunction.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.parser.expression; - -import java.lang.reflect.Method; -import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; -import stanhebben.zenscript.expression.ExpressionFunction; -import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.expression.ExpressionJavaLambda; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.statements.Statement; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.type.ZenTypeNative; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stan - */ -public class ParsedExpressionFunction extends ParsedExpression { - private final ZenType returnType; - private final List arguments; - private final List statements; - - public ParsedExpressionFunction(ZenPosition position, ZenType returnType, List arguments, List statements) { - super(position); - - this.returnType = returnType; - this.arguments = arguments; - this.statements = statements; - } - - @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - if (predictedType != null && predictedType instanceof ZenTypeNative) { - System.out.println("Known predicted function type: " + predictedType); - - ZenTypeNative nativeType = (ZenTypeNative) predictedType; - Class nativeClass = nativeType.getNativeClass(); - if (nativeClass.isInterface() && nativeClass.getMethods().length == 1) { - // functional interface - Method method = nativeClass.getMethods()[0]; - if (returnType != ZenTypeAny.INSTANCE - && !returnType.canCastImplicit(environment.getType(method.getGenericReturnType()), environment)) { - environment.error(getPosition(), "return type not compatible"); - return new ExpressionInvalid(getPosition()); - } - if (arguments.size() != method.getParameterTypes().length) { - environment.error(getPosition(), "number of arguments incorrect"); - return new ExpressionInvalid(getPosition()); - } - for (int i = 0; i < arguments.size(); i++) { - ZenType argumentType = environment.getType(method.getGenericParameterTypes()[i]); - if (arguments.get(i).getType() != ZenTypeAny.INSTANCE - && !argumentType.canCastImplicit(arguments.get(i).getType(), environment)) { - environment.error(getPosition(), "argument " + i + " doesn't match"); - return new ExpressionInvalid(getPosition()); - } - } - - return new ExpressionJavaLambda( - getPosition(), - nativeClass, - arguments, - statements, - environment.getType(nativeClass)); - } else { - environment.error(getPosition(), predictedType.toString() + " is not a functional interface"); - return new ExpressionInvalid(getPosition()); - } - } else { - System.out.println("No known predicted type"); - return new ExpressionFunction(getPosition(), arguments, returnType, statements); - } - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/Statement.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/Statement.java index c1415e4d..114d8300 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/Statement.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/Statement.java @@ -1,110 +1,29 @@ package stanhebben.zenscript.statements; -import java.util.ArrayList; -import java.util.List; - -import stanhebben.zenscript.ZenTokener; -import static stanhebben.zenscript.ZenTokener.*; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.parser.Token; -import stanhebben.zenscript.parser.expression.ParsedExpression; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public abstract class Statement { - public static Statement read(ZenTokener parser, IEnvironmentGlobal environment, ZenType returnType) { - Token next = parser.peek(); - switch (next.getType()) { - case T_AOPEN: { - Token t = parser.next(); - ArrayList statements = new ArrayList(); - while (parser.optional(T_ACLOSE) == null) { - statements.add(read(parser, environment, returnType)); - } - return new StatementBlock(t.getPosition(), statements); - } - case T_RETURN: { - parser.next(); - ParsedExpression expression = ParsedExpression.read(parser, environment); - parser.required(T_SEMICOLON, "; expected"); - return new StatementReturn(next.getPosition(), returnType, expression); - } - case T_VAR: - case T_VAL: { - Token start = parser.next(); - String name = parser.required(T_ID, "identifier expected").getValue(); - - ZenType type = null; - ParsedExpression initializer = null; - if (parser.optional(T_AS) != null) { - type = ZenType.read(parser, environment); - } - if (parser.optional(T_ASSIGN) != null) { - initializer = ParsedExpression.read(parser, environment); - } - parser.required(T_SEMICOLON, "; expected"); - return new StatementVar(start.getPosition(), name, type, initializer, start.getType() == T_VAL); - } - case T_IF: { - Token t = parser.next(); - ParsedExpression expression = ParsedExpression.read(parser, environment); - Statement onIf = read(parser, environment, returnType); - Statement onElse = null; - if (parser.optional(T_ELSE) != null) { - onElse = read(parser, environment, returnType); - } - return new StatementIf(t.getPosition(), expression, onIf, onElse); - } - case T_FOR: { - Token t = parser.next(); - String name = parser.required(T_ID, "identifier expected").getValue(); - List names = new ArrayList(); - names.add(name); - - while (parser.optional(T_COMMA) != null) { - names.add(parser.required(T_ID, "identifier expected").getValue()); - } - - parser.required(T_IN, "in expected"); - ParsedExpression source = ParsedExpression.read(parser, environment); - Statement content = read(parser, environment, null); - return new StatementForeach( - t.getPosition(), - names.toArray(new String[names.size()]), - source, - content); - } - case T_VERSION: { - Token t = parser.next(); - parser.required(T_INTVALUE, "integer expected"); - - //MineTweaker.logWarning("The version statement is no longer necessary"); - - parser.required(T_SEMICOLON, "; expected"); - return new StatementNull(t.getPosition()); - } - } - - ZenPosition position = parser.peek().getPosition(); - StatementExpression result = new StatementExpression(position, ParsedExpression.read(parser, environment)); - parser.required(T_SEMICOLON, "; expected"); - return result; - } - private final ZenPosition position; + private final IScopeMethod scope; - public Statement(ZenPosition position) { + public Statement(ZenPosition position, IScopeMethod environment) { this.position = position; + this.scope = environment; } public ZenPosition getPosition() { return position; } + public IScopeMethod getScope() { + return scope; + } + public boolean isReturn() { return false; } - public abstract void compile(IEnvironmentMethod environment); + public abstract void compile(MethodOutput output); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBlock.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBlock.java index babcd58d..d6867bf7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBlock.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBlock.java @@ -1,24 +1,23 @@ package stanhebben.zenscript.statements; import java.util.List; -import stanhebben.zenscript.compiler.EnvironmentScope; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public class StatementBlock extends Statement { private final List statements; - public StatementBlock(ZenPosition position, List statements) { - super(position); + public StatementBlock(ZenPosition position, IScopeMethod environment, List statements) { + super(position, environment); this.statements = statements; } @Override - public void compile(IEnvironmentMethod environment) { - IEnvironmentMethod local = new EnvironmentScope(environment); + public void compile(MethodOutput output) { for (Statement statement : statements) { - statement.compile(local); + statement.compile(output); if (statement.isReturn()) { return; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBreak.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBreak.java new file mode 100644 index 00000000..b222f9df --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementBreak.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.statements; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.util.MethodOutput; +import stanhebben.zenscript.util.MethodOutput.ControlLabels; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class StatementBreak extends Statement { + private final Statement target; + + public StatementBreak(ZenPosition position, IScopeMethod scope, Statement target) { + super(position, scope); + + this.target = target; + } + + @Override + public void compile(MethodOutput output) { + ControlLabels labels = output.getControlLabels(target); + if (labels == null) { + throw new AssertionError("missing control labels"); + } + if (labels.breakLabel == null) { + getScope().error(getPosition(), "cannot break this kind of statement"); + } else { + output.goTo(labels.breakLabel); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementContinue.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementContinue.java new file mode 100644 index 00000000..1a2fd8d0 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementContinue.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.statements; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.util.MethodOutput; +import stanhebben.zenscript.util.MethodOutput.ControlLabels; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class StatementContinue extends Statement { + private final Statement target; + + public StatementContinue(ZenPosition position, IScopeMethod scope, Statement target) { + super(position, scope); + + this.target = target; + } + + @Override + public void compile(MethodOutput output) { + ControlLabels controls = output.getControlLabels(target); + if (controls == null) { + throw new AssertionError("control labels missing"); + } + if (controls.continueLabel == null) { + getScope().error(getPosition(), "cannot continue this kind of statement"); + } else { + output.goTo(controls.continueLabel); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementDoWhile.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementDoWhile.java new file mode 100644 index 00000000..ca14569b --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementDoWhile.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.statements; + +import org.objectweb.asm.Label; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class StatementDoWhile extends Statement { + private final Expression condition; + private Statement contents; + + public StatementDoWhile(ZenPosition position, IScopeMethod environment, Expression condition) { + super(position, environment); + + this.condition = condition; + } + + public void setContents(Statement contents) { + this.contents = contents; + } + + @Override + public void compile(MethodOutput output) { + Label lblRepeat = new Label(); + Label lblContinue = new Label(); + Label lblBreak = new Label(); + output.putControlLabels(this, new MethodOutput.ControlLabels(lblContinue, lblBreak)); + + output.label(lblRepeat); + contents.compile(output); + output.label(lblContinue); + condition.compileIf(lblRepeat, output); + output.label(lblBreak); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementExpression.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementExpression.java index 4ab8bee9..1b883118 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementExpression.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementExpression.java @@ -1,23 +1,22 @@ package stanhebben.zenscript.statements; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.parser.expression.ParsedExpression; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public class StatementExpression extends Statement { - private final ParsedExpression expression; + private final Expression expression; - public StatementExpression(ZenPosition position, ParsedExpression expression) { - super(position); + public StatementExpression(ZenPosition position, IScopeMethod environment, Expression expression) { + super(position, environment); this.expression = expression; } @Override - public void compile(IEnvironmentMethod environment) { - environment.getOutput().position(getPosition()); - expression.compile(environment, null) - .eval(environment) - .compile(false, environment); + public void compile(MethodOutput output) { + output.position(getPosition()); + expression.compile(false, output); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementForeach.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementForeach.java index 33edfda0..9f66bf9d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementForeach.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementForeach.java @@ -1,61 +1,54 @@ package stanhebben.zenscript.statements; +import java.util.List; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.EnvironmentScope; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.parser.expression.ParsedExpression; import stanhebben.zenscript.type.IZenIterator; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; public class StatementForeach extends Statement { - private final String[] varnames; - private final ParsedExpression list; - private final Statement body; + private final List variables; + private final Expression list; + private final IZenIterator iterator; + private Statement body; - public StatementForeach(ZenPosition position, String[] varnames, ParsedExpression list, Statement body) { - super(position); + public StatementForeach(ZenPosition position, IScopeMethod environment, List variables, Expression list, IZenIterator iterator) { + super(position, environment); - this.varnames = varnames; + this.variables = variables; this.list = list; + this.iterator = iterator; + } + + public void setBody(Statement body) { this.body = body; } @Override - public void compile(IEnvironmentMethod environment) { - Expression cList = list.compile(environment, ZenType.ANYARRAY).eval(environment); - ZenType listType = cList.getType(); - - IZenIterator iterator = listType.makeIterator(varnames.length, environment); - if (iterator == null) { - environment.error(getPosition(), "No iterator with " + varnames.length + " variables"); - return; - } - - MethodOutput methodOutput = environment.getOutput(); - environment.getOutput().position(getPosition()); + public void compile(MethodOutput output) { + output.position(getPosition()); - IEnvironmentMethod local = new EnvironmentScope(environment); - int[] localVariables = new int[varnames.length]; + int[] localVariables = new int[variables.size()]; for (int i = 0; i < localVariables.length; i++) { - SymbolLocal localVar = new SymbolLocal(iterator.getType(i), true); - local.putValue(varnames[i], localVar, getPosition()); - localVariables[i] = local.getLocal(localVar); + localVariables[i] = output.getLocal(variables.get(i)); } - cList.compile(true, environment); - iterator.compileStart(localVariables); + list.compile(true, output); + iterator.compileStart(output, localVariables); - Label repeat = new Label(); - Label exit = new Label(); + Label lblRepeat = new Label(); + Label lblBreak = new Label(); + output.putControlLabels(this, new MethodOutput.ControlLabels(lblRepeat, lblBreak)); - methodOutput.label(repeat); - iterator.compilePreIterate(localVariables, exit); - body.compile(local); - iterator.compilePostIterate(localVariables, exit, repeat); - methodOutput.label(exit); + output.label(lblRepeat); + iterator.compilePreIterate(output, localVariables, lblBreak); + body.compile(output); + iterator.compilePostIterate(output, localVariables, lblBreak, lblRepeat); + output.label(lblBreak); + iterator.compileEnd(output); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementIf.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementIf.java index 94c42e76..99ecddb3 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementIf.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementIf.java @@ -1,20 +1,19 @@ package stanhebben.zenscript.statements; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.parser.expression.ParsedExpression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; public class StatementIf extends Statement { - private final ParsedExpression condition; + private final Expression condition; private final Statement onThen; private final Statement onElse; - public StatementIf(ZenPosition position, ParsedExpression condition, Statement onThen, Statement onElse) { - super(position); + public StatementIf(ZenPosition position, IScopeMethod environment, Expression condition, Statement onThen, Statement onElse) { + super(position, environment); this.condition = condition; this.onThen = onThen; @@ -22,31 +21,25 @@ public StatementIf(ZenPosition position, ParsedExpression condition, Statement o } @Override - public void compile(IEnvironmentMethod environment) { - environment.getOutput().position(getPosition()); + public void compile(MethodOutput output) { + output.position(getPosition()); - Expression cCondition = condition.compile(environment, ZenType.BOOL) - .eval(environment) - .cast(getPosition(), environment, ZenType.BOOL); + ZenType expressionType = condition.getType(); + if (expressionType != getScope().getTypes().BOOL) + throw new RuntimeException("condition is not a boolean"); - ZenType expressionType = cCondition.getType(); - if (expressionType.canCastImplicit(ZenType.BOOL, environment)) { - Label labelEnd = new Label(); - Label labelElse = onElse == null ? labelEnd : new Label(); - - cCondition.compileIf(labelElse, environment); - onThen.compile(environment); - - MethodOutput methodOutput = environment.getOutput(); - if (onElse != null) { - methodOutput.goTo(labelEnd); - methodOutput.label(labelElse); - onElse.compile(environment); - } - - methodOutput.label(labelEnd); - } else { - environment.error(getPosition(), "condition is not a boolean"); + Label labelEnd = new Label(); + Label labelElse = onElse == null ? labelEnd : new Label(); + + condition.compileElse(labelElse, output); + onThen.compile(output); + + if (onElse != null) { + output.goTo(labelEnd); + output.label(labelElse); + onElse.compile(output); } + + output.label(labelEnd); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementNull.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementNull.java index c6e6eb32..fa8b1ee7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementNull.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementNull.java @@ -6,20 +6,21 @@ package stanhebben.zenscript.statements; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class StatementNull extends Statement { - public StatementNull(ZenPosition position) { - super(position); + public StatementNull(ZenPosition position, IScopeMethod environment) { + super(position, environment); } @Override - public void compile(IEnvironmentMethod environment) { + public void compile(MethodOutput output) { } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementReturn.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementReturn.java index a56aacbb..08aa5310 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementReturn.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementReturn.java @@ -1,24 +1,21 @@ package stanhebben.zenscript.statements; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.parser.expression.ParsedExpression; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public class StatementReturn extends Statement { - private final ZenType returnType; - private final ParsedExpression expression; + private final Expression expression; - public StatementReturn(ZenPosition position, ZenType returnType, ParsedExpression expression) { - super(position); + public StatementReturn(ZenPosition position, IScopeMethod environment, Expression expression) { + super(position, environment); - this.returnType = returnType; this.expression = expression; } - public ParsedExpression getExpression() { + public Expression getExpression() { return expression; } @@ -28,17 +25,16 @@ public boolean isReturn() { } @Override - public void compile(IEnvironmentMethod environment) { - environment.getOutput().position(getPosition()); + public void compile(MethodOutput output) { + output.position(getPosition()); if (expression == null) { - environment.getOutput().ret(); + output.ret(); } else { - Expression cExpression = expression.compile(environment, returnType).eval(environment); - cExpression.compile(true, environment); + expression.compile(true, output); - Type returnType = cExpression.getType().toASMType(); - environment.getOutput().returnType(returnType); + Type asmReturnType = expression.getType().toASMType(); + output.returnType(asmReturnType); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java new file mode 100644 index 00000000..987d8077 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java @@ -0,0 +1,63 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.statements; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.objectweb.asm.Label; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class StatementSwitch extends Statement { + private final Expression value; + private final List contents = new ArrayList(); + private final List caseValues = new ArrayList(); + private final List caseLabels = new ArrayList(); + private int defaultLabel = -1; + + public StatementSwitch(ZenPosition position, IScopeMethod scope, Expression value) { + super(position, scope); + + this.value = value; + } + + public void onCase(ZenPosition position, int value) { + if (caseValues.contains(value)) { + getScope().error(position, "this value already has a case assigned"); + } else { + caseValues.add(value); + caseLabels.add(contents.size()); + } + } + + public void onDefault(ZenPosition position) { + if (defaultLabel >= 0) { + getScope().error(position, "default case already defined"); + } else { + defaultLabel = contents.size(); + } + } + + public void onStatement(Statement statement) { + contents.add(statement); + } + + @Override + public void compile(MethodOutput output) { + Label lblBreak = new Label(); + // TODO + blabla + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementVar.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementVar.java index 8974e615..5b789158 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementVar.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementVar.java @@ -6,48 +6,34 @@ package stanhebben.zenscript.statements; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.parser.expression.ParsedExpression; import stanhebben.zenscript.symbols.SymbolLocal; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeAny; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class StatementVar extends Statement { - private final String name; - private final ZenType type; - private final ParsedExpression initializer; - private final boolean isFinal; + private final SymbolLocal symbol; + private final Expression initializer; - public StatementVar(ZenPosition position, String name, ZenType type, ParsedExpression initializer, boolean isFinal) { - super(position); + public StatementVar(ZenPosition position, IScopeMethod method, SymbolLocal symbol, Expression initializer) { + super(position, method); - this.name = name; - this.type = type; + this.symbol = symbol; this.initializer = initializer; - this.isFinal = isFinal; } @Override - public void compile(IEnvironmentMethod environment) { - environment.getOutput().position(getPosition()); + public void compile(MethodOutput output) { + output.position(getPosition()); - Expression cInitializer = initializer == null - ? null - : initializer.compile(environment, type).eval(environment); - ZenType cType = type == null ? (cInitializer == null ? ZenTypeAny.INSTANCE : cInitializer.getType()) : type; - SymbolLocal symbol = new SymbolLocal(cType, isFinal); - - environment.putValue(name, symbol, getPosition()); - - if (cInitializer != null) { - cInitializer.compile(true, environment); - environment.getOutput().store(symbol.getType().toASMType(), environment.getLocal(symbol)); + if (initializer != null) { + initializer.compile(true, output); + output.store(symbol.getType().toASMType(), output.getLocal(symbol)); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementWhile.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementWhile.java new file mode 100644 index 00000000..2a43881e --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementWhile.java @@ -0,0 +1,44 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.statements; + +import org.objectweb.asm.Label; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class StatementWhile extends Statement { + private final Expression condition; + private Statement contents; + + public StatementWhile(ZenPosition position, IScopeMethod scope, Expression condition) { + super(position, scope); + + this.condition = condition; + } + + public void setContents(Statement contents) { + this.contents = contents; + } + + @Override + public void compile(MethodOutput output) { + Label lblRepeat = new Label(); + Label lblBreak = new Label(); + + output.label(lblRepeat); + condition.compileElse(lblBreak, output); + contents.compile(output); + output.goTo(lblRepeat); + output.label(lblBreak); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/IZenSymbol.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/IZenSymbol.java index 576d7925..fcf5becd 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/IZenSymbol.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/IZenSymbol.java @@ -6,13 +6,14 @@ package stanhebben.zenscript.symbols; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public interface IZenSymbol { - public IPartialExpression instance(ZenPosition position); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolArgument.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolArgument.java deleted file mode 100644 index f7d7bd55..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolArgument.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.symbols; - -import stanhebben.zenscript.expression.ExpressionArgument; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class SymbolArgument implements IZenSymbol { - private final int id; - private final ZenType type; - - public SymbolArgument(int id, ZenType type) { - this.id = id; - this.type = type; - } - - @Override - public IPartialExpression instance(ZenPosition position) { - return new ExpressionArgument(position, id, type); - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaClass.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaClass.java deleted file mode 100644 index 516210b2..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaClass.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.symbols; - -import java.lang.reflect.Type; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.expression.partial.PartialJavaClass; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class SymbolJavaClass implements IZenSymbol { - private final Type cls; - - public SymbolJavaClass(Type cls) { - this.cls = cls; - } - - @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialJavaClass(position, cls); - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java index 14f2a5e4..8fbe6d13 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java @@ -7,10 +7,10 @@ package stanhebben.zenscript.symbols; import java.lang.reflect.Field; -import stanhebben.zenscript.compiler.ITypeRegistry; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.ExpressionJavaStaticField; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -19,16 +19,14 @@ public class SymbolJavaStaticField implements IZenSymbol { private final Class cls; private final Field field; - private final ITypeRegistry types; - public SymbolJavaStaticField(Class cls, Field field, ITypeRegistry types) { + public SymbolJavaStaticField(Class cls, Field field) { this.cls = cls; this.field = field; - this.types = types; } @Override - public IPartialExpression instance(ZenPosition position) { - return new ExpressionJavaStaticField(position, cls, field, types); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new ExpressionJavaStaticField(position, environment, cls, field); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java index e213f556..f3748243 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.symbols; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialStaticGetter; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -23,7 +24,7 @@ public SymbolJavaStaticGetter(IJavaMethod method) { } @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialStaticGetter(position, method); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new PartialStaticGetter(position, environment, method); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java index 7e9285d3..f4155fbf 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.symbols; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialStaticMethod; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -23,7 +24,7 @@ public SymbolJavaStaticMethod(IJavaMethod method) { } @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialStaticMethod(position, method); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new PartialStaticMethod(position, environment, method); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolLocal.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolLocal.java index 39d37e36..8b559608 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolLocal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolLocal.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.symbols; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -33,7 +34,7 @@ public boolean isFinal() { } @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialLocal(position, this); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new PartialLocal(position, environment, this); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java index 1ed79a4e..50d35ee2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolPackage.java @@ -9,11 +9,12 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Map; -import stanhebben.zenscript.IZenErrorLogger; +import stanhebben.zenscript.compiler.IScopeMethod; +import zenscript.IZenErrorLogger; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialPackage; -import stanhebben.zenscript.util.StringUtil; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.StringUtil; +import zenscript.util.ZenPosition; /** * @@ -77,7 +78,7 @@ public void put(String name, IZenSymbol symbol, IZenErrorLogger errors) { } @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialPackage(position, this); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new PartialPackage(position, environment, this); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolType.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolType.java index aa1ded6f..a37d7128 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolType.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolType.java @@ -6,10 +6,11 @@ package stanhebben.zenscript.symbols; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialType; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -23,7 +24,7 @@ public SymbolType(ZenType type) { } @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialType(position, type); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new PartialType(position, environment, type); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolZenStaticMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolZenStaticMethod.java deleted file mode 100644 index 2ebf0588..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolZenStaticMethod.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.symbols; - -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.expression.partial.PartialStaticGenerated; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; - -/** - * - * @author Stan - */ -public class SymbolZenStaticMethod implements IZenSymbol { - private final String className; - private final String methodName; - private final String signature; - private final ZenType[] argumentTypes; - private final ZenType returnType; - - public SymbolZenStaticMethod(String className, String methodName, String signature, ZenType[] argumentTypes, ZenType returnType) { - this.className = className; - this.methodName = methodName; - this.signature = signature; - this.argumentTypes = argumentTypes; - this.returnType = returnType; - } - - @Override - public IPartialExpression instance(ZenPosition position) { - return new PartialStaticGenerated(position, className, methodName, signature, argumentTypes, returnType); - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/IZenIterator.java b/ZenScript/src/main/java/stanhebben/zenscript/type/IZenIterator.java index ab78fbd5..a569a54c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/IZenIterator.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/IZenIterator.java @@ -7,6 +7,7 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Label; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -16,33 +17,38 @@ public interface IZenIterator { /** * Compiles the header before the iteration. The list is on the top of the stack. * + * @param output * @param locals */ - public void compileStart(int[] locals); + public void compileStart(MethodOutput output, int[] locals); /** * Compiles the start of an iteration. The stack is unmodified from the * previous iteration and from the iteration start. * + * @param output * @param locals * @param exit */ - public void compilePreIterate(int[] locals, Label exit); + public void compilePreIterate(MethodOutput output, int[] locals, Label exit); /** * Compiles the end of an iteration. The stack is the same as it was after * preIterate. * + * @param output * @param locals * @param exit * @param repeat */ - public void compilePostIterate(int[] locals, Label exit, Label repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat); /** * Compiles the end of the whole iteration. + * + * @param output */ - public void compileEnd(); + public void compileEnd(MethodOutput output); public ZenType getType(int i); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java index 8a1beead..746f4b9d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java @@ -1,51 +1,26 @@ package stanhebben.zenscript.type; -import java.io.IOException; +import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.ZenTokener; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.parser.ParseException; -import stanhebben.zenscript.parser.Token; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleDelegateMap; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.type.casting.CastingRuleDelegateMap; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.expand.ZenExpandCaster; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; -import static stanhebben.zenscript.util.ZenTypeUtil.EMPTY_REGISTRY; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.util.ZenPosition; public abstract class ZenType { - public static final ZenTypeAny ANY = ZenTypeAny.INSTANCE; - public static final ZenTypeBool BOOL = new ZenTypeBool(); - public static final ZenTypeBoolObject BOOLOBJECT = ZenTypeBoolObject.INSTANCE; - public static final ZenTypeByte BYTE = ZenTypeByte.INSTANCE; - public static final ZenTypeByteObject BYTEOBJECT = ZenTypeByteObject.INSTANCE; - public static final ZenTypeShort SHORT = ZenTypeShort.INSTANCE; - public static final ZenTypeShortObject SHORTOBJECT = ZenTypeShortObject.INSTANCE; - public static final ZenTypeInt INT = ZenTypeInt.INSTANCE; - public static final ZenTypeIntObject INTOBJECT = ZenTypeIntObject.INSTANCE; - public static final ZenTypeLong LONG = ZenTypeLong.INSTANCE; - public static final ZenTypeLongObject LONGOBJECT = ZenTypeLongObject.INSTANCE; - public static final ZenTypeFloat FLOAT = ZenTypeFloat.INSTANCE; - public static final ZenTypeFloatObject FLOATOBJECT = ZenTypeFloatObject.INSTANCE; - public static final ZenTypeDouble DOUBLE = ZenTypeDouble.INSTANCE; - public static final ZenTypeDoubleObject DOUBLEOBJECT = ZenTypeDoubleObject.INSTANCE; - public static final ZenTypeString STRING = ZenTypeString.INSTANCE; - public static final ZenTypeVoid VOID = ZenTypeVoid.INSTANCE; - public static final ZenTypeNull NULL = ZenTypeNull.INSTANCE; - - public static final ZenTypeArrayBasic ANYARRAY = new ZenTypeArrayBasic(ANY); - public static final ZenTypeAssociative ANYMAP = new ZenTypeAssociative(ANY, ANY); - public static final int NUM_BYTE = 1; public static final int NUM_SHORT = 2; public static final int NUM_INT = 3; @@ -53,154 +28,29 @@ public abstract class ZenType { public static final int NUM_FLOAT = 5; public static final int NUM_DOUBLE = 6; - protected static final IJavaMethod BOOL_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "valueOf", boolean.class); - protected static final IJavaMethod BYTE_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Byte.class, "valueOf", byte.class); - protected static final IJavaMethod SHORT_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Short.class, "valueOf", short.class); - protected static final IJavaMethod INT_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "valueOf", int.class); - protected static final IJavaMethod LONG_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Long.class, "valueOf", long.class); - protected static final IJavaMethod FLOAT_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Float.class, "valueOf", float.class); - protected static final IJavaMethod DOUBLE_VALUEOF = JavaMethod.get(EMPTY_REGISTRY, Double.class, "valueOf", double.class); - - protected static final IJavaMethod BOOL_VALUE = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "booleanValue"); - protected static final IJavaMethod BYTE_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "byteValue"); - protected static final IJavaMethod SHORT_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "shortValue"); - protected static final IJavaMethod INT_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "intValue"); - protected static final IJavaMethod LONG_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "longValue"); - protected static final IJavaMethod FLOAT_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "floatValue"); - protected static final IJavaMethod DOUBLE_VALUE = JavaMethod.get(EMPTY_REGISTRY, Number.class, "doubleValue"); - - protected static final IJavaMethod BOOL_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "toString", boolean.class); - protected static final IJavaMethod BYTE_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Byte.class, "toString", byte.class); - protected static final IJavaMethod SHORT_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Short.class, "toString", short.class); - protected static final IJavaMethod INT_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "toString", int.class); - protected static final IJavaMethod LONG_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Long.class, "toString", long.class); - protected static final IJavaMethod FLOAT_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Float.class, "toString", float.class); - protected static final IJavaMethod DOUBLE_TOSTRING_STATIC = JavaMethod.get(EMPTY_REGISTRY, Double.class, "toString", double.class); - - protected static final IJavaMethod BOOL_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "toString"); - protected static final IJavaMethod BYTE_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Byte.class, "toString"); - protected static final IJavaMethod SHORT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Short.class, "toString"); - protected static final IJavaMethod INT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "toString"); - protected static final IJavaMethod LONG_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Long.class, "toString"); - protected static final IJavaMethod FLOAT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Float.class, "toString"); - protected static final IJavaMethod DOUBLE_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Double.class, "toString"); - - protected static final IJavaMethod PARSE_BOOL = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "parseBoolean", String.class); - protected static final IJavaMethod PARSE_BYTE = JavaMethod.get(EMPTY_REGISTRY, Byte.class, "parseByte", String.class); - protected static final IJavaMethod PARSE_SHORT = JavaMethod.get(EMPTY_REGISTRY, Short.class, "parseShort", String.class); - protected static final IJavaMethod PARSE_INT = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "parseInt", String.class); - protected static final IJavaMethod PARSE_LONG = JavaMethod.get(EMPTY_REGISTRY, Long.class, "parseLong", String.class); - protected static final IJavaMethod PARSE_FLOAT = JavaMethod.get(EMPTY_REGISTRY, Float.class, "parseFloat", String.class); - protected static final IJavaMethod PARSE_DOUBLE = JavaMethod.get(EMPTY_REGISTRY, Double.class, "parseDouble", String.class); - - protected static final IJavaMethod PARSE_BOOL_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Boolean.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_BYTE_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Byte.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_SHORT_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Short.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_INT_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_LONG_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Long.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_FLOAT_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Float.class, "valueOf", String.class); - protected static final IJavaMethod PARSE_DOUBLE_OBJECT = JavaMethod.get(EMPTY_REGISTRY, Double.class, "valueOf", String.class); - - public static ZenType parse(String type, IEnvironmentGlobal environment) { - try { - ZenTokener parser = new ZenTokener(type, environment.getEnvironment()); - return read(parser, environment); - } catch (IOException ex) { - return null; - } - } + private final IScopeGlobal environment; + private Map castingRules = null; - public static ZenType read(ZenTokener parser, IEnvironmentGlobal environment) { - ZenType base; - - Token next = parser.next(); - switch (next.getType()) { - case ZenTokener.T_ANY: - base = ANY; - break; - case ZenTokener.T_VOID: - base = VOID; - break; - case ZenTokener.T_BOOL: - base = BOOL; - break; - case ZenTokener.T_BYTE: - base = BYTE; - break; - case ZenTokener.T_SHORT: - base = SHORT; - break; - case ZenTokener.T_INT: - base = INT; - break; - case ZenTokener.T_LONG: - base = LONG; - break; - case ZenTokener.T_FLOAT: - base = FLOAT; - break; - case ZenTokener.T_DOUBLE: - base = DOUBLE; - break; - case ZenTokener.T_STRING: - base = STRING; - break; - case ZenTokener.T_ID: - base = ANY; - - StringBuilder typeName = new StringBuilder(); - typeName.append(next.getValue()); - IPartialExpression partial = environment.getValue(next.getValue(), next.getPosition()); - while (parser.optional(ZenTokener.T_DOT) != null) { - typeName.append('.'); - - Token member = parser.required(ZenTokener.T_ID, "identifier expected"); - typeName.append(member.getValue()); - partial = partial.getMember(member.getPosition(), environment, member.getValue()); - - if (partial == null) { - environment.error(member.getPosition(), "could not find type " + typeName); - break; - } - } - if (partial != null) { - base = partial.toType(environment); - } - break; - default: - throw new ParseException(next, "Unknown type: " + next.getValue()); - } - - while (parser.optional(ZenTokener.T_SQBROPEN) != null) { - if (parser.optional(ZenTokener.T_SQBRCLOSE) == null) { - base = new ZenTypeAssociative(base, read(parser, environment)); - parser.required(ZenTokener.T_SQBRCLOSE, "] expected"); - } else { - base = new ZenTypeArrayBasic(base); - } - } - - return base; + public ZenType(IScopeGlobal environment) { + this.environment = environment; } - private Map castingRules = null; - public abstract Expression unary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression value, OperatorType operator); public abstract Expression binary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression left, Expression right, OperatorType operator); public abstract Expression trinary( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression first, Expression second, Expression third, @@ -208,56 +58,44 @@ public abstract Expression trinary( public abstract Expression compare( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression left, Expression right, CompareType type); public abstract IPartialExpression getMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IPartialExpression value, String name); public abstract IPartialExpression getStaticMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, String name); - public abstract Expression call( - ZenPosition position, - IEnvironmentGlobal environment, - Expression receiver, - Expression... arguments); - - public ZenType[] predictCallTypes(int numArguments) { - return new ZenType[numArguments]; - } - - public abstract void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters); + public abstract void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters); - public abstract IZenIterator makeIterator( - int numValues, - IEnvironmentMethod methodOutput); + public abstract IZenIterator makeIterator(int numValues); - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { + public ICastingRule getCastingRule(ZenType type) { if (castingRules == null) { castingRules = new HashMap(); - constructCastingRules(environment, new CastingRuleDelegateMap(this, castingRules), true); + constructCastingRules(new CastingRuleDelegateMap(this, castingRules), true); } return castingRules.get(type); } - public final boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { + public final boolean canCastImplicit(ZenType type) { if (equals(type)) return true; - return getCastingRule(type, environment) != null; + return getCastingRule(type) != null; } - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return canCastImplicit(type, environment); + public boolean canCastExplicit(ZenType type) { + return canCastImplicit(type); } public abstract Class toJavaClass(); @@ -268,36 +106,48 @@ public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { public abstract String getSignature(); - public abstract boolean isPointer(); + public abstract boolean isNullable(); - public final void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (equals(type)) - return; - - ICastingRule castingRule = getCastingRule(type, environment); - if (castingRule != null) { - castingRule.compile(environment); - } else { - throw new RuntimeException("Cannot cast " + getName() + " to " + type.getName()); - } - } - - public abstract String getAnyClassName(IEnvironmentGlobal environment); + public abstract String getAnyClassName(); public abstract String getName(); - public abstract Expression defaultValue(ZenPosition position); + public abstract Expression defaultValue(ZenPosition position, IScopeMethod environment); public boolean isLarge() { return false; } + public abstract ZenType nullable(); + + public abstract ZenType nonNull(); + + public List getMethods() { + return Collections.EMPTY_LIST; + } + + public List getConstructors() { + return Collections.EMPTY_LIST; + } + + public IJavaMethod getFunction() { + return null; + } + @Override public String toString() { return getName(); } - protected Expression unaryExpansion(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + protected IScopeGlobal getEnvironment() { + return environment; + } + + protected Expression unaryExpansion( + ZenPosition position, + IScopeMethod environment, + Expression value, + OperatorType operator) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { return expansion.unary(position, environment, value, operator); @@ -307,7 +157,7 @@ protected Expression unaryExpansion(ZenPosition position, IEnvironmentGlobal env protected Expression binaryExpansion( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression left, Expression right, OperatorType operator) { @@ -320,7 +170,7 @@ protected Expression binaryExpansion( protected Expression trinaryExpansion( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, Expression first, Expression second, Expression third, @@ -332,7 +182,11 @@ protected Expression trinaryExpansion( return null; } - protected IPartialExpression memberExpansion(ZenPosition position, IEnvironmentGlobal environment, Expression value, String member) { + protected IPartialExpression memberExpansion( + ZenPosition position, + IScopeMethod environment, + Expression value, + String member) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { return expansion.instanceMember(position, environment, value, member); @@ -340,7 +194,10 @@ protected IPartialExpression memberExpansion(ZenPosition position, IEnvironmentG return null; } - protected IPartialExpression staticMemberExpansion(ZenPosition position, IEnvironmentGlobal environment, String member) { + protected IPartialExpression staticMemberExpansion( + ZenPosition position, + IScopeMethod environment, + String member) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { return expansion.staticMember(position, environment, member); @@ -348,29 +205,14 @@ protected IPartialExpression staticMemberExpansion(ZenPosition position, IEnviro return null; } - protected void constructExpansionCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules) { + protected void constructExpansionCastingRules(ICastingRuleDelegate rules) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { expansion.constructCastingRules(environment, rules); } } - protected Expression castExpansion( - ZenPosition position, - IEnvironmentGlobal environment, - Expression value, - ZenType toType) { - TypeExpansion expansion = environment.getExpansion(getName()); - if (expansion != null) { - ZenExpandCaster caster = expansion.getCaster(toType, environment); - if (caster != null) { - return caster.cast(position, environment, value); - } - } - return null; - } - - protected boolean canCastExpansion(IEnvironmentGlobal environment, ZenType toType) { + protected boolean canCastExpansion(ZenType toType) { String name = getName(); TypeExpansion expansion = environment.getExpansion(name); if (expansion != null) { @@ -383,19 +225,6 @@ protected boolean canCastExpansion(IEnvironmentGlobal environment, ZenType toTyp return false; } - protected boolean compileCastExpansion(ZenPosition position, IEnvironmentMethod environment, ZenType toType) { - TypeExpansion expansion = environment.getExpansion(getName()); - if (expansion != null) { - ZenExpandCaster caster = expansion.getCaster(toType, environment); - if (caster != null) { - caster.compile(environment.getOutput()); - return true; - } - } - - return false; - } - @Override public int hashCode() { return getName().hashCode(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java index 0a15feb9..ac70aea0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java @@ -1,95 +1,100 @@ package stanhebben.zenscript.type; +import java.util.Collections; +import java.util.List; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionCallVirtual; import stanhebben.zenscript.expression.ExpressionCompareGeneric; import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.expression.ExpressionCallVirtual; import stanhebben.zenscript.expression.ExpressionNull; +import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingAnyBool; -import stanhebben.zenscript.type.casting.CastingAnyByte; -import stanhebben.zenscript.type.casting.CastingAnyDouble; -import stanhebben.zenscript.type.casting.CastingAnyFloat; -import stanhebben.zenscript.type.casting.CastingAnyInt; -import stanhebben.zenscript.type.casting.CastingAnyLong; -import stanhebben.zenscript.type.casting.CastingAnyShort; -import stanhebben.zenscript.type.casting.CastingAnyString; -import stanhebben.zenscript.type.casting.CastingRuleAnyAs; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; -import static stanhebben.zenscript.util.AnyClassWriter.*; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.JavaMethodPrefixed; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleAnyAs; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.unit.SymbolicFunction; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class ZenTypeAny extends ZenType { - public static final ZenTypeAny INSTANCE = new ZenTypeAny(); + private List methods = null; - private ZenTypeAny() {} + public ZenTypeAny(IScopeGlobal environment) { + super(environment); + } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - environment.error(position, "any values not yet supported"); - return new ExpressionInvalid(position); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return new AnyMember(position, environment, value.eval(), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - environment.error(position, "any values not yet supported"); - return new ExpressionInvalid(position); + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + environment.error(position, "any values don't have static members"); + return new ExpressionInvalid(position, environment); } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return null; // TODO: handle iteration on any-values + public IZenIterator makeIterator(int numValues) { + // TODO: implement iteration on any values + throw new UnsupportedOperationException("iteration on any values is not yet supported"); } @Override - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { - ICastingRule base = super.getCastingRule(type, environment); + public ICastingRule getCastingRule(ZenType type) { + ICastingRule base = super.getCastingRule(type); if (base == null) { - return new CastingRuleAnyAs(type); + return new CastingRuleAnyAs(type, getEnvironment().getTypes()); } else { return base; } } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BOOL, CastingAnyBool.INSTANCE); - rules.registerCastingRule(BOOLOBJECT, new CastingRuleNullableStaticMethod(BOOL_VALUEOF, CastingAnyBool.INSTANCE)); - rules.registerCastingRule(BYTE, CastingAnyByte.INSTANCE); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod(BYTE_VALUEOF, CastingAnyByte.INSTANCE)); - rules.registerCastingRule(SHORT, CastingAnyShort.INSTANCE); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod(SHORT_VALUEOF, CastingAnyShort.INSTANCE)); - rules.registerCastingRule(INT, CastingAnyInt.INSTANCE); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod(INT_VALUEOF, CastingAnyInt.INSTANCE)); - rules.registerCastingRule(LONG, CastingAnyLong.INSTANCE); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod(LONG_VALUEOF, CastingAnyLong.INSTANCE)); - rules.registerCastingRule(FLOAT, CastingAnyFloat.INSTANCE); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod(FLOAT_VALUEOF, CastingAnyFloat.INSTANCE)); - rules.registerCastingRule(DOUBLE, CastingAnyDouble.INSTANCE); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod(DOUBLE_VALUEOF, CastingAnyDouble.INSTANCE)); - rules.registerCastingRule(STRING, CastingAnyString.INSTANCE); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + rules.registerCastingRule(types.BOOL, methods.CAST_ANY_BOOL); + rules.registerCastingRule(types.BOOLOBJECT, new CastingRuleNullableStaticMethod(methods.BOOL_VALUEOF, methods.CAST_ANY_BOOL)); + rules.registerCastingRule(types.BYTE, methods.CAST_ANY_BYTE); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod(methods.BYTE_VALUEOF, methods.CAST_ANY_BYTE)); + rules.registerCastingRule(types.SHORT, methods.CAST_ANY_SHORT); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod(methods.SHORT_VALUEOF, methods.CAST_ANY_SHORT)); + rules.registerCastingRule(types.INT, methods.CAST_ANY_INT); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod(methods.INT_VALUEOF, methods.CAST_ANY_INT)); + rules.registerCastingRule(types.LONG, methods.CAST_ANY_LONG); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod(methods.LONG_VALUEOF, methods.CAST_ANY_LONG)); + rules.registerCastingRule(types.FLOAT, methods.CAST_ANY_FLOAT); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod(methods.FLOAT_VALUEOF, methods.CAST_ANY_FLOAT)); + rules.registerCastingRule(types.DOUBLE, methods.CAST_ANY_DOUBLE); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod(methods.DOUBLE_VALUEOF, methods.CAST_ANY_DOUBLE)); + rules.registerCastingRule(types.STRING, methods.CAST_ANY_STRING); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { + public boolean canCastExplicit(ZenType type) { return true; } @@ -114,91 +119,102 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + CommonMethods methods = environment.getTypes().getCommonMethods(); + switch (operator) { case NEG: - return new ExpressionCallVirtual(position, environment, METHOD_NEG, value); + return new ExpressionCallVirtual(position, environment, methods.METHOD_NEG, value); case NOT: - return new ExpressionCallVirtual(position, environment, METHOD_NOT, value); + return new ExpressionCallVirtual(position, environment, methods.METHOD_NOT, value); default: - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + ZenType any = types.ANY; + switch (operator) { case ADD: - return new ExpressionCallVirtual(position, environment, METHOD_ADD, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_ADD, left, right.cast(position, any)); case CAT: - return new ExpressionCallVirtual(position, environment, METHOD_CAT, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_CAT, left, right.cast(position, any)); case SUB: - return new ExpressionCallVirtual(position, environment, METHOD_SUB, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_SUB, left, right.cast(position, any)); case MUL: - return new ExpressionCallVirtual(position, environment, METHOD_MUL, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_MUL, left, right.cast(position, any)); case DIV: - return new ExpressionCallVirtual(position, environment, METHOD_DIV, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_DIV, left, right.cast(position, any)); case MOD: - return new ExpressionCallVirtual(position, environment, METHOD_MOD, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_MOD, left, right.cast(position, any)); case AND: - return new ExpressionCallVirtual(position, environment, METHOD_AND, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_AND, left, right.cast(position, any)); case OR: - return new ExpressionCallVirtual(position, environment, METHOD_OR, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_OR, left, right.cast(position, any)); case XOR: - return new ExpressionCallVirtual(position, environment, METHOD_XOR, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_XOR, left, right.cast(position, any)); case CONTAINS: - return new ExpressionCallVirtual(position, environment, METHOD_CONTAINS, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_CONTAINS, left, right.cast(position, any)); case INDEXGET: - return new ExpressionCallVirtual(position, environment, METHOD_INDEXGET, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_INDEXGET, left, right.cast(position, any)); case RANGE: - return new ExpressionCallVirtual(position, environment, METHOD_RANGE, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_RANGE, left, right.cast(position, any)); case COMPARE: - return new ExpressionCallVirtual(position, environment, METHOD_COMPARETO, left, right.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_COMPARETO, left, right.cast(position, any)); case MEMBERGETTER: - return new ExpressionCallVirtual(position, environment, METHOD_MEMBERGET, left, right.cast(position, environment, STRING)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_MEMBERGET, left, right.cast(position, types.STRING)); default: - return new ExpressionInvalid(position, ANY); + return new ExpressionInvalid(position, environment); } } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + switch (operator) { case INDEXSET: - return new ExpressionCallVirtual(position, environment, METHOD_INDEXSET, first, second.cast(position, environment, ANY), third.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_INDEXSET, first, second.cast(position, types.ANY), third.cast(position, types.ANY)); case MEMBERSETTER: - return new ExpressionCallVirtual(position, environment, METHOD_MEMBERSET, first, second.cast(position, environment, STRING), third.cast(position, environment, ANY)); + return new ExpressionCallVirtual(position, environment, methods.METHOD_MEMBERSET, first, second.cast(position, types.STRING), third.cast(position, types.ANY)); default: - return new ExpressionInvalid(position, ANY); + return new ExpressionInvalid(position, environment); } } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { Expression comparator = new ExpressionCallVirtual( position, environment, - JavaMethod.get(environment, IAny.class, "compareTo", IAny.class), + environment.getTypes().getCommonMethods().METHOD_COMPARETO, left, right); return new ExpressionCompareGeneric( position, + environment, comparator, type); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { return new ExpressionCallVirtual( position, environment, - JavaMethod.get(environment, IAny.class, "call", IAny[].class), + METHOD_CALL, receiver, arguments); } @@ -210,7 +226,7 @@ public ZenType[] predictCallTypes(int numArguments) { result[i] = ANY; } return result; - } + }*/ @Override public String getName() { @@ -218,12 +234,88 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { throw new UnsupportedOperationException("Cannot get any class name from the any type. That's like trying to stuff a freezer into a freezer."); } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; + } + + @Override + public List getMethods() { + if (methods == null) + methods = Collections.singletonList(JavaMethod.get(getEnvironment().getTypes(), IAny.class, "call", IAny.class, IAny[].class)); + + return methods; + } + + private class AnyMember implements IPartialExpression { + private final ZenPosition position; + private final IScopeMethod environment; + private final Expression value; + private final String name; + private final List methods; + + public AnyMember(ZenPosition position, IScopeMethod environment, Expression value, String name) { + this.position = position; + this.environment = environment; + this.value = value; + this.name = name; + methods = Collections.singletonList(new JavaMethodPrefixed( + new ExpressionString(position, environment, name), + environment.getTypes().getCommonMethods().METHOD_MEMBERCALL)); + } + + @Override + public Expression eval() { + return new ExpressionCallVirtual(position, environment, environment.getTypes().getCommonMethods().METHOD_MEMBERGET, value, new ExpressionString(position, environment, name)); + } + + @Override + public Expression assign(ZenPosition position, Expression other) { + return new ExpressionCallVirtual(position, environment, environment.getTypes().getCommonMethods().METHOD_MEMBERSET, value, new ExpressionString(position, environment, name), other); + } + + @Override + public IPartialExpression getMember(ZenPosition position, String name) { + return new AnyMember(position, environment, this.eval(), name); + } + + @Override + public List getMethods() { + return methods; + } + + @Override + public IZenSymbol toSymbol() { + return null; + } + + @Override + public ZenType getType() { + return ZenTypeAny.this; + } + + @Override + public ZenType toType(List genericTypes) { + return null; + } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return this; + } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArray.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArray.java index 2f030251..6e66d061 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArray.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArray.java @@ -6,15 +6,16 @@ package stanhebben.zenscript.type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCompareGeneric; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -24,7 +25,9 @@ public abstract class ZenTypeArray extends ZenType { private final ZenType base; private final String name; - public ZenTypeArray(ZenType base) { + public ZenTypeArray(IScopeGlobal environment, ZenType base) { + super(environment); + this.base = base; name = base + "[]"; } @@ -33,21 +36,16 @@ public ZenType getBaseType() { return base; } - public abstract IPartialExpression getMemberLength(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value); + public abstract IPartialExpression getMemberLength(ZenPosition position, IScopeMethod environment, IPartialExpression value); - public abstract Expression indexGet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index); + public abstract Expression indexGet(ZenPosition position, IScopeMethod environment, Expression array, Expression index); - public abstract Expression indexSet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index, Expression value); + public abstract Expression indexSet(ZenPosition position, IScopeMethod environment, Expression array, Expression index, Expression value); @Override public final String getName() { return name; } - - @Override - public final boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return equals(type) || canCastExpansion(environment, type); - } @Override public final int getNumberType() { @@ -55,14 +53,14 @@ public final int getNumberType() { } @Override - public final IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { + public final IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { if (name.equals("length")) { return getMemberLength(position, environment, value); } else { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "no such member in array: " + name); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -70,28 +68,28 @@ public final IPartialExpression getMember(ZenPosition position, IEnvironmentGlob } @Override - public final IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public final IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { IPartialExpression result = staticMemberExpansion(position, environment, name); if (result == null) { environment.error(position, "no such member in array: " + name); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public final boolean isPointer() { + public final boolean isNullable() { return true; } @Override public final Expression unary( - ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { Expression result = unaryExpansion(position, environment, value, operator); if (result == null) { environment.error(position, "Array has no unary operators"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -99,14 +97,14 @@ public final Expression unary( @Override public final Expression binary( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.INDEXGET) { return indexGet(position, environment, left, right); } else { Expression result = binaryExpansion(position, environment, left, right, operator); if (result == null) { environment.error(position, getName() + " doesn't have such operator"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -115,14 +113,14 @@ public final Expression binary( @Override public final Expression trinary( - ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { if (operator == OperatorType.INDEXSET) { return indexSet(position, environment, first, second, third); } else { Expression result = trinaryExpansion(position, environment, first, second, third, operator); if (result == null) { environment.error(position, getName() + " doesn't have such operator"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -131,25 +129,35 @@ public final Expression trinary( @Override public final Expression compare( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { Expression compare = binaryExpansion(position, environment, left, right, OperatorType.COMPARE); if (compare == null) { environment.error(position, "Arrays cannot be compared"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } else { - return new ExpressionCompareGeneric(position, compare, type); + return new ExpressionCompareGeneric(position, environment, compare, type); } } - @Override + /*@Override public final Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "Cannot call an array"); return new ExpressionInvalid(position); + }*/ + + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return this; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayBasic.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayBasic.java index 8df9d0ed..5a29f15d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayBasic.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayBasic.java @@ -2,26 +2,26 @@ import org.objectweb.asm.Label; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArrayGet; import stanhebben.zenscript.expression.ExpressionArrayLength; import stanhebben.zenscript.expression.ExpressionArraySet; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleArrayArray; -import stanhebben.zenscript.type.casting.CastingRuleArrayList; -import stanhebben.zenscript.type.casting.CastingRuleDelegateArray; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.type.casting.CastingRuleArrayArray; +import zenscript.symbolic.type.casting.CastingRuleArrayList; +import zenscript.symbolic.type.casting.CastingRuleDelegateArray; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; public class ZenTypeArrayBasic extends ZenTypeArray { private final Type asmType; - public ZenTypeArrayBasic(ZenType base) { - super(base); + public ZenTypeArrayBasic(IScopeGlobal environment, ZenType base) { + super(environment, base); asmType = Type.getType("[" + base.toASMType().getDescriptor()); } @@ -44,14 +44,16 @@ public int hashCode() { } @Override - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { - ICastingRule base = super.getCastingRule(type, environment); - if (base == null && getBaseType() == ANY && type instanceof ZenTypeArray) { + public ICastingRule getCastingRule(ZenType type) { + ZenType any = getEnvironment().getTypes().ANY; + + ICastingRule base = super.getCastingRule(type); + if (base == null && getBaseType() == any && type instanceof ZenTypeArray) { ZenType toBaseType = ((ZenTypeArray)type).getBaseType(); if (type instanceof ZenTypeArrayBasic) { - return new CastingRuleArrayArray(ANY.getCastingRule(toBaseType, environment), this, (ZenTypeArrayBasic) type); + return new CastingRuleArrayArray(any.getCastingRule(toBaseType), this, (ZenTypeArrayBasic) type); } else if (type instanceof ZenTypeArrayList) { - return new CastingRuleArrayList(ANY.getCastingRule(toBaseType, environment), this, (ZenTypeArrayList) type); + return new CastingRuleArrayList(any.getCastingRule(toBaseType), this, (ZenTypeArrayList) type); } else { throw new RuntimeException("Invalid array type: " + type); } @@ -61,28 +63,28 @@ public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - ICastingRuleDelegate arrayRules = new CastingRuleDelegateArray(rules, this); - getBaseType().constructCastingRules(environment, arrayRules, followCasters); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + ICastingRuleDelegate arrayRules = new CastingRuleDelegateArray(getEnvironment(), rules, this); + getBaseType().constructCastingRules(arrayRules, followCasters); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues) { if (numValues == 1) { - return new ValueIterator(methodOutput.getOutput()); + return new ValueIterator(); } else if (numValues == 2) { - return new IndexValueIterator(methodOutput.getOutput()); + return new IndexValueIterator(); } else { return null; } } @Override - public String getAnyClassName(IEnvironmentGlobal global) { + public String getAnyClassName() { return null; } @@ -106,65 +108,65 @@ public String getSignature() { } @Override - public IPartialExpression getMemberLength(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value) { - return new ExpressionArrayLength(position, value.eval(environment)); + public IPartialExpression getMemberLength(ZenPosition position, IScopeMethod environment, IPartialExpression value) { + return new ExpressionArrayLength(position, environment, value.eval()); } @Override - public Expression indexGet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index) { + public Expression indexGet(ZenPosition position, IScopeMethod environment, Expression array, Expression index) { return new ExpressionArrayGet( position, + environment, array, - index.cast(position, environment, INT)); + index.cast(position, getEnvironment().getTypes().INT)); } @Override - public Expression indexSet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index, Expression value) { + public Expression indexSet(ZenPosition position, IScopeMethod environment, Expression array, Expression index, Expression value) { return new ExpressionArraySet( position, + environment, array, - index.cast(position, environment, INT), - value.cast(position, environment, getBaseType())); + index.cast(position, getEnvironment().getTypes().INT), + value.cast(position, getBaseType())); } private class ValueIterator implements IZenIterator { - private final MethodOutput methodOutput; private int index; - public ValueIterator(MethodOutput methodOutput) { - this.methodOutput = methodOutput; + public ValueIterator() { } @Override - public void compileStart(int[] locals) { - index = methodOutput.local(Type.INT_TYPE); - methodOutput.iConst0(); - methodOutput.storeInt(index); + public void compileStart(MethodOutput output, int[] locals) { + index = output.local(Type.INT_TYPE); + output.iConst0(); + output.storeInt(index); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.dup(); - methodOutput.arrayLength(); - methodOutput.loadInt(index); - methodOutput.ifICmpLE(exit); + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.dup(); + output.arrayLength(); + output.loadInt(index); + output.ifICmpLE(exit); - methodOutput.dup(); - methodOutput.loadInt(index); - methodOutput.arrayLoad(getBaseType().toASMType()); - methodOutput.store(getBaseType().toASMType(), locals[0]); + output.dup(); + output.loadInt(index); + output.arrayLoad(getBaseType().toASMType()); + output.store(getBaseType().toASMType(), locals[0]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.iinc(index, 1); - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.iinc(index, 1); + output.goTo(repeat); } @Override - public void compileEnd() { + public void compileEnd(MethodOutput output) { // pop the array - methodOutput.pop(); + output.pop(); } @Override @@ -174,46 +176,40 @@ public ZenType getType(int i) { } private class IndexValueIterator implements IZenIterator { - private final MethodOutput methodOutput; - - public IndexValueIterator(MethodOutput methodOutput) { - this.methodOutput = methodOutput; - } - @Override - public void compileStart(int[] locals) { - methodOutput.iConst0(); - methodOutput.storeInt(locals[0]); + public void compileStart(MethodOutput output, int[] locals) { + output.iConst0(); + output.storeInt(locals[0]); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.dup(); - methodOutput.arrayLength(); - methodOutput.loadInt(locals[0]); - methodOutput.ifICmpLE(exit); + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.dup(); + output.arrayLength(); + output.loadInt(locals[0]); + output.ifICmpLE(exit); - methodOutput.dup(); - methodOutput.loadInt(locals[0]); - methodOutput.arrayLoad(getBaseType().toASMType()); - methodOutput.store(getBaseType().toASMType(), locals[1]); + output.dup(); + output.loadInt(locals[0]); + output.arrayLoad(getBaseType().toASMType()); + output.store(getBaseType().toASMType(), locals[1]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.iinc(locals[0]); - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.iinc(locals[0]); + output.goTo(repeat); } @Override - public void compileEnd() { + public void compileEnd(MethodOutput output) { // pop the array - methodOutput.pop(); + output.pop(); } @Override public ZenType getType(int i) { - return i == 0 ? INT : getBaseType(); + return i == 0 ? getEnvironment().getTypes().INT : getBaseType(); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayList.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayList.java index 9e90de9e..ac7ff8de 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayList.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeArrayList.java @@ -8,16 +8,20 @@ import java.util.List; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionListGet; +import stanhebben.zenscript.expression.ExpressionListLength; +import stanhebben.zenscript.expression.ExpressionListSet; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleDelegateList; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.iterator.IteratorIterable; import stanhebben.zenscript.type.iterator.IteratorList; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.type.casting.CastingRuleDelegateList; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * @@ -26,33 +30,33 @@ public class ZenTypeArrayList extends ZenTypeArray { private final Type type; - public ZenTypeArrayList(ZenType baseType) { - super(baseType); + public ZenTypeArrayList(IScopeGlobal environment, ZenType baseType) { + super(environment, baseType); type = Type.getType(List.class); } @Override - public IPartialExpression getMemberLength(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value) { - return new ExpressionListLength(position, value.eval(environment)); + public IPartialExpression getMemberLength(ZenPosition position, IScopeMethod environment, IPartialExpression value) { + return new ExpressionListLength(position, environment, value.eval()); } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - ICastingRuleDelegate arrayRules = new CastingRuleDelegateList(rules, this); - getBaseType().constructCastingRules(environment, arrayRules, followCasters); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + ICastingRuleDelegate arrayRules = new CastingRuleDelegateList(getEnvironment(), rules, this); + getBaseType().constructCastingRules(arrayRules, followCasters); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues) { if (numValues == 1) { - return new IteratorIterable(methodOutput.getOutput(), getBaseType()); + return new IteratorIterable(getBaseType()); } else if (numValues == 2) { - return new IteratorList(methodOutput.getOutput(), getBaseType()); + return new IteratorList(getEnvironment(), getBaseType()); } else { return null; } @@ -64,7 +68,7 @@ public Class toJavaClass() { } @Override - public String getAnyClassName(IEnvironmentGlobal global) { + public String getAnyClassName() { return null; } @@ -79,38 +83,12 @@ public String getSignature() { } @Override - public Expression indexGet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index) { - // TODO: implement - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + public Expression indexGet(ZenPosition position, IScopeMethod environment, Expression array, Expression index) { + return new ExpressionListGet(position, environment, array, index); } @Override - public Expression indexSet(ZenPosition position, IEnvironmentGlobal environment, Expression array, Expression index, Expression value) { - // TODO: implement - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - } - - private class ExpressionListLength extends Expression { - private final Expression value; - - public ExpressionListLength(ZenPosition position, Expression value) { - super(position); - - this.value = value; - } - - @Override - public ZenType getType() { - return ZenTypeInt.INSTANCE; - } - - @Override - public void compile(boolean result, IEnvironmentMethod environment) { - value.compile(result, environment); - - if (result) { - environment.getOutput().invokeInterface(List.class, "size", int.class); - } - } + public Expression indexSet(ZenPosition position, IScopeMethod environment, Expression array, Expression index, Expression value) { + return new ExpressionListSet(position, environment, array, index, value); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAssociative.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAssociative.java index 9615d463..7198efe7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAssociative.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAssociative.java @@ -8,10 +8,10 @@ import java.util.Map; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCompareGeneric; import stanhebben.zenscript.expression.ExpressionInvalid; @@ -22,13 +22,14 @@ import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleMap; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.iterator.IteratorMap; import stanhebben.zenscript.type.iterator.IteratorMapKeys; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleMap; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * @@ -40,7 +41,9 @@ public class ZenTypeAssociative extends ZenType { private final String name; - public ZenTypeAssociative(ZenType valueType, ZenType keyType) { + public ZenTypeAssociative(IScopeGlobal environment, ZenType valueType, ZenType keyType) { + super(environment); + this.valueType = valueType; this.keyType = keyType; @@ -56,13 +59,22 @@ public ZenType getKeyType() { } @Override - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { - ICastingRule base = super.getCastingRule(type, environment); - if (base == null && type instanceof ZenTypeAssociative && keyType == ANY && valueType == ANY) { + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + if (followCasters) { + constructExpansionCastingRules(rules); + } + } + + @Override + public ICastingRule getCastingRule(ZenType type) { + TypeRegistry types = getEnvironment().getTypes(); + + ICastingRule base = super.getCastingRule(type); + if (base == null && type instanceof ZenTypeAssociative && keyType == types.ANY && valueType == types.ANY) { ZenTypeAssociative aType = (ZenTypeAssociative) type; return new CastingRuleMap( - ANY.getCastingRule(aType.keyType, environment), - ANY.getCastingRule(aType.valueType, environment), + types.ANY.getCastingRule(aType.keyType), + types.ANY.getCastingRule(aType.valueType), this, aType); } else { @@ -71,32 +83,32 @@ public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) } @Override - public String getAnyClassName(IEnvironmentGlobal global) { + public String getAnyClassName() { return null; } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { Expression result = unaryExpansion(position, environment, value, operator); if (result == null) { environment.error(position, "associative arrays don't have unary operators"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CONTAINS) { - return new ExpressionMapContains(position, left, right.cast(position, environment, keyType)); + return new ExpressionMapContains(position, environment, left, right.cast(position, keyType)); } else if (operator == OperatorType.INDEXGET) { - return new ExpressionMapIndexGet(position, left, right.cast(position, environment, keyType)); + return new ExpressionMapIndexGet(position, environment, left, right.cast(position, keyType)); } else { Expression result = binaryExpansion(position, environment, left, right, operator); if (result == null) { environment.error(position, "associative arrays don't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -104,18 +116,19 @@ public Expression binary(ZenPosition position, IEnvironmentGlobal environment, E } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { if (operator == OperatorType.INDEXSET) { return new ExpressionMapIndexSet( position, + environment, first, - second.cast(position, environment, keyType), - third.cast(position, environment, valueType)); + second.cast(position, keyType), + third.cast(position, valueType)); } else { Expression result = trinaryExpansion(position, environment, first, second, third, operator); if (result == null) { environment.error(position, "associative arrays don't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -123,30 +136,33 @@ public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { Expression result = binaryExpansion(position, environment, left, right, OperatorType.COMPARE); if (result == null) { environment.error(position, "cannot compare associative arrays"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { - return new ExpressionCompareGeneric(position, result, type); + return new ExpressionCompareGeneric(position, environment, result, type); } } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + TypeRegistry types = getEnvironment().getTypes(); + if (name.equals("length")) { - return new ExpressionMapSize(position, value.eval(environment)); - } else if (STRING.canCastImplicit(keyType, environment)) { + return new ExpressionMapSize(position, environment, value.eval()); + } else if (types.STRING.canCastImplicit(keyType)) { return new ExpressionMapIndexGet( position, - value.eval(environment), - new ExpressionString(position, name).cast(position, environment, keyType)); + environment, + value.eval(), + new ExpressionString(position, environment, name).cast(position, keyType)); } else { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "this array is not indexable with strings"); - return new ExpressionInvalid(position, valueType); + return new ExpressionInvalid(position, environment, valueType); } else { return result; } @@ -154,18 +170,18 @@ public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal env } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { IPartialExpression result = staticMemberExpansion(position, environment, name); if (result == null) { environment.error(position, "associative arrays don't have static members"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call associative arrays"); return new ExpressionInvalid(position); } @@ -175,22 +191,22 @@ public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDe if (followCasters) { constructExpansionCastingRules(environment, rules); } - } + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues) { if (numValues == 1) { - return new IteratorMapKeys(methodOutput.getOutput(), this); + return new IteratorMapKeys(this); } else if (numValues == 2) { - return new IteratorMap(methodOutput.getOutput(), this); + return new IteratorMap(this); } else { return null; } } @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this || canCastAssociative(type, environment) || canCastExpansion(environment, type); + public boolean canCastExplicit(ZenType type) { + return type == this || canCastAssociative(type) || canCastExpansion(type); } @Override @@ -214,7 +230,7 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } @@ -224,17 +240,27 @@ public String getName() { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nonNull() { + return this; + } + + @Override + public ZenType nullable() { + return this; } - private boolean canCastAssociative(ZenType type, IEnvironmentGlobal global) { + private boolean canCastAssociative(ZenType type) { if (!(type instanceof ZenTypeAssociative)) { return false; } ZenTypeAssociative atype = (ZenTypeAssociative) type; - return getKeyType().canCastImplicit(atype.getKeyType(), global) - && getValueType().canCastImplicit(atype.getValueType(), global); + return getKeyType().canCastImplicit(atype.getKeyType()) + && getValueType().canCastImplicit(atype.getValueType()); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java index f1ac3e3a..a0bfdfd7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,70 +16,51 @@ import stanhebben.zenscript.expression.ExpressionBool; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASBOOL; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASBYTE; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeBool extends ZenType { private static final String ANY_NAME = "any/AnyBool"; private static final String ANY_NAME_2 = "any.AnyBool"; private static final String ANY_NAME_DESC = "Lany/AnyBool;"; - public ZenTypeBool() {} + public ZenTypeBool(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(BOOL_TOSTRING_STATIC)); - rules.registerCastingRule(BOOLOBJECT, new CastingRuleStaticMethod(BOOL_VALUEOF)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic( - getAnyClassName(environment), "valueOf", ANY, BOOL + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.BOOL_TOSTRING_STATIC)); + rules.registerCastingRule(types.BOOLOBJECT, new CastingRuleStaticMethod(methods.BOOL_VALUEOF)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic( + getAnyClassName(), "valueOf", types.ANY, types.BOOL ))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return type == BOOL || type == ANY || type == ZenTypeString.INSTANCE || canCastExpansion(environment, type); - }*/ - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return canCastImplicit(type, environment); - } - - /*@Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type == BOOL || type == ZenTypeBoolObject.INSTANCE || type == STRING || type == ANY) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return boolean.class; @@ -96,80 +77,82 @@ public int getNumberType() { } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + TypeRegistry types = getEnvironment().getTypes(); + if (operator == OperatorType.CAT) { - return STRING.binary( + return types.STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, types.STRING), + right.cast(position, types.STRING), OperatorType.CAT); } - if (right.getType().canCastImplicit(BOOL, environment)) { + if (right.getType().canCastImplicit(types.BOOL)) { switch (operator) { case AND: case OR: case XOR: - if (right.getType() != BOOL) { - right = right.cast(position, environment, BOOL); + if (right.getType() != types.BOOL) { + right = right.cast(position, types.BOOL); } - return new ExpressionArithmeticBinary(position, operator, left, right); + return new ExpressionArithmeticBinary(position, environment, operator, left, right); default: environment.error(position, "unsupported bool operator: " + operator); - return new ExpressionInvalid(position, BOOL); + return new ExpressionInvalid(position, environment); } } else { environment.error(right.getPosition(), "not a valid bool value"); - return new ExpressionInvalid(position, BOOL); + return new ExpressionInvalid(position, environment); } } @Override public Expression trinary( - ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "operation not supported on a bool value"); - return new ExpressionInvalid(position, BOOL); + return new ExpressionInvalid(position, environment); } @Override public Expression compare( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { if (type == CompareType.EQ || type == CompareType.NE) { - return new ExpressionArithmeticCompare(position, type, left, right); + return new ExpressionArithmeticCompare(position, environment, type, left, right); } else { environment.error(position, "such comparison not supported on a bool"); - return new ExpressionInvalid(position, BOOL); + return new ExpressionInvalid(position, environment); } } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a boolean value"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); - } + return new ExpressionInvalid(position); + }*/ @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "bool value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { environment.error(position, "bool type has no static members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override @@ -178,32 +161,19 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == ZenTypeBoolObject.INSTANCE) { - environment.getOutput().invokeStatic(Boolean.class, "valueOf", Boolean.class, boolean.class); - } else if (type == STRING) { - environment.getOutput().invokeStatic(Boolean.TYPE, "toString", String.class, boolean.class); - } else if (type == ANY) { - environment.getOutput().invokeStatic(getAnyClassName(environment), "valueOf", "(Z)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "Cannot compile bool to " + type); - } - }*/ - + @Override public String getName() { return "bool"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionBool(environment), ANY_NAME, Type.BOOLEAN_TYPE)); @@ -213,15 +183,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionBool(position, false); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionBool(position, environment, false); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().BOOLOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionBool implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionBool(IEnvironmentGlobal environment) { + public AnyDefinitionBool(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -279,7 +261,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(BOOL, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.BOOL, output, environment, 0); } output.iConst0(); @@ -294,7 +276,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(BOOL, output, environment, 0, 1); + expansion.compileAnyCast(types.BOOL, output, environment, 0, 1); } throwCastException(output, "bool", 1); @@ -335,10 +317,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, boolean.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -363,7 +345,7 @@ public void defineAnd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBOOL.invokeVirtual(output); + output.invokeInterface(IAny.class, "asBool", boolean.class); output.iAnd(); valueOf(output); output.returnObject(); @@ -375,7 +357,7 @@ public void defineOr(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBOOL.invokeVirtual(output); + output.invokeInterface(IAny.class, "asBool", boolean.class); output.iOr(); valueOf(output); output.returnObject(); @@ -387,7 +369,7 @@ public void defineXor(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asBool", boolean.class); output.iXor(); valueOf(output); output.returnObject(); @@ -402,7 +384,7 @@ public void defineRange(MethodOutput output) { public void defineCompareTo(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASBOOL.invokeVirtual(output); + output.invokeInterface(IAny.class, "asBool", boolean.class); output.iSub(); output.returnInt(); } @@ -497,7 +479,7 @@ public void defineAs(MethodOutput output) { output.store(Type.BYTE_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(BYTE, output, environment, localValue, 1); + expansion.compileAnyCast(types.BYTE, output, environment, localValue, 1); } throwCastException(output, "bool", 1); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java index 0afcdbfa..48972067 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java @@ -7,91 +7,95 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.BOOL; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeBoolObject extends ZenType { - public static final ZenTypeBoolObject INSTANCE = new ZenTypeBoolObject(); + private final ZenType BOOL; - private ZenTypeBoolObject() {} + public ZenTypeBoolObject(IScopeGlobal environment, ZenType BOOL) { + super(environment); + + this.BOOL = BOOL; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return BOOL.unary(position, environment, value.cast(position, environment, ZenType.BOOL), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return BOOL.unary(position, environment, value.cast(position, BOOL), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return BOOL.binary(position, environment, left.cast(position, environment, BOOL), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return BOOL.binary(position, environment, left.cast(position, BOOL), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return BOOL.trinary(position, environment, first.cast(position, environment, BOOL), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return BOOL.trinary(position, environment, first.cast(position, BOOL), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return BOOL.compare(position, environment, left.cast(position, environment, BOOL), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return BOOL.compare(position, environment, left.cast(position, BOOL), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return BOOL.getMember(position, environment, value.eval(environment).cast(position, environment, BOOL), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return BOOL.getMember(position, environment, value.eval().cast(position, BOOL), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return BOOL.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { return BOOL.call(position, environment, receiver.cast(position, environment, BOOL), arguments); - } + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return BOOL.makeIterator(numValues, methodOutput); + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return BOOL.makeIterator(numValues, output); } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BOOL, new CastingRuleVirtualMethod(BOOL_VALUE)); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(BOOL, BOOL_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( - BOOL.getAnyClassName(environment), + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BOOL, new CastingRuleVirtualMethod(this, methods.BOOL_VALUE)); + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.BOOL, methods.BOOL_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( + BOOL.getAnyClassName(), "valueOf", - ANY, + types.ANY, BOOL - ), new CastingRuleVirtualMethod(BOOL_VALUE))); + ), new CastingRuleVirtualMethod(this, methods.BOOL_VALUE))); } - - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return BOOL.canCastImplicit(type, environment); - }*/ @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return canCastImplicit(type, environment); + public boolean canCastExplicit(ZenType type) { + return canCastImplicit(type); } @Override @@ -115,63 +119,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == BOOL) { - environment.getOutput().invokeVirtual(Boolean.class, "booleanValue", boolean.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Boolean.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Boolean.class, "booleanValue", boolean.class); - output.invokeStatic(BOOL.getAnyClassName(environment), "valueOf", "(Z)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Boolean.class, "booleanValue", boolean.class); - BOOL.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "bool?"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return BOOL.getAnyClassName(environment); + public String getAnyClassName() { + return BOOL.getAnyClassName(); } - /*@Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type == BOOL || type == ZenTypeBoolObject.INSTANCE || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return BOOL; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java index e39fc594..89a576eb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -17,88 +17,62 @@ import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import static stanhebben.zenscript.type.ZenTypeAny.*; -import stanhebben.zenscript.type.casting.CastingRuleI2D; -import stanhebben.zenscript.type.casting.CastingRuleI2F; -import stanhebben.zenscript.type.casting.CastingRuleI2L; -import stanhebben.zenscript.type.casting.CastingRuleNone; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.type.casting.CastingRuleI2D; +import zenscript.symbolic.type.casting.CastingRuleI2F; +import zenscript.symbolic.type.casting.CastingRuleI2L; +import zenscript.symbolic.type.casting.CastingRuleNone; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASBYTE; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; -import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.util.CommonMethods; public class ZenTypeByte extends ZenType { - public static final ZenTypeByte INSTANCE = new ZenTypeByte(); - private static final String ANY_NAME = "any/AnyByte"; private static final String ANY_NAME_2 = "any.AnyByte"; - private ZenTypeByte() {} - + public ZenTypeByte(IScopeGlobal environment) { + super(environment); + } + @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF)); - rules.registerCastingRule(SHORT, new CastingRuleNone(BYTE, SHORT)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF)); - rules.registerCastingRule(INT, new CastingRuleNone(BYTE, INT)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF)); - rules.registerCastingRule(LONG, new CastingRuleI2L(null)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleI2L(null))); - rules.registerCastingRule(FLOAT, new CastingRuleI2F(null)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF, new CastingRuleI2F(null))); - rules.registerCastingRule(DOUBLE, new CastingRuleI2D(null)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF, new CastingRuleI2D(null))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF)); + rules.registerCastingRule(types.SHORT, new CastingRuleNone(types.BYTE, types.SHORT)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF)); + rules.registerCastingRule(types.INT, new CastingRuleNone(types.BYTE, types.INT)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF)); + rules.registerCastingRule(types.LONG, new CastingRuleI2L(null, types)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleI2L(null, types))); + rules.registerCastingRule(types.FLOAT, new CastingRuleI2F(null, types)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF, new CastingRuleI2F(null, types))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleI2D(null, types)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF, new CastingRuleI2D(null, types))); - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(BYTE_TOSTRING_STATIC)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, BYTE))); + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.BYTE_TOSTRING_STATIC)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.BYTE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - int itype = type.getNumberType(); - return itype != 0 - || type == STRING - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.getNumberType() != 0 - || type == STRING - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING || type == ANY) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return byte.class; @@ -115,19 +89,25 @@ public int getNumberType() { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "bool value has no member named " + name); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return null; + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + IPartialExpression result = staticMemberExpansion(position, environment, name); + if (result == null) { + environment.error(position, "bool value has no static member named " + name); + return new ExpressionInvalid(position, environment); + } else { + return result; + } } @Override @@ -136,85 +116,48 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - // nothing to do - } else if (type == ZenTypeByteObject.INSTANCE) { - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - // nothing to do - } else if (type == ZenTypeShortObject.INSTANCE) { - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - // nothing to do - } else if (type == ZenTypeIntObject.INSTANCE) { - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - output.i2l(); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.i2l(); - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - output.i2f(); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.i2f(); - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - output.i2d(); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.i2d(); - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Byte.class, "toString", String.class, byte.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(B)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { - return STRING.binary( + TypeRegistry types = environment.getTypes(); + + return types.STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, types.STRING), + right.cast(position, types.STRING), + OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "byte doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a byte value"); - return new ExpressionInvalid(position, ZenTypeByte.INSTANCE); - } + return new ExpressionInvalid(position, environment); + }*/ @Override public String getName() { @@ -222,7 +165,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionByte(environment), ANY_NAME, Type.BYTE_TYPE)); @@ -232,15 +177,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionInt(position, 0, ZenType.BYTE); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionInt(position, environment, 0, environment.getTypes().BYTE); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().BYTEOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionByte implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionByte(IEnvironmentGlobal environment) { + public AnyDefinitionByte(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -297,7 +254,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(BYTE, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.BYTE, output, environment, 0); } output.iConst0(); @@ -312,10 +269,10 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(BYTE, output, environment, 0, 1); + expansion.compileAnyCast(types.BYTE, output, environment, 0, 1); } - throwCastException(output, "byte", 1); + AnyClassWriter.throwCastException(output, "byte", 1); } @Override @@ -344,7 +301,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iAdd(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -356,7 +313,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iSub(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -374,10 +331,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, int.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -387,7 +344,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iMul(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -399,7 +356,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iDiv(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -411,7 +368,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iRem(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -423,7 +380,7 @@ public void defineAnd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iAnd(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -435,7 +392,7 @@ public void defineOr(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iOr(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -447,7 +404,7 @@ public void defineXor(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iXor(); output.invokeSpecial(ANY_NAME, "", "(B)V"); output.returnObject(); @@ -464,7 +421,7 @@ public void defineRange(MethodOutput output) { public void defineCompareTo(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.iSub(); output.returnInt(); } @@ -511,7 +468,7 @@ public void defineCall(MethodOutput output) { @Override public void defineAsBool(MethodOutput output) { - throwCastException(output, ANY_NAME, "bool"); + AnyClassWriter.throwCastException(output, ANY_NAME, "bool"); } @Override @@ -568,10 +525,10 @@ public void defineAs(MethodOutput output) { output.store(Type.BYTE_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(BYTE, output, environment, localValue, 1); + expansion.compileAnyCast(types.BYTE, output, environment, localValue, 1); } - throwCastException(output, "byte", 1); + AnyClassWriter.throwCastException(output, "byte", 1); } @Override @@ -614,7 +571,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASBYTE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asByte", byte.class); output.ifICmpNE(lblNope); output.iConst1(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java index 3b90bce8..4fa69eec 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java @@ -7,126 +7,114 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeByteObject extends ZenType { - public static final ZenTypeByteObject INSTANCE = new ZenTypeByteObject(); + private final ZenType BYTE; - private ZenTypeByteObject() {} + public ZenTypeByteObject(IScopeGlobal environment, ZenType BYTE) { + super(environment); + + this.BYTE = BYTE; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return BYTE.unary(position, environment, value.cast(position, environment, BYTE), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return BYTE.unary(position, environment, value.cast(position, BYTE), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return BYTE.binary(position, environment, left.cast(position, environment, BYTE), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return BYTE.binary(position, environment, left.cast(position, BYTE), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return BYTE.trinary(position, environment, first.cast(position, environment, BYTE), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return BYTE.trinary(position, environment, first.cast(position, BYTE), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return BYTE.compare(position, environment, left.cast(position, environment, BYTE), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return BYTE.compare(position, environment, left.cast(position, BYTE), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return BYTE.getMember(position, environment, value.eval(environment).cast(position, environment, BYTE), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return BYTE.getMember(position, environment, value.eval().cast(position, BYTE), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return BYTE.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { return BYTE.call(position, environment, receiver.cast(position, environment, BYTE), arguments); + }*/ + + @Override + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return BYTE.makeIterator(numValues, output); } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return BYTE.makeIterator(numValues, methodOutput); - } - - @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(BYTEOBJECT, BYTE_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, BYTE), - new CastingRuleVirtualMethod(BYTE_VALUE))); + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); + + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.BYTEOBJECT, methods.BYTE_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.BYTE), + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); - } - } - - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return BYTE.canCastImplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); + constructExpansionCastingRules(rules); } } - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return BYTE.canCastExplicit(type, environment); - }*/ - @Override public Class toJavaClass() { return Byte.class; @@ -148,52 +136,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == BYTE) { - environment.getOutput().invokeVirtual(Byte.class, "byteValue", byte.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Byte.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Byte.class, "byteValue", byte.class); - output.invokeStatic(BYTE.getAnyClassName(environment), "valueOf", "(B)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Byte.class, "byteValue", byte.class); - BYTE.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "byte?"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return BYTE.getAnyClassName(environment); + public String getAnyClassName() { + return BYTE.getAnyClassName(); + } + + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return BYTE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java index 1a8600b9..f0f5ebb2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,95 +16,64 @@ import stanhebben.zenscript.expression.ExpressionFloat; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTEOBJECT; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUEOF; -import static stanhebben.zenscript.type.ZenType.FLOAT; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleD2F; -import stanhebben.zenscript.type.casting.CastingRuleD2I; -import stanhebben.zenscript.type.casting.CastingRuleD2L; -import stanhebben.zenscript.type.casting.CastingRuleI2B; -import stanhebben.zenscript.type.casting.CastingRuleI2S; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASDOUBLE; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleD2F; +import zenscript.symbolic.type.casting.CastingRuleD2I; +import zenscript.symbolic.type.casting.CastingRuleD2L; +import zenscript.symbolic.type.casting.CastingRuleI2B; +import zenscript.symbolic.type.casting.CastingRuleI2S; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeDouble extends ZenType { - public static final ZenTypeDouble INSTANCE = new ZenTypeDouble(); - - //private static final JavaMethod DOUBLE_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Double.class, "toString", double.class); private static final String ANY_NAME = "any/AnyDouble"; private static final String ANY_NAME_2 = "any.AnyDouble"; - private ZenTypeDouble() {} + public ZenTypeDouble(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleI2B(new CastingRuleD2I(null))); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleD2I(null)))); - rules.registerCastingRule(SHORT, new CastingRuleI2S(new CastingRuleD2I(null))); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleD2I(null)))); - rules.registerCastingRule(INT, new CastingRuleD2I(null)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF, new CastingRuleD2I(null))); - rules.registerCastingRule(LONG, new CastingRuleD2L(null)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleD2L(null))); - rules.registerCastingRule(FLOAT, new CastingRuleD2F(null)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF, new CastingRuleD2F(null))); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF)); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(DOUBLE_TOSTRING_STATIC)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, DOUBLE))); + rules.registerCastingRule(types.BYTE, new CastingRuleI2B(new CastingRuleD2I(null, types), types)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleD2I(null, types), types))); + rules.registerCastingRule(types.SHORT, new CastingRuleI2S(new CastingRuleD2I(null, types), types)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleD2I(null, types), types))); + rules.registerCastingRule(types.INT, new CastingRuleD2I(null, types)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF, new CastingRuleD2I(null, types))); + rules.registerCastingRule(types.LONG, new CastingRuleD2L(null, types)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleD2L(null, types))); + rules.registerCastingRule(types.FLOAT, new CastingRuleD2F(null, types)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF, new CastingRuleD2F(null, types))); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF)); + + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.DOUBLE_TOSTRING_STATIC)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.DOUBLE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return (type.getNumberType() != 0 && type.getNumberType() >= NUM_FLOAT) - || type == STRING - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.getNumberType() != 0 - || type == STRING - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return Type.DOUBLE_TYPE; @@ -121,19 +90,25 @@ public int getNumberType() { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "double value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return null; + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + IPartialExpression result = staticMemberExpansion(position, environment, name); + if (result == null) { + environment.error(position, "double value has no static members"); + return new ExpressionInvalid(position, environment); + } else { + return result; + } } @Override @@ -142,91 +117,48 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - output.d2i(); - output.i2b(); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.d2i(); - output.i2b(); - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - output.d2i(); - output.i2s(); - } else if (type == ZenTypeShortObject.INSTANCE) { - output.d2i(); - output.i2s(); - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - output.d2i(); - } else if (type == ZenTypeIntObject.INSTANCE) { - output.d2i(); - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - output.d2l(); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.d2l(); - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - output.d2f(); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.d2f(); - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - // nothing to do - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Double.class, "toString", String.class, double.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(D)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { - return STRING.binary( + TypeRegistry types = environment.getTypes(); + + return types.STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, types.STRING), + right.cast(position, types.STRING), + OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "double doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a double value"); - return new ExpressionInvalid(position); - } + return new ExpressionInvalid(position, environment); + }*/ @Override public String getName() { @@ -234,7 +166,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionDouble(environment), ANY_NAME, Type.DOUBLE_TYPE)); @@ -249,15 +183,27 @@ public boolean isLarge() { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionFloat(position, 0.0, DOUBLE); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionFloat(position, environment, 0.0, environment.getTypes().DOUBLE); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().DOUBLEOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionDouble implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionDouble(IEnvironmentGlobal environment) { + public AnyDefinitionDouble(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -314,7 +260,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(FLOAT, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.FLOAT, output, environment, 0); } output.iConst0(); @@ -329,7 +275,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(DOUBLE, output, environment, 0, 1); + expansion.compileAnyCast(types.DOUBLE, output, environment, 0, 1); } throwCastException(output, "double", 1); @@ -356,7 +302,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dAdd(); output.invokeSpecial(ANY_NAME, "", "(D)V"); output.returnObject(); @@ -368,7 +314,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dSub(); output.invokeSpecial(ANY_NAME, "", "(D)V"); output.returnObject(); @@ -386,10 +332,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, double.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -399,7 +345,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dMul(); output.invokeSpecial(ANY_NAME, "", "(D)V"); output.returnObject(); @@ -411,7 +357,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dDiv(); output.invokeSpecial(ANY_NAME, "", "(D)V"); output.returnObject(); @@ -423,7 +369,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dRem(); output.invokeSpecial(ANY_NAME, "", "(D)V"); output.returnObject(); @@ -454,7 +400,7 @@ public void defineCompareTo(MethodOutput output) { // return Double.compare(x, y) getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.invokeStatic(Float.class, "compare", int.class, double.class, double.class); output.returnInt(); } @@ -562,7 +508,7 @@ public void defineAs(MethodOutput output) { output.store(Type.DOUBLE_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(DOUBLE, output, environment, localValue, 1); + expansion.compileAnyCast(types.DOUBLE, output, environment, localValue, 1); } throwCastException(output, "double", 1); @@ -613,7 +559,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASDOUBLE.invokeVirtual(output); + output.invokeInterface(IAny.class, "asDouble", double.class); output.dCmp(); output.ifNE(lblNope); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java index 5b74a086..dc47076f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java @@ -7,131 +7,116 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeDoubleObject extends ZenType { - public static final ZenTypeDoubleObject INSTANCE = new ZenTypeDoubleObject(); + private final ZenType DOUBLE; - private ZenTypeDoubleObject() {} - - @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return DOUBLE.unary(position, environment, value.cast(position, environment, DOUBLE), operator); + public ZenTypeDoubleObject(IScopeGlobal environment, ZenType DOUBLE) { + super(environment); + + this.DOUBLE = DOUBLE; } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return DOUBLE.binary(position, environment, left.cast(position, environment, DOUBLE), right, operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return DOUBLE.unary(position, environment, value.cast(position, DOUBLE), operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return DOUBLE.trinary(position, environment, first.cast(position, environment, DOUBLE), second, third, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return DOUBLE.binary(position, environment, left.cast(position, DOUBLE), right, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return DOUBLE.compare(position, environment, left.cast(position, environment, DOUBLE), right, type); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return DOUBLE.trinary(position, environment, first.cast(position, DOUBLE), second, third, operator); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return DOUBLE.getMember(position, environment, value.eval(environment).cast(position, environment, DOUBLE), name); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return DOUBLE.compare(position, environment, left.cast(position, DOUBLE), right, type); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return DOUBLE.getStaticMember(position, environment, name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return DOUBLE.getMember(position, environment, value.eval().cast(position, DOUBLE), name); } @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - return DOUBLE.call(position, environment, receiver.cast(position, environment, DOUBLE), arguments); - } - - @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return DOUBLE.makeIterator(numValues, methodOutput); - } - - @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod( - BYTE_VALUEOF, - new CastingRuleVirtualMethod(BYTE_VALUE))); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); - - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(DOUBLEOBJECT, DOUBLE_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, DOUBLE), - new CastingRuleVirtualMethod(DOUBLE_VALUE))); - - if (followCasters) { - constructExpansionCastingRules(environment, rules); - } + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + return DOUBLE.getStaticMember(position, environment, name); } /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return DOUBLE.canCastImplicit(type, environment); - } + public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + return DOUBLE.call(position, environment, receiver.cast(position, DOUBLE), arguments); + }*/ @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return DOUBLE.canCastExplicit(type, environment); + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return DOUBLE.makeIterator(numValues, output); } - + @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod( + methods.BYTE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); + + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.DOUBLEOBJECT, methods.DOUBLE_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, DOUBLE), + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); + + if (followCasters) { + constructExpansionCastingRules(rules); } - }*/ + } @Override public Class toJavaClass() { @@ -154,52 +139,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == DOUBLE) { - environment.getOutput().invokeVirtual(Double.class, "doubleValue", double.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Double.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Double.class, "doubleValue", double.class); - output.invokeStatic(DOUBLE.getAnyClassName(environment), "valueOf", "(D)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Double.class, "doubleValue", double.class); - DOUBLE.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "double?"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return DOUBLE.getAnyClassName(environment); + public String getAnyClassName() { + return DOUBLE.getAnyClassName(); + } + + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return DOUBLE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java index 0f26f956..b9ba42ba 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,95 +16,64 @@ import stanhebben.zenscript.expression.ExpressionFloat; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTEOBJECT; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUEOF; -import static stanhebben.zenscript.type.ZenType.LONG; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleF2D; -import stanhebben.zenscript.type.casting.CastingRuleF2I; -import stanhebben.zenscript.type.casting.CastingRuleF2L; -import stanhebben.zenscript.type.casting.CastingRuleI2B; -import stanhebben.zenscript.type.casting.CastingRuleI2S; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASFLOAT; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleF2D; +import zenscript.symbolic.type.casting.CastingRuleF2I; +import zenscript.symbolic.type.casting.CastingRuleF2L; +import zenscript.symbolic.type.casting.CastingRuleI2B; +import zenscript.symbolic.type.casting.CastingRuleI2S; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeFloat extends ZenType { - public static final ZenTypeFloat INSTANCE = new ZenTypeFloat(); - - //private static final JavaMethod FLOAT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Float.class, "toString", float.class); private static final String ANY_NAME = "any/AnyFloat"; private static final String ANY_NAME_2 = "any.AnyFloat"; - private ZenTypeFloat() {} + public ZenTypeFloat(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleI2B(new CastingRuleF2I(null))); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleF2I(null)))); - rules.registerCastingRule(SHORT, new CastingRuleI2S(new CastingRuleF2I(null))); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleF2I(null)))); - rules.registerCastingRule(INT, new CastingRuleF2I(null)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF, new CastingRuleF2I(null))); - rules.registerCastingRule(LONG, new CastingRuleF2L(null)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleF2L(null))); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF)); - rules.registerCastingRule(DOUBLE, new CastingRuleF2D(null)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF, new CastingRuleF2D(null))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(FLOAT_TOSTRING_STATIC)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, FLOAT))); + rules.registerCastingRule(types.BYTE, new CastingRuleI2B(new CastingRuleF2I(null, types), types)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleF2I(null, types), types))); + rules.registerCastingRule(types.SHORT, new CastingRuleI2S(new CastingRuleF2I(null, types), types)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleF2I(null, types), types))); + rules.registerCastingRule(types.INT, new CastingRuleF2I(null, types)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF, new CastingRuleF2I(null, types))); + rules.registerCastingRule(types.LONG, new CastingRuleF2L(null, types)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleF2L(null, types))); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF)); + rules.registerCastingRule(types.DOUBLE, new CastingRuleF2D(null, types)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF, new CastingRuleF2D(null, types))); + + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.FLOAT_TOSTRING_STATIC)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.FLOAT))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return (type.getNumberType() != 0) - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.getNumberType() != 0 - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return Type.FLOAT_TYPE; @@ -116,19 +85,25 @@ public int getNumberType() { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "float value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return null; + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + IPartialExpression result = staticMemberExpansion(position, environment, name); + if (result == null) { + environment.error(position, "float value has no static members"); + return new ExpressionInvalid(position, environment); + } else { + return result; + } } @Override @@ -137,91 +112,48 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - output.f2i(); - output.i2b(); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.f2i(); - output.i2b(); - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - output.f2i(); - output.i2s(); - } else if (type == ZenTypeShortObject.INSTANCE) { - output.f2i(); - output.i2s(); - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - output.f2i(); - } else if (type == ZenTypeIntObject.INSTANCE) { - output.f2i(); - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - output.f2l(); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.f2l(); - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - // nothing to do - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - output.f2d(); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.f2d(); - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Float.class, "toString", String.class, float.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(F)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { - return STRING.binary( + TypeRegistry types = environment.getTypes(); + + return types.STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, types.STRING), + right.cast(position, types.STRING), + OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "float doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a float value"); - return new ExpressionInvalid(position); - } + return new ExpressionInvalid(position, environment); + }*/ @Override public Class toJavaClass() { @@ -234,7 +166,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionFloat(environment), ANY_NAME, Type.FLOAT_TYPE)); @@ -244,15 +178,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionFloat(position, 0.0, FLOAT); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionFloat(position, environment, 0.0, environment.getTypes().FLOAT); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().FLOATOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionFloat implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionFloat(IEnvironmentGlobal environment) { + public AnyDefinitionFloat(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -309,7 +255,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(FLOAT, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.FLOAT, output, environment, 0); } output.iConst0(); @@ -324,7 +270,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(FLOAT, output, environment, 0, 1); + expansion.compileAnyCast(types.FLOAT, output, environment, 0, 1); } throwCastException(output, "float", 1); @@ -351,7 +297,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fAdd(); output.invokeSpecial(ANY_NAME, "", "(F)V"); output.returnObject(); @@ -363,7 +309,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fSub(); output.invokeSpecial(ANY_NAME, "", "(F)V"); output.returnObject(); @@ -381,10 +327,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, float.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -394,7 +340,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fMul(); output.invokeSpecial(ANY_NAME, "", "(F)V"); output.returnObject(); @@ -406,7 +352,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fDiv(); output.invokeSpecial(ANY_NAME, "", "(F)V"); output.returnObject(); @@ -418,7 +364,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fRem(); output.invokeSpecial(ANY_NAME, "", "(F)V"); output.returnObject(); @@ -449,7 +395,7 @@ public void defineCompareTo(MethodOutput output) { // return Float.compare(x, y) getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.invokeStatic(Float.class, "compare", int.class, float.class, float.class); output.returnInt(); } @@ -557,7 +503,7 @@ public void defineAs(MethodOutput output) { output.store(Type.FLOAT_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(FLOAT, output, environment, localValue, 1); + expansion.compileAnyCast(types.FLOAT, output, environment, localValue, 1); } throwCastException(output, "float", 1); @@ -608,7 +554,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASFLOAT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asFloat", float.class); output.fCmp(); output.ifICmpNE(lblNope); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java index 924a3a20..15aff4b9 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java @@ -7,132 +7,117 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeFloatObject extends ZenType { - public static final ZenTypeFloatObject INSTANCE = new ZenTypeFloatObject(); + private final ZenType FLOAT; - private ZenTypeFloatObject() {} + public ZenTypeFloatObject(IScopeGlobal environment, ZenType FLOAT) { + super(environment); + + this.FLOAT = FLOAT; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return FLOAT.unary(position, environment, value.cast(position, environment, FLOAT), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return FLOAT.unary(position, environment, value.cast(position, FLOAT), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return FLOAT.binary(position, environment, left.cast(position, environment, FLOAT), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return FLOAT.binary(position, environment, left.cast(position, FLOAT), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return FLOAT.trinary(position, environment, first.cast(position, environment, FLOAT), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return FLOAT.trinary(position, environment, first.cast(position, FLOAT), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return FLOAT.compare(position, environment, left.cast(position, environment, FLOAT), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return FLOAT.compare(position, environment, left.cast(position, FLOAT), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return FLOAT.getMember(position, environment, value.eval(environment).cast(position, environment, FLOAT), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return FLOAT.getMember(position, environment, value.eval().cast(position, FLOAT), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return FLOAT.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - return FLOAT.call(position, environment, receiver.cast(position, environment, FLOAT), arguments); - } + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { + return FLOAT.call(position, environment, receiver.cast(position, FLOAT), arguments); + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return FLOAT.makeIterator(numValues, methodOutput); + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return FLOAT.makeIterator(numValues, output); } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod( - BYTE_VALUEOF, - new CastingRuleVirtualMethod(BYTE_VALUE))); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod( + methods.BYTE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(FLOATOBJECT, FLOAT_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, FLOAT), - new CastingRuleVirtualMethod(FLOAT_VALUE))); + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.FLOATOBJECT, methods.FLOAT_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, FLOAT), + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return FLOAT.canCastImplicit(type, environment); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return FLOAT.canCastExplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return Float.class; @@ -154,52 +139,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == FLOAT) { - environment.getOutput().invokeVirtual(Float.class, "floatValue", float.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Float.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Float.class, "floatValue", float.class); - output.invokeStatic(FLOAT.getAnyClassName(environment), "valueOf", "(F)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Float.class, "floatValue", float.class); - FLOAT.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "float?"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return FLOAT.getAnyClassName(environment); + public String getAnyClassName() { + return FLOAT.getAnyClassName(); } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return FLOAT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java index 0af46494..0a5a8e88 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java @@ -6,25 +6,26 @@ package stanhebben.zenscript.type; -import java.lang.reflect.Method; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.definitions.ParsedFunctionArgument; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleMatchedFunction; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.type.natives.JavaMethodArgument; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleMatchedFunction; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * @@ -32,113 +33,110 @@ */ public class ZenTypeFunction extends ZenType { private final ZenType returnType; - private final ZenType[] argumentTypes; + private final List arguments; private final String name; + private final Map implementedInterfaces = new HashMap(); + private String className = null; - public ZenTypeFunction(ZenType returnType, List arguments) { + public ZenTypeFunction(IScopeGlobal environment, ZenType returnType, List arguments) { + super(environment); + this.returnType = returnType; - argumentTypes = new ZenType[arguments.size()]; - for (int i = 0; i < argumentTypes.length; i++) { - argumentTypes[i] = arguments.get(i).getType(); - } + this.arguments = arguments; + this.className = environment.makeClassName(); StringBuilder nameBuilder = new StringBuilder(); nameBuilder.append("function("); boolean first = true; - for (ZenType type : argumentTypes) { + for (JavaMethodArgument type : arguments) { if (first) { first = false; } else { nameBuilder.append(','); } - nameBuilder.append(type.getName()); + nameBuilder.append(type.getType().getName()); } nameBuilder.append(returnType.getName()); name = nameBuilder.toString(); } - public ZenTypeFunction(ZenType returnType, ZenType[] argumentTypes) { - this.returnType = returnType; - this.argumentTypes = argumentTypes; - - StringBuilder nameBuilder = new StringBuilder(); - nameBuilder.append("function("); - for (ZenType type : argumentTypes) { - nameBuilder.append(type.getName()); - } - nameBuilder.append(')'); - nameBuilder.append(returnType.getName()); - name = nameBuilder.toString(); + public ZenType getReturnType() { + return returnType; + } + + public List getArguments() { + return arguments; } @Override - public String getAnyClassName(IEnvironmentGlobal global) { - throw new UnsupportedOperationException("functions cannot yet be used as any value"); + public String getAnyClassName() { + // TODO: make any for functions + return null; } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { environment.error(position, "Functions have no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { environment.error(position, "Functions have no static members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } @Override - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { + public ICastingRule getCastingRule(ZenType type) { if (implementedInterfaces.containsKey(type)) { return implementedInterfaces.get(type); } - Class cls = type.toJavaClass(); + TypeRegistry types = getEnvironment().getTypes(); + List methods = type.getMethods(); - System.out.println("Can cast this function to " + cls.getName() + "?"); + if (methods.isEmpty()) { + return null; + } - if (cls.isInterface() && cls.getMethods().length == 1) { - // this is a functional interface - // do the method signatures match? - Method method = cls.getMethods()[0]; - ZenType methodReturnType = environment.getType(method.getGenericReturnType()); + for (IJavaMethod method : methods) { + ZenType methodReturnType = method.getReturnType(); ICastingRule returnCastingRule = null; if (!returnType.equals(methodReturnType)) { - returnCastingRule = returnType.getCastingRule(environment.getType(method.getGenericReturnType()), environment); + returnCastingRule = returnType.getCastingRule(methodReturnType); if (returnCastingRule == null) { System.out.println("Return types don't match"); - return null; + continue; } } - java.lang.reflect.Type[] methodParameters = method.getGenericParameterTypes(); - if (methodParameters.length < argumentTypes.length) { + JavaMethodArgument[] methodArguments = method.getArguments(); + if (methodArguments.length < arguments.size()) { System.out.println("Argument count doesn't match"); return null; } - ICastingRule[] argumentCastingRules = new ICastingRule[argumentTypes.length]; + ICastingRule[] argumentCastingRules = new ICastingRule[arguments.size()]; for (int i = 0; i < argumentCastingRules.length; i++) { - ZenType argumentType = environment.getType(methodParameters[i]); - if (!argumentType.equals(argumentTypes[i])) { - argumentCastingRules[i] = argumentType.getCastingRule(argumentTypes[i], environment); + ZenType argumentType = methodArguments[i].getType(); + if (!argumentType.equals(arguments.get(i).getType())) { + argumentCastingRules[i] = argumentType.getCastingRule(arguments.get(i).getType()); if (argumentCastingRules[i] == null) { System.out.println("Argument " + i + " doesn't match"); - System.out.println("Cannot cast " + argumentType.getName() + " to " + argumentTypes[i].getName()); + System.out.println("Cannot cast " + argumentType.getName() + " to " + arguments.get(i).getType().getName()); return null; } } @@ -169,44 +167,50 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { environment.error(position, "cannot apply operators on a function"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { environment.error(position, "cannot apply operators on a function"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "cannot apply operators on a function"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { environment.error(position, "cannot apply operators on a function"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } - + @Override + public List getMethods() { + // TODO: implement the method + return null; + } + + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { return null; // TODO: complete } @Override public ZenType[] predictCallTypes(int numArguments) { - return Arrays.copyOf(argumentTypes, numArguments); - } + return Arrays.copyOf(arguments, numArguments); + }*/ @Override public Class toJavaClass() { @@ -220,7 +224,17 @@ public String getName() { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java index 3a6c2007..55181af0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,94 +16,64 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTEOBJECT; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUEOF; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleI2B; -import stanhebben.zenscript.type.casting.CastingRuleI2D; -import stanhebben.zenscript.type.casting.CastingRuleI2F; -import stanhebben.zenscript.type.casting.CastingRuleI2L; -import stanhebben.zenscript.type.casting.CastingRuleI2S; -import stanhebben.zenscript.type.casting.CastingRuleNone; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASINT; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleI2B; +import zenscript.symbolic.type.casting.CastingRuleI2D; +import zenscript.symbolic.type.casting.CastingRuleI2F; +import zenscript.symbolic.type.casting.CastingRuleI2L; +import zenscript.symbolic.type.casting.CastingRuleI2S; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeInt extends ZenType { - public static final ZenTypeInt INSTANCE = new ZenTypeInt(); - - //private static final JavaMethod INT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Integer.class, "toString", byte.class); private static final String ANY_NAME = "any/AnyInt"; private static final String ANY_NAME_2 = "any.AnyInt"; - private ZenTypeInt() {} + public ZenTypeInt(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleI2B(null)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF)); - rules.registerCastingRule(SHORT, new CastingRuleI2S(null)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF)); - rules.registerCastingRule(LONG, new CastingRuleI2L(null)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleI2L(null))); - rules.registerCastingRule(FLOAT, new CastingRuleI2F(null)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF, new CastingRuleI2F(null))); - rules.registerCastingRule(DOUBLE, new CastingRuleI2D(null)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF, new CastingRuleI2D(null))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleI2B(null, types)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF)); + rules.registerCastingRule(types.SHORT, new CastingRuleI2S(null, types)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF)); + rules.registerCastingRule(types.LONG, new CastingRuleI2L(null, types)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleI2L(null, types))); + rules.registerCastingRule(types.FLOAT, new CastingRuleI2F(null, types)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF, new CastingRuleI2F(null, types))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleI2D(null, types)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF, new CastingRuleI2D(null, types))); - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(INT_TOSTRING_STATIC)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, INT))); + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.INT_TOSTRING_STATIC)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.INT))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return (type.getNumberType() != 0 && type.getNumberType() >= NUM_INT) - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.getNumberType() != 0 - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return Type.INT_TYPE; @@ -115,19 +85,25 @@ public int getNumberType() { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { - environment.error(position, "bool value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + environment.error(position, "int value has no members"); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - return null; + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { + IPartialExpression result = staticMemberExpansion(position, environment, name); + if (result == null) { + environment.error(position, "int value has no static members"); + return new ExpressionInvalid(position, environment); + } else { + return result; + } } @Override @@ -136,87 +112,48 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - output.i2b(); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.i2b(); - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - output.i2s(); - } else if (type == ZenTypeShortObject.INSTANCE) { - output.i2s(); - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - // nothing to do - } else if (type == ZenTypeIntObject.INSTANCE) { - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - output.i2l(); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.i2l(); - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - output.i2f(); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.i2f(); - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - output.i2d(); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.i2d(); - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Integer.class, "toString", String.class, int.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(I)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { - return STRING.binary( + TypeRegistry types = environment.getTypes(); + + return types.STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, types.STRING), + right.cast(position, types.STRING), + OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "int doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call integer values"); return new ExpressionInvalid(position); - } + }*/ @Override public Class toJavaClass() { @@ -229,7 +166,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionInt(environment), ANY_NAME, Type.INT_TYPE)); @@ -239,15 +178,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionInt(position, 0, INT); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionInt(position, environment, 0, environment.getTypes().INT); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().INTOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionInt implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionInt(IEnvironmentGlobal environment) { + public AnyDefinitionInt(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -304,7 +255,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(INT, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.INT, output, environment, 0); } output.iConst0(); @@ -319,7 +270,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(INT, output, environment, 0, 1); + expansion.compileAnyCast(types.INT, output, environment, 0, 1); } throwCastException(output, "int", 1); @@ -351,7 +302,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iAdd(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -363,7 +314,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iSub(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -381,10 +332,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, int.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -394,7 +345,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iMul(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -406,7 +357,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iDiv(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -418,7 +369,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iRem(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -430,7 +381,7 @@ public void defineAnd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iAnd(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -442,7 +393,7 @@ public void defineOr(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iOr(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -454,7 +405,7 @@ public void defineXor(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iXor(); output.invokeSpecial(ANY_NAME, "", "(I)V"); output.returnObject(); @@ -471,7 +422,7 @@ public void defineRange(MethodOutput output) { public void defineCompareTo(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.iSub(); output.returnInt(); } @@ -577,7 +528,7 @@ public void defineAs(MethodOutput output) { output.store(Type.INT_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(INT, output, environment, localValue, 1); + expansion.compileAnyCast(types.INT, output, environment, localValue, 1); } throwCastException(output, "int", 1); @@ -628,7 +579,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.class, "asInt", int.class); output.ifICmpNE(lblNope); output.iConst1(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java index 35382597..e09b0309 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java @@ -7,132 +7,117 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeIntObject extends ZenType { - public static final ZenTypeIntObject INSTANCE = new ZenTypeIntObject(); + private final ZenType INT; - private ZenTypeIntObject() {} + public ZenTypeIntObject(IScopeGlobal environment, ZenType INT) { + super(environment); + + this.INT = INT; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return INT.unary(position, environment, value.cast(position, environment, INT), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return INT.unary(position, environment, value.cast(position, INT), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return INT.binary(position, environment, left.cast(position, environment, INT), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return INT.binary(position, environment, left.cast(position, INT), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return INT.trinary(position, environment, first.cast(position, environment, INT), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return INT.trinary(position, environment, first.cast(position, INT), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return INT.compare(position, environment, left.cast(position, environment, INT), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return INT.compare(position, environment, left.cast(position, INT), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return INT.getMember(position, environment, value.eval(environment).cast(position, environment, INT), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return INT.getMember(position, environment, value.eval().cast(position, INT), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return INT.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - return INT.call(position, environment, receiver.cast(position, environment, INT), arguments); - } + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { + return INT.call(position, environment, receiver.cast(position, INT), arguments); + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return INT.makeIterator(numValues, methodOutput); + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return INT.makeIterator(numValues, output); } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod( - BYTE_VALUEOF, - new CastingRuleVirtualMethod(BYTE_VALUE))); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod( + methods.BYTE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(INTOBJECT, INT_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, INT), - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.INTOBJECT, methods.INT_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.INT), + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return INT.canCastImplicit(type, environment); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return INT.canCastExplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return Integer.class; @@ -154,52 +139,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == INT) { - environment.getOutput().invokeVirtual(Integer.class, "intValue", int.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Integer.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Integer.class, "intValue", int.class); - output.invokeStatic(INT.getAnyClassName(environment), "valueOf", "(I)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Integer.class, "intValue", int.class); - INT.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "int?"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return INT.getAnyClassName(environment); + public String getAnyClassName() { + return INT.getAnyClassName(); + } + + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return INT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntRange.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntRange.java deleted file mode 100644 index 4aac285c..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntRange.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.type; - -import org.objectweb.asm.Label; -import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.compiler.ITypeRegistry; -import stanhebben.zenscript.compiler.TypeRegistry; -import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.expression.ExpressionCallVirtual; -import stanhebben.zenscript.expression.ExpressionNull; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; -import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IntRange; - -/** - * - * @author Stan - */ -public class ZenTypeIntRange extends ZenType { - public static final ZenTypeIntRange INSTANCE = new ZenTypeIntRange(); - - private final IJavaMethod methodFrom; - private final IJavaMethod methodTo; - - private ZenTypeIntRange() { - ITypeRegistry dummy = new TypeRegistry(); - methodFrom = JavaMethod.get(dummy, IntRange.class, "getFrom"); - methodTo = JavaMethod.get(dummy, IntRange.class, "getTo"); - } - - @Override - public String getAnyClassName(IEnvironmentGlobal global) { - throw new UnsupportedOperationException("range values cannot yet be used as any value"); - } - - @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - environment.error(position, "cannot apply unary operators on int ranges"); - return new ExpressionInvalid(position); - } - - @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - environment.error(position, "cannot apply binary operators on int ranges"); - return new ExpressionInvalid(position); - } - - @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - environment.error(position, "cannot apply ternary operators on int ranges"); - return new ExpressionInvalid(position); - } - - @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - environment.error(position, "cannot compare int ranges"); - return new ExpressionInvalid(position, BOOL); - } - - @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - if (name.equals("from")) { - return new ExpressionCallVirtual(position, environment, methodFrom, value.eval(environment)); - } else if (name.equals("to")) { - return new ExpressionCallVirtual(position, environment, methodTo, value.eval(environment)); - } else { - environment.error(position, "no such member " + name + " in int range"); - return new ExpressionInvalid(position); - } - } - - @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { - environment.error(position, "int ranges don't have static members"); - return new ExpressionInvalid(position); - } - - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - environment.error(position, "int ranges cannot be called"); - return new ExpressionInvalid(position); - } - - @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - - } - - /*@Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type == this) { - return value; - } - - environment.error(position, "cannot cast int ranges to any other type"); - return new ExpressionInvalid(position); - }*/ - - @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - if (numValues == 1) { - return new IntRangeIterator(methodOutput); - } else { - return null; - } - } - - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this; - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this; - }*/ - - @Override - public Class toJavaClass() { - return IntRange.class; - } - - @Override - public Type toASMType() { - return Type.getType(IntRange.class); - } - - @Override - public int getNumberType() { - return 0; - } - - @Override - public String getSignature() { - return signature(IntRange.class); - } - - @Override - public boolean isPointer() { - return true; - } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. - }*/ - - @Override - public String getName() { - return "int.."; - } - - @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); - } - - private class IntRangeIterator implements IZenIterator { - private final IEnvironmentMethod method; - - public IntRangeIterator(IEnvironmentMethod methodOutput) { - this.method = methodOutput; - } - - @Override - public void compileStart(int[] locals) { - MethodOutput output = method.getOutput(); - - output.dup(); // copy IntRange reference - methodFrom.invokeVirtual(output); - output.storeInt(locals[0]); - } - - @Override - public void compilePreIterate(int[] locals, Label exit) { - - } - - @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - MethodOutput output = method.getOutput(); - - output.dup(); // copy IntRange reference - methodTo.invokeVirtual(output); - - output.loadInt(locals[0]); - output.iinc(locals[0]); - output.dup(); - output.storeInt(locals[0]); - - output.ifICmpGT(repeat); - output.goTo(exit); - } - - @Override - public void compileEnd() { - method.getOutput().pop(); // remove IntRange reference - } - - @Override - public ZenType getType(int i) { - return INT; - } - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java index 67066a16..4de19149 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java @@ -5,10 +5,10 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,96 +16,66 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTEOBJECT; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUEOF; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleI2B; -import stanhebben.zenscript.type.casting.CastingRuleI2D; -import stanhebben.zenscript.type.casting.CastingRuleI2F; -import stanhebben.zenscript.type.casting.CastingRuleI2L; -import stanhebben.zenscript.type.casting.CastingRuleI2S; -import stanhebben.zenscript.type.casting.CastingRuleL2F; -import stanhebben.zenscript.type.casting.CastingRuleL2I; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASLONG; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleI2B; +import zenscript.symbolic.type.casting.CastingRuleI2D; +import zenscript.symbolic.type.casting.CastingRuleI2F; +import zenscript.symbolic.type.casting.CastingRuleI2L; +import zenscript.symbolic.type.casting.CastingRuleI2S; +import zenscript.symbolic.type.casting.CastingRuleL2F; +import zenscript.symbolic.type.casting.CastingRuleL2I; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeLong extends ZenType { - public static final ZenTypeLong INSTANCE = new ZenTypeLong(); - - //private static final JavaMethod LONG_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Long.class, "toString", long.class); private static final String ANY_NAME = "any/AnyLong"; private static final String ANY_NAME_2 = "any.AnyLong"; - private ZenTypeLong() {} + public ZenTypeLong(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleI2B(new CastingRuleL2I(null))); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleL2I(null)))); - rules.registerCastingRule(SHORT, new CastingRuleI2S(new CastingRuleL2I(null))); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleL2I(null)))); - rules.registerCastingRule(INT, new CastingRuleL2I(null)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleI2L(null))); - rules.registerCastingRule(FLOAT, new CastingRuleL2F(null)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF, new CastingRuleI2F(null))); - rules.registerCastingRule(DOUBLE, new CastingRuleI2D(null)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF, new CastingRuleI2D(null))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleI2B(new CastingRuleL2I(null, types), types)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF, new CastingRuleI2B(new CastingRuleL2I(null, types), types))); + rules.registerCastingRule(types.SHORT, new CastingRuleI2S(new CastingRuleL2I(null, types), types)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF, new CastingRuleI2S(new CastingRuleL2I(null, types), types))); + rules.registerCastingRule(types.INT, new CastingRuleL2I(null, types)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleI2L(null, types))); + rules.registerCastingRule(types.FLOAT, new CastingRuleL2F(null, types)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF, new CastingRuleI2F(null, types))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleI2D(null, types)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF, new CastingRuleI2D(null, types))); - rules.registerCastingRule(STRING, new CastingRuleStaticMethod(LONG_TOSTRING_STATIC)); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, LONG))); + rules.registerCastingRule(types.STRING, new CastingRuleStaticMethod(methods.LONG_TOSTRING_STATIC)); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.LONG))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return (type.getNumberType() != 0 && type.getNumberType() >= NUM_LONG) - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.getNumberType() != 0 - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return Type.LONG_TYPE; @@ -117,18 +87,18 @@ public int getNumberType() { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "bool value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return null; } @@ -138,91 +108,48 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(stanhebben.zenscript.util.ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - output.l2i(); - output.i2b(); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.l2i(); - output.i2b(); - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - output.l2i(); - output.i2s(); - } else if (type == ZenTypeShortObject.INSTANCE) { - output.l2i(); - output.i2s(); - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - output.l2i(); - } else if (type == ZenTypeIntObject.INSTANCE) { - output.l2i(); - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - // nothing to do - } else if (type == ZenTypeLongObject.INSTANCE) { - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - output.l2f(); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.l2f(); - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - output.l2d(); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.l2d(); - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Long.class, "toString", String.class, long.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(J)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { + ZenType STRING = environment.getTypes().STRING; + return STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, STRING), + right.cast(position, STRING), + OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "long doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a long value"); - return new ExpressionInvalid(position); - } + return new ExpressionInvalid(position, environment); + */ @Override public Class toJavaClass() { @@ -235,7 +162,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionLong(environment), ANY_NAME, Type.LONG_TYPE)); @@ -250,15 +179,27 @@ public boolean isLarge() { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionInt(position, 0, LONG); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionInt(position, environment, 0, environment.getTypes().LONG); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().LONGOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionLong implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionLong(IEnvironmentGlobal environment) { + public AnyDefinitionLong(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -315,7 +256,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(LONG, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.LONG, output, environment, 0); } output.iConst0(); @@ -330,7 +271,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(LONG, output, environment, 0, 1); + expansion.compileAnyCast(types.LONG, output, environment, 0, 1); } throwCastException(output, "long", 1); @@ -362,7 +303,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lAdd(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -374,7 +315,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lSub(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -392,10 +333,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, long.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.class, "asString", String.class); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); output.returnObject(); } @@ -405,7 +346,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lMul(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -417,7 +358,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lDiv(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -429,7 +370,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lRem(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -441,7 +382,7 @@ public void defineAnd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lAnd(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -453,7 +394,7 @@ public void defineOr(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lOr(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -465,7 +406,7 @@ public void defineXor(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lXor(); output.invokeSpecial(ANY_NAME, "", "(J)V"); output.returnObject(); @@ -483,7 +424,7 @@ public void defineCompareTo(MethodOutput output) { // return Long.compare(x, y) getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.invokeStatic(Long.class, "compare", int.class, long.class, long.class); output.returnInt(); } @@ -591,7 +532,7 @@ public void defineAs(MethodOutput output) { output.store(Type.LONG_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(LONG, output, environment, localValue, 1); + expansion.compileAnyCast(types.LONG, output, environment, localValue, 1); } throwCastException(output, "long", 1); @@ -642,7 +583,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASLONG.invokeVirtual(output); + output.invokeInterface(IAny.class, "asLong", long.class); output.lCmp(); output.ifICmpNE(lblNope); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java index 3367ac3f..95c8cbb8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java @@ -7,132 +7,117 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeLongObject extends ZenType { - public static final ZenTypeLongObject INSTANCE = new ZenTypeLongObject(); + private final ZenType LONG; - private ZenTypeLongObject() {} + public ZenTypeLongObject(IScopeGlobal environment, ZenType LONG) { + super(environment); + + this.LONG = LONG; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return LONG.unary(position, environment, value.cast(position, environment, LONG), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return LONG.unary(position, environment, value.cast(position, LONG), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return LONG.binary(position, environment, left.cast(position, environment, LONG), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return LONG.binary(position, environment, left.cast(position, LONG), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return LONG.trinary(position, environment, first.cast(position, environment, LONG), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return LONG.trinary(position, environment, first.cast(position, LONG), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return LONG.compare(position, environment, left.cast(position, environment, LONG), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return LONG.compare(position, environment, left.cast(position, LONG), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return LONG.getMember(position, environment, value.eval(environment).cast(position, environment, LONG), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return LONG.getMember(position, environment, value.eval().cast(position, LONG), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return LONG.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { return LONG.call(position, environment, receiver.cast(position, environment, LONG), arguments); + }*/ + + @Override + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return LONG.makeIterator(numValues, output); } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { - return LONG.makeIterator(numValues, methodOutput); - } - - @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod( - BYTE_VALUEOF, - new CastingRuleVirtualMethod(BYTE_VALUE))); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(LONGOBJECT, LONG_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, LONG), - new CastingRuleVirtualMethod(LONG_VALUE))); + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod( + methods.BYTE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); + + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.LONGOBJECT, methods.LONG_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.LONG), + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return LONG.canCastImplicit(type, environment); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return LONG.canCastExplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return Long.class; @@ -154,52 +139,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == LONG) { - environment.getOutput().invokeVirtual(Long.class, "longValue", long.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Long.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Long.class, "longValue", long.class); - output.invokeStatic(LONG.getAnyClassName(environment), "valueOf", "(J)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Long.class, "longValue", long.class); - LONG.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "long"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return LONG.getAnyClassName(environment); + public String getAnyClassName() { + return LONG.getAnyClassName(); + } + + @Override + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public ZenType nonNull() { + return LONG; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java index 62e5ef2a..e84972a0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java @@ -10,6 +10,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -20,22 +21,8 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.ZenCaster; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.IterableList; -import stanhebben.zenscript.annotations.IterableMap; -import stanhebben.zenscript.annotations.IterableSimple; -import stanhebben.zenscript.annotations.ZenOperator; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenMemberGetter; -import stanhebben.zenscript.annotations.ZenMemberSetter; -import stanhebben.zenscript.annotations.ZenSetter; -import stanhebben.zenscript.annotations.ZenMethod; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.compiler.ITypeRegistry; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticUnary; import stanhebben.zenscript.expression.ExpressionCallVirtual; @@ -44,14 +31,11 @@ import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingNotNull; -import stanhebben.zenscript.type.casting.CastingRuleNone; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.iterator.IteratorIterable; import stanhebben.zenscript.type.iterator.IteratorList; import stanhebben.zenscript.type.iterator.IteratorMap; import stanhebben.zenscript.type.iterator.IteratorMapKeys; +import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.type.natives.ZenNativeCaster; import stanhebben.zenscript.type.natives.ZenNativeMember; @@ -60,10 +44,30 @@ import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.annotations.CompareType; +import zenscript.annotations.IterableList; +import zenscript.annotations.IterableMap; +import zenscript.annotations.IterableSimple; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenCaster; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMemberGetter; +import zenscript.annotations.ZenMemberSetter; +import zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenOperator; +import zenscript.annotations.ZenSetter; +import zenscript.parser.type.TypeParser; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingNotNull; +import zenscript.symbolic.type.casting.CastingRuleNone; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.type.generic.TypeCapture; +import zenscript.util.ZenPosition; /** * @@ -76,6 +80,8 @@ public class ZenTypeNative extends ZenType { private static final int ITERATOR_MAP = 3; private final Class cls; + private final TypeCapture capture; + private final String anyName; private final String anyName2; private final List implementing; @@ -92,9 +98,14 @@ public class ZenTypeNative extends ZenType { private Annotation iteratorAnnotation; private ZenType iteratorKeyType; private ZenType iteratorValueType; + private IJavaMethod functionalInterface; - public ZenTypeNative(Class cls) { + public ZenTypeNative(IScopeGlobal environment, Class cls, TypeCapture capture) { + super(environment); + this.cls = cls; + this.capture = capture; + members = new HashMap(); staticMembers = new HashMap(); casters = new ArrayList(); @@ -107,7 +118,7 @@ public ZenTypeNative(Class cls) { anyName = anyName2.replace('.', '/'); } - public void complete(ITypeRegistry types) { + public void complete(TypeRegistry types) { int iterator = ITERATOR_NONE; Annotation _iteratorAnnotation = null; String _classPkg = cls.getPackage().getName().replace('/', '.'); @@ -160,7 +171,7 @@ public void complete(ITypeRegistry types) { for (Annotation annotation : method.getAnnotations()) { if (annotation instanceof ZenCaster) { - casters.add(new ZenNativeCaster(JavaMethod.get(types, method))); + casters.add(new ZenNativeCaster(JavaMethod.get(types, method, capture))); isMethod = false; } else if (annotation instanceof ZenGetter) { ZenGetter getterAnnotation = (ZenGetter) annotation; @@ -169,7 +180,7 @@ public void complete(ITypeRegistry types) { if (!members.containsKey(name)) { members.put(name, new ZenNativeMember()); } - members.get(name).setGetter(new JavaMethod(method, types)); + members.get(name).setGetter(new JavaMethod(method, types, capture)); isMethod = false; } else if (annotation instanceof ZenSetter) { ZenSetter setterAnnotation = (ZenSetter) annotation; @@ -178,12 +189,12 @@ public void complete(ITypeRegistry types) { if (!members.containsKey(name)) { members.put(name, new ZenNativeMember()); } - members.get(name).setSetter(new JavaMethod(method, types)); + members.get(name).setSetter(new JavaMethod(method, types, capture)); isMethod = false; } else if (annotation instanceof ZenMemberGetter) { - binaryOperators.add(new ZenNativeOperator(OperatorType.MEMBERGETTER, new JavaMethod(method, types))); + binaryOperators.add(new ZenNativeOperator(OperatorType.MEMBERGETTER, new JavaMethod(method, types, capture))); } else if (annotation instanceof ZenMemberSetter) { - trinaryOperators.add(new ZenNativeOperator(OperatorType.MEMBERSETTER, new JavaMethod(method, types))); + trinaryOperators.add(new ZenNativeOperator(OperatorType.MEMBERSETTER, new JavaMethod(method, types, capture))); } else if (annotation instanceof ZenOperator) { ZenOperator operatorAnnotation = (ZenOperator) annotation; switch (operatorAnnotation.value()) { @@ -194,7 +205,7 @@ public void complete(ITypeRegistry types) { } else { unaryOperators.add(new ZenNativeOperator( operatorAnnotation.value(), - new JavaMethod(method, types))); + new JavaMethod(method, types, capture))); } break; case ADD: @@ -215,7 +226,7 @@ public void complete(ITypeRegistry types) { } else { binaryOperators.add(new ZenNativeOperator( operatorAnnotation.value(), - new JavaMethod(method, types))); + new JavaMethod(method, types, capture))); } break; case INDEXSET: @@ -224,7 +235,7 @@ public void complete(ITypeRegistry types) { } else { trinaryOperators.add(new ZenNativeOperator( operatorAnnotation.value(), - new JavaMethod(method, types))); + new JavaMethod(method, types, capture))); } break; } @@ -244,12 +255,12 @@ public void complete(ITypeRegistry types) { if (!staticMembers.containsKey(methodName)) { staticMembers.put(methodName, new ZenNativeMember()); } - staticMembers.get(methodName).addMethod(new JavaMethod(method, types)); + staticMembers.get(methodName).addMethod(new JavaMethod(method, types, capture)); } else { if (!members.containsKey(methodName)) { members.put(methodName, new ZenNativeMember()); } - members.get(methodName).addMethod(new JavaMethod(method, types)); + members.get(methodName).addMethod(new JavaMethod(method, types, capture)); } } } @@ -258,33 +269,41 @@ public void complete(ITypeRegistry types) { this.iteratorAnnotation = _iteratorAnnotation; this.classPkg = _classPkg; this.className = _className; + + functionalInterface = null; + + if (cls.isInterface() && cls.getMethods().length == 1) { + functionalInterface = JavaMethod.get(types, cls.getMethods()[0], capture); + } } public Class getNativeClass() { return cls; } - public void complete(IEnvironmentGlobal environment) { + public void complete() { if (iteratorAnnotation instanceof IterableSimple) { IterableSimple annotation = (IterableSimple) iteratorAnnotation; - iteratorValueType = ZenType.parse(annotation.value(), environment); + iteratorValueType = TypeParser.parseDirect(annotation.value(), getEnvironment()); } if (iteratorAnnotation instanceof IterableList) { IterableList annotation = (IterableList) iteratorAnnotation; - iteratorKeyType = ZenTypeInt.INSTANCE; - iteratorValueType = ZenType.parse(annotation.value(), environment); + iteratorKeyType = getEnvironment().getTypes().INT; + iteratorValueType = TypeParser.parseDirect(annotation.value(), getEnvironment()); } if (iteratorAnnotation instanceof IterableMap) { IterableMap annotation = (IterableMap) iteratorAnnotation; - iteratorKeyType = ZenType.parse(annotation.key(), environment); - iteratorValueType = ZenType.parse(annotation.value(), environment); + iteratorKeyType = TypeParser.parseDirect(annotation.key(), getEnvironment()); + iteratorValueType = TypeParser.parseDirect(annotation.value(), getEnvironment()); } } @Override - public String getAnyClassName(IEnvironmentGlobal global) { - if (!global.containsClass(anyName2)) { - global.putClass(anyName2, new byte[0]); + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + + if (!environment.containsClass(anyName2)) { + environment.putClass(anyName2, new byte[0]); //global.putClass(anyName2, AnyClassWriter.construct(new AnyNativeDefinition(global), anyName2, toASMType())); } @@ -292,7 +311,7 @@ public String getAnyClassName(IEnvironmentGlobal global) { } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { ZenNativeMember member = members.get(name); if (member == null) { for (ZenTypeNative type : implementing) { @@ -304,7 +323,7 @@ public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal env } if (member == null) { - Expression evalue = value.eval(environment); + Expression evalue = value.eval(); IPartialExpression member2 = memberExpansion(position, environment, evalue, name); if (member2 == null) { for (ZenTypeNative type : implementing) { @@ -313,16 +332,16 @@ public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal env } } if (member2 == null) { - if (hasBinary(STRING, OperatorType.MEMBERGETTER)) { + if (hasBinary(getEnvironment().getTypes().STRING, OperatorType.MEMBERGETTER)) { return binary( position, environment, - value.eval(environment), - new ExpressionString(position, name), + value.eval(), + new ExpressionString(position, environment, name), OperatorType.MEMBERGETTER); } else { environment.error(position, "No such member in " + getName() + ": " + name); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } } else { return member2; @@ -333,7 +352,7 @@ public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal env } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { ZenNativeMember member = staticMembers.get(name); if (member == null) { for (ZenTypeNative type : implementing) { @@ -353,7 +372,7 @@ public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlob } if (member2 == null) { environment.error(position, "No such static member in " + getName() + ": " + name); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return member2; } @@ -363,30 +382,30 @@ public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlob } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { switch (iteratorType) { case ITERATOR_NONE: break; case ITERATOR_ITERABLE: if (numValues == 1) { - return new IteratorIterable(methodOutput.getOutput(), iteratorValueType); + return new IteratorIterable(output, iteratorValueType); } else if (numValues == 2) { - return new IteratorList(methodOutput.getOutput(), iteratorValueType); + return new IteratorList(getEnvironment(), output, iteratorValueType); } break; case ITERATOR_MAP: if (numValues == 1) { - return new IteratorMapKeys(methodOutput.getOutput(), new ZenTypeAssociative(iteratorValueType, iteratorKeyType)); + return new IteratorMapKeys(output, new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); } else if (numValues == 2) { - return new IteratorMap(methodOutput.getOutput(), new ZenTypeAssociative(iteratorValueType, iteratorKeyType)); + return new IteratorMap(output, new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); } break; case ITERATOR_LIST: if (numValues == 1) { // list is also iterable - return new IteratorIterable(methodOutput.getOutput(), iteratorValueType); + return new IteratorIterable(output, iteratorValueType); } else if (numValues == 2) { - return new IteratorList(methodOutput.getOutput(), iteratorValueType); + return new IteratorList(getEnvironment(), output, iteratorValueType); } break; } @@ -394,21 +413,23 @@ public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + if (cls.getSuperclass() != null) { - ZenType superType = environment.getType(cls.getSuperclass()); + ZenType superType = types.getNativeType(null, cls.getGenericSuperclass(), capture); rules.registerCastingRule(superType, new CastingRuleNone(this, superType)); - superType.constructCastingRules(environment, rules, followCasters); + superType.constructCastingRules(rules, followCasters); } - for (Class iface : cls.getInterfaces()) { - ZenType ifaceType = environment.getType(iface); + for (java.lang.reflect.Type iface : cls.getGenericInterfaces()) { + ZenType ifaceType = types.getNativeType(null, iface, capture); rules.registerCastingRule(ifaceType, new CastingRuleNone(this, ifaceType)); - ifaceType.constructCastingRules(environment, rules, followCasters); + ifaceType.constructCastingRules(rules, followCasters); } if (followCasters) { @@ -416,25 +437,25 @@ public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDe // TODO: implement } - TypeExpansion expansion = environment.getExpansion(getName()); + TypeExpansion expansion = getEnvironment().getExpansion(getName()); if (expansion != null) { - expansion.constructCastingRules(environment, rules); + expansion.constructCastingRules(getEnvironment(), rules); } } - rules.registerCastingRule(BOOL, new CastingNotNull(this)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( - getAnyClassName(environment), + rules.registerCastingRule(types.BOOL, new CastingNotNull(this, types.BOOL)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( + getAnyClassName(), "valueOf", - ANY, + types.ANY, this))); } @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { + public boolean canCastExplicit(ZenType type) { return type == this - || canCastImplicit(type, environment) - || type.canCastExplicit(this, environment); + || canCastImplicit(type) + || type.canCastExplicit(this); } @Override @@ -458,12 +479,12 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { for (ZenNativeOperator unaryOperator : unaryOperators) { if (unaryOperator.getOperator() == operator) { return new ExpressionCallVirtual(position, environment, unaryOperator.getMethod(), value); @@ -471,11 +492,11 @@ public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Ex } environment.error(position, "operator not supported"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { for (ZenNativeOperator binaryOperator : binaryOperators) { if (binaryOperator.getOperator() == operator) { return new ExpressionCallVirtual(position, environment, binaryOperator.getMethod(), left, right); @@ -483,11 +504,11 @@ public Expression binary(ZenPosition position, IEnvironmentGlobal environment, E } environment.error(position, "operator not supported"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { for (ZenNativeOperator trinaryOperator : trinaryOperators) { if (trinaryOperator.getOperator() == operator) { return new ExpressionCallVirtual(position, environment, trinaryOperator.getMethod(), first, second, third); @@ -495,11 +516,11 @@ public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, } environment.error(position, "operator not supported"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { if (type == CompareType.EQ || type == CompareType.NE) { for (ZenNativeOperator binaryOperator : binaryOperators) { if (binaryOperator.getOperator() == OperatorType.EQUALS) { @@ -507,18 +528,34 @@ public Expression compare(ZenPosition position, IEnvironmentGlobal environment, if (type == CompareType.EQ) { return result; } else { - return new ExpressionArithmeticUnary(position, OperatorType.NOT, result); + return new ExpressionArithmeticUnary(position, environment, OperatorType.NOT, result); } } } } - return new ExpressionCompareGeneric(position, binary(position, environment, left, right, OperatorType.COMPARE), type); + return new ExpressionCompareGeneric(position, environment, binary(position, environment, left, right, OperatorType.COMPARE), type); } - + @Override + public List getMethods() { + IJavaMethod functionalInterface = getFunction(); + + if (functionalInterface == null) { + return Collections.EMPTY_LIST; + } else { + return Collections.singletonList(getFunction()); + } + } + + @Override + public IJavaMethod getFunction() { + return functionalInterface; + } + + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { // TODO: support functional interfaces throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @@ -527,7 +564,7 @@ public Expression call( public ZenType[] predictCallTypes(int numArguments) { // TODO: support functional interface return new ZenType[numArguments]; - } + }*/ private boolean hasBinary(ZenType type, OperatorType operator) { for (ZenNativeOperator binaryOperator : binaryOperators) { @@ -539,95 +576,38 @@ private boolean hasBinary(ZenType type, OperatorType operator) { return false; } - /*private void compileAnyUnary(String anySignature, OperatorType operator, IEnvironmentMethod environment) { - List operators = new ArrayList(); - for (ZenNativeOperator unary : this.unaryOperators) { - if (unary.getOperator() == operator) { - operators.add(unary); - } - } - - MethodOutput output = environment.getOutput(); - if (operators.isEmpty()) { - output.newObject(ZenRuntimeException.class); - output.dup(); - output.constant("Cannot " + operator + " " + classPkg + '.' + className); - output.construct(ZenRuntimeException.class, String.class); - output.aThrow(); - } else { - if (operators.size() > 1) { - environment.error(null, "Multiple " + operator + " operators for " + cls); - } - - ZenNativeOperator unary = operators.get(0); - - output.loadObject(0); - output.getField(anySignature, "value", signature(cls)); - - output.invoke(unary.getMethod()); - environment.getType(unary.getClass()).compileCast(null, environment, ANY); - output.returnObject(); - } - } - - private void compileAnyBinary(String anySignature, OperatorType operator, IEnvironmentMethod environment) { - List operators = new ArrayList(); - for (ZenNativeOperator binary : binaryOperators) { - if (binary.getOperator() == operator) { - operators.add(binary); - } - } - - MethodOutput output = environment.getOutput(); - if (operators.isEmpty()) { - output.newObject(ZenRuntimeException.class); - output.dup(); - output.constant("Cannot " + operator + " on " + classPkg + '.' + className); - output.construct(ZenRuntimeException.class, String.class); - output.aThrow(); - } else if (operators.size() == 1) { - ZenNativeOperator binary = operators.get(0); - - output.loadObject(0); - output.getField(anySignature, "value", signature(cls)); - output.loadObject(1); - output.invoke(binary.getMethod()); - environment.getType(binary.getClass()).compileCast(null, environment, ANY); - output.returnObject(); - } else { - environment.error(null, "Multiple " + operator + " operators for " + cls + " (which is not yet supported)"); - } - } - - public void compileAnyMember(String anySignature, EnvironmentMethod environment) { - // TODO: complete - MethodOutput output = environment.getOutput(); - output.aConstNull(); - output.returnObject(); - }*/ - @Override public String getName() { return classPkg + '.' + className; } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; } - private void addSubtypes(Queue todo, ITypeRegistry types) { + private void addSubtypes(Queue todo, TypeRegistry types) { while (!todo.isEmpty()) { ZenTypeNative current = todo.poll(); - if (current.cls.getSuperclass() != Object.class) { - ZenType type = types.getType(current.cls.getSuperclass()); + if (current.cls.getGenericSuperclass() != Object.class) { + ZenType type = types.getNativeType(null, current.cls.getGenericSuperclass(), capture); if (type instanceof ZenTypeNative) { todo.offer((ZenTypeNative) type); implementing.add((ZenTypeNative) type); } } - for (Class iface : current.cls.getInterfaces()) { - ZenType type = types.getType(iface); + for (java.lang.reflect.Type iface : current.cls.getGenericInterfaces()) { + ZenType type = types.getNativeType(null, iface, capture); if (type instanceof ZenTypeNative) { todo.offer((ZenTypeNative) type); implementing.add((ZenTypeNative) type); @@ -637,9 +617,9 @@ private void addSubtypes(Queue todo, ITypeRegistry types) { } private class AnyNativeDefinition implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; - public AnyNativeDefinition(IEnvironmentGlobal environment) { + public AnyNativeDefinition(IScopeGlobal environment) { this.environment = environment; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java index 0dbacc6f..f964e319 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java @@ -7,34 +7,34 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.CastingRuleNone; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.type.casting.CastingRuleNone; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class ZenTypeNull extends ZenType { - public static final ZenTypeNull INSTANCE = new ZenTypeNull(); private static final Type TYPE = Type.getType(Object.class); - private ZenTypeNull() { - + public ZenTypeNull(IScopeGlobal environment) { + super(environment); } @Override - public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) { - if (type.isPointer()) { + public ICastingRule getCastingRule(ZenType type) { + if (type.isNullable()) { return new CastingRuleNone(this, type); } else { return null; @@ -42,72 +42,62 @@ public ICastingRule getCastingRule(ZenType type, IEnvironmentGlobal environment) } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - environment.error(position, "null has not operators"); - return new ExpressionInvalid(position); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + environment.error(position, "null has no operators"); + return new ExpressionInvalid(position, environment); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - environment.error(position, "null has not operators"); - return new ExpressionInvalid(position); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + environment.error(position, "null has no operators"); + return new ExpressionInvalid(position, environment); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - environment.error(position, "null has not operators"); - return new ExpressionInvalid(position); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + environment.error(position, "null has no operators"); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - environment.error(position, "null has not operators"); - return new ExpressionInvalid(position); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + environment.error(position, "null has no operators"); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { environment.error(position, "null doesn't have members"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { environment.error(position, "null doesn't have static members"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } - @Override + /*@Override public Expression call( ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call null values"); return new ExpressionInvalid(position); - } + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod environment) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return type.isPointer(); - }*/ - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type.isPointer(); + public boolean canCastExplicit(ZenType type) { + return type.isNullable(); } - - /*@Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - return value; - }*/ @Override public Class toJavaClass() { @@ -130,27 +120,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - // nothing to do - }*/ - @Override public String getName() { return "null"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { throw new UnsupportedOperationException("The null type does not have an any type"); } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + throw new UnsupportedOperationException("Null type cannot be non-null"); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java index 471bf34b..bdea8a81 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java @@ -5,10 +5,8 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArithmeticBinary; import stanhebben.zenscript.expression.ExpressionArithmeticCompare; @@ -16,88 +14,64 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTEOBJECT; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUEOF; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleI2B; -import stanhebben.zenscript.type.casting.CastingRuleI2D; -import stanhebben.zenscript.type.casting.CastingRuleI2F; -import stanhebben.zenscript.type.casting.CastingRuleI2L; -import stanhebben.zenscript.type.casting.CastingRuleNone; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSHORT; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleI2B; +import zenscript.symbolic.type.casting.CastingRuleI2D; +import zenscript.symbolic.type.casting.CastingRuleI2F; +import zenscript.symbolic.type.casting.CastingRuleI2L; +import zenscript.symbolic.type.casting.CastingRuleNone; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeShort extends ZenType { - public static final ZenTypeShort INSTANCE = new ZenTypeShort(); - - //private static final JavaMethod SHORT_TOSTRING = JavaMethod.get(EMPTY_REGISTRY, Short.class, "toString", short.class); private static final String ANY_NAME = "any/AnyShort"; private static final String ANY_NAME_2 = "any.AnyShort"; - private ZenTypeShort() {} + public ZenTypeShort(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod environment) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleI2B(null)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleStaticMethod(BYTE_VALUEOF)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleStaticMethod(SHORT_VALUEOF)); - rules.registerCastingRule(INT, new CastingRuleNone(SHORT, INT)); - rules.registerCastingRule(INTOBJECT, new CastingRuleStaticMethod(INT_VALUEOF)); - rules.registerCastingRule(LONG, new CastingRuleI2L(null)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleStaticMethod(LONG_VALUEOF, new CastingRuleI2L(null))); - rules.registerCastingRule(FLOAT, new CastingRuleI2F(null)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleStaticMethod(FLOAT_VALUEOF, new CastingRuleI2F(null))); - rules.registerCastingRule(DOUBLE, new CastingRuleI2D(null)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleStaticMethod(DOUBLE_VALUEOF, new CastingRuleI2D(null))); - rules.registerCastingRule(ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, BYTE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleI2B(null, types)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleStaticMethod(methods.BYTE_VALUEOF)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleStaticMethod(methods.SHORT_VALUEOF)); + rules.registerCastingRule(types.INT, new CastingRuleNone(types.SHORT, types.INT)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleStaticMethod(methods.INT_VALUEOF)); + rules.registerCastingRule(types.LONG, new CastingRuleI2L(null, types)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleStaticMethod(methods.LONG_VALUEOF, new CastingRuleI2L(null, types))); + rules.registerCastingRule(types.FLOAT, new CastingRuleI2F(null, types)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleStaticMethod(methods.FLOAT_VALUEOF, new CastingRuleI2F(null, types))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleI2D(null, types)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleStaticMethod(methods.DOUBLE_VALUEOF, new CastingRuleI2D(null, types))); + rules.registerCastingRule(types.ANY, new CastingRuleStaticMethod(JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, types.BYTE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return (type.getNumberType() != 0 && type.getNumberType() >= NUM_SHORT) - || type == ZenTypeString.INSTANCE - || type == ANY - || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return canCastImplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return Type.SHORT_TYPE; @@ -111,13 +85,13 @@ public int getNumberType() { @Override public IPartialExpression getMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "bool value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -126,7 +100,7 @@ public IPartialExpression getMember( @Override public IPartialExpression getStaticMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, String name) { return null; } @@ -137,86 +111,47 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == BYTE) { - output.i2b(); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.i2b(); - output.invokeStatic(Byte.class, "valueOf", Byte.class, byte.class); - } else if (type == SHORT) { - // nothing to do - } else if (type == ZenTypeShortObject.INSTANCE) { - output.invokeStatic(Short.class, "valueOf", Short.class, short.class); - } else if (type == INT) { - // nothing to do - } else if (type == ZenTypeIntObject.INSTANCE) { - output.invokeStatic(Integer.class, "valueOf", Integer.class, int.class); - } else if (type == LONG) { - output.i2l(); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.i2l(); - output.invokeStatic(Long.class, "valueOf", Long.class, long.class); - } else if (type == FLOAT) { - output.i2f(); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.i2f(); - output.invokeStatic(Float.class, "valueOf", Float.class, float.class); - } else if (type == DOUBLE) { - output.i2d(); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.i2d(); - output.invokeStatic(Double.class, "valueOf", Double.class, double.class); - } else if (type == STRING) { - output.invokeStatic(Short.class, "toString", String.class, short.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(S)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return new ExpressionArithmeticUnary(position, operator, value); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return new ExpressionArithmeticUnary(position, environment, operator, value); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT) { + ZenType STRING = environment.getTypes().STRING; + return STRING.binary( position, environment, - left.cast(position, environment, STRING), - right.cast(position, environment, STRING), OperatorType.CAT); + left.cast(position, STRING), + right.cast(position, STRING), OperatorType.CAT); } - return new ExpressionArithmeticBinary(position, operator, left, right.cast(position, environment, this)); + return new ExpressionArithmeticBinary(position, environment, operator, left, right.cast(position, this)); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "short doesn't support this operation"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return new ExpressionArithmeticCompare(position, type, left, right.cast(position, environment, this)); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return new ExpressionArithmeticCompare(position, environment, type, left, right.cast(position, this)); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call short values"); return new ExpressionInvalid(position); - } + }*/ @Override public Class toJavaClass() { @@ -229,7 +164,9 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionShort(environment), ANY_NAME, Type.SHORT_TYPE)); @@ -239,15 +176,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionInt(position, 0, SHORT); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionInt(position, environment, 0, environment.getTypes().SHORT); + } + + @Override + public ZenType nullable() { + return getEnvironment().getTypes().SHORTOBJECT; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionShort implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - public AnyDefinitionShort(IEnvironmentGlobal environment) { + public AnyDefinitionShort(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -304,7 +253,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(SHORT, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.SHORT, output, environment, 0); } output.iConst0(); @@ -319,7 +268,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(SHORT, output, environment, 0, 1); + expansion.compileAnyCast(types.SHORT, output, environment, 0, 1); } throwCastException(output, "short", 1); @@ -351,7 +300,7 @@ public void defineAdd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iAdd(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -363,7 +312,7 @@ public void defineSub(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iSub(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -381,10 +330,10 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, int.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asString", "()Ljava/lang/String;"); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); - output.invokeStatic(STRING.getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); + output.invokeStatic(types.STRING.getAnyClassName(), "valueOf", "(Ljava/lang/String;)" + IAny.NAME); output.returnObject(); } @@ -394,7 +343,7 @@ public void defineMul(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iMul(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -406,7 +355,7 @@ public void defineDiv(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iDiv(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -418,7 +367,7 @@ public void defineMod(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iRem(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -430,7 +379,7 @@ public void defineAnd(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iAnd(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -442,7 +391,7 @@ public void defineOr(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iOr(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -454,7 +403,7 @@ public void defineXor(MethodOutput output) { output.dup(); getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iXor(); output.invokeSpecial(ANY_NAME, "", "(S)V"); output.returnObject(); @@ -471,7 +420,7 @@ public void defineRange(MethodOutput output) { public void defineCompareTo(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.iSub(); output.returnInt(); } @@ -576,7 +525,7 @@ public void defineAs(MethodOutput output) { output.store(Type.SHORT_TYPE, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(SHORT, output, environment, localValue, 1); + expansion.compileAnyCast(types.SHORT, output, environment, localValue, 1); } throwCastException(output, "short", 1); @@ -627,7 +576,7 @@ public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASSHORT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asShort", "()S"); output.ifICmpNE(lblNope); output.iConst1(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java index f8dc285a..ce1dff43 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java @@ -7,132 +7,117 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.ANY; -import static stanhebben.zenscript.type.ZenType.BYTE; -import static stanhebben.zenscript.type.ZenType.BYTE_VALUE; -import static stanhebben.zenscript.type.ZenType.STRING; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleNullableVirtualMethod; -import stanhebben.zenscript.type.casting.CastingRuleVirtualMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; +import zenscript.symbolic.type.casting.CastingRuleVirtualMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenTypeShortObject extends ZenType { - public static final ZenTypeShortObject INSTANCE = new ZenTypeShortObject(); + private final ZenType SHORT; - private ZenTypeShortObject() {} + public ZenTypeShortObject(IScopeGlobal environment, ZenType SHORT) { + super(environment); + + this.SHORT = SHORT; + } @Override - public Expression unary(ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { - return SHORT.unary(position, environment, value.cast(position, environment, SHORT), operator); + public Expression unary(ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { + return SHORT.unary(position, environment, value.cast(position, SHORT), operator); } @Override - public Expression binary(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { - return SHORT.binary(position, environment, left.cast(position, environment, SHORT), right, operator); + public Expression binary(ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { + return SHORT.binary(position, environment, left.cast(position, SHORT), right, operator); } @Override - public Expression trinary(ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { - return SHORT.trinary(position, environment, first.cast(position, environment, SHORT), second, third, operator); + public Expression trinary(ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { + return SHORT.trinary(position, environment, first.cast(position, SHORT), second, third, operator); } @Override - public Expression compare(ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - return SHORT.compare(position, environment, left.cast(position, environment, SHORT), right, type); + public Expression compare(ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + return SHORT.compare(position, environment, left.cast(position, SHORT), right, type); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value, String name) { - return SHORT.getMember(position, environment, value.eval(environment).cast(position, environment, SHORT), name); + public IPartialExpression getMember(ZenPosition position, IScopeMethod environment, IPartialExpression value, String name) { + return SHORT.getMember(position, environment, value.eval().cast(position, SHORT), name); } @Override - public IPartialExpression getStaticMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod environment, String name) { return SHORT.getStaticMember(position, environment, name); } - @Override - public Expression call(ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { - return SHORT.call(position, environment, receiver.cast(position, environment, SHORT), arguments); - } + /*@Override + public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { + return SHORT.call(position, environment, receiver.cast(position, SHORT), arguments); + }*/ @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod environment) { - return SHORT.makeIterator(numValues, environment); + public IZenIterator makeIterator(int numValues, MethodOutput output) { + return SHORT.makeIterator(numValues, output); } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BYTE, new CastingRuleVirtualMethod(BYTE_VALUE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod( - BYTE_VALUEOF, - new CastingRuleVirtualMethod(BYTE_VALUE))); - rules.registerCastingRule(SHORT, new CastingRuleVirtualMethod(SHORT_VALUE)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod( - SHORT_VALUEOF, - new CastingRuleVirtualMethod(SHORT_VALUE))); - rules.registerCastingRule(INT, new CastingRuleVirtualMethod(INT_VALUE)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod( - INT_VALUEOF, - new CastingRuleVirtualMethod(INT_VALUE))); - rules.registerCastingRule(LONG, new CastingRuleVirtualMethod(LONG_VALUE)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod( - LONG_VALUEOF, - new CastingRuleVirtualMethod(LONG_VALUE))); - rules.registerCastingRule(FLOAT, new CastingRuleVirtualMethod(FLOAT_VALUE)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod( - FLOAT_VALUEOF, - new CastingRuleVirtualMethod(FLOAT_VALUE))); - rules.registerCastingRule(DOUBLE, new CastingRuleVirtualMethod(DOUBLE_VALUE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod( - DOUBLE_VALUEOF, - new CastingRuleVirtualMethod(DOUBLE_VALUE))); + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BYTE, new CastingRuleVirtualMethod(this, methods.BYTE_VALUE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod( + methods.BYTE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.BYTE_VALUE))); + rules.registerCastingRule(types.SHORT, new CastingRuleVirtualMethod(this, methods.SHORT_VALUE)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod( + methods.SHORT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); + rules.registerCastingRule(types.INT, new CastingRuleVirtualMethod(this, methods.INT_VALUE)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod( + methods.INT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.INT_VALUE))); + rules.registerCastingRule(types.LONG, new CastingRuleVirtualMethod(this, methods.LONG_VALUE)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod( + methods.LONG_VALUEOF, + new CastingRuleVirtualMethod(this, methods.LONG_VALUE))); + rules.registerCastingRule(types.FLOAT, new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod( + methods.FLOAT_VALUEOF, + new CastingRuleVirtualMethod(this, methods.FLOAT_VALUE))); + rules.registerCastingRule(types.DOUBLE, new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod( + methods.DOUBLE_VALUEOF, + new CastingRuleVirtualMethod(this, methods.DOUBLE_VALUE))); - rules.registerCastingRule(STRING, new CastingRuleNullableVirtualMethod(SHORTOBJECT, SHORT_TOSTRING)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod( - JavaMethod.getStatic(getAnyClassName(environment), "valueOf", ANY, SHORT), - new CastingRuleVirtualMethod(SHORT_VALUE))); + rules.registerCastingRule(types.STRING, new CastingRuleNullableVirtualMethod(types.SHORTOBJECT, methods.SHORT_TOSTRING)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod( + JavaMethod.getStatic(getAnyClassName(), "valueOf", types.ANY, SHORT), + new CastingRuleVirtualMethod(this, methods.SHORT_VALUE))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return SHORT.canCastImplicit(type, environment); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return SHORT.canCastExplicit(type, environment); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type.getNumberType() > 0 || type == STRING) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Class toJavaClass() { return Short.class; @@ -154,52 +139,32 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else if (type == SHORT) { - environment.getOutput().invokeVirtual(Short.class, "shortValue", short.class); - } else if (type == STRING) { - environment.getOutput().invokeVirtual(Short.class, "toString", String.class); - } else if (type == ANY) { - MethodOutput output = environment.getOutput(); - - Label lblNotNull = new Label(); - Label lblAfter = new Label(); - - output.dup(); - output.ifNonNull(lblNotNull); - output.aConstNull(); - output.goTo(lblAfter); - - output.label(lblNotNull); - output.invokeVirtual(Short.class, "shortValue", short.class); - output.invokeStatic(SHORT.getAnyClassName(environment), "valueOf", "(S)" + signature(IAny.class)); - - output.label(lblAfter); - } else { - environment.getOutput().invokeVirtual(Short.class, "shortValue", short.class); - SHORT.compileCast(position, environment, type); - } - }*/ - @Override public String getName() { return "short"; } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { - return SHORT.getAnyClassName(environment); + public String getAnyClassName() { + return SHORT.getAnyClassName(); } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java index 8597b212..30031452 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java @@ -7,102 +7,81 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionCallVirtual; import stanhebben.zenscript.expression.ExpressionCompareGeneric; import stanhebben.zenscript.expression.ExpressionInvalid; -import stanhebben.zenscript.expression.ExpressionCallVirtual; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.ExpressionStringConcat; import stanhebben.zenscript.expression.ExpressionStringContains; import stanhebben.zenscript.expression.ExpressionStringIndex; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenType.BYTE; -import stanhebben.zenscript.type.casting.CastingRuleNullableStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASINT; -import static stanhebben.zenscript.util.AnyClassWriter.METHOD_ASSTRING; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeString extends ZenType { - public static final ZenTypeString INSTANCE = new ZenTypeString(); - private static final String ANY_NAME = "any/AnyString"; private static final String ANY_NAME_2 = "any.AnyString"; private final Type type = Type.getType(String.class); - private ZenTypeString() {} + public ZenTypeString(IScopeGlobal environment) { + super(environment); + } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { - rules.registerCastingRule(BOOL, new CastingRuleStaticMethod(PARSE_BOOL)); - rules.registerCastingRule(BOOLOBJECT, new CastingRuleNullableStaticMethod(PARSE_BOOL_OBJECT)); - rules.registerCastingRule(BYTE, new CastingRuleStaticMethod(PARSE_BYTE)); - rules.registerCastingRule(BYTEOBJECT, new CastingRuleNullableStaticMethod(PARSE_BYTE_OBJECT)); - rules.registerCastingRule(SHORT, new CastingRuleStaticMethod(PARSE_SHORT)); - rules.registerCastingRule(SHORTOBJECT, new CastingRuleNullableStaticMethod(PARSE_SHORT_OBJECT)); - rules.registerCastingRule(INT, new CastingRuleStaticMethod(PARSE_INT)); - rules.registerCastingRule(INTOBJECT, new CastingRuleNullableStaticMethod(PARSE_INT_OBJECT)); - rules.registerCastingRule(LONG, new CastingRuleStaticMethod(PARSE_LONG)); - rules.registerCastingRule(LONGOBJECT, new CastingRuleNullableStaticMethod(PARSE_LONG_OBJECT)); - rules.registerCastingRule(FLOAT, new CastingRuleStaticMethod(PARSE_FLOAT)); - rules.registerCastingRule(FLOATOBJECT, new CastingRuleNullableStaticMethod(PARSE_FLOAT_OBJECT)); - rules.registerCastingRule(DOUBLE, new CastingRuleStaticMethod(PARSE_DOUBLE)); - rules.registerCastingRule(DOUBLEOBJECT, new CastingRuleNullableStaticMethod(PARSE_DOUBLE_OBJECT)); - rules.registerCastingRule(ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( - getAnyClassName(environment), + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { + TypeRegistry types = getEnvironment().getTypes(); + CommonMethods methods = types.getCommonMethods(); + + rules.registerCastingRule(types.BOOL, new CastingRuleStaticMethod(methods.PARSE_BOOL)); + rules.registerCastingRule(types.BOOLOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_BOOL_OBJECT)); + rules.registerCastingRule(types.BYTE, new CastingRuleStaticMethod(methods.PARSE_BYTE)); + rules.registerCastingRule(types.BYTEOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_BYTE_OBJECT)); + rules.registerCastingRule(types.SHORT, new CastingRuleStaticMethod(methods.PARSE_SHORT)); + rules.registerCastingRule(types.SHORTOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_SHORT_OBJECT)); + rules.registerCastingRule(types.INT, new CastingRuleStaticMethod(methods.PARSE_INT)); + rules.registerCastingRule(types.INTOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_INT_OBJECT)); + rules.registerCastingRule(types.LONG, new CastingRuleStaticMethod(methods.PARSE_LONG)); + rules.registerCastingRule(types.LONGOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_LONG_OBJECT)); + rules.registerCastingRule(types.FLOAT, new CastingRuleStaticMethod(methods.PARSE_FLOAT)); + rules.registerCastingRule(types.FLOATOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_FLOAT_OBJECT)); + rules.registerCastingRule(types.DOUBLE, new CastingRuleStaticMethod(methods.PARSE_DOUBLE)); + rules.registerCastingRule(types.DOUBLEOBJECT, new CastingRuleNullableStaticMethod(methods.PARSE_DOUBLE_OBJECT)); + rules.registerCastingRule(types.ANY, new CastingRuleNullableStaticMethod(JavaMethod.getStatic( + getAnyClassName(), "valueOf", - ANY, - STRING + types.ANY, + types.STRING ))); if (followCasters) { - constructExpansionCastingRules(environment, rules); + constructExpansionCastingRules(rules); } } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this || type == ANY || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this || type == ANY || type == BOOL || type.getNumberType() > 0 || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - if (type == this) { - return value; - } else if (type == BOOL || type.getNumberType() > 0 || type == ANY) { - return new ExpressionAs(position, value, type); - } else if (canCastExpansion(environment, type)) { - return castExpansion(position, environment, value, type); - } else { - return new ExpressionAs(position, value, type); - } - }*/ - @Override public Type toASMType() { return type; @@ -116,13 +95,13 @@ public int getNumberType() { @Override public IPartialExpression getMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IPartialExpression value, String name) { - IPartialExpression result = memberExpansion(position, environment, value.eval(environment), name); + IPartialExpression result = memberExpansion(position, environment, value.eval(), name); if (result == null) { environment.error(position, "bool value has no members"); - return new ExpressionInvalid(position, ZenTypeAny.INSTANCE); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -131,7 +110,7 @@ public IPartialExpression getMember( @Override public IPartialExpression getStaticMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, String name) { return null; } @@ -142,58 +121,17 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return true; } - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - MethodOutput output = environment.getOutput(); - - if (type == STRING) { - // do nothing - } else if (type == BOOL) { - output.invokeStatic(Boolean.class, "parseBoolean", boolean.class, String.class); - } else if (type == ZenTypeBoolObject.INSTANCE) { - output.invokeStatic(Boolean.class, "valueOf", Boolean.class, String.class); - } else if (type == BYTE) { - output.invokeStatic(Byte.class, "parseByte", byte.class, String.class); - } else if (type == ZenTypeByteObject.INSTANCE) { - output.invokeStatic(Byte.class, "valueOf", Byte.class, String.class); - } else if (type == SHORT) { - output.invokeStatic(Short.class, "parseShort", short.class, String.class); - } else if (type == ZenTypeShortObject.INSTANCE) { - output.invokeStatic(Short.class, "valueof", Short.class, String.class); - } else if (type == INT) { - output.invokeStatic(Integer.class, "parseInt", int.class, String.class); - } else if (type == ZenTypeIntObject.INSTANCE) { - output.invokeStatic(Integer.class, "valueof", Integer.class, String.class); - } else if (type == LONG) { - output.invokeStatic(Long.class, "parseLong", long.class, String.class); - } else if (type == ZenTypeLongObject.INSTANCE) { - output.invokeStatic(Long.class, "valueof", Long.class, String.class); - } else if (type == FLOAT) { - output.invokeStatic(Float.class, "parseFloat", float.class, String.class); - } else if (type == ZenTypeFloatObject.INSTANCE) { - output.invokeStatic(Float.class, "valueOf", Float.class, String.class); - } else if (type == DOUBLE) { - output.invokeStatic(Double.class, "parseDouble", double.class, String.class); - } else if (type == ZenTypeDoubleObject.INSTANCE) { - output.invokeStatic(Double.class, "valueOf", Double.class, String.class); - } else if (type == ANY) { - output.invokeStatic(getAnyClassName(environment), "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); - } else if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - }*/ - @Override public Expression unary( - ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { Expression result = unaryExpansion(position, environment, value, operator); if (result == null) { environment.error(position, "operator not supported on a string"); - return new ExpressionInvalid(position); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -201,26 +139,26 @@ public Expression unary( @Override public Expression binary( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { if (operator == OperatorType.CAT || operator == OperatorType.ADD) { if (left instanceof ExpressionStringConcat) { - ((ExpressionStringConcat) left).add(right.cast(position, environment, this)); + ((ExpressionStringConcat) left).add(right.cast(position, this)); return left; } else { List values = new ArrayList(); values.add(left); - values.add(right.cast(position, environment, this)); - return new ExpressionStringConcat(position, values); + values.add(right.cast(position, this)); + return new ExpressionStringConcat(position, environment, values); } } else if (operator == OperatorType.INDEXGET) { - return new ExpressionStringIndex(position, left, right.cast(position, environment, INT)); + return new ExpressionStringIndex(position, environment, left, right.cast(position, getEnvironment().getTypes().INT)); } else if (operator == OperatorType.CONTAINS) { - return new ExpressionStringContains(position, left, right.cast(position, environment, STRING)); + return new ExpressionStringContains(position, environment, left, right.cast(position, getEnvironment().getTypes().STRING)); } else { Expression result = binaryExpansion(position, environment, left, right, operator); if (result == null) { environment.error(position, "operator not supported on strings"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -229,11 +167,11 @@ public Expression binary( @Override public Expression trinary( - ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { Expression result = trinaryExpansion(position, environment, first, second, third, operator); if (result == null) { environment.error(position, "operator not supported on strings"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } else { return result; } @@ -241,26 +179,32 @@ public Expression trinary( @Override public Expression compare( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { - if (right.getType().canCastImplicit(STRING, environment)) { - return new ExpressionCompareGeneric(position, new ExpressionCallVirtual(position, environment, METHOD_ASINT, left, right), type); + ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { + if (right.getType().canCastImplicit(this)) { + return new ExpressionCompareGeneric(position, environment, new ExpressionCallVirtual( + position, + environment, + getEnvironment().getTypes().getCommonMethods().METHOD_STRING_COMPARETO, + left, + right.cast(position, this)), + type); } Expression result = binaryExpansion(position, environment, left, right, OperatorType.COMPARE); if (result == null) { environment.error(position, "cannot compare strings"); - return new ExpressionInvalid(position, BOOL); + return new ExpressionInvalid(position, environment, getEnvironment().getTypes().BOOL); } else { - return new ExpressionCompareGeneric(position, result, type); + return new ExpressionCompareGeneric(position, environment, result, type); } } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "Cannot call a string value"); return new ExpressionInvalid(position, INSTANCE); - } + }*/ @Override public Class toJavaClass() { @@ -272,14 +216,10 @@ public String getName() { return "string"; } - /** - * Returns the Java class name. - * - * @param environment - * @return - */ @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { + IScopeGlobal environment = getEnvironment(); + if (!environment.containsClass(ANY_NAME_2)) { environment.putClass(ANY_NAME_2, new byte[0]); environment.putClass(ANY_NAME_2, AnyClassWriter.construct(new AnyDefinitionString(environment), ANY_NAME, type)); @@ -289,15 +229,27 @@ public String getAnyClassName(IEnvironmentGlobal environment) { } @Override - public Expression defaultValue(ZenPosition position) { - return new ExpressionNull(position); + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { + return new ExpressionNull(position, environment); + } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; } private class AnyDefinitionString implements IAnyDefinition { - private final IEnvironmentGlobal environment; + private final IScopeGlobal environment; + private final TypeRegistry types; - private AnyDefinitionString(IEnvironmentGlobal environment) { + private AnyDefinitionString(IScopeGlobal environment) { this.environment = environment; + types = environment.getTypes(); } @Override @@ -337,7 +289,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { output.label(lblOthers); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCanCastImplicit(STRING, output, environment, 0); + expansion.compileAnyCanCastImplicit(types.STRING, output, environment, 0); } output.iConst0(); @@ -348,7 +300,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { public void defineStaticAs(MethodOutput output) { TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(STRING, output, environment, 0, 1); + expansion.compileAnyCast(types.STRING, output, environment, 0, 1); } throwCastException(output, "string", 1); @@ -382,7 +334,7 @@ public void defineCat(MethodOutput output) { getValue(output); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asString", "()Ljava/lang/String;"); output.invokeVirtual(StringBuilder.class, "append", StringBuilder.class, String.class); output.invokeVirtual(StringBuilder.class, "toString", String.class); output.invokeStatic(ANY_NAME, "valueOf", "(Ljava/lang/String;)" + signature(IAny.class)); @@ -428,7 +380,7 @@ public void defineRange(MethodOutput output) { public void defineCompareTo(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asString", "()Ljava/lang/String;"); output.invokeVirtual(String.class, "compareTo", int.class, String.class); output.returnInt(); } @@ -437,7 +389,7 @@ public void defineCompareTo(MethodOutput output) { public void defineContains(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asString", "()Ljava/lang/String;"); output.invokeVirtual(String.class, "contains", boolean.class, CharSequence.class); output.returnInt(); } @@ -467,7 +419,7 @@ public void defineIndexGet(MethodOutput output) { // return new AnyString(String.substring(other.asInt(), other.asInt() + 1)) getValue(output); output.loadObject(1); - METHOD_ASINT.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asInt", "()I"); output.dup(); output.iConst1(); output.iAdd(); @@ -556,7 +508,7 @@ public void defineAs(MethodOutput output) { output.store(type, localValue); TypeExpansion expansion = environment.getExpansion(getName()); if (expansion != null) { - expansion.compileAnyCast(STRING, output, environment, localValue, 1); + expansion.compileAnyCast(types.STRING, output, environment, localValue, 1); } throwCastException(output, "string", 1); @@ -601,7 +553,7 @@ private void getValue(MethodOutput output) { public void defineEquals(MethodOutput output) { getValue(output); output.loadObject(1); - METHOD_ASSTRING.invokeVirtual(output); + output.invokeInterface(IAny.NAME, "asString", "()Ljava/lang/String;"); output.invokeVirtual(String.class, "equals", boolean.class, Object.class); output.returnInt(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java index 042dbec6..3c4db8e7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java @@ -7,70 +7,55 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; +import zenscript.util.ZenPosition; /** * * @author Stanneke */ public class ZenTypeVoid extends ZenType { - public static final ZenTypeVoid INSTANCE = new ZenTypeVoid(); - - private ZenTypeVoid() {} + public ZenTypeVoid(IScopeGlobal environment) { + super(environment); + } @Override public IPartialExpression getMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, IPartialExpression value, String name) { environment.error(position, "void doesn't have members"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } @Override public IPartialExpression getStaticMember( ZenPosition position, - IEnvironmentGlobal environment, + IScopeMethod environment, String name) { environment.error(position, "void doesn't have static members"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } @Override - public IZenIterator makeIterator(int numValues, IEnvironmentMethod methodOutput) { + public IZenIterator makeIterator(int numValues, MethodOutput output) { return null; } @Override - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules, boolean followCasters) { + public void constructCastingRules(ICastingRuleDelegate rules, boolean followCasters) { } - /*@Override - public boolean canCastImplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this || canCastExpansion(environment, type); - } - - @Override - public boolean canCastExplicit(ZenType type, IEnvironmentGlobal environment) { - return type == this || canCastExpansion(environment, type); - } - - @Override - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression value, ZenType type) { - environment.error(position, "cannot cast void to other type"); - return new ExpressionInvalid(position, type); - }*/ - @Override public Type toASMType() { return Type.VOID_TYPE; @@ -87,55 +72,44 @@ public String getSignature() { } @Override - public boolean isPointer() { + public boolean isNullable() { return false; } - - /*@Override - public void compileCast(ZenPosition position, IEnvironmentMethod environment, ZenType type) { - if (type == this) { - // nothing to do - } else { - if (!compileCastExpansion(position, environment, type)) { - environment.error(position, "cannot cast " + this + " to " + type); - } - } - }*/ @Override public Expression unary( - ZenPosition position, IEnvironmentGlobal environment, Expression value, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression value, OperatorType operator) { environment.error(position, "void does not have operators"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } @Override public Expression binary( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, OperatorType operator) { environment.error(position, "void does not have operators"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } @Override public Expression trinary( - ZenPosition position, IEnvironmentGlobal environment, Expression first, Expression second, Expression third, OperatorType operator) { + ZenPosition position, IScopeMethod environment, Expression first, Expression second, Expression third, OperatorType operator) { environment.error(position, "void does not have operators"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } @Override public Expression compare( - ZenPosition position, IEnvironmentGlobal environment, Expression left, Expression right, CompareType type) { + ZenPosition position, IScopeMethod environment, Expression left, Expression right, CompareType type) { environment.error(position, "void does not have operators"); - return new ExpressionInvalid(position, this); + return new ExpressionInvalid(position, environment); } - @Override + /*@Override public Expression call( - ZenPosition position, IEnvironmentGlobal environment, Expression receiver, Expression... arguments) { + ZenPosition position, IEnvironmentMethod environment, Expression receiver, Expression... arguments) { environment.error(position, "cannot call a void"); return new ExpressionInvalid(position, this); - } + }*/ @Override public Class toJavaClass() { @@ -148,12 +122,22 @@ public String getName() { } @Override - public String getAnyClassName(IEnvironmentGlobal environment) { + public String getAnyClassName() { throw new UnsupportedOperationException("Cannot convert void to anything, not even any"); } @Override - public Expression defaultValue(ZenPosition position) { + public Expression defaultValue(ZenPosition position, IScopeMethod environment) { throw new RuntimeException("void has no default value"); } + + @Override + public ZenType nullable() { + return this; + } + + @Override + public ZenType nonNull() { + return this; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAny.java b/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAny.java deleted file mode 100644 index a1c3fc19..00000000 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAny.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package stanhebben.zenscript.type.casting; - -import stanhebben.zenscript.compiler.IEnvironmentMethod; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; - -/** - * - * @author Stan - */ -public class CastingRuleAny implements ICastingRule { - private final ZenType toType; - - public CastingRuleAny(ZenType toType) { - this.toType = toType; - } - - @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().constant(toType); - method.getOutput().invokeInterface(IAny.class, "as", Class.class, Object.class); - } - - @Override - public ZenType getInputType() { - return ZenType.ANY; - } - - @Override - public ZenType getResultingType() { - return toType; - } -} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java index 573acd5a..d9b01cdd 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java @@ -6,16 +6,16 @@ package stanhebben.zenscript.type.expand; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.casting.CastingRuleDelegateStaticMethod; -import stanhebben.zenscript.type.casting.CastingRuleStaticMethod; -import stanhebben.zenscript.type.casting.ICastingRuleDelegate; +import zenscript.symbolic.type.casting.CastingRuleDelegateStaticMethod; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -32,14 +32,14 @@ public ZenType getTarget() { return method.getReturnType(); } - public void constructCastingRules(IEnvironmentGlobal environment, ICastingRuleDelegate rules) { + public void constructCastingRules(ICastingRuleDelegate rules) { ZenType type = method.getReturnType(); rules.registerCastingRule(type, new CastingRuleStaticMethod(method)); - type.constructCastingRules(environment, new CastingRuleDelegateStaticMethod(rules, method), false); + type.constructCastingRules(new CastingRuleDelegateStaticMethod(rules, method), false); } - public Expression cast(ZenPosition position, IEnvironmentGlobal environment, Expression expression) { + public Expression cast(ZenPosition position, IScopeMethod environment, Expression expression) { return new ExpressionCallStatic(position, environment, method, expression); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java index 81da0835..394fa0d9 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java @@ -8,42 +8,41 @@ import java.util.ArrayList; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionCallVirtual; -import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; -import static stanhebben.zenscript.util.StringUtil.methodMatchingError; -import stanhebben.zenscript.util.ZenPosition; +import stanhebben.zenscript.type.natives.JavaMethodExpanding; +import zenscript.util.ZenPosition; /** * * @author Stan */ public class ZenExpandMember { - private final String type; + private final ZenType type; private final String name; private IJavaMethod getter; private IJavaMethod setter; - private final List methods = new ArrayList(); + private final List staticMethods = new ArrayList(); + private final List virtualMethods = new ArrayList(); - public ZenExpandMember(String type, String name) { + public ZenExpandMember(ZenType type, String name) { this.type = type; this.name = name; } - public IPartialExpression instance(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value) { - return new InstanceGetValue(position, value); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment, IPartialExpression value) { + return new InstanceGetValue(position, environment, value); } - public IPartialExpression instance(ZenPosition position, IEnvironmentGlobal environment) { - return new StaticGetValue(position); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new StaticGetValue(position, environment); } public void setGetter(IJavaMethod getter) { @@ -62,46 +61,43 @@ public void setSetter(IJavaMethod setter) { } } - public void addMethod(IJavaMethod method) { - methods.add(method); + public void addVirtualMethod(IJavaMethod method) { + virtualMethods.add(new JavaMethodExpanding(type, method)); + } + + public void addStaticMethod(IJavaMethod method) { + staticMethods.add(method); } private class InstanceGetValue implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final IPartialExpression value; - public InstanceGetValue(ZenPosition position, IPartialExpression value) { + public InstanceGetValue(ZenPosition position, IScopeMethod environment, IPartialExpression value) { this.position = position; + this.environment = environment; this.value = value; } @Override - public Expression eval(IEnvironmentGlobal environment) { - return new ExpressionCallVirtual(position, environment, getter, value.eval(environment)); + public Expression eval() { + return new ExpressionCallVirtual(position, environment, getter, value.eval()); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { - return new ExpressionCallVirtual(position, environment, setter, value.eval(environment), other); + public Expression assign(ZenPosition position, Expression other) { + return new ExpressionCallVirtual(position, environment, setter, value.eval(), other); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return getter.getReturnType().getMember(position, environment, this, name); } - + @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - Expression[] newValues = new Expression[values.length + 1]; - newValues[0] = value.eval(environment); - System.arraycopy(values, 0, newValues, 1, values.length); - IJavaMethod method = JavaMethod.select(true, methods, environment, newValues); - if (method == null) { - environment.error(position, methodMatchingError(methods, values)); - return new ExpressionInvalid(position); - } else { - return new ExpressionCallStatic(position, environment, method, newValues); - } + public List getMethods() { + return virtualMethods; } @Override @@ -115,54 +111,39 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; - } - - @Override - public ZenType[] predictCallTypes(int numArguments) { - ZenType[] base = JavaMethod.predict(methods, numArguments + 1); - ZenType[] result = new ZenType[base.length - 1]; - for (int i = 0; i < result.length; i++) { - result[i] = base[i + 1]; - } - - return result; + return environment.getTypes().ANY; } } private class StaticGetValue implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; - public StaticGetValue(ZenPosition position) { + public StaticGetValue(ZenPosition position, IScopeMethod environment) { this.position = position; + this.environment = environment; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { return new ExpressionCallStatic(position, environment, getter); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { return new ExpressionCallStatic(position, environment, setter, other); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return getter.getReturnType().getMember(position, environment, this, name); } - + @Override - public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - IJavaMethod method = JavaMethod.select(true, methods, environment, values); - if (method == null) { - environment.error(position, methodMatchingError(methods, values)); - return new ExpressionInvalid(position); - } else { - return new ExpressionCallStatic(position, environment, method, values); - } + public List getMethods() { + return staticMethods; } @Override @@ -176,21 +157,16 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; - } - - @Override - public ZenType[] predictCallTypes(int numArguments) { - return JavaMethod.predict(methods, numArguments); + return environment.getTypes().ANY; } } private class StaticSymbol implements IZenSymbol { @Override - public IPartialExpression instance(ZenPosition position) { - return new StaticGetValue(position); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new StaticGetValue(position, environment); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorIterable.java b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorIterable.java index 01fb7180..8c276ca6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorIterable.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorIterable.java @@ -18,40 +18,38 @@ * @author Stan */ public class IteratorIterable implements IZenIterator { - private final MethodOutput methodOutput; private final ZenType iteratorType; private int iterator; - public IteratorIterable(MethodOutput methodOutput, ZenType iteratorType) { - this.methodOutput = methodOutput; + public IteratorIterable(ZenType iteratorType) { this.iteratorType = iteratorType; } @Override - public void compileStart(int[] locals) { - iterator = methodOutput.local(Type.getType(Iterator.class)); - methodOutput.invokeInterface(Iterable.class, "iterator", Iterator.class); - methodOutput.storeObject(iterator); + public void compileStart(MethodOutput output, int[] locals) { + iterator = output.local(Type.getType(Iterator.class)); + output.invokeInterface(Iterable.class, "iterator", Iterator.class); + output.storeObject(iterator); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.loadObject(iterator); - methodOutput.invokeInterface( + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.loadObject(iterator); + output.invokeInterface( Iterator.class, "hasNext", boolean.class); - methodOutput.ifEQ(exit); + output.ifEQ(exit); - methodOutput.loadObject(iterator); - methodOutput.invokeInterface(Iterator.class, "next", Object.class); - methodOutput.checkCast(iteratorType.toASMType().getInternalName()); - methodOutput.store(iteratorType.toASMType(), locals[0]); + output.loadObject(iterator); + output.invokeInterface(Iterator.class, "next", Object.class); + output.checkCast(iteratorType.toASMType().getInternalName()); + output.store(iteratorType.toASMType(), locals[0]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.goTo(repeat); } @Override @@ -60,7 +58,7 @@ public ZenType getType(int i) { } @Override - public void compileEnd() { - methodOutput.pop(); + public void compileEnd(MethodOutput output) { + output.pop(); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorList.java b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorList.java index 97f46cc5..880a5d08 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorList.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorList.java @@ -9,6 +9,7 @@ import java.util.Iterator; import org.objectweb.asm.Label; import org.objectweb.asm.Type; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.IZenIterator; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -20,51 +21,51 @@ public class IteratorList implements IZenIterator { - private final MethodOutput methodOutput; + private final IScopeGlobal environment; private final ZenType iteratorType; private int iterator; - public IteratorList(MethodOutput methodOutput, ZenType iteratorType) { - this.methodOutput = methodOutput; + public IteratorList(IScopeGlobal environment, ZenType iteratorType) { + this.environment = environment; this.iteratorType = iteratorType; } @Override - public void compileStart(int[] locals) { - iterator = methodOutput.local(Type.getType(Iterator.class)); - methodOutput.invokeInterface(Iterable.class, "iterator", Iterator.class); - methodOutput.storeObject(iterator); - methodOutput.iConst0(); - methodOutput.storeInt(locals[0]); + public void compileStart(MethodOutput output, int[] locals) { + iterator = output.local(Type.getType(Iterator.class)); + output.invokeInterface(Iterable.class, "iterator", Iterator.class); + output.storeObject(iterator); + output.iConst0(); + output.storeInt(locals[0]); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.dup(); - methodOutput.invokeInterface( + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.dup(); + output.invokeInterface( Iterator.class, "hasNext", boolean.class); - methodOutput.ifEQ(exit); + output.ifEQ(exit); - methodOutput.dup(); - methodOutput.invokeInterface(Iterator.class, "next", Object.class); - methodOutput.store(iteratorType.toASMType(), locals[1]); + output.dup(); + output.invokeInterface(Iterator.class, "next", Object.class); + output.store(iteratorType.toASMType(), locals[1]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.iinc(locals[0]); - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.iinc(locals[0]); + output.goTo(repeat); } @Override - public void compileEnd() { - methodOutput.pop(); + public void compileEnd(MethodOutput output) { + output.pop(); } @Override public ZenType getType(int i) { - return i == 0 ? ZenType.INT : iteratorType; + return i == 0 ? environment.getTypes().INT : iteratorType; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMap.java b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMap.java index c3e6875a..2089c191 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMap.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMap.java @@ -21,51 +21,49 @@ * @author Stan */ public class IteratorMap implements IZenIterator { - private final MethodOutput methodOutput; private final ZenTypeAssociative type; private int iterator; - public IteratorMap(MethodOutput methodOutput, ZenTypeAssociative type) { - this.methodOutput = methodOutput; + public IteratorMap(ZenTypeAssociative type) { this.type = type; } @Override - public void compileStart(int[] locals) { - methodOutput.invokeInterface(Map.class, "entrySet", Set.class); + public void compileStart(MethodOutput output, int[] locals) { + output.invokeInterface(Map.class, "entrySet", Set.class); - iterator = methodOutput.local(Type.getType(Iterator.class)); - methodOutput.invokeInterface(Set.class, "iterator", Iterator.class); - methodOutput.storeObject(iterator); + iterator = output.local(Type.getType(Iterator.class)); + output.invokeInterface(Set.class, "iterator", Iterator.class); + output.storeObject(iterator); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.loadObject(iterator); - methodOutput.invokeInterface( + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.loadObject(iterator); + output.invokeInterface( Iterator.class, "hasNext", boolean.class); - methodOutput.ifEQ(exit); + output.ifEQ(exit); - methodOutput.loadObject(iterator); - methodOutput.invokeInterface(Iterator.class, "next", Object.class); - methodOutput.dup(); + output.loadObject(iterator); + output.invokeInterface(Iterator.class, "next", Object.class); + output.dup(); - methodOutput.invokeInterface(Map.Entry.class, "getKey", Object.class); - methodOutput.store(type.getKeyType().toASMType(), locals[0]); + output.invokeInterface(Map.Entry.class, "getKey", Object.class); + output.store(type.getKeyType().toASMType(), locals[0]); - methodOutput.invokeInterface(Map.Entry.class, "getValue", Object.class); - methodOutput.store(type.getValueType().toASMType(), locals[1]); + output.invokeInterface(Map.Entry.class, "getValue", Object.class); + output.store(type.getValueType().toASMType(), locals[1]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.goTo(repeat); } @Override - public void compileEnd() { + public void compileEnd(MethodOutput output) { } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMapKeys.java b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMapKeys.java index d16516b0..aed35290 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMapKeys.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/iterator/IteratorMapKeys.java @@ -21,45 +21,43 @@ * @author Stan */ public class IteratorMapKeys implements IZenIterator { - private final MethodOutput methodOutput; private final ZenTypeAssociative type; private int iterator; - public IteratorMapKeys(MethodOutput methodOutput, ZenTypeAssociative type) { - this.methodOutput = methodOutput; + public IteratorMapKeys(ZenTypeAssociative type) { this.type = type; } @Override - public void compileStart(int[] locals) { - methodOutput.invokeInterface(Map.class, "keySet", Set.class); + public void compileStart(MethodOutput output, int[] locals) { + output.invokeInterface(Map.class, "keySet", Set.class); - iterator = methodOutput.local(Type.getType(Iterator.class)); - methodOutput.invokeInterface(Set.class, "iterator", Iterator.class); - methodOutput.storeObject(iterator); + iterator = output.local(Type.getType(Iterator.class)); + output.invokeInterface(Set.class, "iterator", Iterator.class); + output.storeObject(iterator); } @Override - public void compilePreIterate(int[] locals, Label exit) { - methodOutput.loadObject(iterator); - methodOutput.invokeInterface( + public void compilePreIterate(MethodOutput output, int[] locals, Label exit) { + output.loadObject(iterator); + output.invokeInterface( Iterator.class, "hasNext", boolean.class); - methodOutput.ifEQ(exit); + output.ifEQ(exit); - methodOutput.loadObject(iterator); - methodOutput.invokeInterface(Iterator.class, "next", Object.class); - methodOutput.store(type.getKeyType().toASMType(), locals[0]); + output.loadObject(iterator); + output.invokeInterface(Iterator.class, "next", Object.class); + output.store(type.getKeyType().toASMType(), locals[0]); } @Override - public void compilePostIterate(int[] locals, Label exit, Label repeat) { - methodOutput.goTo(repeat); + public void compilePostIterate(MethodOutput output, int[] locals, Label exit, Label repeat) { + output.goTo(repeat); } @Override - public void compileEnd() { + public void compileEnd(MethodOutput output) { } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java index 5fe0fffa..2f5c6639 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java @@ -6,7 +6,6 @@ package stanhebben.zenscript.type.natives; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -18,19 +17,23 @@ public interface IJavaMethod { public boolean isStatic(); - public boolean accepts(int numArguments); - - public boolean accepts(IEnvironmentGlobal environment, Expression... arguments); + public boolean isVarargs(); - public int getPriority(IEnvironmentGlobal environment, Expression... arguments); + public boolean accepts(int numArguments); public void invokeVirtual(MethodOutput output); public void invokeStatic(MethodOutput output); - public ZenType[] getParameterTypes(); + public void invokeSpecial(MethodOutput output); - public ZenType getReturnType(); + public void invokeVirtual(MethodOutput output, Expression receiver, Expression[] arguments); - public boolean isVarargs(); + public void invokeStatic(MethodOutput output, Expression[] arguments); + + public JavaMethodArgument[] getArguments(); + + public int getArgumentIndex(String name); + + public ZenType getReturnType(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java index 9601b0e3..4525fb47 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java @@ -9,17 +9,25 @@ import java.lang.annotation.Annotation; import java.lang.reflect.Method; import java.lang.reflect.Modifier; -import java.util.List; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.ITypeRegistry; +import java.lang.reflect.Type; +import java.util.HashMap; +import stanhebben.zenscript.compiler.IScopeMethod; +import zenscript.annotations.Optional; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.expression.ExpressionArray; +import stanhebben.zenscript.expression.ExpressionFloat; +import stanhebben.zenscript.expression.ExpressionInt; +import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeArray; -import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.annotations.Named; +import zenscript.annotations.NotNull; +import zenscript.annotations.OptionalDouble; +import zenscript.annotations.OptionalFloat; +import zenscript.annotations.OptionalInt; +import zenscript.annotations.OptionalLong; +import zenscript.annotations.OptionalString; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.generic.TypeCapture; /** * @@ -31,13 +39,13 @@ public class JavaMethod implements IJavaMethod { public static final int PRIORITY_MEDIUM = 2; public static final int PRIORITY_HIGH = 3; - public static IJavaMethod get(ITypeRegistry types, Class cls, String name, Class... parameterTypes) { + public static IJavaMethod get(TypeRegistry types, Class cls, String name, Class... parameterTypes) { try { Method method = cls.getMethod(name, parameterTypes); if (method == null) { throw new RuntimeException("method " + name + " not found in class " + cls.getName()); } - return new JavaMethod(method, types); + return new JavaMethod(method, types, TypeCapture.EMPTY); } catch (NoSuchMethodException ex) { throw new RuntimeException("method " + name + " not found in class " + cls.getName(), ex); } catch (SecurityException ex) { @@ -45,151 +53,95 @@ public static IJavaMethod get(ITypeRegistry types, Class cls, String name, Class } } - public static IJavaMethod getStatic(String owner, String name, ZenType returnType, ZenType... arguments) { + public static IJavaMethod getStatic(String owner, String name, ZenType returnType, JavaMethodArgument... arguments) { return new JavaMethodGenerated(true, false, false, owner, name, returnType, arguments, new boolean[arguments.length]); } - public static IJavaMethod get(ITypeRegistry types, Method method) { - return new JavaMethod(method, types); - } - - public static IJavaMethod select(boolean doStatic, List methods, IEnvironmentGlobal environment, Expression... arguments) { - int bestPriority = PRIORITY_INVALID; - IJavaMethod bestMethod = null; - boolean isValid = false; - - for (IJavaMethod method : methods) { - if (method.isStatic() != doStatic) continue; - - int priority = method.getPriority(environment, arguments); - if (priority == bestPriority) { - isValid = false; - } else if (priority > bestPriority) { - isValid = true; - bestMethod = method; - bestPriority = priority; - } - } - - return isValid ? bestMethod : null; - } - - public static ZenType[] predict(List methods, int numArguments) { - ZenType[] results = new ZenType[numArguments]; - boolean[] ambiguous = new boolean[numArguments]; - - for (IJavaMethod method : methods) { - if (method.accepts(numArguments)) { - ZenType[] parameterTypes = method.getParameterTypes(); - for (int i = 0; i < numArguments; i++) { - if (i >= parameterTypes.length - 1 && method.isVarargs()) { - if (numArguments == parameterTypes.length) { - ambiguous[i] = true; - } else if (numArguments > parameterTypes.length) { - if (results[i] != null) { - ambiguous[i] = true; - } else { - results[i] = ((ZenTypeArray) parameterTypes[parameterTypes.length - 1]).getBaseType(); - } - } - } else { - if (results[i] != null) { - ambiguous[i] = true; - } else { - results[i] = parameterTypes[i]; - } - } - } - } - } - - for (int i = 0; i < results.length; i++) { - if (ambiguous[i]) { - results[i] = null; - } + public static IJavaMethod getStatic(String owner, String name, ZenType returnType, ZenType... arguments) { + JavaMethodArgument[] convertedArguments = new JavaMethodArgument[arguments.length]; + for (int i = 0; i < convertedArguments.length; i++) { + convertedArguments[i] = new JavaMethodArgument(null, arguments[i], null); } - - return results; + return getStatic(owner, name, returnType, convertedArguments); } - public static Expression[] rematch(ZenPosition position, IJavaMethod method, IEnvironmentGlobal environment, Expression... arguments) { - ZenType[] parameterTypes = method.getParameterTypes(); - - // small optimization - don't run through this all if not necessary - if (arguments.length == 0 && parameterTypes.length == 0) { - return arguments; - } - - Expression[] result = new Expression[method.getParameterTypes().length]; - for (int i = arguments.length; i < method.getParameterTypes().length; i++) { - result[i] = parameterTypes[i].defaultValue(position); - } - - int doUntil = parameterTypes.length; - if (method.isVarargs()) { - doUntil = arguments.length - 1; - ZenType paramType = parameterTypes[parameterTypes.length - 1]; - ZenType baseType = ((ZenTypeArray) paramType).getBaseType(); - - if (arguments.length == parameterTypes.length) { - ZenType argType = arguments[arguments.length - 1].getType(); - - if (argType.equals(paramType)) { - result[arguments.length - 1] = arguments[arguments.length - 1]; - } else if (argType.equals(baseType)) { - result[arguments.length - 1] = new ExpressionArray(position, (ZenTypeArrayBasic) paramType, arguments[arguments.length - 1]); - } else if (argType.canCastImplicit(paramType, environment)) { - result[arguments.length - 1] = arguments[arguments.length - 1].cast(position, environment, paramType); - } else { - result[arguments.length - 1] = new ExpressionArray(position, (ZenTypeArrayBasic) paramType, arguments[arguments.length - 1]).cast(position, environment, paramType); - } - } else if (arguments.length > parameterTypes.length) { - int offset = parameterTypes.length - 1; - Expression[] values = new Expression[arguments.length - offset]; - for (int i = 0; i < values.length; i++) { - values[i] = arguments[offset + i].cast(position, environment, baseType); - } - result[arguments.length - 1] = new ExpressionArray(position, (ZenTypeArrayBasic) paramType, values); - } - } - - for (int i = arguments.length; i < doUntil; i++) { - result[i] = parameterTypes[i].defaultValue(position); - } - for (int i = 0; i < Math.min(arguments.length, doUntil); i++) { - result[i] = arguments[i].cast(position, environment, parameterTypes[i]); - } - - return result; + public static IJavaMethod get(TypeRegistry types, Method method, TypeCapture capture) { + return new JavaMethod(method, types, capture); } private final Method method; - private final ZenType ownerType; - private final ZenType[] parameterTypes; - private final boolean[] optional; + private final JavaMethodArgument[] arguments; private final ZenType returnType; + private final HashMap argumentIndices; + + /*public JavaMethod(Method method, TypeRegistry types) { + this(method, types, null, TypeCapture.EMPTY); + }*/ - public JavaMethod(Method method, ITypeRegistry types) { + public JavaMethod(Method method, TypeRegistry types, TypeCapture capture) { + this(method, types, null, capture); + } + + public JavaMethod(Method method, TypeRegistry types, String[] argumentNames, TypeCapture capture) { this.method = method; - ownerType = types.getType(method.getDeclaringClass()); - returnType = types.getType(method.getGenericReturnType()); - parameterTypes = new ZenType[method.getParameterTypes().length]; - optional = new boolean[parameterTypes.length]; - for (int i = 0; i < parameterTypes.length; i++) { - parameterTypes[i] = types.getType(method.getGenericParameterTypes()[i]); + returnType = types.getNativeType(null, method.getGenericReturnType(), capture); + argumentIndices = new HashMap(); + + Type[] genericParameters = method.getGenericParameterTypes(); + arguments = new JavaMethodArgument[method.getGenericParameterTypes().length]; + for (int i = 0; i < arguments.length; i++) { + ZenType type = types.getNativeType(null, genericParameters[i], capture); + String name = argumentNames == null || i >= argumentNames.length ? null : argumentNames[i]; + Expression defaultValue = null; - optional[i] = false; - for (Annotation annotation : method.getParameterAnnotations()[i]) { + IScopeMethod environment = types.getStaticGlobalEnvironment(); + for (Annotation annotation : method.getAnnotations()) { if (annotation instanceof Optional) { - optional[i] = true; + defaultValue = type.defaultValue(null, environment); + } else if (annotation instanceof OptionalInt) { + if (type == types.BYTE || type == types.SHORT || type == types.INT) { + defaultValue = new ExpressionInt(null, environment, ((OptionalInt) annotation).value(), type); + } else { + throw new RuntimeException("invalid annotation on parameter in " + method.getDeclaringClass().getName() + ":" + method.getName() + " - " + annotation); + } + } else if (annotation instanceof OptionalLong) { + if (type == types.LONG) { + defaultValue = new ExpressionInt(null, environment, ((OptionalLong) annotation).value(), types.LONG); + } else { + throw new RuntimeException("invalid annotation on parameter in " + method.getDeclaringClass().getName() + ":" + method.getName() + " - " + annotation); + } + } else if (annotation instanceof OptionalFloat) { + if (type == types.FLOAT) { + defaultValue = new ExpressionFloat(null, environment, ((OptionalFloat) annotation).value(), types.FLOAT); + } else { + throw new RuntimeException("invalid annotation on parameter in " + method.getDeclaringClass().getName() + ":" + method.getName() + " - " + annotation); + } + } else if (annotation instanceof OptionalDouble) { + if (type == types.DOUBLE) { + defaultValue = new ExpressionFloat(null, environment, ((OptionalDouble) annotation).value(), types.DOUBLE); + } else { + throw new RuntimeException("invalid annotation on parameter in " + method.getDeclaringClass().getName() + ":" + method.getName() + " - " + annotation); + } + } else if (annotation instanceof OptionalString) { + if (type == types.STRING) { + defaultValue = new ExpressionString(null, environment, ((OptionalString) annotation).value()); + } else { + throw new RuntimeException("invalid annotation on parameter in " + method.getDeclaringClass().getName() + ":" + method.getName() + " - " + annotation); + } + } else if (annotation instanceof NotNull) { + type = type.nonNull(); + } else if (annotation instanceof Named) { + name = ((Named) annotation).value(); } } - } - - if (method.isVarArgs()) { - optional[parameterTypes.length - 1] = true; + + arguments[i] = new JavaMethodArgument(name, type, defaultValue); + + if (name != null) { + argumentIndices.put(name, i); + } } } @@ -208,114 +160,79 @@ public ZenType getReturnType() { return returnType; } - @Override - public ZenType[] getParameterTypes() { - return parameterTypes; - } - - public Class getOwner() { - return method.getDeclaringClass(); - } - - public Method getMethod() { - return method; - } - - @Override - public boolean accepts(IEnvironmentGlobal environment, Expression... arguments) { - return getPriority(environment, arguments) > 0; - } - @Override public boolean accepts(int numArguments) { - if (numArguments > parameterTypes.length) { + if (numArguments > arguments.length) { return method.isVarArgs(); - } if (numArguments == parameterTypes.length) { + } if (numArguments == arguments.length) { return true; } else { - for (int i = numArguments; i < parameterTypes.length; i++) { - if (!optional[i]) return false; + for (int i = numArguments; i < arguments.length; i++) { + if (arguments[i].getDefaultValue() == null) + return false; } return true; } } @Override - public int getPriority(IEnvironmentGlobal environment, Expression... arguments) { - int result = PRIORITY_HIGH; - if (arguments.length > parameterTypes.length) { - if (method.isVarArgs()) { - ZenType arrayType = parameterTypes[method.getParameterTypes().length - 1]; - ZenType baseType = ((ZenTypeArray) arrayType).getBaseType(); - for (int i = parameterTypes.length - 1; i < arguments.length; i++) { - ZenType argType = arguments[i].getType(); - if (argType.equals(baseType)) { - // OK - } else if (argType.canCastImplicit(baseType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - } + public void invokeVirtual(MethodOutput output) { + if (isStatic()) { + throw new UnsupportedOperationException("Method is static"); + } else { + if (method.getDeclaringClass().isInterface()) { + output.invokeInterface( + method.getDeclaringClass(), + method.getName(), + method.getReturnType(), + method.getParameterTypes()); } else { - return PRIORITY_INVALID; - } - } else if (arguments.length < parameterTypes.length) { - result = PRIORITY_MEDIUM; - - int checkUntil = parameterTypes.length; - if (method.isVarArgs()) { - checkUntil--; - } - - checkOptional: for (int i = arguments.length; i < checkUntil; i++) { - if (!optional[i]) { - return PRIORITY_INVALID; - } + output.invokeVirtual( + method.getDeclaringClass(), + method.getName(), + method.getReturnType(), + method.getParameterTypes()); } } - - int checkUntil = arguments.length; - if (arguments.length == parameterTypes.length && method.isVarArgs()) { - ZenType arrayType = parameterTypes[method.getParameterTypes().length - 1]; - ZenType baseType = ((ZenTypeArray) arrayType).getBaseType(); - ZenType argType = arguments[arguments.length - 1].getType(); - - if (argType.equals(arrayType)) { - // OK - } else if (argType.equals(baseType)) { - // OK - } else if (argType.canCastImplicit(arrayType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else if (argType.canCastImplicit(baseType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - - checkUntil = arguments.length - 1; + } + + @Override + public void invokeStatic(MethodOutput output) { + if (!isStatic()) { + throw new UnsupportedOperationException("Method is not static"); + } else { + output.invokeStatic( + method.getDeclaringClass(), + method.getName(), + method.getReturnType(), + method.getParameterTypes()); } - - for (int i = 0; i < checkUntil; i++) { - ZenType argType = arguments[i].getType(); - ZenType paramType = parameterTypes[i]; - if (!argType.equals(paramType)) { - if (argType.canCastImplicit(paramType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - } + } + + @Override + public void invokeSpecial(MethodOutput output) { + if (isStatic()) { + throw new UnsupportedOperationException("Method is static"); + } else { + output.invokeSpecial( + method.getDeclaringClass(), + method.getName(), + method.getReturnType(), + method.getParameterTypes()); } - - return result; } - + @Override - public void invokeVirtual(MethodOutput output) { + public void invokeVirtual(MethodOutput output, Expression receiver, Expression[] arguments) { if (isStatic()) { throw new UnsupportedOperationException("Method is static"); } else { + receiver.compile(true, output); + + for (Expression argument : arguments) { + argument.compile(true, output); + } + if (method.getDeclaringClass().isInterface()) { output.invokeInterface( method.getDeclaringClass(), @@ -333,10 +250,14 @@ public void invokeVirtual(MethodOutput output) { } @Override - public void invokeStatic(MethodOutput output) { + public void invokeStatic(MethodOutput output, Expression[] arguments) { if (!isStatic()) { throw new UnsupportedOperationException("Method is not static"); } else { + for (Expression argument : arguments) { + argument.compile(true, output); + } + output.invokeStatic( method.getDeclaringClass(), method.getName(), @@ -344,4 +265,14 @@ public void invokeStatic(MethodOutput output) { method.getParameterTypes()); } } + + @Override + public JavaMethodArgument[] getArguments() { + return arguments; + } + + @Override + public int getArgumentIndex(String name) { + return argumentIndices.containsKey(name) ? argumentIndices.get(name) : -1; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java new file mode 100644 index 00000000..6c48aa9b --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.type.natives; + +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; + +/** + * + * @author Stan + */ +public class JavaMethodArgument { + private final String name; + private final ZenType type; + private final Expression defaultValue; + + public JavaMethodArgument(String name, ZenType type, Expression defaultValue) { + this.name = name; + this.type = type; + this.defaultValue = defaultValue; + } + + public String getName() { + return name; + } + + public ZenType getType() { + return type; + } + + public Expression getDefaultValue() { + return defaultValue; + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java new file mode 100644 index 00000000..707840e6 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java @@ -0,0 +1,92 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.type.natives; + +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; + +/** + * An expanding method is a static method that acts as a virtual method for an + * existing class. The "this" parameter becomes the first parameter for the + * static method. + * + * @author Stan Hebben + */ +public class JavaMethodExpanding implements IJavaMethod { + private final ZenType addedType; + private final IJavaMethod baseMethod; + private final JavaMethodArgument[] arguments; + + public JavaMethodExpanding(ZenType addedType, IJavaMethod baseMethod) { + this.addedType = addedType; + this.baseMethod = baseMethod; + + arguments = new JavaMethodArgument[baseMethod.getArguments().length + 1]; + System.arraycopy(baseMethod.getArguments(), 0, arguments, 1, baseMethod.getArguments().length); + arguments[0] = new JavaMethodArgument(null, addedType, null); + } + + @Override + public boolean isStatic() { + return false; + } + + @Override + public boolean accepts(int numArguments) { + return baseMethod.accepts(numArguments - 1); + } + + @Override + public void invokeVirtual(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call expansion methods directly"); + } + + @Override + public void invokeStatic(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call expansion methods statically"); + } + + @Override + public void invokeSpecial(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call expansion methods directly"); + } + + @Override + public void invokeVirtual(MethodOutput output, Expression receiver, Expression[] arguments) { + Expression[] newArguments = new Expression[arguments.length + 1]; + newArguments[0] = receiver; + System.arraycopy(arguments, 0, newArguments, 1, arguments.length); + + baseMethod.invokeStatic(output, newArguments); + } + + @Override + public void invokeStatic(MethodOutput output, Expression[] arguments) { + throw new UnsupportedOperationException("Cannot call expansion methods statically"); + } + + @Override + public JavaMethodArgument[] getArguments() { + return arguments; + } + + @Override + public int getArgumentIndex(String name) { + return baseMethod.getArgumentIndex(name) + 1; + } + + @Override + public ZenType getReturnType() { + return baseMethod.getReturnType(); + } + + @Override + public boolean isVarargs() { + return baseMethod.isVarargs(); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java index b0d6c4cf..9d7fcc45 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java @@ -6,14 +6,10 @@ package stanhebben.zenscript.type.natives; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import java.util.HashMap; +import java.util.Map; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeArray; -import static stanhebben.zenscript.type.natives.JavaMethod.PRIORITY_HIGH; -import static stanhebben.zenscript.type.natives.JavaMethod.PRIORITY_INVALID; -import static stanhebben.zenscript.type.natives.JavaMethod.PRIORITY_LOW; -import static stanhebben.zenscript.type.natives.JavaMethod.PRIORITY_MEDIUM; import stanhebben.zenscript.util.MethodOutput; /** @@ -27,7 +23,8 @@ public class JavaMethodGenerated implements IJavaMethod { private final String owner; private final String name; - private final ZenType[] parameterTypes; + private final JavaMethodArgument[] arguments; + private final Map argumentByName; private final boolean[] optional; private final ZenType returnType; @@ -40,7 +37,7 @@ public JavaMethodGenerated( String owner, String name, ZenType returnType, - ZenType[] arguments, + JavaMethodArgument[] arguments, boolean[] optional) { this.isStatic = isStatic; this.isInterface = isInterface; @@ -49,17 +46,24 @@ public JavaMethodGenerated( this.name = name; this.returnType = returnType; - this.parameterTypes = arguments; + this.arguments = arguments; this.optional = optional; StringBuilder descriptorString = new StringBuilder(); descriptorString.append('('); - for (ZenType argument : arguments) { - descriptorString.append(argument.getSignature()); + for (JavaMethodArgument argument : arguments) { + descriptorString.append(argument.getType().getSignature()); } descriptorString.append(')'); descriptorString.append(returnType.getSignature()); descriptor = descriptorString.toString(); + + argumentByName = new HashMap(); + for (int i = 0; i < arguments.length; i++) { + if (arguments[i].getName() != null) { + argumentByName.put(arguments[i].getName(), i); + } + } } @Override @@ -74,12 +78,12 @@ public boolean isVarargs() { @Override public boolean accepts(int numArguments) { - if (numArguments > parameterTypes.length) { + if (numArguments > arguments.length) { return isVarargs; - } if (numArguments == parameterTypes.length) { + } if (numArguments == arguments.length) { return true; } else { - for (int i = numArguments; i < parameterTypes.length; i++) { + for (int i = numArguments; i < arguments.length; i++) { if (!optional[i]) return false; } return true; @@ -87,86 +91,47 @@ public boolean accepts(int numArguments) { } @Override - public boolean accepts(IEnvironmentGlobal environment, Expression... arguments) { - return getPriority(environment, arguments) > 0; - } - - @Override - public int getPriority(IEnvironmentGlobal environment, Expression... arguments) { - int result = PRIORITY_HIGH; - if (arguments.length > parameterTypes.length) { - if (isVarargs) { - ZenType arrayType = parameterTypes[parameterTypes.length - 1]; - ZenType baseType = ((ZenTypeArray) arrayType).getBaseType(); - for (int i = parameterTypes.length - 1; i < arguments.length; i++) { - ZenType argType = arguments[i].getType(); - if (argType.equals(baseType)) { - // OK - } else if (argType.canCastImplicit(baseType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - } + public void invokeVirtual(MethodOutput output) { + if (isStatic) { + throw new UnsupportedOperationException("Cannot call static methods as virtual"); + } else { + if (isInterface) { + output.invokeInterface(owner, name, descriptor); } else { - return PRIORITY_INVALID; - } - } else if (arguments.length < parameterTypes.length) { - result = PRIORITY_MEDIUM; - - int checkUntil = parameterTypes.length; - if (isVarargs) { - checkUntil--; - } - - checkOptional: for (int i = arguments.length; i < checkUntil; i++) { - if (!optional[i]) { - return PRIORITY_INVALID; - } + output.invokeVirtual(owner, name, descriptor); } } - - int checkUntil = arguments.length; - if (arguments.length == parameterTypes.length && isVarargs) { - ZenType arrayType = parameterTypes[parameterTypes.length - 1]; - ZenType baseType = ((ZenTypeArray) arrayType).getBaseType(); - ZenType argType = arguments[arguments.length - 1].getType(); - - if (argType.equals(arrayType)) { - // OK - } else if (argType.equals(baseType)) { - // OK - } else if (argType.canCastImplicit(arrayType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else if (argType.canCastImplicit(baseType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - - checkUntil = arguments.length - 1; + } + + @Override + public void invokeStatic(MethodOutput output) { + if (!isStatic) { + throw new UnsupportedOperationException("Cannot call virtual methods as static"); + } else { + output.invokeStatic(owner, name, descriptor); } - - for (int i = 0; i < checkUntil; i++) { - ZenType argType = arguments[i].getType(); - ZenType paramType = parameterTypes[i]; - if (!argType.equals(paramType)) { - if (argType.canCastImplicit(paramType, environment)) { - result = Math.min(result, PRIORITY_LOW); - } else { - return PRIORITY_INVALID; - } - } + } + + @Override + public void invokeSpecial(MethodOutput output) { + if (isStatic) { + throw new UnsupportedOperationException("Cannot call static methods as special"); + } else { + output.invokeSpecial(owner, name, descriptor); } - - return result; } - + @Override - public void invokeVirtual(MethodOutput output) { + public void invokeVirtual(MethodOutput output, Expression receiver, Expression[] arguments) { if (isStatic) { - throw new UnsupportedOperationException("Not supported yet."); + throw new UnsupportedOperationException("Cannot call static methods as virtual"); } else { + receiver.compile(true, output); + + for (Expression argument : arguments) { + argument.compile(true, output); + } + if (isInterface) { output.invokeInterface(owner, name, descriptor); } else { @@ -176,10 +141,14 @@ public void invokeVirtual(MethodOutput output) { } @Override - public void invokeStatic(MethodOutput output) { + public void invokeStatic(MethodOutput output, Expression[] arguments) { if (!isStatic) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + throw new UnsupportedOperationException("Cannot call virtual methods as static"); } else { + for (Expression argument : arguments) { + argument.compile(true, output); + } + output.invokeStatic(owner, name, descriptor); } } @@ -188,9 +157,14 @@ public void invokeStatic(MethodOutput output) { public ZenType getReturnType() { return returnType; } - + + @Override + public JavaMethodArgument[] getArguments() { + return arguments; + } + @Override - public ZenType[] getParameterTypes() { - return parameterTypes; + public int getArgumentIndex(String name) { + return argumentByName.containsKey(name) ? argumentByName.get(name) : -1; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java new file mode 100644 index 00000000..690c075b --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java @@ -0,0 +1,96 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.type.natives; + +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; + +/** + * An expanding method is a static method that acts as a virtual method for an + * existing class. The "this" parameter becomes the first parameter for the + * static method. + * + * @author Stan Hebben + */ +public class JavaMethodPrefixed implements IJavaMethod { + private final Expression prefix; + private final IJavaMethod baseMethod; + private final JavaMethodArgument[] arguments; + + public JavaMethodPrefixed(Expression prefix, IJavaMethod baseMethod) { + this.prefix = prefix; + this.baseMethod = baseMethod; + + arguments = new JavaMethodArgument[baseMethod.getArguments().length + 1]; + System.arraycopy(baseMethod.getArguments(), 0, arguments, 1, baseMethod.getArguments().length); + arguments[0] = new JavaMethodArgument(null, prefix.getType(), null); + } + + @Override + public boolean isStatic() { + return baseMethod.isStatic(); + } + + @Override + public boolean accepts(int numArguments) { + return baseMethod.accepts(numArguments - 1); + } + + @Override + public void invokeVirtual(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call prefixed methods directly"); + } + + @Override + public void invokeStatic(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call prefixed methods directly"); + } + + @Override + public void invokeSpecial(MethodOutput output) { + throw new UnsupportedOperationException("Cannot call prefixed methods directly"); + } + + @Override + public void invokeVirtual(MethodOutput output, Expression receiver, Expression[] arguments) { + Expression[] newArguments = new Expression[arguments.length + 1]; + arguments[0] = prefix; + System.arraycopy(arguments, 0, newArguments, 1, arguments.length); + + baseMethod.invokeVirtual(output, receiver, newArguments); + } + + @Override + public void invokeStatic(MethodOutput output, Expression[] arguments) { + Expression[] newArguments = new Expression[arguments.length + 1]; + arguments[0] = prefix; + System.arraycopy(arguments, 0, newArguments, 1, arguments.length); + + baseMethod.invokeStatic(output, arguments); + } + + @Override + public JavaMethodArgument[] getArguments() { + return arguments; + } + + @Override + public int getArgumentIndex(String name) { + return baseMethod.getArgumentIndex(name) + 1; + } + + @Override + public ZenType getReturnType() { + return baseMethod.getReturnType(); + } + + @Override + public boolean isVarargs() { + return baseMethod.isVarargs(); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java index dd93054d..2b8330c0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java @@ -7,7 +7,7 @@ package stanhebben.zenscript.type.natives; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -34,8 +34,8 @@ public void compile(MethodOutput output) { } } - public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IEnvironmentGlobal environment, int localClass) { - String casterAny = method.getReturnType().getAnyClassName(environment); + public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IScopeGlobal environment, int localClass) { + String casterAny = method.getReturnType().getAnyClassName(); if (casterAny == null) { // TODO: make sure no type ever does this return; @@ -50,7 +50,7 @@ public void compileAnyCanCastImplicit(ZenType type, MethodOutput output, IEnviro output.label(skip); } - public void compileAnyCast(ZenType type, MethodOutput output, IEnvironmentGlobal environment, int localValue, int localClass) { + public void compileAnyCast(ZenType type, MethodOutput output, IScopeGlobal environment, int localValue, int localClass) { Label skip = new Label(); output.loadObject(localClass); output.constant(method.getReturnType().toASMType()); @@ -62,7 +62,7 @@ public void compileAnyCast(ZenType type, MethodOutput output, IEnvironmentGlobal output.returnType(method.getReturnType().toASMType()); output.label(skip); - String casterAny = method.getReturnType().getAnyClassName(environment); + String casterAny = method.getReturnType().getAnyClassName(); if (casterAny == null) // TODO: make sure this isn't necessary return; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java index fcc7b565..d433f768 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java @@ -8,17 +8,14 @@ import java.util.ArrayList; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentGlobal; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionCallVirtual; -import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import static stanhebben.zenscript.util.StringUtil.methodMatchingError; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -53,12 +50,12 @@ public void setSetter(IJavaMethod setter) { } } - public IPartialExpression instance(ZenPosition position, IEnvironmentGlobal environment, IPartialExpression value) { - return new InstanceGetValue(position, value); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment, IPartialExpression value) { + return new InstanceGetValue(position, environment, value); } - public IPartialExpression instance(ZenPosition position, IEnvironmentGlobal environment) { - return new StaticGetValue(position); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new StaticGetValue(position, environment); } public void addMethod(JavaMethod method) { @@ -67,29 +64,31 @@ public void addMethod(JavaMethod method) { private class InstanceGetValue implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; private final IPartialExpression value; - public InstanceGetValue(ZenPosition position, IPartialExpression value) { + public InstanceGetValue(ZenPosition position, IScopeMethod environment, IPartialExpression value) { this.position = position; + this.environment = environment; this.value = value; } @Override - public Expression eval(IEnvironmentGlobal environment) { - return new ExpressionCallVirtual(position, environment, getter, value.eval(environment)); + public Expression eval() { + return new ExpressionCallVirtual(position, environment, getter, value.eval()); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { - return new ExpressionCallVirtual(position, environment, setter, value.eval(environment), other); + public Expression assign(ZenPosition position, Expression other) { + return new ExpressionCallVirtual(position, environment, setter, value.eval(), other); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return getter.getReturnType().getMember(position, environment, this, name); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { IJavaMethod method = JavaMethod.select(false, methods, environment, values); if (method == null) { @@ -103,7 +102,7 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp @Override public ZenType[] predictCallTypes(int numArguments) { return JavaMethod.predict(methods, numArguments); - } + }*/ @Override public IZenSymbol toSymbol() { @@ -116,35 +115,42 @@ public ZenType getType() { } @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return getter.getReturnType().getMethods(); } } private class StaticGetValue implements IPartialExpression { private final ZenPosition position; + private final IScopeMethod environment; - public StaticGetValue(ZenPosition position) { + public StaticGetValue(ZenPosition position, IScopeMethod environment) { this.position = position; + this.environment = environment; } @Override - public Expression eval(IEnvironmentGlobal environment) { + public Expression eval() { return new ExpressionCallStatic(position, environment, setter); } @Override - public Expression assign(ZenPosition position, IEnvironmentGlobal environment, Expression other) { + public Expression assign(ZenPosition position, Expression other) { return new ExpressionCallStatic(position, environment, setter); } @Override - public IPartialExpression getMember(ZenPosition position, IEnvironmentGlobal environment, String name) { + public IPartialExpression getMember(ZenPosition position, String name) { return getter.getReturnType().getMember(position, environment, this, name); } - @Override + /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { IJavaMethod method = JavaMethod.select(true, methods, environment, values); if (method == null) { @@ -158,7 +164,7 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp @Override public ZenType[] predictCallTypes(int numArguments) { return JavaMethod.predict(methods, numArguments); - } + }*/ @Override public IZenSymbol toSymbol() { @@ -169,18 +175,23 @@ public IZenSymbol toSymbol() { public ZenType getType() { return getter.getReturnType(); } - + @Override - public ZenType toType(IEnvironmentGlobal environment) { + public ZenType toType(List genericTypes) { environment.error(position, "not a valid type"); - return ZenType.ANY; + return environment.getTypes().ANY; + } + + @Override + public List getMethods() { + return getter.getReturnType().getMethods(); } } private class StaticSymbol implements IZenSymbol { @Override - public IPartialExpression instance(ZenPosition position) { - return new StaticGetValue(position); + public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { + return new StaticGetValue(position, environment); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java index 390d1402..51629c62 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java @@ -6,7 +6,7 @@ package stanhebben.zenscript.type.natives; -import stanhebben.zenscript.annotations.OperatorType; +import zenscript.annotations.OperatorType; /** * diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/AnyClassWriter.java b/ZenScript/src/main/java/stanhebben/zenscript/util/AnyClassWriter.java index 81a0a3ff..acf1da9e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/AnyClassWriter.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/util/AnyClassWriter.java @@ -10,53 +10,15 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; -import static stanhebben.zenscript.util.ZenTypeUtil.EMPTY_REGISTRY; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; /** * * @author Stan */ public class AnyClassWriter { - public static final IJavaMethod METHOD_NOT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "not"); - public static final IJavaMethod METHOD_NEG = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "neg"); - public static final IJavaMethod METHOD_ADD = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "add", IAny.class); - public static final IJavaMethod METHOD_CAT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "cat", IAny.class); - public static final IJavaMethod METHOD_SUB = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "sub", IAny.class); - public static final IJavaMethod METHOD_MUL = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "mul", IAny.class); - public static final IJavaMethod METHOD_DIV = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "div", IAny.class); - public static final IJavaMethod METHOD_MOD = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "mod", IAny.class); - public static final IJavaMethod METHOD_AND = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "and", IAny.class); - public static final IJavaMethod METHOD_OR = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "or", IAny.class); - public static final IJavaMethod METHOD_XOR = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "xor", IAny.class); - public static final IJavaMethod METHOD_RANGE = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "range", IAny.class); - public static final IJavaMethod METHOD_COMPARETO = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "compareTo", IAny.class); - public static final IJavaMethod METHOD_CONTAINS = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "contains", IAny.class); - public static final IJavaMethod METHOD_MEMBERGET = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "memberGet", String.class); - public static final IJavaMethod METHOD_MEMBERSET = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "memberSet", String.class, IAny.class); - public static final IJavaMethod METHOD_MEMBERCALL = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "memberCall", String.class, IAny[].class); - public static final IJavaMethod METHOD_INDEXGET = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "indexGet", IAny.class); - public static final IJavaMethod METHOD_INDEXSET = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "indexSet", IAny.class, IAny.class); - public static final IJavaMethod METHOD_CALL = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "call", IAny[].class); - public static final IJavaMethod METHOD_ASBOOL = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asBool"); - public static final IJavaMethod METHOD_ASBYTE = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asByte"); - public static final IJavaMethod METHOD_ASSHORT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asShort"); - public static final IJavaMethod METHOD_ASINT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asInt"); - public static final IJavaMethod METHOD_ASLONG = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asLong"); - public static final IJavaMethod METHOD_ASFLOAT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asFloat"); - public static final IJavaMethod METHOD_ASDOUBLE = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asDouble"); - public static final IJavaMethod METHOD_ASSTRING = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "asString"); - public static final IJavaMethod METHOD_AS = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "as", Class.class); - public static final IJavaMethod METHOD_IS = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "is", Class.class); - public static final IJavaMethod METHOD_CANCASTIMPLICIT = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "canCastImplicit", Class.class); - public static final IJavaMethod METHOD_GETNUMBERTYPE = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "getNumberType"); - public static final IJavaMethod METHOD_ITERATORSINGLE = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "iteratorSingle"); - public static final IJavaMethod METHOD_ITERATORMULTI = JavaMethod.get(EMPTY_REGISTRY, IAny.class, "iteratorMulti", int.class); - private static final String SIG_ANY = "()" + signature(IAny.class); private static final String SIG_ANY_ANY = "(" + signature(IAny.class) + ")" + signature(IAny.class); private static final String SIG_ANY_INT = "(" + signature(IAny.class) + ")I"; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java b/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java new file mode 100644 index 00000000..95ad5982 --- /dev/null +++ b/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java @@ -0,0 +1,52 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package stanhebben.zenscript.util; + +import java.util.List; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.natives.IJavaMethod; + +/** + * + * @author Stan + */ +public class ErrorUtil { + private ErrorUtil() {} + + /** + * If a set of methods is available and none matches, this method creates + * a suitable message. + * + * @param methods matching methods + * @param arguments calling arguments + * @return return value + */ + public static String methodMatchingError(List methods, Expression... arguments) { + if (methods.isEmpty()) { + return "no method with that name available"; + } else { + StringBuilder message = new StringBuilder(); + if (methods.size() == 1) { + message.append("a method "); + } else { + message.append(methods.size()).append(" methods "); + } + message.append("available but none matches the parameters ("); + boolean first = true; + for (Expression value : arguments) { + if (first) { + first = false; + } else { + message.append(", "); + } + message.append(value.getType().toString()); + } + message.append(")"); + return message.toString(); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/MethodOutput.java b/ZenScript/src/main/java/stanhebben/zenscript/util/MethodOutput.java index 7b69cb20..7ce3d459 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/MethodOutput.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/util/MethodOutput.java @@ -6,6 +6,7 @@ package stanhebben.zenscript.util; +import zenscript.util.ZenPosition; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; @@ -16,6 +17,8 @@ import static org.objectweb.asm.Opcodes.*; import org.objectweb.asm.Type; import org.objectweb.asm.commons.LocalVariablesSorter; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.symbols.SymbolLocal; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; @@ -27,6 +30,8 @@ public class MethodOutput { // private static final boolean debug = true; private final LocalVariablesSorter visitor; + private final HashMap locals; + private final HashMap controlLabels; private boolean debug = false; private int labelIndex = 1; @@ -35,16 +40,36 @@ public class MethodOutput { public MethodOutput(ClassVisitor cls, int access, String name, String descriptor, String signature, String[] exceptions) { MethodVisitor methodVisitor = cls.visitMethod(access, name, descriptor, signature, exceptions); visitor = new LocalVariablesSorter(access, descriptor, methodVisitor); + this.locals = new HashMap(); + controlLabels = new HashMap(); } public MethodOutput(LocalVariablesSorter visitor) { this.visitor = visitor; + this.locals = new HashMap(); + this.controlLabels = new HashMap(); } public void enableDebug() { debug = true; } + public void putControlLabels(Statement statement, ControlLabels labels) { + controlLabels.put(statement, labels); + } + + public ControlLabels getControlLabels(Statement statement) { + return controlLabels.get(statement); + } + + public int getLocal(SymbolLocal variable) { + if (!locals.containsKey(variable)) { + locals.put(variable, local(variable.getType().toASMType())); + } + + return locals.get(variable); + } + public void start() { if (debug) System.out.println("--start--"); @@ -720,6 +745,21 @@ public void invokeSpecial(String owner, String name, String descriptor) { visitor.visitMethodInsn(INVOKESPECIAL, owner, name, descriptor); } + public void invokeSpecial(Class owner, String name, Class result, Class... arguments) { + StringBuilder descriptor = new StringBuilder(); + descriptor.append('('); + for (Class argument : arguments) { + descriptor.append(signature(argument)); + } + descriptor.append(')'); + descriptor.append(result == null ? 'V' : signature(result)); + + if (debug) + System.out.println("invokeSpecial " + internal(owner) + '.' + name + descriptor); + + visitor.visitMethodInsn(INVOKESPECIAL, internal(owner), name, descriptor.toString()); + } + public void invoke(Class owner, String name, Class result, Class... arguments) { if (owner.isInterface()) { invokeInterface(owner, name, result, arguments); @@ -786,6 +826,13 @@ public void newObject(String type) { visitor.visitTypeInsn(NEW, type); } + public void newObject(Type type) { + if (debug) + System.out.println("newObject" + type.getClassName()); + + visitor.visitTypeInsn(NEW, type.getInternalName()); + } + public void construct(Class type, Class... arguments) { StringBuilder descriptor = new StringBuilder(); descriptor.append('('); @@ -1026,12 +1073,26 @@ public void aThrow() { visitor.visitInsn(ATHROW); } + public void lookupSwitch(Label lblDefault, int[] values, Label[] lblCases) { + visitor.visitLookupSwitchInsn(lblDefault, values, lblCases); + } + public void position(ZenPosition position) { Label label = new Label(); visitor.visitLabel(label); visitor.visitLineNumber(position.getLine(), label); } + public static class ControlLabels { + public final Label continueLabel; + public final Label breakLabel; + + public ControlLabels(Label continueLabel, Label breakLabel) { + this.continueLabel = continueLabel; + this.breakLabel = breakLabel; + } + } + private String getLabelName(Label lbl) { if (labelNames == null) labelNames = new HashMap(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/ZenTypeUtil.java b/ZenScript/src/main/java/stanhebben/zenscript/util/ZenTypeUtil.java index fef51645..cea6e02d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/ZenTypeUtil.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/util/ZenTypeUtil.java @@ -9,16 +9,12 @@ import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; -import stanhebben.zenscript.compiler.ITypeRegistry; -import stanhebben.zenscript.compiler.TypeRegistry; /** * * @author Stanneke */ public class ZenTypeUtil { - public static final ITypeRegistry EMPTY_REGISTRY = new TypeRegistry(); - private static final Map SIGNATURE_MAP; static { diff --git a/ZenScript/src/main/java/stanhebben/zenscript/value/builtin/expansion/IByteExpansion.java b/ZenScript/src/main/java/stanhebben/zenscript/value/builtin/expansion/IByteExpansion.java index 5cfc9941..59645561 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/value/builtin/expansion/IByteExpansion.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/value/builtin/expansion/IByteExpansion.java @@ -6,7 +6,7 @@ package stanhebben.zenscript.value.builtin.expansion; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; /** * diff --git a/ZenScript/src/main/java/stanhebben/zenscript/IZenErrorLogger.java b/ZenScript/src/main/java/zenscript/IZenErrorLogger.java similarity index 88% rename from ZenScript/src/main/java/stanhebben/zenscript/IZenErrorLogger.java rename to ZenScript/src/main/java/zenscript/IZenErrorLogger.java index 9fbe5e6d..b079e939 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/IZenErrorLogger.java +++ b/ZenScript/src/main/java/zenscript/IZenErrorLogger.java @@ -1,6 +1,6 @@ -package stanhebben.zenscript; +package zenscript; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * Error logger. Implementations can forward errors to their own error logging diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/CompareType.java b/ZenScript/src/main/java/zenscript/annotations/CompareType.java similarity index 75% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/CompareType.java rename to ZenScript/src/main/java/zenscript/annotations/CompareType.java index df1a1f94..4b7dd61e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/CompareType.java +++ b/ZenScript/src/main/java/zenscript/annotations/CompareType.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; /** * Used to indicate comparison types. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableList.java b/ZenScript/src/main/java/zenscript/annotations/IterableList.java similarity index 90% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableList.java rename to ZenScript/src/main/java/zenscript/annotations/IterableList.java index ceca76b2..809fdc1d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableList.java +++ b/ZenScript/src/main/java/zenscript/annotations/IterableList.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableMap.java b/ZenScript/src/main/java/zenscript/annotations/IterableMap.java similarity index 90% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableMap.java rename to ZenScript/src/main/java/zenscript/annotations/IterableMap.java index 732581ac..56cb23e7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableMap.java +++ b/ZenScript/src/main/java/zenscript/annotations/IterableMap.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableSimple.java b/ZenScript/src/main/java/zenscript/annotations/IterableSimple.java similarity index 90% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableSimple.java rename to ZenScript/src/main/java/zenscript/annotations/IterableSimple.java index b5530ad6..92718640 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/IterableSimple.java +++ b/ZenScript/src/main/java/zenscript/annotations/IterableSimple.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/zenscript/annotations/Named.java b/ZenScript/src/main/java/zenscript/annotations/Named.java new file mode 100644 index 00000000..0c72d928 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/Named.java @@ -0,0 +1,22 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * + * @author Stan + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface Named { + String value(); +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/NotNull.java b/ZenScript/src/main/java/zenscript/annotations/NotNull.java similarity index 89% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/NotNull.java rename to ZenScript/src/main/java/zenscript/annotations/NotNull.java index 6ce9999e..0aea9d9b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/NotNull.java +++ b/ZenScript/src/main/java/zenscript/annotations/NotNull.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/OperatorType.java b/ZenScript/src/main/java/zenscript/annotations/OperatorType.java similarity index 86% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/OperatorType.java rename to ZenScript/src/main/java/zenscript/annotations/OperatorType.java index 31717863..b5d9c1a1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/OperatorType.java +++ b/ZenScript/src/main/java/zenscript/annotations/OperatorType.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; /** * Enum used to indicate operator type. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/Optional.java b/ZenScript/src/main/java/zenscript/annotations/Optional.java similarity index 92% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/Optional.java rename to ZenScript/src/main/java/zenscript/annotations/Optional.java index 1e02ad6c..bf218afc 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/Optional.java +++ b/ZenScript/src/main/java/zenscript/annotations/Optional.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/zenscript/annotations/OptionalDouble.java b/ZenScript/src/main/java/zenscript/annotations/OptionalDouble.java new file mode 100644 index 00000000..e186823e --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/OptionalDouble.java @@ -0,0 +1,19 @@ +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that this parameter is optional. Inside the script, this parameter + * may be omitted, in which case it is automatically filled with the default + * value of that parameter type (false, null or 0). Invalid for @NonNull type. + * + * @author Stanneke + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface OptionalDouble { + double value(); +} diff --git a/ZenScript/src/main/java/zenscript/annotations/OptionalFloat.java b/ZenScript/src/main/java/zenscript/annotations/OptionalFloat.java new file mode 100644 index 00000000..fcb33e42 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/OptionalFloat.java @@ -0,0 +1,19 @@ +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that this parameter is optional. Inside the script, this parameter + * may be omitted, in which case it is automatically filled with the default + * value of that parameter type (false, null or 0). Invalid for @NonNull type. + * + * @author Stanneke + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface OptionalFloat { + float value(); +} diff --git a/ZenScript/src/main/java/zenscript/annotations/OptionalInt.java b/ZenScript/src/main/java/zenscript/annotations/OptionalInt.java new file mode 100644 index 00000000..5b5f3a5e --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/OptionalInt.java @@ -0,0 +1,19 @@ +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that this parameter is optional. Inside the script, this parameter + * may be omitted, in which case it is automatically filled with the default + * value of that parameter type (false, null or 0). Invalid for @NonNull type. + * + * @author Stanneke + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface OptionalInt { + int value(); +} diff --git a/ZenScript/src/main/java/zenscript/annotations/OptionalLong.java b/ZenScript/src/main/java/zenscript/annotations/OptionalLong.java new file mode 100644 index 00000000..a944f073 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/OptionalLong.java @@ -0,0 +1,19 @@ +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that this parameter is optional. Inside the script, this parameter + * may be omitted, in which case it is automatically filled with the default + * value of that parameter type (false, null or 0). Invalid for @NonNull type. + * + * @author Stanneke + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface OptionalLong { + long value(); +} diff --git a/ZenScript/src/main/java/zenscript/annotations/OptionalString.java b/ZenScript/src/main/java/zenscript/annotations/OptionalString.java new file mode 100644 index 00000000..94da2a48 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/annotations/OptionalString.java @@ -0,0 +1,19 @@ +package zenscript.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Denotes that this parameter is optional. Inside the script, this parameter + * may be omitted, in which case it is automatically filled with the default + * value of that parameter type (false, null or 0). Invalid for @NonNull type. + * + * @author Stanneke + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PARAMETER) +public @interface OptionalString { + String value(); +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenCaster.java b/ZenScript/src/main/java/zenscript/annotations/ZenCaster.java similarity index 92% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenCaster.java rename to ZenScript/src/main/java/zenscript/annotations/ZenCaster.java index 6c77c5df..3f8ccc62 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenCaster.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenCaster.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenClass.java b/ZenScript/src/main/java/zenscript/annotations/ZenClass.java similarity index 93% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenClass.java rename to ZenScript/src/main/java/zenscript/annotations/ZenClass.java index c9efe121..34cb82cb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenClass.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenClass.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenExpansion.java b/ZenScript/src/main/java/zenscript/annotations/ZenExpansion.java similarity index 95% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenExpansion.java rename to ZenScript/src/main/java/zenscript/annotations/ZenExpansion.java index 8fab394f..97eb261c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenExpansion.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenExpansion.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenGetter.java b/ZenScript/src/main/java/zenscript/annotations/ZenGetter.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenGetter.java rename to ZenScript/src/main/java/zenscript/annotations/ZenGetter.java index 057193b5..9d83cefe 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenGetter.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenGetter.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberGetter.java b/ZenScript/src/main/java/zenscript/annotations/ZenMemberGetter.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberGetter.java rename to ZenScript/src/main/java/zenscript/annotations/ZenMemberGetter.java index 72f6073b..190f5254 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberGetter.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenMemberGetter.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberSetter.java b/ZenScript/src/main/java/zenscript/annotations/ZenMemberSetter.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberSetter.java rename to ZenScript/src/main/java/zenscript/annotations/ZenMemberSetter.java index ceb2f1bd..e1ab94b5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMemberSetter.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenMemberSetter.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethod.java b/ZenScript/src/main/java/zenscript/annotations/ZenMethod.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethod.java rename to ZenScript/src/main/java/zenscript/annotations/ZenMethod.java index 1d1425fd..e4c3b938 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethod.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenMethod.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethodStatic.java b/ZenScript/src/main/java/zenscript/annotations/ZenMethodStatic.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethodStatic.java rename to ZenScript/src/main/java/zenscript/annotations/ZenMethodStatic.java index 7c1b0fa2..df819e39 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenMethodStatic.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenMethodStatic.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenOperator.java b/ZenScript/src/main/java/zenscript/annotations/ZenOperator.java similarity index 91% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenOperator.java rename to ZenScript/src/main/java/zenscript/annotations/ZenOperator.java index 7ac7adad..e58c1bdb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenOperator.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenOperator.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenSetter.java b/ZenScript/src/main/java/zenscript/annotations/ZenSetter.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenSetter.java rename to ZenScript/src/main/java/zenscript/annotations/ZenSetter.java index 875e2f40..3608730d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/annotations/ZenSetter.java +++ b/ZenScript/src/main/java/zenscript/annotations/ZenSetter.java @@ -1,4 +1,4 @@ -package stanhebben.zenscript.annotations; +package zenscript.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/ArrayListI.java b/ZenScript/src/main/java/zenscript/lexer/ArrayListI.java similarity index 97% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/ArrayListI.java rename to ZenScript/src/main/java/zenscript/lexer/ArrayListI.java index b200ee4b..958393ed 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/ArrayListI.java +++ b/ZenScript/src/main/java/zenscript/lexer/ArrayListI.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; /** * This class is similar to an ArrayList, but is optimized for integers. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/CharStream.java b/ZenScript/src/main/java/zenscript/lexer/CharStream.java similarity index 98% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/CharStream.java rename to ZenScript/src/main/java/zenscript/lexer/CharStream.java index 1e230dd8..2049b850 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/CharStream.java +++ b/ZenScript/src/main/java/zenscript/lexer/CharStream.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; /** * Represents a character stream. Suitable for character by character parsing. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/CompiledDFA.java b/ZenScript/src/main/java/zenscript/lexer/CompiledDFA.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/CompiledDFA.java rename to ZenScript/src/main/java/zenscript/lexer/CompiledDFA.java index 5e614b35..778e4ff1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/CompiledDFA.java +++ b/ZenScript/src/main/java/zenscript/lexer/CompiledDFA.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; import static java.util.Arrays.sort; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/DFA.java b/ZenScript/src/main/java/zenscript/lexer/DFA.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/DFA.java rename to ZenScript/src/main/java/zenscript/lexer/DFA.java index 604699ad..7b5f1acd 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/DFA.java +++ b/ZenScript/src/main/java/zenscript/lexer/DFA.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; import java.util.ArrayList; import java.util.HashMap; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapI.java b/ZenScript/src/main/java/zenscript/lexer/HashMapI.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapI.java rename to ZenScript/src/main/java/zenscript/lexer/HashMapI.java index f4e56e00..a307c4e5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapI.java +++ b/ZenScript/src/main/java/zenscript/lexer/HashMapI.java @@ -2,7 +2,7 @@ * This file is subject to the license.txt file in the main folder * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; /** * A HashMap implementation which is optimized for integer keys. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapII.java b/ZenScript/src/main/java/zenscript/lexer/HashMapII.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapII.java rename to ZenScript/src/main/java/zenscript/lexer/HashMapII.java index fd630963..4b188232 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashMapII.java +++ b/ZenScript/src/main/java/zenscript/lexer/HashMapII.java @@ -2,7 +2,7 @@ * This file is subject to the license.txt file in the main folder * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; /** * A HashMap implementation which is optimized to associate integers with integers. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashSetI.java b/ZenScript/src/main/java/zenscript/lexer/HashSetI.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/HashSetI.java rename to ZenScript/src/main/java/zenscript/lexer/HashSetI.java index dc1af8e8..369620f0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/HashSetI.java +++ b/ZenScript/src/main/java/zenscript/lexer/HashSetI.java @@ -2,7 +2,7 @@ * This file is subject to the license.txt file in the main folder * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; import java.util.Arrays; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/IteratorI.java b/ZenScript/src/main/java/zenscript/lexer/IteratorI.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/IteratorI.java rename to ZenScript/src/main/java/zenscript/lexer/IteratorI.java index fde349b6..26baee82 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/IteratorI.java +++ b/ZenScript/src/main/java/zenscript/lexer/IteratorI.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; /** * This interface represents an iterator over integer values. diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/NFA.java b/ZenScript/src/main/java/zenscript/lexer/NFA.java similarity index 99% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/NFA.java rename to ZenScript/src/main/java/zenscript/lexer/NFA.java index e05ad6cf..dd1698bb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/NFA.java +++ b/ZenScript/src/main/java/zenscript/lexer/NFA.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; import java.util.ArrayList; import java.util.Arrays; diff --git a/ZenScript/src/main/java/zenscript/lexer/ParseException.java b/ZenScript/src/main/java/zenscript/lexer/ParseException.java new file mode 100644 index 00000000..669854aa --- /dev/null +++ b/ZenScript/src/main/java/zenscript/lexer/ParseException.java @@ -0,0 +1,38 @@ +/* + * This file is subject to the license.txt file in the main folder + * of this project. + */ + +package zenscript.lexer; + +import zenscript.parser.ParsedFile; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParseException extends RuntimeException { + private final Token token; + private final String message; + + public ParseException(Token token, String error) { + super("Error parsing " + token.getPosition() + " - " + error + " (last token: " + token.getValue() + ")"); + + this.token = token; + this.message = error; + } + + public ParseException(ParsedFile file, int line, int lineOffset, String error) { + token = new Token(null, 0, new ZenPosition(file, line, lineOffset)); + message = error; + } + + public ZenPosition getPosition() { + return token.getPosition(); + } + + public String getExplanation() { + return message; + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/Token.java b/ZenScript/src/main/java/zenscript/lexer/Token.java similarity index 85% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/Token.java rename to ZenScript/src/main/java/zenscript/lexer/Token.java index 519d846f..a76e20f6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/Token.java +++ b/ZenScript/src/main/java/zenscript/lexer/Token.java @@ -3,9 +3,9 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * Represents a token in a token stream. @@ -54,6 +54,6 @@ public int getType() { @Override public String toString() { - return position.getLine() + ":" + position.getLineOffset() + " (" + type + ") " + value; + return position + " (" + type + ") " + value; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/TokenException.java b/ZenScript/src/main/java/zenscript/lexer/TokenException.java similarity index 71% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/TokenException.java rename to ZenScript/src/main/java/zenscript/lexer/TokenException.java index 06c08d02..52958970 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/TokenException.java +++ b/ZenScript/src/main/java/zenscript/lexer/TokenException.java @@ -3,9 +3,9 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; -import stanhebben.zenscript.ZenParsedFile; +import zenscript.parser.ParsedFile; /** * Thrown when an exception occurs while tokening a character stream. @@ -13,7 +13,7 @@ * @author Stan Hebben */ public class TokenException extends RuntimeException { - public TokenException(ZenParsedFile file, int line, int lineOffset, char value) { + public TokenException(ParsedFile file, int line, int lineOffset, char value) { super("Invalid character at " + file + ":" + line + " - " + value); if (line < 0) throw new IllegalArgumentException("Line cannot be negative"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/TokenStream.java b/ZenScript/src/main/java/zenscript/lexer/TokenStream.java similarity index 96% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/TokenStream.java rename to ZenScript/src/main/java/zenscript/lexer/TokenStream.java index 19844165..00720e55 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/TokenStream.java +++ b/ZenScript/src/main/java/zenscript/lexer/TokenStream.java @@ -3,7 +3,7 @@ * of this project. */ -package stanhebben.zenscript.parser; +package zenscript.lexer; import java.io.IOException; import java.io.Reader; @@ -11,8 +11,8 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.Stack; -import stanhebben.zenscript.ZenParsedFile; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.parser.ParsedFile; +import zenscript.util.ZenPosition; /** * Represents a token stream. A token stream reads characters from a reader and @@ -23,7 +23,7 @@ * @author Stan Hebben */ public class TokenStream implements Iterator { - private ZenParsedFile file; + private ParsedFile file; private CountingReader reader; private CompiledDFA dfa; @@ -69,11 +69,11 @@ public TokenStream(String data, CompiledDFA dfa) throws IOException { this(new StringReader(data), dfa); } - public void setFile(ZenParsedFile file) { + public void setFile(ParsedFile file) { this.file = file; } - public ZenParsedFile getFile() { + public ParsedFile getFile() { return file; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/ZenTokener.java b/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java similarity index 74% rename from ZenScript/src/main/java/stanhebben/zenscript/ZenTokener.java rename to ZenScript/src/main/java/zenscript/lexer/ZenTokener.java index 7b8d5525..60774fa2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/ZenTokener.java +++ b/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java @@ -1,13 +1,9 @@ -package stanhebben.zenscript; +package zenscript.lexer; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import java.util.HashMap; -import stanhebben.zenscript.parser.CompiledDFA; -import stanhebben.zenscript.parser.NFA; -import stanhebben.zenscript.parser.Token; -import stanhebben.zenscript.parser.TokenStream; /** * A tokener is capable of splitting a single file into tokens. It's intended @@ -18,14 +14,15 @@ public class ZenTokener extends TokenStream { private static final HashMap KEYWORDS; - public static final int T_ID = 1; - public static final int T_INTVALUE = 2; + public static final int TOKEN_ID = 1; + public static final int TOKEN_INTVALUE = 2; public static final int T_FLOATVALUE = 3; public static final int T_STRINGVALUE = 4; public static final int T_AOPEN = 5; public static final int T_ACLOSE = 6; public static final int T_SQBROPEN = 7; public static final int T_SQBRCLOSE = 8; + public static final int T_DOT3 = 44; public static final int T_DOT2 = 9; public static final int T_DOT = 10; public static final int T_COMMA = 11; @@ -62,7 +59,7 @@ public class ZenTokener extends TokenStream { public static final int T_ASSIGN = 39; public static final int T_NOTEQ = 42; public static final int T_NOT = 43; - public static final int T_DOLLAR = 44; + public static final int T_DOLLAR = 45; public static final int T_ANY = 99; public static final int T_BOOL = 100; @@ -85,12 +82,40 @@ public class ZenTokener extends TokenStream { public static final int T_RETURN = 125; public static final int T_VAR = 126; public static final int T_VAL = 127; + public static final int T_SWITCH = 128; + public static final int T_CASE = 129; + public static final int T_DEFAULT = 130; + public static final int T_TRY = 131; + public static final int T_CATCH = 132; + public static final int T_FINALLY = 133; + public static final int T_CONTINUE = 134; + public static final int T_BREAK = 135; + public static final int T_NEW = 136; + public static final int T_WHILE = 137; + public static final int T_DO = 138; public static final int T_NULL = 140; public static final int T_TRUE = 141; public static final int T_FALSE = 142; public static final int T_IMPORT = 160; + public static final int T_INCLUDE = 161; + public static final int T_PACKAGE = 162; + + public static final int T_INTERFACE = 170; + public static final int T_CLASS = 171; + public static final int T_STRUCT = 172; + public static final int T_ENUM = 173; + public static final int T_THIS = 174; + public static final int T_SUPER = 175; + public static final int T_EXPAND = 176; + + public static final int T_PRIVATE = 180; + public static final int T_PUBLIC = 181; + public static final int T_EXPORT = 182; + public static final int T_GET = 183; + public static final int T_SET = 184; + public static final int T_FINAL = 185; private static final String[] REGEXPS = { "#[^\n]*[\n\\e]", @@ -149,9 +174,9 @@ public class ZenTokener extends TokenStream { -1, -1, -1, - T_ID, + TOKEN_ID, T_FLOATVALUE, - T_INTVALUE, + TOKEN_INTVALUE, T_STRINGVALUE, T_STRINGVALUE, T_AOPEN, @@ -221,49 +246,54 @@ public class ZenTokener extends TokenStream { KEYWORDS.put("return", T_RETURN); KEYWORDS.put("var", T_VAR); KEYWORDS.put("val", T_VAL); + KEYWORDS.put("try", T_TRY); + KEYWORDS.put("catch", T_CATCH); + KEYWORDS.put("finally", T_FINALLY); + KEYWORDS.put("continue", T_CONTINUE); + KEYWORDS.put("break", T_BREAK); KEYWORDS.put("null", T_NULL); KEYWORDS.put("true", T_TRUE); KEYWORDS.put("false", T_FALSE); KEYWORDS.put("import", T_IMPORT); + KEYWORDS.put("include", T_INCLUDE); + + KEYWORDS.put("interface", T_INTERFACE); + KEYWORDS.put("class", T_CLASS); + KEYWORDS.put("struct", T_STRUCT); + KEYWORDS.put("enum", T_ENUM); + KEYWORDS.put("this", T_THIS); + KEYWORDS.put("super", T_SUPER); + KEYWORDS.put("package", T_PACKAGE); + KEYWORDS.put("expand", T_EXPAND); + + KEYWORDS.put("private", T_PRIVATE); + KEYWORDS.put("public", T_PUBLIC); + KEYWORDS.put("export", T_EXPORT); + KEYWORDS.put("final", T_FINAL); + KEYWORDS.put("get", T_GET); + KEYWORDS.put("set", T_SET); } - private final IZenCompileEnvironment environment; - /** * Constructs a tokener from the given reader. * * @param contents file reader - * @param environment compile environment * @throws IOException if the file could not be read properly */ - public ZenTokener(Reader contents, IZenCompileEnvironment environment) throws IOException { + public ZenTokener(Reader contents) throws IOException { super(contents, DFA); - - this.environment = environment; } /** * Constructs a tokener from the given string. * * @param contents content string - * @param environment compile environment * @throws IOException shouldn't happen */ - public ZenTokener(String contents, IZenCompileEnvironment environment) throws IOException { + public ZenTokener(String contents) throws IOException { super(new StringReader(contents), DFA); - - this.environment = environment; - } - - /** - * Retrieves the compile environment of this tokener. - * - * @return compile environment - */ - public IZenCompileEnvironment getEnvironment() { - return environment; } // ################################## @@ -272,7 +302,7 @@ public IZenCompileEnvironment getEnvironment() { @Override public Token process(Token token) { - if (token.getType() == T_ID) { + if (token.getType() == TOKEN_ID) { if (KEYWORDS.containsKey(token.getValue())) { return new Token(token.getValue(), KEYWORDS.get(token.getValue()), token.getPosition()); } diff --git a/ZenScript/src/main/java/zenscript/parser/IFileLoader.java b/ZenScript/src/main/java/zenscript/parser/IFileLoader.java new file mode 100644 index 00000000..84ba694f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/IFileLoader.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser; + +import java.io.InputStream; + +/** + * + * @author Stan + */ +public interface IFileLoader { + public InputStream load(String name); +} diff --git a/ZenScript/src/main/java/zenscript/parser/ParsedFile.java b/ZenScript/src/main/java/zenscript/parser/ParsedFile.java new file mode 100644 index 00000000..38686437 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/ParsedFile.java @@ -0,0 +1,223 @@ +package zenscript.parser; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import zenscript.parser.elements.ParsedFunction; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.statement.ParsedStatement; +import zenscript.util.StringUtil; + +/** + * Contains a parsed file. + * + * A parsed file contains: + *
    + *
  • A set of imports
  • + *
  • A set of parsed functions
  • + *
  • A set of statuments
  • + *
+ * + * This parsed file cannot be executed by itself, but it can be compiled into + * a module, possibly together with other files. + * + * @author Stan Hebben + */ +public class ParsedFile { + private static final Charset UTF8 = Charset.forName("UTF-8"); + + private final ParsedModule module; + private final String filename; + + private final ParsedPackage _package; + private final List imports; + private final Map functions; + private final List statements; + + /** + * Constructs and parses a given file. + * + * @param module module this file is part of + * @param filename parsed filename + * @param tokener input tokener + */ + public ParsedFile(ParsedModule module, String filename, ZenTokener tokener) { + this.filename = filename; + this.module = module; + + imports = new ArrayList(); + functions = new HashMap(); + statements = new ArrayList(); + + tokener.setFile(this); + + if (tokener.optional(T_PACKAGE) != null) { + List name = new ArrayList(); + Token nameFirst = tokener.required(TOKEN_ID, "identifier expected"); + name.add(nameFirst.getValue()); + + while (tokener.optional(T_DOT) != null) { + Token namePart = tokener.required(TOKEN_ID, "identifier expected"); + name.add(namePart.getValue()); + } + + tokener.required(T_SEMICOLON, "; expected"); + + _package = new ParsedPackage(StringUtil.join(name, ".")); + } else { + _package = null; + } + + loadFileContents(tokener); + } + + /** + * Gets the input filename for this file. + * + * @return input filename + */ + public String getFileName() { + return filename; + } + + /** + * Gets the imports list. + * + * @return imports list + */ + public List getImports() { + return imports; + } + + /** + * Gets this file's script statements. + * + * @return script statement list + */ + public List getStatements() { + return statements; + } + + /** + * Gets the functions defined inside this file. + * + * @return script functions + */ + public Map getFunctions() { + return functions; + } + + // ############################# + // ### Object implementation ### + // ############################# + + @Override + public String toString() { + return filename; + } + + // ####################### + // ### Private methods ### + // ####################### + + private void loadFileContents(ZenTokener tokener) { + while (tokener.hasNext()) { + Token next = tokener.peek(); + switch (next.getType()) { + case T_IMPORT: + imports.add(ParsedImport.parse(tokener, module.getErrorLogger())); + break; + + case T_INCLUDE: + readInclude(tokener); + break; + + case T_CLASS: + parseClass(tokener); + break; + + case T_INTERFACE: + parseInterface(tokener); + break; + + case T_ENUM: + parseEnum(tokener); + break; + + case T_STRUCT: + parseStruct(tokener); + break; + + case T_EXPAND: + parseExpansion(tokener); + break; + + case T_FUNCTION: + parseFunction(tokener, module.getErrorLogger()); + break; + + default: + statements.add(ParsedStatement.parse(tokener, module.getErrorLogger())); + break; + } + } + } + + private void readInclude(ZenTokener tokener) { + // skip "include" token + tokener.next(); + + Token includeFileName = tokener.required(T_STRINGVALUE, "string literal expected"); + tokener.required(T_SEMICOLON, "; expected"); + + InputStream file = module.loadFile(StringUtil.unescapeString(includeFileName.getValue())); + if (file == null) { + module.getErrorLogger() + .error(includeFileName.getPosition(), "Could not load file " + includeFileName); + } else { + try { + loadFileContents(new ZenTokener(new InputStreamReader(file, UTF8))); + } catch (IOException ex) { + module.getErrorLogger() + .error(includeFileName.getPosition(), "Could not load file " + includeFileName); + } + } + } + + private void parseClass(ZenTokener tokener) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + private void parseInterface(ZenTokener tokener) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + private void parseEnum(ZenTokener tokener) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + private void parseStruct(ZenTokener tokener) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + private void parseExpansion(ZenTokener tokener) { + throw new UnsupportedOperationException("Not yet implemented"); + } + + private void parseFunction(ZenTokener tokener, IZenErrorLogger errorLogger) { + ParsedFunction function = ParsedFunction.parse(tokener, errorLogger); + if (functions.containsKey(function.getName())) { + module.getErrorLogger().error(function.getPosition(), "function " + function.getName() + " already exists"); + } else { + functions.put(function.getName(), function); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/ParsedImport.java b/ZenScript/src/main/java/zenscript/parser/ParsedImport.java new file mode 100644 index 00000000..3065bfcd --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/ParsedImport.java @@ -0,0 +1,107 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser; + +import java.util.ArrayList; +import java.util.List; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.TOKEN_ID; +import static zenscript.lexer.ZenTokener.T_AS; +import static zenscript.lexer.ZenTokener.T_DOT; +import static zenscript.lexer.ZenTokener.T_IMPORT; +import static zenscript.lexer.ZenTokener.T_SEMICOLON; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedImport { + public static ParsedImport parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + + /*for (Import imprt : imports) { + List name = imprt.getName(); + IPartialExpression type = null; + + StringBuilder nameSoFar = new StringBuilder(); + + for (String part : name) { + if (type == null) { + nameSoFar.append(part); + type = environment.getValue(part, imprt.getPosition()); + if (type == null) { + environment.error(imprt.getPosition(), "could not find package " + type); + break; + } + } else { + nameSoFar.append('.').append(part); + type = type.getMember(imprt.getPosition(), environment, part); + if (type == null) { + environment.error(imprt.getPosition(), "could not find type or package " + nameSoFar); + break; + } + } + } + + if (type != null) { + IZenSymbol symbol = type.toSymbol(); + if (symbol == null) { + environmentScript.error(imprt.getPosition(), "Not a valid type"); + } else { + environmentScript.putValue(imprt.getRename(), type.toSymbol(), imprt.getPosition()); + } + } else { + environmentScript.putValue(imprt.getRename(), new SymbolType(ZenType.ANY), imprt.getPosition()); + } + }*/ + + ZenPosition position = tokener.required(T_IMPORT, "import expected").getPosition(); + + List importName = new ArrayList(); + Token tName = tokener.required(TOKEN_ID, "identifier expected"); + importName.add(tName.getValue()); + + while (tokener.optional(T_DOT) != null) { + Token tNamePart = tokener.required(TOKEN_ID, "identifier expected"); + importName.add(tNamePart.getValue()); + } + + String rename = null; + if (tokener.optional(T_AS) != null) { + Token tRename = tokener.required(TOKEN_ID, "identifier expected"); + rename = tRename.getValue(); + } + + tokener.required(T_SEMICOLON, "; expected"); + + return new ParsedImport(position, importName, rename); + } + + private final ZenPosition position; + private final List importName; + private final String rename; + + public ParsedImport(ZenPosition position, List importName, String rename) { + this.position = position; + this.importName = importName; + this.rename = rename; + } + + public ZenPosition getPosition() { + return position; + } + + public List getImportName() { + return importName; + } + + public String getRename() { + return rename; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/ParsedModule.java b/ZenScript/src/main/java/zenscript/parser/ParsedModule.java new file mode 100644 index 00000000..3cd5543b --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/ParsedModule.java @@ -0,0 +1,73 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; + +/** + * + * @author Stan + */ +public class ParsedModule { + private static final Charset UTF8 = Charset.forName("UTF-8"); + + private final ParserEnvironment global; + private final IFileLoader fileLoader; + private final String name; + private final List files; + + public ParsedModule(ParserEnvironment global, IFileLoader fileLoader, String name) { + this.global = global; + this.fileLoader = fileLoader; + this.name = name; + this.files = new ArrayList(); + } + + public ParserEnvironment getParserEnvironment() { + return global; + } + + public IZenErrorLogger getErrorLogger() { + return global.getCompileEnvironment().getErrorLogger(); + } + + public void addScript(String filename, String contents) { + try { + files.add(new ParsedFile(this, filename, new ZenTokener(contents))); + } catch (IOException ex) { + global.getCompileEnvironment().getErrorLogger().error( + null, + "Could not load " + filename + ": " + ex.getMessage()); + } + } + + public void addScript(File file) { + try { + Reader reader = new InputStreamReader(new BufferedInputStream(new FileInputStream(file)), UTF8); + files.add(new ParsedFile(this, file.getName(), new ZenTokener(reader))); + } catch (IOException ex) { + global.getCompileEnvironment().getErrorLogger().error( + null, + "Could not load " + file.getName() + ": " + ex.getMessage()); + } + } + + public InputStream loadFile(String name) { + return fileLoader == null ? null : fileLoader.load(name); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/ParsedPackage.java b/ZenScript/src/main/java/zenscript/parser/ParsedPackage.java new file mode 100644 index 00000000..781bc448 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/ParsedPackage.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser; + +/** + * + * @author Stan + */ +public class ParsedPackage { + private final String name; + + public ParsedPackage(String name) { + this.name = name; + } + + public String getName() { + return name; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/ParserEnvironment.java b/ZenScript/src/main/java/zenscript/parser/ParserEnvironment.java new file mode 100644 index 00000000..5ef95c46 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/ParserEnvironment.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.IZenCompileEnvironment; + +/** + * + * @author Stan + */ +public class ParserEnvironment { + private final IZenCompileEnvironment compileEnvironment; + private final List modules; + + public ParserEnvironment(IZenCompileEnvironment compileEnvironment) { + this.compileEnvironment = compileEnvironment; + modules = new ArrayList(); + } + + public ParsedModule makeModule(String name, IFileLoader fileLoader) { + ParsedModule result = new ParsedModule(this, fileLoader, name); + modules.add(result); + return result; + } + + public IZenCompileEnvironment getCompileEnvironment() { + return compileEnvironment; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java new file mode 100644 index 00000000..fa60f96e --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java @@ -0,0 +1,84 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +import static zenscript.lexer.ZenTokener.*; + +import java.util.ArrayList; +import java.util.List; +import zenscript.lexer.ZenTokener; +import zenscript.lexer.Token; +import zenscript.IZenErrorLogger; +import zenscript.parser.statement.ParsedStatement; +import zenscript.util.ZenPosition; + +/** + * + * @author Stanneke + */ +public class ParsedFunction { + public static ParsedFunction parse(ZenTokener parser, IZenErrorLogger errorLogger) { + parser.next(); + Token tName = parser.required(ZenTokener.TOKEN_ID, "identifier expected"); + + ParsedFunctionHeader header = ParsedFunctionHeader.parse(parser, errorLogger); + + parser.required(T_AOPEN, "{ expected"); + + ArrayList statements = new ArrayList(); + if (parser.optional(T_ACLOSE) == null) { + while (parser.optional(T_ACLOSE) == null) { + statements.add(ParsedStatement.parse(parser, errorLogger)); + } + } + + return new ParsedFunction(tName.getPosition(), tName.getValue(), header, statements); + } + + private final ZenPosition position; + private final String name; + private final ParsedFunctionHeader header; + private final List statements; + + //private final String signature; + + private ParsedFunction(ZenPosition position, String name, ParsedFunctionHeader header, List statements) { + this.position = position; + this.name = name; + this.header = header; + this.statements = statements; + + /*StringBuilder sig = new StringBuilder(); + sig.append("("); + for (ParsedFunctionArgument argument : arguments) { + sig.append(argument.getType().getSignature()); + } + sig.append(")"); + sig.append(returnType.getSignature()); + signature = sig.toString();*/ + } + + public ZenPosition getPosition() { + return position; + } + + public String getName() { + return name; + } + + /*public String getSignature() { + return signature; + }*/ + + public ParsedFunctionHeader getHeader() { + return header; + } + + public List getStatements() { + return statements; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionArgument.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionArgument.java new file mode 100644 index 00000000..d7e166a8 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionArgument.java @@ -0,0 +1,39 @@ +package zenscript.parser.elements; + +import zenscript.parser.expression.ParsedExpression; +import zenscript.parser.type.IParsedType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stanneke + */ +public class ParsedFunctionArgument { + private final ZenPosition position; + private final String name; + private final IParsedType type; + private final ParsedExpression defaultValue; + + public ParsedFunctionArgument(ZenPosition position, String name, IParsedType type, ParsedExpression defaultValue) { + this.position = position; + this.name = name; + this.type = type; + this.defaultValue = defaultValue; + } + + public ZenPosition getPosition() { + return position; + } + + public String getName() { + return name; + } + + public IParsedType getType() { + return type; + } + + public ParsedExpression getDefaultValue() { + return defaultValue; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java new file mode 100644 index 00000000..ba23df59 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java @@ -0,0 +1,111 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.parser.type.IParsedType; +import zenscript.parser.type.ParsedTypeBasic; +import zenscript.parser.type.TypeParser; + +/** + * + * @author Stan + */ +public class ParsedFunctionHeader { + public static ParsedFunctionHeader parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + List arguments = new ArrayList(); + boolean isVararg = false; + + tokener.required(T_BROPEN, "( expected"); + + boolean canHaveMore = tokener.optional(T_BRCLOSE) == null; + + while (canHaveMore) { + Token argName = tokener.required(TOKEN_ID, "identifier expected"); + IParsedType argType = ParsedTypeBasic.ANY; + ParsedExpression defaultValue = null; + + if (tokener.optional(T_AS) != null) { + argType = TypeParser.parse(tokener, errorLogger); + } + + if (tokener.optional(T_ASSIGN) != null) { + defaultValue = ParsedExpression.parse(tokener, errorLogger); + } + + if (tokener.optional(T_DOT3) != null) { + isVararg = true; + tokener.required(T_BRCLOSE, ") expected"); + + canHaveMore = false; + } else if (tokener.optional(T_COMMA) == null) { + tokener.required(T_BRCLOSE, ") expected"); + + canHaveMore = false; + } + + arguments.add(new ParsedFunctionArgument(argName.getPosition(), argName.getValue(), argType, defaultValue)); + } + + IParsedType returnType = ParsedTypeBasic.ANY; + if (tokener.optional(T_AS) != null) { + returnType = TypeParser.parse(tokener, errorLogger); + } + + return new ParsedFunctionHeader(arguments, returnType, isVararg); + } + + private final List arguments; + private final IParsedType returnType; + private final boolean isVararg; + + public ParsedFunctionHeader(List arguments, IParsedType returnType, boolean isVararg) { + this.arguments = arguments; + this.returnType = returnType; + this.isVararg = isVararg; + } + + public List getArguments() { + return arguments; + } + + public IParsedType getReturnType() { + return returnType; + } + + public boolean isVararg() { + return isVararg; + } + + public List getCompiledArguments(IScopeGlobal environment) { + List result = new ArrayList(); + + for (int i = 0; i < arguments.size(); i++) { + ZenType type = arguments.get(i).getType().compile(environment); + ParsedExpression defaultValue = arguments.get(i).getDefaultValue(); + Expression compiledDefaultValue; + if (defaultValue == null) { + compiledDefaultValue = null; + } else { + compiledDefaultValue = defaultValue.compile(environment.getTypes().getStaticGlobalEnvironment(), type).eval(); + } + result.add(new JavaMethodArgument(arguments.get(i).getName(), type, compiledDefaultValue)); + } + + return result; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java new file mode 100644 index 00000000..f973536d --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java @@ -0,0 +1,337 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionArray; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.ZenTypeArray; +import stanhebben.zenscript.type.ZenTypeArrayBasic; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; + +/** + * + * @author Stan + */ +public class ParsedCallArguments { + public static ParsedCallArguments parse(ZenTokener tokener, IZenErrorLogger errors) { + tokener.required(T_BROPEN, "( expected"); + + List keys = new ArrayList(); + List values = new ArrayList(); + + boolean canHaveMore = true; + + while (canHaveMore) { + ParsedExpression expression = ParsedExpression.parse(tokener, errors); + + if (tokener.optional(T_COLON) != null) { + String key = expression.asIdentifier(); + if (key == null) { + errors.error(expression.getPosition(), "Invalid key"); + } + + keys.add(key); + values.add(ParsedExpression.parse(tokener, errors)); + } else { + keys.add(null); + values.add(expression); + } + + if (tokener.optional(T_COMMA) == null) { + canHaveMore = false; + } + } + + tokener.required(T_BRCLOSE, ") expected"); + return new ParsedCallArguments(keys, values); + } + + private final List keys; + private final List values; + private final int numUnkeyedValues; + + public ParsedCallArguments(List keys, List values) { + this.keys = keys; + this.values = values; + + // how many values don't have keys? + int numUnkeyed = keys.size(); + while (numUnkeyed > 0 && keys.get(numUnkeyed - 1) != null) + numUnkeyed--; + + numUnkeyedValues = numUnkeyed; + } + + public MatchedArguments compile(List methods, IScopeMethod environment) { + ZenType[] predictedTypes = predict(methods); + + // We now have the predicted types array and we can use it to compile + // the arguments + Expression[] compiled = new Expression[values.size()]; + for (int i = 0; i < values.size(); i++) { + compiled[i] = values.get(i).compile(environment, predictedTypes[i]).eval(); + } + + // Now match the expression again to find the actual matching method + + // do the argument types match exactly? + for (IJavaMethod method : methods) { + Expression[] matched = match(method, environment, compiled, true); + if (matched != null) { + return new MatchedArguments(method, matched); + } + } + + // do the argument types match after implicit conversion? + for (IJavaMethod method : methods) { + Expression[] matched = match(method, environment, compiled, false); + if (matched != null) { + return new MatchedArguments(method, matched); + } + } + + return null; + } + + // ####################### + // ### Private methods ### + // ####################### + + /** + * Predicts argument types given a series of methods on which these arguments + * are being called. + * + * @param methods method candidates + * @return predicted types + */ + private ZenType[] predict(List methods) { + ZenType[] predictedTypes = new ZenType[values.size()]; + boolean[] ambiguous = new boolean[values.size()]; + + outer: for (IJavaMethod method : methods) { + if (!method.accepts(values.size())) + continue; + + // Does this method match? + // A method matches if: + // - the number of arguments is acceptable + // - named parameters are all available + // - the omitted arguments are optional + JavaMethodArgument[] arguments = method.getArguments(); + boolean[] isUsed = new boolean[arguments.length - numUnkeyedValues]; + + for (int i = numUnkeyedValues; i < values.size(); i++) { + int parameterIndex = method.getArgumentIndex(keys.get(i)); + if (parameterIndex < numUnkeyedValues) { + continue outer; + } else { + isUsed[parameterIndex - numUnkeyedValues] = true; + } + } + + for (int i = 0; i < isUsed.length; i++) { + if (!isUsed[i]) { + if (arguments[numUnkeyedValues + i].getDefaultValue() == null) { + continue outer; + } + } + } + + // The method matches. + // Use it to predict the argument types + for (int i = 0; i < numUnkeyedValues; i++) { + if (!ambiguous[i]) { + if (predictedTypes[i] == null) { + predictedTypes[i] = arguments[i].getType(); + } else if (!predictedTypes[i].equals(arguments[i].getType())) { + predictedTypes[i] = null; + ambiguous[i] = true; + } + } + } + + for (int i = numUnkeyedValues; i < values.size(); i++) { + if (!ambiguous[i]) { + ZenType argumentType = arguments[method.getArgumentIndex(keys.get(i))].getType(); + + if (predictedTypes[i] == null) { + predictedTypes[i] = argumentType; + } else if (!predictedTypes[i].equals(argumentType)) { + predictedTypes[i] = null; + ambiguous[i] = true; + } + } + } + } + + return predictedTypes; + } + + /** + * Performs a matching of compiled expressions to the method arguments. + * Performs type casting where necessary. + * + * @param method + * @param compiled + * @param exactly + * @return + */ + private Expression[] match(IJavaMethod method, IScopeMethod environment, Expression[] compiled, boolean exactly) { + int numUnkeyed = numUnkeyedValues; + + JavaMethodArgument[] arguments = method.getArguments(); + + if (!method.isVarargs() && numUnkeyed > arguments.length) + return null; + + boolean[] isUsed = new boolean[arguments.length - numUnkeyed]; + boolean isVarargCall = false; + ZenType varargBaseType = null; + + if (method.isVarargs()) { + varargBaseType = ((ZenTypeArray) arguments[arguments.length - 1].getType()).getBaseType(); + } + + // check parameters without names + for (int i = 0; i < numUnkeyed; i++) { + if (method.isVarargs() && i >= arguments.length - 1) { + if (matches(compiled[i], varargBaseType, exactly)) { + isVarargCall = true; + continue; + } + } + + if (i >= arguments.length) + return null; + + if (!matches(compiled[i], arguments[i].getType(), exactly)) + return null; + } + + // is this a vararg call with an empty array? + if (method.isVarargs() && numUnkeyed == compiled.length && numUnkeyed == arguments.length - 1) { + isVarargCall = true; + } + + // check parameters with names + for (int i = numUnkeyed; i < values.size(); i++) { + int parameterIndex = method.getArgumentIndex(keys.get(i)); + if (parameterIndex < numUnkeyed) { + return null; + } else if (exactly && !arguments[parameterIndex].getType().equals(compiled[i].getType())) { + return null; + } else if (!exactly && !arguments[parameterIndex].getType().equals(compiled[i].getType())) { + return null; + } else { + isUsed[parameterIndex - numUnkeyed] = true; + } + } + + // check if all non-optional arguments are filled + for (int i = 0; i < isUsed.length; i++) { + if (!isUsed[i]) { + if (arguments[numUnkeyed + i].getDefaultValue() == null) { + return null; + } + } + } + + Expression[] result = new Expression[arguments.length]; + + // fill arguments without name + if (isVarargCall) { + numUnkeyed = arguments.length - 1; + } + + for (int i = 0; i < numUnkeyed; i++) { + result[i] = compiled[i].cast(compiled[i].getPosition(), arguments[i].getType()); + } + + if (isVarargCall) { + result[arguments.length - 1] = assembleVararg(arguments[arguments.length - 1], environment, compiled, numUnkeyed); + } else { + + // fill arguments with name + for (int i = numUnkeyed; i < values.size(); i++) { + int parameterIndex = method.getArgumentIndex(keys.get(i)); + result[parameterIndex] = compiled[i].cast(compiled[i].getPosition(), arguments[parameterIndex].getType()); + } + + // fill default values + for (int i = 0; i < isUsed.length; i++) { + if (!isUsed[i]) { + result[i + numUnkeyed] = arguments[i + numUnkeyed].getDefaultValue(); + } + } + } + + return result; + } + + /** + * Check if this type matches another type. If exactly is true, the types + * must be equal. Otherwise, the expression type must be implicitly castable + * to the argument type. + * + * @param expression expression to check + * @param type argument type + * @param exactly + * @return + */ + private boolean matches(Expression expression, ZenType type, boolean exactly) { + if (exactly) { + return expression.getType().equals(type); + } else { + return expression.getType().canCastImplicit(type); + } + } + + /** + * Assembles remaining arguments into a single array. Used to assemble + * varargs values. Also works if from == compiled.length . + * + * @param argument argument to assemble for + * @param compiled compiled expressions array + * @param fromIndex index in the expressions array to assemble from + * @return array expression with vararg values + */ + private Expression assembleVararg(JavaMethodArgument argument, IScopeMethod environment, Expression[] compiled, int fromIndex) { + ZenType varargBaseType = ((ZenTypeArray) argument.getType()).getBaseType(); + + // combine varargs into an array expression + Expression[] arrayMembers = new Expression[compiled.length - fromIndex]; + for (int i = fromIndex; i < compiled.length; i++) { + arrayMembers[i - fromIndex] = compiled[i].cast( + compiled[i].getPosition(), + varargBaseType); + } + + return new ExpressionArray( + compiled[fromIndex].getPosition(), + environment, + (ZenTypeArrayBasic) argument.getType(), + arrayMembers); + } + + public class MatchedArguments { + public final IJavaMethod method; + public final Expression[] arguments; + + public MatchedArguments(IJavaMethod method, Expression[] arguments) { + this.method = method; + this.arguments = arguments; + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java new file mode 100644 index 00000000..8966bce4 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java @@ -0,0 +1,457 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import java.util.ArrayList; +import java.util.List; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ParseException; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.elements.ParsedFunctionHeader; +import zenscript.parser.statement.ParsedStatement; +import zenscript.parser.type.IParsedType; +import zenscript.parser.type.TypeParser; +import zenscript.runtime.IAny; +import static zenscript.util.StringUtil.unescapeString; +import zenscript.util.ZenPosition; + +/** + * + * @author Stanneke + */ +public abstract class ParsedExpression { + public static ParsedExpression parse(ZenTokener parser, IZenErrorLogger errorLogger) { + return readAssignExpression(parser, errorLogger); + } + + private static ParsedExpression readAssignExpression(ZenTokener parser, IZenErrorLogger errorLogger) { + Token token = parser.peek(); + if (token == null) { + ZenPosition position = new ZenPosition(parser.getFile(), parser.getLine(), parser.getLineOffset()); + errorLogger.error(position, "unexpected end of file; expression expected"); + return new ParsedExpressionInvalid(position); + } + + ZenPosition position = token.getPosition(); + + ParsedExpression left = readConditionalExpression(position, parser, errorLogger); + + if (parser.peek() == null) { + ZenPosition position2 = new ZenPosition(parser.getFile(), parser.getLine(), parser.getLineOffset()); + errorLogger.error(position2, "unexpected end of file - ; expected"); + return new ParsedExpressionInvalid(position2); + } + + switch (parser.peek().getType()) { + case T_ASSIGN: + parser.next(); + return new ParsedExpressionAssign(position, left, readAssignExpression(parser, errorLogger)); + case T_PLUSASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.ADD); + case T_MINUSASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.SUB); + case T_TILDEASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.CAT); + case T_MULASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.MUL); + case T_DIVASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.DIV); + case T_MODASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.MOD); + case T_ORASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.OR); + case T_ANDASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.AND); + case T_XORASSIGN: + parser.next(); + return new ParsedExpressionOpAssign(position, left, readAssignExpression(parser, errorLogger), OperatorType.XOR); + } + + return left; + } + + private static ParsedExpression readConditionalExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readOrOrExpression(position, parser, errorLogger); + + if (parser.optional(T_QUEST) != null) { + ParsedExpression onIf = readOrOrExpression(parser.peek().getPosition(), parser, errorLogger); + parser.required(T_COLON, ": expected"); + ParsedExpression onElse = readConditionalExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionConditional(position, left, onIf, onElse); + } + + return left; + } + + private static ParsedExpression readOrOrExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readAndAndExpression(position, parser, errorLogger); + + while (parser.optional(T_OR2) != null) { + ParsedExpression right = readAndAndExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionOrOr(position, left, right); + } + return left; + } + + private static ParsedExpression readAndAndExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readOrExpression(position, parser, errorLogger); + + while (parser.optional(T_AND2) != null) { + ParsedExpression right = readOrExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionAndAnd(position, left, right); + } + return left; + } + + private static ParsedExpression readOrExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readXorExpression(position, parser, errorLogger); + + while (parser.optional(T_OR) != null) { + ParsedExpression right = readXorExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.OR); + } + return left; + } + + private static ParsedExpression readXorExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readAndExpression(position, parser, errorLogger); + + while (parser.optional(T_XOR) != null) { + ParsedExpression right = readAndExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.XOR); + } + return left; + } + + private static ParsedExpression readAndExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readCompareExpression(position, parser, errorLogger); + + while (parser.optional(T_AND) != null) { + ParsedExpression right = readCompareExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.AND); + } + return left; + } + + private static ParsedExpression readCompareExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readAddExpression(position, parser, errorLogger); + + switch (parser.peek() == null ? -1 : parser.peek().getType()) { + case T_EQ: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.EQ); + } + case T_NOTEQ: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.NE); + } + case T_LT: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.LT); + } + case T_LTEQ: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.LE); + } + case T_GT: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.GT); + } + case T_GTEQ: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionCompare(position, left, right, CompareType.GE); + } + case T_IN: { + parser.next(); + ParsedExpression right = readAddExpression(parser.peek().getPosition(), parser, errorLogger); + return new ParsedExpressionBinary(position, left, right, OperatorType.CONTAINS); + } + } + + return left; + } + + private static ParsedExpression readAddExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readMulExpression(position, parser, errorLogger); + + while (true) { + if (parser.optional(T_PLUS) != null) { + ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.ADD); + } else if (parser.optional(T_MINUS) != null) { + ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.SUB); + } else if (parser.optional(T_TILDE) != null) { + ParsedExpression right = readMulExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.CAT); + } else { + break; + } + } + return left; + } + + private static ParsedExpression readMulExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression left = readUnaryExpression(position, parser, errorLogger); + + while (true) { + if (parser.optional(T_MUL) != null) { + ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.MUL); + } else if (parser.optional(T_DIV) != null) { + ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.DIV); + } else if (parser.optional(T_MOD) != null) { + ParsedExpression right = readUnaryExpression(parser.peek().getPosition(), parser, errorLogger); + left = new ParsedExpressionBinary(position, left, right, OperatorType.MOD); + } else { + break; + } + } + + return left; + } + + private static ParsedExpression readUnaryExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + switch (parser.peek().getType()) { + case T_NOT: + parser.next(); + return new ParsedExpressionUnary( + position, + readUnaryExpression(parser.peek().getPosition(), parser, errorLogger), + OperatorType.NOT); + + case T_MINUS: + parser.next(); + return new ParsedExpressionUnary( + position, + readUnaryExpression(parser.peek().getPosition(), parser, errorLogger), + OperatorType.NEG); + + default: + return readPostfixExpression(position, parser, errorLogger); + } + } + + private static ParsedExpression readPostfixExpression(ZenPosition position, ZenTokener parser, IZenErrorLogger errorLogger) { + ParsedExpression base = readPrimaryExpression(position, parser, errorLogger); + + outer: while (parser.hasNext()) { + switch (parser.peek().getType()) { + case T_DOT: + Token indexString = parser.optional(TOKEN_ID); + if (indexString != null) { + base = new ParsedExpressionMember(position, base, indexString.getValue()); + } else { + Token indexString2 = parser.optional(T_STRING); + if (indexString2 != null) { + base = new ParsedExpressionMember(position, base, unescapeString(indexString2.getValue())); + } else { + Token last = parser.next(); + throw new ParseException(last, "Invalid expression, last token: " + last.getValue()); + } + } + break; + + case T_DOT2: + ParsedExpression to = readAssignExpression(parser, errorLogger); + base = new ParsedExpressionRange(base, to); + break; + + case T_SQBROPEN: + ParsedExpression index = readAssignExpression(parser, errorLogger); + base = new ParsedExpressionIndex(position, base, index); + parser.required(T_SQBRCLOSE, "] expected"); + break; + + case T_BROPEN: + ParsedCallArguments callArguments = ParsedCallArguments.parse(parser, errorLogger); + base = new ParsedExpressionCall(base.getPosition(), base, callArguments); + break; + + case T_AS: + IParsedType type = TypeParser.parse(parser, errorLogger); + base = new ParsedExpressionCast(position, base, type); + break; + + default: + break outer; + } + } + + return base; + } + + private static ParsedExpression readPrimaryExpression(ZenPosition position, ZenTokener tokener, IZenErrorLogger errorLogger) { + switch (tokener.peek().getType()) { + case TOKEN_INTVALUE: + return new ParsedExpressionInt( + position, + Long.parseLong(tokener.next().getValue())); + + case T_FLOATVALUE: + return new ParsedExpressionFloat( + position, + Double.parseDouble(tokener.next().getValue())); + + case T_STRINGVALUE: + return new ParsedExpressionString( + position, + unescapeString(tokener.next().getValue())); + + case T_DOLLAR: { + if (tokener.isNext(T_STRINGVALUE)) { + return new ParsedExpressionDollar( + position, + unescapeString(tokener.next().getValue())); + } else if (tokener.isNext(TOKEN_ID)) { + return new ParsedExpressionDollar( + position, + tokener.next().getValue()); + } else { + return new ParsedExpressionDollar( + position, + null); + } + } + + case TOKEN_ID: + return new ParsedExpressionVariable( + position, + tokener.next().getValue()); + + case T_FUNCTION: + // function (argname, argname, ...) { ...contents... } + tokener.next(); + + ParsedFunctionHeader header = ParsedFunctionHeader.parse(tokener, errorLogger); + + tokener.required(T_AOPEN, "{ expected"); + + List statements = new ArrayList(); + if (tokener.optional(T_ACLOSE) == null) { + while (tokener.optional(T_ACLOSE) == null) { + statements.add(ParsedStatement.parse(tokener, errorLogger)); + } + } + + return new ParsedExpressionFunction(position, header, statements); + + case T_LT: { + Token start = tokener.next(); + List tokens = new ArrayList(); + Token next = tokener.next(); + while (next.getType() != ZenTokener.T_GT) { + tokens.add(next); + next = tokener.next(); + } + return new ParsedExpressionBracket(start.getPosition(), tokens); + } + case T_SQBROPEN: { + tokener.next(); + List contents = new ArrayList(); + if (tokener.optional(T_SQBRCLOSE) == null) { + while (tokener.optional(T_SQBRCLOSE) == null) { + contents.add(readAssignExpression(tokener, errorLogger)); + if (tokener.optional(T_COMMA) == null) { + tokener.required(T_SQBRCLOSE, "] or , expected"); + break; + } + } + } + return new ParsedExpressionArray(position, contents); + } + case T_AOPEN: { + tokener.next(); + + List keys = new ArrayList(); + List values = new ArrayList(); + if (tokener.optional(T_ACLOSE) == null) { + while (tokener.optional(T_ACLOSE) == null) { + keys.add(readAssignExpression(tokener, errorLogger)); + tokener.required(T_COLON, ": expected"); + values.add(readAssignExpression(tokener, errorLogger)); + + if (tokener.optional(T_COMMA) == null) { + tokener.required(T_ACLOSE, "} or , expected"); + break; + } + } + + return new ParsedExpressionMap(position, keys, values); + } + } + case T_NEW: { + Token newToken = tokener.next(); + IParsedType type = TypeParser.parse(tokener, errorLogger); + ParsedCallArguments arguments = ParsedCallArguments.parse(tokener, errorLogger); + return new ParsedExpressionNew(newToken.getPosition(), type, arguments); + } + case T_TRUE: + tokener.next(); + return new ParsedExpressionBool(position, true); + case T_FALSE: + tokener.next(); + return new ParsedExpressionBool(position, false); + case T_NULL: + tokener.next(); + return new ParsedExpressionNull(position); + case T_BROPEN: + tokener.next(); + ParsedExpression result = readAssignExpression(tokener, errorLogger); + tokener.required(T_BRCLOSE, ") expected"); + return result; + default: + Token last = tokener.next(); + throw new ParseException(last, "Invalid expression, last token: " + last.getValue()); + } + } + + private final ZenPosition position; + + public ParsedExpression(ZenPosition position) { + this.position = position; + } + + public ZenPosition getPosition() { + return position; + } + + public abstract IPartialExpression compile(IScopeMethod environment, ZenType predictedType); + + public String asIdentifier() { + return null; + } + + public Expression compileKey(IScopeMethod environment, ZenType predictedType) { + return compile(environment, predictedType).eval(); + } + + public abstract IAny eval(); +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAndAnd.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java similarity index 59% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAndAnd.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java index e2359469..e147228c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAndAnd.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java @@ -4,13 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionAndAnd; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.runtime.IAny; +import zenscript.util.ZenPosition; /** * @@ -28,10 +29,19 @@ public ParsedExpressionAndAnd(ZenPosition position, ParsedExpression left, Parse } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionAndAnd( getPosition(), - left.compile(environment, predictedType).eval(environment), - right.compile(environment, predictedType).eval(environment)); + environment, + left.compile(environment, predictedType).eval(), + right.compile(environment, predictedType).eval()); + } + + @Override + public IAny eval() { + IAny leftValue = left.eval(); + if (leftValue == null) return null; + if (!leftValue.asBool()) + return new AnyBool(false); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionArray.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java similarity index 75% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionArray.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java index 6796f5f4..cbc79afb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionArray.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java @@ -4,11 +4,10 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import java.util.Collections; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArray; import stanhebben.zenscript.expression.ExpressionAs; @@ -16,8 +15,8 @@ import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArray; import stanhebben.zenscript.type.ZenTypeArrayBasic; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.util.ZenPosition; /** * @@ -33,9 +32,9 @@ public ParsedExpressionArray(ZenPosition position, List conten } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { ZenType predictedBaseType = null; - ZenTypeArrayBasic arrayType = ZenType.ANYARRAY; + ZenTypeArrayBasic arrayType = environment.getTypes().ANYARRAY; ICastingRule castingRule = null; if (predictedType instanceof ZenTypeArray) { @@ -46,7 +45,7 @@ public IPartialExpression compile(IEnvironmentMethod environment, ZenType predic } } else { // find any[] caster that casts to the given type - castingRule = ZenType.ANYARRAY.getCastingRule(predictedType, environment); + castingRule = environment.getTypes().ANYARRAY.getCastingRule(predictedType); if (castingRule != null) { if (castingRule.getInputType() instanceof ZenTypeArray) { predictedBaseType = ((ZenTypeArray) castingRule.getInputType()).getBaseType(); @@ -66,22 +65,22 @@ public IPartialExpression compile(IEnvironmentMethod environment, ZenType predic Expression[] cContents = new Expression[contents.size()]; for (int i = 0; i < contents.size(); i++) { - cContents[i] = contents.get(i).compile(environment, predictedBaseType).eval(environment); + cContents[i] = contents.get(i).compile(environment, predictedBaseType).eval(); } - Expression result = new ExpressionArray(getPosition(), arrayType, cContents); + Expression result = new ExpressionArray(getPosition(), environment, arrayType, cContents); if (castingRule != null) { - return new ExpressionAs(getPosition(), result, castingRule); + return new ExpressionAs(getPosition(), environment, result, castingRule); } else { return result; } } @Override - public Expression compileKey(IEnvironmentMethod environment, ZenType predictedType) { + public Expression compileKey(IScopeMethod environment, ZenType predictedType) { if (contents.size() == 1 && contents.get(0) instanceof ParsedExpressionVariable) { - return contents.get(0).compile(environment, predictedType).eval(environment); + return contents.get(0).compile(environment, predictedType).eval(); } else { - return compile(environment, predictedType).eval(environment); + return compile(environment, predictedType).eval(); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAssign.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java similarity index 66% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAssign.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java index 31e94787..7bc5aced 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionAssign.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java @@ -4,12 +4,12 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -27,10 +27,12 @@ public ParsedExpressionAssign(ZenPosition position, ParsedExpression left, Parse } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { IPartialExpression cLeft = left.compile(environment, predictedType); - return cLeft - .assign(getPosition(), environment, - right.compile(environment, cLeft.getType()).eval(environment)); + + return cLeft.assign( + getPosition(), + right.compile(environment, cLeft.getType()).eval() + ); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBinary.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java similarity index 75% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBinary.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java index d79dd028..b01707fc 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBinary.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -31,10 +31,10 @@ public ParsedExpressionBinary(ZenPosition position, ParsedExpression left, Parse } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { // TODO: make better predictions - Expression cLeft = left.compile(environment, predictedType).eval(environment); - Expression cRight = right.compile(environment, predictedType).eval(environment); + Expression cLeft = left.compile(environment, predictedType).eval(); + Expression cRight = right.compile(environment, predictedType).eval(); return cLeft.getType().binary(getPosition(), environment, cLeft, cRight, operator); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBool.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java similarity index 67% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBool.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java index 3f9d425c..33c04a52 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionBool.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java @@ -4,13 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionBool; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -26,7 +26,7 @@ public ParsedExpressionBool(ZenPosition position, boolean value) { } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - return new ExpressionBool(getPosition(), value); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return new ExpressionBool(getPosition(), environment, value); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java new file mode 100644 index 00000000..fc80325f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java @@ -0,0 +1,51 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import java.util.List; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionInvalid; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; +import zenscript.lexer.Token; + +/** + * + * @author Stan + */ +public class ParsedExpressionBracket extends ParsedExpression { + private final List tokens; + + public ParsedExpressionBracket(ZenPosition position, List tokens) { + super(position); + + this.tokens = tokens; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + IZenSymbol resolved = environment.getEnvironment().getBracketed(environment, tokens); + if (resolved == null) { + StringBuilder builder = new StringBuilder(); + builder.append('<'); + Token last = null; + for (Token token : tokens) { + if (last != null) builder.append(' '); + builder.append(token.getValue()); + last = token; + } + builder.append('>'); + + environment.error(getPosition(), "Could not resolve " + builder.toString()); + return new ExpressionInvalid(getPosition(), environment); + } else { + return resolved.instance(getPosition(), environment); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java new file mode 100644 index 00000000..9d794fbb --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java @@ -0,0 +1,52 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionCallStatic; +import stanhebben.zenscript.expression.ExpressionCallVirtual; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.parser.expression.ParsedCallArguments.MatchedArguments; +import zenscript.util.ZenPosition; + +/** + * + * @author Stanneke + */ +public class ParsedExpressionCall extends ParsedExpression { + private final ParsedExpression receiver; + private final ParsedCallArguments arguments; + + public ParsedExpressionCall(ZenPosition position, ParsedExpression receiver, ParsedCallArguments arguments) { + super(position); + + this.receiver = receiver; + this.arguments = arguments; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + IPartialExpression cReceiver = receiver.compile(environment, null); + + MatchedArguments matchedArguments = arguments.compile(cReceiver.getMethods(), environment); + if (matchedArguments.method.isStatic()) { + return new ExpressionCallStatic( + getPosition(), + environment, + matchedArguments.method, + matchedArguments.arguments); + } else { + return new ExpressionCallVirtual( + getPosition(), + environment, + matchedArguments.method, + cReceiver.eval(), + matchedArguments.arguments); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCast.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCast.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java index b7791108..f8b3963d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCast.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java @@ -4,12 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.parser.type.IParsedType; +import zenscript.util.ZenPosition; /** * @@ -17,9 +18,9 @@ */ public class ParsedExpressionCast extends ParsedExpression { private final ParsedExpression value; - private final ZenType type; + private final IParsedType type; - public ParsedExpressionCast(ZenPosition position, ParsedExpression value, ZenType type) { + public ParsedExpressionCast(ZenPosition position, ParsedExpression value, IParsedType type) { super(position); this.value = value; @@ -27,10 +28,9 @@ public ParsedExpressionCast(ZenPosition position, ParsedExpression value, ZenTyp } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - return value - .compile(environment, type) - .eval(environment) - .cast(getPosition(), environment, type); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + ZenType compiledType = type.compile(environment); + + return value.compile(environment, compiledType).eval().cast(getPosition(), compiledType); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCompare.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java similarity index 65% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCompare.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java index 6a4ce978..c5a209a5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionCompare.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.CompareType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.CompareType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -35,9 +35,11 @@ public ParsedExpressionCompare( } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - Expression cLeft = left.compile(environment, null).eval(environment); - Expression cRight = right.compile(environment, null).eval(environment); - return cLeft.getType().compare(getPosition(), environment, cLeft, cRight, type); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + Expression cLeft = left.compile(environment, null).eval(); + Expression cRight = right.compile(environment, null).eval(); + + return cLeft.getType().compare(getPosition(), environment, cLeft, cRight, type) + .cast(getPosition(), predictedType); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionConditional.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java similarity index 66% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionConditional.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java index dffb03da..a2ded60c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionConditional.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java @@ -4,13 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionConditional; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -30,11 +30,12 @@ public ParsedExpressionConditional(ZenPosition position, ParsedExpression condit } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionConditional( getPosition(), - condition.compile(environment, ZenType.BOOL).eval(environment), - ifThen.compile(environment, predictedType).eval(environment), - ifElse.compile(environment, predictedType).eval(environment)); + environment, + condition.compile(environment, environment.getTypes().BOOL).eval().cast(getPosition(), environment.getTypes().BOOL), + ifThen.compile(environment, predictedType).eval(), + ifElse.compile(environment, predictedType).eval()); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java new file mode 100644 index 00000000..58cd7839 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionInvalid; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionDollar extends ParsedExpression { + private final String name; + + public ParsedExpressionDollar(ZenPosition position, String name) { + super(position); + + this.name = name; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + IZenSymbol symbol = environment.getEnvironment().getDollar(name); + if (symbol == null) { + environment.error(getPosition(), "Dollar variable not found: " + name); + return new ExpressionInvalid(getPosition(), environment, predictedType); + } else { + return symbol.instance(getPosition(), environment); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java new file mode 100644 index 00000000..b53394d6 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionFloat; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionFloat extends ParsedExpression { + private final double value; + + public ParsedExpressionFloat(ZenPosition position, double value) { + super(position); + + this.value = value; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return new ExpressionFloat( + getPosition(), + environment, + value, + predictedType == environment.getTypes().FLOAT ? predictedType : environment.getTypes().DOUBLE); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java new file mode 100644 index 00000000..efed075e --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java @@ -0,0 +1,195 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.objectweb.asm.ClassVisitor; +import stanhebben.zenscript.IZenCompileEnvironment; +import stanhebben.zenscript.TypeExpansion; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionFunction; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.symbols.SymbolLocal; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.parser.elements.ParsedFunctionArgument; +import zenscript.parser.elements.ParsedFunctionHeader; +import zenscript.parser.statement.ParsedStatement; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.unit.SymbolicFunction; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionFunction extends ParsedExpression { + private final ParsedFunctionHeader header; + private final List statements; + + public ParsedExpressionFunction(ZenPosition position, ParsedFunctionHeader header, List statements) { + super(position); + + this.header = header; + this.statements = statements; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + ZenType returnType = header.getReturnType().compile(environment); + List arguments; + + IJavaMethod function = predictedType.getFunction(); + if (function == null) { + arguments = header.getCompiledArguments(environment); + } else { + List argumentTypes = new ArrayList(); + for (ParsedFunctionArgument argument : header.getArguments()) { + argumentTypes.add(argument.getType().compile(environment)); + } + + if (returnType == environment.getTypes().ANY) + returnType = function.getReturnType(); + + for (int i = 0; i < argumentTypes.size(); i++) { + if (i < function.getArguments().length && argumentTypes.get(i) == environment.getTypes().ANY) { + argumentTypes.set(i, function.getArguments()[i].getType()); + } + } + + arguments = new ArrayList(); + for (int i = 0; i < header.getArguments().size(); i++) { + ParsedFunctionArgument argument = header.getArguments().get(i); + + String name = argument.getName(); + ZenType type = argumentTypes.get(i); + Expression defaultValue = null; + if (argument.getDefaultValue() != null) { + defaultValue = argument.getDefaultValue().compile(environment, type).eval(); + } + + arguments.add(new JavaMethodArgument(name, type, defaultValue)); + } + } + + SymbolicFunction functionUnit = new SymbolicFunction(returnType, arguments); + EnvironmentFunctionLiteral scope = new EnvironmentFunctionLiteral(environment, functionUnit); + + List argumentLocals = new ArrayList(); + for (int i = 0; i < arguments.size(); i++) { + JavaMethodArgument argument = arguments.get(i); + SymbolLocal symbol = new SymbolLocal(argument.getType(), false); + argumentLocals.add(symbol); + + scope.putValue( + argument.getName(), + symbol, + header.getArguments().get(i).getPosition()); + } + + List cStatements = new ArrayList(); + for (ParsedStatement statement : statements) { + cStatements.add(statement.compile(scope)); + } + + // TODO: compile statements + Expression result = new ExpressionFunction(getPosition(), environment, arguments, returnType, statements); + + + + return result; + } + + private static class EnvironmentFunctionLiteral implements IScopeMethod { + private final IScopeMethod outer; + private final SymbolicFunction functionUnit; + private final Map locals; + + public EnvironmentFunctionLiteral(IScopeMethod outer, SymbolicFunction functionUnit) { + this.outer = outer; + this.functionUnit = functionUnit; + locals = new HashMap(); + } + + @Override + public ClassVisitor getClassOutput() { + return outer.getClassOutput(); + } + + @Override + public TypeRegistry getTypes() { + return outer.getTypes(); + } + + @Override + public IZenCompileEnvironment getEnvironment() { + return outer.getEnvironment(); + } + + @Override + public TypeExpansion getExpansion(String name) { + return outer.getExpansion(name); + } + + @Override + public String makeClassName() { + return outer.makeClassName(); + } + + @Override + public boolean containsClass(String name) { + return outer.containsClass(name); + } + + @Override + public Set getClassNames() { + return outer.getClassNames(); + } + + @Override + public byte[] getClass(String name) { + return outer.getClass(name); + } + + @Override + public void putClass(String name, byte[] data) { + outer.putClass(name, data); + } + + @Override + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { + if (locals.containsKey(name)) { + return locals.get(name).instance(position, environment); + } else { + return outer.getValue(name, position, environment).via(functionUnit); + } + } + + @Override + public void putValue(String name, IZenSymbol value, ZenPosition position) { + locals.put(name, value); + } + + @Override + public void error(ZenPosition position, String message) { + outer.error(position, message); + } + + @Override + public void warning(ZenPosition position, String message) { + outer.warning(position, message); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndex.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java similarity index 65% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndex.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java index a61463ca..f2e58432 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndex.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -29,10 +29,10 @@ public ParsedExpressionIndex(ZenPosition position, ParsedExpression value, Parse } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { // TODO: improve type prediction for this - Expression cValue = value.compile(environment, null).eval(environment); - Expression cIndex = index.compile(environment, null).eval(environment); + Expression cValue = value.compile(environment, null).eval(); + Expression cIndex = index.compile(environment, null).eval(); return cValue.getType().binary(getPosition(), environment, cValue, cIndex, OperatorType.INDEXGET); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndexSet.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java similarity index 69% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndexSet.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java index 0a27e992..029d5ce2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionIndexSet.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -31,11 +31,11 @@ public ParsedExpressionIndexSet(ZenPosition position, ParsedExpression value, Pa } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { // TODO: improve prediction in this expression - Expression cValue = value.compile(environment, null).eval(environment); - Expression cIndex = index.compile(environment, null).eval(environment); - Expression cSetValue = setValue.compile(environment, null).eval(environment); + Expression cValue = value.compile(environment, null).eval(); + Expression cIndex = index.compile(environment, null).eval(); + Expression cSetValue = setValue.compile(environment, null).eval(); return cValue.getType().trinary(getPosition(), environment, cValue, cIndex, cSetValue,OperatorType.INDEXSET); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java new file mode 100644 index 00000000..c56baa1a --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionInt; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionInt extends ParsedExpression { + private final long value; + + public ParsedExpressionInt(ZenPosition position, long value) { + super(position); + + this.value = value; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + Expression result = new ExpressionInt(getPosition(), environment, value, environment.getTypes().INT); + if (predictedType != null) { + result = result.cast(getPosition(), predictedType); + } + + return result; + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionInvalid.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java similarity index 61% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionInvalid.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java index 941aaf8d..082e6d2f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionInvalid.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java @@ -4,13 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -22,7 +22,7 @@ public ParsedExpressionInvalid(ZenPosition position) { } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - return new ExpressionInvalid(getPosition(), predictedType == null ? ZenType.ANY : predictedType); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return new ExpressionInvalid(getPosition(), environment, predictedType == null ? environment.getTypes().ANY : predictedType); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMap.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java similarity index 77% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMap.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java index c119e9df..d1ea5594 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMap.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java @@ -4,18 +4,18 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; import java.util.List; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionAs; import stanhebben.zenscript.expression.ExpressionMap; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeAssociative; -import stanhebben.zenscript.type.casting.ICastingRule; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.symbolic.type.casting.ICastingRule; +import zenscript.util.ZenPosition; /** * @@ -36,11 +36,11 @@ public ParsedExpressionMap( } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { ZenType predictedKeyType = null; ZenType predictedValueType = null; ICastingRule castingRule = null; - ZenTypeAssociative mapType = ZenType.ANYMAP; + ZenTypeAssociative mapType = environment.getTypes().ANYMAP; if (predictedType instanceof ZenTypeAssociative) { ZenTypeAssociative inputType = (ZenTypeAssociative) predictedType; @@ -48,7 +48,7 @@ public IPartialExpression compile(IEnvironmentMethod environment, ZenType predic predictedValueType = inputType.getValueType(); mapType = inputType; } else { - castingRule = ZenType.ANYMAP.getCastingRule(predictedType, environment); + castingRule = environment.getTypes().ANYMAP.getCastingRule(predictedType); if (castingRule != null) { if (castingRule.getInputType() instanceof ZenTypeAssociative) { ZenTypeAssociative inputType = (ZenTypeAssociative) castingRule.getInputType(); @@ -66,12 +66,12 @@ public IPartialExpression compile(IEnvironmentMethod environment, ZenType predic for (int i = 0; i < keys.size(); i++) { cKeys[i] = keys.get(i).compileKey(environment, predictedKeyType); - cValues[i] = values.get(i).compile(environment, predictedValueType).eval(environment); + cValues[i] = values.get(i).compile(environment, predictedValueType).eval(); } - Expression result = new ExpressionMap(getPosition(), cKeys, cValues, mapType); + Expression result = new ExpressionMap(getPosition(), environment, cKeys, cValues, mapType); if (castingRule != null) { - return new ExpressionAs(getPosition(), result, castingRule); + return new ExpressionAs(getPosition(), environment, result, castingRule); } else { return result; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMember.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java similarity index 72% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMember.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java index 29241286..a3abc22b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionMember.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java @@ -4,12 +4,12 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -27,7 +27,7 @@ public ParsedExpressionMember(ZenPosition position, ParsedExpression value, Stri } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - return value.compile(environment, null).getMember(getPosition(), environment, member); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return value.compile(environment, null).getMember(getPosition(), member); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java new file mode 100644 index 00000000..ce022410 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionNew; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.parser.expression.ParsedCallArguments.MatchedArguments; +import zenscript.parser.type.IParsedType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionNew extends ParsedExpression { + private final IParsedType type; + private final ParsedCallArguments callArguments; + + public ParsedExpressionNew(ZenPosition position, IParsedType type, ParsedCallArguments callArguments) { + super(position); + + this.type = type; + this.callArguments = callArguments; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + ZenType cType = type.compile(environment); + MatchedArguments compiledArguments = callArguments.compile(cType.getConstructors(), environment); + return new ExpressionNew(getPosition(), environment, cType, compiledArguments.method, compiledArguments.arguments); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionNull.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java similarity index 65% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionNull.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java index fc0c01ff..7a0f97ef 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionNull.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java @@ -4,13 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -22,7 +22,7 @@ public ParsedExpressionNull(ZenPosition position) { } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - return new ExpressionNull(getPosition()); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return new ExpressionNull(getPosition(), environment); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOpAssign.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java similarity index 75% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOpAssign.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java index 49b2ae0f..2c630f1a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOpAssign.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -31,13 +31,13 @@ public ParsedExpressionOpAssign(ZenPosition position, ParsedExpression left, Par } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { // TODO: validate if the prediction rules are sound - Expression cLeft = left.compile(environment, predictedType).eval(environment); - Expression cRight = right.compile(environment, cLeft.getType()).eval(environment); + Expression cLeft = left.compile(environment, predictedType).eval(); + Expression cRight = right.compile(environment, cLeft.getType()).eval(); Expression value = cLeft.getType().binary(getPosition(), environment, cLeft, cRight, operator); - return left.compile(environment, predictedType).assign(getPosition(), environment, value); + return left.compile(environment, predictedType).assign(getPosition(), value); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOrOr.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java similarity index 67% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOrOr.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java index 3a497679..fc63aba4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionOrOr.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionOrOr; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -29,23 +29,24 @@ public ParsedExpressionOrOr(ZenPosition position, ParsedExpression left, ParsedE } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - Expression cLeft = left.compile(environment, predictedType).eval(environment); - Expression cRight = right.compile(environment, predictedType).eval(environment); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + Expression cLeft = left.compile(environment, predictedType).eval(); + Expression cRight = right.compile(environment, predictedType).eval(); ZenType type; - if (cRight.getType().canCastImplicit(cLeft.getType(), environment)) { + if (cRight.getType().canCastImplicit(cLeft.getType())) { type = cLeft.getType(); - } else if (cLeft.getType().canCastImplicit(cRight.getType(), environment)) { + } else if (cLeft.getType().canCastImplicit(cRight.getType())) { type = cRight.getType(); } else { environment.error(getPosition(), "These types could not be unified: " + cLeft.getType() + " and " + cRight.getType()); - type = ZenType.ANY; + type = environment.getTypes().ANY; } return new ExpressionOrOr( getPosition(), - cLeft.cast(getPosition(), environment, type), - cRight.cast(getPosition(), environment, type)); + environment, + cLeft.cast(getPosition(), type), + cRight.cast(getPosition(), type)); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java new file mode 100644 index 00000000..8938e074 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.expression.ExpressionIntegerRange; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; + +/** + * + * @author Stan + */ +public class ParsedExpressionRange extends ParsedExpression { + private final ParsedExpression from; + private final ParsedExpression to; + + public ParsedExpressionRange(ParsedExpression from, ParsedExpression to) { + super(from.getPosition()); + + this.from = from; + this.to = to; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + Expression compiledFrom = from.compile(environment, environment.getTypes().INT).eval(); + Expression compiledTo = to.compile(environment, environment.getTypes().INT).eval(); + return new ExpressionIntegerRange(getPosition(), environment, compiledFrom, compiledTo); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java new file mode 100644 index 00000000..724b823f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java @@ -0,0 +1,32 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.expression; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.ExpressionString; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedExpressionString extends ParsedExpression { + private final String value; + + public ParsedExpressionString(ZenPosition position, String value) { + super(position); + + this.value = value; + } + + @Override + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + return new ExpressionString(getPosition(), environment, value); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionUnary.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java similarity index 73% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionUnary.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java index 2aa44489..4cee7d8b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionUnary.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java @@ -4,14 +4,14 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import zenscript.annotations.OperatorType; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -29,9 +29,9 @@ public ParsedExpressionUnary(ZenPosition position, ParsedExpression value, Opera } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { // TODO: improve type predictions? - Expression cValue = value.compile(environment, predictedType).eval(environment); + Expression cValue = value.compile(environment, predictedType).eval(); return cValue.getType().unary(getPosition(), environment, cValue, operator); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionValue.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java similarity index 73% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionValue.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java index 6ac458cc..b4f0a77a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionValue.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java @@ -4,12 +4,12 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -27,7 +27,7 @@ public ParsedExpressionValue(ZenPosition position, IPartialExpression value) { } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return value; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java similarity index 69% rename from ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java index f1cb797f..06182a16 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/parser/expression/ParsedExpressionVariable.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java @@ -4,15 +4,15 @@ * and open the template in the editor. */ -package stanhebben.zenscript.parser.expression; +package zenscript.parser.expression; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.util.ZenPosition; +import zenscript.util.ZenPosition; /** * @@ -26,16 +26,21 @@ public ParsedExpressionVariable(ZenPosition position, String name) { this.name = name; } + + @Override + public String asIdentifier() { + return name; + } @Override - public IPartialExpression compile(IEnvironmentMethod environment, ZenType predictedType) { - IPartialExpression result = environment.getValue(name, getPosition()); + public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { + IPartialExpression result = environment.getValue(name, getPosition(), environment); if (result == null) { // enable usage of static members of the same type as the predicted type (eg. enum values) IPartialExpression member = predictedType.getStaticMember(getPosition(), environment, name); - if (member == null || member.getType().getCastingRule(predictedType, environment) == null) { + if (member == null || member.getType().getCastingRule(predictedType) == null) { environment.error(getPosition(), "could not find " + name); - return new ExpressionInvalid(getPosition()); + return new ExpressionInvalid(getPosition(), environment); } else { return member; } @@ -45,7 +50,7 @@ public IPartialExpression compile(IEnvironmentMethod environment, ZenType predic } @Override - public Expression compileKey(IEnvironmentMethod environment, ZenType predictedType) { - return new ExpressionString(getPosition(), name); + public Expression compileKey(IScopeMethod environment, ZenType predictedType) { + return new ExpressionString(getPosition(), environment, name); } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatement.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatement.java new file mode 100644 index 00000000..0928586f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatement.java @@ -0,0 +1,81 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementSwitch; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public abstract class ParsedStatement { + public static ParsedStatement parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + Token next = tokener.peek(); + switch (next.getType()) { + case T_AOPEN: + return ParsedStatementBlock.parse(tokener, errorLogger); + + case T_RETURN: + return ParsedStatementReturn.parse(tokener, errorLogger); + + case T_VAR: + case T_VAL: + return ParsedStatementVar.parse(tokener, errorLogger); + + case T_IF: + return ParsedStatementIf.parse(tokener, errorLogger); + + case T_FOR: + return ParsedStatementFor.parse(tokener, errorLogger); + + case T_SWITCH: + return ParsedStatementSwitch.parse(tokener, errorLogger); + + case T_CASE: + return ParsedStatementCase.parse(tokener, errorLogger); + + case T_DEFAULT: + return ParsedStatementDefault.parse(tokener, errorLogger); + + case T_BREAK: + return ParsedStatementBreak.parse(tokener, errorLogger); + + case T_CONTINUE: + return ParsedStatementContinue.parse(tokener, errorLogger); + + case T_WHILE: + return ParsedStatementWhile.parse(tokener, errorLogger); + + case T_DO: + return ParsedStatementDoWhile.parse(tokener, errorLogger); + + default: + return ParsedStatementExpression.parse(tokener, errorLogger); + } + } + + private final ZenPosition position; + + public ParsedStatement(ZenPosition position) { + this.position = position; + } + + public ZenPosition getPosition() { + return position; + } + + public abstract Statement compile(IScopeMethod scope); + + public abstract void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch); +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBlock.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBlock.java new file mode 100644 index 00000000..bfbaa584 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBlock.java @@ -0,0 +1,62 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementBlock; +import stanhebben.zenscript.statements.StatementSwitch; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.T_ACLOSE; +import static zenscript.lexer.ZenTokener.T_AOPEN; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementBlock extends ParsedStatement { + public static ParsedStatementBlock parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_AOPEN, "{ expected").getPosition(); + + ArrayList statements = new ArrayList(); + while (tokener.optional(T_ACLOSE) == null) { + statements.add(ParsedStatement.parse(tokener, errorLogger)); + } + + return new ParsedStatementBlock(position, statements); + } + + private final List statements; + + public ParsedStatementBlock(ZenPosition position, List statements) { + super(position); + + this.statements = statements; + } + + @Override + public Statement compile(IScopeMethod scope) { + IScopeMethod blockScope = new ScopeStatementBlock(scope); + + List result = new ArrayList(); + for (ParsedStatement statement : statements) { + result.add(statement.compile(blockScope)); + } + + return new StatementBlock(getPosition(), scope, result); + } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBreak.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBreak.java new file mode 100644 index 00000000..528cd584 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementBreak.java @@ -0,0 +1,62 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementBreak; +import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.statements.StatementSwitch; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementBreak extends ParsedStatement { + public static ParsedStatementBreak parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_BREAK, "break expected").getPosition(); + + Token label = tokener.optional(TOKEN_ID); + tokener.required(T_SEMICOLON, "; expected"); + + return new ParsedStatementBreak(position, label == null ? null : label.getValue()); + } + + private final String label; + + public ParsedStatementBreak(ZenPosition position, String label) { + super(position); + + this.label = label; + } + + @Override + public Statement compile(IScopeMethod scope) { + Statement controlStatement = scope.getControlStatement(label); + + if (controlStatement == null) { + if (label == null) { + scope.error(getPosition(), "Not inside a control statement"); + } else { + scope.error(getPosition(), "No control statement with the label " + label); + } + return new StatementNull(getPosition(), scope); + } else { + return new StatementBreak(getPosition(), scope, controlStatement); + } + } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java new file mode 100644 index 00000000..53688bde --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementCase extends ParsedStatement { + public static ParsedStatementCase parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_CASE, "case expected").getPosition(); + + ParsedExpression value = ParsedExpression.parse(tokener, errorLogger); + tokener.required(T_COLON, ": expected"); + + return new ParsedStatementCase(position, value); + } + + private final ParsedExpression value; + + public ParsedStatementCase(ZenPosition position, ParsedExpression value) { + super(position); + + this.value = value; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java new file mode 100644 index 00000000..553f3ab2 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementContinue; +import stanhebben.zenscript.statements.StatementNull; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementContinue extends ParsedStatement { + public static ParsedStatementContinue parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_CONTINUE, "continue expected").getPosition(); + + Token label = tokener.optional(TOKEN_ID); + tokener.required(T_SEMICOLON, "; expected"); + + return new ParsedStatementContinue(position, label == null ? null : label.getValue()); + } + + private final String label; + + public ParsedStatementContinue(ZenPosition position, String label) { + super(position); + + this.label = label; + } + + @Override + public Statement compile(IScopeMethod scope) { + Statement controlStatement = scope.getControlStatement(label); + + if (controlStatement == null) { + if (label == null) { + scope.error(getPosition(), "Not inside a control statement"); + } else { + scope.error(getPosition(), "No control statement with the label " + label); + } + return new StatementNull(getPosition(), scope); + } else { + return new StatementContinue(getPosition(), scope, controlStatement); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java new file mode 100644 index 00000000..699d9167 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java @@ -0,0 +1,29 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementDefault extends ParsedStatement { + public static ParsedStatementDefault parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_DEFAULT, "default expected").getPosition(); + tokener.required(T_COLON, ": expected"); + + return new ParsedStatementDefault(position); + } + + public ParsedStatementDefault(ZenPosition position) { + super(position); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java new file mode 100644 index 00000000..61218fe9 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java @@ -0,0 +1,63 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementDoWhile; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementDoWhile extends ParsedStatement { + public static ParsedStatementDoWhile parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_DO, "do expected").getPosition(); + + String label = null; + if (tokener.optional(T_COLON) != null) { + label = tokener.required(TOKEN_ID, "identifier expected").getValue(); + } + + ParsedStatement contents = ParsedStatement.parse(tokener, errorLogger); + + tokener.required(T_WHILE, "while expected"); + ParsedExpression condition = ParsedExpression.parse(tokener, errorLogger); + tokener.required(T_SEMICOLON, "; expected"); + + return new ParsedStatementDoWhile(position, label, contents, condition); + } + + private final String label; + private final ParsedStatement contents; + private final ParsedExpression condition; + + public ParsedStatementDoWhile(ZenPosition position, String label, ParsedStatement contents, ParsedExpression condition) { + super(position); + + this.label = label; + this.contents = contents; + this.condition = condition; + } + + @Override + public Statement compile(IScopeMethod scope) { + Expression compiledCondition = condition.compile(scope, scope.getTypes().BOOL).eval(); + StatementDoWhile compiled = new StatementDoWhile(getPosition(), scope, compiledCondition); + + ScopeStatementBlock statementScope = new ScopeStatementBlock(scope, compiled, label); + compiled.setContents(contents.compile(statementScope)); + return compiled; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java new file mode 100644 index 00000000..f0650525 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementExpression; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.T_SEMICOLON; +import zenscript.parser.expression.ParsedExpression; + +/** + * + * @author Stan + */ +public class ParsedStatementExpression extends ParsedStatement { + public static ParsedStatementExpression parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ParsedExpression expression = ParsedExpression.parse(tokener, errorLogger); + tokener.required(T_SEMICOLON, "; expected"); + + return new ParsedStatementExpression(expression); + } + + private final ParsedExpression expression; + + private ParsedStatementExpression(ParsedExpression expression) { + super(expression.getPosition()); + + this.expression = expression; + } + + @Override + public Statement compile(IScopeMethod scope) { + return new StatementExpression(getPosition(), scope, expression.compile(scope, null).eval()); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java new file mode 100644 index 00000000..8b3d1b8f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java @@ -0,0 +1,87 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementForeach; +import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.symbols.SymbolLocal; +import stanhebben.zenscript.type.IZenIterator; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementFor extends ParsedStatement { + public static ParsedStatementFor parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_FOR, "for expected").getPosition(); + + String name = tokener.required(TOKEN_ID, "identifier expected").getValue(); + List names = new ArrayList(); + names.add(name); + + while (tokener.optional(T_COMMA) != null) { + names.add(tokener.required(TOKEN_ID, "identifier expected").getValue()); + } + + tokener.required(T_IN, "in expected"); + ParsedExpression source = ParsedExpression.parse(tokener, errorLogger); + ParsedStatement content = ParsedStatement.parse(tokener, errorLogger); + return new ParsedStatementFor( + position, + names, + source, + content); + } + + private final List names; + private final ParsedExpression source; + private final ParsedStatement content; + + public ParsedStatementFor(ZenPosition position, List names, ParsedExpression source, ParsedStatement content) { + super(position); + + this.names = names; + this.source = source; + this.content = content; + } + + @Override + public Statement compile(IScopeMethod scope) { + Expression compiledSource = source.compile(scope, null).eval(); + IZenIterator iterator = compiledSource.getType().makeIterator(names.size()); + if (iterator == null) { + scope.error(getPosition(), compiledSource.getType().getName() + " has no iterator with " + names.size() + " variables."); + return new StatementNull(getPosition(), scope); + } + + + List symbols = new ArrayList(); + StatementForeach compiledStatement = new StatementForeach(getPosition(), scope, symbols, compiledSource, iterator); + ScopeStatementBlock loopScope = new ScopeStatementBlock(scope, compiledStatement, names); + for (int i = 0; i < names.size(); i++) { + SymbolLocal symbol = new SymbolLocal(iterator.getType(i), true); + symbols.add(symbol); + loopScope.putValue(names.get(i), symbol, getPosition()); + } + + Statement compiledContents = content.compile(loopScope); + compiledStatement.setBody(compiledContents); + + return compiledStatement; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java new file mode 100644 index 00000000..c2c984cb --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementIf; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.runtime.IAny; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementIf extends ParsedStatement { + public static ParsedStatementIf parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_IF, "if expected").getPosition(); + + ParsedExpression condition = ParsedExpression.parse(tokener, errorLogger); + ParsedStatement onIf = ParsedStatement.parse(tokener, errorLogger); + ParsedStatement onElse = null; + if (tokener.optional(T_ELSE) != null) { + onElse = ParsedStatement.parse(tokener, errorLogger); + } + + return new ParsedStatementIf(position, condition, onIf, onElse); + } + + private final ParsedExpression condition; + private final ParsedStatement onIf; + private final ParsedStatement onElse; + + public ParsedStatementIf(ZenPosition position, ParsedExpression condition, ParsedStatement onIf, ParsedStatement onElse) { + super(position); + + this.condition = condition; + this.onIf = onIf; + this.onElse = onElse; + } + + @Override + public Statement compile(IScopeMethod scope) { + IAny eval = condition.eval(); + if (eval != null) { + // compile-time variable + if (eval.asBool()) { + ScopeStatementBlock ifScope = new ScopeStatementBlock(scope); + return onIf.compile(ifScope); + } else { + ScopeStatementBlock elseScope = new ScopeStatementBlock(scope); + return onElse.compile(elseScope); + } + } else { + // runtime variable + Expression compiledCondition = condition.compile(scope, scope.getTypes().BOOL).eval(); + ScopeStatementBlock ifScope = new ScopeStatementBlock(scope); + Statement compiledIf = onIf.compile(ifScope); + Statement compiledElse = null; + + if (onElse != null) { + ScopeStatementBlock elseScope = new ScopeStatementBlock(scope); + compiledElse = onElse.compile(elseScope); + } + + return new StatementIf(getPosition(), scope, compiledCondition, compiledIf, compiledElse); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java new file mode 100644 index 00000000..92b28859 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java @@ -0,0 +1,51 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementReturn; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.T_RETURN; +import static zenscript.lexer.ZenTokener.T_SEMICOLON; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementReturn extends ParsedStatement { + public static ParsedStatementReturn parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_RETURN, "return expected").getPosition(); + + ParsedExpression expression = null; + if (tokener.optional(T_SEMICOLON) == null) { + expression = ParsedExpression.parse(tokener, errorLogger); + tokener.required(T_SEMICOLON, "; expected"); + } + + return new ParsedStatementReturn(position, expression); + } + + private final ParsedExpression value; + + public ParsedStatementReturn(ZenPosition position, ParsedExpression value) { + super(position); + + this.value = value; + } + + @Override + public Statement compile(IScopeMethod scope) { + return new StatementReturn( + getPosition(), + scope, + value == null ? null : value.compile(scope, scope.getReturnType()).eval()); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java new file mode 100644 index 00000000..08af4fc8 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java @@ -0,0 +1,49 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementSwitch extends ParsedStatement { + public static ParsedStatementSwitch parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_SWITCH, "switch expected").getPosition(); + + String label = null; + if (tokener.optional(T_COLON) != null) { + label = tokener.required(TOKEN_ID, "identifier expected").getValue(); + } + + ParsedExpression value = ParsedExpression.parse(tokener, errorLogger); + ParsedStatementBlock contents = ParsedStatementBlock.parse(tokener, errorLogger); + + return new ParsedStatementSwitch(position, label, value, contents); + } + + private final String label; + private final ParsedExpression value; + private final ParsedStatementBlock contents; + + public ParsedStatementSwitch( + ZenPosition position, + String label, + ParsedExpression value, + ParsedStatementBlock contents) { + super(position); + + this.label = label; + this.value = value; + this.contents = contents; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java new file mode 100644 index 00000000..321a8b04 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java @@ -0,0 +1,78 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementVar; +import stanhebben.zenscript.symbols.SymbolLocal; +import stanhebben.zenscript.type.ZenType; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ParseException; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.parser.expression.ParsedExpression; +import zenscript.parser.type.IParsedType; +import zenscript.parser.type.TypeParser; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementVar extends ParsedStatement { + public static ParsedStatementVar parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + Token token = tokener.next(); + if (token.getType() != T_VAR && token.getType() != T_VAL) { + throw new ParseException(token, "var or val expected"); + } + + String name = tokener.required(TOKEN_ID, "identifier expected").getValue(); + + IParsedType type = null; + ParsedExpression initializer = null; + if (tokener.optional(T_AS) != null) { + type = TypeParser.parse(tokener, errorLogger); + } + + if (tokener.optional(T_ASSIGN) != null) { + initializer = ParsedExpression.parse(tokener, errorLogger); + } + + tokener.required(T_SEMICOLON, "; expected"); + return new ParsedStatementVar(token.getPosition(), name, type, initializer, token.getType() == T_VAL); + } + + private final String name; + private final boolean isFinal; + private final IParsedType asType; + private final ParsedExpression initializer; + + public ParsedStatementVar(ZenPosition position, String name, IParsedType asType, ParsedExpression initializer, boolean isFinal) { + super(position); + + this.name = name; + this.asType = asType; + this.initializer = initializer; + this.isFinal = isFinal; + } + + @Override + public Statement compile(IScopeMethod scope) { + ZenType cType = scope.getTypes().ANY; + Expression cInitializer = null; + if (asType != null) { + cType = asType.compile(scope); + } + + SymbolLocal symbol = new SymbolLocal(cType, isFinal); + scope.putValue(name, symbol, getPosition()); + return new StatementVar(getPosition(), scope, symbol, cInitializer); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java new file mode 100644 index 00000000..0971e54f --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java @@ -0,0 +1,61 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.statement; + +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementWhile; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.TOKEN_ID; +import static zenscript.lexer.ZenTokener.T_COLON; +import static zenscript.lexer.ZenTokener.T_WHILE; +import zenscript.parser.expression.ParsedExpression; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedStatementWhile extends ParsedStatement { + public static ParsedStatementWhile parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + ZenPosition position = tokener.required(T_WHILE, "while expected").getPosition(); + + String label = null; + if (tokener.optional(T_COLON) != null) { + label = tokener.required(TOKEN_ID, "identifier expected").getValue(); + } + + ParsedExpression condition = ParsedExpression.parse(tokener, errorLogger); + ParsedStatement contents = ParsedStatement.parse(tokener, errorLogger); + + return new ParsedStatementWhile(position, label, condition, contents); + } + + private final String label; + private final ParsedExpression condition; + private final ParsedStatement contents; + + public ParsedStatementWhile(ZenPosition position, String label, ParsedExpression condition, ParsedStatement contents) { + super(position); + + this.label = label; + this.condition = condition; + this.contents = contents; + } + + @Override + public Statement compile(IScopeMethod scope) { + Expression cCondition = condition.compile(scope, scope.getTypes().BOOL).eval(); + StatementWhile result = new StatementWhile(getPosition(), scope, cCondition); + ScopeStatementBlock blockScope = new ScopeStatementBlock(scope, result, label); + result.setContents(contents.compile(blockScope)); + return result; + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/ITypeRegistry.java b/ZenScript/src/main/java/zenscript/parser/type/IParsedType.java similarity index 61% rename from ZenScript/src/main/java/stanhebben/zenscript/compiler/ITypeRegistry.java rename to ZenScript/src/main/java/zenscript/parser/type/IParsedType.java index 155ed0f2..30ad9375 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/ITypeRegistry.java +++ b/ZenScript/src/main/java/zenscript/parser/type/IParsedType.java @@ -4,15 +4,15 @@ * and open the template in the editor. */ -package stanhebben.zenscript.compiler; +package zenscript.parser.type; -import java.lang.reflect.Type; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.ZenType; /** * * @author Stan */ -public interface ITypeRegistry { - public ZenType getType(Type type); +public interface IParsedType { + public ZenType compile(IScopeGlobal environment); } diff --git a/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeArray.java b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeArray.java new file mode 100644 index 00000000..a55eb7db --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeArray.java @@ -0,0 +1,28 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.ZenTypeArrayBasic; + +/** + * + * @author Stan + */ +public class ParsedTypeArray implements IParsedType { + private final IParsedType baseType; + + public ParsedTypeArray(IParsedType baseType) { + this.baseType = baseType; + } + + @Override + public ZenType compile(IScopeGlobal environment) { + return new ZenTypeArrayBasic(environment, baseType.compile(environment)); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeAssociative.java b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeAssociative.java new file mode 100644 index 00000000..9b8a5cf8 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeAssociative.java @@ -0,0 +1,33 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.ZenTypeAssociative; + +/** + * + * @author Stan + */ +public class ParsedTypeAssociative implements IParsedType { + private final IParsedType keyType; + private final IParsedType valueType; + + public ParsedTypeAssociative(IParsedType keyType, IParsedType valueType) { + this.keyType = keyType; + this.valueType = valueType; + } + + @Override + public ZenType compile(IScopeGlobal environment) { + return new ZenTypeAssociative( + environment, + valueType.compile(environment), + keyType.compile(environment)); + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeBasic.java b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeBasic.java new file mode 100644 index 00000000..cc58e819 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeBasic.java @@ -0,0 +1,48 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.ZenType; +import zenscript.symbolic.TypeRegistry; + +/** + * + * @author Stan + */ +public enum ParsedTypeBasic implements IParsedType { + ANY, + VOID, + BOOL, + BYTE, + SHORT, + INT, + LONG, + FLOAT, + DOUBLE, + STRING; + + @Override + public ZenType compile(IScopeGlobal environment) { + TypeRegistry types = environment.getTypes(); + + switch (this) { + case ANY: return types.ANY; + case VOID: return types.VOID; + case BOOL: return types.BOOL; + case BYTE: return types.BYTE; + case SHORT: return types.SHORT; + case INT: return types.INT; + case LONG: return types.LONG; + case FLOAT: return types.FLOAT; + case DOUBLE: return types.DOUBLE; + case STRING: return types.STRING; + default: + throw new AssertionError("Missing enum value: " + this); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeClass.java b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeClass.java new file mode 100644 index 00000000..e394cee1 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeClass.java @@ -0,0 +1,83 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.type.ZenType; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import zenscript.util.StringUtil; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedTypeClass implements IParsedType { + private final ZenPosition position; + private final List name; + private final List genericType; + + public ParsedTypeClass(IZenErrorLogger errors, ZenTokener tokener) { + Token nameFirst = tokener.required(TOKEN_ID, "identifier expected"); + position = nameFirst.getPosition(); + + name = new ArrayList(); + name.add(nameFirst.getValue()); + + while (tokener.optional(T_DOT) != null) { + Token namePart = tokener.required(TOKEN_ID, "identifier expected"); + name.add(namePart.getValue()); + } + + if (tokener.optional(T_LT) == null) { + genericType = null; + } else { + genericType = new ArrayList(); + while (tokener.optional(T_GT) != null) { + IParsedType type = TypeParser.parse(tokener, errors); + genericType.add(type); + } + } + } + + @Override + public ZenType compile(IScopeGlobal environment) { + IPartialExpression expression = environment.getValue(name.get(0), position, environment.getTypes().getStaticGlobalEnvironment()); + + for (int i = 1; i < name.size(); i++) { + expression = expression.getMember(position, name.get(i)); + if (expression == null) { + environment.error(position, "Could not find package or class " + StringUtil.join(name.subList(0, i), ".")); + return environment.getTypes().ANY; + } + } + + List compiledGenericTypes; + if (genericType == null) { + compiledGenericTypes = null; + } else { + compiledGenericTypes = new ArrayList(); + for (IParsedType type : genericType) { + compiledGenericTypes.add(type.compile(environment)); + } + } + + ZenType type = expression.toType(compiledGenericTypes); + if (type == null) { + environment.error(position, StringUtil.join(name, ".") + " is not a valid type"); + type = environment.getTypes().ANY; + } + + return type; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeNullable.java b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeNullable.java new file mode 100644 index 00000000..2954a707 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/ParsedTypeNullable.java @@ -0,0 +1,36 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.ZenType; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public class ParsedTypeNullable implements IParsedType { + private final ZenPosition position; + private final IParsedType baseType; + + public ParsedTypeNullable(ZenPosition position, IParsedType baseType) { + this.position = position; + this.baseType = baseType; + } + + @Override + public ZenType compile(IScopeGlobal environment) { + ZenType cBaseType = baseType.compile(environment); + ZenType type = cBaseType.nullable(); + if (type == null) { + environment.error(position, baseType + " is not a nullable type"); + type = environment.getTypes().ANY; + } + return type; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/type/TypeParser.java b/ZenScript/src/main/java/zenscript/parser/type/TypeParser.java new file mode 100644 index 00000000..7332793d --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/type/TypeParser.java @@ -0,0 +1,112 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.type; + +import java.io.IOException; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.ZenType; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ParseException; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.*; +import static zenscript.parser.type.ParsedTypeBasic.*; + +/** + * + * @author Stan + */ +public class TypeParser { + private TypeParser() {} + + public static ZenType parseDirect(String value, IScopeGlobal environment) { + try { + return parse(new ZenTokener(value), environment).compile(environment); + } catch (IOException ex) { + throw new RuntimeException("Could not parse type " + value, ex); + } + } + + public static IParsedType parse(ZenTokener tokener, IZenErrorLogger errorLogger) { + IParsedType result; + + Token firstToken = tokener.next(); + switch (firstToken.getType()) { + case T_ANY: + result = ANY; + break; + + case T_VOID: + result = VOID; + break; + + case T_BOOL: + result = BOOL; + break; + + case T_BYTE: + result = BYTE; + break; + + case T_SHORT: + result = SHORT; + break; + + case T_INT: + result = INT; + break; + + case T_LONG: + result = LONG; + break; + + case T_FLOAT: + result = FLOAT; + break; + + case T_DOUBLE: + result = DOUBLE; + break; + + case T_STRING: + result = STRING; + break; + + case TOKEN_ID: + result = new ParsedTypeClass(errorLogger, tokener); + break; + + default: + throw new ParseException(firstToken, "Unknown type: " + firstToken.getValue()); + } + + while (tokener.hasNext()) { + Token token = tokener.peek(); + + if (token.getType() == T_QUEST) { + tokener.next(); + result = new ParsedTypeNullable(firstToken.getPosition(), result); + + } else if (token.getType() == T_SQBRCLOSE) { + tokener.next(); + + if (tokener.optional(T_SQBRCLOSE) == null) { + IParsedType keyType = parse(tokener, errorLogger); + result = new ParsedTypeAssociative(result, keyType); + + tokener.required(T_SQBRCLOSE, "] expected"); + } else { + result = new ParsedTypeArray(result); + } + } else { + break; + } + } + + return result; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyBool.java b/ZenScript/src/main/java/zenscript/runtime/AnyBool.java new file mode 100644 index 00000000..4f2b2614 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyBool.java @@ -0,0 +1,191 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyBool implements IAny { + private final boolean value; + + public AnyBool(boolean value) { + this.value = value; + } + + @Override + public IAny not() { + return new AnyBool(!value); + } + + @Override + public IAny neg() { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny add(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny sub(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny cat(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny mul(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny div(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny mod(IAny value) { + throw new UnsupportedOperationException("bool doesn't support arithmetic operators"); + } + + @Override + public IAny and(IAny value) { + return new AnyBool(this.value & value.asBool()); + } + + @Override + public IAny or(IAny value) { + return new AnyBool(this.value | value.asBool()); + } + + @Override + public IAny xor(IAny value) { + return new AnyBool(this.value ^ value.asBool()); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("bool doesn't support ranges"); + } + + @Override + public int compareTo(IAny value) { + throw new UnsupportedOperationException("bool doesn't support comparison"); + } + + @Override + public boolean contains(IAny value) { + throw new UnsupportedOperationException("bool cannot contain other values"); + } + + @Override + public IAny memberGet(String member) { + throw new UnsupportedOperationException("bool doesn't have members"); + } + + @Override + public void memberSet(String member, IAny value) { + throw new UnsupportedOperationException("bool doesn't have members"); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("bool doesn't have members"); + } + + @Override + public IAny indexGet(IAny key) { + throw new UnsupportedOperationException("bool doesn't support indexing"); + } + + @Override + public void indexSet(IAny key, IAny value) { + throw new UnsupportedOperationException("bool doesn't support indexing"); + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("Cannot call booleans"); + } + + @Override + public boolean asBool() { + return value; + } + + @Override + public byte asByte() { + throw new ClassCastException("Cannot convert bool to byte"); + } + + @Override + public short asShort() { + throw new ClassCastException("Cannot convert bool to short"); + } + + @Override + public int asInt() { + throw new ClassCastException("Cannot convert bool to int"); + } + + @Override + public long asLong() { + throw new ClassCastException("Cannot convert bool to long"); + } + + @Override + public float asFloat() { + throw new ClassCastException("Cannot convert bool to double"); + } + + @Override + public double asDouble() { + throw new ClassCastException("Cannot convert bool to double"); + } + + @Override + public String asString() { + return Boolean.toString(value); + } + + @Override + public T as(Class cls) { + return null; + } + + @Override + public boolean is(Class cls) { + return cls == boolean.class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return false; + } + + @Override + public int getNumberType() { + return 0; + } + + @Override + public Iterator iteratorSingle() { + throw new UnsupportedOperationException("bool doesn't have iterators"); + } + + @Override + public Iterator iteratorMulti(int n) { + throw new UnsupportedOperationException("bool doesn't have iterators"); + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyInt.java b/ZenScript/src/main/java/zenscript/runtime/AnyInt.java new file mode 100644 index 00000000..a487eb72 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyInt.java @@ -0,0 +1,193 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; +import stanhebben.zenscript.type.ZenType; + +/** + * + * @author Stan + */ +public class AnyInt implements IAny { + private final int value; + + public AnyInt(int value) { + this.value = value; + } + + @Override + public IAny not() { + return new AnyInt(~value); + } + + @Override + public IAny neg() { + return new AnyInt(-value); + } + + @Override + public IAny add(IAny value) { + return new AnyInt(this.value + value.asInt()); + } + + @Override + public IAny sub(IAny value) { + return new AnyInt(this.value - value.asInt()); + } + + @Override + public IAny cat(IAny value) { + return new AnyString(String.valueOf(this.value) + value.asString()); + } + + @Override + public IAny mul(IAny value) { + return new AnyInt(this.value * value.asInt()); + } + + @Override + public IAny div(IAny value) { + return new AnyInt(this.value / value.asInt()); + } + + @Override + public IAny mod(IAny value) { + return new AnyInt(this.value % value.asInt()); + } + + @Override + public IAny and(IAny value) { + return new AnyInt(this.value & value.asInt()); + } + + @Override + public IAny or(IAny value) { + return new AnyInt(this.value | value.asInt()); + } + + @Override + public IAny xor(IAny value) { + return new AnyInt(this.value ^ value.asInt()); + } + + @Override + public IAny range(IAny value) { + // TODO: implement + throw new UnsupportedOperationException("not yet supported"); + } + + @Override + public int compareTo(IAny value) { + return this.value - value.asInt(); + } + + @Override + public boolean contains(IAny value) { + return false; + } + + @Override + public IAny memberGet(String member) { + throw new UnsupportedOperationException("No members in int"); + } + + @Override + public void memberSet(String member, IAny value) { + throw new UnsupportedOperationException("No members in int"); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("No members in int"); + } + + @Override + public IAny indexGet(IAny key) { + throw new UnsupportedOperationException("Cannot index integers"); + } + + @Override + public void indexSet(IAny key, IAny value) { + throw new UnsupportedOperationException("Cannot index integers"); + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("Cannot call integers"); + } + + @Override + public boolean asBool() { + throw new UnsupportedOperationException("Cannot convert integers to bools"); + } + + @Override + public byte asByte() { + return (byte) value; + } + + @Override + public short asShort() { + return (short) value; + } + + @Override + public int asInt() { + return value; + } + + @Override + public long asLong() { + return value; + } + + @Override + public float asFloat() { + return value; + } + + @Override + public double asDouble() { + return value; + } + + @Override + public String asString() { + return Integer.toString(value); + } + + @Override + public T as(Class cls) { + return null; + } + + @Override + public boolean is(Class cls) { + return cls == int.class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return cls == int.class || cls == byte.class || cls == short.class || cls == float.class || cls == double.class; + } + + @Override + public int getNumberType() { + return ZenType.NUM_INT; + } + + @Override + public Iterator iteratorSingle() { + throw new UnsupportedOperationException("int doesn't have iterators"); + } + + @Override + public Iterator iteratorMulti(int n) { + throw new UnsupportedOperationException("int doesn't have iterators"); + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyString.java b/ZenScript/src/main/java/zenscript/runtime/AnyString.java new file mode 100644 index 00000000..2de9a9a2 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyString.java @@ -0,0 +1,217 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyString implements IAny { + private final String value; + + public AnyString(String value) { + this.value = value; + } + + @Override + public IAny not() { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny neg() { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny add(IAny value) { + return cat(value); + } + + @Override + public IAny sub(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny cat(IAny value) { + return new AnyString(this.value + value.asString()); + } + + @Override + public IAny mul(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny div(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny mod(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny and(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny or(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny xor(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("String doesn't support the range operator"); + } + + @Override + public int compareTo(IAny value) { + return this.value.compareTo(value.asString()); + } + + @Override + public boolean contains(IAny value) { + return this.value.contains(value.asString()); + } + + @Override + public IAny memberGet(String member) { + if (member.equals("length")) { + return new AnyInt(this.value.length()); + } else { + throw new UnsupportedOperationException("string doesn't have a member " + member); + } + } + + @Override + public void memberSet(String member, IAny value) { + throw new UnsupportedOperationException("string is immutable"); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("string doesn't have callable members"); + } + + @Override + public IAny indexGet(IAny key) { + int index = key.asInt(); + return new AnyString(this.value.substring(index, index + 1)); + } + + @Override + public void indexSet(IAny key, IAny value) { + throw new UnsupportedOperationException("string is immutable"); + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("string cannot be called"); + } + + @Override + public boolean asBool() { + return Boolean.parseBoolean(value); + } + + @Override + public byte asByte() { + return Byte.parseByte(value); + } + + @Override + public short asShort() { + return Short.parseShort(value); + } + + @Override + public int asInt() { + return Integer.parseInt(value); + } + + @Override + public long asLong() { + return Long.parseLong(value); + } + + @Override + public float asFloat() { + return Float.parseFloat(value); + } + + @Override + public double asDouble() { + return Double.parseDouble(value); + } + + @Override + public String asString() { + return value; + } + + @Override + public T as(Class cls) { + return null; + } + + @Override + public boolean is(Class cls) { + return cls == String.class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return cls == String.class; + } + + @Override + public int getNumberType() { + return 0; + } + + @Override + public Iterator iteratorSingle() { + return new CharacterIterator(); + } + + @Override + public Iterator iteratorMulti(int n) { + throw new UnsupportedOperationException("iterator with " + n + " variables not supported"); + } + + private class CharacterIterator implements Iterator { + private int index = 0; + + @Override + public boolean hasNext() { + return index < value.length(); + } + + @Override + public IAny next() { + IAny result = new AnyString(value.substring(index, index + 1)); + index++; + return result; + } + + @Override + public void remove() { + throw new UnsupportedOperationException("string is immutable"); + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/value/IAny.java b/ZenScript/src/main/java/zenscript/runtime/IAny.java similarity index 92% rename from ZenScript/src/main/java/stanhebben/zenscript/value/IAny.java rename to ZenScript/src/main/java/zenscript/runtime/IAny.java index 654de1fe..f47e105f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/value/IAny.java +++ b/ZenScript/src/main/java/zenscript/runtime/IAny.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.value; +package zenscript.runtime; import java.util.Iterator; @@ -13,7 +13,8 @@ * @author Stan Hebben */ public interface IAny { - public static final String NAME = "stanhebben/zenscript/value/IAny"; + public static final String NAME = IAny.class.getName(); + public static final String SIGNATURE = "L" + NAME + ";"; public static final int NUM_BYTE = 1; public static final int NUM_SHORT = 2; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/value/IntRange.java b/ZenScript/src/main/java/zenscript/runtime/Range.java similarity index 58% rename from ZenScript/src/main/java/stanhebben/zenscript/value/IntRange.java rename to ZenScript/src/main/java/zenscript/runtime/Range.java index b707e3c3..5731af1f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/value/IntRange.java +++ b/ZenScript/src/main/java/zenscript/runtime/Range.java @@ -1,22 +1,26 @@ -package stanhebben.zenscript.value; +package zenscript.runtime; + +import zenscript.annotations.ZenGetter; /** * * @author Stan Hebben */ -public class IntRange { +public class Range { private final int from; private final int to; - public IntRange(int from, int to) { + public Range(int from, int to) { this.from = from; this.to = to; } + @ZenGetter public int getFrom() { return from; } + @ZenGetter public int getTo() { return to; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java b/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java new file mode 100644 index 00000000..881c6008 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java @@ -0,0 +1,342 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.lang.reflect.TypeVariable; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.objectweb.asm.ClassVisitor; +import stanhebben.zenscript.IZenCompileEnvironment; +import stanhebben.zenscript.TypeExpansion; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.ZenTypeAny; +import stanhebben.zenscript.type.ZenTypeArrayBasic; +import stanhebben.zenscript.type.ZenTypeArrayList; +import stanhebben.zenscript.type.ZenTypeAssociative; +import stanhebben.zenscript.type.ZenTypeBool; +import stanhebben.zenscript.type.ZenTypeBoolObject; +import stanhebben.zenscript.type.ZenTypeByte; +import stanhebben.zenscript.type.ZenTypeByteObject; +import stanhebben.zenscript.type.ZenTypeDouble; +import stanhebben.zenscript.type.ZenTypeDoubleObject; +import stanhebben.zenscript.type.ZenTypeFloat; +import stanhebben.zenscript.type.ZenTypeFloatObject; +import stanhebben.zenscript.type.ZenTypeInt; +import stanhebben.zenscript.type.ZenTypeIntObject; +import stanhebben.zenscript.type.ZenTypeLong; +import stanhebben.zenscript.type.ZenTypeLongObject; +import stanhebben.zenscript.type.ZenTypeNative; +import stanhebben.zenscript.type.ZenTypeNull; +import stanhebben.zenscript.type.ZenTypeShort; +import stanhebben.zenscript.type.ZenTypeShortObject; +import stanhebben.zenscript.type.ZenTypeString; +import stanhebben.zenscript.type.ZenTypeVoid; +import zenscript.runtime.IAny; +import zenscript.runtime.Range; +import zenscript.symbolic.type.generic.TypeCapture; +import zenscript.symbolic.type.generic.TypeVariableNative; +import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; + +/** + * + * @author Stan + */ +public final class TypeRegistry { + public final ZenType VOID; + public final ZenType NULL; + public final ZenType ANY; + public final ZenType BOOL; + public final ZenType BOOLOBJECT; + public final ZenType BYTE; + public final ZenType BYTEOBJECT; + public final ZenType SHORT; + public final ZenType SHORTOBJECT; + public final ZenType INT; + public final ZenType INTOBJECT; + public final ZenType LONG; + public final ZenType LONGOBJECT; + public final ZenType FLOAT; + public final ZenType FLOATOBJECT; + public final ZenType DOUBLE; + public final ZenType DOUBLEOBJECT; + public final ZenType STRING; + public final ZenType RANGE; + + public final ZenTypeArrayBasic ANYARRAY; + public final ZenTypeArrayList ANYARRAYLIST; + public final ZenTypeAssociative ANYMAP; + + private final IScopeGlobal environment; + private final Map nativeTypes; + private final CommonMethods commonMethods; + private final IScopeMethod staticGlobalEnvironment; + + public TypeRegistry(IScopeGlobal environment) { + this.environment = environment; + + VOID = new ZenTypeVoid(environment); + NULL = new ZenTypeNull(environment); + ANY = new ZenTypeAny(environment); + BOOL = new ZenTypeBool(environment); + BOOLOBJECT = new ZenTypeBoolObject(environment, BOOL); + BYTE = new ZenTypeByte(environment); + BYTEOBJECT = new ZenTypeByteObject(environment, BYTE); + SHORT = new ZenTypeShort(environment); + SHORTOBJECT = new ZenTypeShortObject(environment, SHORT); + INT = new ZenTypeInt(environment); + INTOBJECT = new ZenTypeIntObject(environment, INT); + LONG = new ZenTypeLong(environment); + LONGOBJECT = new ZenTypeLongObject(environment, LONG); + FLOAT = new ZenTypeFloat(environment); + FLOATOBJECT = new ZenTypeFloatObject(environment, FLOAT); + DOUBLE = new ZenTypeDouble(environment); + DOUBLEOBJECT = new ZenTypeDoubleObject(environment, DOUBLE); + STRING = new ZenTypeString(environment); + + ANYARRAY = new ZenTypeArrayBasic(environment, ANY); + ANYARRAYLIST = new ZenTypeArrayList(environment, ANY); + ANYMAP = new ZenTypeAssociative(environment, ANY, ANY); + + nativeTypes = new HashMap(); + + nativeTypes.put(boolean.class, BOOL); + nativeTypes.put(byte.class, BYTE); + nativeTypes.put(short.class, SHORT); + nativeTypes.put(int.class, INT); + nativeTypes.put(long.class, LONG); + nativeTypes.put(float.class, FLOAT); + nativeTypes.put(double.class, DOUBLE); + nativeTypes.put(void.class, VOID); + + nativeTypes.put(Boolean.class, BOOLOBJECT); + nativeTypes.put(Byte.class, BYTEOBJECT); + nativeTypes.put(Short.class, SHORTOBJECT); + nativeTypes.put(Integer.class, INTOBJECT); + nativeTypes.put(Long.class, LONGOBJECT); + nativeTypes.put(Float.class, FLOATOBJECT); + nativeTypes.put(Double.class, DOUBLEOBJECT); + + nativeTypes.put(IAny.class, ANY); + + nativeTypes.put(String.class, STRING); + nativeTypes.put(List.class, ANYARRAYLIST); + + this.commonMethods = new CommonMethods(environment); + staticGlobalEnvironment = new StaticGlobalEnvironment(); + + RANGE = getNativeType(null, Range.class, null); + } + + public ZenType getNativeType(ZenPosition position, Type type, TypeCapture capture) { + if (type instanceof ParameterizedType) { + ParameterizedType pType = (ParameterizedType) type; + Type raw = pType.getRawType(); + if (raw instanceof Class) { + Class rawClass = (Class) raw; + TypeVariable[] typeVariables = rawClass.getTypeParameters(); + if (typeVariables.length != 0) { + environment.error(position, "Missing type parameters"); + } + + if (List.class == rawClass) { + return getListType(pType); + } else if (Map.class == rawClass) { + return getMapType(pType); + } else { + return getNativeClassType(position, rawClass, capture); + } + } else { + return getNativeType(position, raw, capture); + } + } else if (type instanceof Class) { + return getNativeClassType(position, (Class) type, capture); + } else { + throw new RuntimeException("Could not convert native type: " + type); + } + } + + public ZenType getInstancedNativeType(ZenPosition position, Type type, List genericTypes, TypeCapture capture) { + if (type instanceof ParameterizedType) { + ParameterizedType pType = (ParameterizedType) type; + Type raw = pType.getRawType(); + if (raw instanceof Class) { + Class rawCls = (Class) raw; + + if (List.class == rawCls) { + return getListType(pType); + } else if (Map.class == rawCls) { + return getMapType(pType); + } else { + Type[] parameters = pType.getActualTypeArguments(); + TypeVariable[] typeVariables = rawCls.getTypeParameters(); + TypeCapture newCapture = new TypeCapture(capture); + for (int i = 0; i < parameters.length; i++) { + newCapture.put(new TypeVariableNative( + typeVariables[i]), + getNativeType(position, parameters[i], capture) + ); + } + + return getNativeClassType(position, rawCls, newCapture); + } + } else { + return getNativeType(position, raw, capture); + } + } else if (type instanceof Class) { + Class cls = (Class) type; + + TypeVariable[] typeVariables = cls.getTypeParameters(); + if (typeVariables.length != genericTypes.size()) { + environment.error(position, "number of parameters doesn't match"); + return getNativeType(position, type, capture); + } + + TypeCapture newCapture = new TypeCapture(capture); + for (int i = 0; i < typeVariables.length; i++) { + newCapture.put(new TypeVariableNative(typeVariables[i]), genericTypes.get(i)); + } + + return getNativeClassType(position, cls, newCapture); + } else { + throw new RuntimeException("Could not convert native type: " + type); + } + } + + public CommonMethods getCommonMethods() { + return commonMethods; + } + + /** + * Retrieves a method environment that can be used to resolve constant + * expressions. + * + * @return compile-time static environment + */ + public IScopeMethod getStaticGlobalEnvironment() { + return staticGlobalEnvironment; + } + + // ####################### + // ### Private methods ### + // ####################### + + private ZenType getNativeClassType(ZenPosition position, Class cls, TypeCapture capture) { + if (nativeTypes.containsKey(cls)) { + return nativeTypes.get(cls); + } else if (cls.isArray()) { + ZenType result = new ZenTypeArrayBasic(environment, getNativeType(position, cls.getComponentType(), capture)); + nativeTypes.put(cls, result); + return result; + } else { + ZenTypeNative result = new ZenTypeNative(environment, cls, capture); + nativeTypes.put(cls, result); + result.complete(this); + return result; + } + } + + private ZenType getListType(ParameterizedType type) { + if (type.getRawType() == List.class) { + return new ZenTypeArrayList(environment, getNativeType(null, type.getActualTypeArguments()[0], TypeCapture.EMPTY)); + } + + return null; + } + + private ZenType getMapType(ParameterizedType type) { + if (type.getRawType() == Map.class) { + return new ZenTypeAssociative( + environment, + getNativeType(null, type.getActualTypeArguments()[1], TypeCapture.EMPTY), + getNativeType(null, type.getActualTypeArguments()[0], TypeCapture.EMPTY)); + } + + return null; + } + + private class StaticGlobalEnvironment implements IScopeMethod { + @Override + public ClassVisitor getClassOutput() { + throw new UnsupportedOperationException("Not possible!"); + } + + @Override + public TypeRegistry getTypes() { + return TypeRegistry.this; + } + + @Override + public IZenCompileEnvironment getEnvironment() { + return environment.getEnvironment(); + } + + @Override + public TypeExpansion getExpansion(String name) { + return environment.getExpansion(name); + } + + @Override + public String makeClassName() { + return environment.makeClassName(); + } + + @Override + public boolean containsClass(String name) { + return environment.containsClass(name); + } + + @Override + public Set getClassNames() { + return environment.getClassNames(); + } + + @Override + public byte[] getClass(String name) { + return environment.getClass(name); + } + + @Override + public void putClass(String name, byte[] data) { + environment.putClass(name, data); + } + + @Override + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod environment) { + return environment.getValue(name, position, environment); + } + + @Override + public void putValue(String name, IZenSymbol value, ZenPosition position) { + throw new UnsupportedOperationException("Not possible!"); + } + + @Override + public void error(ZenPosition position, String message) { + environment.error(position, message); + } + + @Override + public void warning(ZenPosition position, String message) { + environment.warning(position, message); + } + + @Override + public Statement getControlStatement(String label) { + return null; + } + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/BaseCastingRule.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/BaseCastingRule.java similarity index 76% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/BaseCastingRule.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/BaseCastingRule.java index 7d831bc6..c4b05cff 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/BaseCastingRule.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/BaseCastingRule.java @@ -4,10 +4,10 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -21,7 +21,7 @@ public BaseCastingRule(ICastingRule baseRule) { } @Override - public final void compile(IEnvironmentMethod method) { + public final void compile(MethodOutput method) { if (baseRule != null) baseRule.compile(method); @@ -35,5 +35,5 @@ public final ZenType getInputType() { public abstract ZenType getInnerInputType(); - public abstract void compileInner(IEnvironmentMethod method); + public abstract void compileInner(MethodOutput method); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyBool.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyBool.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyBool.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyBool.java index 28671e26..41a37f06 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyBool.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyBool.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyBool implements ICastingRule { - public static final CastingAnyBool INSTANCE = new CastingAnyBool(); + private final TypeRegistry types; - private CastingAnyBool() {} + public CastingAnyBool(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asBool", boolean.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asBool", boolean.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.BOOL; + return types.BOOL; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyByte.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyByte.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyByte.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyByte.java index b3a6393e..cd2525a6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyByte.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyByte.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyByte implements ICastingRule { - public static final CastingAnyByte INSTANCE = new CastingAnyByte(); + private final TypeRegistry types; - private CastingAnyByte() {} + public CastingAnyByte(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asByte", byte.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asByte", byte.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.BYTE; + return types.BYTE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyDouble.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyDouble.java similarity index 50% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyDouble.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyDouble.java index 0b76975c..ad47a9a1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyDouble.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyDouble.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyDouble implements ICastingRule { - public static final CastingAnyDouble INSTANCE = new CastingAnyDouble(); + private final TypeRegistry types; - private CastingAnyDouble() {} + public CastingAnyDouble(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asDouble", double.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asDouble", double.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.DOUBLE; + return types.DOUBLE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyFloat.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyFloat.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyFloat.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyFloat.java index 3ad4d515..11bb77d9 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyFloat.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyFloat.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyFloat implements ICastingRule { - public static final CastingAnyFloat INSTANCE = new CastingAnyFloat(); + private final TypeRegistry types; - private CastingAnyFloat() {} + public CastingAnyFloat(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asFloat", float.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asFloat", float.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.FLOAT; + return types.FLOAT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyInt.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyInt.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyInt.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyInt.java index ec20e74a..de251fb8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyInt.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyInt.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyInt implements ICastingRule { - public static final CastingAnyInt INSTANCE = new CastingAnyInt(); + private final TypeRegistry types; - private CastingAnyInt() {} + public CastingAnyInt(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asInt", int.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asInt", int.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.INT; + return types.INT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyLong.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyLong.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyLong.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyLong.java index c386f6cd..6ed5c7c0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyLong.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyLong.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyLong implements ICastingRule { - public static final CastingAnyLong INSTANCE = new CastingAnyLong(); + private final TypeRegistry types; - private CastingAnyLong() {} + public CastingAnyLong(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asLong", long.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asLong", long.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.LONG; + return types.LONG; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyShort.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyShort.java similarity index 51% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyShort.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyShort.java index c1d2c1f5..f0f28428 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyShort.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyShort.java @@ -4,33 +4,36 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyShort implements ICastingRule { - public static final CastingAnyShort INSTANCE = new CastingAnyShort(); + private final TypeRegistry types; - private CastingAnyShort() {} + public CastingAnyShort(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().invokeInterface(IAny.class, "asShort", short.class); + public void compile(MethodOutput output) { + output.invokeInterface(IAny.class, "asShort", short.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.SHORT; + return types.SHORT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyString.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyString.java similarity index 67% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyString.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyString.java index 8c22305d..b3406784 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingAnyString.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingAnyString.java @@ -4,26 +4,27 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; -import stanhebben.zenscript.value.IAny; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingAnyString implements ICastingRule { - public static final CastingAnyString INSTANCE = new CastingAnyString(); + private final TypeRegistry types; - private CastingAnyString() {} + public CastingAnyString(TypeRegistry types) { + this.types = types; + } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); + public void compile(MethodOutput output) { Label lblNonNull = new Label(); Label lblAfter = new Label(); @@ -41,11 +42,11 @@ public void compile(IEnvironmentMethod method) { @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override public ZenType getResultingType() { - return ZenType.STRING; + return types.STRING; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingNotNull.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingNotNull.java similarity index 73% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingNotNull.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingNotNull.java index de9cadec..247c6614 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingNotNull.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingNotNull.java @@ -4,10 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -16,15 +15,16 @@ * @author Stan */ public class CastingNotNull implements ICastingRule { - public ZenType fromType; + private final ZenType fromType; + private final ZenType bool; - public CastingNotNull(ZenType fromType) { + public CastingNotNull(ZenType fromType, ZenType bool) { this.fromType = fromType; + this.bool = bool; } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); + public void compile(MethodOutput output) { Label labelElse = new Label(); Label labelAfter = new Label(); @@ -43,6 +43,6 @@ public ZenType getInputType() { @Override public ZenType getResultingType() { - return ZenType.BOOL; + return bool; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAnyAs.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleAnyAs.java similarity index 53% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAnyAs.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleAnyAs.java index f2c08ec3..eece6e4d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleAnyAs.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleAnyAs.java @@ -4,12 +4,13 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.value.IAny; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; /** * @@ -17,20 +18,22 @@ */ public class CastingRuleAnyAs implements ICastingRule { private final ZenType type; + private final TypeRegistry types; - public CastingRuleAnyAs(ZenType type) { + public CastingRuleAnyAs(ZenType type, TypeRegistry types) { this.type = type; + this.types = types; } @Override - public void compile(IEnvironmentMethod method) { - method.getOutput().constant(Type.getType(type.toJavaClass())); - method.getOutput().invokeInterface(IAny.class, "as", Class.class, Object.class); + public void compile(MethodOutput output) { + output.constant(Type.getType(type.toJavaClass())); + output.invokeInterface(IAny.class, "as", Class.class, Object.class); } @Override public ZenType getInputType() { - return ZenType.ANY; + return types.ANY; } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayArray.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayArray.java similarity index 88% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayArray.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayArray.java index 6e5671c7..8f6138f2 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayArray.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayArray.java @@ -4,11 +4,10 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Label; import org.objectweb.asm.Type; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.util.MethodOutput; @@ -29,8 +28,7 @@ public CastingRuleArrayArray(ICastingRule base, ZenTypeArrayBasic from, ZenTypeA } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); + public void compile(MethodOutput output) { Type fromType = from.getBaseType().toASMType(); Type toType = to.getBaseType().toASMType(); @@ -54,7 +52,7 @@ public void compile(IEnvironmentMethod method) { // stack: original index value if (base != null) - base.compile(method); + base.compile(output); output.loadObject(result); output.dupX2(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayList.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayList.java similarity index 88% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayList.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayList.java index 6c94d95e..d9492372 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleArrayList.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleArrayList.java @@ -4,9 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.type.ZenTypeArrayList; @@ -28,8 +28,7 @@ public CastingRuleArrayList(ICastingRule base, ZenTypeArrayBasic from, ZenTypeAr } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); + public void compile(MethodOutput output) { // TODO: implement this throw new UnsupportedOperationException("Not yet implemented"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2F.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2F.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2F.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2F.java index 15593ce2..4c3f84cb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2F.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2F.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleD2F extends BaseCastingRule { - public CastingRuleD2F(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleD2F(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().d2f(); + public void compileInner(MethodOutput method) { + method.d2f(); } @Override public ZenType getInnerInputType() { - return ZenType.DOUBLE; + return types.DOUBLE; } @Override public ZenType getResultingType() { - return ZenType.FLOAT; + return types.FLOAT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2I.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2I.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2I.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2I.java index dc4988e2..df197f34 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2I.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2I.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleD2I extends BaseCastingRule { - public CastingRuleD2I(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleD2I(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().d2i(); + public void compileInner(MethodOutput method) { + method.d2i(); } @Override public ZenType getInnerInputType() { - return ZenType.DOUBLE; + return types.DOUBLE; } @Override public ZenType getResultingType() { - return ZenType.INT; + return types.INT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2L.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2L.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2L.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2L.java index 5dc46c10..53bfa9f5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleD2L.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleD2L.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleD2L extends BaseCastingRule { - public CastingRuleD2L(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleD2L(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().d2l(); + public void compileInner(MethodOutput method) { + method.d2l(); } @Override public ZenType getInnerInputType() { - return ZenType.DOUBLE; + return types.DOUBLE; } @Override public ZenType getResultingType() { - return ZenType.LONG; + return types.LONG; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateArray.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateArray.java similarity index 52% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateArray.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateArray.java index 00e926ec..1decdf98 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateArray.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateArray.java @@ -4,8 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.type.ZenTypeArrayList; @@ -15,17 +16,19 @@ * @author Stan */ public class CastingRuleDelegateArray implements ICastingRuleDelegate { + private final IScopeGlobal environment; private final ICastingRuleDelegate base; private final ZenTypeArrayBasic from; - public CastingRuleDelegateArray(ICastingRuleDelegate base, ZenTypeArrayBasic from) { + public CastingRuleDelegateArray(IScopeGlobal environment, ICastingRuleDelegate base, ZenTypeArrayBasic from) { + this.environment = environment; this.base = base; this.from = from; } @Override public void registerCastingRule(ZenType type, ICastingRule rule) { - base.registerCastingRule(new ZenTypeArrayBasic(type), new CastingRuleArrayArray(rule, from, new ZenTypeArrayBasic(type))); - base.registerCastingRule(new ZenTypeArrayList(type), new CastingRuleArrayList(rule, from, new ZenTypeArrayList(type))); + base.registerCastingRule(new ZenTypeArrayBasic(environment, type), new CastingRuleArrayArray(rule, from, new ZenTypeArrayBasic(environment, type))); + base.registerCastingRule(new ZenTypeArrayList(environment, type), new CastingRuleArrayList(rule, from, new ZenTypeArrayList(environment, type))); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateList.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateList.java similarity index 52% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateList.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateList.java index cc984133..4cb74b6d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateList.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateList.java @@ -4,8 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; +import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.type.ZenTypeArrayList; @@ -15,17 +16,19 @@ * @author Stan */ public class CastingRuleDelegateList implements ICastingRuleDelegate { + private final IScopeGlobal environment; private final ICastingRuleDelegate base; private final ZenTypeArrayList from; - public CastingRuleDelegateList(ICastingRuleDelegate base, ZenTypeArrayList from) { + public CastingRuleDelegateList(IScopeGlobal environment, ICastingRuleDelegate base, ZenTypeArrayList from) { + this.environment = environment; this.base = base; this.from = from; } @Override public void registerCastingRule(ZenType type, ICastingRule rule) { - base.registerCastingRule(new ZenTypeArrayBasic(type), new CastingRuleListArray(rule, from, new ZenTypeArrayBasic(type))); - base.registerCastingRule(new ZenTypeArrayList(type), new CastingRuleListList(rule, from, new ZenTypeArrayList(type))); + base.registerCastingRule(new ZenTypeArrayBasic(environment, type), new CastingRuleListArray(rule, from, new ZenTypeArrayBasic(environment, type))); + base.registerCastingRule(new ZenTypeArrayList(environment, type), new CastingRuleListList(rule, from, new ZenTypeArrayList(environment, type))); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateMap.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateMap.java similarity index 95% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateMap.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateMap.java index 3f845d0b..3749ab9e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateMap.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateMap.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import java.util.Map; import stanhebben.zenscript.type.ZenType; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java similarity index 94% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateStaticMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java index c239675d..5d277b0b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleDelegateStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2D.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2D.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2D.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2D.java index 21aee062..f3a84bba 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2D.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2D.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleF2D extends BaseCastingRule { - public CastingRuleF2D(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleF2D(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().f2d(); + public void compileInner(MethodOutput method) { + method.f2d(); } @Override public ZenType getInnerInputType() { - return ZenType.FLOAT; + return types.FLOAT; } @Override public ZenType getResultingType() { - return ZenType.DOUBLE; + return types.DOUBLE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2I.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2I.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2I.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2I.java index af3dd3ee..3d6fab31 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2I.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2I.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleF2I extends BaseCastingRule { - public CastingRuleF2I(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleF2I(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().f2i(); + public void compileInner(MethodOutput output) { + output.f2i(); } @Override public ZenType getInnerInputType() { - return ZenType.FLOAT; + return types.FLOAT; } @Override public ZenType getResultingType() { - return ZenType.INT; + return types.INT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2L.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2L.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2L.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2L.java index 5f9ac37c..f649b882 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleF2L.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleF2L.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleF2L extends BaseCastingRule { - public CastingRuleF2L(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleF2L(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().f2l(); + public void compileInner(MethodOutput output) { + output.f2l(); } @Override public ZenType getInnerInputType() { - return ZenType.FLOAT; + return types.FLOAT; } @Override public ZenType getResultingType() { - return ZenType.LONG; + return types.LONG; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2B.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2B.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2B.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2B.java index 730ca629..cb8e6bc1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2B.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2B.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleI2B extends BaseCastingRule { - public CastingRuleI2B(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleI2B(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().i2b(); + public void compileInner(MethodOutput output) { + output.i2b(); } @Override public ZenType getInnerInputType() { - return ZenType.INT; + return types.INT; } @Override public ZenType getResultingType() { - return ZenType.BYTE; + return types.BYTE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2D.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2D.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2D.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2D.java index d960b130..8e3cf7c1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2D.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2D.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleI2D extends BaseCastingRule { - public CastingRuleI2D(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleI2D(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().i2d(); + public void compileInner(MethodOutput output) { + output.i2d(); } @Override public ZenType getInnerInputType() { - return ZenType.INT; + return types.INT; } @Override public ZenType getResultingType() { - return ZenType.DOUBLE; + return types.DOUBLE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2F.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2F.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2F.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2F.java index abf234bc..9dab9fb8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2F.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2F.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleI2F extends BaseCastingRule { - public CastingRuleI2F(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleI2F(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().i2f(); + public void compileInner(MethodOutput output) { + output.i2f(); } @Override public ZenType getInnerInputType() { - return ZenType.INT; + return types.INT; } @Override public ZenType getResultingType() { - return ZenType.FLOAT; + return types.FLOAT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2L.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2L.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2L.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2L.java index 83128be4..c9d6028f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2L.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2L.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleI2L extends BaseCastingRule { - public CastingRuleI2L(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleI2L(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().i2l(); + public void compileInner(MethodOutput output) { + output.i2l(); } @Override public ZenType getInnerInputType() { - return ZenType.INT; + return types.INT; } @Override public ZenType getResultingType() { - return ZenType.LONG; + return types.LONG; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2S.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2S.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2S.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2S.java index 374f13bd..8e0e3164 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleI2S.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleI2S.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleI2S extends BaseCastingRule { - public CastingRuleI2S(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleI2S(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().i2s(); + public void compileInner(MethodOutput output) { + output.i2s(); } @Override public ZenType getInnerInputType() { - return ZenType.INT; + return types.INT; } @Override public ZenType getResultingType() { - return ZenType.SHORT; + return types.SHORT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2D.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2D.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2D.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2D.java index 1522b50c..c9bc6af3 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2D.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2D.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleL2D extends BaseCastingRule { - public CastingRuleL2D(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleL2D(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().l2d(); + public void compileInner(MethodOutput output) { + output.l2d(); } @Override public ZenType getInnerInputType() { - return ZenType.LONG; + return types.LONG; } @Override public ZenType getResultingType() { - return ZenType.DOUBLE; + return types.DOUBLE; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2F.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2F.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2F.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2F.java index 472091d7..16ccf41a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2F.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2F.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleL2F extends BaseCastingRule { - public CastingRuleL2F(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleL2F(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().l2f(); + public void compileInner(MethodOutput output) { + output.l2f(); } @Override public ZenType getInnerInputType() { - return ZenType.LONG; + return types.LONG; } @Override public ZenType getResultingType() { - return ZenType.FLOAT; + return types.FLOAT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2I.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2I.java similarity index 55% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2I.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2I.java index 84a1a7b1..6ba35790 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleL2I.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleL2I.java @@ -4,32 +4,37 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.TypeRegistry; /** * * @author Stan */ public class CastingRuleL2I extends BaseCastingRule { - public CastingRuleL2I(ICastingRule baseRule) { + private final TypeRegistry types; + + public CastingRuleL2I(ICastingRule baseRule, TypeRegistry types) { super(baseRule); + + this.types = types; } @Override - public void compileInner(IEnvironmentMethod method) { - method.getOutput().l2i(); + public void compileInner(MethodOutput output) { + output.l2i(); } @Override public ZenType getInnerInputType() { - return ZenType.LONG; + return types.LONG; } @Override public ZenType getResultingType() { - return ZenType.INT; + return types.INT; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListArray.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListArray.java similarity index 88% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListArray.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListArray.java index 34084eb5..c0079e13 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListArray.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListArray.java @@ -4,9 +4,8 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayBasic; import stanhebben.zenscript.type.ZenTypeArrayList; @@ -28,9 +27,7 @@ public CastingRuleListArray(ICastingRule base, ZenTypeArrayList from, ZenTypeArr } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); - + public void compile(MethodOutput output) { // TODO: implement this throw new UnsupportedOperationException("Not yet implemented"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListList.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListList.java similarity index 88% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListList.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListList.java index 57074c83..57c2b6c3 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleListList.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleListList.java @@ -4,9 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArrayList; import stanhebben.zenscript.util.MethodOutput; @@ -27,8 +27,7 @@ public CastingRuleListList(ICastingRule base, ZenTypeArrayList from, ZenTypeArra } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); + public void compile(MethodOutput output) { // TODO: implement this throw new UnsupportedOperationException("Not yet implemented"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMap.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMap.java similarity index 87% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMap.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMap.java index 70f9f542..662b7b47 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMap.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMap.java @@ -4,11 +4,11 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeAssociative; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -28,7 +28,7 @@ public CastingRuleMap(ICastingRule keyRule, ICastingRule valueRule, ZenTypeAssoc } @Override - public void compile(IEnvironmentMethod method) { + public void compile(MethodOutput output) { // TODO: implement throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMatchedFunction.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMatchedFunction.java similarity index 87% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMatchedFunction.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMatchedFunction.java index 0133aebe..4532c25e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleMatchedFunction.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleMatchedFunction.java @@ -4,11 +4,11 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -28,7 +28,7 @@ public CastingRuleMatchedFunction(ZenTypeFunction fromType, ZenType toType, ICas } @Override - public void compile(IEnvironmentMethod method) { + public void compile(MethodOutput output) { // nothing to do here } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNone.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNone.java similarity index 81% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNone.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNone.java index 4f2568a2..6cfc6837 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNone.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNone.java @@ -4,10 +4,10 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -23,7 +23,7 @@ public CastingRuleNone(ZenType fromType, ZenType toType) { } @Override - public void compile(IEnvironmentMethod method) { + public void compile(MethodOutput output) { // nothing to do } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java similarity index 79% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableStaticMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java index 3b10f27d..4aa9ee47 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java @@ -4,10 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.util.MethodOutput; @@ -31,9 +30,7 @@ public CastingRuleNullableStaticMethod(IJavaMethod method, ICastingRule base) { } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); - + public void compile(MethodOutput output) { Label lblNotNull = new Label(); Label lblAfter = new Label(); @@ -46,17 +43,17 @@ public void compile(IEnvironmentMethod method) { output.label(lblNotNull); if (base != null) { - base.compile(method); + base.compile(output); } - this.method.invokeStatic(method.getOutput()); + this.method.invokeStatic(output); output.label(lblAfter); } @Override public ZenType getInputType() { - return method.getParameterTypes()[0]; + return method.getArguments()[0].getType(); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableVirtualMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java similarity index 81% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableVirtualMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java index 9d3598c4..ee3912c7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleNullableVirtualMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java @@ -4,10 +4,9 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import org.objectweb.asm.Label; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; import stanhebben.zenscript.util.MethodOutput; @@ -26,9 +25,7 @@ public CastingRuleNullableVirtualMethod(ZenType type, IJavaMethod method) { } @Override - public void compile(IEnvironmentMethod method) { - MethodOutput output = method.getOutput(); - + public void compile(MethodOutput output) { Label lblNotNull = new Label(); Label lblAfter = new Label(); @@ -39,7 +36,7 @@ public void compile(IEnvironmentMethod method) { output.goTo(lblAfter); output.label(lblNotNull); - this.method.invokeVirtual(method.getOutput()); + method.invokeVirtual(output); output.label(lblAfter); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java similarity index 78% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleStaticMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java index 91b36ef8..a16f22f0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java @@ -4,11 +4,11 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.util.MethodOutput; /** * @@ -29,16 +29,16 @@ public CastingRuleStaticMethod(IJavaMethod method, ICastingRule base) { } @Override - public void compile(IEnvironmentMethod method) { + public void compile(MethodOutput method) { if (base != null) base.compile(method); - this.method.invokeStatic(method.getOutput()); + this.method.invokeStatic(method); } @Override public ZenType getInputType() { - return method.getParameterTypes()[0]; + return method.getArguments()[0].getType(); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleVirtualMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java similarity index 66% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleVirtualMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java index 13a16f1b..3695db24 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/CastingRuleVirtualMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java @@ -4,31 +4,33 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.util.MethodOutput; /** * * @author Stan */ public class CastingRuleVirtualMethod implements ICastingRule { + private final ZenType type; private final IJavaMethod method; - public CastingRuleVirtualMethod(IJavaMethod method) { + public CastingRuleVirtualMethod(ZenType type, IJavaMethod method) { + this.type = type; this.method = method; } @Override - public void compile(IEnvironmentMethod method) { - this.method.invokeVirtual(method.getOutput()); + public void compile(MethodOutput method) { + this.method.invokeVirtual(method); } @Override public ZenType getInputType() { - return method.getParameterTypes()[0]; + return type; } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRule.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRule.java similarity index 70% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRule.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRule.java index 6fd781fa..df4ca2db 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRule.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRule.java @@ -4,17 +4,17 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; -import stanhebben.zenscript.compiler.IEnvironmentMethod; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.util.MethodOutput; /** * * @author Stan */ public interface ICastingRule { - public void compile(IEnvironmentMethod method); + public void compile(MethodOutput method); public ZenType getInputType(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRuleDelegate.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRuleDelegate.java similarity index 89% rename from ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRuleDelegate.java rename to ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRuleDelegate.java index 17449de5..4500755c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/casting/ICastingRuleDelegate.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/ICastingRuleDelegate.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.casting; +package zenscript.symbolic.type.casting; import stanhebben.zenscript.type.ZenType; diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/generic/ITypeVariable.java b/ZenScript/src/main/java/zenscript/symbolic/type/generic/ITypeVariable.java new file mode 100644 index 00000000..398074a1 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/type/generic/ITypeVariable.java @@ -0,0 +1,15 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic.type.generic; + +/** + * + * @author Stan + */ +public interface ITypeVariable { + +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeCapture.java b/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeCapture.java new file mode 100644 index 00000000..ac776677 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeCapture.java @@ -0,0 +1,41 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic.type.generic; + +import java.util.HashMap; +import java.util.Map; +import stanhebben.zenscript.type.ZenType; + +/** + * + * @author Stan + */ +public class TypeCapture { + public static final TypeCapture EMPTY = new TypeCapture(null); + + private final TypeCapture outer; + private final Map variables; + + public TypeCapture(TypeCapture outer) { + this.outer = outer; + variables = new HashMap(); + } + + public ZenType get(ITypeVariable variable) { + if (variables.containsKey(variable)) { + return variables.get(variable); + } else if (outer != null) { + return outer.get(variable); + } else { + throw new RuntimeException("Could not resolve type variable"); + } + } + + public void put(ITypeVariable variable, ZenType type) { + variables.put(variable, type); + } +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeVariableNative.java b/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeVariableNative.java new file mode 100644 index 00000000..137f7f12 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/type/generic/TypeVariableNative.java @@ -0,0 +1,43 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic.type.generic; + +import java.lang.reflect.TypeVariable; + +/** + * + * @author Stan + */ +public class TypeVariableNative implements ITypeVariable { + private final TypeVariable typeVariable; + + public TypeVariableNative(TypeVariable typeVariable) { + this.typeVariable = typeVariable; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 67 * hash + (this.typeVariable != null ? this.typeVariable.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TypeVariableNative other = (TypeVariableNative) obj; + if (this.typeVariable != other.typeVariable && (this.typeVariable == null || !this.typeVariable.equals(other.typeVariable))) { + return false; + } + return true; + } +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java b/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java new file mode 100644 index 00000000..7ffbaf7d --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java @@ -0,0 +1,35 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic.unit; + +import java.util.ArrayList; +import java.util.List; +import stanhebben.zenscript.expression.partial.IPartialExpression; +import stanhebben.zenscript.symbols.SymbolLocal; +import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.natives.JavaMethodArgument; + +/** + * + * @author Stan + */ +public class SymbolicFunction { + private final ZenType returnType; + private final List arguments; + + private List captured = new ArrayList(); + + public SymbolicFunction(ZenType returnType, List arguments) { + this.returnType = returnType; + this.arguments = arguments; + } + + public IPartialExpression addCapture(SymbolLocal local) { + captured.add(local); + + } +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java b/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java new file mode 100644 index 00000000..5637487b --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java @@ -0,0 +1,220 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.symbolic.util; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.type.natives.IJavaMethod; +import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingAnyBool; +import zenscript.symbolic.type.casting.CastingAnyByte; +import zenscript.symbolic.type.casting.CastingAnyDouble; +import zenscript.symbolic.type.casting.CastingAnyFloat; +import zenscript.symbolic.type.casting.CastingAnyInt; +import zenscript.symbolic.type.casting.CastingAnyLong; +import zenscript.symbolic.type.casting.CastingAnyShort; +import zenscript.symbolic.type.casting.CastingAnyString; +import zenscript.symbolic.type.casting.ICastingRule; + +/** + * + * @author Stan + */ +public class CommonMethods { + public final IJavaMethod BOOL_VALUEOF; + public final IJavaMethod BYTE_VALUEOF; + public final IJavaMethod SHORT_VALUEOF; + public final IJavaMethod INT_VALUEOF; + public final IJavaMethod LONG_VALUEOF; + public final IJavaMethod FLOAT_VALUEOF; + public final IJavaMethod DOUBLE_VALUEOF; + + public final IJavaMethod BOOL_VALUE; + public final IJavaMethod BYTE_VALUE; + public final IJavaMethod SHORT_VALUE; + public final IJavaMethod INT_VALUE; + public final IJavaMethod LONG_VALUE; + public final IJavaMethod FLOAT_VALUE; + public final IJavaMethod DOUBLE_VALUE; + + public final IJavaMethod BOOL_TOSTRING_STATIC; + public final IJavaMethod BYTE_TOSTRING_STATIC; + public final IJavaMethod SHORT_TOSTRING_STATIC; + public final IJavaMethod INT_TOSTRING_STATIC; + public final IJavaMethod LONG_TOSTRING_STATIC; + public final IJavaMethod FLOAT_TOSTRING_STATIC; + public final IJavaMethod DOUBLE_TOSTRING_STATIC; + + public final IJavaMethod BOOL_TOSTRING; + public final IJavaMethod BYTE_TOSTRING; + public final IJavaMethod SHORT_TOSTRING; + public final IJavaMethod INT_TOSTRING; + public final IJavaMethod LONG_TOSTRING; + public final IJavaMethod FLOAT_TOSTRING; + public final IJavaMethod DOUBLE_TOSTRING; + + public final IJavaMethod PARSE_BOOL; + public final IJavaMethod PARSE_BYTE; + public final IJavaMethod PARSE_SHORT; + public final IJavaMethod PARSE_INT; + public final IJavaMethod PARSE_LONG; + public final IJavaMethod PARSE_FLOAT; + public final IJavaMethod PARSE_DOUBLE; + + public final IJavaMethod PARSE_BOOL_OBJECT; + public final IJavaMethod PARSE_BYTE_OBJECT; + public final IJavaMethod PARSE_SHORT_OBJECT; + public final IJavaMethod PARSE_INT_OBJECT; + public final IJavaMethod PARSE_LONG_OBJECT; + public final IJavaMethod PARSE_FLOAT_OBJECT; + public final IJavaMethod PARSE_DOUBLE_OBJECT; + + public final ICastingRule CAST_ANY_BOOL; + public final ICastingRule CAST_ANY_BYTE; + public final ICastingRule CAST_ANY_SHORT; + public final ICastingRule CAST_ANY_INT; + public final ICastingRule CAST_ANY_LONG; + public final ICastingRule CAST_ANY_FLOAT; + public final ICastingRule CAST_ANY_DOUBLE; + public final ICastingRule CAST_ANY_STRING; + + public final IJavaMethod METHOD_NOT; + public final IJavaMethod METHOD_NEG; + public final IJavaMethod METHOD_ADD; + public final IJavaMethod METHOD_CAT; + public final IJavaMethod METHOD_SUB; + public final IJavaMethod METHOD_MUL; + public final IJavaMethod METHOD_DIV; + public final IJavaMethod METHOD_MOD; + public final IJavaMethod METHOD_AND; + public final IJavaMethod METHOD_OR; + public final IJavaMethod METHOD_XOR; + public final IJavaMethod METHOD_RANGE; + public final IJavaMethod METHOD_COMPARETO; + public final IJavaMethod METHOD_CONTAINS; + public final IJavaMethod METHOD_MEMBERGET; + public final IJavaMethod METHOD_MEMBERSET; + public final IJavaMethod METHOD_MEMBERCALL; + public final IJavaMethod METHOD_INDEXGET; + public final IJavaMethod METHOD_INDEXSET; + public final IJavaMethod METHOD_CALL; + public final IJavaMethod METHOD_ASBOOL; + public final IJavaMethod METHOD_ASBYTE; + public final IJavaMethod METHOD_ASSHORT; + public final IJavaMethod METHOD_ASINT; + public final IJavaMethod METHOD_ASLONG; + public final IJavaMethod METHOD_ASFLOAT; + public final IJavaMethod METHOD_ASDOUBLE; + public final IJavaMethod METHOD_ASSTRING; + public final IJavaMethod METHOD_AS; + public final IJavaMethod METHOD_IS; + public final IJavaMethod METHOD_CANCASTIMPLICIT; + public final IJavaMethod METHOD_GETNUMBERTYPE; + public final IJavaMethod METHOD_ITERATORSINGLE; + public final IJavaMethod METHOD_ITERATORMULTI; + + public final IJavaMethod METHOD_STRING_COMPARETO; + + public CommonMethods(IScopeGlobal environment) { + TypeRegistry types = environment.getTypes(); + + BOOL_VALUEOF = JavaMethod.get(types, Boolean.class, "valueOf", boolean.class); + BYTE_VALUEOF = JavaMethod.get(types, Byte.class, "valueOf", byte.class); + SHORT_VALUEOF = JavaMethod.get(types, Short.class, "valueOf", short.class); + INT_VALUEOF = JavaMethod.get(types, Integer.class, "valueOf", int.class); + LONG_VALUEOF = JavaMethod.get(types, Long.class, "valueOf", long.class); + FLOAT_VALUEOF = JavaMethod.get(types, Float.class, "valueOf", float.class); + DOUBLE_VALUEOF = JavaMethod.get(types, Double.class, "valueOf", double.class); + + BOOL_VALUE = JavaMethod.get(types, Boolean.class, "booleanValue"); + BYTE_VALUE = JavaMethod.get(types, Number.class, "byteValue"); + SHORT_VALUE = JavaMethod.get(types, Number.class, "shortValue"); + INT_VALUE = JavaMethod.get(types, Number.class, "intValue"); + LONG_VALUE = JavaMethod.get(types, Number.class, "longValue"); + FLOAT_VALUE = JavaMethod.get(types, Number.class, "floatValue"); + DOUBLE_VALUE = JavaMethod.get(types, Number.class, "doubleValue"); + + BOOL_TOSTRING_STATIC = JavaMethod.get(types, Boolean.class, "toString", boolean.class); + BYTE_TOSTRING_STATIC = JavaMethod.get(types, Byte.class, "toString", byte.class); + SHORT_TOSTRING_STATIC = JavaMethod.get(types, Short.class, "toString", short.class); + INT_TOSTRING_STATIC = JavaMethod.get(types, Integer.class, "toString", int.class); + LONG_TOSTRING_STATIC = JavaMethod.get(types, Long.class, "toString", long.class); + FLOAT_TOSTRING_STATIC = JavaMethod.get(types, Float.class, "toString", float.class); + DOUBLE_TOSTRING_STATIC = JavaMethod.get(types, Double.class, "toString", double.class); + + BOOL_TOSTRING = JavaMethod.get(types, Boolean.class, "toString"); + BYTE_TOSTRING = JavaMethod.get(types, Byte.class, "toString"); + SHORT_TOSTRING = JavaMethod.get(types, Short.class, "toString"); + INT_TOSTRING = JavaMethod.get(types, Integer.class, "toString"); + LONG_TOSTRING = JavaMethod.get(types, Long.class, "toString"); + FLOAT_TOSTRING = JavaMethod.get(types, Float.class, "toString"); + DOUBLE_TOSTRING = JavaMethod.get(types, Double.class, "toString"); + + PARSE_BOOL = JavaMethod.get(types, Boolean.class, "parseBoolean", String.class); + PARSE_BYTE = JavaMethod.get(types, Byte.class, "parseByte", String.class); + PARSE_SHORT = JavaMethod.get(types, Short.class, "parseShort", String.class); + PARSE_INT = JavaMethod.get(types, Integer.class, "parseInt", String.class); + PARSE_LONG = JavaMethod.get(types, Long.class, "parseLong", String.class); + PARSE_FLOAT = JavaMethod.get(types, Float.class, "parseFloat", String.class); + PARSE_DOUBLE = JavaMethod.get(types, Double.class, "parseDouble", String.class); + + PARSE_BOOL_OBJECT = JavaMethod.get(types, Boolean.class, "valueOf", String.class); + PARSE_BYTE_OBJECT = JavaMethod.get(types, Byte.class, "valueOf", String.class); + PARSE_SHORT_OBJECT = JavaMethod.get(types, Short.class, "valueOf", String.class); + PARSE_INT_OBJECT = JavaMethod.get(types, Integer.class, "valueOf", String.class); + PARSE_LONG_OBJECT = JavaMethod.get(types, Long.class, "valueOf", String.class); + PARSE_FLOAT_OBJECT = JavaMethod.get(types, Float.class, "valueOf", String.class); + PARSE_DOUBLE_OBJECT = JavaMethod.get(types, Double.class, "valueOf", String.class); + + METHOD_NOT = JavaMethod.get(types, IAny.class, "not"); + METHOD_NEG = JavaMethod.get(types, IAny.class, "neg"); + METHOD_ADD = JavaMethod.get(types, IAny.class, "add", IAny.class); + METHOD_CAT = JavaMethod.get(types, IAny.class, "cat", IAny.class); + METHOD_SUB = JavaMethod.get(types, IAny.class, "sub", IAny.class); + METHOD_MUL = JavaMethod.get(types, IAny.class, "mul", IAny.class); + METHOD_DIV = JavaMethod.get(types, IAny.class, "div", IAny.class); + METHOD_MOD = JavaMethod.get(types, IAny.class, "mod", IAny.class); + METHOD_AND = JavaMethod.get(types, IAny.class, "and", IAny.class); + METHOD_OR = JavaMethod.get(types, IAny.class, "or", IAny.class); + METHOD_XOR = JavaMethod.get(types, IAny.class, "xor", IAny.class); + METHOD_RANGE = JavaMethod.get(types, IAny.class, "range", IAny.class); + METHOD_COMPARETO = JavaMethod.get(types, IAny.class, "compareTo", IAny.class); + METHOD_CONTAINS = JavaMethod.get(types, IAny.class, "contains", IAny.class); + METHOD_MEMBERGET = JavaMethod.get(types, IAny.class, "memberGet", String.class); + METHOD_MEMBERSET = JavaMethod.get(types, IAny.class, "memberSet", String.class, IAny.class); + METHOD_MEMBERCALL = JavaMethod.get(types, IAny.class, "memberCall", String.class, IAny[].class); + METHOD_INDEXGET = JavaMethod.get(types, IAny.class, "indexGet", IAny.class); + METHOD_INDEXSET = JavaMethod.get(types, IAny.class, "indexSet", IAny.class, IAny.class); + METHOD_CALL = JavaMethod.get(types, IAny.class, "call", IAny[].class); + METHOD_ASBOOL = JavaMethod.get(types, IAny.class, "asBool"); + METHOD_ASBYTE = JavaMethod.get(types, IAny.class, "asByte"); + METHOD_ASSHORT = JavaMethod.get(types, IAny.class, "asShort"); + METHOD_ASINT = JavaMethod.get(types, IAny.class, "asInt"); + METHOD_ASLONG = JavaMethod.get(types, IAny.class, "asLong"); + METHOD_ASFLOAT = JavaMethod.get(types, IAny.class, "asFloat"); + METHOD_ASDOUBLE = JavaMethod.get(types, IAny.class, "asDouble"); + METHOD_ASSTRING = JavaMethod.get(types, IAny.class, "asString"); + METHOD_AS = JavaMethod.get(types, IAny.class, "as", Class.class); + METHOD_IS = JavaMethod.get(types, IAny.class, "is", Class.class); + METHOD_CANCASTIMPLICIT = JavaMethod.get(types, IAny.class, "canCastImplicit", Class.class); + METHOD_GETNUMBERTYPE = JavaMethod.get(types, IAny.class, "getNumberType"); + METHOD_ITERATORSINGLE = JavaMethod.get(types, IAny.class, "iteratorSingle"); + METHOD_ITERATORMULTI = JavaMethod.get(types, IAny.class, "iteratorMulti", int.class); + + METHOD_STRING_COMPARETO = JavaMethod.get(types, String.class, "compareTo", int.class, String.class); + + CAST_ANY_BOOL = new CastingAnyBool(types); + CAST_ANY_BYTE = new CastingAnyByte(types); + CAST_ANY_SHORT = new CastingAnyShort(types); + CAST_ANY_INT = new CastingAnyInt(types); + CAST_ANY_LONG = new CastingAnyLong(types); + CAST_ANY_FLOAT = new CastingAnyFloat(types); + CAST_ANY_DOUBLE = new CastingAnyDouble(types); + CAST_ANY_STRING = new CastingAnyString(types); + } +} diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/StringUtil.java b/ZenScript/src/main/java/zenscript/util/StringUtil.java similarity index 98% rename from ZenScript/src/main/java/stanhebben/zenscript/util/StringUtil.java rename to ZenScript/src/main/java/zenscript/util/StringUtil.java index c34357c7..504fbf59 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/StringUtil.java +++ b/ZenScript/src/main/java/zenscript/util/StringUtil.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.util; +package zenscript.util; import java.util.ArrayList; import java.util.List; @@ -109,19 +109,21 @@ public static String[] split(String value, char delimiter) { */ public static String[] splitParagraphs(String value) { String[] lines = split(value, '\n'); + for (int i = 0; i < lines.length; i++) { lines[i] = lines[i].trim(); } + ArrayList output = new ArrayList(); StringBuilder current = new StringBuilder(); - for (int i = 0; i < lines.length; i++) { - if (lines[i].length() == 0) { + for (String line : lines) { + if (line.length() == 0) { if (current.length() > 0) { output.add(current.toString()); current = new StringBuilder(); } } else { - current.append(' ').append(lines[i]); + current.append(' ').append(line); } } if (current.length() > 0) { diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/ZenPosition.java b/ZenScript/src/main/java/zenscript/util/ZenPosition.java similarity index 77% rename from ZenScript/src/main/java/stanhebben/zenscript/util/ZenPosition.java rename to ZenScript/src/main/java/zenscript/util/ZenPosition.java index 7200f94a..32ab5ec6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/ZenPosition.java +++ b/ZenScript/src/main/java/zenscript/util/ZenPosition.java @@ -4,20 +4,20 @@ * and open the template in the editor. */ -package stanhebben.zenscript.util; +package zenscript.util; -import stanhebben.zenscript.ZenParsedFile; +import zenscript.parser.ParsedFile; /** * * @author Stanneke */ public class ZenPosition { - private final ZenParsedFile file; + private final ParsedFile file; private final int line; private final int offset; - public ZenPosition(ZenParsedFile file, int line, int offset) { + public ZenPosition(ParsedFile file, int line, int offset) { if (file != null && line <= 0) throw new IllegalArgumentException("Line must be positive"); this.file = file; @@ -25,7 +25,7 @@ public ZenPosition(ZenParsedFile file, int line, int offset) { this.offset = offset; } - public ZenParsedFile getFile() { + public ParsedFile getFile() { return file; } From 6726cdebea1be1a58f698c6e7d0658ce54f43724 Mon Sep 17 00:00:00 2001 From: Stan Hebben Date: Tue, 2 Sep 2014 21:18:21 +0200 Subject: [PATCH 02/15] Merged with the 3.0.8 version. --- .../src/main/java/minetweaker/MineTweakerAPI.java | 4 ++-- .../java/minetweaker/api/formatting/IFormattedText.java | 6 +++--- .../main/java/minetweaker/api/formatting/IFormatter.java | 2 +- .../src/main/java/minetweaker/api/game/IGame.java | 2 +- .../src/main/java/minetweaker/api/item/IIngredient.java | 1 - .../main/java/minetweaker/api/item/IngredientTransform.java | 5 ++--- .../java/minetweaker/api/tooltip/IngredientTooltips.java | 4 ++-- .../main/java/minetweaker/api/vanilla/ILootRegistry.java | 6 +++--- .../main/java/minetweaker/api/vanilla/ISeedRegistry.java | 6 +++--- .../src/main/java/minetweaker/api/vanilla/IVanilla.java | 4 ++-- .../src/main/java/minetweaker/api/vanilla/LootEntry.java | 4 ++-- .../src/main/java/minetweaker/runtime/GlobalRegistry.java | 2 +- 12 files changed, 22 insertions(+), 24 deletions(-) diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java index 0db6f4d1..62ee7868 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java @@ -100,7 +100,7 @@ private MineTweakerAPI() {} * reloads with the scripts should always be submitted to the tweaker. */ @Deprecated - public static final ITweaker tweaker = new MTTweaker(); + public static final MTTweaker tweaker = new MTTweaker(); /** * The logger can be used to write logging messages to the client. Error and @@ -168,7 +168,7 @@ public static final ILogger getLogger() { * @param action action object */ public static void apply(IUndoableAction action) { - TWEAKER.apply(action); + tweaker.apply(action); } /** diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormattedText.java b/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormattedText.java index e96c4669..dfe2d222 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormattedText.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormattedText.java @@ -6,9 +6,9 @@ package minetweaker.api.formatting; -import stanhebben.zenscript.annotations.OperatorType; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenOperator; +import zenscript.annotations.OperatorType; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenOperator; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormatter.java b/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormatter.java index 15d5d703..be6ce859 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormatter.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/formatting/IFormatter.java @@ -6,7 +6,7 @@ package minetweaker.api.formatting; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java index b487c1e7..55976699 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java @@ -8,7 +8,7 @@ import minetweaker.api.world.IBiome; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenMethod; /** * Game interface. Used to obtain general game information. diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java index 9d611328..d722f394 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IIngredient.java @@ -4,7 +4,6 @@ import zenscript.annotations.OperatorType; import minetweaker.api.player.IPlayer; import zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.OperatorType; import zenscript.annotations.ZenGetter; import zenscript.annotations.ZenMethod; import zenscript.annotations.ZenOperator; diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java index 50c794d7..d804fcc2 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IngredientTransform.java @@ -2,9 +2,8 @@ import zenscript.annotations.ZenExpansion; import minetweaker.api.player.IPlayer; -import stanhebben.zenscript.annotations.Optional; -import stanhebben.zenscript.annotations.ZenExpansion; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.Optional; +import zenscript.annotations.ZenMethod; /** * Transformations can be used to modify an ingredient after it is used in a diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/tooltip/IngredientTooltips.java b/MineTweaker3-API/src/main/java/minetweaker/api/tooltip/IngredientTooltips.java index 1708a7c6..c7555bf6 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/tooltip/IngredientTooltips.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/tooltip/IngredientTooltips.java @@ -14,8 +14,8 @@ import minetweaker.api.item.IItemStack; import minetweaker.api.util.IngredientMap; import minetweaker.api.util.IngredientMap.IngredientMapEntry; -import stanhebben.zenscript.annotations.ZenExpansion; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ILootRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ILootRegistry.java index 78b74d11..991a3619 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ILootRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ILootRegistry.java @@ -9,9 +9,9 @@ import java.util.List; import minetweaker.api.item.IIngredient; import minetweaker.api.item.WeightedItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ISeedRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ISeedRegistry.java index c39396b1..92cc2c69 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ISeedRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/ISeedRegistry.java @@ -9,9 +9,9 @@ import java.util.List; import minetweaker.api.item.IIngredient; import minetweaker.api.item.WeightedItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; -import stanhebben.zenscript.annotations.ZenMethod; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/IVanilla.java b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/IVanilla.java index b0915487..1c5ddbfe 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/IVanilla.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/IVanilla.java @@ -6,8 +6,8 @@ package minetweaker.api.vanilla; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/LootEntry.java b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/LootEntry.java index b78ef071..455feeac 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/LootEntry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/vanilla/LootEntry.java @@ -7,8 +7,8 @@ package minetweaker.api.vanilla; import minetweaker.api.item.WeightedItemStack; -import stanhebben.zenscript.annotations.ZenClass; -import stanhebben.zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; /** * diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java index 640028f6..11ccd942 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java @@ -22,7 +22,7 @@ import minetweaker.api.item.IIngredient; import zenscript.IZenErrorLogger; import stanhebben.zenscript.TypeExpansion; -import stanhebben.zenscript.annotations.ZenExpansion; +import zenscript.annotations.ZenExpansion; import stanhebben.zenscript.compiler.ClassNameGenerator; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.TypeRegistry; From 5a469acb3d7e6abdb59bc51e56a31c89616ec024 Mon Sep 17 00:00:00 2001 From: Stan Hebben Date: Mon, 22 Sep 2014 08:23:42 +0200 Subject: [PATCH 03/15] - Continued development on ZenScript - MineTweaker3-API is now MIT licensed - Adjusted some parts of the API towards the ZenScript changes - Expanded API to allow new blocks to be defined - Added compile-time evaluation - Started implementation of switch compilation --- .nb-gradle-properties | 5 + .../main/java/minetweaker/ClassRegistry.java | 5 + .../java/minetweaker/IBracketHandler.java | 16 +- .../minetweaker/IBracketHandlerFactory.java | 16 + .../main/java/minetweaker/MineTweakerAPI.java | 106 +------ .../MineTweakerImplementationAPI.java | 15 +- .../minetweaker/api/block/BlockCollision.java | 33 ++ .../minetweaker/api/block/BlockPatternOr.java | 57 +++- .../java/minetweaker/api/block/BlockSide.java | 26 ++ .../java/minetweaker/api/block/IBlock.java | 113 ++++++- .../api/block/IBlockDefinition.java | 30 +- .../minetweaker/api/block/IBlockFactory.java | 57 ++++ .../minetweaker/api/block/IExplosion.java | 24 ++ .../minetweaker/api/block/IRedstoneBlock.java | 17 + .../java/minetweaker/api/entity/IEntity.java | 12 +- .../main/java/minetweaker/api/game/IGame.java | 36 +++ .../main/java/minetweaker/api/math/Ray.java | 296 ++++++++++++++++++ .../java/minetweaker/api/math/Vector3d.java | 42 +++ .../Position3f.java => math/Vector3f.java} | 8 +- .../minetweaker/api/render/IRenderer.java | 16 + .../minetweaker/api/world/IBlockGroup.java | 40 ++- .../minetweaker/runtime/GlobalRegistry.java | 167 +++++----- .../minetweaker/runtime/IScriptIterator.java | 3 + .../java/minetweaker/runtime/MTTweaker.java | 46 +-- .../runtime/symbol/ITweakerSymbol.java | 20 ++ .../runtime/symbol/SymbolUtil.java | 84 +++++ .../symbol/TweakerSymbolStaticField.java | 35 +++ .../symbol/TweakerSymbolStaticGetter.java | 35 +++ .../symbol/TweakerSymbolStaticMethod.java | 37 +++ .../main/java/minetweaker/sync/SyncEntry.java | 40 +++ .../java/minetweaker/sync/SyncInstance.java | 74 +++++ .../main/java/minetweaker/sync/SyncKey.java | 42 +++ .../minetweaker/api/minecraft/MCBlock.java | 52 +++ .../api/minecraft/MCDirection.java | 36 +++ .../minetweaker/api/minecraft/MCWorld.java | 37 +++ .../api/minecraft/MineTweakerMC.java | 14 - .../minetweaker/mc1710/FMLEventHandler.java | 3 +- .../mc1710/block/MCBlockDefinition.java | 5 + .../mc1710/block/MCWorldBlock.java | 100 ++++++ .../mc1710/brackets/ItemBracketHandler.java | 51 +-- .../mc1710/brackets/LiquidBracketHandler.java | 42 +-- .../mc1710/brackets/OreBracketHandler.java | 46 +-- .../minetweaker/mc1710/entity/MCEntity.java | 66 ++++ .../minetweaker/mc1710/world/MCDimension.java | 14 + MineTweaker3-Web/download.php | 0 .../zenscript/IZenCompileEnvironment.java | 62 +++- .../stanhebben/zenscript/TypeExpansion.java | 2 +- .../zenscript/compiler/EnvironmentGlobal.java | 8 +- .../zenscript/compiler/IScopeGlobal.java | 3 - .../zenscript/expression/Expression.java | 4 +- .../expression/ExpressionCallStatic.java | 6 +- .../expression/ExpressionCallVirtual.java | 6 +- .../expression/ExpressionFunction.java | 4 +- .../zenscript/expression/ExpressionInt.java | 13 +- .../expression/ExpressionJavaLambda.java | 3 +- .../ExpressionJavaMethodCurled.java | 2 +- .../ExpressionJavaMethodStatic.java | 2 +- .../ExpressionJavaStaticField.java | 8 +- .../zenscript/expression/ExpressionNew.java | 6 +- .../partial/IPartialExpression.java | 4 +- .../expression/partial/PartialLocal.java | 4 +- .../expression/partial/PartialPackage.java | 10 +- .../partial/PartialStaticGetter.java | 14 +- .../partial/PartialStaticMethod.java | 14 +- .../expression/partial/PartialType.java | 10 +- .../zenscript/statements/StatementSwitch.java | 15 +- .../symbols/SymbolJavaStaticField.java | 8 +- .../symbols/SymbolJavaStaticGetter.java | 6 +- .../symbols/SymbolJavaStaticMethod.java | 6 +- .../stanhebben/zenscript/type/ZenType.java | 16 +- .../stanhebben/zenscript/type/ZenTypeAny.java | 14 +- .../zenscript/type/ZenTypeBool.java | 6 +- .../zenscript/type/ZenTypeBoolObject.java | 7 +- .../zenscript/type/ZenTypeByte.java | 24 +- .../zenscript/type/ZenTypeByteObject.java | 12 +- .../zenscript/type/ZenTypeDouble.java | 10 +- .../zenscript/type/ZenTypeDoubleObject.java | 8 +- .../zenscript/type/ZenTypeFloat.java | 9 +- .../zenscript/type/ZenTypeFloatObject.java | 8 +- .../zenscript/type/ZenTypeFunction.java | 23 +- .../stanhebben/zenscript/type/ZenTypeInt.java | 5 +- .../zenscript/type/ZenTypeIntObject.java | 8 +- .../zenscript/type/ZenTypeLong.java | 5 +- .../zenscript/type/ZenTypeLongObject.java | 8 +- .../zenscript/type/ZenTypeNative.java | 26 +- .../zenscript/type/ZenTypeNull.java | 3 +- .../zenscript/type/ZenTypeShort.java | 5 +- .../zenscript/type/ZenTypeShortObject.java | 8 +- .../zenscript/type/ZenTypeString.java | 4 +- .../zenscript/type/ZenTypeVoid.java | 3 +- .../type/expand/ZenExpandCaster.java | 6 +- .../type/expand/ZenExpandMember.java | 22 +- .../type/natives/JavaMethodExpanding.java | 16 +- .../type/natives/JavaMethodGenerated.java | 12 +- .../type/natives/JavaMethodPrefixed.java | 16 +- .../type/natives/ZenNativeCaster.java | 5 +- .../type/natives/ZenNativeMember.java | 24 +- .../type/natives/ZenNativeOperator.java | 7 +- .../stanhebben/zenscript/util/ErrorUtil.java | 4 +- .../zenscript/annotations/OperatorType.java | 1 + .../main/java/zenscript/lexer/ZenTokener.java | 2 + .../parser/elements/IParsedGenericBound.java | 15 + .../parser/elements/ParsedFunction.java | 16 +- ...ader.java => ParsedFunctionSignature.java} | 31 +- .../ParsedGenericBoundConstructor.java | 19 ++ .../ParsedGenericBoundImplements.java | 21 ++ .../elements/ParsedGenericParameter.java | 51 +++ .../elements/ParsedGenericParameters.java | 38 +++ .../expression/ParsedCallArguments.java | 46 ++- .../parser/expression/ParsedExpression.java | 16 +- .../expression/ParsedExpressionAndAnd.java | 14 +- .../expression/ParsedExpressionArray.java | 15 + .../expression/ParsedExpressionAssign.java | 7 + ....java => ParsedExpressionAssociative.java} | 34 +- .../expression/ParsedExpressionBinary.java | 45 +++ .../expression/ParsedExpressionBool.java | 8 + .../expression/ParsedExpressionBracket.java | 7 + .../expression/ParsedExpressionCall.java | 15 + .../expression/ParsedExpressionCast.java | 9 + .../expression/ParsedExpressionCompare.java | 26 ++ .../ParsedExpressionConditional.java | 16 + .../expression/ParsedExpressionDollar.java | 10 + .../expression/ParsedExpressionFloat.java | 8 + .../expression/ParsedExpressionFunction.java | 56 ++-- .../expression/ParsedExpressionIndex.java | 15 + .../expression/ParsedExpressionIndexSet.java | 7 + .../expression/ParsedExpressionInt.java | 8 + .../expression/ParsedExpressionInvalid.java | 7 + .../expression/ParsedExpressionMember.java | 11 + .../expression/ParsedExpressionNew.java | 7 + .../expression/ParsedExpressionNull.java | 8 + .../expression/ParsedExpressionOpAssign.java | 7 + .../expression/ParsedExpressionOrOr.java | 20 ++ .../expression/ParsedExpressionRange.java | 18 ++ .../expression/ParsedExpressionString.java | 8 + .../expression/ParsedExpressionUnary.java | 20 ++ .../expression/ParsedExpressionValue.java | 33 -- .../expression/ParsedExpressionVariable.java | 7 + .../parser/statement/ParsedStatementCase.java | 15 + .../statement/ParsedStatementContinue.java | 6 + .../statement/ParsedStatementDefault.java | 15 + .../statement/ParsedStatementDoWhile.java | 6 + .../statement/ParsedStatementExpression.java | 6 + .../parser/statement/ParsedStatementFor.java | 6 + .../parser/statement/ParsedStatementIf.java | 8 +- .../statement/ParsedStatementReturn.java | 6 + .../statement/ParsedStatementSwitch.java | 21 ++ .../parser/statement/ParsedStatementVar.java | 6 + .../statement/ParsedStatementWhile.java | 6 + .../main/java/zenscript/runtime/AnyArray.java | 244 +++++++++++++++ .../zenscript/runtime/AnyAssociative.java | 264 ++++++++++++++++ .../main/java/zenscript/runtime/AnyBool.java | 26 +- .../java/zenscript/runtime/AnyDouble.java | 163 ++++++++++ .../main/java/zenscript/runtime/AnyInt.java | 214 +++++++++---- .../main/java/zenscript/runtime/AnyLong.java | 211 +++++++++++++ .../main/java/zenscript/runtime/AnyNull.java | 194 ++++++++++++ .../java/zenscript/runtime/AnyNumber.java | 87 +++++ .../main/java/zenscript/runtime/AnyRange.java | 243 ++++++++++++++ .../java/zenscript/runtime/AnyString.java | 33 +- .../src/main/java/zenscript/runtime/IAny.java | 67 +++- .../zenscript/runtime/ImmutableException.java | 17 + .../java/zenscript/runtime/NumberType.java | 21 ++ .../main/java/zenscript/runtime/Range.java | 26 ++ .../runtime/UnknownMemberException.java | 25 ++ .../java/zenscript/symbolic/TypeRegistry.java | 16 +- .../symbolic/method/IMethod.java} | 6 +- .../symbolic/method}/JavaMethod.java | 33 +- .../symbolic/method/MethodArgument.java} | 6 +- .../CastingRuleDelegateStaticMethod.java | 6 +- .../CastingRuleNullableStaticMethod.java | 8 +- .../CastingRuleNullableVirtualMethod.java | 6 +- .../type/casting/CastingRuleStaticMethod.java | 8 +- .../casting/CastingRuleVirtualMethod.java | 6 +- .../symbolic/typedef/ITypeDefinition.java | 38 +++ .../symbolic/unit/SymbolicFunction.java | 10 +- .../symbolic/util/CommonMethods.java | 158 +++++----- .../main/java/zenscript/util/StringUtil.java | 4 +- license-mit.txt | 5 + 178 files changed, 4629 insertions(+), 882 deletions(-) create mode 100644 MineTweaker3-API/src/main/java/minetweaker/IBracketHandlerFactory.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/block/BlockCollision.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/block/BlockSide.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockFactory.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/block/IExplosion.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/block/IRedstoneBlock.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/math/Ray.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3d.java rename MineTweaker3-API/src/main/java/minetweaker/api/{util/Position3f.java => math/Vector3f.java} (80%) create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/render/IRenderer.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/ITweakerSymbol.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/SymbolUtil.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticField.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticGetter.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticMethod.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/sync/SyncEntry.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/sync/SyncInstance.java create mode 100644 MineTweaker3-API/src/main/java/minetweaker/sync/SyncKey.java create mode 100644 MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCBlock.java create mode 100644 MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCDirection.java create mode 100644 MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCWorld.java create mode 100644 MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/entity/MCEntity.java create mode 100644 MineTweaker3-Web/download.php rename ZenScript/src/main/java/stanhebben/zenscript/expression/{partial => }/ExpressionJavaStaticField.java (85%) create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/IParsedGenericBound.java rename ZenScript/src/main/java/zenscript/parser/elements/{ParsedFunctionHeader.java => ParsedFunctionSignature.java} (72%) create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundConstructor.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundImplements.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameter.java create mode 100644 ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameters.java rename ZenScript/src/main/java/zenscript/parser/expression/{ParsedExpressionMap.java => ParsedExpressionAssociative.java} (75%) delete mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyArray.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyAssociative.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyDouble.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyLong.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyNull.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyNumber.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/AnyRange.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/ImmutableException.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/NumberType.java create mode 100644 ZenScript/src/main/java/zenscript/runtime/UnknownMemberException.java rename ZenScript/src/main/java/{stanhebben/zenscript/type/natives/IJavaMethod.java => zenscript/symbolic/method/IMethod.java} (87%) rename ZenScript/src/main/java/{stanhebben/zenscript/type/natives => zenscript/symbolic/method}/JavaMethod.java (89%) rename ZenScript/src/main/java/{stanhebben/zenscript/type/natives/JavaMethodArgument.java => zenscript/symbolic/method/MethodArgument.java} (80%) create mode 100644 ZenScript/src/main/java/zenscript/symbolic/typedef/ITypeDefinition.java create mode 100644 license-mit.txt diff --git a/.nb-gradle-properties b/.nb-gradle-properties index eecdb26a..ccdf630d 100644 --- a/.nb-gradle-properties +++ b/.nb-gradle-properties @@ -1,6 +1,11 @@ + + MIT + + MineTweaker + debug diff --git a/MineTweaker3-API/src/main/java/minetweaker/ClassRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/ClassRegistry.java index 0e558a52..774f8b24 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/ClassRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/ClassRegistry.java @@ -1,3 +1,8 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ package minetweaker; import java.util.List; diff --git a/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java index 9092a655..67d726c6 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java +++ b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandler.java @@ -1,9 +1,9 @@ package minetweaker; import java.util.List; -import stanhebben.zenscript.compiler.IScopeGlobal; import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.runtime.IAny; /** * Bracket handlers enable processing of the bracket syntax. @@ -24,9 +24,19 @@ public interface IBracketHandler { * * If the series of tokens is unrecognized, this method should return null. * - * @param environment global compilation environment * @param tokens token stream to be detected * @return the resolved symbol, or null */ - public IZenSymbol resolve(IScopeGlobal environment, List tokens); + public IZenSymbol resolve(List tokens); + + /** + * Evaluates the compile-time value of the given bracket value. + * + * If the series of tokens is unrecognized, or if this value cannot be + * evaluated at compile-time, this method should return null. + * + * @param tokens token stream to be detected + * @return the resolved compile-time value, or null + */ + public IAny eval(List tokens); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/IBracketHandlerFactory.java b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandlerFactory.java new file mode 100644 index 00000000..82a59f8a --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/IBracketHandlerFactory.java @@ -0,0 +1,16 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker; + +import stanhebben.zenscript.compiler.IScopeGlobal; + +/** + * + * @author Stan + */ +public interface IBracketHandlerFactory { + public IBracketHandler construct(IScopeGlobal scope); +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java index 62ee7868..1abfecf8 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java @@ -1,7 +1,6 @@ package minetweaker; import java.lang.annotation.Annotation; -import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -17,19 +16,14 @@ import minetweaker.api.game.IGame; import minetweaker.api.mods.ILoadedMods; import minetweaker.runtime.ILogger; -import minetweaker.runtime.MTTweaker; import minetweaker.api.recipes.IRecipeManager; import minetweaker.api.oredict.IOreDict; import minetweaker.api.recipes.IFurnaceManager; import minetweaker.api.server.IServer; import minetweaker.api.vanilla.IVanilla; import minetweaker.runtime.GlobalRegistry; -import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolJavaStaticField; -import stanhebben.zenscript.symbols.SymbolJavaStaticGetter; -import stanhebben.zenscript.symbols.SymbolJavaStaticMethod; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import minetweaker.runtime.symbol.ITweakerSymbol; +import minetweaker.runtime.symbol.SymbolUtil; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenExpansion; @@ -80,28 +74,21 @@ public class MineTweakerAPI { registerClass(cls); } - registerGlobalSymbol("logger", getJavaStaticGetterSymbol(MineTweakerAPI.class, "getLogger")); - registerGlobalSymbol("recipes", getJavaStaticFieldSymbol(MineTweakerAPI.class, "recipes")); - registerGlobalSymbol("furnace", getJavaStaticFieldSymbol(MineTweakerAPI.class, "furnace")); - registerGlobalSymbol("oreDict", getJavaStaticFieldSymbol(MineTweakerAPI.class, "oreDict")); - registerGlobalSymbol("events", getJavaStaticFieldSymbol(MineTweakerAPI.class, "events")); - registerGlobalSymbol("server", getJavaStaticFieldSymbol(MineTweakerAPI.class, "server")); - registerGlobalSymbol("client", getJavaStaticFieldSymbol(MineTweakerAPI.class, "client")); - registerGlobalSymbol("game", getJavaStaticFieldSymbol(MineTweakerAPI.class, "game")); - registerGlobalSymbol("loadedMods", getJavaStaticFieldSymbol(MineTweakerAPI.class, "loadedMods")); - registerGlobalSymbol("format", getJavaStaticFieldSymbol(MineTweakerAPI.class, "format")); - registerGlobalSymbol("vanilla", getJavaStaticFieldSymbol(MineTweakerAPI.class, "vanilla")); + registerGlobalSymbol("logger", SymbolUtil.getStaticGetter(MineTweakerAPI.class, "getLogger")); + registerGlobalSymbol("recipes", SymbolUtil.getStaticField(MineTweakerAPI.class, "recipes")); + registerGlobalSymbol("furnace", SymbolUtil.getStaticField(MineTweakerAPI.class, "furnace")); + registerGlobalSymbol("oreDict", SymbolUtil.getStaticField(MineTweakerAPI.class, "oreDict")); + registerGlobalSymbol("events", SymbolUtil.getStaticField(MineTweakerAPI.class, "events")); + registerGlobalSymbol("server", SymbolUtil.getStaticField(MineTweakerAPI.class, "server")); + registerGlobalSymbol("client", SymbolUtil.getStaticField(MineTweakerAPI.class, "client")); + registerGlobalSymbol("game", SymbolUtil.getStaticField(MineTweakerAPI.class, "game")); + registerGlobalSymbol("loadedMods", SymbolUtil.getStaticField(MineTweakerAPI.class, "loadedMods")); + registerGlobalSymbol("format", SymbolUtil.getStaticField(MineTweakerAPI.class, "format")); + registerGlobalSymbol("vanilla", SymbolUtil.getStaticField(MineTweakerAPI.class, "vanilla")); } private MineTweakerAPI() {} - /** - * The Tweaker is where you apply undoable actions. Any kind of action that - * reloads with the scripts should always be submitted to the tweaker. - */ - @Deprecated - public static final MTTweaker tweaker = new MTTweaker(); - /** * The logger can be used to write logging messages to the client. Error and * warning messages should be relayed to admins for further handling. @@ -168,7 +155,7 @@ public static final ILogger getLogger() { * @param action action object */ public static void apply(IUndoableAction action) { - tweaker.apply(action); + MineTweakerImplementationAPI.getTweaker().apply(action); } /** @@ -314,11 +301,11 @@ public static void registerClass(Class annotatedClass) { for (Annotation annotation : annotatedClass.getAnnotations()) { if (annotation instanceof ZenExpansion) { - GlobalRegistry.registerExpansion(annotatedClass); + GlobalRegistry.registerAnnotatedClass(annotatedClass); } if (annotation instanceof ZenClass) { - GlobalRegistry.registerNativeClass(annotatedClass); + GlobalRegistry.registerAnnotatedClass(annotatedClass); } if ((annotation instanceof BracketHandler) && IBracketHandler.class.isAssignableFrom(annotatedClass)) { @@ -341,7 +328,7 @@ public static void registerClass(Class annotatedClass) { * @param name symbol name * @param symbol symbol */ - public static void registerGlobalSymbol(String name, IZenSymbol symbol) { + public static void registerGlobalSymbol(String name, ITweakerSymbol symbol) { GlobalRegistry.registerGlobal(name, symbol); } @@ -365,63 +352,4 @@ public static void registerRemover(IRecipeRemover remover) { public static void registerBracketHandler(IBracketHandler handler) { GlobalRegistry.registerBracketHandler(handler); } - - /** - * Creates a symbol that refers to a java method. - * - * @param cls class that contains the method - * @param name method name - * @param arguments method argument types - * @return corresponding symbol - */ - public static IZenSymbol getJavaStaticMethodSymbol(Class cls, String name, Class... arguments) { - IJavaMethod method = JavaMethod.get(GlobalRegistry.getTypeRegistry(), cls, name, arguments); - return new SymbolJavaStaticMethod(method); - } - - /** - * Creates a symbol that refers to a java getter. The getter must be a method - * with no arguments. The given symbol will act as a variable of which the - * value can be retrieved but not set. - * - * @param cls class that contains the getter method - * @param name name of the method - * @return corresponding symbol - */ - public static IZenSymbol getJavaStaticGetterSymbol(Class cls, String name) { - IJavaMethod method = JavaMethod.get(GlobalRegistry.getTypeRegistry(), cls, name); - return new SymbolJavaStaticGetter(method); - } - - /** - * Creates a symbol that refers to a static field. The field must be an - * existing public field in the given class. The field will act as a - * variable that can be retrieved but not set. - * - * @param cls class that contains the field - * @param name field name (must be public) - * @return corresponding symbol - */ - public static IZenSymbol getJavaStaticFieldSymbol(Class cls, String name) { - try { - Field field = cls.getField(name); - return new SymbolJavaStaticField(cls, field, GlobalRegistry.getTypeRegistry()); - } catch (NoSuchFieldException ex) { - return null; - } catch (SecurityException ex) { - return null; - } - } - - /** - * Loads a Java method from an existing class. - * - * @param cls method class - * @param name method name - * @param arguments argument types - * @return java method - */ - public static IJavaMethod getJavaMethod(Class cls, String name, Class... arguments) { - return JavaMethod.get(GlobalRegistry.getTypeRegistry(), cls, name, arguments); - } } diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java index 90cf9500..30197ba3 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java @@ -39,6 +39,7 @@ import minetweaker.api.vanilla.LootEntry; import minetweaker.api.world.IBiome; import minetweaker.runtime.IScriptProvider; +import minetweaker.runtime.MTTweaker; import minetweaker.util.EventList; import minetweaker.util.IEventHandler; @@ -64,6 +65,8 @@ public class MineTweakerImplementationAPI { private static final ListenBlockInfo LISTEN_BLOCK_INFO = new ListenBlockInfo(); private static final EventList ONRELOAD = new EventList(); + private static final MTTweaker tweaker = new MTTweaker(); + static { minetweakerCommands = new HashMap(); @@ -429,6 +432,10 @@ public void execute(String[] arguments, IPlayer player) { })); } + public static MTTweaker getTweaker() { + return tweaker; + } + /** * Access point to the event handler implementation. */ @@ -505,7 +512,7 @@ public static void onServerStop() { * @param provider script provider */ public static void setScriptProvider(IScriptProvider provider) { - MineTweakerAPI.tweaker.setScriptProvider(provider); + tweaker.setScriptProvider(provider); } /** @@ -523,7 +530,7 @@ public static void reload() { events.onPlayerLoggedOut(LISTEN_LOGOUT); } - MineTweakerAPI.tweaker.rollback(); + tweaker.rollback(); if (MineTweakerAPI.server != null) { server.addCommand("minetweaker", "", new String[] { "mt" }, new ICommandFunction() { @@ -558,10 +565,10 @@ public boolean canExecute(IPlayer player) { ONRELOAD.publish(new ReloadEvent()); - MineTweakerAPI.tweaker.load(); + tweaker.load(); if (MineTweakerAPI.server != null) { - platform.distributeScripts(MineTweakerAPI.tweaker.getScriptData()); + platform.distributeScripts(tweaker.getScriptData()); } } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockCollision.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockCollision.java new file mode 100644 index 00000000..2d5847e8 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockCollision.java @@ -0,0 +1,33 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.block; + +import minetweaker.api.entity.IEntity; + +/** + * Unfinished. + * + * @author Stan + */ +public final class BlockCollision { + private final double distance; + private final double x; + private final double y; + private final double z; + private final IBlock block; + private final BlockSide blockSide; + private final IEntity entity; + + public BlockCollision(double distance, double x, double y, double z, IBlock block, BlockSide blockSide, IEntity entity) { + this.distance = distance; + this.x = x; + this.y = y; + this.z = z; + this.block = block; + this.blockSide = blockSide; + this.entity = entity; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockPatternOr.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockPatternOr.java index e50f1878..67e9247a 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockPatternOr.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockPatternOr.java @@ -1,30 +1,36 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker */ - package minetweaker.api.block; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import minetweaker.util.ArrayUtil; /** - * - * @author Stan + * Implements an or (|) operation on two or more blocks. + * + * @author Stan Hebben */ -public class BlockPatternOr implements IBlockPattern { +public final class BlockPatternOr implements IBlockPattern { private final IBlockPattern[] elements; - public BlockPatternOr(IBlockPattern[] elements) { + /** + * Constructs a block pattern consisting of the given elements. + * + * @param elements + */ + public BlockPatternOr(IBlockPattern... elements) { this.elements = elements; } - public BlockPatternOr(IBlockPattern a, IBlockPattern b) { - this.elements = new IBlockPattern[] {a, b}; - } - + // #################################### + // ### IBlockPattern implementation ### + // #################################### + @Override public List getBlocks() { List blocks = new ArrayList(); @@ -65,4 +71,31 @@ public String getDisplayName() { public IBlockPattern or(IBlockPattern pattern) { return new BlockPatternOr(ArrayUtil.append(elements, pattern)); } + + // ############################# + // ### Object implementation ### + // ############################# + + @Override + public int hashCode() { + int hash = 5; + hash = 29 * hash + Arrays.deepHashCode(this.elements); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final BlockPatternOr other = (BlockPatternOr) obj; + + if (!Arrays.deepEquals(this.elements, other.elements)) { + return false; + } + return true; + } } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockSide.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockSide.java new file mode 100644 index 00000000..1e70370e --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/BlockSide.java @@ -0,0 +1,26 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.block; + +/** + * + * @author Stan + */ +public enum BlockSide { + POSX, + NEGX, + POSY, + NEGY, + POSZ, + NEGZ; + + public static final BlockSide TOP = POSY; + public static final BlockSide BOTTOM = NEGY; + public static final BlockSide NORTH = NEGZ; + public static final BlockSide EAST = POSX; + public static final BlockSide SOUTH = POSZ; + public static final BlockSide WEST = NEGX; +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java index 273ab0f9..b410eb40 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlock.java @@ -1,11 +1,23 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ package minetweaker.api.block; import minetweaker.api.data.IData; +import minetweaker.api.player.IPlayer; +import minetweaker.api.render.IRenderer; +import minetweaker.api.math.Ray; +import minetweaker.api.world.IBlockGroup; +import zenscript.annotations.Optional; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; /** - * Block interface. Used to interact with blocks in the world. + * Block interface. Used to interact with blocks in the world as well as a + * means to define new blocks. * * @author Stan Hebben */ @@ -19,9 +31,108 @@ public interface IBlock extends IBlockPattern { @ZenGetter("definition") public IBlockDefinition getDefinition(); + /** + * Gets the block metadata. + * + * @return block meta + */ @ZenGetter("meta") public int getMeta(); + /** + * Gets the block data. + * + * @return block data + */ @ZenGetter("data") public IData getTileData(); + + /** + * Checks if this block is an air block. Air blocks are assumed to be + * replaceable by anything and passable. + * + * @return true for an air block, false otherwise. + */ + @ZenGetter("isAir") + public boolean isAir(); + + /** + * Checks if this block is a normal cube. Normal cubes have all their sides + * completely filled, are opaque and solid. + * + * @return true for a normal cube, false otherwise + */ + @ZenGetter("isNormalCube") + public boolean isNormalCube(); + + /** + * Gets the light emitted by this block. Returns an ARGB value, with + * A = light strength. Color might or might not be ignored depending on the + * platform it is running on. + * + * (Color value = A << 24 | R << 16 | G << 8 | B) + * + * @return block light value + */ + @ZenGetter("blockLight") + public int getBlockLight(); + + /** + * Gets the blast resistance of the block at the given position. + * + * @param blocks block group + * @param x block x + * @param y block y + * @param z block z + * @param explosion explosion data + * @return explosion resistance for the given explosion + */ + @ZenMethod + public float getBlastResistance(IBlockGroup blocks, int x, int y, int z, IExplosion explosion); + + /** + * Gets the hardness of the block at the given position. + * + * @param blocks block group + * @param x block x + * @param y block y + * @param z block z + * @param player player for which to calculate hardness + * @return hardness value + */ + @ZenMethod + public float getHardness(IBlockGroup blocks, int x, int y, int z, @Optional IPlayer player); + + /** + * Renders the given block in the world. + * + * @param blocks block group + * @param x block x + * @param y block y + * @param z block z + * @param renderer renderer + */ + @ZenMethod + public void renderWorld(IBlockGroup blocks, int x, int y, int z, IRenderer renderer); + + /** + * Renders the given block in the inventory. + * + * @param renderer renderer + */ + @ZenMethod + public void renderInventory(IRenderer renderer); + + /** + * Calculates the collission of the ray with this block. + * + * @param blocks + * @param x + * @param y + * @param z + * @param ray + * @return + */ + @ZenMethod + public BlockCollision collisionRayTrace(IBlockGroup blocks, int x, int y, int z, Ray ray); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java index f5cfe759..e65689c8 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockDefinition.java @@ -1,18 +1,46 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ package minetweaker.api.block; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenGetter; /** - * Blocks definitions provide additional information about blocks. + * Blocks definitions provide additional information about blocks. Never + * implement your own block definition - always generate one from IGame. * * @author Stan Hebben */ @ZenClass("minetweaker.block.IBlockDefinition") public interface IBlockDefinition { + /** + * Returns the block ID. A combination of block ID, block meta and block + * data should provide all necessary data to construct a block. + * + * @return block ID + */ @ZenGetter("id") public String getId(); + /** + * Returns the unlocalized name of this block. Used to determine the + * localized name by appending ".name" to it and using that as translation + * key. Individual blocks may have their own names as well. + * + * @return unlocalized name + */ + @ZenGetter("unlocalizedName") + public String getUnlocalizedName(); + + /** + * Returns the display name of this block. Translated using the localization + * system. + * + * @return localized name + */ @ZenGetter("displayName") public String getDisplayName(); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockFactory.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockFactory.java new file mode 100644 index 00000000..cc3981aa --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IBlockFactory.java @@ -0,0 +1,57 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.block; + +import minetweaker.api.data.IData; +import minetweaker.api.world.IBlockGroup; +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; +import zenscript.annotations.ZenMethod; + +/** + * Block factories are used to construct blocks. Factories may return the same + * block multiple times or return a different block every time. + * + * @author Stan Hebben + */ +@ZenClass("minetweaker.block.IBlockFactory") +public interface IBlockFactory { + /** + * Retrieves the factory's block definition. There is a 1:1 relationship + * between block definitions and factories, and this method must always + * return the same block definition. + * + * @return block definition for this factory + */ + @ZenGetter("definition") + public IBlockDefinition getDefinition(); + + /** + * Constructs a new world block. The block is tied to that specific location + * and should not be used for other locations. + * + * @param blocks + * @param x + * @param y + * @param z + * @param meta + * @param data + * @return + */ + @ZenMethod + public IBlock createForWorld(IBlockGroup blocks, int x, int y, int z, int meta, IData data); + + /** + * Constructs a new unplaced block. Such block should not be placed in the + * world. + * + * @param meta block meta value + * @param data block data contents + * @return constructed block + */ + @ZenMethod + public IBlock create(int meta, IData data); +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IExplosion.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IExplosion.java new file mode 100644 index 00000000..7365947d --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IExplosion.java @@ -0,0 +1,24 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.block; + +import minetweaker.api.entity.IEntity; + +/** + * + * @author Stan + */ +public interface IExplosion { + public IEntity getEntity(); + + public double getX(); + + public double getY(); + + public double getZ(); + + public double getPower(); +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/block/IRedstoneBlock.java b/MineTweaker3-API/src/main/java/minetweaker/api/block/IRedstoneBlock.java new file mode 100644 index 00000000..15b8fbe7 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/block/IRedstoneBlock.java @@ -0,0 +1,17 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.block; + +/** + * Implement this interface on a block to make it react to redstone signals. + * Such block may both receive and transmit signals. Or it may do nothing at all, + * or only interface with redstone for certain conditions. + * + * @author Stan Hebben + */ +public interface IRedstoneBlock { + +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java index 5e4eaf15..b230720d 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/entity/IEntity.java @@ -1,6 +1,6 @@ package minetweaker.api.entity; -import minetweaker.api.util.Position3f; +import minetweaker.api.math.Vector3d; import minetweaker.api.world.IDimension; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenGetter; @@ -29,7 +29,7 @@ public interface IEntity { * @return entity x position */ @ZenGetter("x") - public float getX(); + public double getX(); /** * Retrieves the y position of this entity. @@ -37,7 +37,7 @@ public interface IEntity { * @return entity y position */ @ZenGetter("y") - public float getY(); + public double getY(); /** * Retrieves the z position of this entity. @@ -45,7 +45,7 @@ public interface IEntity { * @return entity z position */ @ZenGetter("z") - public float getZ(); + public double getZ(); /** * Retrieves the position of this entity. @@ -53,7 +53,7 @@ public interface IEntity { * @return entity position */ @ZenGetter("position") - public Position3f getPosition(); + public Vector3d getPosition(); /** * Sets the position of this entity. Instantly moves (teleports) the entity @@ -62,5 +62,5 @@ public interface IEntity { * @param position entity position */ @ZenSetter("position") - public void setPosition(Position3f position); + public void setPosition(Vector3d position); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java index 55976699..45974552 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/game/IGame.java @@ -1,7 +1,14 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ package minetweaker.api.game; import java.util.List; +import minetweaker.api.block.IBlock; import minetweaker.api.block.IBlockDefinition; +import minetweaker.api.block.IBlockFactory; import minetweaker.api.entity.IEntityDefinition; import minetweaker.api.item.IItemDefinition; import minetweaker.api.liquid.ILiquidDefinition; @@ -94,4 +101,33 @@ public interface IGame { */ @ZenMethod public String localize(String key, String lang); + + /** + * Gets the block definition for the given ID, or creates a new one if it + * doesn't already exist in the current world. + * + * @param id block id + * @return block definition + */ + @ZenMethod + public IBlockDefinition makeDefinition(String id); + + /** + * Registers a simple block with a given ID. Fails if the given ID already + * exists. + * + * @param meta meta value to be used + * @param block block to register + */ + @ZenMethod + public void registerBlock(int meta, IBlock block); + + /** + * Registers an advanced block with a given ID. Fails if the given ID + * alreadly exists. + * + * @param factory block factory to register + */ + @ZenMethod + public void registerAdvancedBlock(IBlockFactory factory); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/math/Ray.java b/MineTweaker3-API/src/main/java/minetweaker/api/math/Ray.java new file mode 100644 index 00000000..11af823d --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/math/Ray.java @@ -0,0 +1,296 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.math; + +/** + * + * @author Stan + */ +public class Ray { + /** + * Constructs a ray going from the first to the second point. + * + * The norm of the ray will be the distance between the two points, this is, + * getX(1), getY(1) and getZ(1) will return the position of the second point. + * + * @param x1 + * @param y1 + * @param z1 + * @param x2 + * @param y2 + * @param z2 + * @return + */ + public static Ray fromPoints( + float x1, float y1, float z1, + float x2, float y2, float z2) { + return new Ray( + x1, + y1, + z1, + x2 - x1, + y2 - y1, + z2 - z1); + } + + /** + * Constructs a normalized ray from the first to the second point. + * + * The norm of the ray will be 1, that is, getX(1), getY(1) and getZ(1) will + * return a point that is at distance 1 from the starting point, no matter + * the distance between the given points. + * + * @param x1 + * @param y1 + * @param z1 + * @param x2 + * @param y2 + * @param z2 + * @return + */ + public static Ray fromPointsNormalized( + double x1, double y1, double z1, + double x2, double y2, double z2) { + double dirx = x2 - x1; + double diry = y2 - y1; + double dirz = z2 - z1; + + double length = Math.sqrt(dirx * dirx + diry * diry + dirz * dirz); + + return new Ray( + x1, + y1, + z1, + dirx / length, + diry / length, + dirz / length); + } + + /** + * Constructs a ray starting from the given point and going in the specified + * direction. + * + * The norm of the ray will be equal to the length of dir, that is, getX(1), + * getY(1) and getZ(1) will return the point of start + dir no matter the + * length of dir. + * + * @param x + * @param y + * @param z + * @param dirx + * @param diry + * @param dirz + * @return + */ + public static Ray fromDirection( + double x, double y, double z, + double dirx, double diry, double dirz) { + return new Ray(x, y, z, dirx, diry, dirz); + } + + /** + * Constructs a normalized ray starting from the given point and going in + * the specified direction. + * + * The norm of the ray will be equal to 1 no matter the length of dir. + * + * @param x + * @param y + * @param z + * @param dirx + * @param diry + * @param dirz + * @return + */ + public static Ray fromDirectionNormalized( + double x, double y, double z, + double dirx, double diry, double dirz) { + return new Ray(x, y, z, dirx, diry, dirz); + } + + private final double startx; + private final double starty; + private final double startz; + private final double dirx; + private final double diry; + private final double dirz; + + private Ray(double x, double y, double z, double dirx, double diry, double dirz) { + this.startx = x; + this.starty = y; + this.startz = z; + + this.dirx = dirx; + this.diry = diry; + this.dirz = dirz; + } + + public double getStartX() { + return startx; + } + + public double getStartY() { + return starty; + } + + public double getStartZ() { + return startz; + } + + /** + * Gets the x position at the given distance. Distance is a multiple of the + * norm of this ray. + * + * @param distance distance + * @return x value at the given distance + */ + public double getX(double distance) { + return startx + dirx * distance; + } + + /** + * Gets the y position at the given distance. Distance is a multiple of the + * norm of this ray. + * + * @param distance distance + * @return y value at the given distance + */ + public double getY(double distance) { + return starty + diry * distance; + } + + /** + * Gets the z position at the given distance. Distance is a multiple of the + * norm of this ray. + * + * @param distance distance + * @return z value at the given distance + */ + public double getZ(double distance) { + return startz + dirz * distance; + } + + /** + * Calculates the intersection with the given YZ plane (the collection of + * all points with given x - value). Returns the distance from the start. + * use getX, getY and getZ to calculate the actual coordinates. May return + * NaN if the ray is parallel to the plane. + * + * @param x plane x value + * @return intersection distance + */ + public double intersectYZPlane(double x) { + // startx + dirx * distance = x + // distance = (x - startx) / dirx; + return (x - this.startx) / dirx; + } + + /** + * Calculates the intersection with the given XZ plane (the collection of + * all points with given y - value). Returns the distance from the start. + * use getX, getY and getZ to calculate the actual coordinates. May return + * NaN if the ray is parallel to the plane. + * + * @param y plane y value + * @return intersection distance + */ + public double intersectXZPlane(double y) { + // starty + diry * distance = y + return (y - this.starty) / diry; + } + + /** + * Calculates the intersection with the given XY plane (the collection of + * all points with given z - value). Returns the distance from the start. + * use getX, getY and getZ to calculate the actual coordinates. May return + * NaN if the ray is parallel to the plane. + * + * @param z plane z value + * @return intersection distance + */ + public double intersectXYPlane(double z) { + // startz + dirz * distance = z + return (z - this.startz) / dirz; + } + + /** + * Calculates the intersection of this ray with the given plane with + * formula ax + by + cz + d = 0. + * + * @param a + * @param b + * @param c + * @param d + * @return + */ + public double intersectPlane(double a, double b, double c, double d) { + // ax + by + cz + d = 0 + // x = startx + distance * dirx + // y = starty + distance * diry + // z = startz + distance * dirz + // distance * (dirx * a + diry * b + dirz * c) + (startx * a + starty * b + startz * c) + d = 0 + return - (startx * a + starty * b + startz * c + d) / (dirx * a + diry * b + dirz * c); + } + + /** + * Gets the distance between point on the axis that's nearest to the given + * point, and the start of the ray. + * + * @param px + * @param py + * @param pz + * @return distance + */ + public double nearestDistance(double px, double py, double pz) { + // This is equal to the intersection between the plane perpendicular to + // the ray and going through (px, py, pz), and the ray. + // + // So we can calculate as follows: + // 1) Calculate the planar equation a * x + b * y + c * z = d + // 2) The ray's calculation is + // x = startx + distance * dirx, + // y = starty + distance * diry, + // z = startz + distance * dirz) + // 3) Fill in the ray's parametrized x, y, z position in the planar + // equation and calculate distance out of it + // + // Planar equation perpendicular to the direction (dirx, diry, dirz) is + // x * dirx + y * diry + z * dirz = d + // + // Thus we already have a = dirx, b = diry, c = dirz and d still needs + // to be calculated. We can achieve this by filling in the point in + // the plane: + // px * dirx + py * diry + pz * dirz = d + // + // Filling the parametric ray equation: + // (startx + distance * dirx) * dirx + // + (starty + distance * diry) * diry + // + (startz + distance * dirz) * dirz + // = px * dirx + py * diry + pz * dirz + // + // Working out the brackets: + // startx * dirx + distance * dirx * dirx + // + starty * diry + distance * diry * diry + // + startz * dirz + distance * dirz * dirz + // = px * dirx + py * diry + pz * dirz + // + // Then factoring out distance: + // distance * (dirx * dirx + diry * diry + dirz * dirz) + // = px * dirx - startx * dirx + // + py * diry - starty * diry + // + pz * dirz - startz * dirz + // + // We can simplify that a bit: + // + // distance * (dirx * dirx + diry * diry + dirz * dirz) + // = (px - startx) * dirx + (py - starty) * diry + (pz - startz) * dirz + // + // Thus calculating distance as such: + + return dirx * (px - startx) + diry * (py - starty) + dirz * (pz - startz) + / (dirx * dirx + diry * diry + dirz * dirz); + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3d.java b/MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3d.java new file mode 100644 index 00000000..c52ed829 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3d.java @@ -0,0 +1,42 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.api.math; + +import zenscript.annotations.ZenClass; +import zenscript.annotations.ZenGetter; + +/** + * + * @author Stan Hebben + */ +@ZenClass("minetweaker.util.Vector3f") +public class Vector3d { + private final double x; + private final double y; + private final double z; + + public Vector3d(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + @ZenGetter("x") + public double getX() { + return x; + } + + @ZenGetter("y") + public double getY() { + return y; + } + + @ZenGetter("z") + public double getZ() { + return z; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java b/MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3f.java similarity index 80% rename from MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java rename to MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3f.java index e2ab68c1..e075ad9d 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/util/Position3f.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/math/Vector3f.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package minetweaker.api.util; +package minetweaker.api.math; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenGetter; @@ -13,13 +13,13 @@ * * @author Stan */ -@ZenClass("minetweaker.util.Position3f") -public class Position3f { +@ZenClass("minetweaker.util.Vector3f") +public class Vector3f { private final float x; private final float y; private final float z; - public Position3f(float x, float y, float z) { + public Vector3f(float x, float y, float z) { this.x = x; this.y = y; this.z = z; diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/render/IRenderer.java b/MineTweaker3-API/src/main/java/minetweaker/api/render/IRenderer.java new file mode 100644 index 00000000..e6921f45 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/render/IRenderer.java @@ -0,0 +1,16 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.render; + +/** + * Renderers provide an interface to the underlying rendering mechanism, such + * as OpenGL. They are used to render blocks, items and any other kind of models. + * + * @author Stan Hebben + */ +public interface IRenderer { + public void addTranslation(double x, double y, double z); +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java b/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java index ddb1e9e6..74c11be7 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/world/IBlockGroup.java @@ -1,9 +1,8 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker */ - package minetweaker.api.world; import minetweaker.api.block.IBlock; @@ -12,14 +11,43 @@ import zenscript.annotations.ZenMethod; /** - * - * @author Stan + * Represents a block group. A block group can be the world, a moving chunk or + * anything else that fits the block group interface. + * + * @author Stan Hebben */ @ZenClass("minetweaker.world.IBlockGroup") public interface IBlockGroup { + /** + * Gets the dimension this block group is in. Returns itself if this block + * group is the dimension. + * + * @return dimension + */ @ZenGetter("dimension") public IDimension getDimension(); + /** + * Retrieves the block at the given position. Never returns null and never + * throws an IndexOutOfBoundsException, but may return an air block. + * + * @param x position x + * @param y position y + * @param z position z + * @return block at the given position + */ @ZenMethod public IBlock getBlock(int x, int y, int z); + + /** + * Sets the block at the given position. + * + * @param x block x position + * @param y block y position + * @param z block z position + * @param block block to be set + * @param render indicates if the block should be re-rendered + */ + @ZenMethod + public void setBlock(int x, int y, int z, IBlock block, boolean render); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java index 11ccd942..21fa0f72 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/GlobalRegistry.java @@ -6,38 +6,29 @@ package minetweaker.runtime; -import java.lang.annotation.Annotation; -import java.lang.reflect.Field; -import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; import minetweaker.IBracketHandler; import minetweaker.IRecipeRemover; import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; -import zenscript.IZenErrorLogger; +import minetweaker.runtime.symbol.ITweakerSymbol; +import minetweaker.runtime.symbol.SymbolUtil; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.TypeExpansion; -import zenscript.annotations.ZenExpansion; import stanhebben.zenscript.compiler.ClassNameGenerator; import stanhebben.zenscript.compiler.IScopeGlobal; -import stanhebben.zenscript.compiler.TypeRegistry; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; -import zenscript.lexer.Token; -import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.symbols.SymbolJavaStaticField; -import stanhebben.zenscript.symbols.SymbolJavaStaticMethod; import stanhebben.zenscript.symbols.SymbolPackage; -import stanhebben.zenscript.symbols.SymbolType; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.ZenTypeNative; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.runtime.IAny; +import zenscript.symbolic.TypeRegistry; import zenscript.util.ZenPosition; /** @@ -45,24 +36,20 @@ * @author Stan */ public class GlobalRegistry { - private static final Map globals = new HashMap(); + private static final Map globals = new HashMap(); private static final List removers = new ArrayList(); private static final List bracketHandlers = new ArrayList(); - private static final TypeRegistry types = new TypeRegistry(); - private static final SymbolPackage root = new SymbolPackage(""); - private static final IZenErrorLogger errors = new MyErrorLogger(); - private static final IZenCompileEnvironment environment = new MyCompileEnvironment(); - private static final Map expansions = new HashMap(); + private static final List annotatedClasses = new ArrayList(); static { - registerGlobal("print", getStaticFunction(GlobalFunctions.class, "print", String.class)); - registerGlobal("max", getStaticFunction(Math.class, "max", int.class, int.class)); - registerGlobal("min", getStaticFunction(Math.class, "min", int.class, int.class)); + registerGlobal("print", SymbolUtil.getStaticMethod(GlobalFunctions.class, "print", String.class)); + registerGlobal("max", SymbolUtil.getStaticMethod(Math.class, "max", int.class, int.class)); + registerGlobal("min", SymbolUtil.getStaticMethod(Math.class, "min", int.class, int.class)); } private GlobalRegistry() {} - public static void registerGlobal(String name, IZenSymbol symbol) { + public static void registerGlobal(String name, ITweakerSymbol symbol) { if (globals.containsKey(name)) { throw new IllegalArgumentException("symbol already exists: " + name); } @@ -70,18 +57,6 @@ public static void registerGlobal(String name, IZenSymbol symbol) { globals.put(name, symbol); } - public static void registerExpansion(Class cls) { - for (Annotation annotation : cls.getAnnotations()) { - if (annotation instanceof ZenExpansion) { - ZenExpansion eAnnotation = (ZenExpansion) annotation; - if (!expansions.containsKey(eAnnotation.value())) { - expansions.put(eAnnotation.value(), new TypeExpansion(eAnnotation.value())); - } - expansions.get(eAnnotation.value()).expand(cls, types); - } - } - } - public static void registerRemover(IRecipeRemover remover) { removers.add(remover); } @@ -90,15 +65,8 @@ public static void registerBracketHandler(IBracketHandler handler) { bracketHandlers.add(handler); } - public static void registerNativeClass(Class cls) { - ZenTypeNative type = new ZenTypeNative(cls); - type.complete(types); - - root.put(type.getName(), new SymbolType(type), errors); - } - - public static TypeRegistry getTypeRegistry() { - return types; + public static void registerAnnotatedClass(Class cls) { + annotatedClasses.add(cls); } public static void remove(IIngredient ingredient) { @@ -107,9 +75,9 @@ public static void remove(IIngredient ingredient) { } } - public static IZenSymbol resolveBracket(IScopeGlobal environment, List tokens) { + public static IZenSymbol resolveBracket(List tokens) { for (IBracketHandler handler : bracketHandlers) { - IZenSymbol symbol = handler.resolve(environment, tokens); + IZenSymbol symbol = handler.resolve(tokens); if (symbol != null) { return symbol; } @@ -118,27 +86,8 @@ public static IZenSymbol resolveBracket(IScopeGlobal environment, List to return null; } - public static IZenSymbol getStaticFunction(Class cls, String name, Class... arguments) { - IJavaMethod method = JavaMethod.get(types, cls, name, arguments); - if (method == null) return null; - return new SymbolJavaStaticMethod(method); - } - - public static IZenSymbol getStaticField(Class cls, String name) { - try { - Field field = cls.getDeclaredField(name); - return new SymbolJavaStaticField(cls, field, types); - } catch (NoSuchFieldException ex) { - Logger.getLogger(GlobalRegistry.class.getName()).log(Level.SEVERE, null, ex); - return null; - } catch (SecurityException ex) { - Logger.getLogger(GlobalRegistry.class.getName()).log(Level.SEVERE, null, ex); - return null; - } - } - public static IScopeGlobal makeGlobalEnvironment(Map classes) { - return new MyGlobalEnvironment(classes); + return new TweakerGlobalScope(classes); } private static class MyErrorLogger implements IZenErrorLogger { @@ -162,6 +111,14 @@ public void warning(ZenPosition position, String message) { } private static class MyCompileEnvironment implements IZenCompileEnvironment { + private final IScopeGlobal scope; + private final IZenErrorLogger errors; + + private MyCompileEnvironment(IScopeGlobal scope, IZenErrorLogger errors) { + this.scope = scope; + this.errors = errors; + } + @Override public IZenErrorLogger getErrorLogger() { return errors; @@ -169,11 +126,7 @@ public IZenErrorLogger getErrorLogger() { @Override public IZenSymbol getGlobal(String name) { - if (globals.containsKey(name)) { - return globals.get(name); - } else { - return root.get(name); - } + return null; } @Override @@ -183,39 +136,70 @@ public IZenSymbol getDollar(String name) { @Override public IZenSymbol getBracketed(IScopeGlobal environment, List tokens) { - return resolveBracket(environment, tokens); + return resolveBracket(tokens); } @Override - public TypeRegistry getTypeRegistry() { - return types; + public IAny evalGlobal(String name) { + // TODO + return null; } @Override - public TypeExpansion getExpansion(String type) { - return expansions.get(type); + public IAny evalDollar(String name) { + return null; + } + + @Override + public IAny evalBracketed(List tokens) { + for (IBracketHandler handler : bracketHandlers) { + IAny symbol = handler.eval(tokens); + if (symbol != null) { + return symbol; + } + } + + return null; } } - private static class MyGlobalEnvironment implements IScopeGlobal { + private static class TweakerGlobalScope implements IScopeGlobal { private final Map classes; private final Map symbols; private final ClassNameGenerator generator; + private final TypeRegistry types; + + private final IZenCompileEnvironment environment; + private final SymbolPackage root = new SymbolPackage(""); + private final IZenErrorLogger errors = new MyErrorLogger(); + private final Map expansions = new HashMap(); - public MyGlobalEnvironment(Map classes) { + public TweakerGlobalScope(Map classes) { this.classes = classes; symbols = new HashMap(); + for (Map.Entry entry : globals.entrySet()) { + symbols.put(entry.getKey(), entry.getValue().convert(this)); + } + generator = new ClassNameGenerator(); + + types = new TypeRegistry(this); + environment = new MyCompileEnvironment(this, errors); + + // add annotated classes + for (Class cls : annotatedClasses) { + + } } @Override public IZenCompileEnvironment getEnvironment() { return environment; } - + @Override - public TypeExpansion getExpansion(String name) { - return expansions.get(name); + public TypeRegistry getTypes() { + return types; } @Override @@ -234,17 +218,15 @@ public void putClass(String name, byte[] data) { } @Override - public IPartialExpression getValue(String name, ZenPosition position) { + public IPartialExpression getValue(String name, ZenPosition position, IScopeMethod scope) { if (symbols.containsKey(name)) { - return symbols.get(name).instance(position); - } else if (globals.containsKey(name)) { - return globals.get(name).instance(position); + return symbols.get(name).instance(position, scope); } else { IZenSymbol pkg = root.get(name); if (pkg == null) { return null; } else { - return pkg.instance(position); + return pkg.instance(position, scope); } } } @@ -258,11 +240,6 @@ public void putValue(String name, IZenSymbol value, ZenPosition position) { } } - @Override - public ZenType getType(Type type) { - return types.getType(type); - } - @Override public void error(ZenPosition position, String message) { MineTweakerAPI.logError(position.toString() + " > " + message); diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/IScriptIterator.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/IScriptIterator.java index 6dac8a0a..d5015cf7 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/IScriptIterator.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/IScriptIterator.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.InputStream; +import zenscript.parser.IFileLoader; /** * @@ -16,6 +17,8 @@ public interface IScriptIterator { public String getGroupName(); + public IFileLoader getGroupFileLoader(); + public boolean next(); public String getName(); diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java index b7042d2e..b0333dda 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java @@ -22,13 +22,12 @@ import minetweaker.MineTweakerAPI; import minetweaker.api.item.IIngredient; import minetweaker.runtime.providers.ScriptProviderMemory; -import stanhebben.zenscript.ZenModule; -import static stanhebben.zenscript.ZenModule.compileScripts; -import static stanhebben.zenscript.ZenModule.extractClassName; -import zenscript.parser.ParsedFile; -import zenscript.lexer.ZenTokener; import stanhebben.zenscript.compiler.IScopeGlobal; import zenscript.lexer.ParseException; +import zenscript.lexer.ZenTokener; +import zenscript.parser.ParsedFile; +import zenscript.parser.ParsedModule; +import zenscript.parser.ParserEnvironment; /** * @@ -102,17 +101,21 @@ public void load() { scriptData = ScriptProviderMemory.collect(scriptProvider); Set executed = new HashSet(); - + + Map classes = new HashMap(); + IScopeGlobal global = GlobalRegistry.makeGlobalEnvironment(classes); + + // Step 1: parse all files + ParserEnvironment parserEnvironment = new ParserEnvironment(global.getEnvironment()); Iterator scripts = scriptProvider.getScripts(); while (scripts.hasNext()) { IScriptIterator script = scripts.next(); if (!executed.contains(script.getGroupName())) { executed.add(script.getGroupName()); - - Map classes = new HashMap(); - IScopeGlobal environmentGlobal = GlobalRegistry.makeGlobalEnvironment(classes); - + + ParsedModule module = parserEnvironment.makeModule(script.getGroupName(), script.getGroupFileLoader()); + List files = new ArrayList(); while (script.next()) { @@ -121,17 +124,15 @@ public void load() { reader = new InputStreamReader(new BufferedInputStream(script.open())); String filename = script.getName(); - String className = extractClassName(filename); ZenTokener parser = new ZenTokener(reader); - ParsedFile pfile = new ParsedFile(filename, className, parser, environmentGlobal); + ParsedFile pfile = new ParsedFile(module, filename, parser); files.add(pfile); } catch (IOException ex) { MineTweakerAPI.logError("Could not load script " + script.getName() + ": " + ex.getMessage()); } catch (ParseException ex) { - //ex.printStackTrace(); - MineTweakerAPI.logError("Error parsing " + ex.getFile().getFileName() + ":" + ex.getLine() + " -- " + ex.getExplanation()); - } catch (Exception ex) { + MineTweakerAPI.logError("Error parsing " + ex.getPosition() + ": " + ex.getExplanation()); + } catch (Throwable ex) { MineTweakerAPI.logError("Error loading " + script.getName() + ": " + ex.toString()); ex.printStackTrace(); } @@ -143,21 +144,26 @@ public void load() { } } - try { +/* try { String filename = script.getGroupName(); System.out.println("MineTweaker: Loading " + filename); compileScripts(filename, files, environmentGlobal, DEBUG); // execute scripts - ZenModule module = new ZenModule(classes, MineTweakerAPI.class.getClassLoader()); - module.getMain().run(); - } catch (Exception ex) { + ZenModule cmodule = new ZenModule(classes, MineTweakerAPI.class.getClassLoader()); + cmodule.getMain().run(); + } catch (Throwable ex) { MineTweakerAPI.logError("Error executing " + script.getGroupName() + ": " + ex.getMessage()); ex.printStackTrace(); - } + }*/ } } + // Step 2: compile all files + + + // Step 3: execute + if (wereStuck.size() > 0) { MineTweakerAPI.logWarning(Integer.toString(wereStuck.size()) + " modifications were stuck"); for (IUndoableAction action : wereStuck) { diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/ITweakerSymbol.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/ITweakerSymbol.java new file mode 100644 index 00000000..cbc76898 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/ITweakerSymbol.java @@ -0,0 +1,20 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.runtime.symbol; + +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.runtime.IAny; + +/** + * + * @author Stan + */ +public interface ITweakerSymbol { + public IZenSymbol convert(IScopeGlobal scope); + + public IAny eval(); +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/SymbolUtil.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/SymbolUtil.java new file mode 100644 index 00000000..9ceb0741 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/SymbolUtil.java @@ -0,0 +1,84 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.runtime.symbol; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.symbols.IZenSymbol; +import stanhebben.zenscript.symbols.SymbolJavaStaticField; +import zenscript.runtime.IAny; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.JavaMethod; + +/** + * + * @author Stan + */ +public class SymbolUtil { + public static ITweakerSymbol getStaticMethod(Class cls, String name, Class... argumentTypes) { + try { + Method result = cls.getMethod(name, argumentTypes); + if ((result.getModifiers() & Modifier.STATIC) == 0) { + return null; + } else { + return new TweakerSymbolStaticMethod(result); + } + } catch (NoSuchMethodException ex) { + return null; + } + } + + public static ITweakerSymbol getStaticField(Class cls, String name) { + return getStaticField(cls, name, null); + } + + public static ITweakerSymbol getStaticField(Class cls, String name, IAny value) { + try { + Field field = cls.getField(name); + if ((field.getModifiers() & Modifier.STATIC) == 0) + return null; + + return new TweakerSymbolStaticField(field, value); + } catch (NoSuchFieldException ex) { + return null; + } + } + + public static ITweakerSymbol getStaticGetter(Class cls, String name) { + return getStaticGetter(cls, name, null); + } + + public static ITweakerSymbol getStaticGetter(Class cls, String name, IAny value) { + try { + Method result = cls.getMethod(name); + if ((result.getModifiers() & Modifier.STATIC) == 0) { + return null; + } else { + return new TweakerSymbolStaticGetter(result, value); + } + } catch (NoSuchMethodException ex) { + return null; + } + } + + public static IMethod getZenStaticMethod(IScopeGlobal scope, Class cls, String name, Class... argumentTypes) { + return JavaMethod.get(scope.getTypes(), cls, name, argumentTypes); + } + + public static IZenSymbol getZenStaticField(IScopeGlobal scope, Class cls, String name) { + try { + Field field = cls.getField(name); + if ((field.getModifiers() & Modifier.STATIC) == 0) + return null; + + return new SymbolJavaStaticField(field); + } catch (NoSuchFieldException ex) { + return null; + } + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticField.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticField.java new file mode 100644 index 00000000..18f64b5f --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticField.java @@ -0,0 +1,35 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.runtime.symbol; + +import java.lang.reflect.Field; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.runtime.IAny; + +/** + * + * @author Stan + */ +public class TweakerSymbolStaticField implements ITweakerSymbol { + private final Field field; + private final IAny value; + + public TweakerSymbolStaticField(Field field, IAny value) { + this.field = field; + this.value = value; + } + + @Override + public IZenSymbol convert(IScopeGlobal scope) { + + } + + @Override + public IAny eval() { + return value; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticGetter.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticGetter.java new file mode 100644 index 00000000..f17ff158 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticGetter.java @@ -0,0 +1,35 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.runtime.symbol; + +import java.lang.reflect.Method; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.runtime.IAny; + +/** + * + * @author Stan + */ +public class TweakerSymbolStaticGetter implements ITweakerSymbol { + private final Method method; + private final IAny value; + + public TweakerSymbolStaticGetter(Method method, IAny value) { + this.method = method; + this.value = value; + } + + @Override + public IZenSymbol convert(IScopeGlobal scope) { + + } + + @Override + public IAny eval() { + return value; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticMethod.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticMethod.java new file mode 100644 index 00000000..b371f2e9 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/symbol/TweakerSymbolStaticMethod.java @@ -0,0 +1,37 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.runtime.symbol; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.symbols.IZenSymbol; +import zenscript.runtime.IAny; + +/** + * + * @author Stan + */ +public class TweakerSymbolStaticMethod implements ITweakerSymbol { + private final Method method; + + public TweakerSymbolStaticMethod(Method method) { + if ((method.getModifiers() & Modifier.STATIC) == 0) + throw new IllegalArgumentException("Method must be static"); + + this.method = method; + } + + @Override + public IZenSymbol convert(IScopeGlobal scope) { + + } + + @Override + public IAny eval() { + return null; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/sync/SyncEntry.java b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncEntry.java new file mode 100644 index 00000000..999179a7 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncEntry.java @@ -0,0 +1,40 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.sync; + +/** + * + * @author Stan + */ +public class SyncEntry { + private final SyncKey key; + private final String filename; + private final long dataOffset; + private final long size; + + public SyncEntry(SyncKey key, String filename, long dataOffset, long size) { + this.key = key; + this.filename = filename; + this.dataOffset = dataOffset; + this.size = size; + } + + public SyncKey getKey() { + return key; + } + + public String getFilename() { + return filename; + } + + public long getDataOffset() { + return dataOffset; + } + + public long getSize() { + return size; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/sync/SyncInstance.java b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncInstance.java new file mode 100644 index 00000000..2f51667d --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncInstance.java @@ -0,0 +1,74 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.sync; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.RandomAccessFile; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Stan + */ +public class SyncInstance { + private final Map entries; + private final RandomAccessFile dataFile; + + public SyncInstance(File indexFile, File dataFile) throws IOException { + entries = new HashMap(); + this.dataFile = new RandomAccessFile(dataFile, "rwd"); + + if (!indexFile.exists()) { + indexFile.createNewFile(); + } + + if (!dataFile.exists()) { + dataFile.createNewFile(); + } + + DataInputStream readIndex = new DataInputStream(new BufferedInputStream(new FileInputStream(indexFile))); + String name = readIndex.readUTF(); + while (!name.isEmpty()) { + long dataOffset = readIndex.readLong(); + long size = readIndex.readLong(); + + byte[] filehash = new byte[readIndex.readInt()]; + readIndex.readFully(filehash); + + SyncKey key = new SyncKey(filehash); + SyncEntry entry = new SyncEntry(key, name, dataOffset, size); + entries.put(key, entry); + + name = readIndex.readUTF(); + } + } + + public boolean contains(SyncKey key) { + return entries.containsKey(key); + } + + public InputStream open(SyncKey key) throws IOException { + SyncEntry entry = entries.get(key); + if (entry == null) { + throw new FileNotFoundException(); + } else { + synchronized (dataFile) { + dataFile.seek(entry.getDataOffset()); + byte[] data = new byte[(int) entry.getSize()]; + dataFile.readFully(data); + return new ByteArrayInputStream(data); + } + } + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/sync/SyncKey.java b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncKey.java new file mode 100644 index 00000000..69776558 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/sync/SyncKey.java @@ -0,0 +1,42 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.sync; + +import java.util.Arrays; + +/** + * + * @author Stan + */ +public class SyncKey { + private final byte[] key; + + public SyncKey(byte[] key) { + this.key = key; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 79 * hash + Arrays.hashCode(this.key); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final SyncKey other = (SyncKey) obj; + if (!Arrays.equals(this.key, other.key)) { + return false; + } + return true; + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCBlock.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCBlock.java new file mode 100644 index 00000000..3f779590 --- /dev/null +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCBlock.java @@ -0,0 +1,52 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.minecraft; + +import minetweaker.api.block.IBlock; +import minetweaker.api.item.IItemStack; +import minetweaker.mc1710.block.MCBlockDefinition; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; + +/** + * + * @author Stan + */ +public class MCBlock { + private MCBlock() {} + + /** + * Retrieves the block from an item stack. + * + * @param itemStack + * @return + */ + public static Block getBlock(IItemStack itemStack) { + return ((MCBlockDefinition) itemStack.asBlock().getDefinition()).getInternalBlock(); + } + + /** + * Retrieves the Minecraft block from the given MineTweaker block. + * + * @param block block to convert + * @return + */ + public static Block getBlock(IBlock block) { + return ((MCBlockDefinition) block.getDefinition()).getInternalBlock(); + } + + /** + * Converts the given block into a tile entity. Will return the tile entity + * of the given block if it's a Minecraft block, or the generic MineTweaker + * tile entity if it's a MineTweaker defined block. + * + * @param block + * @return + */ + public static TileEntity getTileEntity(IBlock block) { + return TileEntity.createAndLoadEntity(MineTweakerMC.getNBTCompound(block.getTileData())); + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCDirection.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCDirection.java new file mode 100644 index 00000000..8f24db6d --- /dev/null +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCDirection.java @@ -0,0 +1,36 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.minecraft; + +import minetweaker.api.block.BlockSide; +import net.minecraftforge.common.util.ForgeDirection; + +/** + * + * @author Stan + */ +public class MCDirection { + private MCDirection() {} + + public static BlockSide fromForge(ForgeDirection direction) { + switch (direction) { + case UP: + return BlockSide.TOP; + case DOWN: + return BlockSide.BOTTOM; + case NORTH: + return BlockSide.NORTH; + case EAST: + return BlockSide.EAST; + case SOUTH: + return BlockSide.SOUTH; + case WEST: + return BlockSide.WEST; + default: + throw new AssertionError("Invalid value"); + } + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCWorld.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCWorld.java new file mode 100644 index 00000000..e6c1d455 --- /dev/null +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MCWorld.java @@ -0,0 +1,37 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.api.minecraft; + +import java.util.HashMap; +import minetweaker.api.world.IDimension; +import minetweaker.mc1710.world.MCDimension; +import net.minecraft.world.World; + +/** + * + * @author Stan + */ +public class MCWorld { + private MCWorld() {} + + private static final HashMap dimensions = new HashMap(); + + public static IDimension getDimension(World world) { + if (!dimensions.containsKey(world)) { + dimensions.put(world, new MCDimension(world)); + } + + return dimensions.get(world); + } + + public static World getWorld(IDimension dimension) { + if (dimension instanceof MCDimension) { + return ((MCDimension) dimension).getWorld(); + } else { + return null; + } + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java index aa07573d..08770926 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java @@ -374,20 +374,6 @@ public static IBlock getBlock(Block block, int meta) { return new MCSpecificBlock(block, meta); } - /** - * Retrieves the block from an item stack. - * - * @param itemStack - * @return - */ - public static Block getBlock(IItemStack itemStack) { - return ((MCBlockDefinition) itemStack.asBlock().getDefinition()).getInternalBlock(); - } - - public static Block getBlock(IBlock block) { - return ((MCBlockDefinition) block.getDefinition()).getInternalBlock(); - } - /** * Retrieves the internal fluid stack of the given stack. * diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/FMLEventHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/FMLEventHandler.java index b75d937f..d86c56a0 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/FMLEventHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/FMLEventHandler.java @@ -2,7 +2,6 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; -import minetweaker.MineTweakerAPI; import minetweaker.MineTweakerImplementationAPI; import minetweaker.api.event.PlayerCraftedEvent; import minetweaker.api.event.PlayerLoggedInEvent; @@ -24,7 +23,7 @@ public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent ev) { if (ev.player instanceof EntityPlayerMP) { EntityPlayerMP player = (EntityPlayerMP) ev.player; MineTweakerMod.NETWORK.sendTo( - new MineTweakerLoadScriptsPacket(MineTweakerAPI.tweaker.getScriptData()), + new MineTweakerLoadScriptsPacket(MineTweakerImplementationAPI.getTweaker().getScriptData()), player); } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCBlockDefinition.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCBlockDefinition.java index fcd2d26f..321f366d 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCBlockDefinition.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCBlockDefinition.java @@ -33,4 +33,9 @@ public String getId() { public String getDisplayName() { return block.getLocalizedName(); } + + @Override + public String getUnlocalizedName() { + return block.getUnlocalizedName(); + } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCWorldBlock.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCWorldBlock.java index 09cac4d9..ab3e430a 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCWorldBlock.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/block/MCWorldBlock.java @@ -8,18 +8,34 @@ import java.util.Collections; import java.util.List; +import minetweaker.api.block.BlockCollision; import minetweaker.api.block.BlockPatternOr; +import minetweaker.api.block.BlockSide; import minetweaker.api.block.IBlock; import minetweaker.api.block.IBlockDefinition; import minetweaker.api.block.IBlockPattern; +import minetweaker.api.block.IExplosion; import minetweaker.api.data.IData; +import minetweaker.api.entity.IEntity; +import minetweaker.api.minecraft.MCWorld; import minetweaker.api.minecraft.MineTweakerMC; +import minetweaker.api.player.IPlayer; +import minetweaker.api.render.IRenderer; +import minetweaker.api.math.Ray; +import minetweaker.api.world.IBlockGroup; +import minetweaker.api.world.IDimension; +import minetweaker.mc1710.entity.MCEntity; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; /** @@ -31,12 +47,14 @@ public class MCWorldBlock implements IBlock { private final int x; private final int y; private final int z; + private final Block block; public MCWorldBlock(IBlockAccess blocks, int x, int y, int z) { this.blocks = blocks; this.x = x; this.y = y; this.z = z; + block = blocks.getBlock(x, y, z); } @Override @@ -88,4 +106,86 @@ public boolean matches(IBlock block) { public IBlockPattern or(IBlockPattern pattern) { return new BlockPatternOr(this, pattern); } + + @Override + public boolean isAir() { + return block.isAir(blocks, x, y, z); + } + + @Override + public boolean isNormalCube() { + return block.isNormalCube(blocks, x, y, z); + } + + @Override + public int getBlockLight() { + return block.getLightValue(blocks, x, y, z); + } + + @Override + public float getBlastResistance(IBlockGroup blocks, int x, int y, int z, IExplosion explosion) { + IDimension dimension = blocks.getDimension(); + Entity mcEntity = MCEntity.getEntity(explosion.getEntity()); + + if (dimension == blocks) { + World mcWorld = MCWorld.getWorld(dimension); + + return block.getExplosionResistance(mcEntity, mcWorld, x, y, z, explosion.getX(), explosion.getY(), explosion.getZ()); + } else { + return block.getExplosionResistance(mcEntity); + } + } + + @Override + public float getHardness(IBlockGroup blocks, int x, int y, int z, IPlayer player) { + IDimension dimension = blocks.getDimension(); + if (dimension == blocks) { + World mcWorld = MCWorld.getWorld(dimension); + return block.getBlockHardness(mcWorld, x, y, z); + } else { + return block.getBlockHardness(Minecraft.getMinecraft().theWorld, 0, 0, 0); + } + } + + @Override + public void renderWorld(IBlockGroup blocks, int x, int y, int z, IRenderer renderer) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public void renderInventory(IRenderer renderer) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public BlockCollision collisionRayTrace(IBlockGroup blocks, int x, int y, int z, Ray ray) { + Vec3 v1 = Vec3.createVectorHelper(ray.getStartX(), ray.getStartY(), ray.getStartZ()); + Vec3 v2 = Vec3.createVectorHelper(ray.getX(1), ray.getY(1), ray.getZ(1)); + + IDimension dimension = blocks.getDimension(); + if (dimension == blocks) { + MovingObjectPosition result = block.collisionRayTrace(MCWorld.getWorld(dimension), x, y, z, v1, v2); + IEntity entity = MCEntity.valueOf(result.entityHit); + + IBlock block = blocks.getBlock(result.blockX, result.blockY, result.blockZ); + BlockSide blockSide = result.sideHit >= 0 && result.sideHit < 6 ? sides[result.sideHit] : null; + + double hitx = result.hitVec.xCoord; + double hity = result.hitVec.yCoord; + double hitz = result.hitVec.zCoord; + double distance = ray.nearestDistance(hitx, hity, hitz); + return new BlockCollision(distance, hitx, hity, hitz, block, blockSide, entity); + } else { + return null; + } + } + + private final BlockSide[] sides = { + BlockSide.BOTTOM, + BlockSide.TOP, + BlockSide.EAST, + BlockSide.WEST, + BlockSide.NORTH, + BlockSide.SOUTH + }; } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java index 84c05cf5..3ebffaab 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/ItemBracketHandler.java @@ -11,23 +11,24 @@ import java.util.Map; import java.util.Set; import minetweaker.IBracketHandler; -import minetweaker.MineTweakerAPI; import minetweaker.annotations.BracketHandler; import minetweaker.api.item.IItemStack; import minetweaker.api.item.IngredientAny; import static minetweaker.api.minecraft.MineTweakerMC.getIItemStackWildcardSize; +import minetweaker.runtime.symbol.SymbolUtil; import net.minecraft.item.Item; import net.minecraftforge.oredict.OreDictionary; -import zenscript.lexer.ZenTokener; import stanhebben.zenscript.compiler.IScopeGlobal; -import stanhebben.zenscript.expression.ExpressionInt; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionCallStatic; +import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import zenscript.runtime.IAny; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; /** @@ -56,18 +57,19 @@ public static IItemStack getItem(String name, int meta) { } private final IZenSymbol symbolAny; - private final IJavaMethod method; + private final IMethod method; - public ItemBracketHandler() { - symbolAny = MineTweakerAPI.getJavaStaticFieldSymbol(IngredientAny.class, "INSTANCE"); - method = MineTweakerAPI.getJavaMethod( + public ItemBracketHandler(IScopeGlobal scope) { + symbolAny = SymbolUtil.getZenStaticField(scope, IngredientAny.class, "INSTANCE"); + method = SymbolUtil.getZenStaticMethod( + scope, ItemBracketHandler.class, "getItem", String.class, int.class); } @Override - public IZenSymbol resolve(IScopeGlobal environment, List tokens) { + public IZenSymbol resolve(List tokens) { // any symbol if (tokens.size() == 1 && tokens.get(0).getValue().equals("*")) { return symbolAny; @@ -96,10 +98,15 @@ public IZenSymbol resolve(IScopeGlobal environment, List tokens) { } } - return find(environment, tokens, fromIndex, toIndex, meta); + return find(tokens, fromIndex, toIndex, meta); } - private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex, int meta) { + @Override + public IAny eval(List tokens) { + return null; + } + + private IZenSymbol find(List tokens, int startIndex, int endIndex, int meta) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -107,32 +114,26 @@ private IZenSymbol find(IScopeGlobal environment, List tokens, int startI } String itemName = valueBuilder.toString(); - if (itemNames.containsKey(itemName)) { - return new ItemReferenceSymbol(environment, itemName, meta); - } - - return null; + return new ItemReferenceSymbol(itemName, meta); } private class ItemReferenceSymbol implements IZenSymbol { - private final IScopeGlobal environment; private final String name; private final int meta; - public ItemReferenceSymbol(IScopeGlobal environment, String name, int meta) { - this.environment = environment; + public ItemReferenceSymbol(String name, int meta) { this.name = name; this.meta = meta; } @Override - public IPartialExpression instance(ZenPosition position) { + public IPartialExpression instance(ZenPosition position, IScopeMethod scope) { return new ExpressionCallStatic( position, - environment, + scope, method, - new ExpressionString(position, name), - new ExpressionInt(position, meta, ZenType.INT)); + new ExpressionString(position, scope, name), + new ExpressionInt(position, scope, meta, scope.getTypes().INT)); } } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java index 43436b71..8584cf5e 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/LiquidBracketHandler.java @@ -5,18 +5,19 @@ import minetweaker.annotations.BracketHandler; import minetweaker.mc1710.liquid.MCLiquidStack; import minetweaker.api.liquid.ILiquidStack; -import minetweaker.runtime.GlobalRegistry; +import minetweaker.runtime.symbol.SymbolUtil; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.runtime.IAny; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; /** @@ -33,19 +34,30 @@ public static ILiquidStack getLiquid(String name) { return null; } } + + private final IMethod method; + + public LiquidBracketHandler(IScopeGlobal scope) { + method = SymbolUtil.getZenStaticMethod(scope, LiquidBracketHandler.class, "getLiquid", String.class); + } @Override - public IZenSymbol resolve(IScopeGlobal environment, List tokens) { + public IZenSymbol resolve(List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("liquid") && tokens.get(1).getValue().equals(":")) { - return find(environment, tokens, 2, tokens.size()); + return find(tokens, 2, tokens.size()); } } return null; } - private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { + @Override + public IAny eval(List tokens) { + return null; + } + + private IZenSymbol find(List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); @@ -54,34 +66,26 @@ private IZenSymbol find(IScopeGlobal environment, List tokens, int startI Fluid fluid = FluidRegistry.getFluid(valueBuilder.toString()); if (fluid != null) { - return new LiquidReferenceSymbol(environment, valueBuilder.toString()); + return new LiquidReferenceSymbol(valueBuilder.toString()); } return null; } private class LiquidReferenceSymbol implements IZenSymbol { - private final IScopeGlobal environment; private final String name; - public LiquidReferenceSymbol(IScopeGlobal environment, String name) { - this.environment = environment; + public LiquidReferenceSymbol(String name) { this.name = name; } @Override - public IPartialExpression instance(ZenPosition position) { - IJavaMethod method = JavaMethod.get( - GlobalRegistry.getTypeRegistry(), - LiquidBracketHandler.class, - "getLiquid", - String.class); - + public IPartialExpression instance(ZenPosition position, IScopeMethod scope) { return new ExpressionCallStatic( position, - environment, + scope, method, - new ExpressionString(position, name)); + new ExpressionString(position, scope, name)); } } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java index a2e5d3ea..cacd893e 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/brackets/OreBracketHandler.java @@ -9,17 +9,18 @@ import java.util.List; import minetweaker.IBracketHandler; import minetweaker.annotations.BracketHandler; -import minetweaker.mc1710.oredict.MCOreDictEntry; import minetweaker.api.oredict.IOreDictEntry; -import minetweaker.runtime.GlobalRegistry; +import minetweaker.mc1710.oredict.MCOreDictEntry; +import minetweaker.runtime.symbol.SymbolUtil; import stanhebben.zenscript.compiler.IScopeGlobal; +import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; -import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.lexer.Token; +import zenscript.runtime.IAny; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; /** @@ -32,49 +33,52 @@ public static IOreDictEntry getOre(String name) { return new MCOreDictEntry(name); } + private final IMethod method; + + public OreBracketHandler(IScopeGlobal scope) { + method = SymbolUtil.getZenStaticMethod(scope, OreBracketHandler.class, "getOre", String.class); + } + @Override - public IZenSymbol resolve(IScopeGlobal environment, List tokens) { + public IZenSymbol resolve(List tokens) { if (tokens.size() > 2) { if (tokens.get(0).getValue().equals("ore") && tokens.get(1).getValue().equals(":")) { - return find(environment, tokens, 2, tokens.size()); + return find(tokens, 2, tokens.size()); } } return null; } - private IZenSymbol find(IScopeGlobal environment, List tokens, int startIndex, int endIndex) { + @Override + public IAny eval(List tokens) { + return null; + } + + private IZenSymbol find(List tokens, int startIndex, int endIndex) { StringBuilder valueBuilder = new StringBuilder(); for (int i = startIndex; i < endIndex; i++) { Token token = tokens.get(i); valueBuilder.append(token.getValue()); } - return new OreReferenceSymbol(environment, valueBuilder.toString()); + return new OreReferenceSymbol(valueBuilder.toString()); } private class OreReferenceSymbol implements IZenSymbol { - private final IScopeGlobal environment; private final String name; - public OreReferenceSymbol(IScopeGlobal environment, String name) { - this.environment = environment; + public OreReferenceSymbol(String name) { this.name = name; } @Override - public IPartialExpression instance(ZenPosition position) { - IJavaMethod method = JavaMethod.get( - GlobalRegistry.getTypeRegistry(), - OreBracketHandler.class, - "getOre", - String.class); - + public IPartialExpression instance(ZenPosition position, IScopeMethod scope) { return new ExpressionCallStatic( position, - environment, + scope, method, - new ExpressionString(position, name)); + new ExpressionString(position, scope, name)); } } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/entity/MCEntity.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/entity/MCEntity.java new file mode 100644 index 00000000..5ea4484a --- /dev/null +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/entity/MCEntity.java @@ -0,0 +1,66 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package minetweaker.mc1710.entity; + +import minetweaker.api.entity.IEntity; +import minetweaker.api.math.Vector3d; +import minetweaker.api.minecraft.MCWorld; +import minetweaker.api.world.IDimension; +import net.minecraft.entity.Entity; + +/** + * + * @author Stan + */ +public class MCEntity implements IEntity { + public static MCEntity valueOf(Entity entity) { + return entity == null ? null : new MCEntity(entity); + } + + public static Entity getEntity(IEntity entity) { + if (entity instanceof MCEntity) { + return ((MCEntity) entity).entity; + } else { + return null; + } + } + + private final Entity entity; + + private MCEntity(Entity entity) { + this.entity = entity; + } + + @Override + public IDimension getDimension() { + return MCWorld.getDimension(entity.worldObj); + } + + @Override + public double getX() { + return entity.posX; + } + + @Override + public double getY() { + return entity.posY; + } + + @Override + public double getZ() { + return entity.posZ; + } + + @Override + public Vector3d getPosition() { + return new Vector3d(entity.posX, entity.posY, entity.posZ); + } + + @Override + public void setPosition(Vector3d position) { + entity.setPosition(position.getX(), position.getY(), position.getZ()); + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/world/MCDimension.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/world/MCDimension.java index c83d25fb..ccdde90c 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/world/MCDimension.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/world/MCDimension.java @@ -7,6 +7,7 @@ package minetweaker.mc1710.world; import minetweaker.api.block.IBlock; +import minetweaker.api.minecraft.MCBlock; import minetweaker.api.minecraft.MineTweakerMC; import minetweaker.api.world.IDimension; import net.minecraft.world.World; @@ -21,6 +22,10 @@ public class MCDimension implements IDimension { public MCDimension(World world) { this.world = world; } + + public World getWorld() { + return world; + } @Override public boolean isDay() { @@ -41,4 +46,13 @@ public IDimension getDimension() { public IBlock getBlock(int x, int y, int z) { return MineTweakerMC.getBlock(world, x, y, z); } + + @Override + public void setBlock(int x, int y, int z, IBlock block, boolean render) { + world.setBlock(x, y, z, MCBlock.getBlock(block), block.getMeta(), render ? 2 : 6); + + if (block.getTileData() != null) { + world.setTileEntity(x, y, z, MCBlock.getTileEntity(block)); + } + } } diff --git a/MineTweaker3-Web/download.php b/MineTweaker3-Web/download.php new file mode 100644 index 00000000..e69de29b diff --git a/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java b/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java index d3f071b2..38000420 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/IZenCompileEnvironment.java @@ -11,22 +11,74 @@ import stanhebben.zenscript.compiler.IScopeGlobal; import zenscript.lexer.Token; import stanhebben.zenscript.symbols.IZenSymbol; -import zenscript.symbolic.TypeRegistry; +import zenscript.runtime.IAny; /** - * - * @author Stanneke + * The compile environment is supplied by the running instance to provide an + * interface between the compiler and the environment. The compile environment + * is only used during compilation, not during execution. + * + * @author Stan Hebben */ public interface IZenCompileEnvironment { + /** + * Gets the error logger used to report warnings and errors. + * + * @return error logger + */ public IZenErrorLogger getErrorLogger(); + /** + * Gets a global symbol. Should return null if the symbol doesn't exist. + * + * @param name global symbol name + * @return symbol + */ public IZenSymbol getGlobal(String name); + /** + * Gets a dollar symbol. Should return null if the symbol doesn't exist. + * + * @param name variable name + * @return symbol + */ public IZenSymbol getDollar(String name); + /** + * Evaluates the bracketed value. Should return null if it can't be evaluated. + * Return a symbol that evaluates to the null value if you intend to return + * null. + * + * @param environment + * @param tokens + * @return + */ public IZenSymbol getBracketed(IScopeGlobal environment, List tokens); - public TypeRegistry getTypes(); + /** + * Evaluates a global value. Should return null if it can't be evaluated + * compiled. Return AnyNull.INSTANCE if you intend to return null. + * + * @param name global variable name + * @return evaluated value + */ + public IAny evalGlobal(String name); - public TypeExpansion getExpansion(String type); + /** + * Evaluates the dollar value. Should return null if it can't be evaluated + * compiled. Return AnyNull.INSTANCE if you intend to return null. + * + * @param name dollar variable name + * @return evaluated value + */ + public IAny evalDollar(String name); + + /** + * Evaluates the bracketed value. Should return null if it can't be evaluated + * and AnyNull.INSTANCE if you intend to return null. + * + * @param tokens + * @return + */ + public IAny evalBracketed(List tokens); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java b/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java index f69d9c07..0aec8a16 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/TypeExpansion.java @@ -24,7 +24,7 @@ import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.expand.ZenExpandCaster; import stanhebben.zenscript.type.expand.ZenExpandMember; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.type.natives.ZenNativeOperator; import stanhebben.zenscript.util.MethodOutput; import zenscript.symbolic.TypeRegistry; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java index 6bdc316b..0f8a4020 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/EnvironmentGlobal.java @@ -10,7 +10,6 @@ import java.util.Map; import java.util.Set; import zenscript.IZenErrorLogger; -import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; @@ -37,7 +36,7 @@ public EnvironmentGlobal( this.errors = environment.getErrorLogger(); this.classes = classes; this.nameGen = nameGen; - this.types = environment.getTypes(); + this.types = new TypeRegistry(this); this.local = new HashMap(); } @@ -64,11 +63,6 @@ public void putClass(String name, byte[] data) { public String makeClassName() { return nameGen.generate(); } - - @Override - public TypeExpansion getExpansion(String type) { - return environment.getExpansion(type); - } @Override public void error(ZenPosition position, String message) { diff --git a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java index ab8e4638..c275961c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/compiler/IScopeGlobal.java @@ -8,7 +8,6 @@ import java.util.Set; import zenscript.IZenErrorLogger; -import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.symbols.IZenSymbol; @@ -24,8 +23,6 @@ public interface IScopeGlobal extends IZenErrorLogger { public IZenCompileEnvironment getEnvironment(); - public TypeExpansion getExpansion(String name); - public String makeClassName(); public boolean containsClass(String name); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java index 31fc03f4..0e1891f8 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/Expression.java @@ -7,7 +7,7 @@ import zenscript.parser.expression.ParsedExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; import zenscript.symbolic.type.casting.ICastingRule; import zenscript.util.ZenPosition; @@ -109,7 +109,7 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return getType().getMethods(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java index 939d556f..d4868db7 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallStatic.java @@ -8,7 +8,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -17,13 +17,13 @@ * @author Stanneke */ public class ExpressionCallStatic extends Expression { - private final IJavaMethod method; + private final IMethod method; private final Expression[] arguments; public ExpressionCallStatic( ZenPosition position, IScopeMethod environment, - IJavaMethod method, + IMethod method, Expression... arguments) { super(position, environment); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java index 8f42c3ae..63220233 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionCallVirtual.java @@ -8,7 +8,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -17,7 +17,7 @@ * @author Stanneke */ public class ExpressionCallVirtual extends Expression { - private final IJavaMethod method; + private final IMethod method; private final Expression receiver; private final Expression[] arguments; @@ -25,7 +25,7 @@ public class ExpressionCallVirtual extends Expression { public ExpressionCallVirtual( ZenPosition position, IScopeMethod environment, - IJavaMethod method, + IMethod method, Expression receiver, Expression... arguments) { super(position, environment); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java index 9da22b3e..3e655bcb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionFunction.java @@ -12,7 +12,7 @@ import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; import stanhebben.zenscript.type.ZenTypeNative; -import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.symbolic.method.MethodArgument; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -24,7 +24,7 @@ public class ExpressionFunction extends Expression { private final ZenTypeFunction functionType; private final List statements; - public ExpressionFunction(ZenPosition position, IScopeMethod environment, List arguments, ZenType returnType, List statements) { + public ExpressionFunction(ZenPosition position, IScopeMethod environment, List arguments, ZenType returnType, List statements) { super(position, environment); System.out.println("Function expression: " + arguments.size() + " arguments"); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java index aed7e770..1c0d0218 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionInt.java @@ -9,6 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; +import zenscript.runtime.IAny; import zenscript.symbolic.TypeRegistry; import zenscript.util.ZenPosition; @@ -32,13 +33,13 @@ public Expression cast(ZenPosition position, ZenType type) { if (type == this.type) return this; switch (type.getNumberType()) { - case ZenType.NUM_BYTE: - case ZenType.NUM_SHORT: - case ZenType.NUM_INT: - case ZenType.NUM_LONG: + case IAny.NUM_BYTE: + case IAny.NUM_SHORT: + case IAny.NUM_INT: + case IAny.NUM_LONG: return new ExpressionInt(getPosition(), getEnvironment(), value, type); - case ZenType.NUM_FLOAT: - case ZenType.NUM_DOUBLE: + case IAny.NUM_FLOAT: + case IAny.NUM_DOUBLE: return new ExpressionFloat(getPosition(), getEnvironment(), value, type); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java index d5da51d0..09c0f2ed 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaLambda.java @@ -36,11 +36,12 @@ public class ExpressionJavaLambda extends Expression { public ExpressionJavaLambda( ZenPosition position, + IScopeMethod scope, Class interfaceClass, List arguments, List statements, ZenType type) { - super(position); + super(position, scope); this.interfaceClass = interfaceClass; this.arguments = arguments; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java index 3c6ba27c..fba917c5 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java @@ -13,7 +13,7 @@ import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import zenscript.util.ZenPosition; /** diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java index f4773e69..897b2a37 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodStatic.java @@ -13,7 +13,7 @@ import zenscript.parser.elements.ParsedFunctionArgument; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeFunction; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import zenscript.util.ZenPosition; /** diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaStaticField.java similarity index 85% rename from ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java rename to ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaStaticField.java index ad7aff11..5856f756 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/ExpressionJavaStaticField.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaStaticField.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.expression.partial; +package stanhebben.zenscript.expression; import java.lang.reflect.Field; import stanhebben.zenscript.compiler.IScopeMethod; @@ -19,14 +19,12 @@ * @author Stan */ public class ExpressionJavaStaticField extends Expression { - private final Class cls; private final Field field; private final ZenType type; - public ExpressionJavaStaticField(ZenPosition position, IScopeMethod environment, Class cls, Field field) { + public ExpressionJavaStaticField(ZenPosition position, IScopeMethod environment, Field field) { super(position, environment); - this.cls = cls; this.field = field; type = environment.getTypes().getNativeType(position, field.getGenericType(), TypeCapture.EMPTY); } @@ -39,7 +37,7 @@ public ZenType getType() { @Override public void compile(boolean result, MethodOutput output) { if (result) { - output.getStaticField(cls, field); + output.getStaticField(field.getDeclaringClass(), field); } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java index cc8a6802..5e0fc9b1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionNew.java @@ -8,7 +8,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -18,10 +18,10 @@ */ public class ExpressionNew extends Expression { private final ZenType type; - private final IJavaMethod constructor; + private final IMethod constructor; private final Expression[] arguments; - public ExpressionNew(ZenPosition position, IScopeMethod environment, ZenType type, IJavaMethod constructor, Expression[] arguments) { + public ExpressionNew(ZenPosition position, IScopeMethod environment, ZenType type, IMethod constructor, Expression[] arguments) { super(position, environment); this.type = type; diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java index e2c74524..1ea66078 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/IPartialExpression.java @@ -10,7 +10,7 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; @@ -25,7 +25,7 @@ public interface IPartialExpression { public IPartialExpression getMember(ZenPosition position, String name); - public List getMethods(); + public List getMethods(); public IZenSymbol toSymbol(); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java index 46c564e1..69fd1097 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialLocal.java @@ -15,7 +15,7 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; @@ -81,7 +81,7 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return variable.getType().getMethods(); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java index ca13fef5..ede7a8ed 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialPackage.java @@ -14,7 +14,8 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolPackage; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; /** @@ -83,7 +84,12 @@ public ZenType toType(List types) { } @Override - public List getMethods() { + public List getMethods() { return Collections.EMPTY_LIST; } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return this; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java index 4730ebb2..d6e5401b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticGetter.java @@ -14,7 +14,8 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolJavaStaticGetter; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; /** @@ -24,9 +25,9 @@ public class PartialStaticGetter implements IPartialExpression { private final ZenPosition position; private final IScopeMethod environment; - private final IJavaMethod method; + private final IMethod method; - public PartialStaticGetter(ZenPosition position, IScopeMethod environment, IJavaMethod method) { + public PartialStaticGetter(ZenPosition position, IScopeMethod environment, IMethod method) { this.position = position; this.environment = environment; this.method = method; @@ -76,7 +77,12 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return method.getReturnType().getMethods(); } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return this; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java index 1d3434a1..268e5371 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialStaticMethod.java @@ -14,7 +14,8 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolJavaStaticMethod; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; /** @@ -24,9 +25,9 @@ public class PartialStaticMethod implements IPartialExpression { private final ZenPosition position; private final IScopeMethod environment; - private final IJavaMethod method; + private final IMethod method; - public PartialStaticMethod(ZenPosition position, IScopeMethod environment, IJavaMethod method) { + public PartialStaticMethod(ZenPosition position, IScopeMethod environment, IMethod method) { this.position = position; this.environment = environment; this.method = method; @@ -82,7 +83,12 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return Collections.singletonList(method); } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return this; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java index d8553ee5..1b80321d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/expression/partial/PartialType.java @@ -14,7 +14,8 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolType; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; /** @@ -76,7 +77,12 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return Collections.EMPTY_LIST; } + + @Override + public IPartialExpression via(SymbolicFunction function) { + return this; + } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java index 987d8077..d03a1a9a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/statements/StatementSwitch.java @@ -7,12 +7,11 @@ package stanhebben.zenscript.statements; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.objectweb.asm.Label; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -23,7 +22,7 @@ public class StatementSwitch extends Statement { private final Expression value; private final List contents = new ArrayList(); - private final List caseValues = new ArrayList(); + private final List caseValues = new ArrayList(); private final List caseLabels = new ArrayList(); private int defaultLabel = -1; @@ -33,7 +32,11 @@ public StatementSwitch(ZenPosition position, IScopeMethod scope, Expression valu this.value = value; } - public void onCase(ZenPosition position, int value) { + public ZenType getType() { + return value.getType(); + } + + public void onCase(ZenPosition position, Expression value) { if (caseValues.contains(value)) { getScope().error(position, "this value already has a case assigned"); } else { @@ -57,7 +60,9 @@ public void onStatement(Statement statement) { @Override public void compile(MethodOutput output) { Label lblBreak = new Label(); - // TODO + + + // TODO - need precompilation step for the switch values blabla } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java index 8fbe6d13..a0b4408b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticField.java @@ -8,7 +8,7 @@ import java.lang.reflect.Field; import stanhebben.zenscript.compiler.IScopeMethod; -import stanhebben.zenscript.expression.partial.ExpressionJavaStaticField; +import stanhebben.zenscript.expression.ExpressionJavaStaticField; import stanhebben.zenscript.expression.partial.IPartialExpression; import zenscript.util.ZenPosition; @@ -17,16 +17,14 @@ * @author Stan */ public class SymbolJavaStaticField implements IZenSymbol { - private final Class cls; private final Field field; - public SymbolJavaStaticField(Class cls, Field field) { - this.cls = cls; + public SymbolJavaStaticField(Field field) { this.field = field; } @Override public IPartialExpression instance(ZenPosition position, IScopeMethod environment) { - return new ExpressionJavaStaticField(position, environment, cls, field); + return new ExpressionJavaStaticField(position, environment, field); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java index f3748243..d659a536 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticGetter.java @@ -9,7 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialStaticGetter; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; /** @@ -17,9 +17,9 @@ * @author Stanneke */ public class SymbolJavaStaticGetter implements IZenSymbol { - private final IJavaMethod method; + private final IMethod method; - public SymbolJavaStaticGetter(IJavaMethod method) { + public SymbolJavaStaticGetter(IMethod method) { this.method = method; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java index f4155fbf..8b6e5423 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/symbols/SymbolJavaStaticMethod.java @@ -9,7 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.expression.partial.PartialStaticMethod; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; /** @@ -17,9 +17,9 @@ * @author Stanneke */ public class SymbolJavaStaticMethod implements IZenSymbol { - private final IJavaMethod method; + private final IMethod method; - public SymbolJavaStaticMethod(IJavaMethod method) { + public SymbolJavaStaticMethod(IMethod method) { this.method = method; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java index 746f4b9d..77ecec54 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenType.java @@ -16,18 +16,10 @@ import zenscript.symbolic.type.casting.ICastingRule; import zenscript.symbolic.type.casting.ICastingRuleDelegate; import stanhebben.zenscript.type.expand.ZenExpandCaster; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.IMethod; import zenscript.util.ZenPosition; public abstract class ZenType { - public static final int NUM_BYTE = 1; - public static final int NUM_SHORT = 2; - public static final int NUM_INT = 3; - public static final int NUM_LONG = 4; - public static final int NUM_FLOAT = 5; - public static final int NUM_DOUBLE = 6; - private final IScopeGlobal environment; private Map castingRules = null; @@ -122,15 +114,15 @@ public boolean isLarge() { public abstract ZenType nonNull(); - public List getMethods() { + public List getMethods() { return Collections.EMPTY_LIST; } - public List getConstructors() { + public List getConstructors() { return Collections.EMPTY_LIST; } - public IJavaMethod getFunction() { + public IMethod getFunction() { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java index ac70aea0..b74302d4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeAny.java @@ -15,8 +15,8 @@ import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.type.natives.JavaMethodPrefixed; import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.signature; @@ -35,7 +35,7 @@ * @author Stanneke */ public class ZenTypeAny extends ZenType { - private List methods = null; + private List methods = null; public ZenTypeAny(IScopeGlobal environment) { super(environment); @@ -254,7 +254,7 @@ public ZenType nonNull() { } @Override - public List getMethods() { + public List getMethods() { if (methods == null) methods = Collections.singletonList(JavaMethod.get(getEnvironment().getTypes(), IAny.class, "call", IAny.class, IAny[].class)); @@ -266,14 +266,14 @@ private class AnyMember implements IPartialExpression { private final IScopeMethod environment; private final Expression value; private final String name; - private final List methods; + private final List methods; public AnyMember(ZenPosition position, IScopeMethod environment, Expression value, String name) { this.position = position; this.environment = environment; this.value = value; this.name = name; - methods = Collections.singletonList(new JavaMethodPrefixed( + methods = Collections.singletonList(new JavaMethodPrefixed( new ExpressionString(position, environment, name), environment.getTypes().getCommonMethods().METHOD_MEMBERCALL)); } @@ -294,7 +294,7 @@ public IPartialExpression getMember(ZenPosition position, String name) { } @Override - public List getMethods() { + public List getMethods() { return methods; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java index a0bfdfd7..258badf1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBool.java @@ -16,7 +16,7 @@ import stanhebben.zenscript.expression.ExpressionBool; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -41,7 +41,7 @@ public ZenTypeBool(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } @@ -259,7 +259,7 @@ public void defineStaticCanCastImplicit(MethodOutput output) { output.loadObject(0); output.ifACmpEq(lblCan); - TypeExpansion expansion = environment.getExpansion(getName()); + TypeExpansion expansion = environment.getTypes().getExpansion(getName()); if (expansion != null) { expansion.compileAnyCanCastImplicit(types.BOOL, output, environment, 0); } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java index 48972067..db0b4a0f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeBoolObject.java @@ -14,8 +14,7 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; @@ -74,8 +73,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return BOOL.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return BOOL.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java index 89a576eb..f74a4bd1 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByte.java @@ -5,8 +5,6 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import zenscript.annotations.CompareType; -import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; @@ -16,24 +14,26 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import static stanhebben.zenscript.type.ZenTypeAny.*; -import zenscript.symbolic.type.casting.CastingRuleI2D; -import zenscript.symbolic.type.casting.CastingRuleI2F; -import zenscript.symbolic.type.casting.CastingRuleI2L; -import zenscript.symbolic.type.casting.CastingRuleNone; -import zenscript.symbolic.type.casting.CastingRuleStaticMethod; -import zenscript.symbolic.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; -import zenscript.util.ZenPosition; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_BYTE; import zenscript.symbolic.TypeRegistry; +import zenscript.symbolic.type.casting.CastingRuleI2D; +import zenscript.symbolic.type.casting.CastingRuleI2F; +import zenscript.symbolic.type.casting.CastingRuleI2L; +import zenscript.symbolic.type.casting.CastingRuleNone; +import zenscript.symbolic.type.casting.CastingRuleStaticMethod; +import zenscript.symbolic.type.casting.ICastingRuleDelegate; import zenscript.symbolic.util.CommonMethods; +import zenscript.util.ZenPosition; public class ZenTypeByte extends ZenType { private static final String ANY_NAME = "any/AnyByte"; @@ -44,7 +44,7 @@ public ZenTypeByte(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java index 4fa69eec..ac892174 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeByteObject.java @@ -7,16 +7,16 @@ package stanhebben.zenscript.type; import org.objectweb.asm.Type; -import zenscript.annotations.CompareType; -import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; +import static zenscript.runtime.IAny.NUM_BYTE; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return BYTE.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return BYTE.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java index f0f5ebb2..238b9a92 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDouble.java @@ -5,8 +5,6 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import zenscript.annotations.CompareType; -import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; @@ -16,15 +14,19 @@ import stanhebben.zenscript.expression.ExpressionFloat; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; +import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; import stanhebben.zenscript.util.IAnyDefinition; import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_DOUBLE; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleD2F; import zenscript.symbolic.type.casting.CastingRuleD2I; @@ -45,7 +47,7 @@ public ZenTypeDouble(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java index dc47076f..1aa87acb 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeDoubleObject.java @@ -14,9 +14,9 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import static zenscript.runtime.IAny.NUM_DOUBLE; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentGlobal environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return DOUBLE.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return DOUBLE.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java index b9ba42ba..1c8e4e16 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloat.java @@ -5,8 +5,6 @@ import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import stanhebben.zenscript.TypeExpansion; -import zenscript.annotations.CompareType; -import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; @@ -16,7 +14,7 @@ import stanhebben.zenscript.expression.ExpressionFloat; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -24,7 +22,10 @@ import stanhebben.zenscript.util.MethodOutput; import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import zenscript.annotations.CompareType; +import zenscript.annotations.OperatorType; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_FLOAT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleF2D; import zenscript.symbolic.type.casting.CastingRuleF2I; @@ -45,7 +46,7 @@ public ZenTypeFloat(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java index 15aff4b9..9f650a9c 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFloatObject.java @@ -14,9 +14,9 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import static zenscript.runtime.IAny.NUM_FLOAT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return FLOAT.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return FLOAT.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java index 0a5a8e88..8436812a 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeFunction.java @@ -18,9 +18,8 @@ import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethodArgument; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.MethodArgument; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleMatchedFunction; import zenscript.symbolic.type.casting.ICastingRule; @@ -33,13 +32,13 @@ */ public class ZenTypeFunction extends ZenType { private final ZenType returnType; - private final List arguments; + private final List arguments; private final String name; private final Map implementedInterfaces = new HashMap(); private String className = null; - public ZenTypeFunction(IScopeGlobal environment, ZenType returnType, List arguments) { + public ZenTypeFunction(IScopeGlobal environment, ZenType returnType, List arguments) { super(environment); this.returnType = returnType; @@ -49,7 +48,7 @@ public ZenTypeFunction(IScopeGlobal environment, ZenType returnType, List getArguments() { + public List getArguments() { return arguments; } @@ -88,7 +87,7 @@ public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod env } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } @@ -106,13 +105,13 @@ public ICastingRule getCastingRule(ZenType type) { } TypeRegistry types = getEnvironment().getTypes(); - List methods = type.getMethods(); + List methods = type.getMethods(); if (methods.isEmpty()) { return null; } - for (IJavaMethod method : methods) { + for (IMethod method : methods) { ZenType methodReturnType = method.getReturnType(); ICastingRule returnCastingRule = null; if (!returnType.equals(methodReturnType)) { @@ -123,7 +122,7 @@ public ICastingRule getCastingRule(ZenType type) { } } - JavaMethodArgument[] methodArguments = method.getArguments(); + MethodArgument[] methodArguments = method.getArguments(); if (methodArguments.length < arguments.size()) { System.out.println("Argument count doesn't match"); return null; @@ -196,7 +195,7 @@ public Expression compare(ZenPosition position, IScopeMethod environment, Expres } @Override - public List getMethods() { + public List getMethods() { // TODO: implement the method return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java index 55181af0..8ae925ae 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeInt.java @@ -16,7 +16,7 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -25,6 +25,7 @@ import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_INT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleI2B; import zenscript.symbolic.type.casting.CastingRuleI2D; @@ -45,7 +46,7 @@ public ZenTypeInt(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java index e09b0309..08b2b626 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeIntObject.java @@ -14,9 +14,9 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import static zenscript.runtime.IAny.NUM_INT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return INT.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return INT.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java index 4de19149..c654bc5b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLong.java @@ -16,7 +16,7 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -25,6 +25,7 @@ import static stanhebben.zenscript.util.ZenTypeUtil.internal; import static stanhebben.zenscript.util.ZenTypeUtil.signature; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_LONG; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleI2B; import zenscript.symbolic.type.casting.CastingRuleI2D; @@ -47,7 +48,7 @@ public ZenTypeLong(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java index 95c8cbb8..1b71ce7d 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeLongObject.java @@ -14,9 +14,9 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; +import static zenscript.runtime.IAny.NUM_LONG; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return LONG.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return LONG.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java index e84972a0..66f0d263 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNative.java @@ -35,8 +35,8 @@ import stanhebben.zenscript.type.iterator.IteratorList; import stanhebben.zenscript.type.iterator.IteratorMap; import stanhebben.zenscript.type.iterator.IteratorMapKeys; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.type.natives.ZenNativeCaster; import stanhebben.zenscript.type.natives.ZenNativeMember; import stanhebben.zenscript.type.natives.ZenNativeOperator; @@ -98,7 +98,7 @@ public class ZenTypeNative extends ZenType { private Annotation iteratorAnnotation; private ZenType iteratorKeyType; private ZenType iteratorValueType; - private IJavaMethod functionalInterface; + private IMethod functionalInterface; public ZenTypeNative(IScopeGlobal environment, Class cls, TypeCapture capture) { super(environment); @@ -382,30 +382,30 @@ public IPartialExpression getStaticMember(ZenPosition position, IScopeMethod env } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { switch (iteratorType) { case ITERATOR_NONE: break; case ITERATOR_ITERABLE: if (numValues == 1) { - return new IteratorIterable(output, iteratorValueType); + return new IteratorIterable(iteratorValueType); } else if (numValues == 2) { - return new IteratorList(getEnvironment(), output, iteratorValueType); + return new IteratorList(getEnvironment(), iteratorValueType); } break; case ITERATOR_MAP: if (numValues == 1) { - return new IteratorMapKeys(output, new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); + return new IteratorMapKeys(new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); } else if (numValues == 2) { - return new IteratorMap(output, new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); + return new IteratorMap(new ZenTypeAssociative(getEnvironment(), iteratorValueType, iteratorKeyType)); } break; case ITERATOR_LIST: if (numValues == 1) { // list is also iterable - return new IteratorIterable(output, iteratorValueType); + return new IteratorIterable(iteratorValueType); } else if (numValues == 2) { - return new IteratorList(getEnvironment(), output, iteratorValueType); + return new IteratorList(getEnvironment(), iteratorValueType); } break; } @@ -538,8 +538,8 @@ public Expression compare(ZenPosition position, IScopeMethod environment, Expres } @Override - public List getMethods() { - IJavaMethod functionalInterface = getFunction(); + public List getMethods() { + IMethod functionalInterface = getFunction(); if (functionalInterface == null) { return Collections.EMPTY_LIST; @@ -549,7 +549,7 @@ public List getMethods() { } @Override - public IJavaMethod getFunction() { + public IMethod getFunction() { return functionalInterface; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java index f964e319..d95d1c6e 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeNull.java @@ -15,7 +15,6 @@ import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.util.MethodOutput; import zenscript.symbolic.type.casting.CastingRuleNone; import zenscript.symbolic.type.casting.ICastingRule; import zenscript.symbolic.type.casting.ICastingRuleDelegate; @@ -90,7 +89,7 @@ public Expression call( }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java index bdea8a81..19aacf5f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShort.java @@ -14,7 +14,7 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -25,6 +25,7 @@ import zenscript.annotations.CompareType; import zenscript.annotations.OperatorType; import zenscript.runtime.IAny; +import static zenscript.runtime.IAny.NUM_SHORT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleI2B; import zenscript.symbolic.type.casting.CastingRuleI2D; @@ -45,7 +46,7 @@ public ZenTypeShort(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java index ce1dff43..bfaeebea 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeShortObject.java @@ -12,11 +12,11 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; -import stanhebben.zenscript.util.MethodOutput; +import zenscript.symbolic.method.JavaMethod; import static stanhebben.zenscript.util.ZenTypeUtil.signature; import zenscript.annotations.CompareType; import zenscript.annotations.OperatorType; +import static zenscript.runtime.IAny.NUM_SHORT; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingRuleNullableStaticMethod; import zenscript.symbolic.type.casting.CastingRuleNullableVirtualMethod; @@ -74,8 +74,8 @@ public Expression call(ZenPosition position, IEnvironmentMethod environment, Exp }*/ @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { - return SHORT.makeIterator(numValues, output); + public IZenIterator makeIterator(int numValues) { + return SHORT.makeIterator(numValues); } @Override diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java index 30031452..2ed46188 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeString.java @@ -18,7 +18,7 @@ import stanhebben.zenscript.expression.ExpressionStringContains; import stanhebben.zenscript.expression.ExpressionStringIndex; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.JavaMethod; import stanhebben.zenscript.util.AnyClassWriter; import static stanhebben.zenscript.util.AnyClassWriter.throwCastException; import static stanhebben.zenscript.util.AnyClassWriter.throwUnsupportedException; @@ -47,7 +47,7 @@ public ZenTypeString(IScopeGlobal environment) { } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java index 3c4db8e7..cfc72fd4 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/ZenTypeVoid.java @@ -14,7 +14,6 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.util.MethodOutput; import zenscript.symbolic.type.casting.ICastingRuleDelegate; import zenscript.util.ZenPosition; @@ -47,7 +46,7 @@ public IPartialExpression getStaticMember( } @Override - public IZenIterator makeIterator(int numValues, MethodOutput output) { + public IZenIterator makeIterator(int numValues) { return null; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java index d9b01cdd..036dd29f 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandCaster.java @@ -13,7 +13,7 @@ import zenscript.symbolic.type.casting.CastingRuleDelegateStaticMethod; import zenscript.symbolic.type.casting.CastingRuleStaticMethod; import zenscript.symbolic.type.casting.ICastingRuleDelegate; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; import zenscript.util.ZenPosition; @@ -22,9 +22,9 @@ * @author Stanneke */ public class ZenExpandCaster { - private final IJavaMethod method; + private final IMethod method; - public ZenExpandCaster(IJavaMethod method) { + public ZenExpandCaster(IMethod method) { this.method = method; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java index 394fa0d9..ef4b3180 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/expand/ZenExpandMember.java @@ -16,7 +16,7 @@ import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.type.natives.JavaMethodExpanding; import zenscript.util.ZenPosition; @@ -27,10 +27,10 @@ public class ZenExpandMember { private final ZenType type; private final String name; - private IJavaMethod getter; - private IJavaMethod setter; - private final List staticMethods = new ArrayList(); - private final List virtualMethods = new ArrayList(); + private IMethod getter; + private IMethod setter; + private final List staticMethods = new ArrayList(); + private final List virtualMethods = new ArrayList(); public ZenExpandMember(ZenType type, String name) { this.type = type; @@ -45,7 +45,7 @@ public IPartialExpression instance(ZenPosition position, IScopeMethod environmen return new StaticGetValue(position, environment); } - public void setGetter(IJavaMethod getter) { + public void setGetter(IMethod getter) { if (this.getter != null) { throw new RuntimeException(type + "." + name + " already has a getter"); } else { @@ -53,7 +53,7 @@ public void setGetter(IJavaMethod getter) { } } - public void setSetter(IJavaMethod setter) { + public void setSetter(IMethod setter) { if (this.setter != null) { throw new RuntimeException(type + "." + name + " already has a setter"); } else { @@ -61,11 +61,11 @@ public void setSetter(IJavaMethod setter) { } } - public void addVirtualMethod(IJavaMethod method) { + public void addVirtualMethod(IMethod method) { virtualMethods.add(new JavaMethodExpanding(type, method)); } - public void addStaticMethod(IJavaMethod method) { + public void addStaticMethod(IMethod method) { staticMethods.add(method); } @@ -96,7 +96,7 @@ public IPartialExpression getMember(ZenPosition position, String name) { } @Override - public List getMethods() { + public List getMethods() { return virtualMethods; } @@ -142,7 +142,7 @@ public IPartialExpression getMember(ZenPosition position, String name) { } @Override - public List getMethods() { + public List getMethods() { return staticMethods; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java index 707840e6..a94fa2f3 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodExpanding.java @@ -6,6 +6,8 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.MethodArgument; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -17,18 +19,18 @@ * * @author Stan Hebben */ -public class JavaMethodExpanding implements IJavaMethod { +public class JavaMethodExpanding implements IMethod { private final ZenType addedType; - private final IJavaMethod baseMethod; - private final JavaMethodArgument[] arguments; + private final IMethod baseMethod; + private final MethodArgument[] arguments; - public JavaMethodExpanding(ZenType addedType, IJavaMethod baseMethod) { + public JavaMethodExpanding(ZenType addedType, IMethod baseMethod) { this.addedType = addedType; this.baseMethod = baseMethod; - arguments = new JavaMethodArgument[baseMethod.getArguments().length + 1]; + arguments = new MethodArgument[baseMethod.getArguments().length + 1]; System.arraycopy(baseMethod.getArguments(), 0, arguments, 1, baseMethod.getArguments().length); - arguments[0] = new JavaMethodArgument(null, addedType, null); + arguments[0] = new MethodArgument(null, addedType, null); } @Override @@ -71,7 +73,7 @@ public void invokeStatic(MethodOutput output, Expression[] arguments) { } @Override - public JavaMethodArgument[] getArguments() { + public MethodArgument[] getArguments() { return arguments; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java index 9d7fcc45..7d85e5d0 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodGenerated.java @@ -6,6 +6,8 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.MethodArgument; +import zenscript.symbolic.method.IMethod; import java.util.HashMap; import java.util.Map; import stanhebben.zenscript.expression.Expression; @@ -16,14 +18,14 @@ * * @author Stan */ -public class JavaMethodGenerated implements IJavaMethod { +public class JavaMethodGenerated implements IMethod { private final boolean isStatic; private final boolean isInterface; private final boolean isVarargs; private final String owner; private final String name; - private final JavaMethodArgument[] arguments; + private final MethodArgument[] arguments; private final Map argumentByName; private final boolean[] optional; private final ZenType returnType; @@ -37,7 +39,7 @@ public JavaMethodGenerated( String owner, String name, ZenType returnType, - JavaMethodArgument[] arguments, + MethodArgument[] arguments, boolean[] optional) { this.isStatic = isStatic; this.isInterface = isInterface; @@ -51,7 +53,7 @@ public JavaMethodGenerated( StringBuilder descriptorString = new StringBuilder(); descriptorString.append('('); - for (JavaMethodArgument argument : arguments) { + for (MethodArgument argument : arguments) { descriptorString.append(argument.getType().getSignature()); } descriptorString.append(')'); @@ -159,7 +161,7 @@ public ZenType getReturnType() { } @Override - public JavaMethodArgument[] getArguments() { + public MethodArgument[] getArguments() { return arguments; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java index 690c075b..f7ad2da3 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodPrefixed.java @@ -6,6 +6,8 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.MethodArgument; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.util.MethodOutput; @@ -17,18 +19,18 @@ * * @author Stan Hebben */ -public class JavaMethodPrefixed implements IJavaMethod { +public class JavaMethodPrefixed implements IMethod { private final Expression prefix; - private final IJavaMethod baseMethod; - private final JavaMethodArgument[] arguments; + private final IMethod baseMethod; + private final MethodArgument[] arguments; - public JavaMethodPrefixed(Expression prefix, IJavaMethod baseMethod) { + public JavaMethodPrefixed(Expression prefix, IMethod baseMethod) { this.prefix = prefix; this.baseMethod = baseMethod; - arguments = new JavaMethodArgument[baseMethod.getArguments().length + 1]; + arguments = new MethodArgument[baseMethod.getArguments().length + 1]; System.arraycopy(baseMethod.getArguments(), 0, arguments, 1, baseMethod.getArguments().length); - arguments[0] = new JavaMethodArgument(null, prefix.getType(), null); + arguments[0] = new MethodArgument(null, prefix.getType(), null); } @Override @@ -75,7 +77,7 @@ public void invokeStatic(MethodOutput output, Expression[] arguments) { } @Override - public JavaMethodArgument[] getArguments() { + public MethodArgument[] getArguments() { return arguments; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java index 2b8330c0..b11945dc 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeCaster.java @@ -6,6 +6,7 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.IMethod; import org.objectweb.asm.Label; import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.type.ZenType; @@ -16,9 +17,9 @@ * @author Stanneke */ public class ZenNativeCaster { - private final IJavaMethod method; + private final IMethod method; - public ZenNativeCaster(IJavaMethod method) { + public ZenNativeCaster(IMethod method) { this.method = method; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java index d433f768..fe575fd6 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeMember.java @@ -6,6 +6,8 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.JavaMethod; +import zenscript.symbolic.method.IMethod; import java.util.ArrayList; import java.util.List; import stanhebben.zenscript.compiler.IScopeMethod; @@ -22,19 +24,19 @@ * @author Stan */ public class ZenNativeMember { - private IJavaMethod getter; - private IJavaMethod setter; - private final List methods = new ArrayList(); + private IMethod getter; + private IMethod setter; + private final List methods = new ArrayList(); - public IJavaMethod getGetter() { + public IMethod getGetter() { return getter; } - public IJavaMethod getSetter() { + public IMethod getSetter() { return setter; } - public void setGetter(IJavaMethod getter) { + public void setGetter(IMethod getter) { if (this.getter == null) { this.getter = getter; } else { @@ -42,7 +44,7 @@ public void setGetter(IJavaMethod getter) { } } - public void setSetter(IJavaMethod setter) { + public void setSetter(IMethod setter) { if (this.setter == null) { this.setter = setter; } else { @@ -90,7 +92,7 @@ public IPartialExpression getMember(ZenPosition position, String name) { /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - IJavaMethod method = JavaMethod.select(false, methods, environment, values); + IMethod method = JavaMethod.select(false, methods, environment, values); if (method == null) { environment.error(position, methodMatchingError(methods, values)); return new ExpressionInvalid(position); @@ -121,7 +123,7 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return getter.getReturnType().getMethods(); } } @@ -152,7 +154,7 @@ public IPartialExpression getMember(ZenPosition position, String name) { /*@Override public Expression call(ZenPosition position, IEnvironmentMethod environment, Expression... values) { - IJavaMethod method = JavaMethod.select(true, methods, environment, values); + IMethod method = JavaMethod.select(true, methods, environment, values); if (method == null) { environment.error(position, methodMatchingError(methods, values)); return new ExpressionInvalid(position); @@ -183,7 +185,7 @@ public ZenType toType(List genericTypes) { } @Override - public List getMethods() { + public List getMethods() { return getter.getReturnType().getMethods(); } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java index 51629c62..f1998e12 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/type/natives/ZenNativeOperator.java @@ -6,6 +6,7 @@ package stanhebben.zenscript.type.natives; +import zenscript.symbolic.method.IMethod; import zenscript.annotations.OperatorType; /** @@ -14,9 +15,9 @@ */ public class ZenNativeOperator { private final OperatorType operator; - private final IJavaMethod method; + private final IMethod method; - public ZenNativeOperator(OperatorType operator, IJavaMethod method) { + public ZenNativeOperator(OperatorType operator, IMethod method) { this.operator = operator; this.method = method; } @@ -25,7 +26,7 @@ public OperatorType getOperator() { return operator; } - public IJavaMethod getMethod() { + public IMethod getMethod() { return method; } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java b/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java index 95ad5982..d78a42cc 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java +++ b/ZenScript/src/main/java/stanhebben/zenscript/util/ErrorUtil.java @@ -8,7 +8,7 @@ import java.util.List; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; /** * @@ -25,7 +25,7 @@ private ErrorUtil() {} * @param arguments calling arguments * @return return value */ - public static String methodMatchingError(List methods, Expression... arguments) { + public static String methodMatchingError(List methods, Expression... arguments) { if (methods.isEmpty()) { return "no method with that name available"; } else { diff --git a/ZenScript/src/main/java/zenscript/annotations/OperatorType.java b/ZenScript/src/main/java/zenscript/annotations/OperatorType.java index b5d9c1a1..97d026c4 100644 --- a/ZenScript/src/main/java/zenscript/annotations/OperatorType.java +++ b/ZenScript/src/main/java/zenscript/annotations/OperatorType.java @@ -15,6 +15,7 @@ public enum OperatorType { OR, AND, XOR, + INVERT, NEG, NOT, INDEXSET, diff --git a/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java b/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java index 7ababf16..6d5173d5 100644 --- a/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java +++ b/ZenScript/src/main/java/zenscript/lexer/ZenTokener.java @@ -109,6 +109,7 @@ public class ZenTokener extends TokenStream { public static final int T_THIS = 174; public static final int T_SUPER = 175; public static final int T_EXPAND = 176; + public static final int T_IMPLEMENTS = 177; public static final int T_PRIVATE = 180; public static final int T_PUBLIC = 181; @@ -267,6 +268,7 @@ public class ZenTokener extends TokenStream { KEYWORDS.put("super", T_SUPER); KEYWORDS.put("package", T_PACKAGE); KEYWORDS.put("expand", T_EXPAND); + KEYWORDS.put("implements", T_IMPLEMENTS); KEYWORDS.put("private", T_PRIVATE); KEYWORDS.put("public", T_PUBLIC); diff --git a/ZenScript/src/main/java/zenscript/parser/elements/IParsedGenericBound.java b/ZenScript/src/main/java/zenscript/parser/elements/IParsedGenericBound.java new file mode 100644 index 00000000..39d00657 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/IParsedGenericBound.java @@ -0,0 +1,15 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +/** + * + * @author Stan + */ +public interface IParsedGenericBound { + +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java index fa60f96e..3add22ed 100644 --- a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunction.java @@ -23,17 +23,17 @@ public class ParsedFunction { public static ParsedFunction parse(ZenTokener parser, IZenErrorLogger errorLogger) { parser.next(); + + List genericParameters = ParsedGenericParameters.parse(parser, errorLogger); Token tName = parser.required(ZenTokener.TOKEN_ID, "identifier expected"); - ParsedFunctionHeader header = ParsedFunctionHeader.parse(parser, errorLogger); + ParsedFunctionSignature header = ParsedFunctionSignature.parse(parser, errorLogger, genericParameters); parser.required(T_AOPEN, "{ expected"); ArrayList statements = new ArrayList(); - if (parser.optional(T_ACLOSE) == null) { - while (parser.optional(T_ACLOSE) == null) { - statements.add(ParsedStatement.parse(parser, errorLogger)); - } + while (parser.optional(T_ACLOSE) == null) { + statements.add(ParsedStatement.parse(parser, errorLogger)); } return new ParsedFunction(tName.getPosition(), tName.getValue(), header, statements); @@ -41,12 +41,12 @@ public static ParsedFunction parse(ZenTokener parser, IZenErrorLogger errorLogge private final ZenPosition position; private final String name; - private final ParsedFunctionHeader header; + private final ParsedFunctionSignature header; private final List statements; //private final String signature; - private ParsedFunction(ZenPosition position, String name, ParsedFunctionHeader header, List statements) { + private ParsedFunction(ZenPosition position, String name, ParsedFunctionSignature header, List statements) { this.position = position; this.name = name; this.header = header; @@ -74,7 +74,7 @@ public String getName() { return signature; }*/ - public ParsedFunctionHeader getHeader() { + public ParsedFunctionSignature getHeader() { return header; } diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionSignature.java similarity index 72% rename from ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java rename to ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionSignature.java index ba23df59..1ec6ea8b 100644 --- a/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionHeader.java +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedFunctionSignature.java @@ -1,9 +1,3 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - package zenscript.parser.elements; import java.util.ArrayList; @@ -11,7 +5,7 @@ import stanhebben.zenscript.compiler.IScopeGlobal; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.symbolic.method.MethodArgument; import zenscript.IZenErrorLogger; import zenscript.lexer.Token; import zenscript.lexer.ZenTokener; @@ -22,11 +16,14 @@ import zenscript.parser.type.TypeParser; /** - * - * @author Stan + * Contains a parsed function header. A function header is the combination of + * return type, argument types and names (and default values) as well as generic + * parameters, if any. + * + * @author Stan Hebben */ -public class ParsedFunctionHeader { - public static ParsedFunctionHeader parse(ZenTokener tokener, IZenErrorLogger errorLogger) { +public class ParsedFunctionSignature { + public static ParsedFunctionSignature parse(ZenTokener tokener, IZenErrorLogger errorLogger, List generics) { List arguments = new ArrayList(); boolean isVararg = false; @@ -66,14 +63,16 @@ public static ParsedFunctionHeader parse(ZenTokener tokener, IZenErrorLogger err returnType = TypeParser.parse(tokener, errorLogger); } - return new ParsedFunctionHeader(arguments, returnType, isVararg); + return new ParsedFunctionSignature(generics, arguments, returnType, isVararg); } + private final List generics; private final List arguments; private final IParsedType returnType; private final boolean isVararg; - public ParsedFunctionHeader(List arguments, IParsedType returnType, boolean isVararg) { + public ParsedFunctionSignature(List generics, List arguments, IParsedType returnType, boolean isVararg) { + this.generics = generics; this.arguments = arguments; this.returnType = returnType; this.isVararg = isVararg; @@ -91,8 +90,8 @@ public boolean isVararg() { return isVararg; } - public List getCompiledArguments(IScopeGlobal environment) { - List result = new ArrayList(); + public List getCompiledArguments(IScopeGlobal environment) { + List result = new ArrayList(); for (int i = 0; i < arguments.size(); i++) { ZenType type = arguments.get(i).getType().compile(environment); @@ -103,7 +102,7 @@ public List getCompiledArguments(IScopeGlobal environment) { } else { compiledDefaultValue = defaultValue.compile(environment.getTypes().getStaticGlobalEnvironment(), type).eval(); } - result.add(new JavaMethodArgument(arguments.get(i).getName(), type, compiledDefaultValue)); + result.add(new MethodArgument(arguments.get(i).getName(), type, compiledDefaultValue)); } return result; diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundConstructor.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundConstructor.java new file mode 100644 index 00000000..cfdad6f3 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundConstructor.java @@ -0,0 +1,19 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +/** + * + * @author Stan + */ +public class ParsedGenericBoundConstructor implements IParsedGenericBound { + private final ParsedFunctionSignature signature; + + public ParsedGenericBoundConstructor(ParsedFunctionSignature signature) { + this.signature = signature; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundImplements.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundImplements.java new file mode 100644 index 00000000..e7abb932 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericBoundImplements.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +import zenscript.parser.type.IParsedType; + +/** + * + * @author Stan + */ +public class ParsedGenericBoundImplements implements IParsedGenericBound { + private final IParsedType type; + + public ParsedGenericBoundImplements(IParsedType type) { + this.type = type; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameter.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameter.java new file mode 100644 index 00000000..ab4bdfcd --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameter.java @@ -0,0 +1,51 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +import java.util.ArrayList; +import java.util.List; +import zenscript.IZenErrorLogger; +import zenscript.lexer.Token; +import zenscript.lexer.ZenTokener; +import static zenscript.lexer.ZenTokener.TOKEN_ID; +import static zenscript.lexer.ZenTokener.T_IMPLEMENTS; +import static zenscript.lexer.ZenTokener.T_THIS; +import zenscript.parser.type.IParsedType; +import zenscript.parser.type.TypeParser; + +/** + * + * @author Stan + */ +public class ParsedGenericParameter { + public static ParsedGenericParameter parse(ZenTokener tokener, IZenErrorLogger errors) { + Token name = tokener.required(TOKEN_ID, "identifier expected"); + List bounds = new ArrayList(); + + while (true) { + if (tokener.optional(T_IMPLEMENTS) != null) { + IParsedType type = TypeParser.parse(tokener, errors); + bounds.add(new ParsedGenericBoundImplements(type)); + } else if (tokener.optional(T_THIS) != null) { + ParsedFunctionSignature signature = ParsedFunctionSignature.parse(tokener, errors, null); + bounds.add(new ParsedGenericBoundConstructor(signature)); + } else { + break; + } + } + + return new ParsedGenericParameter(name.getValue(), bounds); + } + + private final String name; + private final List bounds; + + public ParsedGenericParameter(String name, List bounds) { + this.name = name; + this.bounds = bounds; + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameters.java b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameters.java new file mode 100644 index 00000000..ee7ebaac --- /dev/null +++ b/ZenScript/src/main/java/zenscript/parser/elements/ParsedGenericParameters.java @@ -0,0 +1,38 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.parser.elements; + +import java.util.ArrayList; +import java.util.List; +import zenscript.IZenErrorLogger; +import zenscript.lexer.ZenTokener; + +/** + * + * @author Stan + */ +public class ParsedGenericParameters { + public static List parse(ZenTokener tokener, IZenErrorLogger errors) { + if (tokener.optional(ZenTokener.T_LT) != null) { + List parameters = new ArrayList(); + + if (tokener.optional(ZenTokener.T_GT) != null) { + do { + parameters.add(ParsedGenericParameter.parse(tokener, errors)); + + if (tokener.optional(ZenTokener.T_LT) != null) { + break; + } + } while (tokener.optional(ZenTokener.T_COMMA) != null); + } + + return parameters; + } else { + return null; + } + } +} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java index f973536d..75f57ba3 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArguments.java @@ -8,17 +8,19 @@ import java.util.ArrayList; import java.util.List; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArray; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArray; import stanhebben.zenscript.type.ZenTypeArrayBasic; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.MethodArgument; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; +import zenscript.runtime.IAny; /** * @@ -74,7 +76,7 @@ public ParsedCallArguments(List keys, List values) { numUnkeyedValues = numUnkeyed; } - public MatchedArguments compile(List methods, IScopeMethod environment) { + public MatchedArguments compile(List methods, IScopeMethod environment) { ZenType[] predictedTypes = predict(methods); // We now have the predicted types array and we can use it to compile @@ -87,7 +89,7 @@ public MatchedArguments compile(List methods, IScopeMethod environm // Now match the expression again to find the actual matching method // do the argument types match exactly? - for (IJavaMethod method : methods) { + for (IMethod method : methods) { Expression[] matched = match(method, environment, compiled, true); if (matched != null) { return new MatchedArguments(method, matched); @@ -95,7 +97,7 @@ public MatchedArguments compile(List methods, IScopeMethod environm } // do the argument types match after implicit conversion? - for (IJavaMethod method : methods) { + for (IMethod method : methods) { Expression[] matched = match(method, environment, compiled, false); if (matched != null) { return new MatchedArguments(method, matched); @@ -105,6 +107,24 @@ public MatchedArguments compile(List methods, IScopeMethod environm return null; } + public IAny[] compileValues(IZenCompileEnvironment environment) { + for (String key : keys) { + if (key != null) + return null; + } + + IAny[] results = new IAny[values.size()]; + for (int i = 0; i < results.length; i++) { + IAny value = values.get(i).eval(environment); + if (value == null) + return null; + + results[i] = value; + } + + return results; + } + // ####################### // ### Private methods ### // ####################### @@ -116,11 +136,11 @@ public MatchedArguments compile(List methods, IScopeMethod environm * @param methods method candidates * @return predicted types */ - private ZenType[] predict(List methods) { + private ZenType[] predict(List methods) { ZenType[] predictedTypes = new ZenType[values.size()]; boolean[] ambiguous = new boolean[values.size()]; - outer: for (IJavaMethod method : methods) { + outer: for (IMethod method : methods) { if (!method.accepts(values.size())) continue; @@ -129,7 +149,7 @@ private ZenType[] predict(List methods) { // - the number of arguments is acceptable // - named parameters are all available // - the omitted arguments are optional - JavaMethodArgument[] arguments = method.getArguments(); + MethodArgument[] arguments = method.getArguments(); boolean[] isUsed = new boolean[arguments.length - numUnkeyedValues]; for (int i = numUnkeyedValues; i < values.size(); i++) { @@ -188,10 +208,10 @@ private ZenType[] predict(List methods) { * @param exactly * @return */ - private Expression[] match(IJavaMethod method, IScopeMethod environment, Expression[] compiled, boolean exactly) { + private Expression[] match(IMethod method, IScopeMethod environment, Expression[] compiled, boolean exactly) { int numUnkeyed = numUnkeyedValues; - JavaMethodArgument[] arguments = method.getArguments(); + MethodArgument[] arguments = method.getArguments(); if (!method.isVarargs() && numUnkeyed > arguments.length) return null; @@ -307,7 +327,7 @@ private boolean matches(Expression expression, ZenType type, boolean exactly) { * @param fromIndex index in the expressions array to assemble from * @return array expression with vararg values */ - private Expression assembleVararg(JavaMethodArgument argument, IScopeMethod environment, Expression[] compiled, int fromIndex) { + private Expression assembleVararg(MethodArgument argument, IScopeMethod environment, Expression[] compiled, int fromIndex) { ZenType varargBaseType = ((ZenTypeArray) argument.getType()).getBaseType(); // combine varargs into an array expression @@ -326,10 +346,10 @@ private Expression assembleVararg(JavaMethodArgument argument, IScopeMethod envi } public class MatchedArguments { - public final IJavaMethod method; + public final IMethod method; public final Expression[] arguments; - public MatchedArguments(IJavaMethod method, Expression[] arguments) { + public MatchedArguments(IMethod method, Expression[] arguments) { this.method = method; this.arguments = arguments; } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java index 8966bce4..01e794a5 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpression.java @@ -8,6 +8,7 @@ import java.util.ArrayList; import java.util.List; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.CompareType; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; @@ -19,7 +20,7 @@ import zenscript.lexer.Token; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; -import zenscript.parser.elements.ParsedFunctionHeader; +import zenscript.parser.elements.ParsedFunctionSignature; import zenscript.parser.statement.ParsedStatement; import zenscript.parser.type.IParsedType; import zenscript.parser.type.TypeParser; @@ -253,6 +254,13 @@ private static ParsedExpression readUnaryExpression(ZenPosition position, ZenTok position, readUnaryExpression(parser.peek().getPosition(), parser, errorLogger), OperatorType.NEG); + + case T_TILDE: + parser.next(); + return new ParsedExpressionUnary( + position, + readUnaryExpression(parser.peek().getPosition(), parser, errorLogger), + OperatorType.INVERT); default: return readPostfixExpression(position, parser, errorLogger); @@ -350,7 +358,7 @@ private static ParsedExpression readPrimaryExpression(ZenPosition position, ZenT // function (argname, argname, ...) { ...contents... } tokener.next(); - ParsedFunctionHeader header = ParsedFunctionHeader.parse(tokener, errorLogger); + ParsedFunctionSignature header = ParsedFunctionSignature.parse(tokener, errorLogger, null); tokener.required(T_AOPEN, "{ expected"); @@ -404,7 +412,7 @@ private static ParsedExpression readPrimaryExpression(ZenPosition position, ZenT } } - return new ParsedExpressionMap(position, keys, values); + return new ParsedExpressionAssociative(position, keys, values); } } case T_NEW: { @@ -453,5 +461,5 @@ public Expression compileKey(IScopeMethod environment, ZenType predictedType) { return compile(environment, predictedType).eval(); } - public abstract IAny eval(); + public abstract IAny eval(IZenCompileEnvironment environment); } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java index e147228c..3404a3af 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAndAnd.java @@ -6,10 +6,12 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionAndAnd; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyBool; import zenscript.runtime.IAny; import zenscript.util.ZenPosition; @@ -38,10 +40,14 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp } @Override - public IAny eval() { - IAny leftValue = left.eval(); - if (leftValue == null) return null; + public IAny eval(IZenCompileEnvironment environment) { + IAny leftValue = left.eval(environment); + if (leftValue == null) + return null; + if (!leftValue.asBool()) - return new AnyBool(false); + return AnyBool.FALSE; + + return right.eval(environment); } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java index 1ef37195..caa1bc4f 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionArray.java @@ -7,6 +7,7 @@ package zenscript.parser.expression; import java.util.List; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionArray; @@ -15,6 +16,8 @@ import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeArray; import stanhebben.zenscript.type.ZenTypeArrayBasic; +import zenscript.runtime.AnyArray; +import zenscript.runtime.IAny; import zenscript.symbolic.type.casting.ICastingRule; import zenscript.util.ZenPosition; @@ -80,4 +83,16 @@ public Expression compileKey(IScopeMethod environment, ZenType predictedType) { return compile(environment, predictedType).eval(); } } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny[] values = new IAny[contents.size()]; + for (int i = 0; i < contents.size(); i++) { + values[i] = contents.get(i).eval(environment); + if (values[i] == null) + return null; + } + + return new AnyArray(values); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java index 7bc5aced..91bb2520 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssign.java @@ -6,9 +6,11 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -35,4 +37,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp right.compile(environment, cLeft.getType()).eval() ); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssociative.java similarity index 75% rename from ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java rename to ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssociative.java index d1ea5594..d70d0093 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMap.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionAssociative.java @@ -6,7 +6,10 @@ package zenscript.parser.expression; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionAs; @@ -14,6 +17,9 @@ import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; import stanhebben.zenscript.type.ZenTypeAssociative; +import zenscript.runtime.AnyAssociative; +import zenscript.runtime.AnyNull; +import zenscript.runtime.IAny; import zenscript.symbolic.type.casting.ICastingRule; import zenscript.util.ZenPosition; @@ -21,11 +27,11 @@ * * @author Stanneke */ -public class ParsedExpressionMap extends ParsedExpression { +public class ParsedExpressionAssociative extends ParsedExpression { private final List keys; private final List values; - public ParsedExpressionMap( + public ParsedExpressionAssociative( ZenPosition position, List keys, List values) { @@ -76,4 +82,28 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return result; } } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + Map map = new HashMap(); + for (int i = 0; i < keys.size(); i++) { + IAny key = keys.get(i).eval(environment); + if (key == null) + return null; + + if (key == AnyNull.INSTANCE) + key = null; + + IAny value = values.get(i).eval(environment); + if (value == null) + return null; + + if (value == AnyNull.INSTANCE) + value = null; + + map.put(key, value); + } + + return new AnyAssociative(map); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java index b01707fc..db48c6b8 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBinary.java @@ -6,11 +6,15 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyBool; +import zenscript.runtime.AnyInt; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -37,4 +41,45 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp Expression cRight = right.compile(environment, predictedType).eval(); return cLeft.getType().binary(getPosition(), environment, cLeft, cRight, operator); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny leftValue = left.eval(environment); + IAny rightValue = right.eval(environment); + + switch (operator) { + case ADD: + return leftValue.add(rightValue); + case SUB: + return leftValue.sub(rightValue); + case MUL: + return leftValue.mul(rightValue); + case DIV: + return leftValue.div(rightValue); + case MOD: + return leftValue.mod(rightValue); + case CAT: + return leftValue.cat(rightValue); + case OR: + return leftValue.or(rightValue); + case AND: + return leftValue.and(rightValue); + case XOR: + return leftValue.xor(rightValue); + case INDEXGET: + return leftValue.indexGet(rightValue); + case RANGE: + return leftValue.range(rightValue); + case CONTAINS: + return AnyBool.valueOf(leftValue.contains(rightValue)); + case COMPARE: + return new AnyInt(leftValue.compareTo(rightValue)); + case MEMBERGETTER: + return leftValue.memberGet(rightValue.asString()); + case EQUALS: + return AnyBool.valueOf(leftValue.equals(rightValue)); + default: + throw new AssertionError("Invalid operation type"); + } + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java index 33c04a52..1c1d6f5e 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBool.java @@ -6,10 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionBool; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyBool; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -29,4 +32,9 @@ public ParsedExpressionBool(ZenPosition position, boolean value) { public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionBool(getPosition(), environment, value); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return AnyBool.valueOf(value); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java index fc80325f..12c9385c 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionBracket.java @@ -7,6 +7,7 @@ package zenscript.parser.expression; import java.util.List; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; @@ -14,6 +15,7 @@ import stanhebben.zenscript.type.ZenType; import zenscript.util.ZenPosition; import zenscript.lexer.Token; +import zenscript.runtime.IAny; /** * @@ -48,4 +50,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return resolved.instance(getPosition(), environment); } } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return environment.evalBracketed(tokens); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java index 9d794fbb..71ebb7f3 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCall.java @@ -6,12 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionCallStatic; import stanhebben.zenscript.expression.ExpressionCallVirtual; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; import zenscript.parser.expression.ParsedCallArguments.MatchedArguments; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -49,4 +51,17 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp matchedArguments.arguments); } } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny receiverValue = receiver.eval(environment); + if (receiverValue == null) + return null; + + IAny[] argumentValues = arguments.compileValues(environment); + if (argumentValues == null) + return null; + + return receiverValue.call(argumentValues); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java index f8b3963d..d95fa5cc 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCast.java @@ -6,10 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; import zenscript.parser.type.IParsedType; +import zenscript.parser.type.ParsedTypeBasic; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -33,4 +36,10 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return value.compile(environment, compiledType).eval().cast(getPosition(), compiledType); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + // not (yet?) possible + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java index c5a209a5..f6c0b9eb 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionCompare.java @@ -6,11 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.CompareType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyBool; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -42,4 +45,27 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return cLeft.getType().compare(getPosition(), environment, cLeft, cRight, type) .cast(getPosition(), predictedType); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny leftValue = left.eval(environment); + if (leftValue == null) + return null; + + IAny rightValue = right.eval(environment); + if (rightValue == null) + return null; + + int result = leftValue.compareTo(rightValue); + switch (type) { + case LT: return AnyBool.valueOf(result < 0); + case GT: return AnyBool.valueOf(result > 0); + case EQ: return AnyBool.valueOf(result == 0); + case NE: return AnyBool.valueOf(result != 0); + case LE: return AnyBool.valueOf(result <= 0); + case GE: return AnyBool.valueOf(result >= 0); + default: + throw new AssertionError("Illegal compare type"); + } + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java index a2ded60c..1dbc11dd 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionConditional.java @@ -6,10 +6,12 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionConditional; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -38,4 +40,18 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp ifThen.compile(environment, predictedType).eval(), ifElse.compile(environment, predictedType).eval()); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny conditionValue = condition.eval(environment); + if (conditionValue == null) + return null; + + boolean conditionBool = conditionValue.asBool(); + if (conditionBool) { + return ifThen.eval(environment); + } else { + return ifElse.eval(environment); + } + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java index 58cd7839..7f5c5e3c 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionDollar.java @@ -6,11 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -36,4 +38,12 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return symbol.instance(getPosition(), environment); } } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + if (name == null) + return null; + + return environment.evalDollar(name); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java index b53394d6..28f5313f 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFloat.java @@ -6,10 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionFloat; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyDouble; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -33,4 +36,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp value, predictedType == environment.getTypes().FLOAT ? predictedType : environment.getTypes().DOUBLE); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return new AnyDouble(value); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java index efed075e..a6b2a7f1 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionFunction.java @@ -11,9 +11,7 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.objectweb.asm.ClassVisitor; import stanhebben.zenscript.IZenCompileEnvironment; -import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionFunction; @@ -22,11 +20,12 @@ import stanhebben.zenscript.symbols.IZenSymbol; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.MethodArgument; import zenscript.parser.elements.ParsedFunctionArgument; -import zenscript.parser.elements.ParsedFunctionHeader; +import zenscript.parser.elements.ParsedFunctionSignature; import zenscript.parser.statement.ParsedStatement; +import zenscript.runtime.IAny; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.unit.SymbolicFunction; import zenscript.util.ZenPosition; @@ -36,10 +35,10 @@ * @author Stan */ public class ParsedExpressionFunction extends ParsedExpression { - private final ParsedFunctionHeader header; + private final ParsedFunctionSignature header; private final List statements; - public ParsedExpressionFunction(ZenPosition position, ParsedFunctionHeader header, List statements) { + public ParsedExpressionFunction(ZenPosition position, ParsedFunctionSignature header, List statements) { super(position); this.header = header; @@ -49,9 +48,9 @@ public ParsedExpressionFunction(ZenPosition position, ParsedFunctionHeader heade @Override public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { ZenType returnType = header.getReturnType().compile(environment); - List arguments; + List arguments; - IJavaMethod function = predictedType.getFunction(); + IMethod function = predictedType.getFunction(); if (function == null) { arguments = header.getCompiledArguments(environment); } else { @@ -69,7 +68,7 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp } } - arguments = new ArrayList(); + arguments = new ArrayList(); for (int i = 0; i < header.getArguments().size(); i++) { ParsedFunctionArgument argument = header.getArguments().get(i); @@ -80,18 +79,16 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp defaultValue = argument.getDefaultValue().compile(environment, type).eval(); } - arguments.add(new JavaMethodArgument(name, type, defaultValue)); + arguments.add(new MethodArgument(name, type, defaultValue)); } } SymbolicFunction functionUnit = new SymbolicFunction(returnType, arguments); EnvironmentFunctionLiteral scope = new EnvironmentFunctionLiteral(environment, functionUnit); - List argumentLocals = new ArrayList(); for (int i = 0; i < arguments.size(); i++) { - JavaMethodArgument argument = arguments.get(i); + MethodArgument argument = arguments.get(i); SymbolLocal symbol = new SymbolLocal(argument.getType(), false); - argumentLocals.add(symbol); scope.putValue( argument.getName(), @@ -104,14 +101,15 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp cStatements.add(statement.compile(scope)); } - // TODO: compile statements - Expression result = new ExpressionFunction(getPosition(), environment, arguments, returnType, statements); - - - + Expression result = new ExpressionFunction(getPosition(), environment, arguments, returnType, cStatements); return result; } + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } + private static class EnvironmentFunctionLiteral implements IScopeMethod { private final IScopeMethod outer; private final SymbolicFunction functionUnit; @@ -123,11 +121,6 @@ public EnvironmentFunctionLiteral(IScopeMethod outer, SymbolicFunction functionU locals = new HashMap(); } - @Override - public ClassVisitor getClassOutput() { - return outer.getClassOutput(); - } - @Override public TypeRegistry getTypes() { return outer.getTypes(); @@ -138,11 +131,6 @@ public IZenCompileEnvironment getEnvironment() { return outer.getEnvironment(); } - @Override - public TypeExpansion getExpansion(String name) { - return outer.getExpansion(name); - } - @Override public String makeClassName() { return outer.makeClassName(); @@ -191,5 +179,15 @@ public void error(ZenPosition position, String message) { public void warning(ZenPosition position, String message) { outer.warning(position, message); } + + @Override + public Statement getControlStatement(String label) { + return null; + } + + @Override + public ZenType getReturnType() { + return functionUnit.getReturnType(); + } } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java index f2e58432..caa1e1e2 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndex.java @@ -6,11 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -35,4 +37,17 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp Expression cIndex = index.compile(environment, null).eval(); return cValue.getType().binary(getPosition(), environment, cValue, cIndex, OperatorType.INDEXGET); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny valueValue = value.eval(environment); + if (valueValue == null) + return null; + + IAny indexValue = index.eval(environment); + if (indexValue == null) + return null; + + return valueValue.indexGet(indexValue); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java index 029d5ce2..cfaeb4fc 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionIndexSet.java @@ -6,11 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -38,4 +40,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp Expression cSetValue = setValue.compile(environment, null).eval(); return cValue.getType().trinary(getPosition(), environment, cValue, cIndex, cSetValue,OperatorType.INDEXSET); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java index c56baa1a..b2b32c58 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInt.java @@ -6,11 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyLong; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -35,4 +38,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return result; } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return new AnyLong(value); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java index 082e6d2f..13bfb22d 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionInvalid.java @@ -6,10 +6,12 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -25,4 +27,9 @@ public ParsedExpressionInvalid(ZenPosition position) { public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionInvalid(getPosition(), environment, predictedType == null ? environment.getTypes().ANY : predictedType); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java index a3abc22b..ba9715e1 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionMember.java @@ -6,9 +6,11 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -30,4 +32,13 @@ public ParsedExpressionMember(ZenPosition position, ParsedExpression value, Stri public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return value.compile(environment, null).getMember(getPosition(), member); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny valueValue = value.eval(environment); + if (valueValue == null) + return null; + + return valueValue.memberGet(member); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java index ce022410..a30c7d65 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNew.java @@ -6,12 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionNew; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; import zenscript.parser.expression.ParsedCallArguments.MatchedArguments; import zenscript.parser.type.IParsedType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -35,4 +37,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp MatchedArguments compiledArguments = callArguments.compile(cType.getConstructors(), environment); return new ExpressionNew(getPosition(), environment, cType, compiledArguments.method, compiledArguments.arguments); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java index 7a0f97ef..eb42300a 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionNull.java @@ -6,10 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionNull; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyNull; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -25,4 +28,9 @@ public ParsedExpressionNull(ZenPosition position) { public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionNull(getPosition(), environment); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return AnyNull.INSTANCE; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java index 2c630f1a..d99224d6 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOpAssign.java @@ -6,11 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -40,4 +42,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp return left.compile(environment, predictedType).assign(getPosition(), value); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return null; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java index fc63aba4..1ead6428 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionOrOr.java @@ -6,11 +6,15 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionOrOr; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyBool; +import zenscript.runtime.AnyNull; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -49,4 +53,20 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp cLeft.cast(getPosition(), type), cRight.cast(getPosition(), type)); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny leftValue = left.eval(environment); + if (leftValue == null) + return null; + + if (leftValue != AnyBool.FALSE && leftValue != AnyNull.INSTANCE) + return leftValue; + + IAny rightValue = right.eval(environment); + if (rightValue == null) + return null; + + return rightValue; + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java index 8938e074..5d2f770c 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionRange.java @@ -6,11 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionIntegerRange; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyRange; +import zenscript.runtime.IAny; /** * @@ -33,4 +36,19 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp Expression compiledTo = to.compile(environment, environment.getTypes().INT).eval(); return new ExpressionIntegerRange(getPosition(), environment, compiledFrom, compiledTo); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny fromValue = from.eval(environment); + if (fromValue == null) + return null; + + IAny toValue = to.eval(environment); + if (toValue == null) + return null; + + int iFrom = fromValue.asInt(); + int iTo = toValue.asInt(); + return new AnyRange(iFrom, iTo); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java index 724b823f..a0302e1b 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionString.java @@ -6,10 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.AnyString; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -29,4 +32,9 @@ public ParsedExpressionString(ZenPosition position, String value) { public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { return new ExpressionString(getPosition(), environment, value); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return new AnyString(value); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java index 4cee7d8b..4ec0c3c8 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionUnary.java @@ -6,11 +6,13 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import zenscript.annotations.OperatorType; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -34,4 +36,22 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp Expression cValue = value.compile(environment, predictedType).eval(); return cValue.getType().unary(getPosition(), environment, cValue, operator); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + IAny valueValue = value.eval(environment); + if (valueValue == null) + return null; + + switch (operator) { + case NOT: + return valueValue.not(); + case INVERT: + return valueValue.invert(); + case NEG: + return valueValue.neg(); + default: + throw new AssertionError("Invalid operator: " + operator); + } + } } diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java deleted file mode 100644 index b4f0a77a..00000000 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionValue.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package zenscript.parser.expression; - -import stanhebben.zenscript.compiler.IScopeMethod; -import stanhebben.zenscript.expression.partial.IPartialExpression; -import stanhebben.zenscript.type.ZenType; -import zenscript.util.ZenPosition; - -/** - * - * @author Stanneke - */ -public class ParsedExpressionValue extends ParsedExpression { - private final IPartialExpression value; - - public ParsedExpressionValue(ZenPosition position, IPartialExpression value) { - super(position); - - if (value == null) throw new IllegalArgumentException("value cannot be null"); - - this.value = value; - } - - @Override - public IPartialExpression compile(IScopeMethod environment, ZenType predictedType) { - return value; - } -} diff --git a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java index 06182a16..8fe89203 100644 --- a/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java +++ b/ZenScript/src/main/java/zenscript/parser/expression/ParsedExpressionVariable.java @@ -6,12 +6,14 @@ package zenscript.parser.expression; +import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.expression.ExpressionInvalid; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.type.ZenType; +import zenscript.runtime.IAny; import zenscript.util.ZenPosition; /** @@ -53,4 +55,9 @@ public IPartialExpression compile(IScopeMethod environment, ZenType predictedTyp public Expression compileKey(IScopeMethod environment, ZenType predictedType) { return new ExpressionString(getPosition(), environment, name); } + + @Override + public IAny eval(IZenCompileEnvironment environment) { + return environment.evalGlobal(name); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java index 53688bde..f009038c 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementCase.java @@ -6,6 +6,10 @@ package zenscript.parser.statement; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; @@ -33,4 +37,15 @@ public ParsedStatementCase(ZenPosition position, ParsedExpression value) { this.value = value; } + + @Override + public Statement compile(IScopeMethod scope) { + scope.error(getPosition(), "case must be inside a switch"); + return new StatementNull(getPosition(), scope); + } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onCase(getPosition(), value.compile(scope, forSwitch.getType()).eval()); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java index 553f3ab2..eba732d0 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementContinue.java @@ -10,6 +10,7 @@ import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementContinue; import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.Token; import zenscript.lexer.ZenTokener; @@ -53,4 +54,9 @@ public Statement compile(IScopeMethod scope) { return new StatementContinue(getPosition(), scope, controlStatement); } } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java index 699d9167..e875e8c9 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDefault.java @@ -6,6 +6,10 @@ package zenscript.parser.statement; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; @@ -26,4 +30,15 @@ public static ParsedStatementDefault parse(ZenTokener tokener, IZenErrorLogger e public ParsedStatementDefault(ZenPosition position) { super(position); } + + @Override + public Statement compile(IScopeMethod scope) { + scope.error(getPosition(), "default statement can only be used inside a switch"); + return new StatementNull(getPosition(), scope); + } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onDefault(getPosition()); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java index 61218fe9..793ae634 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementDoWhile.java @@ -11,6 +11,7 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementDoWhile; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; @@ -60,4 +61,9 @@ public Statement compile(IScopeMethod scope) { compiled.setContents(contents.compile(statementScope)); return compiled; } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java index f0650525..af4e7c14 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementExpression.java @@ -9,6 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementExpression; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.T_SEMICOLON; @@ -38,4 +39,9 @@ private ParsedStatementExpression(ParsedExpression expression) { public Statement compile(IScopeMethod scope) { return new StatementExpression(getPosition(), scope, expression.compile(scope, null).eval()); } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java index 8b3d1b8f..5060468b 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementFor.java @@ -14,6 +14,7 @@ import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementForeach; import stanhebben.zenscript.statements.StatementNull; +import stanhebben.zenscript.statements.StatementSwitch; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.IZenIterator; import zenscript.IZenErrorLogger; @@ -84,4 +85,9 @@ public Statement compile(IScopeMethod scope) { return compiledStatement; } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java index c2c984cb..863937da 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementIf.java @@ -11,6 +11,7 @@ import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementIf; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; @@ -50,7 +51,7 @@ public ParsedStatementIf(ZenPosition position, ParsedExpression condition, Parse @Override public Statement compile(IScopeMethod scope) { - IAny eval = condition.eval(); + IAny eval = condition.eval(scope.getEnvironment()); if (eval != null) { // compile-time variable if (eval.asBool()) { @@ -75,4 +76,9 @@ public Statement compile(IScopeMethod scope) { return new StatementIf(getPosition(), scope, compiledCondition, compiledIf, compiledElse); } } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java index 92b28859..6c446532 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementReturn.java @@ -9,6 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.statements.Statement; import stanhebben.zenscript.statements.StatementReturn; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.T_RETURN; @@ -48,4 +49,9 @@ public Statement compile(IScopeMethod scope) { scope, value == null ? null : value.compile(scope, scope.getReturnType()).eval()); } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java index 08af4fc8..2a2d0941 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementSwitch.java @@ -6,6 +6,11 @@ package zenscript.parser.statement; +import stanhebben.zenscript.compiler.IScopeMethod; +import stanhebben.zenscript.compiler.ScopeStatementBlock; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementSwitch; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; import static zenscript.lexer.ZenTokener.*; @@ -46,4 +51,20 @@ public ParsedStatementSwitch( this.value = value; this.contents = contents; } + + @Override + public Statement compile(IScopeMethod scope) { + Expression cValue = value.compile(scope, null).eval(); + StatementSwitch forSwitch = new StatementSwitch(getPosition(), scope, cValue); + + IScopeMethod switchScope = new ScopeStatementBlock(scope, forSwitch, label); + contents.compileSwitch(switchScope, forSwitch); + + return forSwitch; + } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java index 321a8b04..9fd7e483 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementVar.java @@ -9,6 +9,7 @@ import stanhebben.zenscript.compiler.IScopeMethod; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementSwitch; import stanhebben.zenscript.statements.StatementVar; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; @@ -75,4 +76,9 @@ public Statement compile(IScopeMethod scope) { scope.putValue(name, symbol, getPosition()); return new StatementVar(getPosition(), scope, symbol, cInitializer); } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java index 0971e54f..a4b9750a 100644 --- a/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java +++ b/ZenScript/src/main/java/zenscript/parser/statement/ParsedStatementWhile.java @@ -10,6 +10,7 @@ import stanhebben.zenscript.compiler.ScopeStatementBlock; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.statements.Statement; +import stanhebben.zenscript.statements.StatementSwitch; import stanhebben.zenscript.statements.StatementWhile; import zenscript.IZenErrorLogger; import zenscript.lexer.ZenTokener; @@ -58,4 +59,9 @@ public Statement compile(IScopeMethod scope) { result.setContents(contents.compile(blockScope)); return result; } + + @Override + public void compileSwitch(IScopeMethod scope, StatementSwitch forSwitch) { + forSwitch.onStatement(compile(scope)); + } } diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyArray.java b/ZenScript/src/main/java/zenscript/runtime/AnyArray.java new file mode 100644 index 00000000..b3fb4df6 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyArray.java @@ -0,0 +1,244 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyArray implements IAny { + public static final AnyArray EMPTY = new AnyArray(new IAny[0]); + + private final IAny[] values; + + public AnyArray(IAny[] values) { + this.values = values; + } + + @Override + public IAny not() { + throw new UnsupportedOperationException("Cannot perform not on arrays"); + } + + @Override + public IAny invert() { + throw new UnsupportedOperationException("Cannot invert arrays"); + } + + @Override + public IAny neg() { + throw new UnsupportedOperationException("Cannot negate arrays"); + } + + @Override + public IAny add(IAny value) { + return cat(value); + } + + @Override + public IAny sub(IAny value) { + throw new UnsupportedOperationException("Cannot subtract from arrays"); + } + + @Override + public IAny cat(IAny value) { + Iterator iterator = value.iteratorSingle(); + if (iterator == null) { + IAny[] newValues = Arrays.copyOf(values, values.length + 1); + newValues[values.length] = value; + return new AnyArray(newValues); + } else { + ArrayList values = new ArrayList(); + while (iterator.hasNext()) { + values.add(iterator.next()); + } + + IAny[] newValues = Arrays.copyOf(this.values, this.values.length + values.size()); + for (int i = 0; i < values.size(); i++) { + newValues[this.values.length + i] = values.get(i); + } + return new AnyArray(newValues); + } + } + + @Override + public IAny mul(IAny value) { + throw new UnsupportedOperationException("Cannot multiply arrays"); + } + + @Override + public IAny div(IAny value) { + throw new UnsupportedOperationException("Cannot divide arrays"); + } + + @Override + public IAny mod(IAny value) { + throw new UnsupportedOperationException("Cannot modulo arrays"); + } + + @Override + public IAny and(IAny value) { + throw new UnsupportedOperationException("Arrays don't support logic arithmetic"); + } + + @Override + public IAny or(IAny value) { + throw new UnsupportedOperationException("Arrays don't support logic arithmetic"); + } + + @Override + public IAny xor(IAny value) { + throw new UnsupportedOperationException("Arrays don't support logic arithmetic"); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("Arrays don't support range arithmetic"); + } + + @Override + public int compareTo(IAny value) { + throw new UnsupportedOperationException("Can't compare arrays"); + } + + @Override + public boolean contains(IAny value) { + for (IAny arrayValue : values) { + if (arrayValue.equals(value)) + return true; + } + + return false; + } + + @Override + public IAny memberGet(String member) { + if (member.equals("length")) { + return new AnyInt(values.length); + } else { + throw new UnsupportedOperationException("Arrays don't have a " + member + " member"); + } + } + + @Override + public void memberSet(String member, IAny value) { + throw new UnsupportedOperationException("Arrays don't have settable members"); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("Arrays don't have callable members"); + } + + @Override + public IAny indexGet(IAny key) { + return values[key.asInt()]; + } + + @Override + public void indexSet(IAny key, IAny value) { + values[key.asInt()] = value; + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("Can't call arrays"); + } + + @Override + public boolean asBool() { + throw new ClassCastException("Can't cast arrays to bool values"); + } + + @Override + public byte asByte() { + throw new ClassCastException("Can't cast arrays to byte values"); + } + + @Override + public short asShort() { + throw new ClassCastException("Can't cast arrays to short values"); + } + + @Override + public int asInt() { + throw new ClassCastException("Can't cast arrays to int values"); + } + + @Override + public long asLong() { + throw new ClassCastException("Can't cast arrays to long values"); + } + + @Override + public float asFloat() { + throw new ClassCastException("Can't cast arrays to float values"); + } + + @Override + public double asDouble() { + throw new ClassCastException("Can't cast arrays to double values"); + } + + @Override + public String asString() { + StringBuilder result = new StringBuilder(); + result.append("["); + + boolean first = true; + for (IAny value : values) { + if (first) { + first = false; + } else { + result.append(", "); + } + + result.append(value.asString()); + } + result.append("]"); + + return result.toString(); + } + + @Override + public T as(Class cls) { + if (cls == IAny[].class) { + return (T) values; + } else { + throw new ClassCastException("Cannot cast arrays to another class"); + } + } + + @Override + public boolean is(Class cls) { + return cls == IAny[].class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return is(cls); + } + + @Override + public NumberType getNumberType() { + return NumberType.NONE; + } + + @Override + public Iterator iteratorSingle() { + return Arrays.asList(values).iterator(); + } + + @Override + public Iterator iteratorMulti(int n) { + return null; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyAssociative.java b/ZenScript/src/main/java/zenscript/runtime/AnyAssociative.java new file mode 100644 index 00000000..4b31164d --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyAssociative.java @@ -0,0 +1,264 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * + * @author Stan + */ +public class AnyAssociative implements IAny { + private final Map values; + + public AnyAssociative(Map values) { + this.values = values; + } + + @Override + public IAny not() { + throw new UnsupportedOperationException("Cannot perform not on an associative array"); + } + + @Override + public IAny invert() { + throw new UnsupportedOperationException("Cannot invert an associative array"); + } + + @Override + public IAny neg() { + throw new UnsupportedOperationException("Cannot negate an associative array"); + } + + @Override + public IAny add(IAny value) { + Map map = value.as(Map.class); + if (map == null) { + throw new UnsupportedOperationException("Add only works with associative arrays"); + } else { + Map copy = new HashMap(); + + for (Map.Entry entry : this.values.entrySet()) { + copy.put(entry.getKey(), entry.getValue()); + } + for (Map.Entry entry : map.entrySet()) { + copy.put(entry.getKey(), entry.getValue()); + } + + return new AnyAssociative(copy); + } + } + + @Override + public IAny sub(IAny value) { + Map map = value.as(Map.class); + if (map == null) { + throw new UnsupportedOperationException("Subtract only works with associative arrays"); + } else { + Map copy = new HashMap(); + + for (Map.Entry entry : this.values.entrySet()) { + copy.put(entry.getKey(), entry.getValue()); + } + for (IAny key : map.keySet()) { + copy.remove(key); + } + + return new AnyAssociative(copy); + } + } + + @Override + public IAny cat(IAny value) { + throw new UnsupportedOperationException("Cannot concatenate associative arrays"); + } + + @Override + public IAny mul(IAny value) { + throw new UnsupportedOperationException("Cannot multiply associative arrays"); + } + + @Override + public IAny div(IAny value) { + throw new UnsupportedOperationException("Cannot divide associative arrays"); + } + + @Override + public IAny mod(IAny value) { + throw new UnsupportedOperationException("Cannot modulo associative arrays"); + } + + @Override + public IAny and(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on associative arrays"); + } + + @Override + public IAny or(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on associative arrays"); + } + + @Override + public IAny xor(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on associative arrays"); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("Associative arrays don't have a range operator"); + } + + @Override + public int compareTo(IAny value) { + throw new UnsupportedOperationException("Cannot compare associative arrays"); + } + + @Override + public boolean contains(IAny value) { + return values.containsKey(value); + } + + @Override + public IAny memberGet(String member) { + return values.get(new AnyString(member)); + } + + @Override + public void memberSet(String member, IAny value) { + values.put(new AnyString(member), value); + } + + @Override + public IAny memberCall(String member, IAny... values) { + IAny memberValue = memberGet(member); + if (memberValue == null) + throw new UnknownMemberException("any[any]", member); + + return memberValue.call(values); + } + + @Override + public IAny indexGet(IAny key) { + return values.get(key); + } + + @Override + public void indexSet(IAny key, IAny value) { + values.put(key, value); + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("Cannot call associative arrays"); + } + + @Override + public boolean asBool() { + throw new ClassCastException("Cannot cast associative array to bool"); + } + + @Override + public byte asByte() { + throw new ClassCastException("Cannot cast associative array to byte"); + } + + @Override + public short asShort() { + throw new ClassCastException("Cannot cast associative array to short"); + } + + @Override + public int asInt() { + throw new ClassCastException("Cannot cast associative array to int"); + } + + @Override + public long asLong() { + throw new ClassCastException("Cannot cast associative array to long"); + } + + @Override + public float asFloat() { + throw new ClassCastException("Cannot cast associative array to float"); + } + + @Override + public double asDouble() { + throw new ClassCastException("Cannot cast associative array to double"); + } + + @Override + public String asString() { + throw new ClassCastException("Cannot cast associative array to string"); + } + + @Override + public T as(Class cls) { + if (cls == Map.class) + return (T) values; + + return null; + } + + @Override + public boolean is(Class cls) { + return cls == Map.class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return is(cls); + } + + @Override + public NumberType getNumberType() { + return NumberType.NONE; + } + + @Override + public Iterator iteratorSingle() { + return values.keySet().iterator(); + } + + @Override + public Iterator iteratorMulti(int n) { + if (n == 2) { + return new KeyValueIterator(); + } else { + return null; + } + } + + private class KeyValueIterator implements Iterator { + Iterator> baseIterator; + IAny[] array = new IAny[2]; + + public KeyValueIterator() { + baseIterator = values.entrySet().iterator(); + } + + @Override + public boolean hasNext() { + return baseIterator.hasNext(); + } + + @Override + public IAny[] next() { + Map.Entry value = baseIterator.next(); + array[0] = value.getKey(); + array[1] = value.getValue(); + return array; + } + + @Override + public void remove() { + baseIterator.remove(); + } + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyBool.java b/ZenScript/src/main/java/zenscript/runtime/AnyBool.java index 4f2b2614..7b7707c5 100644 --- a/ZenScript/src/main/java/zenscript/runtime/AnyBool.java +++ b/ZenScript/src/main/java/zenscript/runtime/AnyBool.java @@ -13,15 +13,27 @@ * @author Stan */ public class AnyBool implements IAny { + public static final AnyBool TRUE = new AnyBool(true); + public static final AnyBool FALSE = new AnyBool(false); + + public static AnyBool valueOf(boolean value) { + return value ? TRUE: FALSE; + } + private final boolean value; - public AnyBool(boolean value) { + private AnyBool(boolean value) { this.value = value; } @Override public IAny not() { - return new AnyBool(!value); + return value ? FALSE : TRUE; + } + + @Override + public IAny invert() { + throw new UnsupportedOperationException("bool doesn't support the ~ operator"); } @Override @@ -61,17 +73,17 @@ public IAny mod(IAny value) { @Override public IAny and(IAny value) { - return new AnyBool(this.value & value.asBool()); + return valueOf(this.value & value.asBool()); } @Override public IAny or(IAny value) { - return new AnyBool(this.value | value.asBool()); + return valueOf(this.value | value.asBool()); } @Override public IAny xor(IAny value) { - return new AnyBool(this.value ^ value.asBool()); + return valueOf(this.value ^ value.asBool()); } @Override @@ -175,8 +187,8 @@ public boolean canCastImplicit(Class cls) { } @Override - public int getNumberType() { - return 0; + public NumberType getNumberType() { + return NumberType.NONE; } @Override diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyDouble.java b/ZenScript/src/main/java/zenscript/runtime/AnyDouble.java new file mode 100644 index 00000000..73e63b1d --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyDouble.java @@ -0,0 +1,163 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyDouble extends AnyNumber { + private final double value; + + public AnyDouble(double value) { + this.value = value; + } + + @Override + public IAny invert() { + throw new UnsupportedOperationException("Cannot invert double values"); + } + + @Override + public IAny neg() { + return new AnyDouble(-value); + } + + @Override + public IAny add(IAny value) { + return new AnyDouble(this.value + value.asDouble()); + } + + @Override + public IAny sub(IAny value) { + return new AnyDouble(this.value - value.asDouble()); + } + + @Override + public IAny cat(IAny value) { + return new AnyString(Double.toString(this.value) + value.asString()); + } + + @Override + public IAny mul(IAny value) { + return new AnyDouble(this.value * value.asDouble()); + } + + @Override + public IAny div(IAny value) { + return new AnyDouble(this.value / value.asDouble()); + } + + @Override + public IAny mod(IAny value) { + return new AnyDouble(this.value % value.asDouble()); + } + + @Override + public IAny and(IAny value) { + throw new UnsupportedOperationException("Cannot perform logic arithmetic on doubles"); + } + + @Override + public IAny or(IAny value) { + throw new UnsupportedOperationException("Cannot perform logic arithmetic on doubles"); + } + + @Override + public IAny xor(IAny value) { + throw new UnsupportedOperationException("Cannot perform logic arithmetic on doubles"); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("Double doesn't support the range operator"); + } + + @Override + public int compareTo(IAny value) { + return Double.compare(this.value, value.asDouble()); + } + + @Override + public byte asByte() { + return (byte) value; + } + + @Override + public short asShort() { + return (short) value; + } + + @Override + public int asInt() { + return (int) value; + } + + @Override + public long asLong() { + return (long) value; + } + + @Override + public float asFloat() { + return (float) value; + } + + @Override + public double asDouble() { + return value; + } + + @Override + public String asString() { + return Double.toString(value); + } + + @Override + public boolean is(Class cls) { + return cls == double.class; + } + + @Override + public NumberType getNumberType() { + return NumberType.DOUBLE; + } + + @Override + public Iterator iteratorSingle() { + return null; + } + + @Override + public Iterator iteratorMulti(int n) { + return null; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 97 * hash + (int) (Double.doubleToLongBits(this.value) ^ (Double.doubleToLongBits(this.value) >>> 32)); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AnyDouble other = (AnyDouble) obj; + if (Double.doubleToLongBits(this.value) != Double.doubleToLongBits(other.value)) { + return false; + } + return true; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyInt.java b/ZenScript/src/main/java/zenscript/runtime/AnyInt.java index a487eb72..5a457865 100644 --- a/ZenScript/src/main/java/zenscript/runtime/AnyInt.java +++ b/ZenScript/src/main/java/zenscript/runtime/AnyInt.java @@ -7,21 +7,20 @@ package zenscript.runtime; import java.util.Iterator; -import stanhebben.zenscript.type.ZenType; /** * * @author Stan */ -public class AnyInt implements IAny { +public class AnyInt extends AnyNumber { private final int value; public AnyInt(int value) { this.value = value; } - + @Override - public IAny not() { + public IAny invert() { return new AnyInt(~value); } @@ -32,12 +31,40 @@ public IAny neg() { @Override public IAny add(IAny value) { - return new AnyInt(this.value + value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value + value.asInt()); + case LONG: + return new AnyLong(this.value + value.asLong()); + case FLOAT: + case DOUBLE: + return new AnyDouble(this.value + value.asDouble()); + case NONE: + return new AnyString(this.value + value.asString()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override public IAny sub(IAny value) { - return new AnyInt(this.value - value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value - value.asInt()); + case LONG: + return new AnyLong(this.value - value.asLong()); + case FLOAT: + case DOUBLE: + return new AnyDouble(this.value - value.asDouble()); + case NONE: + return new AnyInt(this.value - value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override @@ -47,17 +74,59 @@ public IAny cat(IAny value) { @Override public IAny mul(IAny value) { - return new AnyInt(this.value * value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value * value.asInt()); + case LONG: + return new AnyLong(this.value * value.asLong()); + case FLOAT: + case DOUBLE: + return new AnyDouble(this.value * value.asDouble()); + case NONE: + return new AnyInt(this.value * value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override public IAny div(IAny value) { - return new AnyInt(this.value / value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value / value.asInt()); + case LONG: + return new AnyLong(this.value / value.asLong()); + case FLOAT: + case DOUBLE: + return new AnyDouble(this.value / value.asDouble()); + case NONE: + return new AnyInt(this.value / value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override public IAny mod(IAny value) { - return new AnyInt(this.value % value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value % value.asInt()); + case LONG: + return new AnyLong(this.value % value.asLong()); + case FLOAT: + case DOUBLE: + return new AnyDouble(this.value % value.asDouble()); + case NONE: + return new AnyInt(this.value % value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override @@ -67,63 +136,64 @@ public IAny and(IAny value) { @Override public IAny or(IAny value) { - return new AnyInt(this.value | value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value | value.asInt()); + case LONG: + return new AnyLong(this.value | value.asLong()); + case FLOAT: + case DOUBLE: + throw new UnsupportedOperationException("Cannot | with a double"); + case NONE: + return new AnyInt(this.value | value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override public IAny xor(IAny value) { - return new AnyInt(this.value ^ value.asInt()); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return new AnyInt(this.value ^ value.asInt()); + case LONG: + return new AnyLong(this.value ^ value.asLong()); + case FLOAT: + case DOUBLE: + throw new UnsupportedOperationException("Cannot ^ with a double"); + case NONE: + return new AnyInt(this.value ^ value.asInt()); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override public IAny range(IAny value) { - // TODO: implement - throw new UnsupportedOperationException("not yet supported"); + return new AnyRange(this.value, value.asInt()); } @Override public int compareTo(IAny value) { - return this.value - value.asInt(); - } - - @Override - public boolean contains(IAny value) { - return false; - } - - @Override - public IAny memberGet(String member) { - throw new UnsupportedOperationException("No members in int"); - } - - @Override - public void memberSet(String member, IAny value) { - throw new UnsupportedOperationException("No members in int"); - } - - @Override - public IAny memberCall(String member, IAny... values) { - throw new UnsupportedOperationException("No members in int"); - } - - @Override - public IAny indexGet(IAny key) { - throw new UnsupportedOperationException("Cannot index integers"); - } - - @Override - public void indexSet(IAny key, IAny value) { - throw new UnsupportedOperationException("Cannot index integers"); - } - - @Override - public IAny call(IAny... values) { - throw new UnsupportedOperationException("Cannot call integers"); - } - - @Override - public boolean asBool() { - throw new UnsupportedOperationException("Cannot convert integers to bools"); + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + return this.value - value.asInt(); + case LONG: + return Long.compare(this.value, value.asLong()); + case FLOAT: + case DOUBLE: + return Double.compare(this.value, value.asDouble()); + case NONE: + return this.value - value.asInt(); + default: + throw new AssertionError("Invalid number type: " + value.getNumberType()); + } } @Override @@ -162,32 +232,44 @@ public String asString() { } @Override - public T as(Class cls) { - return null; + public boolean is(Class cls) { + return cls == int.class; } @Override - public boolean is(Class cls) { - return cls == int.class; + public NumberType getNumberType() { + return NumberType.INT; } @Override - public boolean canCastImplicit(Class cls) { - return cls == int.class || cls == byte.class || cls == short.class || cls == float.class || cls == double.class; + public Iterator iteratorSingle() { + return null; } @Override - public int getNumberType() { - return ZenType.NUM_INT; + public Iterator iteratorMulti(int n) { + return null; } @Override - public Iterator iteratorSingle() { - throw new UnsupportedOperationException("int doesn't have iterators"); + public int hashCode() { + int hash = 3; + hash = 17 * hash + this.value; + return hash; } @Override - public Iterator iteratorMulti(int n) { - throw new UnsupportedOperationException("int doesn't have iterators"); + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AnyInt other = (AnyInt) obj; + if (this.value != other.value) { + return false; + } + return true; } } diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyLong.java b/ZenScript/src/main/java/zenscript/runtime/AnyLong.java new file mode 100644 index 00000000..8febab41 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyLong.java @@ -0,0 +1,211 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyLong extends AnyNumber { + private final long value; + + public AnyLong(long value) { + this.value = value; + } + + @Override + public IAny invert() { + return new AnyLong(~value); + } + + @Override + public IAny neg() { + return new AnyLong(-value); + } + + @Override + public IAny add(IAny value) { + if (value.getNumberType() == NumberType.FLOAT || value.getNumberType() == NumberType.DOUBLE) { + return new AnyDouble(this.value + value.asDouble()); + } else if (value.getNumberType() == NumberType.NONE) { + return new AnyString(this.value + value.asString()); + } else { + return new AnyLong(this.value + value.asLong()); + } + } + + @Override + public IAny sub(IAny value) { + if (value.getNumberType() == NumberType.FLOAT || value.getNumberType() == NumberType.DOUBLE) { + return new AnyDouble(this.value - value.asDouble()); + } else if (value.getNumberType() == NumberType.NONE) { + throw new UnsupportedOperationException("Cannot subtract non-number values from long values"); + } else { + return new AnyLong(this.value - value.asLong()); + } + } + + @Override + public IAny cat(IAny value) { + return new AnyString(this.value + value.asString()); + } + + @Override + public IAny mul(IAny value) { + if (value.getNumberType() == NumberType.FLOAT || value.getNumberType() == NumberType.DOUBLE) { + return new AnyDouble(this.value * value.asDouble()); + } else if (value.getNumberType() == NumberType.NONE) { + throw new UnsupportedOperationException("Cannot multiply non-number values with long values"); + } else { + return new AnyLong(this.value * value.asLong()); + } + } + + @Override + public IAny div(IAny value) { + if (value.getNumberType() == NumberType.FLOAT || value.getNumberType() == NumberType.DOUBLE) { + return new AnyDouble(this.value / value.asDouble()); + } else if (value.getNumberType() == NumberType.NONE) { + throw new UnsupportedOperationException("Cannot divide long values by non-number values"); + } else { + return new AnyLong(this.value / value.asLong()); + } + } + + @Override + public IAny mod(IAny value) { + if (value.getNumberType() == NumberType.FLOAT || value.getNumberType() == NumberType.DOUBLE) { + return new AnyDouble(this.value % value.asDouble()); + } else if (value.getNumberType() == NumberType.NONE) { + throw new UnsupportedOperationException("Cannot modulo long values with non-number values"); + } else { + return new AnyLong(this.value % value.asLong()); + } + } + + @Override + public IAny and(IAny value) { + return new AnyLong(this.value & value.asLong()); + } + + @Override + public IAny or(IAny value) { + return new AnyLong(this.value | value.asLong()); + } + + @Override + public IAny xor(IAny value) { + return new AnyLong(this.value ^ value.asLong()); + } + + @Override + public IAny range(IAny value) { + if (this.value < Integer.MAX_VALUE) { + return new AnyRange((int) this.value, value.asInt()); + } else { + throw new NumberFormatException("value too large for a range"); + } + } + + @Override + public int compareTo(IAny value) { + switch (value.getNumberType()) { + case BYTE: + case SHORT: + case INT: + case LONG: { + long lValue = value.asLong(); + return Long.compare(this.value, lValue); + } + case FLOAT: + case DOUBLE: + double dValue = value.asDouble(); + return Double.compare(this.value, dValue); + default: + throw new AssertionError("Invalid number type: " + value); + } + } + + @Override + public byte asByte() { + return (byte) value; + } + + @Override + public short asShort() { + return (short) value; + } + + @Override + public int asInt() { + return (int) value; + } + + @Override + public long asLong() { + return value; + } + + @Override + public float asFloat() { + return value; + } + + @Override + public double asDouble() { + return value; + } + + @Override + public String asString() { + return Long.toString(value); + } + + @Override + public boolean is(Class cls) { + return cls == long.class; + } + + @Override + public NumberType getNumberType() { + return NumberType.LONG; + } + + @Override + public Iterator iteratorSingle() { + return null; + } + + @Override + public Iterator iteratorMulti(int n) { + return null; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 83 * hash + (int) (this.value ^ (this.value >>> 32)); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AnyLong other = (AnyLong) obj; + if (this.value != other.value) { + return false; + } + return true; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyNull.java b/ZenScript/src/main/java/zenscript/runtime/AnyNull.java new file mode 100644 index 00000000..229b232c --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyNull.java @@ -0,0 +1,194 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan Hebben + */ +public class AnyNull implements IAny { + public static final AnyNull INSTANCE = new AnyNull(); + + private AnyNull() {} + + @Override + public IAny not() { + return AnyBool.TRUE; + } + + @Override + public IAny invert() { + throw new NullPointerException(); + } + + @Override + public IAny neg() { + throw new NullPointerException(); + } + + @Override + public IAny add(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny sub(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny cat(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny mul(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny div(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny mod(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny and(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny or(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny xor(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny range(IAny value) { + throw new NullPointerException(); + } + + @Override + public int compareTo(IAny value) { + throw new NullPointerException(); + } + + @Override + public boolean contains(IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny memberGet(String member) { + throw new NullPointerException(); + } + + @Override + public void memberSet(String member, IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new NullPointerException(); + } + + @Override + public IAny indexGet(IAny key) { + throw new NullPointerException(); + } + + @Override + public void indexSet(IAny key, IAny value) { + throw new NullPointerException(); + } + + @Override + public IAny call(IAny... values) { + throw new NullPointerException(); + } + + @Override + public boolean asBool() { + throw new NullPointerException(); + } + + @Override + public byte asByte() { + throw new NullPointerException(); + } + + @Override + public short asShort() { + throw new NullPointerException(); + } + + @Override + public int asInt() { + throw new NullPointerException(); + } + + @Override + public long asLong() { + throw new NullPointerException(); + } + + @Override + public float asFloat() { + throw new NullPointerException(); + } + + @Override + public double asDouble() { + throw new NullPointerException(); + } + + @Override + public String asString() { + throw new NullPointerException(); + } + + @Override + public T as(Class cls) { + return null; + } + + @Override + public boolean is(Class cls) { + return false; + } + + @Override + public boolean canCastImplicit(Class cls) { + return true; + } + + @Override + public NumberType getNumberType() { + return NumberType.NONE; + } + + @Override + public Iterator iteratorSingle() { + return null; + } + + @Override + public Iterator iteratorMulti(int n) { + return null; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyNumber.java b/ZenScript/src/main/java/zenscript/runtime/AnyNumber.java new file mode 100644 index 00000000..5f1a9118 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyNumber.java @@ -0,0 +1,87 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +/** + * + * @author Stan + */ +public abstract class AnyNumber implements IAny { + @Override + public final IAny not() { + throw new UnsupportedOperationException("numbers don't support the ! operator"); + } + + @Override + public final boolean contains(IAny value) { + return false; + } + + @Override + public final IAny memberGet(String member) { + throw new UnknownMemberException(member, "number"); + } + + @Override + public final void memberSet(String member, IAny value) { + throw new ImmutableException("Numbers don't have settable members"); + } + + @Override + public final IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("Numbers don't have callable members"); + } + + @Override + public final IAny indexGet(IAny key) { + throw new UnsupportedOperationException("Cannot index number values"); + } + + @Override + public final void indexSet(IAny key, IAny value) { + throw new UnsupportedOperationException("Cannot index number values"); + } + + @Override + public final IAny call(IAny... values) { + throw new UnsupportedOperationException("Cannot call number values"); + } + + @Override + public final boolean asBool() { + throw new ClassCastException("Cannot cast numbers to bool values"); + } + + @Override + public final T as(Class cls) { + if (cls == Byte.class) { + return (T) Byte.valueOf(asByte()); + } else if (cls == Short.class) { + return (T) Short.valueOf(asShort()); + } else if (cls == Integer.class) { + return (T) Integer.valueOf(asInt()); + } else if (cls == Long.class) { + return (T) Long.valueOf(asLong()); + } else if (cls == Float.class) { + return (T) Float.valueOf(asFloat()); + } else if (cls == Double.class) { + return (T) Double.valueOf(asDouble()); + } else if (cls == String.class) { + return (T) asString(); + } else { + return null; + } + } + + @Override + public final boolean canCastImplicit(Class cls) { + return cls == byte.class || cls == short.class || cls == int.class || cls == long.class + || cls == float.class || cls == double.class + || cls == Byte.class || cls == Short.class || cls == Integer.class || cls == Long.class + || cls == Float.class || cls == Double.class; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyRange.java b/ZenScript/src/main/java/zenscript/runtime/AnyRange.java new file mode 100644 index 00000000..183d5815 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/AnyRange.java @@ -0,0 +1,243 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +import java.util.Iterator; + +/** + * + * @author Stan + */ +public class AnyRange implements IAny { + private final int from; + private final int to; + + public AnyRange(int from, int to) { + this.from = from; + this.to = to; + } + + @Override + public IAny not() { + throw new UnsupportedOperationException("Cannot perform not on ranges"); + } + + @Override + public IAny invert() { + throw new UnsupportedOperationException("Cannot invert ranges"); + } + + @Override + public IAny neg() { + throw new UnsupportedOperationException("Cannot negate ranges"); + } + + @Override + public IAny add(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny sub(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny cat(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny mul(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny div(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny mod(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny and(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny or(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny xor(IAny value) { + throw new UnsupportedOperationException("Cannot perform arithmetic on ranges"); + } + + @Override + public IAny range(IAny value) { + throw new UnsupportedOperationException("Cannot perform the range operator on ranges"); + } + + @Override + public int compareTo(IAny value) { + throw new UnsupportedOperationException("Cannot compare ranges"); + } + + @Override + public boolean contains(IAny value) { + Range range = value.as(Range.class); + if (range == null) { + return false; + } else { + return range.getFrom() >= from && range.getTo() <= to; + } + } + + @Override + public IAny memberGet(String member) { + if (member.equals("from")) { + return new AnyInt(from); + } else if (member.equals("to")) { + return new AnyInt(to); + } else { + throw new UnknownMemberException(member, "range"); + } + } + + @Override + public void memberSet(String member, IAny value) { + throw new UnsupportedOperationException("range is immutable"); + } + + @Override + public IAny memberCall(String member, IAny... values) { + throw new UnsupportedOperationException("range doesn't have callable members"); + } + + @Override + public IAny indexGet(IAny key) { + int iKey = key.asInt(); + if (iKey < 0 || iKey >= (to - from)) + return new AnyInt(iKey + to); + + throw new ArrayIndexOutOfBoundsException(iKey); + } + + @Override + public void indexSet(IAny key, IAny value) { + throw new UnsupportedOperationException("range is immutable"); + } + + @Override + public IAny call(IAny... values) { + throw new UnsupportedOperationException("Cannot call ranges"); + } + + @Override + public boolean asBool() { + throw new ClassCastException("Cannot cast range to bool"); + } + + @Override + public byte asByte() { + throw new ClassCastException("Cannot cast range to byte"); + } + + @Override + public short asShort() { + throw new ClassCastException("Cannot cast range to short"); + } + + @Override + public int asInt() { + throw new ClassCastException("Cannot cast range to int"); + } + + @Override + public long asLong() { + throw new ClassCastException("Cannot cast range to long"); + } + + @Override + public float asFloat() { + throw new ClassCastException("Cannot cast range to float"); + } + + @Override + public double asDouble() { + throw new ClassCastException("Cannot cast range to double"); + } + + @Override + public String asString() { + return from + ".." + to; + } + + @Override + public T as(Class cls) { + if (cls == Range.class) { + return (T) new Range(from, to); + } else { + return null; + } + } + + @Override + public boolean is(Class cls) { + return cls == Range.class; + } + + @Override + public boolean canCastImplicit(Class cls) { + return is(cls); + } + + @Override + public NumberType getNumberType() { + return NumberType.NONE; + } + + @Override + public Iterator iteratorSingle() { + return null; + } + + @Override + public Iterator iteratorMulti(int n) { + return null; + } + + @Override + public int hashCode() { + int hash = 5; + hash = 89 * hash + this.from; + hash = 89 * hash + this.to; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AnyRange other = (AnyRange) obj; + if (this.from != other.from) { + return false; + } + if (this.to != other.to) { + return false; + } + return true; + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/AnyString.java b/ZenScript/src/main/java/zenscript/runtime/AnyString.java index 2de9a9a2..ddedbe03 100644 --- a/ZenScript/src/main/java/zenscript/runtime/AnyString.java +++ b/ZenScript/src/main/java/zenscript/runtime/AnyString.java @@ -18,9 +18,14 @@ public class AnyString implements IAny { public AnyString(String value) { this.value = value; } - + @Override public IAny not() { + throw new UnsupportedOperationException("Cannot perform not on a string"); + } + + @Override + public IAny invert() { throw new UnsupportedOperationException("Cannot perform arithmetic on a string"); } @@ -180,8 +185,8 @@ public boolean canCastImplicit(Class cls) { } @Override - public int getNumberType() { - return 0; + public NumberType getNumberType() { + return NumberType.NONE; } @Override @@ -193,6 +198,28 @@ public Iterator iteratorSingle() { public Iterator iteratorMulti(int n) { throw new UnsupportedOperationException("iterator with " + n + " variables not supported"); } + + @Override + public int hashCode() { + int hash = 7; + hash = 79 * hash + (this.value != null ? this.value.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AnyString other = (AnyString) obj; + if ((this.value == null) ? (other.value != null) : !this.value.equals(other.value)) { + return false; + } + return true; + } private class CharacterIterator implements Iterator { private int index = 0; diff --git a/ZenScript/src/main/java/zenscript/runtime/IAny.java b/ZenScript/src/main/java/zenscript/runtime/IAny.java index f47e105f..fd9edec1 100644 --- a/ZenScript/src/main/java/zenscript/runtime/IAny.java +++ b/ZenScript/src/main/java/zenscript/runtime/IAny.java @@ -9,13 +9,13 @@ import java.util.Iterator; /** - * + * IAny is the runtime class of the any type. It provides all necessary functions + * to implement the specified behavior of the any type and completely reflect the + * operations that can be performed on the underlying type. + * * @author Stan Hebben */ public interface IAny { - public static final String NAME = IAny.class.getName(); - public static final String SIGNATURE = "L" + NAME + ";"; - public static final int NUM_BYTE = 1; public static final int NUM_SHORT = 2; public static final int NUM_INT = 3; @@ -23,8 +23,33 @@ public interface IAny { public static final int NUM_FLOAT = 5; public static final int NUM_DOUBLE = 6; + public static final String NAME = IAny.class.getName(); + public static final String SIGNATURE = "L" + NAME + ";"; + + /** + * Performs the not (!) operation. Only valid on boolean values. Should + * throw an IllegalOperationException if the underlying type does not support + * that operation. + * + * @return not result + */ public IAny not(); + /** + * Performs the logical inverse (~) operation. Should throw an + * IllegalOperationException if the underlying type does not support that + * operation. + * + * @return inversion result + */ + public IAny invert(); + + /** + * Performs the negate (-) operation. Should throw an IllegalArgumentException + * if the underlying type doesn't support that operation. + * + * @return negate result + */ public IAny neg(); public IAny add(IAny value); @@ -79,13 +104,45 @@ public interface IAny { public String asString(); + /** + * Attempts to convert this value to the given type. Should return null if + * the conversion is not possible. + * + * @param class to convert to + * @param cls class to convert to + * @return converted object + */ public T as(Class cls); + /** + * Checks if this value is of the given type. Implements the is operator. + * Should return true for this class, its superclasses, and its implemented + * interfaces. + * + * Casters are irrelevant to this check. + * + * @param cls class to check + * @return true if this value is of given type + */ public boolean is(Class cls); + /** + * Checks if this value can be implicitly cast to the given type. Should + * return true on all values for with is(cls) is true, for all types for + * which a caster is available, and for all subtypes for which a caster + * is available. + * + * @param cls + * @return + */ public boolean canCastImplicit(Class cls); - public int getNumberType(); + /** + * Returns the number type. Should return NONE if this is not a number. + * + * @return number type + */ + public NumberType getNumberType(); public Iterator iteratorSingle(); diff --git a/ZenScript/src/main/java/zenscript/runtime/ImmutableException.java b/ZenScript/src/main/java/zenscript/runtime/ImmutableException.java new file mode 100644 index 00000000..e19890f7 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/ImmutableException.java @@ -0,0 +1,17 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +/** + * + * @author Stan + */ +public class ImmutableException extends RuntimeException { + public ImmutableException(String type) { + super(type + " is immutable"); + } +} diff --git a/ZenScript/src/main/java/zenscript/runtime/NumberType.java b/ZenScript/src/main/java/zenscript/runtime/NumberType.java new file mode 100644 index 00000000..e1c46ad6 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/NumberType.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +/** + * + * @author Stan + */ +public enum NumberType { + NONE, + BYTE, + SHORT, + INT, + LONG, + FLOAT, + DOUBLE +} diff --git a/ZenScript/src/main/java/zenscript/runtime/Range.java b/ZenScript/src/main/java/zenscript/runtime/Range.java index 5731af1f..4caed2e2 100644 --- a/ZenScript/src/main/java/zenscript/runtime/Range.java +++ b/ZenScript/src/main/java/zenscript/runtime/Range.java @@ -24,4 +24,30 @@ public int getFrom() { public int getTo() { return to; } + + @Override + public int hashCode() { + int hash = 3; + hash = 61 * hash + this.from; + hash = 61 * hash + this.to; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Range other = (Range) obj; + if (this.from != other.from) { + return false; + } + if (this.to != other.to) { + return false; + } + return true; + } } diff --git a/ZenScript/src/main/java/zenscript/runtime/UnknownMemberException.java b/ZenScript/src/main/java/zenscript/runtime/UnknownMemberException.java new file mode 100644 index 00000000..2b74e490 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/runtime/UnknownMemberException.java @@ -0,0 +1,25 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package zenscript.runtime; + +/** + * + * @author Stan + */ +public class UnknownMemberException extends RuntimeException { + private final String member; + + public UnknownMemberException(String member, String type) { + super(type + " doesn have a member " + member); + + this.member = member; + } + + public String getMember() { + return member; + } +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java b/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java index 881c6008..aede87a6 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java +++ b/ZenScript/src/main/java/zenscript/symbolic/TypeRegistry.java @@ -13,7 +13,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.objectweb.asm.ClassVisitor; import stanhebben.zenscript.IZenCompileEnvironment; import stanhebben.zenscript.TypeExpansion; import stanhebben.zenscript.compiler.IScopeGlobal; @@ -269,11 +268,6 @@ private ZenType getMapType(ParameterizedType type) { } private class StaticGlobalEnvironment implements IScopeMethod { - @Override - public ClassVisitor getClassOutput() { - throw new UnsupportedOperationException("Not possible!"); - } - @Override public TypeRegistry getTypes() { return TypeRegistry.this; @@ -284,11 +278,6 @@ public IZenCompileEnvironment getEnvironment() { return environment.getEnvironment(); } - @Override - public TypeExpansion getExpansion(String name) { - return environment.getExpansion(name); - } - @Override public String makeClassName() { return environment.makeClassName(); @@ -338,5 +327,10 @@ public void warning(ZenPosition position, String message) { public Statement getControlStatement(String label) { return null; } + + @Override + public ZenType getReturnType() { + return null; + } } } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java b/ZenScript/src/main/java/zenscript/symbolic/method/IMethod.java similarity index 87% rename from ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/method/IMethod.java index 2f5c6639..550def51 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/IJavaMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/method/IMethod.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.natives; +package zenscript.symbolic.method; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; @@ -14,7 +14,7 @@ * * @author Stan */ -public interface IJavaMethod { +public interface IMethod { public boolean isStatic(); public boolean isVarargs(); @@ -31,7 +31,7 @@ public interface IJavaMethod { public void invokeStatic(MethodOutput output, Expression[] arguments); - public JavaMethodArgument[] getArguments(); + public MethodArgument[] getArguments(); public int getArgumentIndex(String name); diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java b/ZenScript/src/main/java/zenscript/symbolic/method/JavaMethod.java similarity index 89% rename from ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java rename to ZenScript/src/main/java/zenscript/symbolic/method/JavaMethod.java index 4525fb47..3b6f4d8b 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/method/JavaMethod.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.natives; +package zenscript.symbolic.method; import java.lang.annotation.Annotation; import java.lang.reflect.Method; @@ -18,6 +18,7 @@ import stanhebben.zenscript.expression.ExpressionInt; import stanhebben.zenscript.expression.ExpressionString; import stanhebben.zenscript.type.ZenType; +import stanhebben.zenscript.type.natives.JavaMethodGenerated; import stanhebben.zenscript.util.MethodOutput; import zenscript.annotations.Named; import zenscript.annotations.NotNull; @@ -33,13 +34,13 @@ * * @author Stan */ -public class JavaMethod implements IJavaMethod { +public class JavaMethod implements IMethod { public static final int PRIORITY_INVALID = -1; public static final int PRIORITY_LOW = 1; public static final int PRIORITY_MEDIUM = 2; public static final int PRIORITY_HIGH = 3; - public static IJavaMethod get(TypeRegistry types, Class cls, String name, Class... parameterTypes) { + public static IMethod get(TypeRegistry types, Class cls, String name, Class... parameterTypes) { try { Method method = cls.getMethod(name, parameterTypes); if (method == null) { @@ -53,32 +54,32 @@ public static IJavaMethod get(TypeRegistry types, Class cls, String name, Class. } } - public static IJavaMethod getStatic(String owner, String name, ZenType returnType, JavaMethodArgument... arguments) { + public static IMethod getStatic(String owner, String name, ZenType returnType, MethodArgument... arguments) { return new JavaMethodGenerated(true, false, false, owner, name, returnType, arguments, new boolean[arguments.length]); } - public static IJavaMethod getStatic(String owner, String name, ZenType returnType, ZenType... arguments) { - JavaMethodArgument[] convertedArguments = new JavaMethodArgument[arguments.length]; + public static IMethod getStatic(String owner, String name, ZenType returnType, ZenType... arguments) { + MethodArgument[] convertedArguments = new MethodArgument[arguments.length]; for (int i = 0; i < convertedArguments.length; i++) { - convertedArguments[i] = new JavaMethodArgument(null, arguments[i], null); + convertedArguments[i] = new MethodArgument(null, arguments[i], null); } return getStatic(owner, name, returnType, convertedArguments); } - public static IJavaMethod get(TypeRegistry types, Method method, TypeCapture capture) { + public static IMethod get(TypeRegistry types, Method method) { + return get(types, method, TypeCapture.EMPTY); + } + + public static IMethod get(TypeRegistry types, Method method, TypeCapture capture) { return new JavaMethod(method, types, capture); } private final Method method; - private final JavaMethodArgument[] arguments; + private final MethodArgument[] arguments; private final ZenType returnType; private final HashMap argumentIndices; - /*public JavaMethod(Method method, TypeRegistry types) { - this(method, types, null, TypeCapture.EMPTY); - }*/ - public JavaMethod(Method method, TypeRegistry types, TypeCapture capture) { this(method, types, null, capture); } @@ -90,7 +91,7 @@ public JavaMethod(Method method, TypeRegistry types, String[] argumentNames, Typ argumentIndices = new HashMap(); Type[] genericParameters = method.getGenericParameterTypes(); - arguments = new JavaMethodArgument[method.getGenericParameterTypes().length]; + arguments = new MethodArgument[method.getGenericParameterTypes().length]; for (int i = 0; i < arguments.length; i++) { ZenType type = types.getNativeType(null, genericParameters[i], capture); String name = argumentNames == null || i >= argumentNames.length ? null : argumentNames[i]; @@ -137,7 +138,7 @@ public JavaMethod(Method method, TypeRegistry types, String[] argumentNames, Typ } } - arguments[i] = new JavaMethodArgument(name, type, defaultValue); + arguments[i] = new MethodArgument(name, type, defaultValue); if (name != null) { argumentIndices.put(name, i); @@ -267,7 +268,7 @@ public void invokeStatic(MethodOutput output, Expression[] arguments) { } @Override - public JavaMethodArgument[] getArguments() { + public MethodArgument[] getArguments() { return arguments; } diff --git a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java b/ZenScript/src/main/java/zenscript/symbolic/method/MethodArgument.java similarity index 80% rename from ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java rename to ZenScript/src/main/java/zenscript/symbolic/method/MethodArgument.java index 6c48aa9b..7e69c319 100644 --- a/ZenScript/src/main/java/stanhebben/zenscript/type/natives/JavaMethodArgument.java +++ b/ZenScript/src/main/java/zenscript/symbolic/method/MethodArgument.java @@ -4,7 +4,7 @@ * and open the template in the editor. */ -package stanhebben.zenscript.type.natives; +package zenscript.symbolic.method; import stanhebben.zenscript.expression.Expression; import stanhebben.zenscript.type.ZenType; @@ -13,12 +13,12 @@ * * @author Stan */ -public class JavaMethodArgument { +public class MethodArgument { private final String name; private final ZenType type; private final Expression defaultValue; - public JavaMethodArgument(String name, ZenType type, Expression defaultValue) { + public MethodArgument(String name, ZenType type, Expression defaultValue) { this.name = name; this.type = type; this.defaultValue = defaultValue; diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java index 5d277b0b..e679ca1e 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleDelegateStaticMethod.java @@ -7,7 +7,7 @@ package zenscript.symbolic.type.casting; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; /** * @@ -15,9 +15,9 @@ */ public class CastingRuleDelegateStaticMethod implements ICastingRuleDelegate { private final ICastingRuleDelegate target; - private final IJavaMethod method; + private final IMethod method; - public CastingRuleDelegateStaticMethod(ICastingRuleDelegate target, IJavaMethod method) { + public CastingRuleDelegateStaticMethod(ICastingRuleDelegate target, IMethod method) { this.target = target; this.method = method; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java index 4aa9ee47..73c6dff3 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableStaticMethod.java @@ -8,7 +8,7 @@ import org.objectweb.asm.Label; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; /** @@ -16,15 +16,15 @@ * @author Stan */ public class CastingRuleNullableStaticMethod implements ICastingRule { - private final IJavaMethod method; + private final IMethod method; private final ICastingRule base; - public CastingRuleNullableStaticMethod(IJavaMethod method) { + public CastingRuleNullableStaticMethod(IMethod method) { this.method = method; base = null; } - public CastingRuleNullableStaticMethod(IJavaMethod method, ICastingRule base) { + public CastingRuleNullableStaticMethod(IMethod method, ICastingRule base) { this.method = method; this.base = base; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java index ee3912c7..dd9654ed 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleNullableVirtualMethod.java @@ -8,7 +8,7 @@ import org.objectweb.asm.Label; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; /** @@ -17,9 +17,9 @@ */ public class CastingRuleNullableVirtualMethod implements ICastingRule { private final ZenType type; - private final IJavaMethod method; + private final IMethod method; - public CastingRuleNullableVirtualMethod(ZenType type, IJavaMethod method) { + public CastingRuleNullableVirtualMethod(ZenType type, IMethod method) { this.type = type; this.method = method; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java index a16f22f0..5b1a7c09 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleStaticMethod.java @@ -7,7 +7,7 @@ package zenscript.symbolic.type.casting; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; /** @@ -15,15 +15,15 @@ * @author Stan */ public class CastingRuleStaticMethod implements ICastingRule { - private final IJavaMethod method; + private final IMethod method; private final ICastingRule base; - public CastingRuleStaticMethod(IJavaMethod method) { + public CastingRuleStaticMethod(IMethod method) { this.method = method; this.base = null; } - public CastingRuleStaticMethod(IJavaMethod method, ICastingRule base) { + public CastingRuleStaticMethod(IMethod method, ICastingRule base) { this.method = method; this.base = base; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java index 3695db24..f51909dd 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java +++ b/ZenScript/src/main/java/zenscript/symbolic/type/casting/CastingRuleVirtualMethod.java @@ -7,7 +7,7 @@ package zenscript.symbolic.type.casting; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; import stanhebben.zenscript.util.MethodOutput; /** @@ -16,9 +16,9 @@ */ public class CastingRuleVirtualMethod implements ICastingRule { private final ZenType type; - private final IJavaMethod method; + private final IMethod method; - public CastingRuleVirtualMethod(ZenType type, IJavaMethod method) { + public CastingRuleVirtualMethod(ZenType type, IMethod method) { this.type = type; this.method = method; } diff --git a/ZenScript/src/main/java/zenscript/symbolic/typedef/ITypeDefinition.java b/ZenScript/src/main/java/zenscript/symbolic/typedef/ITypeDefinition.java new file mode 100644 index 00000000..3964aa20 --- /dev/null +++ b/ZenScript/src/main/java/zenscript/symbolic/typedef/ITypeDefinition.java @@ -0,0 +1,38 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ +package zenscript.symbolic.typedef; + +import java.util.List; +import org.objectweb.asm.ClassVisitor; +import stanhebben.zenscript.expression.Expression; +import stanhebben.zenscript.type.ZenType; + +/** + * + * @author Stan + */ +public interface ITypeDefinition { + public void addMethod(I); + + /** + * Adds a value map to the type definition. Will create a hashmap field mapping + * the given values to integers being the list's indices. + * + * Used by switch statements. + * + * @param type value type + * @param values key values + * @return field name + */ + public String addValueMap(ZenType type, List values); + + /** + * Compiles this type definition. + * + * @param cls class to compile to + */ + public void compile(ClassVisitor cls); +} diff --git a/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java b/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java index 7ffbaf7d..42de0188 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java +++ b/ZenScript/src/main/java/zenscript/symbolic/unit/SymbolicFunction.java @@ -11,7 +11,7 @@ import stanhebben.zenscript.expression.partial.IPartialExpression; import stanhebben.zenscript.symbols.SymbolLocal; import stanhebben.zenscript.type.ZenType; -import stanhebben.zenscript.type.natives.JavaMethodArgument; +import zenscript.symbolic.method.MethodArgument; /** * @@ -19,15 +19,19 @@ */ public class SymbolicFunction { private final ZenType returnType; - private final List arguments; + private final List arguments; private List captured = new ArrayList(); - public SymbolicFunction(ZenType returnType, List arguments) { + public SymbolicFunction(ZenType returnType, List arguments) { this.returnType = returnType; this.arguments = arguments; } + public ZenType getReturnType() { + return returnType; + } + public IPartialExpression addCapture(SymbolLocal local) { captured.add(local); diff --git a/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java b/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java index 5637487b..a689dd3a 100644 --- a/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java +++ b/ZenScript/src/main/java/zenscript/symbolic/util/CommonMethods.java @@ -7,8 +7,8 @@ package zenscript.symbolic.util; import stanhebben.zenscript.compiler.IScopeGlobal; -import stanhebben.zenscript.type.natives.IJavaMethod; -import stanhebben.zenscript.type.natives.JavaMethod; +import zenscript.symbolic.method.IMethod; +import zenscript.symbolic.method.JavaMethod; import zenscript.runtime.IAny; import zenscript.symbolic.TypeRegistry; import zenscript.symbolic.type.casting.CastingAnyBool; @@ -26,53 +26,53 @@ * @author Stan */ public class CommonMethods { - public final IJavaMethod BOOL_VALUEOF; - public final IJavaMethod BYTE_VALUEOF; - public final IJavaMethod SHORT_VALUEOF; - public final IJavaMethod INT_VALUEOF; - public final IJavaMethod LONG_VALUEOF; - public final IJavaMethod FLOAT_VALUEOF; - public final IJavaMethod DOUBLE_VALUEOF; + public final IMethod BOOL_VALUEOF; + public final IMethod BYTE_VALUEOF; + public final IMethod SHORT_VALUEOF; + public final IMethod INT_VALUEOF; + public final IMethod LONG_VALUEOF; + public final IMethod FLOAT_VALUEOF; + public final IMethod DOUBLE_VALUEOF; - public final IJavaMethod BOOL_VALUE; - public final IJavaMethod BYTE_VALUE; - public final IJavaMethod SHORT_VALUE; - public final IJavaMethod INT_VALUE; - public final IJavaMethod LONG_VALUE; - public final IJavaMethod FLOAT_VALUE; - public final IJavaMethod DOUBLE_VALUE; + public final IMethod BOOL_VALUE; + public final IMethod BYTE_VALUE; + public final IMethod SHORT_VALUE; + public final IMethod INT_VALUE; + public final IMethod LONG_VALUE; + public final IMethod FLOAT_VALUE; + public final IMethod DOUBLE_VALUE; - public final IJavaMethod BOOL_TOSTRING_STATIC; - public final IJavaMethod BYTE_TOSTRING_STATIC; - public final IJavaMethod SHORT_TOSTRING_STATIC; - public final IJavaMethod INT_TOSTRING_STATIC; - public final IJavaMethod LONG_TOSTRING_STATIC; - public final IJavaMethod FLOAT_TOSTRING_STATIC; - public final IJavaMethod DOUBLE_TOSTRING_STATIC; + public final IMethod BOOL_TOSTRING_STATIC; + public final IMethod BYTE_TOSTRING_STATIC; + public final IMethod SHORT_TOSTRING_STATIC; + public final IMethod INT_TOSTRING_STATIC; + public final IMethod LONG_TOSTRING_STATIC; + public final IMethod FLOAT_TOSTRING_STATIC; + public final IMethod DOUBLE_TOSTRING_STATIC; - public final IJavaMethod BOOL_TOSTRING; - public final IJavaMethod BYTE_TOSTRING; - public final IJavaMethod SHORT_TOSTRING; - public final IJavaMethod INT_TOSTRING; - public final IJavaMethod LONG_TOSTRING; - public final IJavaMethod FLOAT_TOSTRING; - public final IJavaMethod DOUBLE_TOSTRING; + public final IMethod BOOL_TOSTRING; + public final IMethod BYTE_TOSTRING; + public final IMethod SHORT_TOSTRING; + public final IMethod INT_TOSTRING; + public final IMethod LONG_TOSTRING; + public final IMethod FLOAT_TOSTRING; + public final IMethod DOUBLE_TOSTRING; - public final IJavaMethod PARSE_BOOL; - public final IJavaMethod PARSE_BYTE; - public final IJavaMethod PARSE_SHORT; - public final IJavaMethod PARSE_INT; - public final IJavaMethod PARSE_LONG; - public final IJavaMethod PARSE_FLOAT; - public final IJavaMethod PARSE_DOUBLE; + public final IMethod PARSE_BOOL; + public final IMethod PARSE_BYTE; + public final IMethod PARSE_SHORT; + public final IMethod PARSE_INT; + public final IMethod PARSE_LONG; + public final IMethod PARSE_FLOAT; + public final IMethod PARSE_DOUBLE; - public final IJavaMethod PARSE_BOOL_OBJECT; - public final IJavaMethod PARSE_BYTE_OBJECT; - public final IJavaMethod PARSE_SHORT_OBJECT; - public final IJavaMethod PARSE_INT_OBJECT; - public final IJavaMethod PARSE_LONG_OBJECT; - public final IJavaMethod PARSE_FLOAT_OBJECT; - public final IJavaMethod PARSE_DOUBLE_OBJECT; + public final IMethod PARSE_BOOL_OBJECT; + public final IMethod PARSE_BYTE_OBJECT; + public final IMethod PARSE_SHORT_OBJECT; + public final IMethod PARSE_INT_OBJECT; + public final IMethod PARSE_LONG_OBJECT; + public final IMethod PARSE_FLOAT_OBJECT; + public final IMethod PARSE_DOUBLE_OBJECT; public final ICastingRule CAST_ANY_BOOL; public final ICastingRule CAST_ANY_BYTE; @@ -83,42 +83,42 @@ public class CommonMethods { public final ICastingRule CAST_ANY_DOUBLE; public final ICastingRule CAST_ANY_STRING; - public final IJavaMethod METHOD_NOT; - public final IJavaMethod METHOD_NEG; - public final IJavaMethod METHOD_ADD; - public final IJavaMethod METHOD_CAT; - public final IJavaMethod METHOD_SUB; - public final IJavaMethod METHOD_MUL; - public final IJavaMethod METHOD_DIV; - public final IJavaMethod METHOD_MOD; - public final IJavaMethod METHOD_AND; - public final IJavaMethod METHOD_OR; - public final IJavaMethod METHOD_XOR; - public final IJavaMethod METHOD_RANGE; - public final IJavaMethod METHOD_COMPARETO; - public final IJavaMethod METHOD_CONTAINS; - public final IJavaMethod METHOD_MEMBERGET; - public final IJavaMethod METHOD_MEMBERSET; - public final IJavaMethod METHOD_MEMBERCALL; - public final IJavaMethod METHOD_INDEXGET; - public final IJavaMethod METHOD_INDEXSET; - public final IJavaMethod METHOD_CALL; - public final IJavaMethod METHOD_ASBOOL; - public final IJavaMethod METHOD_ASBYTE; - public final IJavaMethod METHOD_ASSHORT; - public final IJavaMethod METHOD_ASINT; - public final IJavaMethod METHOD_ASLONG; - public final IJavaMethod METHOD_ASFLOAT; - public final IJavaMethod METHOD_ASDOUBLE; - public final IJavaMethod METHOD_ASSTRING; - public final IJavaMethod METHOD_AS; - public final IJavaMethod METHOD_IS; - public final IJavaMethod METHOD_CANCASTIMPLICIT; - public final IJavaMethod METHOD_GETNUMBERTYPE; - public final IJavaMethod METHOD_ITERATORSINGLE; - public final IJavaMethod METHOD_ITERATORMULTI; + public final IMethod METHOD_NOT; + public final IMethod METHOD_NEG; + public final IMethod METHOD_ADD; + public final IMethod METHOD_CAT; + public final IMethod METHOD_SUB; + public final IMethod METHOD_MUL; + public final IMethod METHOD_DIV; + public final IMethod METHOD_MOD; + public final IMethod METHOD_AND; + public final IMethod METHOD_OR; + public final IMethod METHOD_XOR; + public final IMethod METHOD_RANGE; + public final IMethod METHOD_COMPARETO; + public final IMethod METHOD_CONTAINS; + public final IMethod METHOD_MEMBERGET; + public final IMethod METHOD_MEMBERSET; + public final IMethod METHOD_MEMBERCALL; + public final IMethod METHOD_INDEXGET; + public final IMethod METHOD_INDEXSET; + public final IMethod METHOD_CALL; + public final IMethod METHOD_ASBOOL; + public final IMethod METHOD_ASBYTE; + public final IMethod METHOD_ASSHORT; + public final IMethod METHOD_ASINT; + public final IMethod METHOD_ASLONG; + public final IMethod METHOD_ASFLOAT; + public final IMethod METHOD_ASDOUBLE; + public final IMethod METHOD_ASSTRING; + public final IMethod METHOD_AS; + public final IMethod METHOD_IS; + public final IMethod METHOD_CANCASTIMPLICIT; + public final IMethod METHOD_GETNUMBERTYPE; + public final IMethod METHOD_ITERATORSINGLE; + public final IMethod METHOD_ITERATORMULTI; - public final IJavaMethod METHOD_STRING_COMPARETO; + public final IMethod METHOD_STRING_COMPARETO; public CommonMethods(IScopeGlobal environment) { TypeRegistry types = environment.getTypes(); diff --git a/ZenScript/src/main/java/zenscript/util/StringUtil.java b/ZenScript/src/main/java/zenscript/util/StringUtil.java index 504fbf59..f778f0be 100644 --- a/ZenScript/src/main/java/zenscript/util/StringUtil.java +++ b/ZenScript/src/main/java/zenscript/util/StringUtil.java @@ -9,7 +9,7 @@ import java.util.ArrayList; import java.util.List; import stanhebben.zenscript.expression.Expression; -import stanhebben.zenscript.type.natives.IJavaMethod; +import zenscript.symbolic.method.IMethod; /** * @@ -54,7 +54,7 @@ public static String join(Iterable values, String separator) { * @param arguments calling arguments * @return return value */ - public static String methodMatchingError(List methods, Expression... arguments) { + public static String methodMatchingError(List methods, Expression... arguments) { if (methods.isEmpty()) { return "no method with that name available"; } else { diff --git a/license-mit.txt b/license-mit.txt new file mode 100644 index 00000000..dbf379d8 --- /dev/null +++ b/license-mit.txt @@ -0,0 +1,5 @@ +/* + * This file is part of MineTweaker API, licensed under the MIT License (MIT). + * + * Copyright (c) 2014 MineTweaker + */ \ No newline at end of file From 3a38a9d84edb9de76236e247ae73ad241f7095fd Mon Sep 17 00:00:00 2001 From: Stan Hebben Date: Tue, 14 Oct 2014 22:24:21 +0200 Subject: [PATCH 04/15] - Merged the 3.0.9 changes into the 3.1 branch - Continued refactoring and code quality improvement in scripting engine --- .../main/java/minetweaker/MineTweakerAPI.java | 13 + .../MineTweakerImplementationAPI.java | 79 ++- .../minetweaker/api/item/IItemDefinition.java | 15 + .../java/minetweaker/api/item/IItemStack.java | 26 + .../minetweaker/api/logger/FileLogger.java | 15 +- .../java/minetweaker/api/logger/MTLogger.java | 9 +- .../api/recipes/ICraftingRecipe.java | 2 + .../api/recipes/IRecipeManager.java | 22 + .../minetweaker/api/recipes/ShapedRecipe.java | 33 ++ .../api/recipes/ShapelessRecipe.java | 20 + .../api/recipes/UnknownRecipe.java | 47 ++ .../java/minetweaker/expand/ExpandString.java | 16 + .../java/minetweaker/runtime/ILogger.java | 3 + .../java/minetweaker/runtime/MTTweaker.java | 7 +- .../api/minecraft/MineTweakerMC.java | 46 ++ .../minetweaker/mc164/MineTweakerMod.java | 12 +- .../mc164/item/MCItemDefinition.java | 21 + .../minetweaker/mc164/item/MCItemStack.java | 39 ++ .../mc164/oredict/MCOreDictEntry.java | 5 + .../mc164/recipes/MCRecipeManager.java | 27 ++ .../mc164/recipes/RecipeConverter.java | 62 +++ .../build.gradle | 42 ++ .../libs/buildcraft-A-1.6.4-4.2.1.jar | Bin 0 -> 1394344 bytes .../mods/buildcraft/AssemblyTable.java | 182 +++++++ .../minetweaker/mods/buildcraft/Fuels.java | 375 ++++++++++++++ .../minetweaker/mods/buildcraft/Refinery.java | 200 ++++++++ .../api/minecraft/MineTweakerMC.java | 53 ++ .../minetweaker/mc1710/MineTweakerMod.java | 12 +- .../mc1710/item/MCItemDefinition.java | 21 + .../minetweaker/mc1710/item/MCItemStack.java | 33 ++ .../mc1710/oredict/MCOreDictEntry.java | 5 + .../mc1710/recipes/MCRecipeManager.java | 27 ++ .../mc1710/recipes/RecipeConverter.java | 62 ++- .../build.gradle | 42 ++ .../libs/buildcraft-6.0.18-dev.jar | Bin 0 -> 1815301 bytes .../mods/buildcraft/AssemblyTable.java | 184 +++++++ .../minetweaker/mods/buildcraft/Fuels.java | 375 ++++++++++++++ .../IIntegrationRecipeFunction.java | 17 + .../mods/buildcraft/IntegrationTable.java | 217 +++++++++ .../minetweaker/mods/buildcraft/Refinery.java | 202 ++++++++ .../api/minecraft/MineTweakerMC.java | 53 ++ .../minetweaker/mc172/MineTweakerMod.java | 12 +- .../mc172/item/MCItemDefinition.java | 21 + .../minetweaker/mc172/item/MCItemStack.java | 33 ++ .../mc172/oredict/MCOreDictEntry.java | 5 + .../mc172/recipes/MCRecipeManager.java | 27 ++ .../mc172/recipes/RecipeConverter.java | 59 +++ .../build.gradle | 42 ++ .../libs/buildcraft-6.0.16-dev.jar | Bin 0 -> 1795386 bytes .../mods/buildcraft/AssemblyTable.java | 184 +++++++ .../minetweaker/mods/buildcraft/Fuels.java | 375 ++++++++++++++ .../IIntegrationRecipeFunction.java | 17 + .../mods/buildcraft/IntegrationTable.java | 217 +++++++++ .../minetweaker/mods/buildcraft/Refinery.java | 202 ++++++++ MineTweaker3-Web/downloads.html | 31 +- MineTweaker3-Web/index.html | 8 +- ZenScript/build.gradle | 1 + .../stanhebben/zenscript/TypeExpansion.java | 12 +- .../zenscript/compiler/EnvironmentClass.java | 7 - .../zenscript/compiler/EnvironmentScript.java | 5 - .../zenscript/compiler/ScopeMethod.java | 7 - .../compiler/ScopeStatementBlock.java | 6 - .../zenscript/expression/Expression.java | 2 +- .../expression/ExpressionCallStatic.java | 6 +- .../expression/ExpressionCallVirtual.java | 6 +- .../expression/ExpressionFunction.java | 52 +- .../ExpressionGetInstanceField.java | 46 ++ .../expression/ExpressionGetStaticField.java | 42 ++ .../ExpressionJavaMethodCurled.java | 55 --- .../expression/ExpressionMethodCurled.java | 44 ++ .../stanhebben/zenscript/type/ZenType.java | 117 ++--- .../stanhebben/zenscript/type/ZenTypeAny.java | 182 ++++--- .../zenscript/type/ZenTypeArray.java | 61 +-- .../zenscript/type/ZenTypeArrayBasic.java | 15 +- .../zenscript/type/ZenTypeArrayList.java | 10 +- .../zenscript/type/ZenTypeAssociative.java | 56 +-- .../zenscript/type/ZenTypeBool.java | 78 +-- .../zenscript/type/ZenTypeFunction.java | 46 +- .../zenscript/type/ZenTypeString.java | 18 +- .../type/expand/ZenExpandMember.java | 1 - .../type/natives/JavaMethodExpanding.java | 49 +- .../type/natives/JavaMethodGenerated.java | 73 +-- .../type/natives/JavaMethodPrefixed.java | 49 +- .../type/natives/ZenNativeCaster.java | 4 +- .../type/natives/ZenNativeMember.java | 13 + .../zenscript/util/MethodOutput.java | 26 +- .../zenscript/annotations/OperatorType.java | 60 ++- .../main/java/zenscript/lexer/ZenTokener.java | 179 ++++--- .../java/zenscript/parser/ParsedFile.java | 194 ++++---- .../java/zenscript/parser/ParsedImport.java | 37 -- .../parser/elements/ParsedFunction.java | 28 +- .../elements/ParsedFunctionArgument.java | 78 ++- .../elements/ParsedFunctionSignature.java | 78 ++- .../elements/ParsedGenericParameter.java | 24 +- .../elements/ParsedGenericParameters.java | 39 +- .../parser/expression/ParsedCallArgument.java | 50 ++ .../expression/ParsedCallArguments.java | 456 +++++++++--------- .../parser/expression/ParsedExpression.java | 217 +++++---- .../expression/ParsedExpressionAndAnd.java | 6 +- .../expression/ParsedExpressionArray.java | 8 +- .../expression/ParsedExpressionAssign.java | 6 +- .../ParsedExpressionAssociative.java | 4 +- .../expression/ParsedExpressionBinary.java | 6 +- .../expression/ParsedExpressionBool.java | 2 +- .../expression/ParsedExpressionBracket.java | 2 +- .../expression/ParsedExpressionCall.java | 6 +- .../expression/ParsedExpressionCast.java | 5 +- .../expression/ParsedExpressionCompare.java | 9 +- .../ParsedExpressionConditional.java | 8 +- .../expression/ParsedExpressionDollar.java | 2 +- .../expression/ParsedExpressionFloat.java | 2 +- .../expression/ParsedExpressionFunction.java | 88 ++-- .../expression/ParsedExpressionIndex.java | 6 +- .../expression/ParsedExpressionIndexSet.java | 8 +- .../expression/ParsedExpressionInt.java | 2 +- .../expression/ParsedExpressionInvalid.java | 2 +- .../expression/ParsedExpressionMember.java | 4 +- .../expression/ParsedExpressionNew.java | 2 +- .../expression/ParsedExpressionNull.java | 2 +- .../expression/ParsedExpressionOpAssign.java | 8 +- .../expression/ParsedExpressionOrOr.java | 6 +- .../expression/ParsedExpressionRange.java | 6 +- .../expression/ParsedExpressionString.java | 2 +- .../expression/ParsedExpressionUnary.java | 4 +- .../expression/ParsedExpressionVariable.java | 2 +- .../parser/statement/ParsedStatement.java | 13 + .../parser/statement/ParsedStatementCase.java | 2 +- .../statement/ParsedStatementDoWhile.java | 2 +- .../statement/ParsedStatementExpression.java | 2 +- .../parser/statement/ParsedStatementFor.java | 2 +- .../parser/statement/ParsedStatementIf.java | 4 +- .../statement/ParsedStatementReturn.java | 2 +- .../statement/ParsedStatementSwitch.java | 2 +- .../statement/ParsedStatementWhile.java | 2 +- .../parser/type/ParsedTypeArray.java | 2 +- .../parser/type/ParsedTypeAssociative.java | 1 - .../java/zenscript/symbolic/AccessScope.java | 59 +++ .../zenscript/symbolic/MemberVirtual.java | 152 ++++++ .../symbolic/MemberVirtualSymbol.java | 30 ++ .../java/zenscript/symbolic/TypeRegistry.java | 12 +- .../symbolic/field/GeneratedField.java | 84 ++++ .../java/zenscript/symbolic/field/IField.java | 30 ++ .../zenscript/symbolic/field/JavaField.java | 86 ++++ .../zenscript/symbolic/member/IGetter.java | 22 + .../zenscript/symbolic/member/ISetter.java | 22 + .../symbolic/method/AbstractMethod.java | 27 ++ .../zenscript/symbolic/method/IMethod.java | 9 +- .../zenscript/symbolic/method/JavaMethod.java | 228 ++++----- .../symbolic/method/MethodHeader.java | 130 +++++ .../symbolic/type/TypeExpansion.java | 84 ++++ .../casting/CastingRuleDelegateArray.java | 4 +- .../type/casting/CastingRuleDelegateList.java | 10 +- .../CastingRuleNullableStaticMethod.java | 2 +- .../type/casting/CastingRuleStaticMethod.java | 2 +- .../symbolic/typedef/ITypeDefinition.java | 7 +- .../symbolic/unit/SymbolicFunction.java | 60 ++- .../symbolic/method/MethodHeaderTest.java | 295 +++++++++++ .../java/zenscript/test/TestEnvironment.java | 129 +++++ configuration.gradle | 11 +- 159 files changed, 6567 insertions(+), 1553 deletions(-) create mode 100644 MineTweaker3-API/src/main/java/minetweaker/api/recipes/UnknownRecipe.java create mode 100644 MineTweaker3-MC164-Mod-Buildcraft/build.gradle create mode 100644 MineTweaker3-MC164-Mod-Buildcraft/libs/buildcraft-A-1.6.4-4.2.1.jar create mode 100644 MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java create mode 100644 MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java create mode 100644 MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/build.gradle create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/libs/buildcraft-6.0.18-dev.jar create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/IIntegrationRecipeFunction.java create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/IntegrationTable.java create mode 100644 MineTweaker3-MC1710-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/build.gradle create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/libs/buildcraft-6.0.16-dev.jar create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/IIntegrationRecipeFunction.java create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/IntegrationTable.java create mode 100644 MineTweaker3-MC172-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionGetInstanceField.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionGetStaticField.java delete mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionJavaMethodCurled.java create mode 100644 ZenScript/src/main/java/stanhebben/zenscript/expression/ExpressionMethodCurled.java create mode 100644 ZenScript/src/main/java/zenscript/parser/expression/ParsedCallArgument.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/AccessScope.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/MemberVirtual.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/MemberVirtualSymbol.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/field/GeneratedField.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/field/IField.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/field/JavaField.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/member/IGetter.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/member/ISetter.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/method/AbstractMethod.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/method/MethodHeader.java create mode 100644 ZenScript/src/main/java/zenscript/symbolic/type/TypeExpansion.java create mode 100644 ZenScript/src/test/java/zenscript/symbolic/method/MethodHeaderTest.java create mode 100644 ZenScript/src/test/java/zenscript/test/TestEnvironment.java diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java index 1abfecf8..5cfa3518 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerAPI.java @@ -202,6 +202,19 @@ public static void logError(String message) { getLogger().logError(message); } + /** + * Logs an error message. Error messages indicate a real problem and + * indicate that things won't run properly. The scripting system will + * still make a best-effort attempt at executing the rest of the scripts, + * but that might cause additional errors and issues. + * + * @param message error message + * @param exception exception that was caught related to the error + */ + public static void logError(String message, Throwable exception) { + getLogger().logError(message, exception); + } + // ################################### // ### Plugin registration methods ### // ################################### diff --git a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java index 30197ba3..c887fdb1 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java +++ b/MineTweaker3-API/src/main/java/minetweaker/MineTweakerImplementationAPI.java @@ -1,5 +1,8 @@ package minetweaker; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; @@ -30,6 +33,7 @@ import minetweaker.api.oredict.IOreDict; import minetweaker.api.oredict.IOreDictEntry; import minetweaker.api.player.IPlayer; +import minetweaker.api.recipes.ICraftingRecipe; import minetweaker.api.recipes.IFurnaceManager; import minetweaker.api.recipes.IRecipeManager; import minetweaker.api.server.ICommandFunction; @@ -127,7 +131,7 @@ public void execute(String[] arguments, IPlayer player) { MineTweakerAPI.logCommand("Liquids:"); for (ILiquidDefinition liquid : liquids) { - MineTweakerAPI.logCommand("<" + liquid.getName() + "> -- " + liquid.getDisplayName()); + MineTweakerAPI.logCommand(" -- " + liquid.getDisplayName()); } if (player != null) { @@ -180,6 +184,56 @@ public void execute(String[] arguments, IPlayer player) { } })); + minetweakerCommands.put("recipes", new MineTweakerCommand( + "recipes", + new String[] { + "/minetweaker recipes", + " Lists all crafting recipes in the game", + "/minetweaker recipes hand", + " Lists all crafting recipes for the item in your hand", + " Also copies the recipes to clipboard" + }, new ICommandFunction() { + @Override + public void execute(String[] arguments, IPlayer player) + { + if (arguments.length == 0) { + if (player != null) { + player.sendChat("Generating recipe list, this could take a while..."); + } + + MineTweakerAPI.logCommand("Recipes:"); + for (ICraftingRecipe recipe : MineTweakerAPI.recipes.getAll()) { + MineTweakerAPI.logCommand(recipe.toCommandString()); + } + + if (player != null) { + player.sendChat("Recipe list generated; see minetweaker.log in your minecraft dir"); + } + } else if (arguments[0].equals("hand") && player != null) { + IItemStack item = player.getCurrentItem(); + + List recipes = MineTweakerAPI.recipes.getRecipesFor(item.anyAmount()); + if (recipes.isEmpty()) { + player.sendChat("No crafting recipes found for that item"); + } else { + StringBuilder recipesString = new StringBuilder(); + + for (ICraftingRecipe recipe : recipes) { + MineTweakerAPI.logCommand(recipe.toCommandString()); + player.sendChat(recipe.toCommandString()); + recipesString.append(recipe.toCommandString()).append("\n"); + } + + copyToClipboard(recipesString.toString()); + } + } else { + if (player != null) { + player.sendChat("Invalid arguments for recipes command"); + } + } + } + })); + minetweakerCommands.put("inventory", new MineTweakerCommand( "inventory", new String[] { @@ -201,13 +255,22 @@ public void execute(String[] arguments, IPlayer player) { "hand", new String[] { "/minetweaker hand", - " Outputs the name of the item in your hand" + " Outputs the name of the item in your hand", + " Also copies the name to clipboard and prints", + " oredict entries" }, new ICommandFunction() { @Override public void execute(String[] arguments, IPlayer player) { IItemStack hand = player.getCurrentItem(); if (hand != null) { - player.sendChat(hand.toString()); + String value = hand.toString(); + player.sendChat(value); + copyToClipboard(value); + + List entries = hand.getOres(); + for (IOreDictEntry entry : entries) { + player.sendChat("Is in "); + } } } })); @@ -583,6 +646,16 @@ public static void addMineTweakerCommand(String name, String[] description, ICom MineTweakerAPI.apply(new AddMineTweakerCommandAction(new MineTweakerCommand(name, description, function))); } + // ############################## + // ### Private static methods ### + // ############################## + + private static void copyToClipboard(String value) { + StringSelection stringSelection = new StringSelection(value); + Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + clipboard.setContents(stringSelection, null); + } + // ############################ // ### Public inner classes ### // ############################ diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java index 7a218c6c..0480592c 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemDefinition.java @@ -2,6 +2,12 @@ import zenscript.annotations.Optional; import zenscript.annotations.ZenClass; +import java.util.List; +import minetweaker.api.oredict.IOreDictEntry; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenGetter; +import stanhebben.zenscript.annotations.ZenMethod; import zenscript.annotations.ZenGetter; import zenscript.annotations.ZenMethod; @@ -40,4 +46,13 @@ public interface IItemDefinition { */ @ZenMethod public IItemStack makeStack(@Optional int meta); + + /** + * Returns all ore entries containing this item. Also contains ore entries + * that refer to a specific sub-item. + * + * @return + */ + @ZenGetter("ores") + public List getOres(); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java index 1e16ffaa..59816833 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/item/IItemStack.java @@ -1,5 +1,6 @@ package minetweaker.api.item; +import java.util.List; import minetweaker.api.block.IBlock; import minetweaker.api.data.IData; import minetweaker.api.liquid.ILiquidStack; @@ -10,6 +11,14 @@ import zenscript.annotations.ZenMethod; import zenscript.annotations.ZenOperator; import zenscript.annotations.ZenSetter; +import minetweaker.api.oredict.IOreDictEntry; +import stanhebben.zenscript.annotations.OperatorType; +import stanhebben.zenscript.annotations.ZenCaster; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenGetter; +import stanhebben.zenscript.annotations.ZenMethod; +import stanhebben.zenscript.annotations.ZenOperator; +import stanhebben.zenscript.annotations.ZenSetter; /** * Contains an item stack. An item stack consists of an item definition, @@ -155,6 +164,14 @@ public interface IItemStack extends IIngredient { @ZenMethod public IItemStack withAmount(int amount); + /** + * Creates an item stack with wildcard stack size. + * + * @return new, modified item stack + */ + @ZenMethod + public IItemStack anyAmount(); + /** * Creates an item stack with the given nbt tag. Ignores existing tags. * @@ -180,4 +197,13 @@ public interface IItemStack extends IIngredient { */ @ZenCaster public IBlock asBlock(); + + /** + * Retrieves all the ores referring to this item. Includes wildcard ore + * entries. + * + * @return ore entries containing this item stack + */ + @ZenGetter("ores") + public List getOres(); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/logger/FileLogger.java b/MineTweaker3-API/src/main/java/minetweaker/api/logger/FileLogger.java index cf66fd71..b9770fbc 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/logger/FileLogger.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/logger/FileLogger.java @@ -11,6 +11,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.io.Writer; import minetweaker.runtime.ILogger; @@ -21,21 +22,23 @@ */ public class FileLogger implements ILogger { private final Writer writer; + private final PrintWriter printWriter; public FileLogger(File output) { try { writer = new OutputStreamWriter(new FileOutputStream(output), "utf-8"); + printWriter = new PrintWriter(writer); } catch (UnsupportedEncodingException ex) { throw new RuntimeException("What the heck?"); } catch (FileNotFoundException ex) { - throw new RuntimeException("File not found"); + throw new RuntimeException("Could not open log file " + output); } } @Override public void logCommand(String message) { try { - writer.write("COMMAND: " + message + "\n"); + writer.write(message + "\n"); writer.flush(); } catch (IOException ex) { throw new RuntimeException(ex); @@ -64,8 +67,16 @@ public void logWarning(String message) { @Override public void logError(String message) { + logError(message, null); + } + + @Override + public void logError(String message, Throwable exception) { try { writer.write("ERROR: " + message + "\n"); + if (exception != null) { + exception.printStackTrace(printWriter); + } writer.flush(); } catch (IOException ex) { throw new RuntimeException(ex); diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/logger/MTLogger.java b/MineTweaker3-API/src/main/java/minetweaker/api/logger/MTLogger.java index 2b1afacd..392a3033 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/logger/MTLogger.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/logger/MTLogger.java @@ -76,11 +76,16 @@ public void logWarning(String message) { } } } - + @Override public void logError(String message) { + logError(message, null); + } + + @Override + public void logError(String message, Throwable exception) { for (ILogger logger : loggers) { - logger.logError(message); + logger.logError(message, exception); } String message2 = "ERROR: " + message; diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java index c16a6670..77ef8631 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ICraftingRecipe.java @@ -23,4 +23,6 @@ public interface ICraftingRecipe { public boolean hasTransformers(); public void applyTransformers(ICraftingInventory inventory, IPlayer byPlayer); + + public String toCommandString(); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java index fd9e93fb..13bb7dff 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/IRecipeManager.java @@ -1,10 +1,15 @@ package minetweaker.api.recipes; +import java.util.List; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; import zenscript.annotations.Optional; import zenscript.annotations.ZenClass; import zenscript.annotations.ZenMethod; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenGetter; +import stanhebben.zenscript.annotations.ZenMethod; /** * The RecipeManager adds and removes crafting recipes. The IRecipeManager @@ -14,6 +19,23 @@ */ @ZenClass("minetweaker.recipes.IRecipeManager") public interface IRecipeManager { + /** + * Returns all crafting recipes. + * + * @return all crafting recipes + */ + @ZenGetter("all") + public List getAll(); + + /** + * Returns all crafting recipes resulting in the given ingredient. + * + * @param ingredient ingredient to find + * @return crafting recipes for the given item(s) + */ + @ZenMethod + public List getRecipesFor(IIngredient ingredient); + /** * Removes all crafting recipes crafting the specified item. * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java index 2f65d882..7a18115d 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapedRecipe.java @@ -217,6 +217,39 @@ public void applyTransformers(ICraftingInventory inventory, IPlayer byPlayer) { } } + @Override + public String toCommandString() { + StringBuilder result = new StringBuilder(); + result.append("recipes.addShaped("); + result.append(output); + result.append(", ["); + + IIngredient[][] ingredientsArray = new IIngredient[height][width]; + for (int i = 0; i < ingredients.length; i++) { + ingredientsArray[posy[i]][posx[i]] = ingredients[i]; + } + + for (int i = 0; i < ingredientsArray.length; i++) { + if (i > 0) { + result.append(", "); + } + + result.append("["); + + for (int j = 0; j < ingredientsArray[i].length; j++) { + if (j > 0) + result.append(", "); + + result.append(ingredientsArray[i][j]); + } + + result.append("]"); + } + + result.append("]);"); + return result.toString(); + } + private IItemStack doRecipe( ICraftingInventory inventory, IItemStack[] stacks, diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java index 88c8522b..6de1c27e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/ShapelessRecipe.java @@ -80,6 +80,26 @@ public void applyTransformers(ICraftingInventory inventory, IPlayer byPlayer) { } } + @Override + public String toCommandString() { + StringBuilder result = new StringBuilder(); + + result.append("recipes.addShapeless("); + result.append(output); + result.append(", ["); + + for (int i = 0; i < ingredients.length; i++) { + if (i > 0) + result.append(", "); + + result.append(ingredients[i]); + } + + result.append("]);"); + + return result.toString(); + } + /** * Reorders ingredients to match the given shapeless recipe. * diff --git a/MineTweaker3-API/src/main/java/minetweaker/api/recipes/UnknownRecipe.java b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/UnknownRecipe.java new file mode 100644 index 00000000..dfe818c6 --- /dev/null +++ b/MineTweaker3-API/src/main/java/minetweaker/api/recipes/UnknownRecipe.java @@ -0,0 +1,47 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.api.recipes; + +import minetweaker.api.item.IItemStack; +import minetweaker.api.player.IPlayer; + +/** + * + * @author Stan + */ +public class UnknownRecipe implements ICraftingRecipe { + private final IItemStack output; + + public UnknownRecipe(IItemStack output) { + this.output = output; + } + + @Override + public boolean matches(ICraftingInventory inventory) { + return false; + } + + @Override + public IItemStack getCraftingResult(ICraftingInventory inventory) { + return output; + } + + @Override + public boolean hasTransformers() { + return false; + } + + @Override + public void applyTransformers(ICraftingInventory inventory, IPlayer byPlayer) { + + } + + @Override + public String toCommandString() { + return "// unknown recipe type for " + output; + } +} diff --git a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java index ab7ecb2f..a8d93349 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java +++ b/MineTweaker3-API/src/main/java/minetweaker/expand/ExpandString.java @@ -18,6 +18,12 @@ import zenscript.annotations.ZenCaster; import zenscript.annotations.ZenExpansion; import zenscript.annotations.ZenMethod; +import stanhebben.zenscript.annotations.OperatorType; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenCaster; +import stanhebben.zenscript.annotations.ZenExpansion; +import stanhebben.zenscript.annotations.ZenMethod; +import stanhebben.zenscript.annotations.ZenOperator; /** * @@ -25,6 +31,16 @@ */ @ZenExpansion("string") public class ExpandString { + @ZenOperator(OperatorType.ADD) + public static IFormattedText add(String str, IFormattedText formattedText) { + return MineTweakerAPI.format.string(str).add(formattedText); + } + + @ZenOperator(OperatorType.CAT) + public static IFormattedText cat(String str, IFormattedText formattedText) { + return add(str, formattedText); + } + @ZenCaster public static IData asData(String value) { return new DataString(value); diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/ILogger.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/ILogger.java index 2d5fcda9..7cd3934e 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/ILogger.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/ILogger.java @@ -24,4 +24,7 @@ public interface ILogger { @ZenMethod public void logError(String message); + + @ZenMethod + public void logError(String message, Throwable exception); } diff --git a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java index b0333dda..2d526a06 100644 --- a/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java +++ b/MineTweaker3-API/src/main/java/minetweaker/runtime/MTTweaker.java @@ -133,8 +133,7 @@ public void load() { } catch (ParseException ex) { MineTweakerAPI.logError("Error parsing " + ex.getPosition() + ": " + ex.getExplanation()); } catch (Throwable ex) { - MineTweakerAPI.logError("Error loading " + script.getName() + ": " + ex.toString()); - ex.printStackTrace(); + MineTweakerAPI.logError("Error loading " + script.getName() + ": " + ex.toString(), ex); } if (reader != null) { @@ -155,6 +154,10 @@ public void load() { } catch (Throwable ex) { MineTweakerAPI.logError("Error executing " + script.getGroupName() + ": " + ex.getMessage()); ex.printStackTrace(); + ZenModule module = new ZenModule(classes, MineTweakerAPI.class.getClassLoader()); + module.getMain().run(); + } catch (Throwable ex) { + MineTweakerAPI.logError("Error executing " + script.getGroupName() + ": " + ex.getMessage(), ex); }*/ } } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java index 5eea722f..9b18a09d 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java @@ -1,5 +1,6 @@ package minetweaker.api.minecraft; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -391,6 +392,9 @@ public static IBlock getBlock(Block block, int meta) { * @return MCF fluid stack */ public static FluidStack getLiquidStack(ILiquidStack stack) { + if (stack == null) + return null; + return (FluidStack) stack.getInternal(); } @@ -411,4 +415,46 @@ public static ItemStack toItemStack(IBlock block) { } return result; } + + + private static final HashMap oreDictArrays = new HashMap(); + public static IOreDictEntry getOreDictEntryFromArray(List array) { + if (!oreDictArrays.containsKey(array)) { + for (String ore : OreDictionary.getOreNames()) { + if (OreDictionary.getOres(ore) == array) { + oreDictArrays.put(array, MineTweakerAPI.oreDict.get(ore)); + } + } + } + + return oreDictArrays.get(array); + } + + /** + * Converts a Minecraft ingredient to a MineTweaker ingredient. + * + * @param ingredient minecraft ingredient + * @return minetweaker ingredient + */ + public static IIngredient getIIngredient(Object ingredient) { + if (ingredient == null) { + return null; + } else if (ingredient instanceof String) { + return MineTweakerAPI.oreDict.get((String) ingredient); + } else if (ingredient instanceof Item) { + return getIItemStack(new ItemStack((Item) ingredient, 1, 0)); + } else if (ingredient instanceof ItemStack) { + return getIItemStack((ItemStack) ingredient); + } else if (ingredient instanceof List) { + IOreDictEntry entry = getOreDictEntryFromArray((List) ingredient); + + if (entry == null) { + throw new IllegalArgumentException("No matching oredict entry: " + ingredient); + } + + return entry; + } else { + throw new IllegalArgumentException("Not a valid ingredient: " + ingredient); + } + } } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/MineTweakerMod.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/MineTweakerMod.java index 2bb003c9..ac1c9b28 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/MineTweakerMod.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/MineTweakerMod.java @@ -57,7 +57,7 @@ * * @author Stan Hebben */ -@Mod(modid = MineTweakerMod.MODID, version = "${version}") +@Mod(modid = MineTweakerMod.MODID, version = "3.0.9") @NetworkMod(clientSideRequired = true, serverSideRequired = true, channels = {MCPacketHandler.CHANNEL_SERVERSCRIPT, MCPacketHandler.CHANNEL_OPENBROWSER}, packetHandler = MCPacketHandler.class) public class MineTweakerMod { public static final String MODID = "MineTweaker3"; @@ -67,13 +67,15 @@ public class MineTweakerMod { "minetweaker.mods.ic2.ClassRegistry", "minetweaker.mods.nei.ClassRegistry", "minetweaker.mods.mfr.ClassRegistry", - "minetweaker.mods.gregtech.ClassRegistry" + "minetweaker.mods.gregtech.ClassRegistry", + "minetweaker.mods.buildcraft.ClassRegistry" }; private static final String[] REGISTRY_DESCRIPTIONS = { "IC2 mod support", "NEI mod support", "MFR mod support", - "GregTech mod support" + "GregTech mod support", + "Buildcraft mod support" }; @Mod.Instance(MODID) @@ -147,10 +149,10 @@ public void onIMCEvent(FMLInterModComms.IMCEvent event) { for (final FMLInterModComms.IMCMessage imcMessage : event.getMessages()) { if (imcMessage.key.equalsIgnoreCase("addMineTweakerScript")) { if (imcMessage.isStringMessage()) { - scriptsIMC.add("imc", imcMessage.getStringValue()); + scriptsIMC.add(imcMessage.getSender() + "::imc", imcMessage.getStringValue()); } else if (imcMessage.isNBTMessage()) { NBTTagCompound message = imcMessage.getNBTValue(); - scriptsIMC.add(message.getString("name"), message.getString("content")); + scriptsIMC.add(imcMessage.getSender() + "::" + message.getString("name"), message.getString("content")); } } } diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemDefinition.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemDefinition.java index 881d595e..b0a6d2e0 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemDefinition.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemDefinition.java @@ -6,11 +6,16 @@ package minetweaker.mc164.item; +import java.util.ArrayList; +import java.util.List; +import minetweaker.MineTweakerAPI; import minetweaker.api.item.IItemDefinition; import minetweaker.api.item.IItemStack; import minetweaker.api.minecraft.MineTweakerMC; +import minetweaker.api.oredict.IOreDictEntry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; /** * @@ -38,6 +43,22 @@ public IItemStack makeStack(int meta) { return MineTweakerMC.getIItemStackWildcardSize(new ItemStack(item, 1, meta)); } + @Override + public List getOres() { + List result = new ArrayList(); + + for (String key : OreDictionary.getOreNames()) { + for (ItemStack is : OreDictionary.getOres(key)) { + if (is.getItem() == item) { + result.add(MineTweakerAPI.oreDict.get(key)); + break; + } + } + } + + return result; + } + // ############################# // ### Object implementation ### // ############################# diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemStack.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemStack.java index 9bc56f1d..aa070b9b 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemStack.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/item/MCItemStack.java @@ -6,6 +6,7 @@ package minetweaker.mc164.item; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import minetweaker.MineTweakerAPI; @@ -24,6 +25,7 @@ import minetweaker.api.item.WeightedItemStack; import minetweaker.api.liquid.ILiquidStack; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; +import minetweaker.api.oredict.IOreDictEntry; import minetweaker.api.player.IPlayer; import minetweaker.mc164.actions.SetTranslationAction; import minetweaker.mc164.block.MCItemBlock; @@ -65,6 +67,13 @@ private MCItemStack(ItemStack itemStack, IData tag) { items = Collections.singletonList(this); this.tag = tag; } + + private MCItemStack(ItemStack itemStack, IData tag, boolean wildcardSize) { + stack = itemStack; + items = Collections.singletonList(this); + this.tag = tag; + this.wildcardSize = wildcardSize; + } @Override public IItemDefinition getDefinition() { @@ -144,6 +153,13 @@ public IItemStack withAmount(int amount) { result.stackTagCompound = stack.stackTagCompound; return new MCItemStack(result, tag); } + + @Override + public IItemStack anyAmount() { + ItemStack result = new ItemStack(stack.getItem(), 1, stack.getItemDamage()); + result.stackTagCompound = stack.stackTagCompound; + return new MCItemStack(result, tag, true); + } @Override public IItemStack withTag(IData tag) { @@ -222,6 +238,9 @@ public IIngredient or(IIngredient ingredient) { @Override public boolean matches(IItemStack item) { + if (item == null) + return false; + ItemStack internal = getItemStack(item); if (internal == null) { throw new RuntimeException("Invalid item: " + item); @@ -236,6 +255,9 @@ public boolean matches(IItemStack item) { @Override public boolean contains(IIngredient ingredient) { + if (ingredient == null) + return false; + List iitems = ingredient.getItems(); if (iitems == null || iitems.size() != 1) return false; return matches(iitems.get(0)); @@ -265,6 +287,23 @@ public Object getInternal() { return stack; } + @Override + public List getOres() { + List result = new ArrayList(); + + for (String key : OreDictionary.getOreNames()) { + for (ItemStack is : OreDictionary.getOres(key)) { + if (is.getItem() == stack.getItem() + && (is.getItemDamage() == OreDictionary.WILDCARD_VALUE || is.getItemDamage() == stack.getItemDamage())) { + result.add(MineTweakerAPI.oreDict.get(key)); + break; + } + } + } + + return result; + } + // ############################# // ### Object implementation ### // ############################# diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/oredict/MCOreDictEntry.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/oredict/MCOreDictEntry.java index 1373d84d..be865291 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/oredict/MCOreDictEntry.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/oredict/MCOreDictEntry.java @@ -187,6 +187,11 @@ public Object getInternal() { // ### Object implementation ### // ############################# + @Override + public String toString() { + return ""; + } + @Override public int hashCode() { return id; diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/MCRecipeManager.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/MCRecipeManager.java index dfd5563a..5ee8ac31 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/MCRecipeManager.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/MCRecipeManager.java @@ -9,6 +9,7 @@ import minetweaker.mc164.util.MineTweakerHacks; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; +import minetweaker.api.minecraft.MineTweakerMC; import static minetweaker.api.minecraft.MineTweakerMC.getIItemStack; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; import static minetweaker.api.minecraft.MineTweakerMC.getOreDict; @@ -54,6 +55,32 @@ public void applyTransformations(ICraftingInventory inventory, IPlayer player) { } } + @Override + public List getRecipesFor(IIngredient ingredient) { + List results = new ArrayList(); + + for (IRecipe recipe : recipes) { + if (ingredient.matches(MineTweakerMC.getIItemStack(recipe.getRecipeOutput()))) { + ICraftingRecipe converted = RecipeConverter.toCraftingRecipe(recipe); + results.add(converted); + } + } + + return results; + } + + @Override + public List getAll() { + List results = new ArrayList(); + + for (IRecipe recipe : recipes) { + ICraftingRecipe converted = RecipeConverter.toCraftingRecipe(recipe); + results.add(converted); + } + + return results; + } + @Override public int remove(IIngredient output) { List toRemove = new ArrayList(); diff --git a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/RecipeConverter.java b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/RecipeConverter.java index d3ec2d34..aeb85db6 100644 --- a/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/RecipeConverter.java +++ b/MineTweaker3-MC164-Main/src/main/java/minetweaker/mc164/recipes/RecipeConverter.java @@ -10,10 +10,21 @@ import minetweaker.api.recipes.ShapelessRecipe; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IItemStack; +import minetweaker.api.minecraft.MineTweakerMC; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; +import minetweaker.api.recipes.ICraftingRecipe; +import minetweaker.api.recipes.UnknownRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; /** * @@ -121,4 +132,55 @@ public static IRecipe convert(ShapedRecipe recipe) { return new ShapedRecipeAdvanced(recipe); } } + + public static ICraftingRecipe toCraftingRecipe(IRecipe recipe) { + IItemStack output = MineTweakerMC.getIItemStack(recipe.getRecipeOutput()); + + if (recipe instanceof ShapelessRecipes) { + ShapelessRecipes shapeless = (ShapelessRecipes) recipe; + + IIngredient[] ingredients = new IIngredient[shapeless.recipeItems.size()]; + for (int i = 0; i < ingredients.length; i++) { + ingredients[i] = MineTweakerMC.getIIngredient(shapeless.recipeItems.get(i)); + } + + return new ShapelessRecipe(output, ingredients, null); + } else if (recipe instanceof ShapedRecipes) { + ShapedRecipes shaped = (ShapedRecipes) recipe; + + IIngredient[][] ingredients = new IIngredient[shaped.recipeHeight][shaped.recipeWidth]; + for (int i = 0; i < shaped.recipeHeight; i++) { + for (int j = 0; j < shaped.recipeWidth; j++) { + ingredients[i][j] = MineTweakerMC.getIItemStack(shaped.recipeItems[i * shaped.recipeWidth + j]); + } + } + + return new ShapedRecipe(output, ingredients, null, false); + } else if (recipe instanceof ShapedOreRecipe) { + ShapedOreRecipe shaped = (ShapedOreRecipe) recipe; + + int width = (int) Math.sqrt(recipe.getRecipeSize()); + int height = recipe.getRecipeSize() / width; + + IIngredient[][] recipeIngredients = new IIngredient[height][width]; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + recipeIngredients[i][j] = MineTweakerMC.getIIngredient(shaped.getInput()[i * width + j]); + } + } + + return new ShapedRecipe(output, recipeIngredients, null, false); + } else if (recipe instanceof ShapelessOreRecipe) { + ShapelessOreRecipe shapeless = (ShapelessOreRecipe) recipe; + + IIngredient[] ingredients = new IIngredient[shapeless.getRecipeSize()]; + for (int i = 0; i < ingredients.length; i++) { + ingredients[i] = MineTweakerMC.getIIngredient(shapeless.getInput().get(i)); + } + + return new ShapelessRecipe(output, ingredients, null); + } else { + return new UnknownRecipe(output); + } + } } diff --git a/MineTweaker3-MC164-Mod-Buildcraft/build.gradle b/MineTweaker3-MC164-Mod-Buildcraft/build.gradle new file mode 100644 index 00000000..57baf321 --- /dev/null +++ b/MineTweaker3-MC164-Mod-Buildcraft/build.gradle @@ -0,0 +1,42 @@ +import minetweaker.tasks.RegisterZenClassesTask; + +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.0-SNAPSHOT' + } +} + +apply plugin: 'forge' + +minecraft { + version = forgeVersion164 +} + +version = "1.0" +archivesBaseName = project.projectDir.name + +dependencies { + compile project(':ZenScript') + compile project(':MineTweaker3-API') + compile project(':MineTweaker3-MC164-Main') + compile files('libs/buildcraft-A-1.6.4-4.2.1.jar') +} + +task makeRegistry(type: RegisterZenClassesTask) { + inputDir = file('build/classes/main') + outputDir = file('build/classes/main') + className = 'minetweaker.mods.buildcraft.ClassRegistry' +} + +tasks.jar.dependsOn(makeRegistry) diff --git a/MineTweaker3-MC164-Mod-Buildcraft/libs/buildcraft-A-1.6.4-4.2.1.jar b/MineTweaker3-MC164-Mod-Buildcraft/libs/buildcraft-A-1.6.4-4.2.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..c31d77fc5756f28c84caefff3eec24b9a61990be GIT binary patch literal 1394344 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 =r5Zsy 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 lKtXr4$MIJe=G}iKI9D6B^g+Q^6z9~?0&njm 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 z z^@-NP>-p1+B6eNRxmN(UVYnztjYN%;&V2N1$^kRc8AMSiE6@owQkca@%0WeN+b(4S39Hpi`PsB)@`)uyW!Nz#Yb3qQnAlo7NLN%7ito zeaBe=Hqi!9w(~2l;-Wt$u@L;266}`Tj`PnnSy9U+`RW3J{<@bq#QwwjEb5UfYXbfw z)+~2tFjb7rA&74?K6;#ri3zS#;U`xH?s>w&XH+a#chQ?2+;;xd{!ZcxjWJWhqv+NUwv0IQDeHf&M=Fj3jFy39%sHEzZzjGa!8D% zzM;p+I%p1M&|?{>D{7mpY7c|H*O-DiaP45i*zKt(#he?OX+PlLSOkX;^=9f8Epd19 z&KazpC_ZRb;6ziwu}2Cs*38fDJ!rE&dA^2%GJcxRQO00@aJV3=N4oO`blc3ZUND+$ z>X&~?W=A;v_Nl*=ddA%sG9IM>3`hXr7`~OsSb1aNj&Ot z6~0!lgZEe*$zmb-&tXK_X|TTMJF@GH20K>DrE$?Al7IY)-mrxwFgU@lw+m%?9NH28 z?ag)QwW%r?V#xX$0L~>}Z|x{B;F=P~(&7Kt2n{V&)xN=#u)cr<*83Iw!WRF?kRY0J z%KoLBx0x7ZHTl5)@HYck?Vxpz6Ug@%65_gj)}(iS^dn7^)nr4|}`kqvjHciuTT}OitRY^Qenv)Avydrj)r6{;c|eQ}NrE`gl?hmYtL&2#nO>%*wIdf4 zzt&{f*pIci{h7qh_V6RG=gD_cG5U>y5 zF3?x`Gla~({^e(bbLTi$SyqYR9_S;BbEkAp_G3-A-di7u(pjnMYAZCJ_|}X&6pFiW z2B~PnJN^2L^bVOH0W}#J8U}7MFUY`#8enf3!J`Fql%!;bpuB2q{Z($z($Z|&{C%BR zKu3=B3VwB^F1Ag5L`Q8en8X|wPCPi5FNX2MHx^qQ**I!Ys!+Iy8|T?juGw&Z>v*!q zwWMH_TuLZ9#5?(QX#5els71ehMv+8(eT(`Ijz3*`Jv^pU#O%I+6C8y+MYg>5+yw|3 z0C_nD%sZgq_2&33H5e>~QkCGBN}4tIMQ`hu=}(QB7ckmlp};Ocqf>r#nvb8A2Anv- zP`tnw;exL5H%^Em_{+>stiCr>+B?7~DoChst499cqV0f`k&fe$>Q7en#hoI)&N^|# z@tLKH4Op~1J#MQ=Hc^Rve9)&pCRb)I>HNk_?w{$KC4eIHmn`wgdcafp@vmToPzLf7 z?Qv~k((hk#ovj;YY_9JdJ(^c#)hVsQu98>#m3jfqqjVc1 zDQZ!*v1G6l!bhQFC$dEERZRg>B+85-J z4Dh$jeAdzmf5GyEjM|!^08+n=)IU3xQX^VbA5&l|;;cK11nIQZykM%l0*ly~0^aH( z@LW_B*>2ZO$fP9^ZFxKJ_x;Cqr87L1N$dNWDtF_R)fhFM_m*sBBqdGPe|c!+cTk?b zag|i(_q!MKs9m~~v*~LHYq#+%?gh7Lk&k-#b%5{e!hz^e^%L5O1-PTiqHC&~mP}-4 zj;b+G1Y2l6IF~lCBY-;vlERbM&M94*tZy@gKR}q8##C1bxce_Jki1CIRP36UU}R@v zB6yNY|FznsDcKpCS)uSkO+8}1(FUGa+zDG?MqSI)SSRba{9!e_S_{@GgqU`y@&Vss z4+OuBoXz6wYhlv0lI--Zt#ezrC$*Q=b6KS@r5C|#AK$}fg7{CNBig>WgIZ&hpNzA<$?RtpV1C%RyaeOpixh)(N(p5C(rk!m5w0Bs8#~l8PWqNF73Te zoGU-^E|eR4S}c|^BSU_S2h9y_|8o5aQ~w&XedtV>p4w#KII8Gu)-M`k@rO|`Zf#ki z6Z{t|5CC?sjvU8D;Ccp+J;2^Ae;?qeK;bPLR28M$MZi8yU^+)_V(J$4l>vv~gGzXqp7OK!j zXOE^R(lMaS4yt>ykNBO;ixD6JP6;B1fQ0v}Q=;2ivfpv_($>~)W1Bk1Xd#P`CxvsS zbR}mQJ!{)R^FUaf%)_~wR(hfBG4->PfUlMu_aC{6#;4BFFrp*3T*~;9m;ua@42`Og z_$zquF(Zo$djOdSB_KRE^%HCAxgb@vaGeQt8bu~UQC;Vv>4`c#DYwFmDTb>~>)sW0 z(uA|BL#p`o_CSR8h#{zag1cRLCdpe)wu*O+&1XaquI3LzET?Y2HgYD_=4LgptFz2B zNbtX`O_{vdRRyAWCnAMMF`KSgZ^}ZnF%l1|^c8DRy4aKv>n`PYz1fNUsMxf`$LHYX zAloc)l{^AB@+-Z*)pp71Ov)!qCF4}wg@AMr!1~$11XG6#%GLS$kg3~C#R+qp^4D{N zwNGjFvwWzoSv9bC{-!N+x23O;Q!iRX4=of+`U>uyrniGjK4%@P9LfE&g}iOr5tq~M|(Qh+Bl@b`nE>>IxtGfjwcvNo6EC?q9VT@XO`E-xB z74L*v2@)5NL+J8Yk*n{DWhacCVuL%nd!2d|L8%gjHjW*qj3-Ds+tEE$>R+pR%(M?; zM5*1|n=-bVyD^J&PUFE5EJNt%hJHcab45Khc7L!oI_6BywC10x9K%>2S~cV@`H~*2 zA3w4Vhk|hvtdrJX6`x=Q8l|ema^xKzAw+%jn=|U#s|Z%?=hRcr_7ooz1N3(pgYeZEOUf8cXlz2cS>KO* z(IGao@g4bUzys1F{t=pd>!g+&O#<5U*(|&5ol`;wrync8mprjlJ#(xgk7Unk)j(Wp zYuoCE@nQu$(Vqm$5xs79954|N)Wgg)$}tRvKm9vbkNWcYtjDLn!C}ZmXy=m!D-H{& zDGGpw-+xzB9$XnKsp1I`b@YnPQRwIwCG|Qc_BvA3KvDBSSW6?Wt`gTeNSspT3p!EA z3lAOpaLdroL?|2XCeer09*l){cbQXV3X+YXm6Y;qJyN}O4{)0e=Qh-KbDJ$-2ie&s zHc3@L&+y*U(7)p{AIO1_P~&j`-4pTK60mJY93M5!pLv9p*8@^ear1{f-ha_dU5HJ< z&PrO;B<3yMH?ZE|FJa^3fto2FT@}5nuDknVGW47wXbAEJ>um@~nkl7=^F=?iOOD(K zVm~OKhuAy;jRo=Rv*v^fZAM>xq7>8ghoS3sF znb=S{F?br2$^E`VnNdQ;jnX>J#7WK#J6>0P=Y94;%B*Z&NRd6Ma=&!XrFPy-DAO`u zaa~V6K|C(_;8>3y*_z*!d(rj0uwm~0`s$XlYYP(1|MGwMCOW&>`2HR(X}K&O^QarE zc1bI2+Off9#PnC?Yz=##;QGeh5#zHdIGJ4Uhsm*Llq1QWl+Fg5v%GYsF`3PPA9i65 z{%6ARy)A+b)PghE3U`2kuMlnjL)MU1_-JHVnm0>I)5?>aSOVrNG7tpfZ5net{P6#OpDf2wy)Df_@8oyID zaJAfie?1g@OfDS%UKtm;6W*6h^M>Hhx@-mhJzrd-kgGf$#?mqYpSxar4y0!|bjxg- zPdDT;x&$6W|B|5CNsM%l1)0g=lM&`xn#%3@I;yOMc0n1_&bZYcv&A(&9B!ps`~`yl ze2CS|+$8q^&ou=mOvP5flNS3yLg&}!3&(h>7!=&<^=N#8$?xps5wO;p#yqyyu*N7Q zR#$IKn1g~sMfpNsZfKgl88C=VKCnL`&NRv2oS5P(LW8#cAYBNMen^8CsNpMBwe}kU zXRN!eLCdqUkh8Y$v|BQ0vvBkex|5#-rkimHUU$#<-!Jeyf^ZAG>vA*lP+h`RkC-^c zY-bSfI6M+J3k#ym3lua~`eXjM%-+Fa=?xz4m#1WyLE%mp-sjkSF2_j%Sx)B^qNTYc zY2KR{LU#g_^f_LFp<^7Q2y8ZKL=2PM95?W0!!Cs>Vi>FwSgWuRuB&+sIiccGvD1&u zx9Aov_6AUL=6q0L?@kAy)f|1ZM*@}*7HJ}M{j*)bHIIy~Ka`)-GiT24Ad}k{hb3&M zT#r@*P0I6P<>E1z0bj6@Qtr6NQGK0T){EA4Givu6X=KAKk*?VoIL*<=)i}!3&vzW0 zLkwX9>r)vN zC*jO_e1Mr=Az0?{`ZnY&sC+=R{r;r#2~qycPq#n-Mnha&=W`gkyTCal1a86{y+1tO zTpcgEJVCd;X|$Vi=4%U@sxg9G(VggOag5uZ@$*EXhhfM%0<&flncnED4e;*Q z5ZmPCJd*~@DMr_Aup{!uKnDedfBYZ6kyO8S&|mb_<7XU1^=9Qc1I16Q)Z>eoamG24 z7_xMf$7}(nf2UBl#w(n;%I0LBXLYh=-HL8_&2I^&^U>Pqx`s0zLE(zwUWuK22S%IY zKQY;gV+ZR9h;7D$zH_;feNdkF$l9kEQ_ot2tUK zB~F1%VXdxr0R;E;aXl9sLoYB6Y*+b7&Jk1&t`Qq5iS=QijRT6_B(y5~sw5N{)reFJ z}OCrkWS{?mVH%kI@!ZrtQBxP1fSk&1%EdP2(nYX}tRcx*IJ4UDOk{dsJ@o z@(+`jZCURe%YWtK3$0fIdPJ za$QKyyt?0hLCb2W8D6~|FWbDI=GsxN%S@9o`&;e;->?R53sZQ4+8KLK!;b54gyDLXOwsI%p3r-c;Xyp*yDZ!4Na{~!8e5Bb`^+l(# z$u^pFzVG-1k2=d9;M?=*1i4mBc4C{S4CHG4ZkE*)?m8CHzFp@eaP{@EcTkmF>775Bx1zv>1y6JG%r+ z{H~Zt^LEK{jCwt+p|S6Hf3MXh@@e7=#YdWB+_$i=_Y z{9Uc!NfGMD8#K44*Qs>j;Qo~s1+I``%JK$W=fh3QwV>WR{ST6 z;jv=hY30~pUn||+e<$^rtMsj!+0QI9tmN$j_51c0B04i)BB>wslpOS9fNPh!zfWp^ zL}VicFt*dtPaPPBmaNh%2vL-oBEir6=)NcBR1KB}vf1V_x$l7Ap`20Qq{b}czNTYC zp69J+`h_Rv;P3IH80A42W|(#bNHZr+?QzH0*$nKGCvRAt;jA-D@f#O!+QVCJ_TY!J z-`&3$-3fT6(B`N*W48CBVkXs#qq++lc1Mngmef06+A9>{mnH(fI9&Dpka!7ry*fgE zNW29fbjseinBlmlcBC>_`tzXjetoT4_!5rcWQM)o0aU*QH+%OPXg*7@*>iUq#Y)$v z+Z|jNxi0xPQ-3r3Fqg&;(PIy$1u>`vGN=)?w}pz{HZjN602S4gF@E#X>|>olcSA^e zGA-TF3@W}kJ(uYQ`-x;uKV(1l(5N%)oo_6d7}4%PuPsWSVKKXhuUe?#Vpd7omBBEa z3Yf^an6>2<^;5qX0l*d(lm8}eV;IZ1Bfi-`MV~7RkW|i{=zEhXwYzh_yK&n8z z(U!1S7HCEvoJ+k~MrcY})aGkgVhnr0>sPBz#PEy+48rmzK`lX2pv>t{t5C(T!ki?W zLl?;ydE{%FG@jwEn+R&Nb;-a0B&&uk@fI{JVN@F)yVWBv|HdhZx_5`|hP|@NJArXe z%AQZT8FcBWTd*y+g00?^NZiVl+=@c&hMn)aVeTsRi|1z+5VGC=4%Ud9GQYsHQwpW?KbpH&NSW#BE=I*ijT<59x(>u8Tu}k zKoHhUzwieV8!9+ri_%Za!iyWN?2{~cTskH34~)YiA9>CX z#MK9yJumzS2XE*?4s=3?Q%V${*z`9D{3m^EK88I;*2UqrBKrDV;WMWSo}5+!nd<$X zIstW^ZhBVjsC<#sj{iSYu@c3&awcdcGG+nwxI#rJ8?7RbmwzzW82}yPpKyLzw&WGp z0H$Q7z)IeoS{+5A$r4^X|BHuO+6OmdfcGi9!X5wwwqyjhNDJm$+FB(y$NPw_LcBa| zilZo}{G`Gs;UUPQQzCLld|1O6(O}Ug@=)v|&*LZGwGQy5P|sDY!Bg%@2wW$s=a2Gi zsqvIE9Vi?5y}$NC_JDbqoIT5A!y7p)3w7Rqit<~)=^7!=o+_JhaSq_yn=5Gw0{+LOgEUSQg) z=%Ao#5-v8alVEj$L#oG}?E z#0$j`;#VfH&xmGGnuK`M<|TGzp0OsK3Nvm4^8U*q?ZKd*W*op=OEjBd3el87K{_nj z&Q8p*4cdDIytymDs+2o$ig2abk~+Vr8JX$MAyQQaL#o@nh~6$1r;J5HDj&9CozD4J zEQ4?y%F>@#Brensdt5H7RnzG=pLL-HTF+30Y_QGZB}rSnVpjlD5GbIVS^7yxJ5eG@ z#V-<&WZr-&thET=E(lYyu}HsOS%1di!uaneRa36;=#?Ub2hd*q_P(wdzLQt!1p$Q1 zsSR~1$DCBcD_yB6wTj4`oGe27N=+TgEn0tPWlsDklzfIzDm8PeJc%kZgWkaFLtVo)>(X;Hv0QOZoVXf;yJwg`PJ^uCNs+vme1nL7PGh?JDXdZ^?oRYU8(hG ztfcs1oi%*JwSnxb*RT9y+rFFu2EFhQ1|3VYd%twyNe>*rs6ivK1*6+l|((s#qIP#roh%aBkLNI1hl19O#*6y>e9@bs>{@L>j+ zhr;HIjh>y0C(stCIlWg8Hk6D6#tM2+x>{cqL15|?lP)eRu znzrLyZCNrk>O=7qHP0I~^7W_BEP6b)aprBE|G~|t6_)lzm{C2s^LBw)sg#N_PL-dj zu}Cj*dIR78AUfQmv-l;b{OJ~4{2u?O*V`C&j>clY zY-6uQi`@tADMD{)bdSb&(BV!IW+TC@8Z{wNDzzdFy{0D3t(%@aYDCcFpLrw0-5|f3 zxTQVQ+6CrGWo1s{+!M39TaK&}%Yl|{&e?@21)w!WyH))0JPCR>Gh7r~>b^J!P$OwS z;Eg5GBWjV;yp})mmF&E9D2z=aK2~l?lDaAu2ydxJX_VOt3O@id^^u8QdRl)ye=w|k zajdR6%51(OWoCFhUE+WhT0K;K>HFS}J3ao5&!v=yBE*5i6l|m@V`DwH9aeELq+pqy zRM8Ham~8J*jN7ke!;OiF6cw6$jSX2rTM&Ze#o0619y6X;V_rwW5z<@=+1resScp5m+C~ceNe+9C;md`d^JH<%0y>~q= zkZSLSCN|vu`%HqcUhTKlr|ZT-pX`Pgj2*!i@&E(vu(p~Wj_ruy2x08>r4LdA;m<T9r79 z-Ng^%9bNi8j*qPwKxd?&J<9$Y$Zlt8=R=i?PcCog_lTdt6?2E7Na)V6VJPqPQE_rP z{P2C_m2-x+ylLBEsG=R#mRwH#-SS3-vMpVM_BCv;13F1iTA|Q;TEFWZvwjA_ODWBJ zB6XV8UnqMD!M4YBLT44+#k9C>btI*>C`?)Mz{U(_%`)N^4!cF<;6i>F7 zdT~!Gg*FF;TRdpO;_uDT#)T!eMKPR`Gfiw1rI6)D;SP%w*@C9^Le8rK8O|KqC7x5% ztt{7bXiw#r0-<(1o)V@rkF7l2WuQ|Sp7`yBpi?ED^zW*$`4vz0msuhXp*Y6aVmb{y zrJNyMsTAmoCzPohyQls=x)`bR;Z-&PBWyV?PF+$Sg1igxr}SxEu@m{wX_3!#u{TfY zEU}5OPn`VJ)qY?9!*+ZkyT;^Ar;=6PS)9s-%3!LS=+;@&Q!ALDxqZ^c#sHnLR4#+7 zKbI?zn)NoGT-)GoxJG#d3-5uia_j@8+MA?6WNw_IOXU%wVl07Hz+se_Y)sTf?Z}+CT&u~s8 z>~04c!n>wI8X0RZh-0O9$DnVGN!vq2;#wr9dE~K1+ z0xBrpG${BPNvVbe+NNTDeZVB?U%D~AFXTjjvsP|sim5=(&uqM@zxikhA4jS|Wc5XH zJ<4VeSW+&!Wo~40G>Y#mJ!$IQ2*L$j^vriW@$5R#BHw|fR~{^xmEByY3vt4Dlj%sN z(h_0SdD{u!WrVLeJy|FRv$qPX8J2`7*Ptmh=t}R*Ntt79*ZlhA?82t(3530%d=JvK zX#~3~{DP6GeXL4-hZlI}A6x_pukI-f37@`>v2uznz(%wW_f&a`hf~vh@`;-d2_(83 z$b+1HD|Y}t^W+;-k%D}JUpvc*L}vtAEF);Tlmoh*?EjE>#ft7BXlRJ#D*qZ!526kl~IV1sO9<*AiG!)3uF!K8*OTJ`~ph!b+ z0ZH*lc*$Fj_MFs$4W0U&$WLmd!9g%Tf4*^dv#9yO`166u=}nG*4)&Al%m0NXa}R~- z7c8j?1mHzwK3n#$D0pAv0Qhl7Ga*g9ud6lj1&@Wjk#+I=+gsE)61tmb<qpY-&m*RK&b3x%v-+40b|YoRX|q5?*l0=k-cZ7yUbvJ>gQKb+0% zE|Tcvnj!_E8iEZF0HyRB_Z7+3EGRgW2D~xMsNf51b(-pgs}X^OS``{z&E}CF;bN@X z+@#PJ2&}Fmy|LGd7Oj~yEoV|V1LpZ5Xi+EF>qM}0Zs zrRph|f>g+pPDLEi^XwW#n^abSd6O~J!{){BTeCmo#?lXOj?Z`K1MFfe?oGp9NOcb( zbm^mhLysrG57}m64Bmkq>3b(oxD-eQM!9Xyq8Op~C`5HKIw3ybp!n~sE6je`LT85d*c1`z`Jv#<>!88LI^mip-;KOfDHZYE^nc` zK7V-MPdKfu34E-wLUzF95mZFC43KCe+KjgPi;oI&P4e6+7ECbg==&$#uktqE5nTm*>`#W-*5xn6|QZhE2K>ERG^Cl<$b- zV&4;-G3wcv5E)Pb z9%KZV!B9bmQtgb@eHgC~leBxLyE9xZ5ZbE+^=3=Y_+|esj%|DUUMx7#ex0BIf4st` z66xVSIMZ-2Fng`_TvN`Wj)@Jl)8UWn@^U45RA`v@uDf1UovE!zRjfvIbb|D0%T6?Z z1y}mz%cudK04p@+7D{y3;T3ulRn;eR=igP%@iCbB9cQCfWy98#E9ML|V+GKfLyO95 zv~#DB9s^&rtJsxUn^zSKcw+K|^Fa%v!{GDXW+voBFXl?f~D zRLx%fo+V)^wjS{&+9h6OU`kg#4BsCk|NcKj{mdiYHALXTUjh&~z}_VrG*&f*<$pm! zJG%>NXBOl;3Y)i)9?AJa$5@=2r-@1m=5z0}F=XBn)I+V;Yxea2jmv%Nsm~W!9*3W#EhTlVnQ*s4J z$tJm{r;*4gVsP`paGb+Mdqw=Jto~@1){s}G&Y(@KK6@4Y1Lb@LxNCwrXk>mru}-34 zpoa(R*xc6=grf=+7FAec3gq?U@~bN6@}!8y%^x88`u#p+I1F{@mkUK?8Nmyn*~La# z81<)AWv1{P6E>dH-IA2^vmB|sztd-Sv|n8cGzg2nd=xQ;WywfwAk~Dq%PpZhnq_*# z)}}_kfDW#!aKr_+^ki56YO_oeompT26OUt>iUk1!6$&^u-V#d}QRrjgEGU~xvR8si zt~=I>U$sCsJZI^VAyJKyjqvIbrz`Nnygldf@30g4MGJx=9cq>I>jTn9C31d3{E9)` zm>H345f-zn(CD2iMs@ZLQCLr??3bOg4=<&P$&xTAYh<}*u^D_!w?K^~#1E+wfu%oR zlZ{Ect)L(7jJap!@Z0qv4D0R}jL(FC)0tfXD4#o6XB`8S#bbMQsGSrPr;JD1oSTz5 z>lY7a>6!fM86G@y_vmh|=npx-GpIW*qFbMwIKtes;~L;-^(ge7K>j`wPIkj@Opd*B znl~u4o$n`#7aa%>^BN>B=z{qrJn~9+Yo@&1%7z}>HV`CqnpRobR^&cAb84e7%|)?! z!SdcV{iU~;cAKtR-sRT{g-caM2XM#|?J4$4a=yFq$CR&Od6x^|%=(sc!92LU&9x1C zL1^}Mu#fRAsrg|!KbEJ?xBKI2j_W!G+f%SJ4*L_89}rwe5F83#J{QJ$`hzqVR;Yk4 z>sfd~?GrXu5F~bU(PFM>Az_plv#p<9g=4gi@Towp$YQ$UY!q&j4YF_#4UP_}TS5pQ znY_=PzpmNDZp!N_BKTgUp^RDVOeZq~vB%@Evi!8Qwf&ts+KaC}Om~H6l^vFw=fFH2 zg7axJH~LG}BAf0Zs}(;hm5C-hG9||>1AN*}UE?MoGK!2Hy4S^nb;iM-VP>k-l1iqE z_yNLVotbt|u^}#CsD~71RfR}nYLw;-ZVcMRJ#9buhLv2*=!}7tm|MV! zWZcpqn)~~0xD#EXGkx$nVp2m6fFYrrpPqA&fSHlDg#m7-JswMBGAcfAq^E@`*8aI` zdv&?DuXWgpoh(i5L9?7II^wb0X(QLC{A_n^^1?(1iW9xp;&}{%c$dvm>@Ar>)Wd+P zC1OU8It&VXJe@J{Xw{yOARb7%VrXh>Vf7aRut}6x8yT_zmEAw05&mJn5Rg}}gK8da zZz07Rko*sN{=Gw341`4Snv~K~V#Ne?{`H}huoAoEv8PbMXn<*+FRLbVb=J9a%ATA@m?33}*U)E;qnyADscC+sO z&s^+-g<}*ibr1O%(Jn47Pl!(`3kU)@dK}|*+TD={?+WUEBzX3vrD;w^h=az+MwkZY zyirVpjacv&n(`F!&hbHnLJE5PEYCK8ggTfr7REPAG3h=YEc^x9G=BPBo>fkIbTJ|Q z7ctgT5VzMKfzz`;^MRgfvz|-wY{hqGkITEF6qjt_X1=HeP-RJRa@Y2H!4)UgvK}2} zfeD9E+73`VlonU4tucIKee7nMe2bDq>MYm#%zJEGq$zV{@7G1VRCimjnPV^XRn^(J zHxS*dSlQQ3vx48)mt5( zg_paFbtX)G`58YP_8Nfgn~o5~s4LgveCAh6l4PPX}F0^{f z6;wYafO(`C>-|XjmZ>2twba$$O2>4aqAW5=Mn8>DmRngN8k0uFnHV>4u3LGHaet?> z`d^)qP@JO_Kdx1c%eP1Q8&+=flTu$g4M~8h?Mnd z`jyg@DTmD5N38~?Wx0BrdXv>PWbu+|3q2_^I zhgWht=@96o+vra^QmZ8=_jy@YypQrXMg&Ly?l#vOg_ATo`-gg0x9k2$?4`<7@BHvK68O|G-)9*27Ph z;S~?+VP%udxKK|S&bXG&G@=-&wm7Z2VtMqfRYQ5R_jSys){I6;7z`1K9LEC^wgWpkuN`21 zc~Y|mCrZXGI3!u?gw-0!3iYzY-mla;dkM^H=)F%0o|C(E z3PB4XmMzF^vl{AKyB5HCDMP=td*Y$lcwv_! z*7?|F^-!-!PD2pzrR4X~aoxri9XNfA0>2%DFVnxR#*p>Wj1%)$h%9 z+=4BQo*>?J1AXH&^4Uz>1Ghby-%w}xa7x_7PO&k*{|pR_sj=oTDBt6`Kkcw>`2}OU zKlCXy-MQVKBL)Py{SdjsCdsfqR5YCjUfy;r-*0}1mG`fn6d_PDJonM_MZiGqYgMk(;N_RB#K-)Alda&;Nt3kd3VDQ2{TVbQ(5}ZeP>%3dhaJ&{ak^C`R+;T@l|6XM;u+Wt6VwBg z)FUTH1(z)n+rJ-IJ}KL9g0>;a7{yyy3a$QX_Sn4lhfN{0{*@9Pf8zPCLAqK+FS-gD z`@z4e(mGe6WEExPa||6-H}RaIoG!k>+%7s9e0{_PBmW4Q<2X7J65Si*1f8%odXhBc{^D$m#!B1q19KFcv@QeH z<{!pqg+J+|j$98cX4nJts3~;XDrc#P8>zfSz$aw-oRC)XmYd=lJvVC?MDdcu5>Y!< zbKJ#dIdlE*QAp?L?D3yR0^yyYL%ZIep1AdQpyF0Mfg-+8!1f?uh%~V^pjb3M8B07B z0zSF}QJaRJelu4;EufecM6hVtzUYk|H758zQxQd8qln56GwPjA_(u4ds*ZP*AGALypv7G7KxI}P}hxZ zsasC7s++9=7xz4`Cm->%{E$usp(T z)75416Z@v8SR?X|t} z|I5d4M~&rhO2o7Y7WMesQmwkgP~vVW+LL@tp#3K?1uv`?niz(3@9EZNtbmdnadT1E zCo+LktQTI-#})a#6?UrcUGC2{L|sTvvLDyag+*%HwhatzewqqE}GET>XkKQvRuW?iHflK zH|2<_!qkb%%qb9E*>fj<*67Rg$F&*dop|%?oWh*=?u3}P6>YTp{a&R!y;1AQHM{-_ zx=_bNf;!7pxIvW@S8XtPlKqZ_6gDupw<{NUwRox&IIu6o6ZumH^F44L^-Dnmru{GG z8gQ3npdBZ4_6%30RX&`x=fgv(!K2K?cTW6SQXuyRlec<2GeZ<CF7^8m)D$u+ z3E7)*Uu&&f{^4ABZJBn1 zRxv6+FeOsuBY>KPH(lSGVm7|9u>gj5$JTD5WP*0B3*}9Nv^)at`qCe|?(D7w&la?eTgL|4Gp zWiF%`MmR%fE~N7(|7xy0nlF8$)+Pqz(tcX?jF$}xxNj;R-p!v1Vf|gyfqs`*8ky-@ zR-w=U4@8F9Y^6!)A;G$DIYL)z;sitTpD<$}DCp%z+t6Un1Owl!Ox1tu0%87k#birb zq1pzd_3qXLFUkmwHS(Mff>4`Bk(e1Yi$x9+JIkTR z;yH1Pt`B3QLVSrQBz3CI8B zb52_$27_%B>B=6kK`6joty4-XD`d@;Ig|IQEH*usRlajawY z-VB0hH8m~2__#u1_?t;vpNDlg5Q5=!ewQO+i4z*;pT`Pj8aM&o?1`VJIqFZN^Z+nvmi6~5) zOEes{QnmYt!_uN|y#o`D0ah&dTWRm!xJ zfNB2Rggh`|xgK!tOYuyap3hH=Ag$h}S)w~Zt+k+?9_S5JM9&EZJ2^}5^QwNDUO~`f zzYs6b{5a!kfC>o{Es%Rk$7l~ZJg!w2ieUjPGop>wnQpF+Jv`C=21>e1bl)sr-$jCs z7k?GdXuKMe`W#+kan~90AeE)bB8>yyL4$gA`lx#AQq_6Jt|L^6S)7IE=;-g95l})t z(T7NF)YS+KM9`D2$=(yeoz0GqQtUW-vqj#c-SP(yMQnPvUEf;=e;;me5gDq@K0L$; z6DGN+UnGf&<**495nzi_0|4UsLm*N@36!FKRruY&ER7|-0TB0Uwbe57AU`L{Tb?z0 zl7xh|* zP$sLUEMME~%3db8x}v?zF{7TgYBfvwPFRrOKq1>fgbD^ycEPTZYfZn@>SZ4Oem{-N z=nHoQFkIn!!M}{&-z>O$arZjb;4QY&VZw?LZA-qXV?={^D`uKl3>bry5djW(_isfu zIAK2JGk**=?ey7f6R5w#pG-p~_JRY#ievDG2c*sEtCwrmw{1g}TO^>8oFBw)jp}ZZ zBDkO;1EhAGmgx59p3~{@m-13&_Fu%PR6?B)=YlabYyMm(COLHRB%nars%;#O6%$-J zBe|?zs-xISiHE(2sc8m}S*i|I6+HaJe>_IKCL6!8Sv$BQsEKG6VzOofmvUrK8C)6uzGiz5DB@*m?287O zGF>CeGKs=akwI#@+B@c-#Kov!UP-rkZlUrh-UpdhDf3h-SCF%UW2iWVFJ(TI z!D-kh^p)ZB{{uT|X}>)(7hU*8Ud|QH0k%sq&hC#W>wyJpxc!?t{zk-WD7f@tr51Ug zIeFfbbw@5FeVl9&16b)7oT(x143$Z`%-WCy{meWJSYDrxx~!Mkv;Gn-GTKwVB?cdw zOecs^BO+ydi-hrhPgaaKRiLSe-Hot17Y84 zqtVh(G-1`E{U5+(7q-Dfr}O985u5X@toa^b4U7i}4w>mUx#0E#E#=%8BM)dGpg@r> z;tv>CpzzZ&D|gLNo_rzmjxpypM(?0`M?9Yo5GHL1V_A2xuG&d?v1S7Fy2mv^JHt zqOA=r>5OcvB+Q5pi;)@G6eO=H_vMZGulwTb=Kkq2!$CD z%lLi(|LSHU_UD@aH9I{AE9r*V3j%y=F|N%F&mW6DVe^Z@R3RBvT;WkAe!*^O)~%8U zuD1?qE%#&ZbU9Y2eqYDG3v$$b_?7jtA>dGf$R0wBZpirFjFVRBSA79apEJ%@;|@#o z*A$t}PwemKn%&csMn9A*J)Yif(jS=qWbyoQ zq{wV*INY~{3<>NWw}Wk8j6z5*x{ON*LDU%0P4+=p!<1QS@MtRzKb)Ovv$bvUh%9%) zwu~5iHpq-rkWR{@^3pNuHs`mTsjU#T5IlANCdYL|8=Rpyd?q6}tG9s6Xhkxw)gURR ztqj!bf8ON3y3uZCS7JA|hwTmI&!;eiH`A9x_l7LmfZ`~!g%QQB)&Qgb!Pz?o*&1d| zqGg=2ZQI5v+qP{Rr)=A{ZQHhW%C@KaeqT@A?wFo?XJYT)JK~M~tam-RGIQmD(>LJj z&vrQ1Vs@@+4w)UTGbhvd3`wSrXddS2HnP)4&iztj#6iK=E3srONba)u zCBK~dCL?-f&0D5wySs^)97kbNqS;VgIaVQ8%L|$l9z_ z#@EbT!V@R1A=?(k`pMBv&rV>v`oVY^88J={z@9|niWXf8vWAoX8j547Q$9F{2LjS3 zed90ljgKKG#g}xt)5Z1(>wWdp`Su9zcq$&_r${Z#)FS#Gg&HT_M{PC10DGV{04H9D}^N*zhZ$n8=@#xfI(bX9Ql6 zSt-M&1jI_39)uO-&CfZTYuvCcZ?crQ#$GD%zeI4^1LgPKT^SX&UMj*D$(wU}_O2rr z)s}N=DFUkYF*~U`l^8S&rln-%74~14O>_1bj?}OI&g@Zl{=w`Fbi84_>=fYb3CD4Z z;(2z~ie^*Wv#qb+F%a&V;=PFuZ@_w!r(U?_4l9k?<3n|h&VE$m4zf3-ud<@8EMTQh%jMtlQ1#=3a!Q{kKe?K> zQ)v4E`?T0Q=je3`)f0d0*4a>45(^e|cyYnK<>~u8-PPdxdB1@NVA6{*DMFrAe0eWz zY~!Hm{#D(EBGGWt7A~p!5|MXzmff=eU)_~OG1!NGS1o4}p#pbU_%75MXY?vuQ;J4O z2!Vql8mV8|(_J?50m;9~jUt3C2rbxBM72Z)eXf2^4g)CGWZ8_&XMpuu%)jHyjKfSbm zY0i3C0w{M-%Wd?})?;)=vbfL#9!?w#HEuciTHGQ#$OAB11OL5w0+i-ssD?|=-&cqQ zbjwb3(Nxd@bHoFIkH0&@Y!FowMt3m>Zi_6%&daZwkyHwP2>Nu}>(#$13vgQ42Bq(VA0O_X2fx7rK(g78Kv z{W!8n5=5PYB{)sSU^IuUtCP8VhLQ;D*m-kzd8pNwEwc8~oe2r<{t8Z#*+b#Q(c89+ zVNq^XJ|bE)-KwpIPk*4xDA;4+St?O(HYBnrHWOWDjamWa%*j7w2bw^(OW>aPV7sCt zMw>c{ei5Tro9HqukMLrAVUqw0Q$OP4Q8}Q$R*TRkXdmHFGiJ^_HQj+ycew`L<@Zo& zlc|jPZd;wDSGZ>@CRqQ-R7D;Vk1C$tUigdNNhraV<%+n7?6}KeMNR^KLY2&)cUVV9 z#_uHTt2ER}Z}V3Q;Y(<6E}gF=x9xXm1hsekri0EPF0V48|o28^Q~d;vvwb0``7WW@wO&skXO1Bf6d`&1dj zdmT3F;7{bi56ZUa*yRqpn0y@J3xAf>9EN=dLe!z7RXrCwE&1Ua;~ebTKvWEUb0fpm zlF5YVJYqk;P1`qV2(5}<9`HaXF_CA+H=qngb2L=Tt`T9J;TGkcZ=V>#FKvj1k($8i zVv&qK*+p#UntXY5+=LVVH8pfsRa&BW2}WPU-iXaeGqwdhAKABCO=W;sDZ*nDL&;~{ zI-qZW$pq%KS-=6Ekaxfvkp07G8;ak%+3pjJyL0yvaq4>)|HOR<=#7>f9wf32Ob$8f zk6Kq(v#@GpR1|s=ZK6OUP0b$pWQgj#1=$n@=gk%(o{#B^3X$1Hs-y~4yIq!DCiOlJ ztU^7l1YQJp5EmiMLSym97$Ou1fh!dF{-Q!%xEJ3>-{Q~$8^CtQF^Vl}QuFqR6mYij zP{^3{8X7c3;gEg85T50&-s8;e6yKCn4sQ+9L|5ImzGFVxBA^QZy=w>rR5L2Edj_%1 zVqAc3cmoZxB{v^&`v9+4+~FEvyaj0}4-flQj-0g2g4{0cl}x^^u!gZ{wj|~Y96=de zM&9o8Z;Dz6r(hnEpEk7#2LQnIf7+`4`@pJN+hQrB`cz*U8H`ZatOE?&o2Som%9J9N zSeq>r^W_dL+DIrUD3G5HrV%f2HrI{h`Q6n^y8BYpYM8CTQ7LO&hHSy%$B6)jX~(_* z3E*GCt>V?rOL!Gh(#>=+*=NociW5$CIbL(ja2#_SZ*qP8O_}KifFIEXxx%GMORIC@ z$7?Y-@K_&5F)=_QVOma^&}dI%`SqMsxf!OlcTpNAEo%V}#6_tz-{zlpc%5SD?NC)& z)<*;1&M-U8^wvlVubJ|g+!}o5Oyz7*ig2T5G7P_(-RXB{Z$mS8icqRd2rN>USO=mJ zuRahijj*}Q+^`^`a!QH_rAYb84C3|b&#kZv450NO}t;QP_l7a}A<+8Vkm#J~#1un5d}qHi!5J zyT2xJnz&zaM!p%lM)UUCT3My2O0!OJ-bi(op<5y9Cp!F1x;eN)t~<=ODyxE*kx~{q z2zEat#;oC;5JS{t>iP~BBPqPtxF){J{v5Vsy6_q&*=?)UCm9GU_13}-v7!cZ4#Nj~ z)P@BE(C|?CMBI}b_P_7fpqtZBDU^C+l?;i$Ew_TpbP8)<_OU}l)IU`VvooHj6>J?H? zv|(}iH52m5Ph$aRQ|9p*obQOVqk6ief~Kobifs%DM*}7g8>LWP7}_1uh#H9}N!{1D z;tf5jJ=Q6lKK1qNZW6Dzu-nOKrTgWO!I_Urm2~=BRq0sMZK? z)DW_V44)j|z=|H*9aE?0UpAQi^=HM7@(Cw(-BrS84!KlC;OSd>(x+wZ06qquats|4 zcC~GN`*r1feaq~|ep)D(g7}8K1(R*}czD{I3?`eKeK1^${nsvLv11p(_xtf3%7(Y6 zkpY%6^3U@x1CTYgO_9exDIVJkewg6%ad^XW{oSi9N?sgE*2fWjpZaHWLT~A=D7fsi*`OBN}ToO-!7Eb`U z#0?HEq3U*ffD5v;R@gly#7a4DC$LwnqWQDTTsR5im!kd4EJ2nIuR_})C#@1OnLa5u2U(hv*0_q{!e{Ri zH8ly~X%yQY!>B5_h^5ypqwr=A_5$)PtMC7;3D`a^43K^PF}6@ux?OCqof~K#5>Bz6 ztQ08tEr%Se9@~tH?x5gXuyOj#jIs+zo3QRrDIk1d~ES_M)s*BUKUdlb1%Y8Gt zgnU4?Yj&V{ z{SVuzj4~(`NwrLaLQe6MrrU=75dZ>luxh$(N4V>ETV-jN@q!Mh%?e+W!=6_z*md2r zbt$@Nn+8c9D$&hG#7ly|x)QAYcYS<$zi2o!nr~k(L($j2cinFDy)?uhfcW`yQT)fA zd;@25DZ;{oWX6C8)GT=tss&NPhX604;=eY`Nt705_iEPbAx^Z_@8@sav^AT30 zjbrjhEWXVpJ49j{+tF%rLtBSY^30rIRH=mu+McR!MKW?jtJooB*w~N{ktQ;JCN|-I zLfM-o_xX|v1%~u>D2)~?5_t!B15@w}>A?l><7SFRVd;!Q3((`HKlZ}pU;)v(?FN$f z1$)40#kQ`D&U&m%#iwOb>=O#M-dQOhqsF9!H?_`1s({JXb>w|n4p7V!d2mA2Fk^Ch zZUji0IVw)1U=V&YSRmj)H%t8njz}m-Fw`U9aN?%OzgzSzv4}9w9SS96Pl?V@%d8 zr1cKd(wLeo53Z&)YQ(TXw?Gtn&aG|E#V878GcP|~5@*rX=tyY$;lZvJ#OGuLARqp2 zoQS5teh8{ghr=TtkHP|8fDU0JZ$Uj@)K5zI&xP}Ptk7NBXZrG!7FN% z_Uq#MXfr2!k0N(7@nl$_>!8-7$;Q*?I9mbd48a*NDscKM3{CiliaCg^HG=l;!c8#F zW}*OzC^VKOg(nap&)u#D{G$q+z!#cPJ*`+p67&5;Q+5qza3>U!Ss#{0ZZ2H;NcS?yn& z|37N$pMISGId@Ug{D)cWD;PC-83?78(6#Yo9tg?}ZBVkUQ2ZykO3Ew4ro>o(jif^{ zw`bH8sc#S*&-+HS%(QqY7F|HP!*M$EbDCqP&B*ub?FpwBahu*~+Jy+0X@5PF7IxbBlrEjyOX$4<}M z@ttqfdfU!hhhmKHX240&3j&)02sjJ6%r}0jf*RVS;}F`3X;6TG4Lc>DQ7YpV$i5c# zwCSnljbB<#x#dbpz)~>mC~XU5zqK#+6YdGj1069%QtyQKuMMY@_gL>8w7qjxbEuTI zWI&$e6^FiuU$DGci{4SwzFV}GF?srBN7G6Y|7Lg|uplI{y`uR5y$nqP_xp z3{f~_aB2Pw{RV5q1L0guR_Rrhy|^PT6O>04_KrfZfi~`val^=9i2m-rb$6?eMFi35 zOSYeRa9+hGGL{a>)&c~uBXkxE!M$bsp%)M;>VE17VU(IE z?d7YV)UH0$Um^*Gxg%&@Z5Wz~>AxyA9gPj*H<`Kw7N4Lyf3IlauytI9Je}zuP(s%` z-t^T$Xe4FD=Q(X|3zm7lT2K~0+{S9an{yvkyU(*P-|`NYngciQsTynDV=!|Z-Ov-XNtZ$ag5aOeGLI^SH^&{vT0}+02d~nxzUv)k&&Y-o32{z;?DJhw# zZokg|27g@qx|)Q?1?ne!e(dtyaqZ!Hz3yIk4=DDH8+(pFiH z(9W!FsnKRsXFYme%) z;0YkEoPk2Uh~DBoEzYzPD|1_ONpwiRd^cp$1CNW8E z7|R5~(g7;|ms+ks=~e7qi{~TB#DICJI z99j*V!9kRyEIUyq`L_xM7ZjjRGI3bSlfynH(!d3-1O+v>1m=32eBW{guD**svS#U z0y|3K*aA@3-lJ;&TP)?sIX}7H91hHHq)(5Iw31UTc;isW#hR+)c_E1gXHYa$!BrP_ z{a|=eHGe02$X1%LTlhEa@m|EVX(7(Q3EHD@KF8D**7k04?iBEV6HqEPdP0i$=@R13 zkEdzNR6BNV;mK1?H_h>$0iYSi0^l^Ct@K1^Or7lcBo;BeYW{>V97H)%t(C*3Ek05= z;SY6I6xJ90>-0q)wnv-6`<3!+@8>o`0(A7G77Hu+9J6bw+57!ks}vy3()-Dx6VR2l zg!C!WSbmLP(zO*BA5pY6jMfUNF#!6taS1%W4g@`gcrx&j;i+C3OPSWG7L%hAo3{EA z&668I87cF~om6x5Hs=JLF;&KHaCo!*p;DGf(DV9iO%I{#T+HQUMfEXus(0Q}t18~; znYIu_Jo&pweiCWtMf$&lRDI!psWw)C zIjECTV4|~3&VxyN`-2TKZn)@9z{Xpsxjk0wlab`0lX3IZ_a!wgaVEvimS>i}{gA4` zT4DN%_zJ;||8k%?SQmKipk((EKH>?_#~^Dfl73g3-PfFdwI2V@uClmSbEgV&B^WiC z?^0VguB(aA>QhB%SCyX_C_#I@IBpKsaaY>Ic!~C#_tUaH^Z-wZfaF|jY&~2d#2yNF z>RzJSmry#U_8CwbZO<}#%c&Caay5h=2X>zwvz4;neUWIt@`M<34urkp)6B)c{WS1s zfTucREw2}?3z-XJpVrFoWrRIv{|o!6cIsjX{TOSJN4#n$wgZ<$)_l6Awi=p7KH%%?0ffHSVy{5Zde*CSq1*@Py2cO8I=muv z8o_A|C-^!N8Fi^c#AR_${axc1VrdH)lYl)E_oOs*lJh`+Qo5c!5(N&b-JvDHuL_@h z>a$T&>naV=@yZL) z#yN@(pxUQYC!W8emx$1un9%;fn|1QDS+A`-4|O@LFG2T`)#h8-PKZA?Qo^He`C2(y zx%KoW11dTunr|&~Yl4chCF)xbQ?8m@_exYm+oWj&eTh#=<=_wd{lXV@7EI8I)_6*+ z7=c;pa8`81g=a^ham-7LzRFa*3-*v{Nbg;D!@*fsUB+Eb`ipN ziI93yD=wIC?$VP4An+q{g>Z~h6M!&KhnKA54zvKVr~`2Z3OeB<`T9FX1xPa!;)4@1 zuj{W=t(YbVH?hU9q%RD?QktZu@=J+>>;c2itSFRH39n3B2WXEZH^Q|2u$ZmxPM$?!A0r(R=X`Z#Jqz$6Ev?Uxoi~9n9 z?O3@AIDj6Lavwr!@w)hboa}iW9T{1U^4mb{Y7+XUmZBY%yUHlo4@?yg41fCYar+5G zL?vlR94zS@a~;+d%mMpg2GHa3BJUaxmAS6EG{li!6GO-x8Y-|TtP`5#aV{U(t6DBH z4SsAKOvqF9bRRw}z=rnX+ny#ZrvjL-f zhyHi#apS>yZfV&%y}(=w5Xmj^y0v84<3W0!R805Ml?Bc}Kd+HZ_?kcq#ZGg67TNoE zNQ)9M^I&XjLuGo|#6-YN;Eg?otjhqGaysTl&s@qtd9kXZm;*zND%@ z(&eI^etNCpBca)qX=!__%N)TRYL~@tm-`O0bNWh7$N6fB^weE(Ti{{~?KZhL{f@Uz zcA^|qP$bSY!c7!k>q9{t<`RP^_6*CA`dYse^?Ki1K=qz_A#!62b&e+-UCjt@pD1kC z(9byBO5esn^UkCiEQb*=`pA0sS+UUo=?z4MRtW5n3X~khj09wq`FwTQ4{{ zQ`wj*bNE`PI+eu;6jgm17UJeOKZ}5Pj*Ptm+MO3QPc81EX*qdhtlJ!|@3C1~b@>-i zHlNAP$S=vGP3CB|-?dfC5B{^2W9snM7E|PvP+mlGGPxe zM4|~k&srZ@C3-gBZYQGR_7&ig`&5H#iA=)#s^)nxSW3N97qip9x>6pntyhqFOEA*hKO zC{3&hpl63;K+A0NGOS@gMaKw{X^OM#(^W^H%ll$$4=AAXTPRfS#Ru4>@*+IU>U18% zxaXZ?2bxaG)MSL&G%RltyKg#d+ZVgPK2rSPoQADHK`LnO%%8UCh&t&`Bk&?Ie5)HQ za3CTY_MB+uZyRfWkla3UxRZ}(`Tg>IZ?yR+Rxa|BWk^hmnN5m#y5pzDLmxP7gqwWU zE7ZyrS*&Q&v=}jlr0>erB%_a7%NQHbb@zz8JEQ#2ZT67-s_V_wNN9LCn3(e72JNbi z`zo`%Qx)k0_hcIPqI-9D&PD87-1!)j(wDLQPM5)3gS8p8f=8IPJy=%cp!(X2H#~x- zsaiwcvtE$lkQ<38AtQeke!;0A!;#Qnj2k(4QD!CAMe0(=ECA;uT4wCg<5BMIk;#`{g3sa{109|j&=F*>gB?N6e%v}IH)1>rQw6wm)2 zykFmY^%b!y6o(edBH0Rz1@w9MB}cPWU7C??xt?U|p!+u$pUavjm6vc+_s5CfDWPBZ${O@3pCVe>6zwKyjRWgES9zyso5 zmSFYB3Qa1w8C4Ol zR!Oq7x(d#00PR`OTnv`;15x(sw6px){g0^fn&A%j)>RDKFq4iV+KIwII)s9I??tLx z2+@15Ta28T?Wo0&niY};ovNHgX4~*$!mX8F@0lC81A!nC(4xL3DK@B^vn&!?F8<=&D|c)8#P^^#vne zpek4Nb7F(NL}YFqI$ZCOH8;p!&TzW9g10pfog&8}pL|62M`tnzEuQC4rlV&F@5ui3 zje?6!p6~Pv06-2E0D$~|`$qZKkw}&*q#M={$`=`@3gRz$DXo2CzDy9Ji4f|MIvlP; zMtixss5%@Z;3~Por21PCL{7v^hem9gt`l!i2@0MQY2avVF~3=&#>T|$qUWvogyx4r z;*D_stg{AJlkLe)_iNwp&NTOnS8!aQSxQvM%Jrm$2Qy-vXyea1JK_u}*_Q*3 zsUDsZm@)>MykatB2*B$|`#2*F8rXHjEi@USMKk(1w5)0&Dk z*$clcWYFxA(}BiEo3n_xf}0^TH&WypzPgw<7gHxJIC;j19Zy5oQz8Q!G#KZm*5Zr^ zv681I3i}?$-w9TUs zq*W!$&qYl`zJ+1r?TWFM+`^zF~yfw{I{y?rzo1QFU)GI&mBEj6$r zqo{c+yccWR9dNrHeR!}<_adrW!q*y$g-7xoAEDHxCKM@c1e%mh((Tqjn~{)g_2ohe z_XY`XKG&MKS~eO^jlHlKzDr0Xb04zulGs49&x7&+H90ayY0@W43K1`6oeSCn{Y^@S zQex<|aFkzC;laRg)dN;eCc<}*y@fMf&>-v5~ERA$m zWTZsU0$>Avj}>u{Ok;%%vz|%hN{}1IptL{z@S@nAY1xufSr!Ic(pKSI6 z4_O7-;td0-vTdC&;+z6G?NEGHDxoTZ>W+Gc(6ERRa1DT4^TEmDALuthqY`QhAePfauizwO+gjT%D8iD{5 z50|7|S=lm)E2=$9yERB%+cLDIDz%VkKD5UE7JF{lyHxn*GC3h|q8R9$*mOhNrs>#W zVw$#$0$J4Hm=3CJnIiXqPD{Ie1IIYnuE)ulti|*QSL*P}o`G($7auzez zAw6uXWp9H0Wlxik6!JaN8ifH~kbzO4y5O8GxJWyzIXz#WGy%PjZ(UgPKKfpSNH{ zNZ$D>Y=q}_2TE7kt%ut!-L%X>U^k5(Q0Nn6oC!uckm_(I(*pfP3d3}Cb`~AU+3&aL z3mwCLOV2BL@s~-k?^ryK(1i$zVkznXF^z6_uK%pc#%oOJ=P`<^wT=I1vGwRV0N=?S z!>**Rn1kYM{KSYeSd|%xFtyY(@!|xtZ0~v*yhwXVitKGPGMfx{yWlo-N04Q8l6cFC zcuwyHc`m^btNM)QPBG~8#ki9*{+U~|MfbBj)|wEq@+mlbmpN?`uJH}eY1|E%}G4N3F=4cS_Z zX1_brS(2#B8aWaq73iD9zmISa{Y6@vpZSVbT1U@=D@CT*N%s{nv(jHd!`y0o*gyM( z!_EH{6pQpd*mG*cKC}Tjw#ZylVbljE@PWroM)OkBi|BhxiN$zpB}1|g+sTJsFYbs5 z?oPEO83YeiDtr^?trPS}rA7=%X+_IT^HS&nZGC->fsMO9J-L_=iK)u$&V~z9(sVOw#8?2P0OMkOU)d*geQZtUae1r+a==S2#(}bEDC4JXaUwFrKj>|$N26O z{Ph4URF^Bz3rhfkOfx243pF|Ynmjq0g;_>l{h&*YA;{4y!hS}-(&TnffAQ5T;Ra`5 ze!%Qu4KMJWUW44c4tpq{A*W<|fj6jWK*4~8WJOxis@P~W5j$Q460L`7Drhd)IoKU@ zeUAUYs0!(va3jpqK=7BU$lNFHh~(n>on>1pPYHrcBEXSDkm43V0K?Jz}kI@KqwpT z{yLXrel}lG_!5ePgx2uAF~i?j;4eL#77H6ym0DCVNiZ2T>l)S#KN7pdqg%=yWSgfW z`-#RiEa@SVh5$Dj9n(~t!E=}f<4c%I^_S}*tkzB>y`C*dZV^bxL&%cZ9cJHe(c z7qn`Qb9`2uzPSv`pzP=VX1Mn~k|-ch(^W^9endnBsI zb7hieGY64C5v4FkY3MClFwJQ9aPBO@(wjOFe6{n%IX5G1YfaefaCSvNJ<9F{qG1($ z5JVr4P66{h8R~EfK?Peg2iyIdcv=(DwzAmy#-fO~XbLwji8r+i=eGZd!8$tNcT9j0M#2bs>V(tP8#43E0GmsolLwWK}9FAFwvMAJI`+u!o|jjIG(Dg+=YnD)sA*%6=5qxwq`x^;>4m9hK57%S122DOJNR*b|W-_{S@& zq_>t}Q5ILhCB&#!vWB+xPsKpfGQ8nF0c2s0DD!UNO`wN6ZCybq>@=j?Nd!<)UHQc3YANW50%|!r2 z!m^tCL+PzR{YN#ijj@yKk8glZPT$bd*hx&^#>mRpLFB&_B>z2?Rk2k3VfK7ri7N-? z;v`x8m6fCb^Z`Kw)yj5htoexld4t)CA|3(laofqwRXI5VAElp>qS{{2yaa5a^d zG+^+Un>M)Ez)&>u)hcgA3cL5uZgMCFZ!kG)Z9!*p81_FEYJs1is*JDS?!KDq&$l!si!>N! zRhWBO@Mnl)2nVsrKq%FPJ4)LSXS&vKkrAxwrFGU@Yj0#toEmfysm!?%0jh+MwO=aXJ%WGZX(EBNdRa1{3ouOQ;T5Glp%s1@zSYvbH!n8)TL zdir${J*ZmcJ{ej{)=2lqztj_g`zj;TNR($PkTXNqaxLw5Hzi2P^m!&+7JA07@0&p3I*WUWLeec{H!6tKE9- z6^)RY>r&{qj1-^o*adZJm6zgOhU4R@74Skoa-Q5hYEAL>SjlOa2V6YtOr}!>p?)36 zeQpE5%z=t?MBso=NB1WYlDaY46i&%8;w8^CWEjF|hA>9j+G~tti&S`aHL&tv@#Sg< z!Q4}dTm5_neUJh2?YOOE2%susjPCVGBcj$DHKvaCZKZZku=e9S{!YJB3#UD4i_wjU zlmIs<;H65{fsIrc!c*(QPMBcUOKWNndrVWKQ?+tjC6%!cZx5czVqJK)*f@4|zv%kv z$|t1^X1a1`cw56pOn3I8XyT08GwX{)+F$i8Tgau!qG6WJ2jvYy@GbI*rjeFzg4_$u z4SHv%Qhf##nMn(UZF=$;=AJQ}saqB)BuHzSLf>7Ic)xo?06Sx1%mxXsH850{H7$vs zCOhg`y#2WVwFXP13~H2ke9{Jw*aZBN8OyCU4%_PH!UhjH>bWgS&NKVs~Fq zcATdD8+yD!H&R+ldsnanwn>jMr+0436u4lpb$em2>mlR>4z3ox7iYFb4=&=2nX7h- zP#U3M1-d=WE}wTq-CRK9^2$ZN>5zx`c?G;(0G;zFDVz(t?g85cl&MZWG5iR8M}6VE zB@-?9BDM9%D3hcUm^;Fb=3@ZQcmh?hNANE(k2m1+vCYND4B9yTQj&@(G6(5D<119{ z!p&eZMd`=o#AenJcG353kbI|ve8NU)IvxMKZJ6<=auSN=0`HWgzu@k*27BZYe85?V zGG9~@@%Pa~dALf_p%n)B?&hyUz2fceYlnN#WnNkPE2xmFv-4$C|?ylZRrKR?LwCG2&+qI*d``~Y}0riOjxB=K!I zyt%4*dBNq?)VM!N1#kH~LC-saHlCvY#v#@e1^r3gUFb!2X2eE;u!zQot&-z$-hZjVXdI>*ajcU9m;(~i!82G8%pLYDB@}6Q*YeTIVFiD({R?4m&A$L zlSc{0F>=%=F+2Z;3|yYD^2g8UH9MCEY!OC31}0M{;X}JDKPfgt({2<-6K)Zad+uf< z3Uj&OgVdklaNOxQ?smQQj#<3^ex4%(2)^MQ@cU?2r=(VP6sA(2q)|^gqZ%uhr$t{n zR4UR-oL_oOZ|W}p!w^_~SbY>*zTY+!0VUbO}czjWYm39x_MfX zLzMo@ozYrte1*wcZ2(P@RDl%ORpw^8+uUmHa>a1v4X){pj`j=+=~Vhq?288AkK5Ak zZ$ge|l|lxVk)C;mDY$i}tDVhg9T&SSI(fQCS*@L!o{^KAei{K|Tfy1j;kyaO;dZw=io6+b>ui2MxGxfMW4WC5axtM^ z18lILZ8|HcHYK-Q>o;z2wzi3MpR1DF+~8KW!O7O;6*9J-*|zwS(zJ&BtmKB)l(n3T z=fY`sV>rm0_sPHlW%^|mjuJxS+Mn>)DVK8kbP1S9npCAeca#vjR!AQ7JRf|Px7An4 z*V!nB6>$q=TvLO5TmKP`@dIp6F>^bDl6?%^0&p@+5s{H$)H_OAQk=N$v8^m&i-8-= zGHxX>PW%pAG0Ie9Tm5#mN{r>rf?(?D@phC?uYYUg9-M-lPYKTE8Gpc^7ZV`|&I4~?L7rGNY zaqO)y()eJ0=-fTn?kh%=bHZ)Ip!Nymma-^!UdOqa>`68!ClbLmkJCyW8^Yb@KsV=; zW%%*~6#3W2jiq$D!YXv4BH+gAq#u^ez>zGArOs3f%R-6!&}6PPvf&1kV7sIuYg6$Q z+|8C3Wn~A;w+S!G98bEd;{DpPnE>2MoYYAiCm51PW3>KOQN>WAq^qOdIW8VQXXt8sLsW5?gs zj0ob3Il9Mfy>I1X12AP`ri4r;Acb;?^V0V3;+v#d zrDllHOEJqPT*YRn(Ni~&_Mbw!hjd9x)vZN?RK`xw9eEA|r6)?cMXWQSo=~TThuUX( zg+>hvvQxz6k5)ss9S4siL+$Ih!=*-uV2pV{_(czIs69`E9A<8%^v01K)>LbLN~sch zT1h@NK)gI|BUWM;q?Xx5^0;SgV0{sdEE1;1)iJ|6LRr-)7{A7o80Ne`l33VdkeCfl z4#(4&qobjUr!gzraICocM~ExZu@EH0mUlHi)Z_OW_sew-J!f9t{70 zmAIp+9CwvV{!RRm*lpq~(9r?;4Gc|`%cn3qkV-5b>0637Eul+DnUz~YX?+V`3;#Z@ zbqvfMdv@Y8U)vvodmmE_@QhGmQ>i!grIP&mW+zg0m@xSON=S|HC^#!UG4#O}Q|j+o&gS@M6ho7sZri zCKk&YP9nc28jskAs5{Vo6Lq5#M>%r>>px={_{(n*RQOf+mTLz3hR!iPL4UjR9D7OU_pe579}F7GSH`(sj< zeL%mvLn;wnVoYjy8WQs2*f0y}Sb*|}9c*+=h#qDgFIAHJGbLwL)D|QS1y&9%Lh0W( z)i!k+8+upEcETGO%#-hWDvpl%IeNU8YB@%h=O%?C*d$xy){`k4sH0pd-?-S_8mIoQ z@v4t3`N#}EM*R!@f~zR-DwsQ3I1(7qY8J0vgJvm5#0Yg6G6OkFz9&{?^NEXf6K-*v zoJudEvn#!-fWK8*Wt>tPxh_GvNjl2 zrgsa~^HW$F$#V{#%bL%sZ#mg(Pb4ul5Scxx?X2gkt{v~4uIujC_nn<@0J)GH&mEAQ`Oz8XJ*Z>`#(+(lfQ;a*lNl$8@HZ9PQ$aO97>G;({MK zqb+;x9kpS<&f}(DWI8kq5t!BRj0?c(C@w+g>vV+D{>ORjBbhXJ00|t}Uziz(jEGBZ z;s{+CFCY4hd2!O%1Mneo)-fns001PQ@%5dn@5%M|?pN}L98$kgY?H!hsm?}OGOIzB z8B11u7ziy#4JZ&GHrZoODrpqCJpu%)7UUUgh7-}L3LOlY%HQmG7Riya0Ir%2*Rb_ zK}wcMi%13)EiEOzV?$+kRK-RoUlVqW$U1KAFte#du45kuZBj%S)Z{ zmx98+64K%TR!62PPnn8df^aF4yj`Dey?{}k2!okrSU<{z8)JuT%GI$NZw=nI$7G>( zbhI=m=GA*>jWIVb>JErD0lldAuSJZ+(D*)mq}X~{>rl;}n#;|t{Ej9)p(?CxmrI-4On*Z0k8^okt~r?w6^R@5wPDxXp2 z`97JtvdQhg5U)A@s-DE|m80`CR zLFNmWzf2gumY&7y{!47}YpgEcJaZJFSrOHY0BWMJo_#pLJ~yXOkd{YS5g}!&AUKoZ zR6kzQt+Y}LVDZ7_4>ewIfyT-%b!GjSk_i=+F5ogp$hk0djJ-BlOzs~kYCxQT| zSCAH#Km{p89X*W=U-5)N^fZ1iz<_3bteoDU$D%lllgK|9=!w4^AyeGPGD>cMr=ihE z?G`o7a(e2m&OmHl?x1xIXVLCXD%_OgT2F`^D@BgfBaAc*E8~qe=!*T2dt2i>*I(2LZuAS1i8KJbvpsLRbbd+#wC`N z?nyOhp}SOFO0=${A^o6+8yX1U>%lY5RHfZ&8|~;yvo&#fem}m4>fv}oU)xWM1k}5y zcNV%Tsm*Tx2dr2gk0KK+3(V%iL5l2EAapJX{80E1hZNz*4jsWUdJ87&6He3rUIcLopmRrgidlIL^_UKx4ar-L@y3m6N%q1HE0Jbcco%k0l^GVKgSSMVZlJp| z%I;F}K_*k=ffMEo0|I^5osF~^NDwAw&rO1PlUp(~VjJN`gc|?(wC8$J2(5`-tDF1g z-ij(fWE5VCTwDFj76-k4vef1K5i5j8_0tt>_10L7>XHkAcOvv8pec# zTBRlOQR!)^VBe2|HUJ_nTJ}e)LH)U?k+!PIWqxg`X-zWj>$#H+0zzP()ZKO}({tKk zn&+7B+2ng!?gBubIvCpBp= zH1Z^@$HJ!>STnK)S7PO!A`Tpj6JvMajUQX zZ@qyz>873+TaA!l<_6Lv(|2~_z{q!cssaBep2k>f4crE(-*nAV%N+~0vc$iAPy ziMadg*vDYdq8I6bhsALWTTH%pHvU%BGh-hQ*=2oZR>_@U^zK#sLAtQ-MKJz^9RRm|#*d3GQo~mCP~@3Yw(BEGC>E-0jgPnjbG= zYqlV-6AgclOk_F7lx+|#hM0Ka8_Q>Vn)g&mNlr-~A(_H-GY^;_SxheI3u2r&3DYsx zXf1QQQfM-cO+VC~?6YEXHG{1nnkbP)9UimOMjg(r7yVt@t&8f|11`D-7!{_@J|}vq z$bht5?_V}s_*cqlzzN_wjtQi${|DdV_v`8WoEu#B5LARF_oUFNqYnB!)$-!i76fNS zw<6lJoV<%(OZOZpa^n0DC^)!dNXF!3&v1u-@)F);azuS2h-5QKcdi!giPd2$bN&$2 zmWcz3`YOX<;Os8B<;D>(Jt$!)${M*)4`a|$52gX`gA(luGZm~ClUW?%>kn@Ky%U^O z*NQ3SC}Tjdic9ua-yK>t%PZ;?XU|(7r&yXXac`a5m~sn=o2eNyKnQg_o$3&GYy3fy z*7Gti74tQi2yDl~o)P6Wg@vVQj6`pPj@Ha34WP0Kwrw7;28ym9cCCANCPG4Bl!qhf zyqHiKYL@DzQI*$3Or0G0yWExso`78in9h6t*@cv}RGCW~Lq%^SHTD>2y9R8u1J59J z{ygVa%g%&zpkZ86_U3QeU=ukHt-2AvH5h6D3@^)BiQui5Tf_WbA4M+w)n*hkYFmi9 z928SVOTDm+1tNZ4!q7cbZdUNyDJhJDGKw@Sl+)zAYw&S{QfK(wtzo!M>d zZEITCIFHorHcglZ{o`5?q)!N13pF*8Fl~lt9M-C$IgXpRt;?;gATT||`%x_qV3n+e znDrqzi*hO4(XNvBpUv$0iPrm7G3+r~^7H%V_82vyzrGIH?QB!du7-i?mhhY|in^nD z&>k-t<_lRvwwXWZapQFM6^5-G<3r-Yn@R{<=EHYr#SWpAnM`T*RG?ngDzqJgIhyD2 zp%)eD64q>4+BRRp65ZqVA*!QYgi{whjmraTZ2wp^^v+YqZu#6c^e~iJ9N;!!^*%oC zy7{MRo#Sci`v?(a^4fFMUu$q54>6sXq$(w2s-4|Y*PF$XzOfzqxeE0|y_7XHIcvY2)qlVTz{DkV9RobdV1|I1QxTnB|=y3-g5M&N7Rh_3w(opoepi^ z2KAKMZs6w+NoT89?qA&ojL?&HA&y-8`jjS;8c}=>M+MyVFw}L=TJRtnb)XLCU)qzw zGUQxv3E%Iz%Rr@5oy(PJu9V)2HuMZ4`4f(}X1T3f;AY2guVDAq@ucQKgoqa)5oQ$) zc{E>hT*fs)_hv|m5?V}}j=sk%2--K_h}+9#=UHyB)JD~1V>Krds40}GSZ!Fm+08VmB5do$r_tUdU3^c|2dtInPv zhG`TfX=KL=Ut=anA7qM*!3#|k^&;331EauIpZaun9MZ+0vfM>~gEo?kXN#-%{8@Hn zbYygN^km>*UV1B0hg=$ggd$%#i=)q-Ed9m%AT+T&lYz*AQB_f=V3hVrK7)^}|Fpq5 zE@{prfuz&u6qKL|*Q0cYVd7$7L+rGjGWaHI*f}$rBsD~`I+jWhrMy+J^+Mw%393tm)tVa{XL;jvR~kf3wB_$mvO z<{^?{sDZ$+{<$_ghreB`8y*yCbH_)Bs2Srf`&@;}2^RQCCW=wgFeMT!abxTgS5|AO zLZeC;oZ~hFO&Kcm=6K0(AsoR)aKE`KhFwsT8F2dw3(>+QB{ZD$+w)eHML@&s;G`5$ zXc0yK@wt-7GTSyQC!*>#rO9!8&D;)?!lhqUv_XZND2+N|%AQu{E#fFivCxW3p{hGD zRi$+qn|6{~7PX$Qf=;>IS51`KQW@TedsHT~Px#inK0@ioKH}2pN@$t%Z2yqio61`gjX9Fo(^c*F&RP+L*$O%Mo7u3r zzd0pWk66!no9Y@e+}@A7GV9Afbx=|Q=iC0u6E@`)(;Oj%y(e?zsp{TNXsnT4cTuIz z|FwUBcP%r9V5=q$8$4DA`%Zcs#n8=X<2_wR#%Cipl`LC=df-jSH{Q-+MB9^M?jdmh zX<{^v!Sy!rTNhh$uzD>LhsaH-`j|+fLbAG?w6=teIfLce~X!W`xOro|S|1@umfc(>t?^9zvvPj*o& z{l(9Clw^`CLfj51O05e5FO3c~CGJB&z@5##Vq(UQ_V#=(Azqfgn zPKqu?33XIii7Kb%n*K32Soz{@nxWhA4!uRPy~BkYGYfzp(JnkAs$@IQz?LwtXJ#LM zO^k!>2CbLdWCnScOt*qoM`<|1(rB{^U+?%Cp>Z)H=za+h`z15$pos{2M+k$cd(8P8 zr+0f%^>(D!s*}L?_3rkXep)kv^2_#YkJf{d{_TD^9fMZ{XP08gws~1p++aC`Q-*Vz zUZYya0=gV3nN->xzoYwJ4Y+BM0ko+l?Ze22L7Qfz1|?R=G3_xryR{p3!1{J@==~}N z+&k{9dsy}$wW+Fy9u1Ie9kpsCHX^VFTsB5NTO>LnGX~pRM7;dh2TfN9y9RK=!?{q{ zt`r&VW8womQSh25$#!^+8L!j;-Q+2HS&OjYC>(2a%6j|91iAB>e;h-lFXWvr6b()e zx=53xZdx2jvgND$Z4O;7RGRehTwl!(CAbSN`s*dxvXyiNn(s)n)p+}$#)jP_Ua{#M zzx7m9I*N<;omr4YCi~{;;EIW0y zUZ1J*TtSYZcDI`pjP1ftup49*Cw46T=JeASP_l8hPqg|^VqYKskwIImsl@B`qo0xa z(a%u+ui5VZc4Pb>Q3z40T5?!oKSNI}tiLj0n}vgU2SY`y@~A+E$;gOS(&o~VwNjem zlFR3f8jKg5=PW6bDqC)4l!sMvNt!B>*+h8@XF_Ww%4gFj*Jc&jt1R-=$`}kxrqh`m z?~|^y=X_tUhbVs(u<0L;Dmdv%lNB2d^Yhn=o$y#goewucdd=p^lvujU^cUjZwB@( z30`(mc0{lOmbd1ppg+@0__vI}Q7VGlI5-$sc)BEfLJZRCQ>O>rn35!m_AQ}xjyptB zTcJA$c47x+KK0nk&CMO+)E)&zT;v1o0CsOn`(C8Z=*30bogcesxEl8^5H;U*gxvwnvC!Xju_T1e2`3|0>kJu zP`a6~Ju-X6<37KIX>)?MhqyNQlV@x=8bc5)bs%}AHbxQ5A2wg4eHmF% zWCfG_!c7J`m)HPZRZB9w2$qWS?kN1qK(I<9Q!qlqHYzNHJE{^+xhOGMsac-Ppfb25 z6X5RzcJCis2>v6J5jHR~aFRrpt*o`1awXWI#iz*wi5M^usZStft787l$<+^KgUaZj z*(Cxvt#(a*OK^=Q4Y|!MLPx1y(Tqdn_-X1vm&57^!rpsX?KD<79czv&)8&xM;RIf1 zHh8`-CZP3;S9}+TpwG`WsFI%?GL50pJAe znFxF<`KDt1E0#wl%@G(LSQh50TdkhMc1VhaFLX``o}LX9xtYDfHQA0I zhd0lG`wEUu<7c)DWYZ($BoZlF1{W?el`0FJk?`HzSoM{_H4Lt7gs-Cv;aLvo0m^TsOUCeR$F!II_0 zCJ%yUit|ix`wkKenX$wV$jD5IYEY7gs+#gtu7n=Fi4r@V9uOhTFSOMo6?MQdW!$Xe z!SM?bh_VCC;}jX?sNo9R>?#9HgJO9d*)%~8?leZ^>DshLxa6Ybc_vA%{!K$tFco#G zs>GQa&x~}eqI=^na$1n*iK`;Al<0xW+e>|PB0Kp;9jU(-@#2IY-u zm<@r*qUG&mRT``;jM%x^W5*=e(fHu6ThM6O&xWwfl4g!$aAK)yc0`z>-FNsi4D+#K zcP3{K7sS6$cFZXIV_ypVc!D%2^48d9uLN*7PmE>ynA-9J34;kU&dTEx=M(&q5s1lT zCG94qg>8mRN)Y>cfoc_$*koI0gK!}p$HOTIPPWZ8hK`sIovIQM)24Hmg^ubQVWW%G zC6vAbAXoWdeSn3r{iWMp`Dr9h!mrnVRgy{^(y1EG&WKaWTz>%Ix?J{Vm0mQ%eBP!b z>9Yot3Tp_OK2+wrGla%s0imzObE4wP8q<`yS}I4uMqF?%&IuQ0s+I@Zxf#g|8#|aP zgkS3oR9h$^dwKur_jm;!DL7h;5rO}AbRMtF8H??)!2UU`xl6;e2 z>%aAwU*?ahAx%XWz{I)WJ1Tjw`iY3Kug8oT1!ADPG04LJdZjdG__g%n*{4aX0W_(Q z7^R;rOl4PC7v(TsFGq|WSHGIliO7`1-S4`AhgQ%Q9|qAMyS!&HijB5kW7sYdsmM#* zf>@mCeiBGoJjL6oN|6?VTgjhb=LAP1i>$8IAmKmFDwF^H|P^x9fbWawG#Ndj@wq-B0@^l zl1!S%EC?v~$2SS*t9`j1zX1pI38Y~k{4l~b&9$9xwYdi z6Q~KA!a@*~9{nSA;Fo4SF?5%#TWaX*Y1+u;zz4J5!z*KmxUPo0l!c}eDI~~dqDVkZ z4K{*KqLGyL^vIh3gli;QyumJaq|&JsM~*7=d*LW$IYz6QuP36%>Ik_)G(o1pGW*N5 zB#&zo5?;6M%i_T1V2+j_Scv#tSNg&OWqe2tMo6oV)EDh4!Gk_AhED1Omvn?3Tg0=7e-vMK?6OZ5u_}ylqvdxb}g~ zTkQVna>ULgCawI~d9$p{T~2?6jOUI?Ew%21dK)y;Kj$l!_K;9?-KeIi=j_!hnQCrA z1EY_C%gL+^wOvF$)fOMxslo%%dLnb+%UG#(Bs|6rXRSFl-$1smfo$~6ey=&ZkYB+E z9-d+#G?k96^)@IG@^d=+Wt1G&WD>a~`J7Ul49x1qxI-!pcR^f!=h7R%J~eX+%V(ru z$JN#&P^wWOo^myR3+9h+SQ=QGIM%g!pGmj09$2u=KR{&l`fJvYeN-EX)OJhPW(~Qh zX5N!=0EVWe(Wn*Hm^VRSGin^Q}xr3}+E9N{HoDZ$q~Qiw&CPZEOA- zU&?uDhHTgJf3!v=4Ct-BOv$Qrs;G3nKo3ZH|xg?(1(Pe&}y`J8~7qD(SXdx)sgYh6yL$lC0Xh)5AhtW=JNF zF-B$bgK>t3Z5v_>>FdutvPX}uT8&E`#pQYSPljUcPfR7d4!G!oJxoo|f{F8ZLu z5=^EVKqf76!uFdijmT5pm+oX)GEYHV) z$(PeY&q||MOT?gg*0&3a-G>13CDN}7AEoS>>_TGAbGWEjcvBx5NWO6iW2atdKwYOq z(s(};P(TPb3=a2RE)j_<%iBf^BCW6R?y z9G|ozpe3139m86cTMRMGVh5dLyFzBKo6M3zJu8p=z`H5w1E zm+Gx=`EGf+fqgW>U$HkBa!lmsVW3YCh3)^L7 zPDMF&n>#37*n}fDNL?VkqvzzPtS5{HpKPZq*~TsjN7uoB4VIWkqqA&mkvv^&eX*3f)0a#Zs+NTxs$ z>YzA30?;Cnn7{X8$do^(g72NQa1bfa2;hrKxehmh3SfSnc7Lr9k%ciBY6d4z zfZV26t5g)5^iR5pKp=U$Mf4J)i$;hLWz;Qg?7PUwBDkY^(FS6;^L{%p57_KeNk5hK#?eIJQ-ZJb3&_dsa z-u+P$_FherDtm>n%rRL_C)2FyOjKU)zDK>#`tY+ebfqrq!=7dZ4~@yUsjU>|pYiia zui5F@{g=B;Q1PhQ&WoTe~Jdm zL)x0SNp;VZM3PlHCf!3TDVe&Z&Z4a4s~;k%H=A2CqfKcJ<93&W8@R{7{UbB#rP)k- z+L0A61d9fHMI5C|Zme{r6AIRLQ4Zlf_z5d>EEUwiFop0ZAhQA>6slY5P_Q{#s8Lnz}XlTf8ets9GK`eul)$TWITeK-F{AQ11 z{dMeo$n%Spb7Af-JAN6`2box}cPrXKeUvEI4f1uD^~nIj#jy?Dn|8a{t7;(YcUIk0 zP5s^(a{AeUBwEgA3<<`r<4!Fx$Tfbj_UJdgRFs#cX8_jAi5B?VbtTbOy`N+A%TXFu$3t9nNAc!K*$i{?uD3CMx9XgKqMi-|>Qi3LN&BwEN-AWuwS%#4KWCbY*h! zkm6@bFAdU_!S2^r|G$hg=Zv5q>K1M<_X#i)z5PleCcVCvcb;K{cbs2055_e zW*NinSSOYXqz{c_=v(~`%7`?*$!(q^s$;%eyOd(Hn$h_v9BkpL2b<)Y7~M!BRJ>A@ z

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

    Vt+xtO)m$@(?N*8y+H*;^~N2Y;ob!k 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 +(6&-G3lk-okMD@Bl;(o+smf9N0tcfP( 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�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 KDOifGSMz_WDbkAo literal 0 HcmV?d00001 diff --git a/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java new file mode 100644 index 00000000..8ca30709 --- /dev/null +++ b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/AssemblyTable.java @@ -0,0 +1,182 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mods.buildcraft; + +import buildcraft.api.recipes.AssemblyRecipe; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import minetweaker.IUndoableAction; +import minetweaker.MineTweakerAPI; +import minetweaker.annotations.ModOnly; +import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IItemStack; +import minetweaker.api.minecraft.MineTweakerMC; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +/** + * + * @author Stan + */ +@ZenClass("mods.buildcraft.AssemblyTable") +@ModOnly("BuildCraft|Core") +public class AssemblyTable { + @ZenMethod + public static void addRecipe(IItemStack output, double energy, IIngredient[] ingredients) { + MineTweakerAPI.apply(new AddRecipeAction(output, energy, ingredients)); + } + + @ZenMethod + public static void remove(IIngredient output) { + removeRecipe(output, null, false); + } + + @ZenMethod + public static void removeRecipe(IIngredient output, @Optional IIngredient[] ingredients, @Optional boolean wildcard) { + List toRemove = new ArrayList(); + + outer: for (AssemblyRecipe recipe : AssemblyRecipe.assemblyRecipes) { + if (output.matches(MineTweakerMC.getIItemStack(recipe.output)) + && ingredientsMatch(recipe, ingredients, wildcard)) { + toRemove.add(recipe); + } + } + + for (AssemblyRecipe recipe : toRemove) { + MineTweakerAPI.apply(new RemoveRecipeAction(recipe)); + } + } + + /** + * Checks if ingredients from the recipe match with the given ingredients. + * + * @param recipe recipe to check + * @param ingredients required ingredients + * @param wildcard true if there can be more ingredients in the recipe than given, false otherwise + * @return matching result + */ + private static boolean ingredientsMatch(AssemblyRecipe recipe, IIngredient[] ingredients, boolean wildcard) { + if (ingredients == null) + return true; + + int matchedIngredients = 0; + boolean[] matched = new boolean[ingredients.length]; + checkIngredient: for (int i = 0; i < recipe.input.length; i++) { + Object ingredientObject = recipe.input[i]; + if (ingredientObject instanceof Number) + continue; + + IIngredient recipeIngredient = MineTweakerMC.getIIngredient(recipe.input[i]); + + for (int j = 0; j < ingredients.length; j++) { + if (!matched[j] && ingredients[j].contains(recipeIngredient)) { + matched[j] = true; + matchedIngredients++; + continue checkIngredient; + } + } + + if (!wildcard) + return false; + } + + return matchedIngredients == ingredients.length; + } + + // ###################### + // ### Action classes ### + // ###################### + + private static class AddRecipeAction implements IUndoableAction { + private final IItemStack output; + private final AssemblyRecipe recipe; + + public AddRecipeAction(IItemStack output, double energy, IIngredient[] ingredients) { + this.output = output; + + Object[] mcIngredients = new Object[ingredients.length]; + for (int i = 0; i < ingredients.length; i++) { + mcIngredients[i] = ingredients[i].getInternal(); + if (mcIngredients[i] == null) { + throw new IllegalArgumentException("Not a valid assembly table ingredient"); + } + } + + recipe = new AssemblyRecipe((int) energy, MineTweakerMC.getItemStack(output), mcIngredients); + } + + @Override + public void apply() { + AssemblyRecipe.assemblyRecipes.add(recipe); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + AssemblyRecipe.assemblyRecipes.remove(recipe); + } + + @Override + public String describe() { + return "Adding assembly table recipe for " + output; + } + + @Override + public String describeUndo() { + return "Removing assembly table recipe for " + output; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class RemoveRecipeAction implements IUndoableAction { + private final AssemblyRecipe recipe; + + public RemoveRecipeAction(AssemblyRecipe recipe) { + this.recipe = recipe; + } + + @Override + public void apply() { + AssemblyRecipe.assemblyRecipes.remove(recipe); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + AssemblyRecipe.assemblyRecipes.add(recipe); + } + + @Override + public String describe() { + return "Removing assembly table recipe for " + MineTweakerMC.getIItemStack(recipe.output); + } + + @Override + public String describeUndo() { + return "Restoring assembly table recipe for " + MineTweakerMC.getIItemStack(recipe.output); + } + + @Override + public Object getOverrideKey() { + return null; + } + } +} diff --git a/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java new file mode 100644 index 00000000..994e14c7 --- /dev/null +++ b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Fuels.java @@ -0,0 +1,375 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mods.buildcraft; + +import buildcraft.api.core.StackWrapper; +import buildcraft.api.fuels.IronEngineCoolant; +import buildcraft.api.fuels.IronEngineFuel; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.logging.Level; +import java.util.logging.Logger; +import minetweaker.IUndoableAction; +import minetweaker.MineTweakerAPI; +import minetweaker.annotations.ModOnly; +import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IItemStack; +import minetweaker.api.liquid.ILiquidStack; +import minetweaker.api.minecraft.MineTweakerMC; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +/** + * + * @author Stan + */ +@ZenClass("mods.buildcraft.Fuels") +@ModOnly("BuildCraft|Core") +public class Fuels { + private static final Constructor CONSTRUCT_FUEL; + + static { + Constructor newFuel = null; + try { + newFuel = IronEngineFuel.Fuel.class.getDeclaredConstructor(Fluid.class, float.class, int.class); + newFuel.setAccessible(true); + } catch (NoSuchMethodException ex) { + MineTweakerAPI.logError("Could not load combustion engine fuel constructor", ex); + } catch (SecurityException ex) { + MineTweakerAPI.logError("Could not load combustion engine fuel constructor", ex); + } + + CONSTRUCT_FUEL = newFuel; + } + + @ZenMethod + public static void addCombustionEngineFuel(ILiquidStack fuel, double powerPerCycle, int totalBurningTime) { + MineTweakerAPI.apply(new AddFuelAction(fuel, powerPerCycle, totalBurningTime)); + } + + @ZenMethod + public static void removeCombustionEngineFuel(ILiquidStack fuel) { + Fluid fluid = MineTweakerMC.getLiquidStack(fuel).getFluid(); + if (IronEngineFuel.fuels.containsKey(fluid.getName())) { + MineTweakerAPI.apply(new RemoveFuelAction(fluid.getName(), IronEngineFuel.fuels.get(fluid.getName()))); + } else { + MineTweakerAPI.logWarning("No such iron engine fuel: " + fluid.getName()); + } + } + + @ZenMethod + public static void addCombustionEngineCoolant(ILiquidStack coolant, float coolingPerMB) { + MineTweakerAPI.apply(new AddLiquidCoolantAction(coolant.getName(), new MTCoolant(coolingPerMB))); + } + + @ZenMethod + public static void addCoolantItem(IItemStack coolantItem, ILiquidStack coolantLiquid) { + MineTweakerAPI.apply(new AddCoolantItemAction(new StackWrapper(MineTweakerMC.getItemStack(coolantItem)), MineTweakerMC.getLiquidStack(coolantLiquid))); + } + + @ZenMethod + public static void removeCombustionEngineCoolant(ILiquidStack coolant) { + FluidStack fluid = MineTweakerMC.getLiquidStack(coolant); + + if (IronEngineCoolant.isCoolant(fluid.getFluid())) { + MineTweakerAPI.apply(new RemoveLiquidCoolantAction(fluid.getFluid().getName(), IronEngineCoolant.getCoolant(fluid))); + } else { + MineTweakerAPI.logWarning("No such iron engine coolant: " + fluid.getFluid().getName()); + } + } + + @ZenMethod + public static void removeCoolantItem(IIngredient item) { + int numRemoved = 0; + for (IItemStack itemStack : item.getItems()) { + StackWrapper key = new StackWrapper(MineTweakerMC.getItemStack(itemStack)); + if (IronEngineCoolant.solidCoolants.containsKey(key)) { + MineTweakerAPI.apply(new RemoveCoolantItemAction(key, IronEngineCoolant.solidCoolants.get(key))); + numRemoved++; + } + } + + if (numRemoved == 0) { + MineTweakerAPI.logWarning("No such iron engine coolant: " + item); + } + } + + // ###################### + // ### Action classes ### + // ###################### + + private static class AddFuelAction implements IUndoableAction { + private final String fuelName; + private final IronEngineFuel.Fuel fuel; + + public AddFuelAction(ILiquidStack fuel, double powerPerCycle, int totalBurningTime) { + fuelName = fuel.getName(); + IronEngineFuel.Fuel ieFuel = null; + try { + if (CONSTRUCT_FUEL == null) + System.out.println("No constructor for fuel"); + + ieFuel = (IronEngineFuel.Fuel) CONSTRUCT_FUEL.newInstance(MineTweakerMC.getLiquidStack(fuel).getFluid(), (float) powerPerCycle, totalBurningTime); + } catch (InstantiationException ex) { + Logger.getLogger(Fuels.class.getName()).log(Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + Logger.getLogger(Fuels.class.getName()).log(Level.SEVERE, null, ex); + } catch (IllegalArgumentException ex) { + Logger.getLogger(Fuels.class.getName()).log(Level.SEVERE, null, ex); + } catch (InvocationTargetException ex) { + Logger.getLogger(Fuels.class.getName()).log(Level.SEVERE, null, ex); + } + + this.fuel = ieFuel; + } + + @Override + public void apply() { + IronEngineFuel.fuels.put(fuelName, fuel); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + IronEngineFuel.fuels.remove(fuelName); + } + + @Override + public String describe() { + return "Adding iron engine fuel " + fuelName; + } + + @Override + public String describeUndo() { + return "Removing iron engine fuel " + fuelName; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class RemoveFuelAction implements IUndoableAction { + private final String fuelName; + private final IronEngineFuel.Fuel fuel; + + public RemoveFuelAction(String fuelName, IronEngineFuel.Fuel fuel) { + this.fuelName = fuelName; + this.fuel = fuel; + } + + @Override + public void apply() { + IronEngineFuel.fuels.remove(fuelName); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + IronEngineFuel.fuels.put(fuelName, fuel); + } + + @Override + public String describe() { + return "Removing iron engine fuel " + fuelName; + } + + @Override + public String describeUndo() { + return "Restoring iron engine fuel " + fuelName; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class AddLiquidCoolantAction implements IUndoableAction { + private final String liquid; + private final IronEngineCoolant.Coolant coolant; + + public AddLiquidCoolantAction(String liquid, IronEngineCoolant.Coolant coolant) { + this.liquid = liquid; + this.coolant = coolant; + } + + @Override + public void apply() { + IronEngineCoolant.liquidCoolants.put(liquid, coolant); + } + + @Override + public boolean canUndo() { + return false; + } + + @Override + public void undo() { + IronEngineCoolant.liquidCoolants.remove(liquid); + } + + @Override + public String describe() { + return "Adding iron engine coolant " + liquid; + } + + @Override + public String describeUndo() { + return "Removing iron engine coolant " + liquid; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class AddCoolantItemAction implements IUndoableAction { + private final StackWrapper item; + private final FluidStack liquid; + + public AddCoolantItemAction(StackWrapper item, FluidStack liquid) { + this.item = item; + this.liquid = liquid; + } + + @Override + public void apply() { + IronEngineCoolant.solidCoolants.put(item, liquid); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + IronEngineCoolant.solidCoolants.remove(item); + } + + @Override + public String describe() { + return "Adding iron engine coolant item " + MineTweakerMC.getIItemStack(item.stack); + } + + @Override + public String describeUndo() { + return "Removing iron engine coolant item " + MineTweakerMC.getIItemStack(item.stack); + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class RemoveLiquidCoolantAction implements IUndoableAction { + private final String liquid; + private final IronEngineCoolant.Coolant coolant; + + public RemoveLiquidCoolantAction(String liquid, IronEngineCoolant.Coolant coolant) { + this.liquid = liquid; + this.coolant = coolant; + } + + @Override + public void apply() { + IronEngineCoolant.liquidCoolants.remove(liquid); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + IronEngineCoolant.liquidCoolants.put(liquid, coolant); + } + + @Override + public String describe() { + return "Removing iron engine coolant " + liquid; + } + + @Override + public String describeUndo() { + return "Restoring iron engine coolant " + liquid; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class RemoveCoolantItemAction implements IUndoableAction { + private final StackWrapper item; + private final FluidStack liquid; + + public RemoveCoolantItemAction(StackWrapper item, FluidStack liquid) { + this.item = item; + this.liquid = liquid; + } + + @Override + public void apply() { + IronEngineCoolant.solidCoolants.remove(item); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + IronEngineCoolant.solidCoolants.put(item, liquid); + } + + @Override + public String describe() { + return "Removing iron engine coolant item " + item.stack.getDisplayName(); + } + + @Override + public String describeUndo() { + return "Restoring iron engine coolant item " + item.stack.getDisplayName(); + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class MTCoolant implements IronEngineCoolant.Coolant { + private final float coolingPerMB; + + public MTCoolant(float coolingPerMB) { + this.coolingPerMB = coolingPerMB; + } + + @Override + public float getDegreesCoolingPerMB(float f) { + return coolingPerMB; + } + } +} diff --git a/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java new file mode 100644 index 00000000..3ed5ec68 --- /dev/null +++ b/MineTweaker3-MC164-Mod-Buildcraft/src/main/java/minetweaker/mods/buildcraft/Refinery.java @@ -0,0 +1,200 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package minetweaker.mods.buildcraft; + +import buildcraft.api.recipes.RefineryRecipes; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; +import java.util.SortedSet; +import java.util.logging.Level; +import java.util.logging.Logger; +import minetweaker.IUndoableAction; +import minetweaker.MineTweakerAPI; +import minetweaker.annotations.ModOnly; +import minetweaker.api.liquid.ILiquidStack; +import minetweaker.api.minecraft.MineTweakerMC; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import stanhebben.zenscript.annotations.Optional; +import stanhebben.zenscript.annotations.ZenClass; +import stanhebben.zenscript.annotations.ZenMethod; + +/** + * + * @author Stan + */ +@ZenClass("mods.buildcraft.Refinery") +@ModOnly("BuildCraft|Core") +public class Refinery { + private static final Constructor CONSTRUCT_REFINERYRECIPE; + private static final Field REFINERYRECIPEMANAGER_RECIPES; + + static { + Constructor constructor = null; + try { + constructor = RefineryRecipes.Recipe.class.getDeclaredConstructor(FluidStack.class, FluidStack.class, FluidStack.class, int.class, int.class); + constructor.setAccessible(true); + } catch (NoSuchMethodException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (SecurityException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } + + Field recipes = null; + try { + recipes = RefineryRecipes.class.getDeclaredField("recipes"); + recipes.setAccessible(true); + } catch (NoSuchFieldException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (SecurityException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } + + CONSTRUCT_REFINERYRECIPE = constructor; + REFINERYRECIPEMANAGER_RECIPES = recipes; + } + + + @ZenMethod + public static void addRecipe(ILiquidStack output, int energyPerMB, int ticksPerMB, ILiquidStack input1, @Optional ILiquidStack input2) { + MineTweakerAPI.apply(new AddRecipeAction(output, energyPerMB, ticksPerMB, input1, input2)); + } + + @ZenMethod + public static void remove(ILiquidStack output) { + Fluid fluid = MineTweakerMC.getLiquidStack(output).getFluid(); + + List toRemove = new ArrayList(); + for (RefineryRecipes.Recipe recipe : RefineryRecipes.getRecipes()) { + if (recipe.result.getFluid() == fluid) { + toRemove.add(recipe); + } + } + + for (RefineryRecipes.Recipe recipe : toRemove) { + MineTweakerAPI.apply(new RemoveRecipeAction(recipe)); + } + } + + private static SortedSet getRecipes() { + try { + return (SortedSet) REFINERYRECIPEMANAGER_RECIPES.get(null); + } catch (IllegalArgumentException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } + + throw new RuntimeException("Refinery recipes unavailable"); + } + + // ###################### + // ### Action Classes ### + // ###################### + + private static class AddRecipeAction implements IUndoableAction { + private final ILiquidStack output; + private final RefineryRecipes.Recipe recipe; + + public AddRecipeAction(ILiquidStack output, int energyPerMB, int ticksPerMB, ILiquidStack input1, ILiquidStack input2) { + this.output = output; + + RefineryRecipes.Recipe rrecipe = null; + try { + rrecipe = (RefineryRecipes.Recipe) CONSTRUCT_REFINERYRECIPE.newInstance( + MineTweakerMC.getLiquidStack(input1), + MineTweakerMC.getLiquidStack(input2), + MineTweakerMC.getLiquidStack(output), + energyPerMB, + ticksPerMB); + } catch (InstantiationException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (IllegalArgumentException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } catch (InvocationTargetException ex) { + Logger.getLogger(Refinery.class.getName()).log(Level.SEVERE, null, ex); + } + + recipe = rrecipe; + } + + @Override + public void apply() { + getRecipes().add(recipe); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + getRecipes().add(recipe); + } + + @Override + public String describe() { + return "Adding refinery recipe for " + output; + } + + @Override + public String describeUndo() { + return "Removing refinery recipe for " + output; + } + + @Override + public Object getOverrideKey() { + return null; + } + } + + private static class RemoveRecipeAction implements IUndoableAction { + private final RefineryRecipes.Recipe recipe; + + public RemoveRecipeAction(RefineryRecipes.Recipe recipe) { + this.recipe = recipe; + } + + @Override + public void apply() { + getRecipes().remove(recipe); + } + + @Override + public boolean canUndo() { + return true; + } + + @Override + public void undo() { + getRecipes().add(recipe); + } + + @Override + public String describe() { + return "Removing refinery recipe for " + + recipe.result.getFluid().getLocalizedName(); + } + + @Override + public String describeUndo() { + return "Restoring refinery recipe for " + + recipe.result.getFluid().getLocalizedName(); + } + + @Override + public Object getOverrideKey() { + return null; + } + } +} diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java index 08770926..12c0fa23 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/api/minecraft/MineTweakerMC.java @@ -137,6 +137,15 @@ public static IItemStack getIItemStackWildcard(Item item, int amount) { return new MCItemStack(new ItemStack(item, 1, OreDictionary.WILDCARD_VALUE)); } + public static ItemStack[] getExamples(IIngredient ingredient) { + List examples = ingredient.getItems(); + ItemStack[] result = new ItemStack[examples.size()]; + for (int i = 0; i < examples.size(); i++) { + result[i] = MineTweakerMC.getItemStack(examples.get(i)); + } + return result; + } + /** * Constructs an item stack with given item, damage and amount. * @@ -381,6 +390,50 @@ public static IBlock getBlock(Block block, int meta) { * @return MCF fluid stack */ public static FluidStack getLiquidStack(ILiquidStack stack) { + if (stack == null) + return null; + return (FluidStack) stack.getInternal(); } + + private static final HashMap oreDictArrays = new HashMap(); + public static IOreDictEntry getOreDictEntryFromArray(List array) { + if (!oreDictArrays.containsKey(array)) { + for (String ore : OreDictionary.getOreNames()) { + if (OreDictionary.getOres(ore) == array) { + oreDictArrays.put(array, MineTweakerAPI.oreDict.get(ore)); + } + } + } + + return oreDictArrays.get(array); + } + + /** + * Converts a Minecraft ingredient to a MineTweaker ingredient. + * + * @param ingredient minecraft ingredient + * @return minetweaker ingredient + */ + public static IIngredient getIIngredient(Object ingredient) { + if (ingredient == null) { + return null; + } else if (ingredient instanceof String) { + return MineTweakerAPI.oreDict.get((String) ingredient); + } else if (ingredient instanceof Item) { + return getIItemStack(new ItemStack((Item) ingredient, 1, 0)); + } else if (ingredient instanceof ItemStack) { + return getIItemStack((ItemStack) ingredient); + } else if (ingredient instanceof List) { + IOreDictEntry entry = getOreDictEntryFromArray((List) ingredient); + + if (entry == null) { + throw new IllegalArgumentException("No matching oredict entry: " + ingredient); + } + + return entry; + } else { + throw new IllegalArgumentException("Not a valid ingredient: " + ingredient); + } + } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/MineTweakerMod.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/MineTweakerMod.java index a397e261..6166f9f2 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/MineTweakerMod.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/MineTweakerMod.java @@ -51,7 +51,7 @@ * * @author Stan Hebben */ -@Mod(modid = MineTweakerMod.MODID, version = "${version}") +@Mod(modid = MineTweakerMod.MODID, version = "3.0.9") public class MineTweakerMod { public static final String MODID = "MineTweaker3"; public static final String MCVERSION = "1.7.10"; @@ -62,13 +62,15 @@ public class MineTweakerMod { "minetweaker.mods.ic2.ClassRegistry", "minetweaker.mods.nei.ClassRegistry", "minetweaker.mods.mfr.ClassRegistry", - "minetweaker.mods.gregtech.ClassRegistry" + "minetweaker.mods.gregtech.ClassRegistry", + "minetweaker.mods.buildcraft.ClassRegistry" }; private static final String[] REGISTRY_DESCRIPTIONS = { "IC2 mod support", "NEI mod support", "MFR mod support", - "GregTech mod support" + "GregTech mod support", + "Buildcraft mod support" }; static { @@ -122,10 +124,10 @@ public void onIMCEvent(FMLInterModComms.IMCEvent event) { for (final FMLInterModComms.IMCMessage imcMessage : event.getMessages()) { if (imcMessage.key.equalsIgnoreCase("addMineTweakerScript")) { if (imcMessage.isStringMessage()) { - scriptsIMC.add("imc", imcMessage.getStringValue()); + scriptsIMC.add(imcMessage.getSender() + "::imc", imcMessage.getStringValue()); } else if (imcMessage.isNBTMessage()) { NBTTagCompound message = imcMessage.getNBTValue(); - scriptsIMC.add(message.getString("name"), message.getString("content")); + scriptsIMC.add(imcMessage.getSender() + "::" + message.getString("name"), message.getString("content")); } } } diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemDefinition.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemDefinition.java index 90e038cd..e69a2b95 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemDefinition.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemDefinition.java @@ -6,11 +6,16 @@ package minetweaker.mc1710.item; +import java.util.ArrayList; +import java.util.List; +import minetweaker.MineTweakerAPI; import minetweaker.api.item.IItemDefinition; import minetweaker.api.item.IItemStack; import minetweaker.api.minecraft.MineTweakerMC; +import minetweaker.api.oredict.IOreDictEntry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; /** * @@ -39,6 +44,22 @@ public String getName() { public IItemStack makeStack(int meta) { return MineTweakerMC.getIItemStackWildcardSize(new ItemStack(item, 1, meta)); } + + @Override + public List getOres() { + List result = new ArrayList(); + + for (String key : OreDictionary.getOreNames()) { + for (ItemStack is : OreDictionary.getOres(key)) { + if (is.getItem() == item) { + result.add(MineTweakerAPI.oreDict.get(key)); + break; + } + } + } + + return result; + } // ############################# // ### Object implementation ### diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemStack.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemStack.java index eb4975b3..a5ac720f 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemStack.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/item/MCItemStack.java @@ -6,6 +6,7 @@ package minetweaker.mc1710.item; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import minetweaker.MineTweakerAPI; @@ -24,6 +25,7 @@ import minetweaker.api.item.WeightedItemStack; import minetweaker.api.liquid.ILiquidStack; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; +import minetweaker.api.oredict.IOreDictEntry; import minetweaker.api.player.IPlayer; import minetweaker.mc1710.actions.SetTranslationAction; import minetweaker.mc1710.block.MCItemBlock; @@ -66,6 +68,13 @@ private MCItemStack(ItemStack itemStack, IData tag) { items = Collections.singletonList(this); this.tag = tag; } + + private MCItemStack(ItemStack itemStack, IData tag, boolean wildcardSize) { + stack = itemStack; + items = Collections.singletonList(this); + this.tag = tag; + this.wildcardSize = wildcardSize; + } @Override public IItemDefinition getDefinition() { @@ -140,6 +149,13 @@ public IItemStack withDamage(int damage) { return new MCItemStack(result, tag); } } + + @Override + public IItemStack anyAmount() { + ItemStack result = new ItemStack(stack.getItem(), 1, stack.getItemDamage()); + result.stackTagCompound = stack.stackTagCompound; + return new MCItemStack(result, tag, true); + } @Override public IItemStack withAmount(int amount) { @@ -264,6 +280,23 @@ public IBlock asBlock() { } } + @Override + public List getOres() { + List result = new ArrayList(); + + for (String key : OreDictionary.getOreNames()) { + for (ItemStack is : OreDictionary.getOres(key)) { + if (is.getItem() == stack.getItem() + && (is.getItemDamage() == OreDictionary.WILDCARD_VALUE || is.getItemDamage() == stack.getItemDamage())) { + result.add(MineTweakerAPI.oreDict.get(key)); + break; + } + } + } + + return result; + } + // ############################# // ### Object implementation ### // ############################# diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/oredict/MCOreDictEntry.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/oredict/MCOreDictEntry.java index 3f17d3b5..bba50286 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/oredict/MCOreDictEntry.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/oredict/MCOreDictEntry.java @@ -188,6 +188,11 @@ public Object getInternal() { // ### Object implementation ### // ############################# + @Override + public String toString() { + return ""; + } + @Override public int hashCode() { return id; diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/MCRecipeManager.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/MCRecipeManager.java index 5740ab3c..96329536 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/MCRecipeManager.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/MCRecipeManager.java @@ -9,6 +9,7 @@ import minetweaker.mc1710.util.MineTweakerHacks; import minetweaker.api.item.IIngredient; import minetweaker.api.item.IItemStack; +import minetweaker.api.minecraft.MineTweakerMC; import static minetweaker.api.minecraft.MineTweakerMC.getIItemStack; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; import static minetweaker.api.minecraft.MineTweakerMC.getOreDict; @@ -54,6 +55,32 @@ public void applyTransformations(ICraftingInventory inventory, IPlayer byPlayer) } } + @Override + public List getRecipesFor(IIngredient ingredient) { + List results = new ArrayList(); + + for (IRecipe recipe : recipes) { + if (ingredient.matches(MineTweakerMC.getIItemStack(recipe.getRecipeOutput()))) { + ICraftingRecipe converted = RecipeConverter.toCraftingRecipe(recipe); + results.add(converted); + } + } + + return results; + } + + @Override + public List getAll() { + List results = new ArrayList(); + + for (IRecipe recipe : recipes) { + ICraftingRecipe converted = RecipeConverter.toCraftingRecipe(recipe); + results.add(converted); + } + + return results; + } + @Override public int remove(IIngredient output) { List toRemove = new ArrayList(); diff --git a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/RecipeConverter.java b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/RecipeConverter.java index 651cb170..5023e069 100644 --- a/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/RecipeConverter.java +++ b/MineTweaker3-MC1710-Main/src/main/java/minetweaker/mc1710/recipes/RecipeConverter.java @@ -11,9 +11,17 @@ import java.util.ArrayList; import java.util.Arrays; import minetweaker.api.item.IIngredient; +import minetweaker.api.item.IItemStack; +import minetweaker.api.minecraft.MineTweakerMC; import static minetweaker.api.minecraft.MineTweakerMC.getItemStack; +import minetweaker.api.recipes.ICraftingRecipe; +import minetweaker.api.recipes.UnknownRecipe; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; /** * @@ -76,7 +84,6 @@ public static IRecipe convert(ShapedRecipe recipe) { // construct recipe if (type == TYPE_BASIC) { - System.out.println("Converted to basic recipe"); ItemStack[] basicIngredients = new ItemStack[recipe.getHeight() * recipe.getWidth()]; for (int i = 0; i < ingredients.length; i++) { basicIngredients[posx[i] + posy[i] * recipe.getWidth()] = getItemStack(ingredients[i]); @@ -84,7 +91,6 @@ public static IRecipe convert(ShapedRecipe recipe) { return new ShapedRecipeBasic(basicIngredients, recipe); } else if (type == TYPE_ORE) { - System.out.println("Converted to ore recipe"); Object[] converted = new Object[recipe.getHeight() * recipe.getWidth()]; for (int i = 0; i < ingredients.length; i++) { converted[posx[i] + posy[i] * recipe.getWidth()] = ingredients[i].getInternal(); @@ -117,8 +123,58 @@ public static IRecipe convert(ShapedRecipe recipe) { return new ShapedRecipeOre(rarguments.toArray(), recipe); } else { - System.out.println("Converted to advanced recipe"); return new ShapedRecipeAdvanced(recipe); } } + + public static ICraftingRecipe toCraftingRecipe(IRecipe recipe) { + IItemStack output = MineTweakerMC.getIItemStack(recipe.getRecipeOutput()); + + if (recipe instanceof ShapelessRecipes) { + ShapelessRecipes shapeless = (ShapelessRecipes) recipe; + + IIngredient[] ingredients = new IIngredient[shapeless.recipeItems.size()]; + for (int i = 0; i < ingredients.length; i++) { + ingredients[i] = MineTweakerMC.getIIngredient(shapeless.recipeItems.get(i)); + } + + return new ShapelessRecipe(output, ingredients, null); + } else if (recipe instanceof ShapedRecipes) { + ShapedRecipes shaped = (ShapedRecipes) recipe; + + IIngredient[][] ingredients = new IIngredient[shaped.recipeHeight][shaped.recipeWidth]; + for (int i = 0; i < shaped.recipeHeight; i++) { + for (int j = 0; j < shaped.recipeWidth; j++) { + ingredients[i][j] = MineTweakerMC.getIItemStack(shaped.recipeItems[i * shaped.recipeWidth + j]); + } + } + + return new ShapedRecipe(output, ingredients, null, false); + } else if (recipe instanceof ShapedOreRecipe) { + ShapedOreRecipe shaped = (ShapedOreRecipe) recipe; + + int width = (int) Math.sqrt(recipe.getRecipeSize()); + int height = recipe.getRecipeSize() / width; + + IIngredient[][] recipeIngredients = new IIngredient[height][width]; + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + recipeIngredients[i][j] = MineTweakerMC.getIIngredient(shaped.getInput()[i * width + j]); + } + } + + return new ShapedRecipe(output, recipeIngredients, null, false); + } else if (recipe instanceof ShapelessOreRecipe) { + ShapelessOreRecipe shapeless = (ShapelessOreRecipe) recipe; + + IIngredient[] ingredients = new IIngredient[shapeless.getRecipeSize()]; + for (int i = 0; i < ingredients.length; i++) { + ingredients[i] = MineTweakerMC.getIIngredient(shapeless.getInput().get(i)); + } + + return new ShapelessRecipe(output, ingredients, null); + } else { + return new UnknownRecipe(output); + } + } } diff --git a/MineTweaker3-MC1710-Mod-Buildcraft/build.gradle b/MineTweaker3-MC1710-Mod-Buildcraft/build.gradle new file mode 100644 index 00000000..6fa598b6 --- /dev/null +++ b/MineTweaker3-MC1710-Mod-Buildcraft/build.gradle @@ -0,0 +1,42 @@ +import minetweaker.tasks.RegisterZenClassesTask; + +buildscript { + repositories { + mavenCentral() + maven { + name = "forge" + url = "http://files.minecraftforge.net/maven" + } + maven { + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" + } + } + dependencies { + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2-SNAPSHOT' + } +} + +apply plugin: 'forge' + +minecraft { + version = forgeVersion1710 +} + +version = "1.0" +archivesBaseName = project.projectDir.name + +dependencies { + compile project(':ZenScript') + compile project(':MineTweaker3-API') + compile project(':MineTweaker3-MC1710-Main') + compile files('libs/buildcraft-6.0.18-dev.jar') +} + +task makeRegistry(type: RegisterZenClassesTask) { + inputDir = file('build/classes/main') + outputDir = file('build/classes/main') + className = 'minetweaker.mods.buildcraft.ClassRegistry' +} + +tasks.jar.dependsOn(makeRegistry) diff --git a/MineTweaker3-MC1710-Mod-Buildcraft/libs/buildcraft-6.0.18-dev.jar b/MineTweaker3-MC1710-Mod-Buildcraft/libs/buildcraft-6.0.18-dev.jar new file mode 100644 index 0000000000000000000000000000000000000000..7ea0760a79e3a71acfc13d9ea5274c15af103480 GIT binary patch literal 1815301 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 z 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

    12^hB|K{02* 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%0A09V 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

    l7+VfGrbK(;Np1P_D9(W%MzKjUWb99K< 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 z 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

    rsjfg*p$vo<}cC+P_V7H~Qq$ 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

    C>C&gskK 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 7s1vBK$2TYW$B#FIrhv9{C&V zQ+q!?qg6zU#(&~ZvDbuz{9bqFvmp3)dM(2{iDo0Uh)KJ=J=$auGJLdRU$jS%KW3Hq zLze`K@~*Pv74z%oWF1S(iW`;HqMpnPW;S&~9d*bWAqm?Xs`SaWSWi_dOCTbHsV5IY zwi;hndr>48kH)^Z>kCxwp8}VfoJ+Gj{E1^qGH=#jI}Bv&Qq*i#$rl(YGB#bCjYAh^ zt+^n(AEPf5xrlxfQR96>6q-(Lko=)gV$Ku=R19B!B$Ca83B^WMG$}8;&|YZ(-!k8z^5J_MpVY2pE=40<|w_nWn=hLyd0A%$hMA7vu zS~m)``($JWnJ%6tdyHg@Or{2Fy~rUV(aUa_D_Ft}G~ON}$Fv~}1rEX9!wC48n?+To zwHFL7C_(34HVY9kUm56?D5q5Jq<*ZM`#8XNC)u%rY@3I^t`rMhg(A)7w8T64Wa_YKH67RZT=+ z0Dt#WjLD@=*T6iXo@1`Dkhi7KnBHWgP%U)@^;_D0!?*I3t%DLJhp zJSO+rcO*WTl%F{yWb@qwyQsAtz^umqys;rl7XMMNSkCb)n?FJBm!js3GUa*Ir*tBQ zmUn0>FvEZ=91tMQw1J&FY|lXz)S|`otEJ4vjgMVEE-so(lUCh~nZaXqGkZ3Op2%&%l>PU%T^U(L3z@fkPCdvm#pN+&1V2R}B@ zbe3qIkP~ys`5u(Q(6?ps2LC5C22<$jY!@#w)D{c+CPgut0!JdrTBH((&Q5)nu(7{qtRE*RgO?1?L4rF@B!@D*GY`5iGQ&tMZ&ZbQ0;Rw-}1Djc7lUg5#8RlH**TRC-aeu9!3y2{?7XlU~=7?&H7$vS43(2XIIPi!uFor=E zA3+pWj#1($Y-c}CNZZ`^hJ>;!VV%$-M zprnO4#rn?1fRq-2Y9*$VmLMhEX_0RAs!gD-(o0bwlLnn8;0>nFtd-3vrP1IhB8tUq z+@rD0f~#fYU2wA79=VA-alIiDl)n8ut$5sQ)iIiOnNBUrlGz@u3Ul7|qIQ%_t6qnm zgkk+rf6v;~e3R+!Fgn^va+9sZl*E)$xvlkeX`PUFSG>f>Vr~*wb_9G|w zvWni|Z;cRy$Yti!1uH6Ee%AK5oXlbhVCs<;o1zPpiv&#-T@!U}I7?twHJ`~XbIFGK z(<@>wwNjSs)}_mc^BKZyaG3J8iw_=aJB?&nW_wik#{FnGPk2eLA*ZJU>$7p31(nr> z#=@fEW|jnfz=>ib*PvTC^47z|8Ip5P*pb#e@cu~2u7PJ;;O$XC7O4q`MGD;kPJ-xx zb}*ri7~`x?uPEp#b1&b36OX9g#%)AzC|O#+NM6yh(Dj>Xs2!FOvmlNZ0b(28fc+p| z;WjlfS9mDMCP%cW+{bxuVIi#J{2cNbPd7x&3$GwBJ0Yj}?I(orZvD3guich*yvb?Y zjnvNMbC4-!aeihUkhVaO>*xt zsz1S2exZLpL*SbjOOUX;nCsvPbwp3pElK-{rBDxe5OJg>l)XbIl=235oKL#@bQfqY zcT}#8MY>PujF^_Fq2(X03x1rQ`>(tnzgE)a2nOwoDq$3a(lH*IBH{I+4iCQ;6Pz~P z+xVXYK1m~Gmr=0_-kiR|D;c$B9dyAa|ac32TzjoKkJf?NHbp5vHOx!dS;$}s)O<=kYT+38xmyv69L%y zJFam1jw|T?d;h0m>h9v|^mhlStZV;``Q>fwd?Ldxg#;rnYF-yeTyp##5Y)0uTpcN- zGL|5WuZ0@USAFT2*037Abe_=lY@b)~>!u$Xi55xd74Q%6Cr}Rnp^B$jm!oizghpGQ^rEqTz9WRmtUu>t6K}9jq>ySY!ZDOb(w@L9z1h?P|g+$U+ zV?m;CHH4ORGdR`7kA%F`H%lauk8Tdh55bE5UtbDWrGX-L;FbkX>=50=^HpXlkX5SM z@iHH}N?2ifSr-yL$k$iH@qoA2r{gJ7CgiG)P4$DA!=2*g{(i&00YdsElf?QUc3G-| z%3jG{SV6!Y1Qh0Xf>cm6C2je7LFtU2{!IgNaz0fFW%3H45AO(vf04)9-<}Xs zl()BI@t+NzDY?lqY8mPlF$R9 z!vx(DrWCfRn=pE?;vdlR1ugyDhoH3YkODI_d!Z7ZX~q0~=N0hGm}+<#uj#BVrg3LQ1UI{`hrjPdb`#oJP%o(fBzUi$GlH z{Q%*9#AYMF6@R^{|FQPv1^?=6xM5#k~0}S zO_P%I@o~e6@)@d~K9_SZ)bESOQYaai&M|?iJOx%U(4cYSGZcqoWSUfm&1jh850EvR zAHFk+Yu^KX%x|qhRGnfH+gXyTU-^kn z-FG<3M{1aKm+7L5eqE|Q@#FqntS`T79ch;#yTz`!)Ep*c6o~s+)YX}-XopQ3c@kn4 zYVefL`#!-_+WxSYqKeE?Yxw*dcGqVF!;@iMlVD5%4>v4rQ=&C!Dqpa zHgCxNhVzk0sLponEi-D9L#Uwv$$dVhi~DlrVjM5ri3&J_;gBlwrTdG%&wSZq;F>~c zoI>Z@$jCqDxe&)KsNOzhK+$YDx<(&NUK$9)(4n%Jk&K^CKp(o^w)QkkK+bgL1OoJn zU6Ib$qd%vM1C%Fud{U3q=00PUz)e*!JX%zjw#fgUkBKJO%-4U@h0b8UbF%;b zk5~T|G5Xi2u~}7DSy>%Lmz+?9PF+An0TN1y6@(ORc1`G;l7fvbC@NT_N!VA7f43RAR5uT4gfk>@27V#KQyp6R<*c%jY>Q{jZc2NrsQYQpydK(j2ek_vK8ckO=P*1#t+=-@7*Cyh$hb+ zOhSC8mf&3c>ai{xQ|107Vd*OY&0T4K>3v2TEL&r1N^LM~l7C=!!6>e>)kU}IYiWfH zj$ls4#^(M#LYSkC@R(iJ#faTmSvxXwC6F%o7rKQV^5%+l0XTj7O6UiflLkw?c;6rr zAH!~eMZfUaAcR~xhUms1EseO~1gf{i9&J?m3j}`V3rKE;grSU~zAS7Pn%C4gJqh`d zU0jOLv$OTsh#0$?BFQ|rw(|SZ5H%1*n&VxK`V4o$%qI$I&6rjS(Yea?J&Shx*l&d99IH9I z^*v(w8*b4>mz!9musl_gam~swdB1XskK(cy*zlSc+aRPN=ZnKL@`YQFG^veHDINif zBkmylE%8k%BAun_4RIILOr(Z)Vk|YolT-L%DlFt()wJDRxYZXd+i-hB7ajp%SvL7C z#k0(jo^4_$49FNr3>>$4ZS0nU?8fYe9%%8=PY%r3xO_Vv*-*5Mxrp`%HE zW@1TtLSL-~PZ;5a6}x^Hii;>l`Siw~kkFD6C3+M2n6f0#daIAn^PI7+{ptn3ejR1v z{wbJ4jWfiEKS}(>(6gy(QD0kUYl}%;NZMzTexBdLBr(&LUJ1u_W(2WUQwfC9cK)b67y>FpJV=VbmXDk~o;G zg;p_nKALUXv<009o1G_!g}-qG}1BrhPOYHN}f%P+r^sjk+5UJgL=74LnUZf6pQUl9Uc z0tWJ^0boHvy~KJ-ci{W)U;Xrb^?V(hB-skXPfTki1GOVm-anvoR{*Hz=-jZ3Kb*YD zMeKU2=GTVy0&%y0T29g5CTHZITSnNjmBn}IfxGga(3dSSc1635k`b&*C3v;RLrM5v zCE}pOkTewbJDc~`Gw-xXD<^RyXYAEtQ|jec)G}EwOAHgGSE5Lh<+TOpEK|UNp@6e1 zZ3sndZg5l=e_d_=r{~A6Bof7}f@=f#_WTmxo*(+#^UFvIi^?gB(z&?11gpu$Zm_|0 zpQ|IZ7lGoipDr5);3a^8LYV}BW|Wvm(@s-SODjumg@5_rQ;zLRvYq1mSTc_A_9nr1 zweH3&$YI(HiN8t-Yy|FZ47?pH+x~T{corBw1}0zomij?mtoQV=B(t<0g`eo@_^5c+ z0@@Lf4!=q=#}YIzWmw>CZ^4{bm;>AX)39g&$^yTcf9{-J>LXjGD}ULSH^^~_GkfgK zrU1{WpmFkfk2;t#*OkRxye|{Y2x=<0F}Si(Z$6r+0NusOllCjx4B~!_OBv7DtLVFn zFo`3^-7L&@XaO(HHp&>q{(u)?;E!AwFkup_cbouj%psZ>HBH+SLs(Kb7_d9kUKseu zRa3!p@{R0dEyJWVy%fKUi~Zv}$LMT?Wf@DR=kFlvkKu@x%DGAzqUm^%5JZO-oPcnN z2#A{-*F+SbEz}lQ705YVG)Enj)=5zZe0|^Fu}^<}ry4P*6+~o!NbYLP=w2 z0JHcdfE+xkj`dgdWAa=5$ir!%D_iZE=g%PJDPVnrH$+wZQ_ir4Qx8j@Sgw;%jXq~} zhyYj$2!E_;wsgHWWOo^r1i{DjM_?&naEZ^L*JjY4HzSm>o=f7ythxmVktIk#aimTP zlgib+?+b8&=@wcuEzB6AsgCm{rR2ZX_4Jy4nso!I&|RvIbk^@MB1~bH;KR-Xz*$8Bp2*g4J#c0YeCjpqqC!Sm@2590-29jt;Xpn!?h5T^?Q z?}xyg&?UTHG~=5yUVP-@%oNgjEh|SMCCLQ*K-UA9<@=<+sqK>kW!F(*EEA=v`mu0? zrv?dglsARgsAh9m{F;={EVw|7;DY#ZSlVGGc0pVcq$XVq2z2s^h>Xk?n7Da%0{Fi!pr0-?pY*gZ0?7|v{W%CUhe!;Wcln6}YGLfy)0 ztZ5tz(>Z^e6BDlQJYDJD*Z0tk8raKeFr?Wj()}T*Thoya+Uzag^MUZCX;o^sKPiK! ziOhH3Jg`H8*gQnDZG}RQfjZP15>kf6pSsNs2exY_A!4e414A7Vyf@_$)wjez>m%)`Cz^+xUUdw)4fLC130-0!@^?AuX(BdP#wjcx5s z=q&Bb>@O4f<01=ji;okeZQYXq8n7m-&#S!)oPKx#5ca7C=!c zg)ULL-CC}mc03TX z#TIYLCXEW)R!i%vX;g|?c4$>2rD}ea^5i#2tt$;}1jgB?D>F1!o@PlDm9U2AP=D-_6eXK#&gMHJ z))e;ZUvzx_dX31O#^PuWHCL;eR~1IG-g0vouVI`z1jdQbYMa{^?q|-5^}Q5{B(H1<%TgJPeVxl z{IosNZkj5Pi^&9;-rlV_P>NM(^{OZtk@a)o5_6yp;y$1s3#ks&Ss2v{b?jq`?SDlE5}fy zAPM4Fcf<=p>nlM~FS@q|S{%(V^7#WMRJI{_U`E;Z(do2Z%FOdd z+m%B-Z>|Kh`1!I|%308rBd{E8fBb`Y>a1-EH&yL_VbGjMa9h0rQ*-{5SqSEHAvmIR zT|k=;gAs3R3QrR~3@@90a=Fuy(=yTO_AGgv&sF?#=!Hn@`qi!XEBQmDC6Rmnd2e&% ze#zziwfG(M@8Qgn)??aVg+Gb!^}SI6etgfE_?{5q{8v1~yuduqT<=6R`CHPFPD+Nl zo@thOj(Lx1fq9u(2#sx?d4`zkE_eF3QNm)_w4KQ#tdXN^=G;II?0su)7K^6D4 z%WgLp-JxcVF7uD}hf?O}{y=DHR7 zuev9R{AQDS-;)~oR77FO&Q&L3y?s|!-%6Y<@-I{Th-P8FD33cC00uD#9&(F0u7kO~ zfCL}_83u2qF6jt0QKd@L=zJrJP>7U3c>@_Z$UWcWIWtYcgAf=%z68JULjZI}rhbsi zmC>mr=?;M=tNF~{B{Kx9y&?m` zdxiE)-}OJelR<&D)K}(r*}I=`E7M!mv&;+VB3MrYv#c@*3lISi<~x&*vDviz^hWktQqN-->WfH{by$izp6;s~e=$mzM? z#!>oe0t-NfKNaQ&=ndinWbecQ@IaU%BS?@DY(aB%OkB*Bbh6wcd~N_n@*0gnH1$=< zVL6S2udFa2fVoF=I4=fz$fM6A7#cR5Bz)5(hjA3I)a74gBR{LF;PEgw9HUwlh z8=f;aiivf1b6EGzTp)(QxMv;Il?qiGu#P3ac7;@=3CJS>cdM&A41VC&p_-PZP2%3T6SGbuZ3HW|7{8a9LzO&`eli&k1uM|!sK%0f zEWO`@P}d%Hxnx{B25%xhqRv_jkzckMjo0N=#7uykU`8&FE3K||%0=?>pq(its=#f9 zUw?3P-Lla#7nlx%O0$$}K4BV|e8T2;6xCo#lrObwD>FqZlzOba_jgh2m{4ArcqQNJ zw$}0=DM_bQwWtjlzGdh{i!Xjtfz$;5JDb%H*}dN zJBBF+fAx3#Cg5LinE_dU3XAHAe`?Pc<&kNMh!MS?1*NzOEC_f1mqymD=Nb`+3 zTd6TcH~r^0vl9%wFZl=dYSD{Wq4zCJ2Qs@LogB~dU#`!-fy7E8YzcZ}imjOHzNSn^ zBt*=>v_hB6_qIc}uTqn6nZIHs#Dhvw$0=8hOWgmAu$NqMV>c4k=c)Dm&!m_+A-qXf+f16}6*Dt7A!C0Z#u4rLQ;4#WP zPq%n}V?K$ng>7V~3SqeL&)l4RjM27S&p zh2NGAD67K>U%`quwIkId@Qiob0Vh2Mzq3qz#cU9jENOSR##>SEKl&xDV$t7FT15wy zLZ?CxOf6MdfoebPXL?EjpG0raH+yr_)Xd!A-n!!D`OmjJKLpZ@twl`iQS(Lamr^Ks zW2mKT@24sDxq}|Kg;S)zj(&c6Kk1C?! zYrPnB#}N-(^`Eu06EZSxl|ZJ$U;J&+->gr>KGXNz{t-`g@Y4R4aIb7C(#eZd-MGQQ ze27cycHsS~h-_y2gJjVtgk19^A+6vXejQuXB#I zsb>3U#kcDU=AQutt)#;NXe!pgF@bTQ z)_pJ-H~xfQLzJDN4ez?>lfaZ8Gd+u6gz5ydS|m4ab+;Gjj334j~pVXtfV*a$mNbf!L|yQEsFULPFoLOsOq1o-hq(Ozj<>PCoel;KuL$0+C zD}c?{GG~k&(J>H#UuWhdN|oqPKdWsE$fj1&H|28WO3@1?v;8;Ma}1F$y_?|dV2+#c zMwy6F#cdk?2W_5X!)8}v0>;07w6BAggU7~5U_t0?bnVJ>L}yx*+`}QG|7<&1fuS6_ z82i?#ePO-A9lss}XV_TxnrUuB z<{ZsL%~Q>}Sh|*BxY+T50~rUKPQy`ddGHQsYZc7o{MZTn9%uNzU9&lNuHCrvOg3yi zB%kWC!U3vfY_fkhom+$}FK;H|i92y9qM)KWfx~Z$%=;MA%?pvZy05Y>stbi?BM15xB{UhvD6xOfVA!bO2gDvI`2Ds2E@&u=ZuOz^$*}qP`!r+_JZ^e{%uyfzjo&-^CMV>FlV>#*Icd(_eH}{ zgsK-77G8#i>^bZ};`ym@m{baKX?(btJCCov`u64;*d(S;SKF9Fu|zDUBLEGwsNt{T z=rG&6>_2y|xd3b&Y)5SZrXz9R>{@!w>+d1v7DH6tJ5@t?1?*=MO@#3e;>I{2xd zf6}A1MGpV!%T6r8Bn}UR(i7}|$s`<69UAEL?G8C?5PIl1x(3{}LNh`3+2F{La3}hQ z?{1!6`0Ogi;;%o%vperK3VPZMRkT8-E6WJ3-b{9x44Y4-C8{cgW5j#~>@_sZRaKpR_15J%*Ii!E zn;)e#60o9%#g%nmmo3)qnu#L`Y;6k*3;q0a^78r&nS5?WyYUqcCpkB5>a|}FZeBZs ziJRN4`hVCX8E5qnHR!zaWa#rX)D^6`oo#ikzv5$33352??Fm~3)a(0fE?1|l5QjXT zky478S<`0y)O6{znjkGaS1-JXTh6*@+4=REI{%S!PW$;`DWJG$knL~yx=3X471Z`o zwJD#$@vatsaBG{vdA8=b+Q?~%x|$oafMIcC?(W|EbY1@Ay}qngfR(;dP)(=FCf@qxtMp!P#u+z#7xfSX{%+{Ed);56gy!b`%4V<*Y=&khAlP1;JRi=hp4G)1J48{BV-NC*G| z7^oEJC?#Kwe|3dT`RV`NZh*>)?qZiR>!aY1qU-w%bgk~z+wYKDaenY_(|=i?&WN>T zDo)<;+q~VSlEY`R+3~!r&6h^CkkHo;TV$QcA}5_9!7HhDJ^=SRI$8fp7KSRTD1CfN z9UfR#_RBCQKcAnK)%kLxbChN@*P*4gl^cl6_HXffStP=YD?jsK+x=;?{i+7Dmy5Z% zxu1Sk|F#f(m`Luyf%y=S#1tIXK+N@{y6Rf@|5O$EU(f2}r7Q;{4dgSIY&jTRc*e#g zoB)tVAx8e9x;zuk#(E~c&gJ7aO%Ojm7Z?5S#|=6()YO~^;d2&yM@#>p%!qz#U0yVv z@t`%otAv^RCoIx}wynTp1v^5%*&5P$12?ahgr?0D7(AS$B5^-p37^>Ok~8pqD7A_z zR5Z0`^w1z%KEErsE5DNrFPdeD4qMjE&CSRtmpXFOYJrQfga{e7y{!#RWQx4F|6+^l z!dq2jbNO>t)tzYNy^-JdsXz9;)%Xskn813H^IKp1NCL%=*FIr@B_f=<41I@3ODlu- zQq7l-+P0!r=3JCVdKwbVMYineVrm(0Z*Mz0J0`4?qa!Aum~_IKn>R7q5pTlxSb}fN zc?EgKSdga7Ix8zH6w(-CMz0U&*By(x8m=-%^4CQNK}rzoaZjyYlqPQCW+iQg)c;4=|=6Ct<{e; z`D390`4XDSXp|kvFA(Tc;Xe3^_{YZAVsl4GwY?KS-r`ir;5fSRs&xaPdlmFX58E=^ zi^yt7Gu*eB5RNV~=oO%e&jJ(pgWJ;9pd1l8jAM^Oql_IWfK9_P&L+iPG~X!S&NXvg zw1?1hFTUYlLs3!D+L~_t^4t5=hXqk9|597*QWRK8by{dfHVy4#;+;W0F8&N7$-6>Y zb`ZYyjlRWANV=Olw0;^Ihon~94kbX&2qH7O6coO|BCgHL?ZCegd{P_GRHCX{w zRtQc7;H%na)Z(i#HJ8z1*LpC#TbTdR6)Jzpjf~oA?%g0i;)ol^y zrca_F%g=|3Nae4nVL`iG!Et%CGg5a)wfWyTY?j(wPop_ET0CZUh{9o;Y*!zqzkGNe z7p6?5b0Yy<^b}=etSv1)KAsOR+b_FjXJ;=R9~k}je!q-$W>#)JGIr{)Rd_J*A`rt) zzAXM==Nogc~r~;9V$?-WdCa*m*ccrL-Y#9@Eg?)sjRJ`FR#x;xxE$d-zo6huwOG=T0X?^TB$?lj5W~pgrO1Ujo}Zs1^wW2O zmT2`ABc*iGR~zbXVEe#W{M@jKy&sLen<-IdDDH`az0Z*KJiKy}OrQkRQo$ORl`zzO*b=~}Q?i@Y= z|0hckCP^v>pY^z~9Gs9^#O+1fo@QA1FJnlx*dMm+@-26|2mxq)`_a~EPG5FB2+3-9 ze6$fBFV+pZI0sZ+ zFqF?*v!r1xWBcx6icI-cLHA@`Ol=Bw{G0bs!*n*#zgBjein}CVJY{Sv=*)kQXx6U> zQJ+M@5O{LS6{qg5e8E?sr@45t9_LgP*rfUdvvU~n6k3a}TJauP&CBOBG^6yB^b(26 zk;5>;XkzFjSg2u`=hdw*CmwuV{-1u*31~yPhD=z<$8A-oZFI6AW_5J~kL{4)tHkv5 zG2oKTl=r1h?M<={Bh3Yi#3cE|^QZaQ0=uvYyYe_hdIj}15q<0F)N+cn3f*WLOSo+6 ztDjCEwKyOZE$A>@IF5<%pF9ePH5Ktd&oK9_gsu?K0&*smCb`Itp??o5MvRj<{vX%pD{gvdA(Y|_g zWCG6==H*LjMjFN9kI*%Sy&8l(Dc3&^d4-e-j=`el{X&aN#g zs;Ur5Y#0>K!@DYUc!i*%f&yLt{`=;2CmmxS&~;_=ng|WQ*B$k+^Nf^QyeTXlVJxFT z*P2~3>(H6oYcn=CAXv$0d!*34(&Lh`S)nMa2vBatyr5a{O2gv)5o@67B*{m}j5`@f zykZ;Eo3ihX27nUMWP?FHzpHqmKQBQrMpcOm@eQLKMj)NO{X71hwQlmJ#A>4qMWQqj zLIj@b-)3sD>c%}u)Ds|pYtGi$PQ+*PShn+2e|XytAQU*m^6Zo#z_#Eaw%Uou6@Of2 zwB&L76a}{|RrE8y@>24#QeE#J9!=1+#q+JO#O4E_Nz>CS3is~!$^W=ENAx;fkV{$N z`a|DwAIaZm+d}X)ZPI+T(K}`H(4fH*9dIUCkn51Xtb3CY@o!X`cRyTo&(5+=h2mk_SGPW?NUIaQ@0e7X zQfttdV42{@44n<@2>9$ga^t4GBUruM9b;0;Ep>R_mZ_JYoScXS9o@c6U`K79Hl|KS zF}58QW!TZu(w<Jk^o%+56vj$`g_g+_M29yivj&evpeOi(JnK39rRHl-(>XZy%SYh-&CbvEgG^}6e zGOjzAs9bHPcb(&vV^ZaYRTIR7AP#1;Z$FIoPF|qR@!BEIrFs}~eZ40sXWsUj#}tBp zhRXfJ>yG-3qrzBiaCsH?aOzJ+@}Fdnjl0RBlk^i9By7IxJxnm@Ph+#1UE_A9DGUh- z0o2&7x8Z!;iI{sGfH4bV6?M(Bt%~lASEpnwq2BdE~w+DlMOSZC8FEcYUS=p$nQ`9iB@85qqKsprR5LU-@USCL-TH!jxbfsr7b~}xw z*2-7K=<_0%^v_?rgXG+}V5LHX(Go`+40{8)oe$2IYIl===v$T8Go^!&aOgYEn^t9I zW#Pi(ec2qw>6_QU$O#a~#F~kB&e}5(jy5*U==%|J4-yuE1@9V*h{w%r0Gd7g(v^IOG*xpC4YCWbAG}5p`p=r|DbbwF!lP}DM*x~Zs4|T#*lLQ z0e9iQ8_h}Rb(Bj*=ufKrSq|q%F@BT%@l^aV?y=SLOOnucFRT3$7yK^KYJ1Ci-~DOf zRPIZKX$bmyxQ}zV|K%e0^piMp=WMyYSm95b{iZPs^;bgea}dOdaqV|gzh|l4&N$++TLD> zqLXI*~8i(BSgX4eoG-AolnQ9p{Qx#spIk^z_p16 zVlxVWHk21ngE7Z0#wC<9W*N6i?4{e(!kG4E`mTvqQml2`aPJgwtII@5=r2^h8I%Mx zgiN>T{-9Z{D2!;XJw|HkdJ?kgF9xIvi+~5mUc-|N7}vh>-pV92+=UiG)$sM|grX9p zXJmNOc2RzC@{{rZQWp%C1V>Oqki*)B{5KbQSvelhk32EMKEO|DgQG$P8cC_n_WG`N zRbsK3hT3Ow8jTDI*T5?)vOIS1wasqpJXyOy6NO^um4Bt_MMfaF0THS!nnDBw>&33l zUL`OeR5}L!?=ue}2k=7KB%J`ARsPMX_!E;mQ|c436pZ{vV#kW+|3nVh zHF1TzvkVXoXAZTs`W+#7QcsnNEOIf}JZzwA58xM$hbQTC1l4{V{^dUAi0He0tI(={ zG2u3$qoFy@4I_M6h%Y{khQiWJhE24nq_;*$%h#|ESm1zxs-z6ie6l$2QB6i62Ow2{;@y}NM*>V3&LZS)H~sgl}*;U%Yi9p3jdM&o101Bhi9 znO+4KjZXNzko%TQ*_g*Lwj&PRUkm*DN+4$-MfD_Ax}-% z!~SF~(Z;wc;8HQ8d&%MLNWJi@8O6RLLnrs5B@aGwJJfdU!0vL$I)i;>yI@7+uqJRigO=~fT|HK)#5{W zU6uBi{=e~zjX~aW_@eMXSgwcS-fgkS_{?^7emL%AxqG6L^it1X1)y?*MIQ~tqLmD4W9SIxMYh1fz!%@F%)4U9RvuZ0VUmsg!f1q)K z_`RkHOzKENiaH*8&OLG6KyfiZle71E&S_wZa;l8q?c8ctmF>l*naTckZ26Z>|NiJd zRAsSj^V*YUaQ#L@xPm+l7S@9$32&J{{a*(`* zx3#S_BsGK%4fRXLOr*0?0g(mnS2z9cdg0#N-yT{m=8zDpTkh)4UmxW&`C3gi9e);& zTQ_#yOs&pYOm$oj6>{o(uY>8O3u~SBmt!izHlzL@!?9|eoTj}F>^s{b1#L}#tcI4r zM9tgN?fmb5wU`#Vj{4jHVtzvR0t-;*=S&lUbNa?}KD{oDv3T;#R;ZF&q*%N$yO?uW z=))Ci4zdaVp1I5$*faDmaqq|2-`0E>C<$ov`@dg}osgCMNibYwqS-dGXTfZbqvJI= z7P#mMW^~Mo1(^)Ts4uF0?okQiW{P)w44sC3A<}PiIZmQcot>Liv~6|V9U>BWfdi0g z2I?ysh4wN~TJfm5(nbOSlvq@UW*H*N^X7!W$tj~uO1w36>5&oIX5KtRYGh?@x5)`D zbncF(LU9N&g_&ID>2IK+S#&Z!eZ?N4tJgP3MkPH)#_zIjJhAE;*mr~>zIvHfRt(wh zZ%+}dMe>SHOEe~BW$7rPX5+t^C3xH0=5B9bU6fsQFHu)L)gzMCUj|=pg`R;WK=6=t~+S@!q+@EF^MQ^1pNJIZzs_F2mx> z{pqW=AC;Hy({`9=t0$Rc41Tcqzs1GN&F;@B-iwYm$rP%Z?$413a9@XM_4g-*izF$= zJti~01+MU;bgClPQwfAsQ=5FApVrY0t^;e4Sxo9A!EAcPAS)2%^_x^XSy^6?fTB51X8DoOH8OuIT9AsDuEhl$ZDk`d!q$DPQOzFJ!`PmtH z=P00#jtV0jqQ|s()rLbvDP^(Vb@L;pia|t5-Xy=u3Laph@S9v*J-=4dn3qkR5}HW@ zCHh>AXXpMK>JN8!4x+<%l(qy~8px8!Ul#Z!Las9Rw+9I3JpgBrNJZD|`)K)1?mcoE zHQ5<&jKAI&7ptxqF=}Y0AvW#}H^?%MbSATKld>^0)IoE&gM9vCb`iFnl+%Ya+5^g* zFGO#%68UHN$TGU!#{|dj0H0Q?{=-IN8?1m*2{YiYU?H z1fO#K6rySl-XACHhG~a7^|{gFm}@9gUJSnQLk9y2v%B8}rKR&Kj_^^sU&mz0isjn3 z0+I0a&a(+tGLkY>1#EzMN`_76S8iO$Oq3MK#Bb6%{3ezSlLF<&HkDYd|(9|Lw^ZXSrt1I`jSP?*p#QmSwh<1G?e-c7fm4ZY*VF!N7Sdwj5XX84vht zQY8W-8$5O*Zq^XAc^EQTvF#g?D}(7%Kb$5m*KXO(D~+8hO|F#l;7*Foe&i5@OW^WS5-81z8&I>levpWjvr^!QnZb5E1FrD-PP^qXo`RaUNp^Nb?- zj3UL1E}P{#Rf06A{IMG+Rj?uP-9%kRMn-=_8oLc#0M%=Evwbr+v9da@(ragvKXoSj z<0ehu7N&3y&VO%iZUpjA(g0G^6Bv~r7XiV*Z|U|>L*WsRF7D3w#nx?-60KV1@)iL~ zR^keE^N0ZRpx&u#^+s1K+%#lOrIgw#X%*dBHo~~_)k4J3{9Gm3zZq#~K;s6CU;r@{ zqy0!6iGFo+X)6r{`=B9{*P7j*lUmD(bGI-NBXMQ!7+D2r1{xY^87IhqesjhVT;slh z!~2*1+{}iCguL8bhb2oEn!2-^WwfEjXq5XZxBSt#6kccm+JTrV%SlB-NE-YX@#}sX zSQuwNSgcgP4tANl-$pS$crkd=34>YzT-R^U5NJgosH;!UQ!t-qv>A{9p+?o(YzQSi zI2y<{*v$>+)yEVF;;%Jyn$Kq#I)nI!APQY4Y?FyTveSvvc3*@%?)b@gR@$#zh9*ni~J5OgjH>mm3CfBcoGVV6?Dm-~IlC85>LYEiE&1 z;yM#6rLDcaeSN*GjG@J$w?H}(l}O+%<;N!};!b7rMtWi*X6!J97M_r-Tf6UUf%Nwu zRTb6MoEej#+Uwn6#WcSCh77l7TX!ezyTLI3G*Z}E)yyu2G^K~N{x5hQq*gp=E)5(N zmTFDp{I6TP>5lLK&sBZ9>w(Mn_tu@GQeN6OILmV^`e`ISwokP4?8-2;-EO&Z)NwvFi>1sO|7uJ-P=-m zhUhor^vDPxV4Sg4EcY(xivYZpwuE0*kKPQ)<;UdR0qmVXu@Ag-5u5Bc(PdwOh4 z+wHY(rEMksB>mv`!9|swjMWZaA_xR3RV|94BU;8enWOrp>oiKCS}f0>jNpLJ={oi= zDJkjw^?{R<6Alt0X4j=mhwe9xY7wXk$Zxa61kePp===JJE{7rJIyt|1R~Yv=lQ3wk z)nu~_M*ciJJYa>{y7{GS3b*UVv9mc;Pkk)EG<)|Vy?CFDoLQG15d!p}8V{{1vWKbk z%qkRDzKd6$te48oeEq?0r_ScP^?2MFeoA?MQ~7*c`s_xu7FW?o85KTaX;L;kxB8h+TnxaDoD?J7XMwc zD7JAO=dDg9xhAJ2l9|05quHkKhX3jT^rkZpktG=jFlcHP!Sb^aZhQ7=B~DCXA;V)GO{wVvND(qHPGssbicdswE(HS?iYKbi7>)jTrtcXt|$LgMGcsSM4du){nzgk z$gSEaullU2+0HJbj>4t9sDEewbX^jU*+s7_!{gN;h}&fuzC{+ApNG&>^OtgL&1mB} z_0gl7kIzULa?V_(CYfAX+0Zw{sO2r8hVq6m0h)AAOTrT&!pc#q>g((O{8>)-y;bxE zve&_YbhX(?stg-6nBKO&t@%&Ob%Hp2ZU{s}q~CGA^{Z%VN{DOL!sa|fT%{nW^7=uj zB3y|a)nviQ%SSOmT}D9|YaWtt9)Dy4SrRrjfyW(Hh@GK*Z5JDNPR^Z+#w%5d~5)3q~`PCJr-p+Za6yh1;Q(lRGk6q-dOE{-2XFQ6vuG_?s zVh6%NmGV0b6p?&jQD*;8LPH7T)g>SsmvD1yqc&-)qN1Qm0RgvfUo%l9yjg69n6gq6iK9)vl z+1p7@h``*9*8m?lXseTN9d{?72cylC@dy}GHvIviv9 z47#jc>T~?tGXBz?iyNF}o`8rnw3~s0Ui3IMlAG`9vY*m0J}q^rS%xZW9zTeQeq5~Y z_Og}YKZE?%Ja-L!5IZb;fJylnLzyG*eGHdjMLvbW?SL0z#C>Fuf*Hn*u3MQmyO^P~ za_iN};hQ5t8b6uAIc&^aJjZRn(IKqx3j%m{`wY%m!MX_z4Gr+#P&J8oWxE-OCJQ=S zKlS%Le>knSudwg9S@ieaI~mMmkft3B=DQgxD`$9B*7kb&X5Y=8Groq9czJ2*?|1*Y z2quDn$XzR%`z6#5_$59!q1iV4K8F3hWrB3Co*E}TnnAIGFGnXotC)fEV3O@h9LFFj zIa%FcQ;E;#$@g*nacMVpI$Q9vSg_MXCeBx)M&Vv8P zM@8#61CV!@4-;Slf)A|s2zK=lKM6i=w11aA;yJ5S5$0< z^~-Wx3GrDo8#4@ph2R2tE;P^p`a$`uOU-IW8?n*fx7w+qhNXsS!)?k&&eI+?yj2`Z){zTyc`Fif$t_~fiwAn&x_q$BH$utMn-yJ z3)nQDY@n&Bum2HtnBA;hDJ?Ax)kaQ5C3qEO@B;NQi%#){?@38EVg2&aUaNlSZmhgo z;GUO)kVwGiDS!cgIF`WQ$V(!=KTSig@p2r69#?cZR4;ne3dg{2l3-c%z|0hx83_8c zV>^<5FNKW+xuBFVEXm=jnp372)LfQ^6~0VItMyaqj1gd`@*@f5heJRKLF?KznP>bS zagpAtt?K(1@1e^~&aejd&jfWNahxrZVVs&Ef_f(q)qZa#Moj?FLJgBDpLC&S6G`&F zE2T#rMnfohhmmgCnefuyJ0v;bD=h>q&q?m)rXiCoI8#wUss{=B=NYfDVgZy05LvHx z5a9n2KK%;wO?FX?hUGB<0-=TiFt=uDMvP5CEYLkb`6onH78Wt(in6L%SAO2_tNTvT zg#2D_!Pj6N$`*_OH}|q#vtlM!E%+f5JrLT>5_H*!QNg&W0NBvXG`2DaGY`E z5|^?qi|9KZjz+v$q>lpOuF~CQX4Q{Op#`= zAS2&^I~z8YMxP`uF`L}!z@;+9Juh;c~#nJ3XJ3}ZX-{AF94 z;7FSF!<5-#&-Jf&3$)qQyuS8k8H5jS{yZ|$Fb3&K1a&U-o5975JJH;0zyG{kQli+e zyewU|GVpMYiPKwb6#4`+ZbnY~_m}(Kq3CjcW$(AA>oit#a3aaU$w@^)ktRne=OAk` z4hAJI@;|UBfXLdF8qx{m(tW^KLVg|~@H7LQ1qDSOv0Hn4rD0<# zy?MRXIm(|G1#u+6hE9Fak0`F78|OM1SU|Jx$8I@}UZz7fZv}@ye9MTJ|HzHYpk4Fj zN*Dk2!#~3V*4~F<3%}|+>rtqG1+1<#-?+C+Ed-^7tl83G(~j6`UpA$o1hVa?FV_Ds z;J_NHNdiT?Utz)NTRuF%(PsyB_ULn0E^e60FG?KHBCPiYLT2V$QW9o4N8CXxK1^^r=rF zwBn*s(kXU0H8y7TJ(V{{ZXz^;15Ykp2!&Aio-T-OR`dV}MJwU4;TeeGP^$W|ugaDx zh@G-e7IXKmP!Srsw*T-H*lWmzF*QBjtV!4IcAhTa+eR)u97}Y0c7m_L29`|NFV_|3 z<>fh8l9-%%OoGc&^X6ZnbBo%BELo;9x$E27+REz6eAJ#xZj^)L9v&XvMM@L6D$y~R+b=4eIERlo!Z*j~%CiOq3?3w?3g>Z3k zsnF_dYkC+ceY;Ro!bcshCVEF<`h698?+pWjFoRl$0e`!bl z-@P^Vc`F7r~U8D zf6mhX4)Acr|7&~wfBdXAMs^mA|I^g^o8oDB3+z$-Mg{ASVD;_sC2cR>(NDm{iAHwL@;aK$C!gvOMxOO;h$LisCz%`c%V(UqAHO zJD6@@9`Y#O7uRGLbkv(5xm3P-q7pq0dY8Tl1>Vi|!ovT*F0(vokkA{|V`V8mZ3 z=T*1hBIM6gFOU@PPX5R$nXt|S#*)?hcw>{`q% z#RGMz+(l~}gqf+vv5FhevF78HXXM$MYbtPZ^4T;vR2{*j=&IYQOdKpsJGN;W=!_!J z&AYs;Ynu80lv{!+mb@~`A6jFU64jCzPLtM-nuRqTJZAQ>CB!?AP(tTl_W8*PspI5D zoods7N5}&~kJsLkjx>J!aiX9h&z+)TFf$o6LC1FS%Z{8Ap&r|m7m?f|H0$t`k+iYT z&FdP42eY)Pom?OQ3)e=r*6vaFTkXFbf=?7y*~YfhfP}Rg&0v?aZmnY8M!D3aELdlP zgFjsnA99Y`e;iNv2(G{nRT+NF-tf}6 zuBWTIb$A&rfzkkGAD{yYj=_=6)6z+r74GcfRqZ?`BKFVJ-NMf*SamwLzJP9Dcu2Hh zJc4`#S#hDq>%@-Gg--rOi|Euz;=hjUqVm`fkC=|suL7nZfL42G=5Ioim; z`Wc(t^x`6fGzj%TD0t2acnRVxwBQ?~JG10W_|hVvg!I8Re6`7vwZZ_0&pCr#S17${ zSFr$|RkzU(5vsRtOXxw+qAdryFO*p&>6XlA&sQ-|sjrkJT7qyN3u398W?@b@6$y19 z?u}9XlNL~XN6PjxI~vwA)0Aq83JknZG->j5u=jZRQb#PPWnkj5~0$Z-}2qABtU#sFmHG={b zIy6f7=|`#Z*OkUe?s`M1h`VY!c~8FhX9W1zti4{{lYcwJ5{ft2J3Z4LkiSXgI&B)< zH*`~jU7EEyaVA)|R$oNg1Nrs91Dca&(W5Vr|hVh2Ip7kxwKT8mVgczj!S16~v zWrM<_J5;{pTr*Ft^Z7+vvM6Mb-I4_!|B zFGLbF%{8IGmJqcS6Qg33yN#@IW-2W-M{oGi@@e6XeazOjD5=0Sx}U}|;&6E+&-;Xq zg}Dk04)+KNs_O_QE*ME%fmEh|rx{8BF56Fp)T zlPv)}#%TJc7Jqz&$jEz8R}_Q%5s=4!qW(iGUu{9#{Mw?-WN(8}(EPFUs-#TB%ncno zqq^yjin(;}y27P}kDZAYv?U1wp|*TfPuJQZV8<+Y!iZ5+vr56PTGE+$=Q0r3nD|z% zz&#)sed}x;E~p9m_>~mp=Jf&nC7T#WDrf7u;v|Rvs!|78%{?P<^nn=Pbv@Jsb}9@Z zq-iyil$nUURR(HmPb-6iApB@=lRxs6u8@M<6+dofhQlFt^8 z%zDaS1h8V04wraF({XjIH8o5Qmym=!ZNq@7@?n0>nS#m+fzW%Z*A z38``O>RFFEfgO76@KFgDgMjw zZQ$4 z!*; z{Vk-ImxAXp8QLt$=+MJ1ZrjhIWRNI_HIIWAq|?ZAirYFV2sb-ht%Xx<7Bv7?j$k59 zm#=P7&3?Ib`7ffaon#Crs%#9z!8P!SoV-jhwKJV) z_boSsHM4P~8XKBhh&|{!hKA|m*g3b!>4$cd#!kRQ=En{p*v#Pb4(lcbE&fl5qvi%u zpf@TN+-OkDcZg7-U{BUQI(UD|rv+8?kxlKu&rwE_E(f)nzg`C&xCW)1s&MnoocDZS>^Op5uhFwTC z;Q+VM4pZI21X8ZrWwOr;WToL;H<(VX69ed9Q|%L$R*E`o5gjxqh8c|6uq_cg2Y(X7 z&o8uWDl|<9&5xg?$FOeVrzLP#q8#h4G!fAc-~TyPhr7yNxBTM|{j(DP(|BxbpeHQ# z-{Wyes(|YzI}HCTZ^(%Y*9>e|S(d|wh0^J|@3 zO+v$g#?deUFFz6hs4qGD=jo3XK}H2mW!@SjWD{g1bIIXfvn10hBP5Szmx(dHxeElH%*t%xmHHfCn32jv2k^f>q zl03M)>Y+o6K}o1A*>lTZAFgl4oFV}ByLFtG(pF%Q93@<*k5-Un3VuM<(RIC_+%sma zF!6-6nUTm#Mmdabb1yv!_k0tAT(nrK*5+ z9JyXpveg`mj01`$lmrb)z=&rRE4T|l4BvahFl+K?62srYaef7HP>!Y+=U^D5GVp*O zFdTZ+6h?4jrP^%^^{nsMni4)>)1z&37&I%1k#Y%T}$xGK<&G`V%Zj~il+_^|J zU2=eyvS(WU%0+Bh_@>xm>UfHH1b=P1GTpRUJ7N(A0;woG(NPrZxt5xsWR!eZP#fbXJ7MM1S+r#K6t z;@W`Ylo;Fc$?(r+3CB<1&E98wyegdzmtNT{Ylci zqp=j;lB08#(z@J+lGEv{p24pixJIAKy7IY;3{7&!pggC}Df@CCsC9hD8)o_IhzmY- zHM1M{8sAJ|m(^}?->zU^ZzYCF1mDc)YzhPMMAe&`VRyRd*g%#*q81Gn@v84PpD4{Zf+oT5|3RB1DO0 z47KV@I5vrS$`yOs2nUTkM;_TTQVWs=m70M!=qa>nZ=xqG^52I(M{Ck{i!*cQ zlfrop!V@f%Wr~ni;_D~3^;h-;ew<^KB}rn~I73=wc$YMEyu~mSUE(Es3({xQgyL!Q zC~|hwY&?1aGD+ki#BbQi%Rb(vfYNcg#59qjBuXoV!ingCWAz-j@-p(0{iLIkspdEA z`0+_lW%B$&s~OoV2oQ^&ThC`v^yX-69hvVOh9HgseDQ>7T%;b_Z=eaSZ|8Ek)e-$n zeV$(F6*){>LSaVQld9~L{ira0DEKn*JUS|;jj6;6sKFNfAn=@QX90!Jygg}lTbkz{ zN-JyUm}y1Et>((X>;cn8g|||jcXRwMowp<5I=3IP8`vF?Lc^XXZcnz|pdgc3x-k=Y zvxM#YkhUt+|KTY$%DW|R1|E){hRH&BkSs=!4>><2d#PgYoI~%`A>*_Ji)7sp!b}S!h<|k}oBbr}WfQM%i+PgtyA~Nf=e4%gDFCl5*2|Pm>zl zlEP(9(dpM_u*{SsEwmVayY{zY%h#`k??;R1h`YN#_osVNW_XcKP-P3_SK*PcTjhJx z5KKV=zfJx7rkA_WtJyzXdA%PH2JflBps2+$Q7!xYDbs2CxGZ94p>Y}Bd()DTD`@yV ze!RLRW5KYTcq;3grSRkgQ;;t5Y2^Ds!3nxQ%yP?WhxxEY+9yQhgY$2{6A3ZJIo*!| zx2j^pQ|h!O%(K3xOF=rhLUCoU%8$*)J(Q{>EhqpC$rr^wNrC%LS`1 z%$Hpinjm|l@H_JoHM3WaQ0owC0$KcE?FXnm;=HxL>w@N0MVaTS$%!hrqe=_LP-Mk{ zHwAv3wx`}B5;nJ6pRBW8iq%G$eGV#twZ5l9>1HezO`d^$+zTHqWOHAu zaI!|i^eR|_NTuXWmN;JuV`5mjWXO#5LQ`+f&pvG3Ec@q}(i!ApL5^09@}9C)87I`; zRmg9m4L1?5v9lpPTqThbCI#+IDCN)MYf|aTp5Y83k@4+(jeNRi@2g-6 z@y8?LxwanjSS0WJnBB1qvi|hcgJatyYyr_W@}luZeC5i#d|jnxyK2Rf337Wz3x#r} z`()(Pr&{n8_hQhh8g$^8Hmj38wiM%H*@y7>ttf%ZP+xNQQU*(HIY#s_LvAcx_7YEU zf5tVtEI7_D_uHEZvO*c zlG}CgM8mklh`{v;jKRVn%>1KcFwCCwBs~UO`@jGd0&Y@mK2>Rco9FL4i4#NeDhxwx zgdTH?#9OA0qx@xtgfs$Kgo7K7-H)oMfG9YC*d@g*#q^6e4c%KK_7k{!IGIMEL7)|v zeqEQlTIgZI&Da9#_?xG8&UrrWsu0ZN4Z1aB$CG@`QIk;n*Uau3y3D}S*hW~9kTux> z1BRTg18Ts&U;5xqsOW|BUujoPJ?nmi9rO3h#`BT*O)-)qy3TEtE5e3HZF!xB`*2kl z^9og)O*3ih#)jf4+n22_*a&WvymO}EhwX$(w4Iy_jc-U-jBz(vt|whnT)=bEY&7@=x5clARTvvc z)--NXG~4RBtNJ(>?=6D6gx!7^lK!?#l#I1@3rkE?%_Q(m9&T3~KYa`Ydc%CJ!uV$B z*U<{r@K|lW3OvrbMeD1B(T!M$^aAui_$um z;s%GYdH&J=dIPKo+bVGO=+9zjs1?-UdC*apKOPaKj*l4qKId7{aP<#sj%3^+aDQFy zLu_06Y)-&Tv6xfPUCY6EjH(Emn*fGDBeE<~eqm-^-dXXRfzhOi#w zm{Wnnh|4>)2byrR-m7)}I}ehFcIbGx+OrHPkWd%L0OfQ;i?O)j1oD<{uh4kRp;BJi zb=w(pfw~j%m$QI|bVGQUt4wF)QL=dVB;&tJT{39ek`p;e@TlU&1eLcRvL)WC84yium_orMR7(*qF{ox3%k4jS^`je*vH?-|D9*v4mXzMsbX$GH|y(xf<`?I6JC>+|!vLYRDSLF@32$~E@GL}|^# z+nLly0K+(v0{-@%&FN>l`3mV z?;YgpI0lEPkr*fZ6er0OlNP_nF$BAqhE6?6*dUtev$sAsI!MK$#*MrnOO?SJ?sG0 z@8T_V!X`A=$G3m`d@o08lUshyrFG=it8IQyNyvahb>jP8D7#iwd`9q^Rr}X`8a&&1 znce5ZBLH>pNZC(g&2zr75QTN2`%DBoZMb6H9EaRn-`#kie@%&wDFk@tVJM95eGZ?K zT$Bl4hl&v!v#}H6clOWgMD^R9wGlOlj?7dD$Bx zkwuJ0WPv4#u%mr;j81qKuZf^uj^d_g_UUAIR1Kvi<32%;_dGn#U$zR8Bs>)rnl#zgQ9bR#VIJft(Wz7U73~sfD2JsJO+F4=rU_=vrX@E^^G*dX)5URU$1w*XnCZi z0z6tWPVSR0p9XCetjGLQyDqf51DMo9#M`FfFe6Sar) z3o(nGpB2gumtkb$zY)ssQ)w~kY%)+EASW*+Vrpr3BY|o9i-bnmU#`s`u}jg55leL2 zT}etw{9XB=3&ixYb#cgSog_;!HL~rfZy}P}#JBlf#S`u zf)A{M3>`2BTVaow{MByOz*eBec1B0wfVB}Kc!lq)**prXe5-SP)~j!Zb=Qb3Izk3Q zF}M;IT03NXQrMycGqlsHyXo=(%}#(t8EXezImk`td_O;@eqTDzoACAR1ryVsh}Jnv zo6wYntX?%yw|3hU=Vi-(uWPh+KZF(#%lJ-k4|h5S7g#)fh_~Ut6gMsqmwgbGJ}3pm zRK{OzE9RAlalaE;+_S#U^%6hca^CIU`CT?ut3ooA`!pH7faKg1kHQOQu?8%w4&QHM zPa$OQ9oL+2M1G)aqztLRfpPj*6bf9Nm^lx@ch3V}HvWj*7(e=H#tLjSIBAee%KFtS zzUyT5dpz6(#Mf@?jxo4u4?u|VDlw@yfp;)UkZ}$7;HoH7HMT1lqZt&yMqI&^9%^bK zvGv6B4tSn-2U#W(kI;8l`R7u@HBXS=V#~UT?-hl#vVz1HL_2mnSD1xiShO^Qx&a~B z+)`nQGj{XHCfBOp=r8xCZD?)@(|)h33q?Ae0=|M&2%3y zB;Jp0jDUDjBdHE-T_`a4^c-YblNE3#(97kS4`eT0b<6>|7C zM{3giL7FD7FOmj?`1bt-HE`x0*z>s`4YvaZWE!^$7Ua;cp=hqo##rub^ji8Ytc3(w ziOf|7ozd3Cp#M<%lpIUV&MV~=l9dH&g}7C=eB0$4z{(n^K-!Vk-&=wnKFyJsR-6|( z;cM^Q6SU+`_uV^hqnDr{LET;uI0}8I?zV~PH5Q~p_2^-FduAlQ|H4Tt&Z-#>($J)) zU<3arVwER!M3||A*tY`BG4GS*tJ6i1T5Hbl$y`qeO)H505?14=QFcbI9IfK-JO835 zo3NV*fdLtawVoLE?xV{K-b1?Pulot@Xz=##yq~gw95U;-KD(|kz_OIR-9*jMw@KNnYRTu`=#-kun`EYAxj^gt5is7p@<`J9)W z8RqoQSYz^lD_oFPxRc+B0ON&L=| zI=9;Q1H^mg<6H6FM>%DZ22e+<9QfWgQmFRwsbKz;8Q862{!q%i(++w zE7@v1|-OgJm?w^qi$JvNPMGwNc~#Ed@3RFJH#Tbk^n)X6MaztI2ZU2R@* z3%MCA0KmsTs`!71GML!vsVM!gD1%MhW*g#9Pj6rt;aJ+xdGq(e-jdon{?Kzr{ zRXEHFU8N1=5p$MSJCW$u6y@Us>(7PNm11`IF&ikW@@VpCY4B`o;CcI(9?t+6mw*m6 zWDrI?`H~nN)zw*3RvNshYHv8?IY5G?9}SJzO4|EO@)Om}!zg(9UCxeL-u|QVsuKW! ze*+XRk0+d_Ti+-PJ~G5y=;*swsFM{6=hAWNTbhxbOabbuZP>m_DW5pS)-}nDicZ@2+ep z>sKw_CBC9&D(G|F1qZC=)R3yK4tLiGSU$7>P4YfyYnRv z1u0cOK&D1xn0oQ#pVQ(MvFdIC&5TG!^bSUmQO}7t2n%$>qrNl_x$4U zTe-8-SULI*!*VlzAbpR4yBj}APBw>h?B4s8&Ey?-@uNn<%kLnPIjvtbv<;9orl02M z(vBz5C}@0G1Mlc|Bru!SpF@Zr-vF{BC;sF;>L6AQ|KnBC=R%7?l^oTza?;KuY zfLTMP=2;j-2q~BoA@GG-V`~Ib>?=`MArsSsX*=&pmn~blV+$-@Xe=kS4>-sQeI9_X zHRyJU&tthl99D0J=5IY6*WX|D4W_#r45Wkg3lZM$&Gau~xNWcFp8@cA)qOA2>YJeI zReK@b?%Cih9jUDOP$6U=XshSX#gsfYP311zZa-Y0y`GdMvxXgcmb&oAhjt}( z3=_hzrx4^0T9U*u6(|HgO%UsV#rQfT9-uUG6Y{^TZ$4`vUExQ8!zji|u|G?dYUWCM zn;Q0@N%U!Xt)^6h_`yG~qG_L{19%?l+LbHqC~d;=nNz2Yp^nU;%QLCK?X)f?d6Zs4 zg~9+^+nh=+qp1ae3_=qNs^;yx)ukM8-3*q`u_!TS7|5W^e*kgb0M@Mwu!oTpqDV{J zNBo2@UdVd1MZ_JA{g81R$I>6_ys^)%S-SC>VfzIM|##u)j7SUGJJ+4~PT?JXN4QGE~sy zWWURI*uTn|pWkA2I^P3Gl``bR4u^U;Ctv5e2nH|< zeMn)nY`&cFMK*K!@9px?)WL&ocOODJK!z4n1BYlq2K z^$^YR5Pi{!PgrPwh?33*QMe2##0$4F4|^e{@~oyA2{IGs(pHAWeFqu z$kx}AL%n#3<__FJyqq{9M=xYY5Uz%z*u2JfuE4FVKBBexVdhwP*+GRl6jAYzAXSL3 znx`BkF*7IrnC92U<$R|%*MS|TyL5uPKSkvQGcd!*%lIgh*d3`P#4ZHVMX%{Ub&1tb z-$!nULEL*Um6qqPzA^aLwv%POtvM}G_< zPC%StW%ea3VX7z)6TiRaC48q!nS2ZdP>NG!5A>b>Avx;}ZC2}s4s^E-IqIIaBwAxo z7s4zLQaxZ`Mr{!ha9?6C|2B~JMeP8x+%*Si{6b}j2DcLx@KY9IovXQd$iVZXNW+$4 zF)C?CeySt@8_KuZ9!Tbm!IYxWM;j020!IMS!1+eJl6F$NiZ%uJ_FvIn6~ATba}Uic z06S;nNYiw`9NJ{b$%9?6FKKBVmJ8;ESC;FCr&IOzYr{8cXS;T>7HNrgF??M&RP_Da zHDMLn)Wx*dH19qL1V2;xSKBQAv}g!ax--_JBDoS8b*o!3llDj-6GfFBjN2(~3Pd@P zWNU7kiIAN_XgRl~$vBR(IjkJ^FPMFJMVYx{_O0PGs2^cytagu<_O>20u;t>GEvKs) zw_zeWm3^pAm~q}h(H-Jq2VJ|>Tw`rG)H>%#4v33U@R$J|Wi!|89ZKUH?<&UaqAAGB(&#K*B zAe^=_$qsx~EBDlV9@iHAe#xh#_pe!fkLTg9RnLNkvPDe44boM7wuh=zxYuDJea(rT zwhY*4I=zJrPH3mpePflur37b6f9RjGzT~!BOR2P%rVjFGcJgmO7@o|kDm0jvNVh&m z*G;GneadgE6r;x}&hrCFI<*2vM-Op6pf1?aM~e`G@t|ke070s=HpFkRVSNfl zj2)PNWtm`SE^sOt7tM`M_Pmt1DwO=1xhzm<(Px?UloI>-Rz%hlw(kfo$-8FD!&Sh3 zPI<6@Q;b>f@2>ldMnK*l%xLfrj#3WWXI4 z23<|!Hn*WTU4s&X)v*@|H5P5lt4PWBN!&vgL752Dcf+ zAvn2nI77|Sd@uFw=$1FpEVZCiop-l<2EDeOV=K4x!E3-sYkkft0eNh8mXui#$(#0` z|A_P1ekA#X*j%DjyTmN7ho}pIyX`>U>Oqz(KI_eg2yK6Y4C$@s4VVP#6SzI-+~QjO1x0k( zuKPD$8n!J?3IsTA@~8MMoGVh3+POSGX%qRbsk~+Oe8%FU_KH@u#Y&D~QFTHmlw%>b ztNF)w-fW{>t&C>c1T+0~oFoQ2;GL6tiI+|;tu5&daEGgtA;JKxqwEg3kBJz`Xg^rS znw~AnWKzZKZ(!j+^_5O2rp$B6UG5y~w;#=zsy+9byHCqwdy~lr1N(YoHckwDseEFE6JA1 zG=wQS10KPN=oO)!n84zRzwt6*Xm91xe)dSM?B1L}jWu(Cl}U^mQiCRXjNkjDoEA_( z9WN-9)m`AxuN2w8#K`It5X_d`v5hC%<-ov5`&Z`&hPu42G9vgm71Ks zoSajjdcP%UQ56k&JZt#(Nig9qcUI0_NFh0$ArirL=rtJ=WMHx;^X5JMd>D zz8Ce)IcwrV2CkJTV9dm>_y1R-rm3}bvj`pl;D_lyt28G)0mc8R(zFEZu-j34KGo{f zLA=H(w_DP{xM+;UWEVJFusb24Q0U7rB@1L=&Biggpk8L*n%0EiqPm|I|9lvI#d%}<>j$EXg=RNG13$9E%1JFxb6Pr7SNdJGc4=_bdtxz*;b z5O@~A&C_uvVqoj=S`4@TYFD_nE5x6;!es+avHVq>O+`Z=hB;h>3`I!({iXZR zPHqKfu=NkmVU&ML$aVVWwb@f;?2*>J+VZ)bE*WtZv?S>)O$4QHySa~t_75$fp0FLP zMwS1sI(tOQmiTXMtmzw(^sv=gH_ox7z0gI?5Dl9I(f7noA+UmND}^U{qeIAiizfQU z*lfqt&Rg%CN^iF&W>2z+E5-B&BD_UsbvrX_)>`%JCvR~k_kjl8Rs$?qYdP@;_ zl^`J#7^*P@$GHGY1BOL;gOtJ`WAfbob`>JjrV)pYHBG4`4(@b4ix_t;NlVU~GWKt} z%$CuPErE45#@Q6^Wj#)N${1})Yr#rty!vJb1GfpaM^Ah)hQg`|?SvqjCkB0%z`gg3 zTN70^6*+<0_eq69>fnnD$&e}ryqo^2}jsIqI%=ApJayB3EL@sRLS?Bn6bYa zuG`Wqok*8@?NFL1xs-35Kr`$#%U%j=nrVSC1~Rau#){eKg{Y})&mZ$&Yh&4)C>lns z3UQLVjAz}1hfX}6c?(V%aqb$%zma-#3m`*Czf6f#r}~X-iWr4SsT}R4QPry6n)_7)D^}r11Ij_zaOwBIo z)OoVi3ycNpHxR=xS`OO%q5JU5H9$|tl=tBJ&0w=t5Q4Z@5X2+A@J%UXgNu8l2>b78(m?9eSuRoS9I;dSX_z9st!l7wq;eSSNW#BJAm?v!izg zIY^9}G(b#mmU(A}LZo?SicbB!sEO*}t+yL!S-PlB0?H4&6NV8=S3Y!-=zxl^vvtnP z5joh{Z9>(LE;fg+yuPZNxArNN);I{b#N+Tr1Y|%l%eoQe%I<=^8qfH#hM1U0|y5Uj5h7kVbvlSzN zzVx;8+cmg$g4$&*5Fi@K7}cFsu6GaCfeC3dvq-ac4*aD;csy|lI!xLyXg-P`g~En! z2n9q7T!jcre!+FJ8g{Huz0DV67oPkVK!aT*l>M?dMo#>=PUUVuN|YS`qGj_|HQUXZ zYjhhS15Fz^JR2LX zTqNy9ex?}E$M3@tf(<+h4?2MGAW+&PEpn{`kI`=ShV>$_JFibdqEH&Q!~MY>4%`aL zvDyjhPA)L7M=8Ay2!)stps?Qr?lyNINZbUzHslT~ zMZsZr5@?1+(9DlRkyI7E%n0k&Q5~QL&6VWzV8DUh{wuliSZ6^OAxXO&mWd;ED9B<5 zLBm^x1~f*%Es`YUjxG&{sBO$KbQf^Ehe0rbW7sVA9HBwL0NLUksNE4O`^NhO2G0h; zOG$O%|H>yW#YJvR&BYNlrpyVpJ|#OcjK-ZlBP+UV&zUJ@zbAAuD4h0Y-RNuGR?c^e za|tq?s|4r-5&_=8yYQqp6ez5{uHiPXPvBh-w^-K7ttQ4jzetf1PX5K+hmX$gxuQ2w6joVkZzQ+I z@VkF?fWX2U7yFSq5eXh%FLfPW+ss*37Dcl{)vE)C_}N)vq$gcH6v{+Fa56~)7TGcwUAXg*98WHwo$8? z!9^=Smb+*+J=JnC0nA5eN^(2U2$ou4N&>yl0qhCiiM9n|aOTg+)g7>!I4VWYb}Q!2 zBWhe4Og5NC3ZhrFry;QQC}-O~pSj0c*w$m$KCic&wQV{c_7=jb9M1d1Vk`zo-olBN zmX#d%edtZSoCloJ3kWwIXY)tsBxq~F84HodWI|SIH)xykG9kI4cQVSOj`HA6hV_zqByu*-^`Y_4c8#vK14z zZLr+%sB(ABYVVQwH#d9H;VKF_JOXL)v3aR;Z`g0y^meji6rikDyOXC4R~u@6P|1oM zL0o`V4Za1iXMt9Lj4noLP}U1uhu{g4s#@h|`ld-_7RWqXB2Y+#F{B9&`M7&Hop{(C zoqArabSr^D^yV9NTtuSUh6Ey`V-cPtNpA(;#Ym@Hw+lyT(7RWO_?NwvYSXv;4;?}n zK3k&({F&a{2S11!#ytz;00c*UyQTG9N#{gl+Ki56JE?Fh&^o2gND-Py?>1CpD_*i) zQ+}P3QUA>7%U0sijj~EyRPKJMriBwNevsE#0_VApiT${ zwMm5Y8IdyvAl+x-(^tnR`u4UI*I79+K*fsBR~=2PL5S)kf~fr5?w&N~jbT zWe80@ZK5PPD4n*6v=T!+jf;VwrsM^RZR1jY8-=-;|WALdkWpEJC9O)V}2NYlmy5M(QjpD(*v(GJ8qj$kJ0F{8)IqFgqWtenkRRtCGTwsh;1@<7#em z<*K?G=-y0gue7}mPrsjMJab2-lBN5N9YvC<+rK&?Up!k1WM!|M4p8r&_L?j5ZBToz zAc;?)MRzH;?MT`4G~b>eis=#fVC=QitIyrWl5Hf9is(-EOLgpru4)G!%6?9nhm(5#FbtDYjwGj&8^Z^H}T$cDo~3f zZF<~_D`n2tPHIu`%5MMs)H6nuWv_JL)Ie(R%*608s2ws+EzHxvo-oXt4a_mo1%hxY zapRghJ{a>#l64i}fTtRbH(^Kq?QrbZ%Fbq_lEs`QIZL=qn}N;xFR8M_aUfU?e&e16 z=T~B$G5>kn8mq)%x0NGX?$1@u8?142s0W8GOt-)eIl&IN4n`qAa!v{8zu6Cng|{p- zXPf+y(d=Jd97#^Zt-PMKuB0Q~_g{cSv9aV6$gekGR2@5*b~~oO!m6cC({(6g;Py*Y zLaT+m#Q9RC3n@ zWV!9@46K`I6%Ves@N+v#!;C)Pw?l+K1j}QJegmOlBfp;EuJY7;AO7n5p+q;m-N;eH zoTC9zeK1zNzQ)iAblK&Erb=OD;3AJmFyST0?FC$I>P<$RZxk7C+sJd^#q&W0C^jkO zW~nz&bZEzp-;>#u!tpffvyO_b;}NhVok zE&Ut5FZc}%xXFREQrWrO0Qgui?aldelrKuZYd+DA0If#69?2u4xOYrCdQ;knV2s4E z5HAX0wan+76mIqVi)Xsg5eN2aJCP;MQX)Fb`LY9@oDs5Hk^4^$cU0fhqwgx8hU?O)h76JjZCtn&xt(p5-P^0 zQiYl2i|7fq`!TW&LblK!X3|?pjxdRc4{&!KK}`5#s?33u3HX9VjpmAD8!{g$$dvva zq(L=(@Nlh|Hn^WYLh7PgUi76?Ku5+w?h3}2@M|82hSY(#*|Ro7!Yyk2BO5LRzpx#x z*gHgt+or*THK8))ES1;m@jP|2o_KWl#}GlmSpT(y07XL!!%zytu z)nP{O^vm;EP*a&kr_0UFJ;#^yPFt~k_~t&pQ1I9JoVTyKeptkU0TPx8h*OmW=vhv&t06H6X;!dDh)`5l6(+MiK1zR z#k9h%18GX*(9`T*s&#IDUJ6VkX$@#vI0{fqdO2qgy6KwfQ+yijKh?$|`ZXTkA-%@4 zR|GfarcV!|l?Np&Y{l+lx{xL8*m^xCT~)_j`v~B46QWz4t8$kJJPKiF=(rn#PaStW zE!#@DV(qFM(It_mZtLyo*xTI}!mK}AWiPGs@Fp*@*g@@~Ztsz4>k&uSx9$6tSIr46 zpESZ5J_scU`!R`+BG;e1h>~j^yK^pmj>B9Eb!dcKNm6*ebnn{9EMfFFcJ7t+b5034 zPG8+Nda4awlRH+M-?q}l!Y=}rB%CFPp!BWR_VCbE-mX<+wgZ(Z@{)YUha_xBa$;gk zUx+0KEKjRMIIG={SWyS#*9=XlY!P+3&5%b37A1pjKSGYc~~0J zP0H)VWd@j%XLq(M5Fyv~*{m(8N+hwdCu^BRe^-$7}GNy9tjVVT#T{5DZ5J2<5q)+F$^PX~Tq^zJO$5;9~Et5|g zeEw58lboH-y@%U;AgvAAgLe>B>mPi@Q!I~JPU#|xzVV{Qv(%loC7C)A&$Zg1G?8+s z-nf8f*{K)ZabmkU7h7rG*<0(#c>(~_0^AeNUTZ_Xhmx2$)qO-MkX-VCmFNrX4CCV&! zPE9*cyCoLP$EqiYd+y)i=-hQyM5j)tG^b4!Gp}8X&8$-%tpw4pT6jm@s|b|rA#-Y% zSfTMp`rK3P8F)jtXlL!ZCaYav^@vyh1s4dS$H0AYwrFg8Mz6w?rB-0fSHBJyg3-Fy z?gQP6TdE3lGN!Z-+iL`yp$r$mvw|oZ>Xt7o&l^9yD<`2&|MpLMTyNynJkY0PxKv5s z(R#)9T(}zSLt(qK&Ahf9rDi+QsrpgQ6?RyR86w0U=&ytRJ<4dME$aI_g^(uwUTs?1 za5QmUY*06iUSN)5eZ1j<D3b7>_D&t z&urnbmnRi*4ZOuxBMoZ@^|5d1erL=uT*>OYW*j|W!F8tQX(>D#JDXLA+VT0?@P+4R zMbq|fo3SL?8MRxgH})Td#84LebiOO0(1J)M;1Tk%xr3p-&Um|pby_k$^pCqyRSTSU z9{_3inCK092$;_a<}im=l`XW%eTi_;LO54kN~j>>?_8E*IFQ$#b{?BX=XPML%z1ox zeF=m5)AH4hfqD=DZ6+3JmX5(JYPiQ^NB_OVb)BZ;m{CX!xW*s=biY-wkmP4j zO6BVu5l+Fev*v541tOU*djq7zx2qJM2Bbu>v2PkSZ)M}H?AbckA#zZ;_bEbC9U3-x zekNs|Da%2KQn@9v^O{|5B5&S@s)tGXC_U7+$~tCX4EY*TDyWVipK1f98ap>Or#%0t zWyqk(i801m*OCd@aJ#7&XhfY*!`x4Dxb|7VNEL#VZ=zIpLh%_fW^ywd@r(;53VV;p z7ln2gMoeo=%^vQ>3}Ab4d$MsUZI|?X@r(NuXC8`rfRFRh!LmitZo~(QK^?q)Y(AKP z08$eCyMiL_~7=Q7hbUtf9b7{|w7*zpkW0lX~Rh3%?M^ zX&y@3b%1VD8^ZW?fGfk_L8Uy2@=q}Da&j3J%CR?po>V&4X)`Fe?Do73Fo^0oF(?wM z!sn^M9a<`b)Id3soGy&mP+K{YOOLgtG+~mo3n7`SiZO@jHx-< zBF2=sLDr^ZhlbF2(q?3ZcI>#*Bv8k01yRz|m`N9RmWl*wu=`zTQ zHZK?O+^7=~ZHls)k&OyB2R^ZvK)nX6{=v;~pmE|YQW{;aUP$k#mKVcYFq4*QJ{J$_ zAuuhr?XL$*{c}MOJ;Nm{^M&SkY z7d=PQXYe>sOW`Rqq3U={W^xBeyTTMt^cdAd;k#@OP!D@snRn1_ymS`AW(48y&?&_tUW05Z& z&ceMFR5Cb3(t=}?QpfI~-_nV#Wcx5cY4sLIcMI-TK4SoLb3dJpG7`cj~C{ zIMsC#1SW?fd~u@QGQP{@{r`R`W$2lVPb-+GcI!e|HSlDYQn4Q3boUA?sT36KosuYwh*=W|v}J5H^mM zZ5qRdM)Sp?A)kYxi9nb2`J^~>Bpx<{o2E{y*kQzOIoka-11PBt!kkZtoYDSiAB~;v zo?$yVY4&rGt5I%2K4=E{nH?dNv^t#FR>Y2;5~I@%kz_EJkTjxG5bYNkpB+S4HJ@pl$3SsoaQaw_~_d0GM5`iB3#T%cMtF66h8+sTvUzz(#=5kD;sEuH#8?bb8*U{S)!F zI$u7CtImlo4VLL_qkHV;cFb9y=2*^=1`NQjEL#!myqmx1kI+fWG_P1QVeBgwI5f4M%o&AwC|E$-suJ^_(pKmo%0Y3m@IZMnvm&J*j zDV$f(&tB>0jPx1P++Eg8A5^9l*H#W~KdFk=Q`M4P0mw9a0I;8V)s4b&yx5PQ-nc+b zw}eo1ZI1#qxh~a9?fP=ogZqv#GbrWO?dRY3<`iHjNy72usj%sXd*0p(9n{O*?-A4q zYSiYg3mie2Qh=*3%@QVgjY7KX>5UB+&K^> z+^+S@a7qzx1i8YvHN^V#sCxM3)NtU1E1iT+Az*}Seb=lCZB!Xk@2PpTPEuiA$CCRU zW;F#`j5nEZN*db-1}bP{ZH5@>z0~`HONiBHoi>|8Y=0m6CAEs$s0s`S4PN-?dr7}? znnPwn`^t@}1ND%AZ40@zpnO|lUe%cl@vdg30I}7e%^S;0q8Ew2@74^l;Dk5c`dykyQxeCH^R3q>4ri?Wl-DOxY9I9BtoNkVcz03jnhJwd})?_*=j;h@&o!=q6{8~tqSk-@qzQ} zQzLroeWEVNMA|xhvi!l#7rUMo3Rt(-VG&GaR32jTwcrPe$@o!ELm9+*B(%4Al4CPR zp~G~S0|d)h41RC)c;~{5{sMtdpbo0sh~PUU$z8ES(Am=pwZ*%p_^!f$F&*pBUGf^B zfl46_P;VVLSRh_ibD)>K_=MKt$;rz{p#aorDN2Mt;{t0b7aCajQd{%cC%myiPI zHC@{aT!pg9viBzgnF@OCk?>$wb+9Wg`OaeaGX&Msnt3hOn!CfEd{eJ^g~0a}RgR4o zZ%aR&hx6&z*7Cc7?+*ic-r-*seJJdZEv!K_f)uqc=*=8{j|N%SxWrb{XyOmEOGn_NnzbDT2*^4e=#a{tfXZ zqcK|HI;X33YG~|k$5siFQP+Pl=to`}bnV$*`~;)PX(J8QFIyFNnpW}uq_Lb+p>K)1!v)yV%Lhx*}u)HbBV{Dlitz-uFRsRx_bDEG_=g-CVF5S{*hQW4U@S!pxWG<8v)0Fobe z#}CJqs(f_)H^e{x7l{AGWp^|Y#)_38d@mGL6sZ6_MLe;5HgwPz=eWMcK+cQqw-Z^r z#%2Qul=2%7qg5Lb{UOyD@z|oajWS^{9Ue*y|B6Ei9bE8(-&zb8{K6N)cgx_?31W+> zkRNX-ZAfQUx!yfk7b>X5!YswYDUwt9_tE4z$S`qZzu72mG!hfG0Td9$&uTbm(o6QE zrLaSV$}Qe#n~r5AnyQ2 zsAjMP!kCD{BjTw)m~k8ZH_Z>q4$W5}T*ad^6GT$Qyv}cq5h3hgoT^-5p2WiP2IVrE zK+*A7Knr^;VIJxR14XQ08p3Zevwld5Z8GnW3!0Y6@ea9P)OysKa>?85OaL!3@t6d1 z$&sj{RT^VIIjR1tNAw^&Js7lMaBwG6o$fE{#3O4}z%jFuA_~HFOeT)iz(Q-aDf@3`kV2-UnIIyMyfGUL zHBP+7NMRW_i|L;=@nN}&WYbbE7U4s^1*Igm0S}|A_@%^C`RqfUa35({!3AaVPOR>N zR>hLZd9+*8ckGj6Q=_p!)sf*psXY#WtVB85^n1_T)xfmwyY_p&WUXw_a5A;vR%Nr? zB^G1Rg7FkiHa9J0LGM9r>Sy0!7G3;u(Q+_*gi?mE5}Y*`s!PIWrgVp}DNJ)kO;k=0 ze9Y$q^{{l1e}&v8%;v&xz%_5UNKun2F+`l$Z|uH^k>Y{wv~NlgeQKmJl1Cl{)o;`Ib$WmLH=8VX-`%I&Hk%Q3`-g zQ{xWg0I_QIDu6l(wE|{x)y;smTH8JWPZd|uth~~*N+z{}7uXg7Mqe6JQTA2x=c3Nz(jhAJ(RC``ZGWZe>=XZM zHxH)Q#)J`Pj`!|45S)hY!14$f{=vXeSuJn+6&bk}n{(-58tf*xLAe83yc*)C6ZyoJ zn@rbiP~TJ}FuOYUo}fv*eE%dFGDbKRBgF;|Qv#w&G!)~m3+bpi#uih$bf>L|-SQ~o z1(}2{sdxcDPHsP#OCiq2;5@6FvsNE3xfb;l=zjz8U8Mg95FcmwT$|;eBEH5yK>YoG zj`+}jL44J}L;OxEHU90Lih>8)K&|#>b)8$*V`qk|0nUpUOMphoY)dk>1JP0&3E;@m zQ(&AJIQvi=FZ3P-d}XWRypGAPuZQAlZd2vz+A8p#Ol$Adoi;bW?}y)}4$8#~Hyhh> zM3Yxv4)Y%z8*)S?Pi&45FCO-qtFmnnJ5C_+PryaDNmp%1nRC>i9-#7RkvL$?HPfrk z-TLGED39Ia5RxE}Sa0ywU={D0feX1fTvlOC)2le1*1sb24t#TidmRb{m*vid9hXZY zbAGi!T-BLZzR}NE-7i{_+8V=r7wfeFv~EKQwm7`*UKy-RfF`vM75FpB>S3GG5*7|7 z0h($yVi6Hmb_1^0W=S-+N>^XUc+D$=&yBR|uqmvTI$SxcMnEgM|Kg{dH6$r}rU9h@ zR)uCDgo8oqkalRIn*#QPq2FkvkBKbchgFUl(b)Ayolz36I|uo3s#$*%df?Lr$9$#i zY)&Xq%wC$kfXT2P(5(NOEHfMrj9%w6;!${dCF&Lfn7^s9Ob~uuF}msURPDII7&nV} zusPdYt|Pprs{NiiWs5(hZb%)T;tFM?|~LfDh~R2?@v zlxg>8-o4T1xdxGzw={FQD+cqeVM#MU1*v1yjX z6}f+2O4Z0rwh*gwIX&6-0DiVf_y+3Rd`buTAtn*w8P1O5FGG%mY7=l}GVTy5d|%-*ASt@Nd6Z`9BzVc~tOswp-kP6ua`(osL1L&82WH*JnDWjHpwevq6m zTK^FxXZmM*VD(8>@5JZxMR;44R+o#dx3~1S#L;?*Q}q76pm@03T;V%F^AIvhVWCRT zUMyGcz=_jm`CaUOrb~#3#}uKT`M@OVV>2~Vehtm?_8h1-jX7_STQQOrJ+pP;H|XCc z{#OOL;$IT~^FMv3uc-RJ-|1sEBXylC*MLQ6WH|o$Cn^5C9$~dbb6tU2m_GpU&nrmh zWO!#5Tw{XjSnhoJ7=IXEt4_q5uUfC@g9*Eq`gSr{f%^Vye4IZ&+wPd&g8`kdU&Hy; zD~~F(`6$k53J5oLoub z*WDHiHFigOk<>eHpiVG$j4O9cND)|jPeW-NR!25$TH}sg_|pV}Stn#rn{7Xb%JeOL z22}wik#B|iHNvi@YTVtpj~?e$um;$A_p3(+W`$p5>|a~H*To%bK54CAIqQ=V*1^b; z&(cPc__SIEyQ}CN*6Ry8A!tM$;fw=RVsdkoQ8Bw!=4X5JWzZ zyGKI{v~CuiTH{ zP0D}5CBY~X#;cO5A{(s7Vb_3%PM|8p;2so!E{^CG6pm2|LXFGt1v}RZkyu0@Hq5cb|kGh?de;7=rh?yyS4|`*y`obJ68O@ zCFu!hCbyD6sGjKdSbz-Pvu@8;HB{vUXgsEu3#me{FB3kfFRd27V_kpYwj>^61_|p- zE`5_4R;6xd^i!lg`7_|T8?8FhFJ6dMc<+;$$a+-loP)9KHz-^S>Y8hUGX*g+ro@Qa zYDFliY%QD%-^=6MTge+lZVGXdd5-5iheb?3p7@GQ8*=R##(tu9=M?@5A^b8XP@d{F zvM!(zBBr#rlSWamh8Rso=j`s&mU_Bc7pG%Mkz4GUo^_k|PA{5GP)`;1*?+{>y6LHk z%$Uw>&X_M_+rF1tUZXkQ45Hbxc8z(~;xE}jB>P2|p;w3?FU*2HH>c5pTTJ7W2cMj$ecBusJPrERMW6IjEOOJ0wrGCei$F6aV?& z5`WL*-zWa@f0p=K|7qfz{Y~Px6KVexTW4*blgGESvRQ+y9a(G+UwwX2H*f8A9#5g0 zQ+%NMWc!~@eEWZv_$Gfz{J{T8;`9IW#MiWXshH|w%{9J`kcKR}i{zi_Q?tMfFe~dx zTMR*wDlC(n(e3sWd-FL{KTOoc?k90jHZ%rf%F_{7L3a4{sWNJ$v3p~2!UKp^js%^Y z8n2skFPEH&c${{LM9>F4%J(jhXO|0#Ue8DIDogb!l#~~5AhWa;!?J8Bv-5&{TWoWy z$FRlJ=I30(4tkJuBo~+2c0(taytYq!?jxrI{4^UIu3RkXMSLb7(97k+8if9H6b^I{ z?vAghM^fZc2L`>>>=pfqZ);AUm{6`LZkz3cJq)-Nlzq7a)SXmtR*zI_9S908!(VQv z3Dj+NkB^`kbZyWDTH2SW@CxImFpoj8^!Gl{lS2H04a~b;?xhlIt$!3X}FWNSRYPNUTc!SArLxI3(zvxL1 zB=Aa_NX3#`qf=_<*M@bX47#Yw-T|$~r`y6oAa=tYQ-nGXTiNzPv!qG|1a^-Bzgl`` z>%TOJI5ju}G2Hv2Ua5^yf=g;$9Tu7ulsI@IG|hxPDi?VLH7#njUN7xJR<;?j-u27~ znKpQR)iuhBMcq5Di=``u3m@pUMBPI!c+5UUh^^UNsXkpjbndX52;b#fup4vVD)d)M zJl}MKDc0tn(i{f1nvAEnb!Xt{8;zzhnnpvC& zW6_rBj``UfGd9U0OV`024{$w)8Whr_7)~(sl+KVb&2@h1Nwon)(dT@p*w+f8I)Ts{ z2jjHxm5JP5c1_-7Rl9T;>@bX!MXZ=FB4FsSFZDuw^N#m(9b_FtJ@2~f+4n!J>;$!V z?TsjBISu>)oN$f$!RdnXq`Nb%FcHE1L)m_Bn>O(_HDa>B@&iMhewjoK{jJng1 z$X>kM)6;9-KtsCA`0t?Pb!ll zk|ZAIZ0jrbe)YTYg~QSFRk@9Gp2t!WqS?1;LUz@_;rdHMas%Lyyh`WpyCSre$Nqjy zn%zwO33Rz#(3~FZHJ0O7^};+-(x{}coW~re<@oG&@$z%J5l&&54@0AGY;(li8DE+Z zAX4-F-sKacxP8nNCUIPi(y!F}IL-4s z#s{b=F)VG)1Q=va~D_A%#+jol!kt0 z)$+|g)6C0>ScUBXR>m}@+B)dgr&a2+q@Q!s&NPLqFTOTF?-`!&!c81rvfu3-%LY9& zxzx8oJ#E{HB3N&``$Z=28J~mCNi!s3*r;x(62fW@l#N~r&yj0jX*umXRPA$R+(4I1 z+M7x6&QCYqWJM4$@0&6K;>kEyQbCg*I<4jsY$gbVN3qEAa%vW6F-wZ;x^i=G7&Tbu zqYmls4{y+?%$|k6BQqe1_!Be5j=hoxPjnhlXcpi#gYw*9?0e*54teC^Z)JMl1&qn} z|4dNR^lP#Mt%|Vyv;_{GK>7*>v}`13H~Ss4#R!ot0$qY(yYJ=Ltkmbw7XKzX$y+b! z!k*;)%aKDh2Nxn_LOJa!s{j;@W^K|@vhHOnZ6nh7TWweqA5D^%D~fqvO6FNqWSLjl z=mbWP*t9oZo=fkca|q27LnIb1*qhqeF6v-O_0B&oVy%;Z8aS&NF`aHitB`3k3I;VmO&r@{cz2`WG^z({nOgl+8z3ig9vq zj2!t$Y#nGe?upy{C{K^O&~z;Qddplg>*ZU3OHM_K`Q&dYiai{;NQy^c3m21*>tGYm z!Ml8z5F{&>y{~olT9pcW%oebTnx}K&CfL`$R5Cp##}GFe2I^iP6Si3LHve!z_9Fl6 zxKM5mKu;NTP7<+MrBpYg)2bUiS*qpksaCO{tA39ZD7TcGACIV9oe`+pMhJpIVX&*l z>>87d_^)C76JJcKO`&EO6_>`}q!{zOq$hO)ucJUWxxF#!7;go7+>g_n!z7?K>__p! zrXCxB-1Cov6G*zh`S(I}a2#L6;;Z8AP%yY6uLe^{pq&pZO~jfN78J402s+B+PX;Pc zrEoyI=U@yeX8wFw$g6Zgmd`VM2d*-2zj6X7HR{k@?4R%^UiwZQg!Xj8)8+3$dQ z>3kxPj9>|_qbU|CCHu4PqEKPZdtg|jrD!D2wFg8wI>q|Zya9_hk`sk=@=iqKhhN4V zXN?8cfgVI_0SF;e>5td;sV<+Kn-)iw8w1I?bV5!7h7Bzk+R&)Uz>=aR)0b-4+j@wy~VU9--uD3MS5WSnmWzPzHo_OR~ zPHW_#N?n*P43pMrWi~kM;lUWs)snCgUay4Q&Wc$t+1VCkCoH~}h2qLCIn{-mQblta z<(>1)lId0uEMkSOyq;Zo?jZEf+x66EZEml7gZ=$LpY*BLd25_e(I}LZXQIhhKpW`l z8VN~yfZ@V#0r2_jkJn?uQO|qw0(cFaY#%Dn6!J61H6H#vr?Ec)0!YFS?YF;}CS4eZe7)o^= zSQBK|aiy%%L9L~Y$bW@Y9n9~OL(s1sIyd#FA%t~P}MZF`ev zG0^G$*#JF@;27dHn@cHB4Y94i&iUw?U|u+BQs&~7oEhFayO}OzuspP@PVI6%MSn6!GWP4N0&^C|N4+b*$+d`nb4|L^v_b7Cv2<`yLQQ0{?thF zh^EE186mGF!>6I|z^b>)#j%@0iaK%AKcjjg>z0#+wW|Y1nAWY5X~k~{6gXvKMD=oY z6eCT9oH|JGsk9}(`A0-y%3=pa#1l2c(35flps$T0Wmd4qP4&%L757d|qAFSUTq$cW z2a4BThAsB6@0}oY_Xl{4uT-KBM=AxJXgiS_n*s*bmLhja^+)dmDF#E@sO)8t>t_0W zRw2WV?Yr_dO*MIcwVp96N7i9BRg0fASJaC?vu}O!+mMg5LPqzbResBlY0!7G2CFh$ zf|?3EP1Kzmm8~YKe2*#4~LF2mUjnU-#a_bs&{T0okc(cs4Kb)Z((bd)Yf9}No~ zZ4`~5w@11uye08oBcWxV&jKZ8je87?7Cx8!woDU}w=%>Aj9QL%=>=+Mvg2~zvXd%5^O$DW zH1E%F#^`hDKIGkUhsyPn2lH&K(ghQR9_r6XKjr$(*Hl_ZUi1KXv!}&-mJ^7J?4fZ4kYZ{Xr5=%CX zb~#2og!q!B`FzDsQ!qc~A+z%yU`QRm5Q_sZS(6##EZL0u!LueAWNR@7lE{{O6;l$# zTbNGLK$05JDPXtw#&t@U^#tfpRC9EHLG8&atRP0zy}VN0x>ckn4c`>zY7ETm1?Y0Z zU=F2~KWo4tYhXKsSPB}hQ`E_m3G_Q;== zck9{SuL80<>A7fA#+;#fAZ;BVKIjvs+XnX6=K=vcR4B1%7)b^BPKj$e$z_-~DaU}Z6F^)_hmHhdn@oV$ z9uT)KV5o*k#qp}T^Y3XS^ZM?q4`lZZhR?dJpMY=WUSYf0?BI>#2EkB( z4ui=a!IpEDNl$=>iq;e&9Lza7^gZV?yR`7$$g0YMc6{@yt?}aOua2q;6wT3&7&*~V zHSP2|IMKZY&ChE10pZZ$5VZ{$r$6fVOMbc@s}P%fWq_yPi*S@MqKH{R7SY)tcT%-*z&3Ta;5%<$mXDUyNjIMFzGYCnmcEecSU91P&`Cvo zf2K`Er4ENHxp79^Hlz`yQ#ztXlDA8xl+MQ-k9?@WObiI8Ca;0;8KUB#bVUj#WKA=b z7H$g?(i&_Gv%XuoxMijeOD5;PB0kdJAbu%#dw8+)$)@Ws&`Ot17v>dXIOMWY^^(20 z!unbvyy9es4T^G?zM8BVy@80B@-4e*Hv@6ep$sb&e`*VXksXA7m>y8EFZmOft$-^t z0+CKb2WO&Qo_FTc%cI*N~FcclgI+)%}#7~u3me~pNow%Ajvg$%y(;> zBl5p^^q0RFw7$nqtLQZ5WJoPS9b*;RNL+Tw^wYw8ElMHY=jG&zZPE*&2PIR(>0S+f zcO_!hW)pQ~E$=WaF_fv(uMp#FhZSNMMmZZeNCMA1zvye#h0|G5JNl(e%7H1Dc^`Ec zEVr3JdHUDK%?%^E9d23q4i;x@&$l2v*YGz1E;M;Gm7c^97xvL2F%%V{c<=~K5ca*A z0?0>dv}T6gF}=UtXLo;9Xm$>@kpVb&eH!|mpZ)rp_b-^$%#`c5_ZClOXn&uVyuY^* zPt937U!dH%pL8@7KBe+mN0V4XNf}aaJ6CcL>wdV$k}zfR`n}P^WxV~JMH#KV@J%(% zh(_aZBHn>pbLEUA7wq-YLb}Ff?0wfs$Pg9>8iWlpAB(IhUWv2lna|`$bVAiKUe$0m z&C@=q+*~-2$@!5TcKYMMiy3iu?l8DLUY8z6dQBkIwO}wI0a+cSz;V$jC86O9 z#A4WuZu5w%vy1;tQkzr+|Jd(T#;|yQI{xOB&f^KSJ8>Obrg=~y50_8A7FrwjBknIvHc7^(P|l5cu#ycVugykP52X4B$HbQKt2dIQ zL!>~cnNlGb8qiFfqZip>F0R*!$*9`ZCYi+Ma~GedEV882b8lkgTbNRzq&Ea64u-E~ z{sw=&*ICd3aAr)~@5@XTiX~QPjh{v;?~nNEAs)LDNVMr}0-Pji$vQj?nIlM>y@PpJ z^S#oe1J_wTTqKd$h=nHQ5}fr8$}Y7e$>-Wf8ialpy>3b2FG*HkZjjkpLJ`;Xp?Lg) zAs6*nRYz&D9)q|>-su$U0*z2hPxaq1k*7I`4yt<}2Y@d#IwO@(o^rL>Z^Kvm2|z7a z_oMj?TvtBXr*C>kVKgzgwgNTLY#xQ8%c8B}P}xGydJ>4i?RQEHh3aHyWzdfBTZ^I& zdrFYS(f-<}!F0$ce?DyBgIG?w$NkqbbMu5G2Js+?TyQz;j`z_scl43gGP-1$W8W+7_bcl zbg0Yo6q%mmNZn8d5v0|O&E<}?t5Pyn=n56)nniA>i ztWxlT&73Mzq_k!~RTnFPd`d#?`oYe#VK(4+1B$GR>-pH4!vzx)k9H)RSSxIC9U9+= zIOHufjD)aj^!nR+-S>t4VaqNcTEwjw3waouuW+rR%~~2{knKLO!zHCTaOaAC(VZ-p zD>f0D{W1}VTpOAr?TA@Yu_Zclus`yBnFvg%`zs^6olN>;TAB&TA)}{hu8^E#W_iwv zSl)DMaqBd_NU|9ivv95>hf8~w(?9k7dKJY{v(w{tZ+F-CD|NzI_7Zz|I6MjYu|WJ8 z&?=IWN=&@gXAs|$FLd_ujrkCN*!`9j@0K+gtO|}VG4C^*=^@Hz{ji za998ULWY06Y|lYk@UMj*sV;55(URDGE>FXFm=?adW$+BIoI<&pWQ-|Vi$|I@u2kAX zlm-PyfC_68S#*@JR$bG~T1J-LV{dmDQ{_?p$q8^l#9OBxjK=J{4fJOOVT+q*n_y!j zGc(g8e#1pTafS{i5NPJSs zD3-M7-u%xoJHjNw<b-HzE^YdcOct7rD~STFrw$rFt*A zdj00_vFk_TkNa!ypeCUOLR4AGbMy);0wF{>C&{#9nddDY7;{~gCw^qjar|UC&Yc?{ z@S1p}kya~IQ>RW9u_=ZimHMTclIX6v^~?AXVa_-&o}7xnuHjDe!a?b>p`?*8M!u7h zZr6Y_2%4@>F>V`xpwAtFoq!Fqt%x_eM|`QDO1YruUpB%5Ijv%SydWCIdRR>}$1P z9e?#1C}n@jRcoOX;Vods+oh~-89DWNoJCTv%9VnMLp`SVELS`$&bmq#V>H02MFA43 zus}<|Sz78jxtwaZ&i3PLgg9AwLMbsx#q66$#|bzhNK`MhoD0h{lJH{pF{O(N=i7Dg z2PPgAr^(pRCth*sDO8}GstbH00`Z52)%6j~Ulcm{h$7f1Dt4TNU)qw^XZ%h-to)^N zVNK4llK&bFwF(5F9I+5QB}ZDL3^hf?@SZiu^5+&GVikXKfw{-;OwJjdpD#ceTp*w# zIJ#1$;I$e%8wJJQUfb4wMILR?IpE*(exk-lxy?+`YY=ov$4Wz&tvZQ)E6o|oD|a*+ zl55eCcjy(XM%x`DD&$ElV;DzD2ydJKSEVEwi&P?$8NeM1E0UQ%@mYZHnHY8)jKzv$ zdRc%?&@2`Z<0v$JfX7*RUil}=hdBBg>*#3LtIcTxdv$x97A)UVk98^}(1*ZhrFhqa zD0LYsDh29pO~{FfwNz8aXs+iEbmFXAGz>D5-2HQek0`{y0D?dF24N|8(99|BX)BI` z_7{@JQc4Lgd)o~&o1Q78*LaZb>xfUNuUOV7Yo^Cc64@{6mDkX!H5M_wj+QU0UG-kp z9NMt=*ACN;S9~}=75stvV0>p{mvm@u=2Z42dV{W~9cW}!D6L`O!`z}A=9_!z7py+r z<@6!CYFXUi>Zi6|DV>h&^_)9JAu--(Rcq>#x}CfTgn8Z)LZQ;poAO_I(wdhYgk!OK z*xkQd>=Ei;bQJYFbjL)v*0_cB651NZ9R++x62+PL`L+tz2S!FEE_SmFnmuV}53XF< zp-!NvpM%!I0>j64|4fN1sdgU3aOII7Kg}+v{hWA(ZABkhcbng%H4)vmKlPF~p~Fnc zqoBujaV~lio^BKm1bgXAO7deeD`72~fP3DgCl+T|UCWhXrU0ySu=M!tx!lm8rXMA} z#N!Otn-=HJy1Et(v`Do6-U-j3&is}}5A>{09w7cOsYYT*gj0>Xmc`ZJG4nnp?F97* z$6x}w;bRRpK~E5S*=j)I=@>N>*G6ctPcS|Hl;}U})Xc)I(chzkkn3^^imS=Rcr`78 z4D0%)R2J7SZv@JNS}7Xri~W&T7Eb{yU!F-p9Cf z!{NO~gJ}0k7XznZ69}JYt?oyfdlz}5UXgX{` zhz*|n@Xem~Hfw{p8BTDJlW+l-m~#&6tilI(KmGBss6mb)jdbY6Uzo=mUP<+A{F|JT z3`)z4gp3v##gEUV;Q$q4Q+@1DHCD7fHqJ%zZKrk}N~op3W%{H0bodLuQT0<8%@65F z3bzL`(H?RF*b7uh&eY6aFk2qk6~~7k6c&`yeuiELHHtQRmO-fZLWeLFl`m%6&tyIq zSq56#S5f$dr3LuIf|M)Afe!D>BAHVy%o!(sEz}0tiK>@5QUqr)@~AChsn5Bh41NM| zIV+J3k4ixEb-!rwKC{d5cE#(NPX~H=PtiT6x z3z_#U;X*8G@M1#QmDRhGbyC45wlD8fJ7md1T`EIFd>hPgMRTaK54|tEW{=9Xl-2*z zdYO^mmWTJKqSg^^GQ7i|$Hv2yG!J<5P|LwX6L$u9p;7?aV_$5WMzHexl8;Z?FF#fl z2YI5D0_qMuax$nZ0UBr0&PDcb-8HgtOoX>F-0E1hjVdtkkRajB3;l z@;gyka2Fn1*vsW{l6rCK5(A%6P@0YMG$e4XNGJI<&H{ccu0Ez@T>I zT+a~FO+M&X-;2pfB-{(kJ4W!5sQ+c8V7V)cPAd1p3Sn1#yjLO_6=)osOi?yT<-^Co znj=VX%TF77g{HnMV%X1^cD=X}Oe_Rapyk5O4@VBv*obpZNz&W*=e<`~&`*?f4D5kNwJEsQ2?lp$d7O(pA~BN-y1M5R5KUtc!>XuO zh*T6f*FF%0C8hbAZTZ}KJl2J;yFyE@TOOp!_v@!k1Pz^BpjPo&NN3ctL#you_>N5D)nchjD3Wi-AT*`Ng zz?_ibL>=X7kP`Rs5rIR{@)A?XFGzyTqGW@#tYnKVRhRf zM$lfy4W66ygj?DfE~zi@H&ypJVyEy1bybq{QzYb`mXi&@wTQYuqYK>L*FK~@g$QMc za|8M=`~>v_K6GS0HUfCR#$n)PWm+($nIj3df$Mz$(4_LFl>*j*158&YD0I8p;G~Mf zWo+1tL0ziA+Fo1+C5eEuWaU3?^;hs;-$bTf`$jfQv?aB(~9a5-UWgv3fMTU z-d*k8^lLLH5)z?U))SM0Z*pRoSv;#AxS`G&cGXtdybBeH&TMoSv=3s2PWxJ6seY%U zEt~S{IKuCkf##-g0iBki{rTP`Qt*BWgE)hq+YhQNsD$REXR55YN80?rIUAyxWi85t zTU`iB?x55Jyh6p9$Jkz;8*Q96G3uC=a?j|=>}FI0X1CYrb`JE-EFQx4aij&j2hE<% z?|@Q-IbqDYCENmZA)A$yrr+fuM)bXnY;Qf?w8^+qpXZhz8H$G=J0rhbC#C>bulqcs z5{`_8Zukt6iNkJ|h6KvZ2Xeckx|4&q;;M`Pej zI)A()FX`MHsuU(Cl~nu9B?M0^EA-3_r;Jb3hLO#MV7ynjkM~pZ3yxn7*NA4=1mDWR zVf^RnQ+2%1#=}+O8{}ro#~$;v&(K_mRdr3$NtD@uUw7o$^c4_!*_8YT$mqcZbFe6$ zV8s)PnkQZM$m57tx|ZCU64We@)Cn%Pr8g%^l7r=O9<@hs8q#Ea4FK_Fn7bS4#rB?D&7H71H zn-+3xH7aD>*G{$@qy^C+M4~&N;RqU6I9b|!z@9*M0(PB;%$tznhu;>$(=o>(ux29C zh}5pOqJtld%#e8`gw&_5N0_JD@p8y-Wqzbh;`M`VPi9XQH(`P-PKkjiY{Q#=!^J=k z2jG|yS@7{fL|S?6-r8<$P-l1Nxq?y%@TOpqBA2Sbew0-q4;n+Xt!8SG6& zJ31X$?fqE%l42j#z)Lrly<4Pqt1(xKG?>^BZ{cd3zR}rm2;=-EO>y?1{jKtaq*SJ@ zaP{@(#}rpKj>sfG$(cJm2kj5@h7s}^!WxmQKvBF)mC~G6^U>EKx-`UKt<~-2;*!G+ z>$*s8Laq4NhJO)Rct%(}d@S1jDYp(T3xHQjH9?)YQ~_!P%%(H=&^g%G?b(ULMUnrt zBp47>xyiqf5h$OvuwKmg{&xfaeA(RI@;?Cp!2aA<`xm#>j7+tKME|d8fXF0Cr+p^K z;b*SEH>34Ys1A|h(Sv(J$vJ~nQ1zOh;dqL$4rQ1H#5ZVmfSMIE!Ndvp(d{AHB3}S9 z03u)A1mth$A9hcKt&Upo&0+z)Za{ofMB!|3Bq$o^Z>*pGrtJ3#>{8-&zg8Gpi<_I} zA=;=|Ut?>bnMWM=B;L&B(0)dXmdL?Mc%@F(@eqge5D}(l(zv0xgnE4e0IOkiO#OVy zDgcsaxOW%U%E71_NvU0xudftLd#*)Wg;KNCn9kM#f+WfTLtmyuZ>Bh6&i#G6BB?Tf zC@<*Bk7qW+{;LUJnt29PI6PzVo<1Dyk$$|V!uHBff%nK8UD5#6&n2>oE1R+9OB}v! z6_fXfd9tY@?b+%_$FQC58K|VxdFo=LWF4F>4|4maWvbp)6iCJEa>Y6A z?U_c{6Z;SCrv5E;FvuTW#0-GQ!##|aBzPg4S;3%SKj30b=`UNsj06gP7S_AZASCJt z?y0;fo962s{9*_-2%erLpuUeDBqz~m(2xzJHk(9ZZ(akQt-kf+%x!G7#-*I2LTj2V zmuwIPS8LbUh*7s3r+pJ~ikm>4jhZzcQ#F75RXL0L%w|+AEAMCnffS!u;zXs*FF1hN zkQrRi_@y?`ZPMtRz358er{q^ zP0z;cJ10xqFJv7odPc0sVN$Q$<-ef?2W{s*$~_`^r0dt^Ts@NQrV0~eWC_kWHyW#3 zXUsY~65NkzvfmFPFX@`XwGtN_`so0x`u*6BCkuXw(9tf&rE}OP_hUa+!S;D-Ujc!e zeeJSxYI&hUI_bsVZOM3DiD1$xA0<~}?O{8|k8o`UIF~D2*eW+SdN^r6&Mas%6p2mgcjFW?w=^yc-FlrBlfO{LdbA>J0}8O(99t z8j83uo#lE|0_N{_`YL9E_;wAEQuN>zxu7#f===L(r~64$r`2VNA)(NRfmRvkq$FL~ z7RpA6W3)?Uv$I|xe-?jUH+AS`MloYr?7k7^m$5W;nhy8FQ=+y+A+ra{!B(r&uJRL_ zl&`G3MnbS&+T|*1)82VQysbCQ)ohVPUI-5MkwiS1mE^?#8IJcoXnya)mI)*tyi$;r zC6?iGKaUcE39JiSx^`57GBnmW9ggUF1y|#&L{XA{Q7SSZwpu_hT0J6-@>y2OxRfd{ zPJyiv)S$#de!%(L$4djGKR-+VJYG`%*Yin6cG^OJy(3boF8k+>2%Oh*wT|phE8mPb zt@pW{^*-AR4QQ#0wXXK$A0Un5q8#!E*rSP+Io>(nc_-t8o+t9&ypO|d^aodVrHKYP zzPV#zFM`kJPIZTbbH8pK+UNRhfHQ3KnffOA>`&o9D~g^i||ful2^;i%1T7 z+kp$_`m5D0inZ0+-9}<&yI!6S3RErG3w6lxYaC$gu}deTa|(GRlXj~wlL+e{nVlso z!`9lblnpa|Q_ICd)d7!v$h)JW`Kp8|Y+D?-JYmcif$RbtsjBrI^kr@LM^fRzdstCD zj--J`#L76R)+v8B8TL?ja9OjUf(HBlFTT#Hu@Y!o*0F8dwmP~>eGrc>F3wbyUd!@E>dH%zcGU4f*~xBg(4y=^|6{C0oB2ZJvoIEY>8dbma=&W(eeBZZ49}rlsQf#4_QQfH zn@XPh8E;mVv^p}e>a{FUdgMim6piSrB~b28Lc)b<44RQ|ZCsSs3zr}oGcMQF;c5y7 zGCR>&YT5`h4Rs^n!1=xSZsySw^aMIB)i}LJH^5H8a7%`7hcz2Ly?Na-pQQ}KiLD`4 z1Oexm%d%^cNd7vy+3?R*)W&#$`~`Q#YB+gcvdCEvuuGBBCah0_dI6nJGXyU9&;F6F z3;HMpfz6#ORG!mTs*Mu2LyMsg$DuO}PU;{Cq1YZ$PWWkCiU51iu^^(lS#-QIXG6X6 z$XiP0v@=Lt3s<+Cj^gL8*h~^BxW*BCw2M*m3HN*MbWdxNkCow;``u=BsJLCw%5eWi z0O+L-rOJ(|maY-)u!W{5*@ODr>CwkYhxd^ZKMo_#blF+cnBX9;7~1=kl4{F6)JLMM zFI@NzNe~@(EHG6DFjkKN=AUdz$}1RNTAjkwI3S_k0nJw0xqGz+7`F)OL0btP@ndU! zmMTc%F;tSb3_o!)hUW-(&Ki3)VBt;(nxx`U4p&@!MO zl8eH)+W2!Xr@|_+!?YZg81W~-C34`f+^KNp@eWBpo%o8#2k2e&sw&?W+2C&@2y1&Q zl#+u(F;)>Hzm+!(wjbrTv1brnw=LB{a9(49VXd4%BeW^g2{n07NM8TC_UFg?k@Qx$| zuI>1Hxph>i5?tYfk5m)J#PI&?5okwCrG*=cM>w1XNl{-5wD5@+p*FN)fP~*J&rlN* z@>lVRIO?;oJf{MOu!yRT?KehSwfcu>`XG%nesYo*C@0LSPRM`^Ve?@Cu-C0)RB7sIpw0g{s!{7`q=~3bzH5333#EN6T!UZ>09UXnhUt?Twwj&~+B-F8p&DwjF+%LQo*E z(j`I`0_`8EEm=PMLI2ey!c_#xC71y11d?5NJi(CR7zo6~K949~3Hiy8=yv&*I8g8h zJHZ0y0DU&NJrif55=wf<>tE4|pLa_LpcGs*em@MGmqAZODull#_1j7iQbKJFnvZ*!1R}&FP2dj2%vE8pR0WQ|0!epuU3P9;KKmYPqG5G~z~g|bQFTB_ zgYX}4mX1+Kr|1LWtymI~C)@TBtem^ai*#p1k^&2$^QS!{IJtdBti#a`#l1nLu)-p{ z(Ka4jy;F#0;olC&qPFXnS`%{n9=u7z(-4rKqSE1S@qOzBxjTO6;j0>{B>)pTAG&nE zHJP~;hg1$xsGjy5se$D^&d&F&94t7s?#ZhL+e0`Jju<9T*D0qe&+-m5=ywNz1v@iD zH3*x26CCvNlnkZhhU!kDJ9J|_V`y)2X)42$4u(08ab+Zhp~;eX;6ct?7J_={QkS6V z(=hM1jp&3gk@~+VRpb~?9M&m_+RAEF`oj^vGZPZ*`7=HHMJ>7uH@{^=(r}Bfcr?d@ ze54nsXl9dxB)R6J<&N4`+BhdKsl$eTwg1fR&$8K_)@VLp+d-ST0%a04~0x! zS;Z7>lmuUO#tf>$T;a=t3B3a+F19$C5<{~%dGY~9FKthDpe4}MWQ;ZCI~)^}=ni-= zRJszGKrsZL+A?P$CUg*ts^YMn!_}FNy(bb-45`wKThptYu17p9l40WQ9V%dpM3~!; z(8bv!@el$y6p+y;&@^qPcES6`8DjRXdCq;JU(m)FISlRyK;UtM3^5lP4S5Xbv^(FH zSUQfL{g_r#6E#@{_gA51ttY7c0_f-h{X!CTj8?W7`A02-FX|};vclX{oTf$v$IFzZdIHM5kUL5sXw7V`XkIkjieg-mnDJzeGsb!cU_#1i z;PveunGn~s_!rS5W}MI0Px4jYm!xZi7lE<#py{v4UWQO@c-3L+?;%xx;8z`3BRDn- z*6AdiN;gEH6!JK)R@oRJxg$N-k=#Y>xRrU+d_t4+_JbP^V`2;1xLxF8C3vMVW!SjP zEU~qOK}f!Vl@%&DV##eaK2J|~e@-n>s|e~g<;ZtT2N)#cF>kaOw`r8;WyB4LOuqoV z8BhJDPq9K_*7dmU0gPH5gSU6vsg~VA%@T~lpvfNh)ypSR9h^qJ#ZnRgg!{Ay@{d`Y zHlL5FA2I(S9RoOe_PnjgtT9CgE@QZ#Zo&F`vp&;)SP^qHtml*Dc+&eG+P>2PNsWYy z*O>x6O^vOVQAo!&X$Y5dx}-6WE$)dQB?hb&jN1iD4#R={tl!sJSo8Zz&?k325s9oa zFPA~JfIH~X1M1m-xOs+1J0!Q960x;}Tx4taF?M22SUDfz>vaM(i2+d5n{SR2Z8 zyoiF`so?8D4bzR{;{$ZWq_N!8GBx%7josmtzR<4IzQam5x!ofbn0 z6yLYmOjQ!Yyrv>lk-!8i904JV1)7Vi zWG^I?zBc#xWIjbkZ9*&=NM`KpZO-9VlzZ$`LB?oC_i<8y7ficMGW_ChTd8vY@beHY z2B8*@Mn!@WsN_64A%>+j{Ko@_9RhYP{Qll0DQq5>Z`#Ve0+#qo7_ski5i&^bs12SW z)K$Hu#m(;GltP6w8)}f>;~uWz>OksvDacKHu9hLepTL+VGnvE=ld)=3J36phSbx4T z=Ya^1Mq*f&R^uRGq&W4dNeR);7|Fnh-_hZc*k)q<8}sQJ0P+@4qRe#t+%l0O`dLUn zWgSSbPNQrgTYDpD=BCF(TpRe3_W)PJ2zpX&w{?4O|5pEy`e=uN#h?PiYjQ^BWdXqk zn<;+yU74TF12k5YI)s5|*<>_`CFa-A`*hZ#05JMTWinYwi8K}5Po|+fiM~4keiRc3=%_YD`{b2OXh{aYHhJ{W#lGjd>}WMRp&&F2O09O z*Uaf20qpT-DCST23w}wprKwgc&VrlzD+nz(Z3qI9OQeJj_#``7I5zgf+Y$Mea0n7e zU&IR$*>DDKF--vEs=#wH@=$PL9p-d|!25{VmQrZUXc-x#;I6+{Dea zf}JbXn>T#bc=(hWxt<-{3f&Oqq~WrrDBQ|BCIfZ{$e&8MddFp*cTH*^0!wNdJr9F^ z&%YP@`@la{N7Y9dKygVL^mZ&cfpTFkQS@SW#y4282r60mSthzPzK{dvSS8P@{}?18 zdyY`rZl6{8rFuKeezL7BvBN(puQ3+DzCds=c(BeAKj8mc=d(#99+Uoa9<|{9tMh2- zY#{j`ogb?%Q3Jz7YGI{kD4IUC#bG9gX|nf zZNahR=^SbWlp+=NUNY4Lw%2S9)tk{I3W_br$f*4L2_fTF@grv zVi~sV?SoiR$4L8QrV3Xmb({Z}nnAug3*5S>US7mmW=~^n?K$j?r7*3b7Cl7p4ro4mM)+|{+PD+y zfpjOKPs@2I5%k_y%(bR+0>J0MJ6TCG6hvc96YOE+(U1MbG*MnohXNdj0|Vr9)a1LX zxwy44kS8~n*C6#D`-v5k)>%6IL{bkgk+PgP{}w82*^B7X6ta22dd+!Kc?yVd`O~xo z)4L66shWR*;{59;(-|sYk16xE= zX_pLv4IkdnStH##sh{{C#G~w`Oyf8%38M7Z)LQZcXiuc45YCa4_2jYl!0&U zLH^$pei!WJXG2^MlStQ);4U{|TC9fg{oq7704Sxg@W7wWv1`2c93gFY$Adn>^4zts zzOl-TqmJ*scbE-RIZ}j;ItR0}uYgooNg}%lOhu8Y`D!z408GjZcH)|XK9lHx#Dhxc z->9(aS{&0y$6Zj1uHZiA&z(B|Grctlk2abDiuqi+zSK!bVg-kI_-j zb<^lFS@;1p2U85CE~aJbN$G*+#2~$}Ht|L+KGUJGJme`X!o4w9;M~mUv=V+=Z%*-0 z2j>Wex^$+85{)I-&i$`W&17!`C1w`)S?(jQQ*X@Z`-`>@sv!R=-MpaovCXF71ETV> znGM`W!|2}vOyfTz+~G4W_&#B-KF!;~S0}QGG(RVZuz3nRU^M$ZT=bK*w*HB8w<#723}8L5v{Wh*R&K`LcD`axCy3I2M*9ae zHVov$;uE|3S-DM25?`{kpcG8PPuwjg*k$yKpVF{Z^ZPk)kT7VJ8Fs1eKxNK$(40Fh zrM^xcny6`!kcdWiZx+TdRzIUPGG99LNjujR{i|TFXF#iApfk2!oYDLJY(t4jt-_KV z$H#08;Z)m_Ig4&kvKT2Din^^xUDW(eVV57>seG2%pY0PyF^`bIO_Sr*d0ZDNA_qp=!Gn+35*G+zz~6 zeF-|lT5UJO+>$h9Nn=sW*AB%G(2^nzt>SnZGHC%z-Vu56ll7il?Qmt8me+ul11K*m zL;sp6*63L{>`dioTJn4%`3%iY#WRVD-Oqf&9oW6Ean;4a?X7Z%3jKO`v~;WUkLg=< z(KC{$O1YPnLGM-iGj~KY<=P9r`ii17;rk9amq1Y+BUrVTj2x z*~w$=bTAI0rLaIA9~!w6xyF+V>n0rET~Q$T)B@Ntbcs&P(kT!*$vDegq5?~Q>UPRo ziqxI)AdvXm&+smCH~vvx?(blT{cS>~(Kjc0+ldcPsXe-=V!C0@hAfk3RpZxH>A8C#udb_@T} z#rv~GB>G48salR~Hy3p8bp$y(r|8?Zx21BH`YZa!HO+s^twPh-C#gE@EA zqvH0g*32WabKi0OhT$tEg@x7u( z&G}j55usK&RBR;OCNmv`D{FG55m6*>yi;IHG-Enz_cLHt=eGN(Q+d$loY|e@ODat| z=<(EiUdj3Oi=K`(&Ny>p!2HGUfNea3@u9YORIb80MRBunwZa%GTEGlUk#y@r9xJkZ z6fGwp7`{$->=wYZ3YZvF>?x&>h{C^TsD={zs{?>toCFp3u$#d2m6qcW z^C8s(MFUm&C=|1T+j%SlK&_tXka^UJk|6J3FU*-B&8e2Re~+(8J7V@0AdP~ytDCyC zdP1_g#T`LdESod^(Dhv57l|!J(J#lb8Bir$h3?B>@^OP^3J)OxzmRGp;~Jb_M207Y z)1ydW)fwZNtTEf-;nU`pI73T|42D29QRVxbJ<#HZ!AHjtG!(vDlHODNf5`5n!i3>`3jawhq2Tv zuID)Z&iYYwKCDWVw!ZFmOW9+`Nu+KJos05@Pcc@WOsS*yYC75)A`)vycBP)#xQkZ< zN{Htze+^)}OoEk=Rw1_MBg7WYKY!DW6m-jCdeyZ$m5lvL!qmxZh8*1Wq-D2sNd9_F z2l)RU9rU}ZRCf|UdoJ#WR$`6|`x16IQ76g4Nxf6uM|MVx;B!EP$!EppliV^7x^Awsgf0A!7=Np z?JxZ|j|2qJ=~#;VfoBLTt@pKl7x~irr)e?Sj}J|q^obZ4-EH)-qkIcCH!$m_x<{^W zoAi0XTj4cmT!;8>FRD8)UNzGeT1J=Rubp93xp=ymWee}R!-qdEzPrg)OCPl;PprW^ zCgR@qhmcczj_Mh~x!-(b=&xsZGFewM%J)&4@ku>-qOzbv z@Lo1OZG1N;g6?8Ix(w;`CqZ6><3oy|Dw^MDGaXu`-4A!|#lS&43$pn}VwmDW@uJ3D zdW0zIk@&5MqOswS2capoHi{w@KupF0X$`M zvBO7VzpR$#P)6#T-y!q}epS}1TvY&1;-x%-TDmo7zc=d?Ew#)scIfop(5wE8*RpSW z7yKU2sx@1TkW@GyuYOHINMNBIy3+Zy)^`{|d2j#VP3)ZWA%|*C!?IZN{X0<+ia(>P z^ns$ptYvL-mK~N~DziG~{3<4;GxG@#zkRfJ)^70qxykqr$BS8)B|}bcgA1MbZ5DE) z>GB9|&31Xa_cdd3BCryB@@3}Z@Xc(~rxfdWz5NOH#0*P#%M*DcBix-T^K=gmgK{BC z15U1o4ufJhJ}vi9ai*I+Y;eyLMF} zRWNN}!$SU$Fexwo$YSWst9}Y2J|?=IRmCdQAAEW)P>-nwWLP<=Al2(?|63USuJVQ6 zkNU1=k0Cffg800eQqkDZ6`|*kO@Mr7_w83-)HRL+96`JEFZ*AolVP<5#=f)(doNw_ zwa{nXL#cIPmz+m@Uga|3QP&P8qF1*@S5WJs7hmR+e_D8+_LnqVl{W6wyM}ByP&GK}ByMVWU(@R#i(y zLvL*sW%-4&LSnF){wHxu>OMD)N{M>5nl9lmj znSL$2;)}W6#jjLeDcs#?GUiP6R<+0+@g0sg?TsJwNtI7AAexpL80O!!9V*3}zZ|PD zWOAh&lQrbz4FA})6nf4K)LYVnwHDFD>Rr8ybJEyB6O`yhZ~R-Sdf8gqGQRiGq0HYu zMGBkj@C_pILkuzgDxsgjT|d@l@f@N5VJMY6{hnJSGBDbydl(|VNc*T>VvkjJ-04L0RmU`5?|>IZ?k%0 zZe{hOnww2&FVrffJ85Q{TWHPX8mHuF8qwdh1LqUfJ4sw4^h+1VfBaMk7bI<^pMwIK z12-B8c4^MiVw8_n;e|gqywvcE_3UaU31j66Z5}lzPG7apEGd&st7QRBFT_J8iy8O= zIjh)Sg>ws(?yE`?!+C=+#j$#|?C1NGR&p;ziT9=U8xl5ou(plh#U=jfJ%T)S1&Q=> z=A$y7b5*i`9ZKj9>X*vs6Db1SdkwB$Vy__p@Isi#CsaWvx?}CHck|q`SBDj$JPwZ3KU{27T@4AO6*(KJH$9Tbl#i!C($1imN{ z+SRmN38OojqQc*u+`xfncC6=!U0$H;hJd4Sa!VWh$G`Yhl=_LSAJ;$TzA6axpetJ1 zf()06?!8J`p(r^t6#q4;(Zj09=Mx3x#?PWfF(|q;fULwoq!_AeloL&sxOP6dI!ob4 zMXdaLb|V7?S8K=v!D9JLT9Di@Y>)NwH7?%@qb65cwvg6CC1M|#qX>fT+;Mh30pXPZ zi$_k@h+}2eiwjd`)jk!wLV#j8=8Hyk3RQKmEOJJ(MeZy_ufqvj6i&``p((KYcq1wIVbfkk=YK474 zMS_=~QpwDG{1qKhn`4n^<9*#}f}V-K$Dqd(DxnK`Q%{I>ra%ojU+}9_Rso>cE6A+@ z8iW#TevBVk!!Qx7qluJWNlY|e#qypko5gQU3MOZ7ilV%M*{ya-f}#++qBW=+4Y@z# z4Bb4qm-~A#f-B&&Q`B&}H!?+!k6#K@I)uC-pJ~K61|a?0I@;3OXmDdB#;LVP@C?@X zeX(UywMm!?*Wh1r%U}@T)Av$s8T>lu%VD`xJESl~mb-ijZLoa-gT1^S~tPvaXehYUeB3OBd8J5VGR^60a{8 zD@e6SmV*LonEgG7pLADG?_PlRvH4!TrPHe7ykcCszoP%bk4%k`V(xp%m^(a!XyS`n zsKK_aiihOw9Wb6k8EKAxIv3>Ev|d5 zb0nWoEx^|l)5E|_QAKyW@sWIgyiW(pCanJ*WK6EA@MYkGbb>vkWiWwe5tVS6_pA$X zv3CCE+aII|FH!l0*8zr!HPl8%N^EGLW<@>yy0MlsbSG8lw!R9w-uuMojIkyNpTEt( zLGnFag#Bm}^@#!FZjmH)&|ITLJ7q>*dDE1P^y7&3pbG$+O-193r`Ix@1iIGWG->ps(YSd_tg-oa|i(hzbN_sU)9$V;LV1f%=%&eGa^g`4n(wsFXMewQBp54?^ymZwV@*Ah7I^-c$AA5=X z;pch+_M&d)UmWpp)^Om;%`{yGWr3MRdgZS~a0khg5WB>yV7tx*l*T%Sr5;wV0hFax zu^^lB?qR2%zACY)`Ae9>N~*A7wVPuW5kG5_WXA>dbxdjpvC68&yx-Nw>@df|;fpxu z$BCW&RnPvS!}=K}M@bJlr0mW<1lEkcJtbA|BFHBFm(%#)p6pL?1<2 z@Eb!|@nK(fYbGf&>|Z_F>Q&@LjdY!2ktBRb(Jn`@;L4j?u*a?!T-P45?jQz`JC{LK zoRZVJ(mNl|xQP)h@aVum#bRsD?dYkp;nzymXBAE$;^cnV{Z+3sUS)60skn=lG+(5n z?#KONyt_u!R=us=7Q|x@W!W>25Ov&8F4zxqS!KGRli1?ZV`eov?C|cCQovoa zHx!FGL}6zPJNyCm9+jYXV@{fRxhs+k>OO)>((fOUXCSm(ogF8GZ$B#}Y^_MEm9ESmA} z%WlBSeIl1i;_#Wj6f{(bi*%dWvjM{WW|wggKVtH!Y26k=@MQ>H>ix}*4WjfhA82x1 zNb*q>V{d{7BIC|74;U(kT-kwzh81O%q^r{U%!zAQ$Lm=xih-vmB-VpeCt1C#MUT6o z-Vb7LPd!m$t$a`s&`PPnt`O#ZBq9?Yx=7vRpcp=hK;0hJpxl_SUs};l81EJ@;L$QA zqfi-o(86b$^nwmxwrBfjnw$nYx5svhCP$@)^y$LPmh(=JW=1Dx$JWcalVRpKY%jjXBZ4_m7Y!XW@t+yI?Di+=-vZE<*upT3w%El{=8;)4$g&j zf4YHPUf_SztX8BdoOB+$ifa58pY`F|TO1@;;R$@>WllFt&1z@R#}+)DWB?B zWJ=Yw0KKZ!xiSSgv4z0jw_$p7eLC!ycstI1_lK$C))Bny8@7fA6pl`+NIm z@mAM@6b0sKd{~}zlJi|frqJj|jI$rPA=>aT+;9rr6E3kSiY6}E{QSqDX5zR4H)`Y1 zMhsX;{H283G7mSI_b=P#*sBw>1+S9OxHoQfhL2xYqSdrtaGdWb&|@1+vVA<+mM7?? z7u0jp+j^NJl3oeVKnsbJLl(&waAg3^tMl(y4^zPr;d`|qw~8;nG82sOeYS9*x{Q`n z+T@6~1XKgnQWypycqN8Y{ATRkDwWq5vaOg@vy5W=#3kgF<+M{4HOl!>^k9ii{-hNt z``O4dkA5vb3P+!lusuN)=UB^JTXl)eRKWv8K($duBcfn0Hc|LxJ)efM3{HrG6wjw> z)y{m4_4Y8fn78wIx%Xh@r;|Vx9CAi3e)dr{^$=-m!|t;wea^JRpa$(3jo&`$8&pz|y4NAdy*#KHSKF%)GlE8)gMq@7C8N3?3qL#N67H6WYAjVoq$Ry%Q8Dh{S!oy9M z5*F{3v@d`$4TGE6jrcapUq$MN$`C+f@a_oa(FR#lVu-wVT!BT{qtpY*wZkE;k9JoT zXyC!FA0GB~J8Locq_-ra{XYuZumB$LDP-1Iy9>mN=Z9AqS8ejX?&{-8Vj*{9kl&J{ zU0!q`wlJFZ9}+=qzL=z<%tOY+&^n+Nm-2^`xxH<-~Q6>-u;DqJ@8H^{_q+O z;*rXy;rq)@W8Jmv>GyxEhMg73;{a5KpZG0@>l$Y@)wQhTZY;Y{co>*r_Cc6l$5{%z zd;?M3uA?xf6!}y60vwjWOJR{?tL8z+lIXU9^%$Q6G_Sx}-(0q<5e?X3;9XpVCrv(1 zR#Psa(e3U-9E4U^MCuHjm0cmK-%$kT&%laXSh?&jA)hSz8&(DVqPzgU)Q?(6z_ znK?_fwEOU;pmnsVU#@irrb~&k7n8<&>pY%-epbCj#O2T1;{-j*-5-?5ZTU_e?&ZL0 zg3$hoL*ZZ9r|s9V3h!nmw7vaRL47Kk3U;E>_yTvKs)bqivJ0W zrR%vbNn(xPzM);+yB*^?7FXAKKb>{uT_5Kq$Qrc~M<$OD^w2>27OvR0Zra;Sx9L^V zufQm`O6q(u5i{z(p+9GmrH~=r6`^J9`k!QG{yZM-OFt-_#2egD){zmSh$nc83+b|` zNSZhPD-JQDKo>PsoHXLDd>omZ1uL zNK%%>eRmP5#(5VIzpvD@fgICPQpBR0Xh%;;{~h+6KRt{6&QP$OnZAACT<*#%>If;I z%uHEct1vq^dV%#C79fc+w15Erm08%&+~OYQM?gw)mKbG9E`HR*pncm4R2OlempThy zZsgp&b!SOt+8CgWtuIF4W^76SuI+Q0lFgPe6^)ch4h21|^zq~gMNgE6S#DCsM;odc z)UjXi*a)LhexNEo${QX^SI|^}f-!0JSYxNAzNLh4Z`Ithwq4UjNXa}u-lXXf113fm z+VZ!>67A*6dG;$0bDi38w6X9qOx?X71?hl@O3O-B=JlT&3-L51 z{$Wgl0pzk@7B;!hNxi&;I9)gN&pu>^sqnniL60WcC37;0{^*eOrZ7Et^XJtqW8uG;U+jCZkM>TFAE1x*e3ORYbLUsxZV2^X(B?NKCOecWl* za?{>-;C*MH7DlD;*?>b>Gpk@i-ac3;WD!^95U3GMfG_uR)akZRTWt2i!U8e;GQ{I; zWM}6;f8%h3Y~*#{8EQ7aVAIlecHDUID<$(# zx^ft7l=j|xGKnHzf;gDO41j|)yR$cI;r7et*q#}4VyErw3Jv~9HHyRmNmi{}+?(0oI&5<4IQUt;PwMCJln^L_VEApK{Q*{ga!}{lB|wyk zG^rZK-)mypqO>7!Gp#CyN8xl5KU3NYl~Z`QSVqJ2)J!E6@wB>CG>dIZNKoWUwq)@} z+F~Y7*1!uGbnCTUapN7Z>HA0>&&duQ4fgd&fF+~)+xom>XBVg2hD>?!2jQg!pzZKk z!sQOGgl)Gi!n_&FXJf*S!mYSKNqm#V!;M|kJ(||p;E=zX(;L<4dG?!E)CrcS8VKs- zvTpwM5UdYc?@GJgW%Dl-fuBrLM)eDH4lx`xn8Ol?`=&t=`uiSrjP#vbN8*puO)To`3C7P-5-;ZVFn?(g@# zkcHpI?LW8~_4zFX6(^+&i>f^*e{jhyQQEM1u)5zyJzbr!Q)P7qY^C9JGSYgUr6V%R zdK(ERPC<)bV=xkc%9w^!nUF3PP~TN<{!awhYMqu*8VU%=73aTBbQ=c)ng1N(rE1AJ zY>MObeP|$Q(lvnNw8}5-03?^lHgC%8w@2R_wn52b&4$n_ODD>1q~ffEoQ`5+BwMW| zX<}PVIu$XR=pj*7-$b(Z{ny;X2yvE3Bl%thXCG%im~VRs4+SLswX}Rc_iUt6TYJb) z6I<#kEUl=!iL)z{*X-7kg|voDvhmcV#?u^|$Ap@@%%`H%-BD3p<2Wo2I)+hv*zhOFa8Hb|sWUnu5S>2b zgR*-5=4PBlRG)oU96AIrR-R%al`+452pB4saUX0qFCl=J6%e`~lD5$miT z56JRqeqxwqs!-jvBg+vLv}?$c%r0OIck$PUky@@-yL|deFE>`Xt~paxvt1lv?uFS< z6+Y_*1G?B@NqZM8N%1~Z#LKn1q-K^6W*cmX3GK$2BD1pXG2y;l@0`I?e)R?dN5K0u44ovAi{ zzGBd6*9f}CULLQ186AK47F_Tj;-1kaA!gwTP+A7R3c)s#^L?>K0>X?d{GB|p>T9?tfx#;fB&r+*)r|@|jubGE(SPa?_FG9n-D#*2Z*dhqLvuxkl~@ptXt@O^ zd${s--gw(QX|4v?qQUDKysY*I?v~spz)^4J6y+`P-c^P>##<*Onb=ILL=*aag_4bI z;8m5!3dB$Zq z-|QUFsh;bHu*@f_%zf$Pgc|clD<<)HP5t;V2v88Pkik#0OQwDcExwy1=cX%bevv=O zWZod_!fC@7lhsqqkvHOCqqhFalewQV&tcUjgO)X>K3)t{rXyyJAiGi>^lO4Vz7Zuk zbZPpKjxoU4C+0tKx`E+(YB+Vef#$mZoi&aqeAy8Af{RSXS5Q=Fc`~ysmOF*h#y+u_ zID^;qSHXz(MJeV{a^6&R1aQwOK#*_(nbm^Y(4YN)!qV4jI{ay+ZKb^_rD?D<$2k)P z4W;19&N=H34Q1egE|#;0a;L#U4qla1U%JU%z`k)qR>+TV(TfS}>a#PT_p5NLe@d+M z$Y#6K36~SeC-N#aHJ?r`a?RUV)!L@#7WWP>l4!tSXSlqM8}Oo*1grDsh; z!0rkL!iK^q0?QYJ;M`%LVzuy1=zzW9=Z6TP^|RqL>C-Bo2hj?#u)ju9;tz zK}-*nXJEzMZ~?!CSi79#9TChwd4KBR*D$^B2eG|g00#ca(Ug%$aDryaY^=roV-ch6 zQ|)z)^tby#KD6FfvpyZk@OTVvhgLD8;!g*D+s_kcJB-*);t>tl=o+a{8-0M2)wd%MBzhoIw+SQU7R<}ZfG~+J{bC$P zzL$KsHKC(8;l%)66?@ui1y<^6rilNX#4Z>kH!V?$@|fxj5Owj{HBOO>M>4<7+7KdY!Gaq*=eJNnGL zwE=x2qlOoM+4`>bm0}?oVF!)W%S%!6g|$Cx!*?CoJ*^jJ=(+r%!2Ie%TbVLlEVW>F zgJ{`(__N3}$EpXyog95Mk_v=h5NkO>?7F=M;|bY3n8sSt7J zt_eXV#B&_yDZ|N`5J~R*(84quPjmqm#EPQ?QQ<#SI^(Trt8S z_xQp?okXAQ;_jHg%9|6e8n(@Gt0=+R4sQTpl1d`k5H^F4c<(>|TUy4tYc^Z{O9UMK zcNU2)z(Dptw*{#hv&x6!NPQpF6y53DRrJ=xl~a?DZdy>lL9nP?W!mbS_H0>7v+O3z`*#kM#-OYxva#}`;M6%-89Yt|2?bEg(o9z9b(zU_ z_R#ta3rE7!ufZ9X$8cghR*yoaD1$|JS~J>_`4GXG<-HThF;cV7aN5_iVAqaU1ILvZ z8kW6{g5(V1+&vs6x~(}$DR!$7$F_}<^osY#Z+9)bR|Uc(c|FS5-Xu;j28PQ`2q8~ zqgkXK``8%=%molfOlIM-D1dQ-Bt^&w0wdkty@{rw*@lm;~f^z6p}OrQG9faS*GsNLNjJ8`D&dK{9@Ok z=C*Aj~!4(@J z2heK~dLekF%P)2ikfXf?sGEx7pN}~#(e}3{(@89MS(p6G8}cU^!kjk!(XFzOKDqu2 zqxDTCkRPWE&onMxP_LyZOb<(5zL=Vu|BtV8?9MFg(ruhn%!+N>HlEnFZQHhO+qNsV zor-Or>eKzD`@{Pi_89kA>)Lb8D;u$!hKJ)K8w=AXEJCZ3>6I5}LyN9OEZ`2t9T#s{ z8XFQu$^{L2qu6IffuupX+At0!{%#>xmuS?=QK#95p8wd=R?R{0@2@nsrs|LT*h`RT}DseWEst zaCRSUv~-X=q{af6NF)L!vx}^KFGJ6xNG#@Lv_voIuPDlF%MO@E>EL3MyvRL(EG-z1 z!uN=@(o%%4%-p`0UrI&oR`-7R3?i&cz-)gTDP3YVE@3mdUy?kQZlz6xA*P}(0(ob# z+NfNtR^8o8juYxPPL45eIuXt7;osGPZhB3&Ucb1#5>P^e@9W}+Z;)%Gc^CPhjrUXsi=sFs2%B`S6=Fu4Q z0?AXVbke@WNhwiYc2G?G5osnp8Ty^(VqNQw9HQKK+o63==7GLc;lH`Tr>m0`9$xNH4Qc$c}gosjWf!x93vnZtPF}A_u zVj!N8eAujbs*i%=d1!iZBGg95P4n{~w{9e~uK&{hnCs#nYO#X_2a7*Yl4_`i)!12f z^IAre4OiTxE>zaeghP-tvMNkD*cF8#iG{w}szQYC;|mKJ$JVKYK_@&8$Qfk4oY;I~ zlYv0606(yD<^(--mZ+(Tjrk6pe=Oc~OD z!e%L=>ShO_d67-TO6F547I-D8JZ$w3v_3_l2oQj#oo;%Q z?wbW<+ijik9u&!tB8kOe0~sW8QZzyv$(_XrUzU$oIE*SzL!g;MV3sSuLkF3_tJ{3T zim@2Li;))!X_ga#sV+$p&~4HG3As%prAEQPA|h(40m@LsBsLuQ=;hJ{e*(#gI_r$D zgLfsY7t3V^($FFk{k}%afB7S07yOmbrg_u0w%_U=aBy&B3YO{-oM3fTt2^1?cZxFJ z&{KiDR$Z}im*kImCLGx(a$x#oW$jzbwebSj7Wmn$%Vc*QFdB#fVspef%c_N0sp*YiwIh(?zc(v@QLOa*w0d6~Zf!-<$SY^$% zNSdVl$YE?#X~Zg=7E>3QZ~p~O^(ZqeUmsbza}!n-)RurnaT!9n5uL!6s#Sy zBvdSM8aEJyQQka8gLs5R1VQ&GENSAv(Jp!%?>g@VrX4tAxDtKA0B0z>?4;mdM^)(L z>rBeAhparpf8U7eQSJIt-<$EHY{`WSaUXTt>1FI+tdX@woSCdMKth`2V)(WoT85vj z&78!XoSI!1!uJFPtranao?3-k2A%p#E)X^ADRZXt5ek}+rZDwaLrp`)PzREij)BrB z8ochl6qONmyyI|0IiDiWXhX9rij!557BQdD3k#pABmyrJ*l|K`JdS%{wa9w)^n_}zvl_tyC6KBb@_Z;B z#RQ6eqf}t$R_QZ{Q2*3+pJF&v?#tLYNM#4!wx)=N0WVnFu?{-Mo zV(VZMSH3}3@f|hq*GQ)hijb;lYYcZ@u0f^OP-vOg(mT{q!e018mTveH`68H;=EOb_ zd7w~BH;iYOy*W+aI{PL+JSw03O<#{&m57Nb;qO3mKINj@-@m(>0hIW=OR5+C`4S$s zx8Xi)TRKZ5lmaJ|j>NYi5k{mSX1`RGfDy8;!Z*rf_ZR=1`gz?%cRNb&XTDPp;rf92 zm?(2?t%~>C32R{s8HpzA5_%#)+HxGWn7V0l^GCk_T+;Hh>M z{oTvmWI~n6ct2nS=09jYjQpVEj?LQ&9#eVt@y6*p*+0Am)w;`9)bXf3p?mUB=E^n$ zCvqT20j@(<({LD`HR)G&J#fj3sfGjNCK4iH=E^NwC<)?wW-@kCr>!QJFCVR>|GrZf ztzn-MY&m=M9z)4(Eqg8H?DnBiPFWtq*-LMRDn@9|ry7hIUwr+$5ksxOJ!*T=U=dT| zcOfv)*PT6`t=zt?a5Eh-oP&~7D=E(`wpvUI3pf7$_YNqL^!=0po{tCEm&Fwq1tCj0 z-&RnXHZNa^lR09HgU+cym_zyQvF~tL=b<&Jmt8dAqcn|QT~M%r*Wpi!4>3n{QdRJk zh5-7U81>^or%y!jBgvMMm}T^nK@c<{tq$rlgHDU(nm7V7*E+8fpBl>?bOT00uG*ht zAZOA*s1Nq%Ml1x!Y(=jo$dV{KjVM|O&qB9H91(q9qNZ%k{=-{6_CnuRGjHG1_58PNh5YKq@Y;)RDUGs-|L1iz&o3QjEku9BIp$U^{Qd-~ z{&;M^sxV>BZBX(yGNf)s%yAd~WGV~DDI)Es2lYwc6p*uD90E}bss z_SJE1JYQzCwuaf!@jF^`^HT_ofz~w&Y>`*{_H>QLP$f9CS_>{{hF5Tx@_xwFic>e+ zuvad2{{1cS$c~_XGSc5~6?0`|=wBxA1$>11o)sZnJOy%L8&kpT3f=lL0+(DbHeU9+RR_Y8K=g<5nJIpMYoEbGyDr$5 zHl-gg{yk++ik`>Zbj-!9kdn|2%4000tk#p?ni*K;2Eb@5-bmWUoqZ)EOde%`(Ia(|0QM#`FD zkzpfPY-FnX>ca^^dBaQ{)xmPB)3gV~%IdZ1r~V#}F~&V|8+SWWUF|eeES<_k7}xv^ z9PU)B1nB??eUW{H${9hd{~8hXH<$cnWNPI9M_@hRpqvcG2Qr%hF2!Z4x*E}_^q^YF zF>pH}QIeVLY*lGfVA!{Qpt;OBb(3T#brs_1uE@qfz;kB^+rubMY8lvz&v!5OnL(d~ zRRpL4S}yh&%B*q{hbli(oscHFL(9Rt@2EVRU~CUM4qs8X5E4=7io6=_!Rti=ErQ%N ztF7_`*xrgG%eN>n@6YFQUv!UKIHRK52JHkKel`PaD6{{j6hAwTwUn7yvv5RmA}Lo1eC2)0ka0_09Zn!W6KDc zYy+I^&V(#Lwb2qNO?vUc(4gHPJM=g;d||7z0@dGcEwPd{WY99dIkXlr3|&kEFb;PC zMuH)8z#d|=Pq*qUxWG)~9~f)Df63fL+3;QTj(6*f+pq%5#=Zoc1UD#+po-P3EoA*x zG8p(isuS9&#KNLv?TM=c)bJ;d(3o3rD{YVh{-wY^vPf)!q}6Q2g*+>tK4s}=s_$R0 zN;A_Bqs|TL+X+J!>yA9_#TIXTh+$VBLmwifK=6Xn!)W;LDa*RUfc*U(vK4e>KhXaj zm+@5HK$ia_F{b}BiD7T8C;#7jXpGvl<0jjG#bs*~tVQf|gx>(>2CHS;b4)!hg8IZ2 zFklF>etg6m8MQY6_a@??NdEJj&DvEgiu-cpAiZ6a~9BpfvRq10y!nWf2_ z`cX%YVYK8L}U5;&4GbPUo-IE4F4X4r_TkYfO@>0CaX^nB@n(g87a}N*$V=|ybs6Dxbb$_CHf?rJ-=AuuL?Y$o zz-_8+-=8Nv{}f}$t3BbF)y{Kv4bY|s;zx`8As}kNxRQq6!o=T`=Ki1;{b=@BL~(~h zfE3arK)fj4H8w2#w^IZUjAy1_ayn%@x>Qyv*#&$&a&F-ubA1{7k#qyj-_`Np zdC371Rcok@e#XJm!q|tD6_6z_{ZRl#U@V+6DvIMjHO0yfqhKDA9GwC~sGo5$Cu@XQ z5&Md*U!d_ciMwdpAcnUve5;at0L`i;sE>3IpGzer#24CkrB|pPD_@542}C5c9>NR> zt`3O7B=yrqnYBT)?&z7EiSRo?4#N(~XhwLkKOIjx5w?MNPG}(S@?p=dx{gcjOCsLk z&uIv+3=}jzvu)u_*`30zkn7*cV+b1` z1a>xYPARg`v&eaYLk7Y!-@!8TG3ETT!?*L)S}C#0)a|PEV}PRzvG|L^j?!o>lMDVn z$KR_c@9nWJ2|#i7&1F&DhF?#pM`DmcPl}q%46IhfD&nkqfJt#q!)V64N+=$)b@uSJ z|D6%~nesckJ5>P{t#esp`xTjmmDrVuY{`=Df{5qkarby!Pjt=x#sI9#kg5zsj@A6D zp-E7aRuXr(7HdaPlTH%1#3IP1;2LGUg|6EljQ6%bFW}TY*sl1I7_nMr`fccdz<;!f zuGFzzOim7rup3hftQXjCX5-9OV%~$d@^t+4_I~?epBF>&w5u)J&3}aq;MT!;jfoKk z>BU+u8UiCKsZduD%BGsh3`Jsrkt0@~?eIQ?t7rXOKk?*MV_rq^>@#tS(j;dsK_ZZ)DGr9_@Qy06f0NP~`qoV6cc7tfw zclGII^}ljEhuRFQeo#Co?7JugVt!UKBuMt^F$wt-HQ)(T6FH*qM{UUO?*Gl z8ET+v?z8W1BqnY(n|1SEEjmlqmy?ajAK2b1sHMT$4UAdw^qt{SKI?*bGWOy4tF&of z;k7yR>NM7HTN4_qR8ohd)-<^~xea&=s-+O5xKAshwHsD1llChoJJ2w-cpI$@*cAJ?gooTrR(N_A&aT?X z#l_E3H$^D{4HQp33@{eWny6eT6CE_gXw~J+xfZI9L+eq|I^G`}u@XWC(PJg5ZiDIu z$UhYuU&2k&^-7j0pKx9ZxQ28qV(9E#v$oZ}3I}{1e=yZlZ8^Amy>CMHq|dltzC3yg zu+QOg6z$;J&Z;hOJLfvsqEu!UH;)#esy4}6Bx3Wv1z+|R-p5rMleJm1 zWA@|R^K;!l1fWv9f0Lo?OVY7xZMw{)auDCFn(`?-f^zBOyunTFxXKd}>Di6W4 z2^f~1+f5HCR&E|isa?HnBzN>Dg_SZBGbJ`5zP0{CHbW>$$WO^_@OUG6R$nF@24cpa z=I1s4b}*2($#-iOckG242WLXcJjN_hFR^V$Dp<+lD?3VCaUa;WB*8>V!WKlr;i4KY$Q>gPx*RH zT{Aw-Kjmj`vF zcPZy;r}WI7oL)3n9mli3>RespM9Bx9%@?IJ=`w_?_}UtvetS11I3cFggFc3!MH?{U z1QGXGp?j9keUe%L9HGu2+vnt7_o*=F!qbo0vd&K1n$zSOb1I-!KJwl~ z9p$D)xUaQ>M$;BNrRE5xB=AUWWxmn#WatCrn|`EwADoA2*3W)Q$`10kg?}$gO-mJZ<0^BX$w5DN6v}tcF{X3_e%00~|nVD(S7M&;Qxckaz zfnyt#hPWPuirZLc-e?g|iZ^oky->CdbhJemGl9q+8Jka%n0}Y$Y;HYHt+}Wel?5$W!w$3Gf`AriLths;T!2-uDPqX@bI- zF}97VCEHLdhCSuyoM3%_Xyu6#ax+05QJ>qthSBn%T2lI@iY|RLScBfN(1Ohgw93=Q zOiWRusZeX6rHkVM#FZT8TB*!B78bZaE=2G~0K-ceP^}j|U3>q=ByRF_W;Zt!m4@1gt$U$vcyAV0m<6f zg2d-6muH&fOYvjL&q2ahit+Jv5W@vj!1pUJrDL$pC2{nym9VTqut&yr?mUpSsOdIi%WfTP?5Z> z?h#^3FHn@tI`qi()byB&_nZM}ToLCwaZ!XV9xdSKd6k|K5=$c7@e~%lc^g<4$bc}K z_`x{|LVSs`@L^p(pM)!Jn3?4~|XGfUy7Armo_yHDQ6wRIzhY*~%hh9{!_6~EljHWIRtctBs zb!RYNJBpXcqaZ+wWNmDQt2=TN?H~hho=WptvfY6A;_%lN(&sT2fUeC#_dfIM_{E&b zuiWWnoQS)wkY?SXlVE|-+(e2*H6muI8SqRAt6A3s$>0RoCo>oa} zl%H=x=pofQapR#J2mYJ_6O*4N;CxhGB5ZUVw>GgcxiI*-p!~wGWO7!TBZ{YrxGdJK z^ODeW&!_WI@;|}2$8D_26*?{KcYKbSn!1LG-8I$N(oqP$w2jebJ^%zzWYF>cjlSp! z6Dh{gVoiO>?hPZ07+>QNiy?PR0l)!H2F^P3yYFx1Lt%(iPD{Z$hy|eooi~n)U1;1t6XHCif@CNks|GnK2u*!V@~P%M4iiIbs%r!#xkT0 zBCnqKO}H6mQl?BG^3JK1SXBklgZVVz1p*nvIq2xOe-sb4M!}dLPxHER@5GebK49@u8Y*kxruEh``?r7m;X5+Xs>amM;-3Cjf+mk( zsd0sC&0M1N(yv0ZyXfL1Yxa)K|1+UH!X1**_seI(_a(2I!^7rBs{`6ZRIEB*S!cV)ow?F@NI^OL$&J5C z`5rSu62-=G@q(LV)>#jd*;zJ565T#kx#-!KU=))13(Ckk-)Fd6V^2B6ljMK|UrB_- z40DWft0?1g33FItly4Lb!<*2zvV+osWcA4udGCpN?lyAA%Of_jMc53VXouQ zJf)O6Vn=en+PObV{lV}BrS$Fx#lrE7J8Jujs0@|KsATBa^_jV0!}*`y=o(%!d+K^Q z$}hq;x>b8`LX8Nm1Q%}~so4qo8k`6HQ+vp8oWNDj`%`zuw6i97dfh>UF{j;0O?X~s z!r_JG4gRF5HX#&nm^=Zu9WEq>Gm*?t(>#zjgi9N5S`yLKUj#!rQ(9+m;JdMzuAbWl z1!C?}Aa7<|X#5Fy8*=$Rg!*hXQE%&?8InjnB{u{^1Jdr$}~FXC`{{ z1n`JB4WLFn4sa@=n_c-DS_K5>jdQ3YC?H6kfTbtRsJI;<6>`_8_o5IdC>j3z{KY&C zBAPFELQd!-6JKOkbYuMu^GMq$6-ohZyT|@fpqt5j>A~=N`!mL`SfEKf}d?t zpHpv^F7CPK^d5=RH1qjASgo@BYe!3~_rv?s*B9>>*0GB6+}QeiXMsqM`LV8d2&18E z3Jfe2$s`Uj@sTTYH;NomfL*)t?J>4G?Z?%HE!gkUSFOp$8|TiCjCrrvOWT)+sx3qiMBZX9 z32ZlVGNJ4Xy7;)XRwawWkt!|fSO$yOO)SeTQr9IhaWDyXB9@mN=Z!O|3%>M;AFqlt zz;y#AA>Xe~rTmnw_sz9Xo{^NuOj0J!wvS@Thb(1-n&3RMUAH2Kb51%{%_C8tVVbd^ za0; zmMp2SjJ#9TRBOq>ymib(rTt=K6JyGMhfp0AG9WC_^_%vNOH&;JQYxgxG;)Nx6$q>U zOJVenw^Q~KLAI**9R_1)Mj`T{cJpH|HrlEj-aJ+D2zP8~BZzL2p~F9L1No>@ zv_itw)8il$NzS6>@2h5a7VarfIj(NX!4=GDFo<#TYxn%ks>x$Y`hDE^&tv4+^w;!Xi#W0(NXQHtEUnd zw|b2ak)R5prRY;$@rlt(naAXHNJBzpPN7bzQhtPT$JV!K1gD4o8?)Rt4_>UkKsWps zWNnBTYuf$cFx55W?@n5S!aEY0+VxmXi_cj0Czw|-{vi2)ctz2(L|a z{PB&H*0LDcR7dGlJjdKICXcWE8VIMasdY0G@CRrRl=V+cYw9U9{D@%%axWv5P@fBMozBnW&?+LQIWqR;V-xcw%M;(d&Qb zeIF2FeyfwRK!PxehS&F-&b5-6MYhU4=_*x&D!y_V3{Sx<6?YtR8$W3}G zhQcWjlla`9dj7U*1YAnj)jtpt->(~CoP^_!cN{V%zgYFs z-)xWiACYa&WH((7WRHw_D#!70#rC4fS)zjf`8AuI=1{Z=r9p(R7}x(thy+=;+F$fR zK~tCmLT~xDJvU@A2FFAY;9fMMxUhu;Q0dBRI*kke((O49LK~zRCV8Hpy$sANNS=(A zsS9dTa)tnXfRQK*e@F4bgqvkEwlbcieJ@$G{nU%3-B?3=w7wTv?Wz-QU_V6`l-0DN zfPOYvihpWYvGcwKgPBY<-hA(vp%bYY$|V3BK(#oXB`?>2zY~v@^lYwM;KSvXu3I_^ z6kpkTQ|{YBzntC5#2>;VI;1j)`YSP$(_uIL2{_~M&nFolL4qvr#>ZCN-fN-S&&-sl z5?97_QX$U*p03f*%pgD#yJnRVEBK>tvI%ACXTY7fpXn-M1UTmb!V)GIh|-wcKWNIM zYDpIToFRa!KYYJXtkSYZ&F~d4M8>zmI8f~mcTdQ_l<|muNB+17HoRawFLJ5*o!vwP zH87Z5+8RM~h@G+2%7QcTF0w9ePq-rvIn&F?289SDU9dJ5qMqb5Mm%!8I3%wN!l?Kx zwzncX%sUkH+a{h~F@fan>n}2+7M5Qyfc_7>+DY`VrwXw8GitbA0Av&r-!j^>kvFxz zibR-IK}Ux%<7my2_6;^=xpClJ9=@o?q;&yq`Btj(HH;12U#~0e7%z z!X*>oxWfw$EiNUA@?`l8Q3WYIR!2BmoQwcfr2J_cvixR(f@4zKV)1z{r~3-eiDn(E<29_^kCK1!irzz}XCU=NzHr7;)SRoltjSPd=}WQVgH zCKyxd?gl6M&`|8%-W`4`bVAzy2Yfl5`w`8wI_oTmZr$0Y4EvQ;L})x0zz?Unazn8q z)@rH>?@HYvC0*peHZE{F&uTEy#c-~j0Wm+)VC#UWC}+eu>FQWe@7cPzB)1r{!tC>I z-nE~Me!s*=gz$jnXj$RE6(#>}UR-vDEA6f@S()&ge=0s6UU~rxdJZ|B?B4}|<=jCJ zpLF75N&)FZt65?-p!nT6n@N$6Uv{G6=-ZrsX;4)zDd;OBD~vg4fO=H2oPdGYi4MRW zIoow&LMv8}Q_K+TbS+B_1EaNk1$lI^tF)cE$%|S94X3|;_iTg> zG=EZZRCBOEk42A{0%fE`QafUB8bc1tAn!pc{CAzmKB+)ftnl59KA>mI;?Mkwm8|Dc zE~!n0?6l)AtD#>*uy-1&@fI@E{-4i?2KotFL}d<6%Dg$&XLQ!YaSoOG;%zK9F}W#H zZ53LHZnjFZ3QsRCfHw;bs`OwDGVCdN3NslVrY0z#rnyAjNTC#`;IzQPz{=hrG_u7F0`S=Ntzqy$NPL@$|)%i49C4Y4W+nb zTWWlYZ9~pQopZI{IA5%|*)lL#&lJbR6MO?O!`yzT>;(8`Dp!$rYTR~G%qn1mtH9dI z#_RBi5*@H3O|IBDahNE9X@S5Zgc) z(rEiIG(OlA8Ar*o-^R6Br!4-ip-V%Z!(TVN`ua<_iXyv_h5WWBMjJC51bGJ6B)ofh z^bo}|^w$(JrQ}bR%RwFJ3EV~iUOnoV{T(Cvr=x^BS~9G6qPmBrRcRdHjBxwg(e6&u z;ax|Y^%lvFG^8Ls9`He{E8tPY~25b;HzB_4R;jZREO;z%fT zTQF;N^V_D-RB3*hY_V&B0lF@FUK!tdmj%6GZ6W8Nq7j)JT+5G`XnkAyyjJ?lJ-ZT& zYE`$tuo^+CU0JiFKCgCCUCD=aQd;wyVxVV_iTEuzr9py{xuw)c0p3my{E)`Co6Va; zpIClQvWr@I0fGUBy@%XdxzqR*9d>s~swMLlU%wFt%jW3n5_4BrCx$Ppc^w{QMV{as4C(xQB&5^O4D_8EAwjPA@Rv6xfUX8T+unbm{?;5!+! z@B0~};Pz1ZGMjliOGM=llhDc7R)Kxjc?&L&O5H?$W1r{mnt?z~hTwRWWIpGJ?>5|| z2QliYX))Kp@!u?G>)rlBW}?gV(NY*^k=&U$I1+6yWC70t@7 zlK0xG8wZkI4sox0-*Ijb;AX)UytB*yB~nYN>v^zhGJ8^g4NoE7OtASCT@l^DIVtv5qfxZJY54S3tH3U#Md?t?&Xlms01FkLld%`IbV*@Xz*vmf zWrlu(p48#{NB0mAO97Rv#YY1xI}qE|cBjWwuR}hbk_RY8AVY>=GJ}jk(_ScPy|-tF zDK?4dGNvo!5;k7ou9@^!;J7T~HG%2y5En(QuG*J%w?IJdXs8<>QD=WWUC)g&e$J|U zfv}i)6dJWH+2$3eV%Jligt@Z|lYnnHo>~P{svX6Noy*1xmG&{dm{i!jJ~1b)I1*e4 z&BP(#9nP-ukzp7cxwQA+>t-^(8KwfO2+#f52R{|YaqzGSBy8MHJU`;)Jyx2H$G1xn z3GCPGUdaO1^8$-4ak?88ewLFF7D}sx2=0sHPe2Cb5&i06LmE8eNr5~Kv=JHm{NTKy zdE@W6U=6wZdk^GUZ&u`s%m?^@e8&Y<6}<5c-39z>l?>aL&|t1BriKmX4F@RsXtK6N zLatC1Y5kKCrm?)l>WOrl6*1)nsmbh%f`z2@F8}iJwj?q&aJHAYcfFllx&vTKN;JL`4e;MkRW$f(dodGLJs%qv|f zw4!`D7_05F&mm{GMVcw!rjr9apnqhyHjbY3JRN0of%e7Ozr*ABtDGFj7uTWU6#RAn zd$Y{yVLG?xv1P$CAJu42G9t2d56gA`B6i>0%q4iuTKHNog<&z9ndsf=q8nKbH1(wm zLzekWDuZ|MueEo5^zE%R+lws>9uZ!w*6RmYPskm+v*&jLU0K#WqV2Bd{c^5CEuBsX z1I{tXJi>5?ihFFcW|V;dyKr|~C09B7Z<(Gu^Ng*I-A1}oGbiPXgT;zaEfXex>!q{oqW}76OJc=Kq*v(Ye|iY{*i=-y|5=sx_XB(b zU%5Ew{k=RE34*SrbK4j3PStfC5edD`1;oiBjw)=Al>~@agpQRL8W3e3yV$oW67p_t zD0GmKw!c$~Tb*g+nDAB?|1a6mz5i=L01XHTR_;G?xQ;G*ivQhD)1s~Av^ARIdr~Jr zRWcdHBIWvGqOxzR(Mam0MrU=r^lnn6z9;PzjtEMC;m@MuyC=$)l1P*pnN*Id5m`cV zA5|5KN?(NOsD7*m^jVY*06o11W?7M9^I}r@=CSxx>~b^ zv6^rg+1fI^Y_Bmjrx%S8-G$e3`x52vJY-Q5;mGsOx+E`hCjPQnkb^iDwj0Y4Mf%>b zt(_v*E5n|k-~>vXJ}QsggJ(cwbf@PG%`e`Ft) z^jm;k_0b;mZiMVFYd3s-q1cx4ymbm5J~sZj;=DRG=X(RZ6MP{<*eSz(&fOt?b7MS+ zcBWjHU>_gaZWus9exsT065vrm^xB106;gvUfy90=_=2?I(|=SAUajqT-;-mwWx_f{ z`M-AyQ8+AVk7DMQbP)_=Ip~ccM4+qVPzm(qCSkw2jeh*HHe)@xi5z#`64MWJ6$g@W z25HeYkLavmgKJEMI$h3{_fnBPW1wt95 zgl#r$a>Mj)YKDJ;%T*_!);K3Ep@sZFe0!hF zKqg)=XVdw_caO}L4nfEdhf)G*5v8}Udvo4vFS>ozH=HKoyT@?lX74Y43ev<|UbC2QV+? zLB>K3e!^%(z~c@Z>_I=G`nWTZd_N);_+NQR*%~M%4Qw=`{7R<$=jnFWX|F}tcoaum zM}&pRn-UDR7sXgR_39B@L~{+_y6*Rs2ZoTG#R&8(IGx{%uVdC^HSgq{8PU^E!wb3@ z9%I1qehy5&lO<nE^-iu#kbevpX*oygA>&wh$U$R)470pa%}Kn%tB%(}t%s;UlurHyAV zKiW5KE$Y(Hzn9iOTXa{ERlAF3Z3XHq*=+H)w22jvU56C>UAc%1)Bdte!-Q*?DB^^x ze?+(bu2?PqNfwGjGDMUm4kM@_9k&4eQ7CG-s0H0!ZU z{Mx-KR|@M^8EN-6rhlfX@uRR)Q3b|H#7i_JNNKM?ngZ9D>C}eSqp&Dhs{o1hmPPO1 z@r|DX2n^;a(qKCz2bb|En(+b7zYZ4rpF6?qlCT#(dqrpLfJS|i*F^>UOBwUL!3Tnv z!v|1ZRp!LuO{(clfOsZ79KTu@t=I5g_sGx5Pi=GkhkS^}T=w$j8g!(F2tM`I1M&Y& z@DFUHBz}eUf!xM?cATzbV`sgAz-8^2qd>sf8{u~(oB^aciO{%GY&?(C`s26wU>QY6 zw8pM)L8FD+E}0n2UZNzea~g9Tco-qFT{4_1*gaU}n0iGr1N}ThEy>D7(b8n}ht3QQ znX}3Bri9(Wuj&!!CdJ9L$#ZbcU_wPl9Hd-=&9RZuTA{s{K*7+SLY6^nN@8H}xFB__ zv?biakm|x)aF=8f&kdrsg2ZA{&`0C%713u!Oz|Zc56Mim8huQlOXb?YkmaL=1cXIS zoFp4YEN&NR_C)Q@l4XtrbYh`$S|3Tl3<0LMo~Ey)6> zi>ZUd!c<59I0hUiGsDmVU^IKlS>mSn?){N(KTxT?j+1pb+FA|KRo)RC1Cl|daB`qn z`mhI-`yCL)j~vvFB}t=BLeR#I5KZj}8k?NaiGmZ?l=ZoGF3U9sl>-2UIe3qX{}^N% zA*#QC*fQ^#?Z3|X#?GZN_~V~~e{?-D@~8`aDJNxEDyhsD{~`;Q30k8K2>1ROYVWXaybBfa48+#Qc>pjl#7#LP2*-!fwKn)e`>oxUB} z-CJ*_9f+7DcWRKQF!gVq3Q661p888Sceq}%lrw>8@LM~r#toJ3#e)WK)^lg2OXCUU zZvNw`EfqNYBt)&H1y_n{28*d1@-y@THY21T+d(8LcQcF)G}e%hP;+q{Oi)6I*oUrNMa|}Q z`mBs_4;!=xHI|LnZ?UJ2bQs*jOzYTPlqIw?FId!Gc^pDsc}K0WQjQu^uH~1(XFSX~ zJt&!d+(RVhMY=Rrewm`1fMaKL1Fq)6XbWEjsqbxy-bczg29y>1VS&MUl$ijw)aao0 z2ExzL#e~E>Lfh0Ff^GannAVGZTE+bYDSs|!KHh%aMHAi1)1pM9VK;)(NVlYAr`lh> z={8K+*}wij#@;DNv>;FtY}>YN+qP}nwr$(CZTD^4=55=Y`(}1F-kXhhvnQg?U)4`m zWK?8jW&WgCt5W<%PT?-V4kO%>Ri#I8+bvunTmhUR=I)hhE1Tb1UcS+|<;tMRpo?2wLgs7*i^ZJd-M^nf;(B)ooGI*1F ze;&v@V_fI{5XLlOw5@}Q?!yAOSNzBktMmAsc4r64 zJu)H!_p3E_5bT0JCjIK5f7&UolDC^GJ)ARH;5W$*gG_NhZH0gazRo4YGmRB8I?`6*0p)D3LDC>&A0;?+&Ol2EbOl6xgzyyZ@faP<}`C!Epsvrg9 zzTWXOU5~5L93Sbiy%Bc|AM;&alJ$;6zlb>ttxEgUW`QIuB-vuysXyd?K?K833NDM%PdMjh zT(M~lMqG2CdaMWcix8f=_=L8z2y=)GlAIWH-`~T9I4oqg<-;<`gLmkZi$~vSG*$M8 z;z8{aMoJub_es>m{TwYy#e($2P-dcw^+DVI3DbR^KLx*|z(luFYBHR&$N)tm?jqth z@&xlMq3yJMIE+Yw=6= zxzzm#2Cdxv2-_g(eAHzzb%eQ>%+r8LO4u{ga^MArW+>rCI=OwRN8n9B?1O|q^|vO~ z(~nHH7nrz)w7bhM;}1=}X`&L#LcNM2T9o%+m5%A@s-YR;mUkckrq zvfY;LO_je=mL~MvSr5(JQ*P@2czGFZ91jn(1M*Z4mhpvt9~HQjLXAhyB9fHbjX1}| z1@xPAQ?6^Nf;38K>k^D@)vS{kbe25@?zUorc_RtC-MRWIuoFg*{KlCY6|M{Q!*O1r zTd+}WJ-0v4-)V+wvg(9nd!|UyM3+gEwnh|Ooi26f74)D>yhoH+BW`sK&uL5zr%3qXbt!( z^0aZ>)#<>H2;%;foGqC9COJV%qp)w@B;yTc)_2hh6CB^9(v&FRB`(F)4z&Z78lc)l*vyk!V4C9VN!9J;okTviIqA9;hODD z60NnPQqo)rTerhPItMpsoN%rSZWptONSr|5v;E5K(yNUxEyEY_5Grfyld42@myxW;@w z8nUzXgQ(d-=1CkU+gpyjqgH;zx@ty2M4ou(t@qT~2)hhYTLbYae7P(F2itI}YSuSV z9pj`9Ty zVDU6P(1DZt3+F!3KtF|VTKc{?F}W-`?KJqURS#`Lbg>`IPobe==LDB3zCuUaziTR8 zvu|e`3&dzMmrW$mrxUtaH1zTV>xbE+ou09z(j}-S?0+>js0qAGY(xA=Zj%<4ANh15 z#+w>9FmB&hQ06A&#w=~tQqLt4gZ4qzoekrzxipk$uzzwwh6>$dWPCPT)FW%lQOLZJ z(-mbETVw2SK>RRVeXfE$##RG4k!<~TH$`K=a@6A-A%hqyH6a)nEEJF-URquL`g?re z^7p({Ziy%hS+yzD8z$|t2D8=sX4eZ~40rrh!FJkE+Ero8Mct)#hsrbc|*z&H5`f z1n==Uq1bS-M!QZhJLhwiP%Sbr0RnOhxU+02r<_T_S(|+^zL)xaPo+36E%c2-bL-wGcD{xEe-DithuXRiFg|J6ttUDP=>-gA#o-<_7mbeuei~o zcfSA{b|p6msjXVcV|8Bfz`wfA1ZwEkF9;6fC25FE!i!6*PHg=w)rPL8P)-FSd!g28 zy*#DLpXARtPo9Y!(7b+^^FF8HRjawek+*rBGrN|NHjMVAwDAboYT^iJkg-9qLgV(> z&d0Gd)A)e(d;I?Rv^o8OO43$TM2-Dm%Lh=XfEp(@YRmm>tBk%HvG+(U7 zUr@8nEzh~mnL8nNq3Pcv#Tibn(n!TM6rD0#?H(onPNsAI*gNNIuv|Go7YXlhMX0FX zY&C?J6HI={u2r-pf-gyLY>dzBWIgf3+^;^k3fqi+kr(W+%w@XjQpWh5Bd@%z+(^4eLOk^|Cpn^eRrOOD zwqkrTHfq9Z?aZ7CtWCSLS7T#CtI&^0{G3 z{WF1LqN;Pcw06I)d=n-^*U2ewd>4B4DJb|riAgQWf*<`#{tTg-_Egq$EkAn5R2cLO zeFL#Gv3c*_q30axt|>dWzXYkUg2rb|+2oexf3P;k-l-yp$Jv{{n@q~tCo`qTUkRQS zxOZP=P5abu)c>8JImzDL0a#U@8(2$OJ$2#pV$1(w5!p9Ae7~8c$4BkMk6szIR)2SD zN|i!&>b;~-coxUiaxaa$`@F`p6gKcr>_~b@N63*8Rv+E*Qv)%jW{;{lZwuSeiR(>u zCj<)r>6+J#&-+5jZF$g2T&z5AsN%q-Ff~QBm>8o^>ztr3$GA!8vkFRoC%BE~rt%aX zW$2}vrrK5MIjj;89cj<7`#2c)6W<fvD+^+uZ=Jkk zM$LrYy!EKPq zUDoZ7UBmAJZ3Hg0(I0ALg?o%noM2GhPB%V25s6K#f7()bpPeV^k`ib3YtQ1&TBJ>1 zi}(=Jeh^L2J+a;T9!h{aOC{38PJodCs8yM6q?U#yx7K9chWY!25&dvWQsswkhh&gS zvEpYSi+aor=|x2i+{tM;u}`IVMM2M&^5Bzwd)DHak06yFt$o(tURGKQ19sY~-^J^9 z&ECGQ6A_H&yB46Kt$|92=Jt=lc1G&yr?kXP42B786vqKXWvD+N;AGw%q3ajWF&dVJ z?Qx6yfUf!|$Seg3oPE1RnR&o}G**2pMOK|qK-cQ@bhWjI=|{VYTxeLnXIEmh0H1h$ z2EV-Jgcvi2x+zblWZtM5o7}7(P{^;0Yie8s1mSKspj5hTxtkJN-@R(^GM(pUc9N%pdCM{F?T zuY91NW?OGyS~5wJS?TcIj$EGf+!{fqS}28u5+@tzXJyT2h)!{R6E=sBPf(zgoM|?k zH$-u?KL7~;5B0fsBnCc-07taU@nydQj0WH4WfB ziF-LRlV^Z?eb!X`CjAyH=S*1|M`-g7O{17!rwuLK+sJoVYxV1y<)mG%_daXHXma#G z=f@5gB~m4F8}^d3BN}4qV7otKQGb&p9jA6jE-#%Y@P=8a#xgeYB}-&DLjdA43a1%JUG#^F`Pk8D-}$vH?9;=qCO^ZH`E|1#rJaKff_627Mq6zRA@VIuA$wyD|(~DmPV2&Vi2A zz02Z%5wx@zKQI-oE(w?M40fF$-wpiKAtEI24bF3}bJCmToAn3%9HhN`%`bYUW*K2# zBgktQdwAH+lHh%ZmCGFnzn6YA^C3SOaW>!4(tJNUrHhm`@2gZh+b8J8$%NONV`1ReS zzGln+`rsYfdzwM^3ckR&^c{uAct$yo7~KnndjNlYRj`tgw{TTTvz;V9ua*UO^ohwe z{qp>2=ta*Mu4t#-yVSPou3s@B-D5u4|70WC&g0V*blUCTmIsfv}duhaeXNZoDAiSudD*!1u z^{mm^(kcH&l74tiPXh)#HRSq-m%*H_tz7SJdEWd8-*k0~>4t74A@iiMc$5I)VfCPx2B=(MI$Y1Id{ z0dHo@thSe{anVCiIu(L$bNvMb;+5aDZ&r}RUa~%%`w=HOeTxQ2BiIH4jUXeZYokWk zj-`=8PzNL;OLG<`zWtA)+5}nN;cI$ZGWKsbW|EI|wyE`ZZ{{#x)1iN?xAL4;Pqo)*ni z5A!dSqB9-+=J`o}EO;=po~ZfYD*~S932wq-b+L;?w%Q{unjTb@>^IioM)b&QZ=CK} z(Cnt5LueV1U*`M&!I=3Vyba<17?a`u!kBLQ%A)_P`$JvU`CsBh@1=S{vi0Fa;dN{{ zM)y4!2lfq=SBT(5P)nzQVkvxV!*2#`X?Y?zp>ft>xb2S+zy2y zXu8uJjgu)!yF#sR@rhIF~rW{b9= z9xPNX2CaL5cbVyTo~o86N@+9JUb7w$JA!PpK3eoxWb`7WCiIF90mgL$kh0EAb{R2* zQi~113PCh#J>Yx8HUy>fq!WE<5pD8g$YvnX-shp&+oG;9rW=X? ztg9oWc7OM~uR8peoT&m-AO4FVAlv8RS5tp8!OaM0&mQMay zlV4(1p!FuhW@eqVlP$TWCo<$H)r`L)Up*^Q1>@tTqXc`Xb#-;Uw6?t;uC zmtv!YZ5KBlU=?zMA)!8G|5X$PHb!k=jpkPn;vJMeCm7eCoUa_ehXtz0alkEB9LMxd zQ0kwiNSRDNc%n$jU2H;{xbDI9H_59Md}zbaOVBIEO=dRsSv93Jv`81|aa95;MM&Ws z*OjN)(;?sghWMRwZ21+VXBmB|3C6aX*EH@^ies*;R4fPMHUE`9Tdz@`bHtM(u2?eG zIl92PtSV-AgR$LNKwj-Z-BIFFBwvB~=51>=HFlL}gsiMxJT+;jAf z1FB<0>~T3!NFJE8 zg#OksM^0;$k)ML4p_iS5TN2538~bv^BeI5%t0QFQ@l^$I!70KS4mC4SK&UnPg(+EMSkaGX>b=&kA#k3kZG5JeuK zG6(Cmmj_J7=>8(ZxCOcj5vr`+2J=xT4iQALM$)w`Qq?k{PJsXqk(O^>(ieskN0D zU@H?{)%||d#yBGPt}S2kkYvExh5Lff1aQf@yEh*@+Nt+mZ_E(FVq%n_!3>O1yt7Uo zV9x>*4uQ?3ng`HF*!#yGACX~}x zGL~zYto~J4k8u3A=ROxFeU<+=P{HZA&Fx=>wFh>2O13S?b6WJT~s7O5|u$RKCBqZ>MR~!El9hA;Ti4bSGB!4fpB@MUnH1 zXf0ko{u;c;m7~uy*>|J^6FV2bVpA{WbL`RE!(t}ng`d%OeZ&0XFzQ#pQjZk@j6kp< zk9${XY2bS|6_}QEi^>@jvU4BZs4&_!TGsHOov4?sGj1C`?I2+F=r&Hv0wi!6{hGdM z35h;WLk;Boj2ZI3P{|&C2#f5JO3ve^`6vX@T+=$`xFha%V?%KDl0k^hZTnS5_X{{+ z6>5E|!$hC*r$?C45P$_z~mR!I`G25=s9H>9`E3+g@*xs|g0;*0R8_;q-KX0CPN z8dk(Ntx>;R_04+f3m9q9EPV)1_A8gP)MPT4`Oe9QJr#PlGQTMKtExNtqQs#^OJ0;` z>_Js=0Okv2hBsNz|!M{0cIepFLb1S>MKtF~J5%_flAod1s1=3(A{ zoh#f1P2$zJ=v(O;i1n9^o-yRg(nyCX=b?sFRlOhRZ5|PtP^1m(nxwLc(N4MW0cvdO7#4(Hz)z?0onb=?p6MT zQe>)1pOEE3t@r+sKMz?7+#w|K#+!V5IDf2#rE-I=a%jF2xfbI%1k~+VA|obb9MjkGQJcpw(fYgF`&QzeefB78+Y&@d6x$* z668i8hIX>Dt*k+i7ad<-4DVz{@~_DV)SU}5ZV^-sI?R#=fy;|uhE9~pkUIMQ<-1}V zI|J4z*|B30BQ`d)jN~?V@xS5C{e2Xc6>%IWODPl5eY{>H!M6YEqnoZ`v&g zPk6-ATXqVgt_4Rx!jqIU%UPBFS7W?tf&2}6zmv^Qs7K(Uq+xV~?owiBE5z7P0qfGs zU_I19F8PkZr|~Zo%`NaU(}vzD_6r!=)>o?v6&%g{9;%H2A1pQEWJya1Rf{>P`7B|t ziHA!nQd9ygmy$XrIug~@ly-y`e)hZc(O7W}GhP9@HJI;il^9r~5M3#mXJUt&5WVBh9U(Ww1#7=f*mRw!^=B7Z&=2Xqw+Z zunza20;Q zP29gCQ6$cRJ8NutQ;lnML@{*(vuf$fYiQD4nr(F0Sm2Fs38G$+p%IvoU=Q)-O6E9% zTC?s23K+C-i-d7f)p$$FEXmkr-3w`)qHWU0 z-9%a4mKGv3lw=87$ump4RJYcYJs3gDQ_=M^10>i4)CScE@Wg+WIIsPWkr}fCp9iJ5 zJu+$xWxd&wsgVZ}H|1Jqb&g&7ymXvQvP(rUA~Lj(8?cIun9ssXGgc(Ws*Ouh;|5OB z7ApHpO(WhZRujs@5gf{0Cs!aBU9!@JbsI^I;)HEbo~C5ubfoY@p4}KxRKgIj4Z$#? z=!IjT*?<$^S%q_Axq&f$P*luz4D$Sq6+lnW!-SJ**mD^qpds$@#M9EuwE*YweB~2q z7IAsqHSCjX2Kx;DT(Cb3LG}NGUI-@cm$oq;r8n?97bk9BuqSRf*vmOS8ZtT1iV}u6QZsEk0W7f>9g%ytubS4qO`ZeVr zrR?~P_v5dwCT*Hdq8*ia;x=~(%#3~c}4L@_guJ__~(hq@Hy-bn@yxgr6SB7{aLHdR;7PHU-|gHALwy zo7eRxxGGOpdszVYVoTl@-LXyPy5Se1( zNbEicztM1uKe7voZ$`Swf5+UY59=Q}sd#=I1l*N%9)nWkg8Fb zAh*;P;vNJRwvh5NIzt?FfEKLU$d%7kce_g0h*^wfaBlBW9hcN`KB6yh!mFi6Xjm&I-eITAZ`L9TuW6vDIF@q|l}CUQvn1xRPHyTc zmTJ=Lu8B7Od=i{PG zy>JeNB(Qh$kNwFIdPEyA)WP`g61BL6u!}mqJa$6uYVzg9+6i$ly}Le=>hWd(ERLYM z5^d4{+8J;+yR%QYHl2&hjW1d9=7V$SUlRD|qD!FRY6TrY#>s(uOq5ddmgyzEWVHjY z>%48+ffV`}*4&>}FC|_QZ6VrKjuf)`_CD$wnPpgZarHzl6f1Kqtr$0&nEc`f((k%L z)Kwb9m6BP9OaQrkhV4X0K+-}JckThtjc@|CtKN$RTMf|K&}m9I9??O@6-P@Cv2UXtX-2j*X$ zU2%L1T3;PXior|a*V|8yALSvt$VbZHYm9t-e0HYZCORlvDv7?Bx!SkABaKwlJuD<> zNCi7o0aRpd^K$Ayrl0ZK-=FxsR%}3SaZChM;h9f7hum{_{evfh7c%#y@6}#{i@>W| zJN&0MU(RLVcJyB3xAuine)2pUU+SH@s|YpGq`@c}8;1J(^uDL2BipB$ev$Vl-RJ(v zu?%Kwh=kKQ2baPS&hFdTqvYrYqsu?LV!x+gmx&5BxOX^ViQvuh%2aQioGpYohVZ>{ z3|l~A7joy*pp2KO0%^tn$eS3VM;{GpbiwxgLCf5QJ2Qf@?btAUbZz|A8fQ=k+rJTn zKjUQkc8@mRr;5coxbwi%z4`VHxhC{U^}Zozci0%0ec6)0UJs z%mg{%MOWOSUN5vTp?AWR6`)TgH4)O#NRvtPr}o@AES?ng@!7ZbqZ`HJFb<~hjVql$ zSN2-hwX2WzJ%u?SVe9K2kU(U;UWr~oA(Z!`smr?sB2NLGP!wzGJi2Y=HHI$v&%ta> zW#L)$iZ;zwI;Jt6%7nso*QJW-=cOxg+h*1rg1_%bf>X%Yt!C#@^gqe)k9PFMT|MP8 zK`#@1ctr(Iq(I}``(bBOsLpQAx7$vxJOjj_g-@d5wu~Sae!n#006s{RmVGj?g1pUy1c?*+O$++eSKI7jkA}a zcxGq9ZGsJ-aefr`DepjD9qI7%GF;NyutH)9&K2tmUY;VHCIjaro7OTlrHQfga8Q6R zH%B__iJy@6%|?TB%wm4)Cm6r}^L-EUvE0e8>I)y$3TtO#?2G-oQE%;B=HxGa%?hMN zl9(g>7c@@VQtygr-IKK0h*xP0D>G8M@=5g#63-2f%DT($21PfAmoq`<#Gc9~iH{Pb z_2)Fkim=d2oy1-p*%Nb5_kMuVD!GL&TvpY=LROeW&-Qa=1Td_xkBwk#c%@jVY%i}L zy<)Y@O*b3cXjL!RZR1^uHyv6X*Eh0&Hz}KHX+Z5=99@?$90CbtN^hw1;2S#@(782l zF|*poRTC#V#svfW(^^x|M@7zq_Wq?Q=rA*XVwa|~GJ2U$=G2|NeOo~)I)?3BB`eey z$%LAwl=k6Ran?S0Q|*ZO1Ktwuwd@KeedtbdMhRmRFNbNn^sMqt=MhfW-uhG->V&yi zCXH=c-TU|dkeflAt5)^@2{oesee$K3g}$)d|0>$i)^^?!OY>W+-(OC#(!=pGH`iZf z&8XGDBj0dj+cmLzY*M942%)GE2mlnMmO2qkaxJ8}^lPV(ZXwl9tnH>%ETK@Hu{UIo z@NX=q2f>n6SXAMJ-1*L3@~!igV}JNur|;d-{av~LT;H=@nZ~RtE;Wh_)TlQr1M_Q? zsVyc>T#Hp%RP)a97*e`kepMTC%Db50n^C(vM$OU`WB$8PLH;fy)ch+i`$G9VrKz)R z8|`CNQ6`LGCx1}e`2xfGoVl9n4uK+jRhZe_Hcz+G<~ro~VtnM)MtfB#+E&pK%IM;` zfcDI;EdRt_-Dp~enbJ!9?Cw}kej(aLP{YAourtT$h;`k9$ljHStAEtB64 z`ZI6MyA%^+MYTILA$!R;%{`&lba#)oX-7XS%p_s364kxu=dXKw3&N&75Grxaw}_+4 zeyF*k#*8K443&jBCM|v)u$zu1I6r`L9!NLkQ?_AJ9Q&8m-lt6Q6JiA3=wI+L#3656 z>Ump?O1rUZwpPDVz1&git3Ka17;4Gu_w2+ zMbziHFoT&jCFw|2zq&g>vl?_57|U?OhoB*`NlmdhJIu^%6$yRDeMw;@0{e-gy{&c@ zk-xISIWQJ(syWQVu*&=kXBS5*nK!L=xJgC9A)-uIs0+?)Umy|=v>7PvYg%Cnt< zKbahAeL*p!`yo3++iMv_)p#~E379isR!r7as0;=)i((;pBl?nt0h7iQSL(6Y3|$CC|%et{MGG)XtglO;YmvoA$!w&M_5CSWRKOhymQLhYzmI@ z0K^OROPSt82klQv_;8?bcDT9w`#adX6kAiwHf{Fqi9QrMLr;8pc@{Hk0USxmX6CtT z#Hh3OE50G6R#u3w$6T-42tBp=Q!^B`>!k;Sxlvnt8$PE-yeYY}N;@cZhsK~)x69P1 zPdfrU=dmCHi18FwuMn zf;c%i%O0oG8GAN3sk`7iLyBRk%ZUyvAt8GCXki5Wj)rMP%(wK~YB1ieeFr=%pUqUW z#bbqloCU7r#g!OPXpcu#gb-&I$qx5ZF6Z4zI|d~A3Qpe2f|)37ED~m$$;M}wtUO6e zBo&sm;wjP|23Wu;Ccb7INh$Dr;>h)h1La2IV>PP0Y+t6d5_?i&OMZA8I`;sFd;#3`fnB@U?+v7vIj86?{`TQgdU>50O;#NY`60=cQQx!Gf1ueBQ1mr zGZaOq8%tpkla#c|f~oGgl?<4&FWX@}t!i2}LvkQ?efAbNFOLja-vCl5$sQyt#^2-) zb!c2)o)Iaa*XKV{)JmB#xM7GUUjg?M0;k2DZ5HEAeKX|VoEiBIYe%tKv_LX(>t*jl zy@8{P-l74Zi0aiOejt(6whd+S^fX5^6)g0DX0(ePK!(_k1-$ zCTF8uoBE*x{ka#AA!5C3xI`Bcf1f$7y$i?yY5&&rAf} zKd39+N}{y5p;CO!!wjXzVWY92AgJsfB5-+#hReuG3zm3}4vuvbawV}-!l1u`WRPtp z$B{g?!AAR}yA!aXsAvZqmOHivj8VIAiJz!t)BtJLmvKdX`t-lMv!*XGK^pISD-;Il z*>o)(72eaeO~3Akbj`3qfyQ;f3(LPWZXQEZbkBRV>g^b+PNJg-@Q{PwS8P-z0@XVd z{2YY}UAhGQf!hpi>WR`%vl9R)uUX94HmoTSakB<52@4tsh1lQ|3rCMVLZYf+l#6A@ zzl+9NUYcpJGqlkv>-XyAS#bjfqO*dx(d`Q#!qRTh%L}P0)7!Nc4O4p~wLjAljcL&Q zp30yhL86#uL*GX+M@oF@1U1uwfp{3O+Qy_*6bH8@KzcXHKjjJY3sGgNp&Tq_cKqPZ zoogZ+%fD_fcxCSo8jB-Q02>_Dt#{k0z-54#*)s$&u}2i7YGeSIWI_~xVuEDgBM0)( zB{Q^0Bpce#r|FbJe(BP7B8SpJyL&LPXLxOZmd`nilw^}m`5>+YF63+3o z)C{Egqkw=f51C*hNk(;@VVLJqE>o!R5Xx9{h0NG8l#H=JB@faVL>FTunj2x2SD^a> zpz;#dPptr}$4xx004~mZ2t_{lg+T=c=ohCs#`7jZ_@lv;!@`pQ!HSq9`5t1 znWEti_BN2ccseuFZcEoWro=3^+rtFJ4#^>QR(lIKM`!`&aL{U6rS{er}TdKzL>`Q@6tBOdls!~E-jc$M5zf2*YQV>@`% zu>uC$W?(>_ZP$9~o9DC`9~rDlG~s3~cC4+jUG~J5jBm0Ao7L=wCRh6*F>I2oL&{F0 zwA3It`a-^_khTR#>T)7VEfpu=HdZ`4fT@daKq~87Fbk0okz&t`trjiA$*lnAOQA79 zl6;qkwpB4#8go&nUwrAm*p@ZDL>o+t+e}oO^ETa8nMiB_@~cEZ3Eoa9Eve7Otd(UP zWqzIFU9Yj$ju)2oSxav}^Dor)&oV)ZGuZDe?H_`Wsd~+uH`H5`=0}IaaFtrw-!t_d z??ARSBE%cIWZ(}$oJbPUviKMft3X$Ui*NG+5pd${1>mj8$Gn8+JS5)7hfU*kPJ#Mn zvp9}4w=zFhAx#7|)K^bpBPtFq=A()-X@_l-gU*GF~G`A;}SIQDi%b=?ffhk`ZC zwQWQpEWzl5@#ya^Q`J-w&fjzk0u1H|4#zarx3@XEiB^^1A9;BRajYY^r$8xI|DXa2 zV>c|TD>y<6RJ8S`GUb!c(H!D9oEJpeum202}JyJwWqx-EJXC9 z3d^ro@eymW{|~e&1|~`%99H@f0w8pHqTIkTd65}czN1sFFd> zouZ_<-G<{-8Kh2T$PaIHEF~+Hkrso=o61;acsDY`#0GfnHRta6lQz$pn{t5^*nW>? zD}NAc_%KO{Xu(guV(tQ6aC*MNwq+yQYR8g3XGXg;h7Nx}RS1zNL_vnI zpwA{(|L}*`SnhrN)BkteJ32F-wH2NuVy`gKhh%Pn91o)({D5k1K^%|I9e&fyv+sSG zSl~vG5@X;?oYFu0xXLF8$0`~6%;Ov|nXC!xbWZ5TF?IBqw*tCAs4AV>|0`YN^uYJ8 z|BRO>)ONjI9@(>UGp6I(RP5y%lD=Lo)zt-k(BFQ>JS0rY^UYi0tW)d{vo@*S=FMB( zqWen%(3vYi4x~g7Lp#!6^JmhRl*A9Ble|M(xWi#WwYZ%&P^Z(@wK^GM_pYH`{a6Ph z`&KEt!uGxPbxicM!aa0tO-ZoEZsLtST^=&@Z1dscjeI;{hpePjjTtnuBfi*lzRqT2 z4=+4bvmyuCc%%Anod*e=9Z(P8JU@C$iWrmG7o#cc?HD7G?Y&t}QCa)O05kQUBes_QqPabN#ttTQPZs-GVd}K< zo5J9~clbR}i0xYxXbbby5}56ZAJw1Mpw*wR_eAgqT6)_7?M>kR^V2w3xo32j`$z`dpMXOGTt8XL#~O| zIF3TOLZ0@h3;!*J+7*)ENk(VD$U#)V+KnCAQnsBJUc9C@0iF_H^o3C>#LGO5JncI;bs;YSzEX%;AGvFfiwRm?GLEgaa>*lckw({s4EXsaQtM+b;ouWwQh;P;EJ+1(MIlE*_nH| zmj5gB44EwDQ;B2`jH?sj%Y1)utf1w;Sc71U{#}B6h`s7`^xi>3j5_tQiC@aWgj~)* zd#I)Y!%E7b7QNiKXD+#y!SB!S@9*QSU-}T~-ICPKJ&|#O%B1)>AilIr5_%H+%QaFS zmors$Z1An;3ku51Hc6&Yd}$yp+3GIIzS@B~`Gs{9nZp^}c8-Y<15t86PQ7}&@gE2N zb>SH6eR$meQ=Osk@!aM4X9m26{%>tG|I`^3_5Z2Pgr?0Y6N#gY-+rO0UFS~LQ>SNi zbcd&CV^iZO11|}o55v4nj}Vo&rhu+SbaXd08R#YNfI%O)ql=vW?rjm*4{8vEgH2f1mUm2YsTbMe#mjv9?`5UI z3X6Uimn4+$mfM@hrg<}9!0C0f+sX~{xv;qbgqW>GPY(ncyaCb7C; zZea05K)rx^kuC+<-s-FA{cXdUE#&Y>!eNXVCHRpG&(#NUK2k1t zWQGSB493+**>)O#Uw84k1=eN7j%B{-hK-a&3~`~HKLLlFB$j1P8?QWgt`ZRx^&>W0 z;xH$o{us5@)f2x=m+QoU^P_A#GW?=$WQIS|kH+=F_$5=Ysy$|V6`5CN7H_cIafLlD ziN#{~zVJX}h9jniqvEX(kV0ayCPBh_Kn6c?eLWLPm$$7Lk9WU9xuAsUtT3Z^!YI>O zW6 z$ZfF+y19*Cs%<)g6z3n52ZOV6yzHKp4_E|*fz?pvtP1`Os#TxHejlI> zsTBg7)FZ$V%G85x7d`I~L}3iTU#Iy=Yn>JrUJIZ+-B=6b?)~I*-8Qs0-$m}@5$BkmKr#p?=bjV&>Yn))LaFuv-g$0!8}ri) z>g%q}EojYqgiM?+Oj2=Rmb|hH%6MfXclBq5@)FMxc~N;D?w#SVowj$w%$|yf-4m(z zXPOU|Y%ub&#sLOiJn<1aEkDj3?S1h5KNVQML>q|!{QH3Z5W`1 zZA^@v49#5VT}(Y(T%Amv>4E=~`46j_Nc2CZ{O_qm|NT@W8+&8x|GEP9zZE8YA)j;s z0RVLV4Zi$iE`fk&XJ=0!r=y#loUAG-A)%q6As`?iBO@as8X6lL z8y+SmAsHDO8k(A#nx3X1Cnu+(q9P?FrKhj2t(_Sh92^-bsjr_KA19}v_%kt4SyeUp z=g*(Hxw+BN(t-j4LPA1n>gtLL3sck5x;i@p0|H9Q%9d1>wED4SMJlWnd%luKvZ@!78ar5dj^`On2;hn3|fJoE#k+8yoNM?kFfI zAfTYIJn4@Vbjoa+V?^CBv%i?Y20devrb=Yf7$fKnQ+3Iz+GBJLG1DKI0Ao#Ia+WYc zPNT7Dj1A5V4DyEvdIAE?$$|%Tz{1SH`Zk0%r$k)R8Kr2A5p<^qxFQ2>n{+u8Owr>f znf~n;L_|bpW@bpp$lu>z@Um1=Al)$yq+|5y{ktnMtOVu5|B3LsMLyvgAvogdr~TJ& zX=c4cEmyt5J-=pgP@*;iqbB1xC8Z;$_h8kCD)KMmN=p}|NC><4n5?=&r2NI^74Bxq zl*06k!;Y=nuU_%E4-uKZ^<34%4@{4b@Z)H2aeMkr#_zXJ!%-o#kENxlxt!R_#t!#5 z5$fm0|6uQ{!>Zi2e%GR75hC3nCAk2lq*IVax;vz#LApUy1SBOyLO@y&>F(~3mTr)a zbzgMvefBxu@f`MdzvtfPx%d1rHv3^MS!>SUZ;Ux=j`wLYYQOidz-x(NzWW$ZTx~!e z{5QdKva`R&4lh#sA?{PcmcH&yowo_jM|@S4U!E}KJ<2Oc93z;P8Nj>6DS{25qH1nN zxlL6a8~kN7N+v!l>(pme1afyjXEVR+QKp8H|HE4+22pgT1t};L`23D>5B(PPz&pN= zd}nu%i8bljiC>h2fVla|6)5^BOw6`3vkFQ!@5jC|CCZZ4*mh)1XOKbOmByy_6Q+4^ z&eAWTl+M5fmt`!z7iF7R`!VyOvM0IUJbBwwy6CVMLs5lId|N#7I0w=Z!IsZJXR+&J z-RQ#hQifO|MrU&!gu@ zWkXvXp1tbt(z%%~c7i_Dwg`NDa@QhlG-)_M*Vs#cTlg%PH+3Vgz)b7G3B&YcY0gAu z`DBmKUC(0~-?Kx{(pJ~VWY&kSLmbKpN{f9B#ak^)SszcUg9;Km_u=p+91?OQ@}~JG}_rD;z5j(&K@7E}iX0^@bpive^>O3Kbr%6>p81zbv#(@^&}! zISsv7YI2Cf?9k)Q-Tj{H=c@t}N?W^1VSP!36Bm6O6Z+i(x@k5ZGtx+D-OW-RCZau= z=yf|TRWC&+d^;skNS1z(r-G-7;NjcBVWVfm&he@eEya?Yr9qDwB0r1-jo2>|HM)_y6J^ znmO3nI{jN3#%TUdLmzkdFJDf5kb=c5EiIFilfhtcW@cuddSP!@*8_)d4@E>8W@?^k zYiV6vTxe-)Ke4jfKXIWzT!$PvJ%zlk(3xDhJ8V$j;J~}ldk8x;L?hAlSV_^N{t~`O zbr6ygDflJ^bYPc6_n{)$Nm-BHBJt~k_q2zd#X$4^gN&2P$?VFnS03YygTNz0xK2H6 zyz2A`h+xfmx>JyQDGfs-eWuAOqPPDA#ekb2H*p94P*Q7CGbfdsxB~xQDJt(@+(idV zbBq6MBS;ltQ~b~N?yu_VwNL8!Z*}$mc_y}J$fkq>415U)&@l9u^!Yc>@Sg@_%@CUC z6)WRv{A9$Wt<5=y_Ju+wbE)(*R|E>ZPU{xjG2 znj0z=5q!?Tg4_Y&{_6|Vw>35YB|G3~2(Qdfw!zAn*QY$`m~J26J_n&al)}LH%DVpI z^fEUg!uq-P(OM3NPUywTMdTu1^pZ;)WPso!hNiT3CNKuThQYKj|D$o)!mCuH0tW2T z5p~C<^l7uCT4fu7OvBz zjoy`DPk99Aht}!HrO~1Llwtz9mpY@owD-V&TFXDC0r+l)3Xr9+F|v05PYU4wS_)ux zB#D$52>&Snx#5}rcc9%U{C_O}!z+r#ou6M`M&dX*J=N6E;Nj(6T3R9^BGS~<{8CXd z4)o!=x#8mCA|N74NJ!Aq(3k+zX7KP35fDCp{1_7x6BrmcJTig-ft;M2(9qJlySoPk z1!ZPr#JqU}I93Vq@#5m*-QC?l1hC_2AdTNo+!{q$XMhx9&OPY+R$PIg4Lht$sxKMW z1`XSQhoJ*+!M=#gdzSN*cJovjBOUYn-1|H1RygF|tVc<+oc8HL*UH!KyN~Dumpr^& zwEB`s^z+T|Mjrv6H`zU+A9vi_%J8t%D78IbA=!vzM*Q?DZ=#98wvW2ml=wE*r-)zq zSe-G|->ZPVE(hd>rt9za`!~A`E(c3rg(=EQVW1JC0lJ1E{ZL#P_=$ZjDDc348CbAX zfFDhYvX3Q*a3SdEKv4ojKtOz1O|^IA$5X4gCLLt z2*k$5hKY#@WK>X5QGsMzFf#Jxy?e*3tYe6XfryA$SXka5&?E{9OjsDk#Wer|`GUb{ zXlPGBAU`-bz?z4nqx13c0l7LT6bi87&Ye3XBqUs1T!e&#zyY)4|Dpm|K!LQl$Ya7G z)4nM!e?^e^ykQt+$cuE;r6a|6rXMn2n|B@iFtM%ny8HUn(oXmIAyvrjdTK?%iKg>_ zAcWF1Cm>X}PqbjvElj;|ODfc%%;WyPeJPN%0{oNU_j}(?m&zEjqU_D=cHW;#eFOg-G%z!rf((h~CG1)>K2e;*i6)+{f=04|)}T>qS%?9_ix zp6dUuf8aAP;*AJ#^cx{k1Las~2qIK*%HNn&#~Xc$)Dpu2y>pi_qeFUbz;1INZrOV6gsO z&?9sZA{s^lOq4R#j+ked+5(@2mH5nfh+4&abAyL>eO zMBNV#5g|6P%fKt)2F=61y7qMw#)MjK!X4${!r3-lYH5T9kth~Bf&J4nI=ZXlSB_D^ zIQ^oE(J>Za+2ukiYhhpCoN!K5;V5B!Q3C9Tpo?zsHe-2}ErplF6Y0rf@m=@3OK{Q; zQYp)rD3{%dYPcGVun#W#TEglQN*6V;FW~QI$xZHI==QNEP(TeNSEcM9V)AdR#8e zZnZD!eH$x>3B@j%kgWE5IW|Rh1W%puh!L47yDG1Uv&6id*DbJ>QA&6tfYPjUqY|No z+q>-N#-YtiUj-Ee>BPXxLy!2A37D<9FAsc*W&Pu)UYU!~zreM1gNAvq&tRUXmU}%T zncaIa;@HdEo$qqn##?YvydmfWnN43treI2IoN%_A;`L|Kjn)SbCcDMLN7e(mFIm4Z z?%44(9iLit_(l?J?5I|uFV$hrU9?Nhw^U)A%Z}KNH=w>jSL-4 z^^F}&4V^4qevvH46#iJ>fI#C6tE+}&&^*$)BjbNCB-45OxiS%{%6_ym9>3%5A(a5- z+bWFc3R#nYjbt(n7LO4>In$tBSy`v`A6`}ch7a}iec>e`V&vdr6(*`|2%`IGO#*e;8-?Cz97$1LI{)VTm zI?m|VQwCQe(s(9=WQC!kgD$;BXnhHcT?orDzUM111r_O)#3q#NcYIZN$aJZM-4bSR%;W zAkos&^6!Rn3?kJ4JfnMh8{X{JO+J@7yg zBumyJ2UZz5<_AR}Q(Z)xwRlHPv)jztOnl5S>tGT!dRbQ(2TIDo=O|( zIpk(P&&N>|XXE5->Fn+w9~htL9+_zGXzuSH86RxvXlZPmsP7nPnP?su!N?k;75Z|I z`+gxp7B}L%F^p_IMP=Vrd6rJ*M{-Y@I{Q>X&n6gef7X8cvyV>C-7yuwM2d;PE;g6wE7JMV_y7l{cVmdaQdP1+surhZBN&MZGZF6ZF0d*0s=5aFy{NCaEaJ;>lFTrubpnpt6g&Zad!;q~DA z)#dqGA(@(fe&yl5f=tSsGMjdjxw;F!5ch^V5m9~x6RrHx*!u@ueoLn-EsJ^M5VbEc zt{KkW&`wQSiziVo?nqM-Lw$MvkmsD9qUuNHYV2d1-&87A^I{G-nUbmoeU!Vp19Z_y zpOhno-;-f_JF$6u5lGthr8p+v*VXp&$+vmPx&T$`NuuZw+9&O zn8sWs^7B1bb$fRQCKjAuw|>XWPDW+k@KnncT=dRLCaVpyu`x+Hsl_>x!nY+ISs_gh z;)~0=d_cc=+H;Z})!LFj_1#L4qGqS{sFU_MW9_*R<^;}*Qd$fJi{jwJ3YLPGlRlHL zH--k*b_g%Nl~3RLGEq+7x;Q9Fb!RCTU5Z~#ZENWP3;pG3hN)-IquOAVbiZ_#N-3w$ zIoxt?KtEJJO~ZDEl2ra3^NWrzl>bo>=lp3$ zMT22V&`F1ojwL-=Uxr|9pVGx%dL!nx4e9Z1y5}&?Ap_}%RO>94oh*|)qX_(0wz0c- z<@szY7u7hljTQ%o*!@pgWOalJwsB`kR%%3BwGHotOc)u4O!dThCneW?P`ML%ax243 zDW_AnRd7w;yi)LC6-zuvUr_?*ykl8b-z8C!bK)yicrj>$sF}Wrj&_FB)+E#>XF~oQ zeeoiRNRP=r_`bLcbM6$Z_V8I^*LIZ$ryItrGW}3ImQmeY!NVlqkAcJ?b&HoTLRfvY zFOE( zE8lBHr$x`iawV(l!MR|#oC#Aek)xoi;rBEPP&x@PDJl+s)QVFQlVe^EjItrq&js#^kS;pgCx=y!*AAP{)&+PBe=+KQdB zYE;CQ*lHWERh3y=dWG14wW~`d80w16t{^yWwRnhJ*&U1>m>2;-9!%-T(`B;58~yg6 zf8&r5#s@VBmwc~OIF{67mN&BQ#23(Dz>yFk`F`I1p z$Aa2JEQ`x<;~G6FrBBngr?lP+4;|R+)n;;6@Zm$%HeIS{6zG$BB*loJdlH1g+2+Olshq$iI@T3-my)a z-5Hu~TYN3p0O|-r4welAm+x;QS%iH8JJdAGpsXhoDxxR2xx(}N4yMS{Ki+@jeT#!q z(&}S%M}YgC4VNm0I~Go~XcNK$uVum7?$Kx3FL7`J)dcVR*qF$MNkhJ^Ok*I3_!3W^ zooPOV6uoif?zjD1225&2|M@{5+l-m)xD34NYxdr}U2#5Ar-q%@La(eT``nW+oy)YA zgk}j^)wlC$KYDbNBplKnEI)#u!RxK``2wejx1YkMUSHLydCaCxnI}4Pu!QEO&a-h< zw=Q3wKtm2~0~qm(hyo#j*Zex7xC8_Wyz7QUc673{y@_w4F-Yb`MnuSU z=cj&7L|73d9KSa>T`43ia)hIxuYNSO+3nfwzgJcIz)w_}w%`_R!>J|hQkX;z1RR#& zPV3=aK!s-7>XGFUjD(~gj?V#wX1Q1L1dCVHCA+X67lB`OEj2%a$=Cm8EowjxkHe?$PEHQ`XD$=0i%%Dh-mesP2}Fp(tB z??$NczF7Q?spfLF=vKt)hEbz@@+($H`4hLR-MTgkhXQ>zx!hUa_nJ?`fyuYQ2`=YH zDMbly2Bz;e?(K4zH^2O}Gh4WGKlM|}23Isk-q0%?IyU3jn8~~iJ|Q-mv)<^5z40oLl9W_^C`Vsyi zr^h0EOFkN~UN8TeRdltpGx=c^U&1~8pSOx&JPi6zC+dMWwu;BUS;hDUnI;45z>R)9RATm>YfagyBW-eFcW1nSn{+_NAKFa zNzsT9T+t>a8ChR6w5CcY<7>`U-_=Zii?+%Bw5vV{=9EyQr!ZU4s#Dx{FrB`JscsP7 z*`ggYiLhInSoamuB)CIAe%vG*40Gmg1ZRPCE?`LZQJH-NYi(O@3A88U6NOF6bQGYw zgM*FQo7yrcK}DC<-KtfrQoM%e?&9Q%ug5Fgn2@wZKfs9=HKXp;Yu83deFbM}ecr`C zk0lZw+T>;n*?v!+;Vl41$Hh7m-p~swk^GtqF5qzM`ouiy`~35`T@3hB1D6;d<2#0T z$^=Feq;@R^=E8}=p8^YN!|+re=ldQ*_`h4>eaBAZe+1_E$eusZJ_E>W5S;)$-jU_{J#03k$?FWF|tS{lm;V)|KY$^)` zbq>EQBm5pF52s#tJ|P8Tm6X7U2(QAzz#ZoM`@;JLvG|b}?e)7Ue)EX%O}Fot!PeJ> zU+Y64SVV*cmQUa(W{C*(IG|t64BTiL(Z0<@MV|C^U+Bwk*M*`)p2zvkmxZH6?y2cq z)P1@axtHKKpPfY)`BXs!{BUNh{{(ovQR<5=A*?!Pdd=yMU*Y^Fq;h)kh5R+z3U9QiXe! zcuU@<+*5I!=gRurOoH1TYquj%cLn-jbZO@UQnC468ZQ}m61#OREPV!eZ0>ZKBrRsk zqXf;~9VfBOjCY(esXW}y>KaqCnK%1tFZm=yq3=P#!DbY9lB1*AgDJI?2=!W@`sB6E z*xat9z`X5^!vtIt?cv_A`)|*W!t17w?rtOq$f&ASy*-H7)I4inGaNDG+&(X@+uqV9 zy^KDUOROub{XDAGRFgMV<{qA5yIW_QcRsCtCFjwoUU!8O);az;wNZQjYJYZHJzPKNC+=WrZT-;H(B$#Yrp_OxHXW>cqXb~)bpj9+ z;sgq`2R(NOy^R3nr-7dLRf7mF5cee!N&Doh7E(*jyu~ zlvfm1smrQOgBbRPhHOhR4P?GZ9Eg#OlJJ;GiR!a%TwHn7Gi7CV(Mj(+ih=Etd46Ts zRIAa3O6W*+O_j?VSioazzOw4zcC?zNC1GK&>bOb{c)2xLj(U2OJkoaW!o;-kjXK93TQP)vk4}zOR&H2 z)rJl?++u)NGXc3-HQ;af{|WnlU8Q|{U8RMQ@OXN90>u#_1(!ylNCQ796Lxs`&rlRj zj_$-eU|bWnz30?qoyhWfeI4#PzAyErJroxkc{s!1b#!U2#R0+c5Hy9;$QHp^5lzUF}Q zSA5ZT{%EVi4Zy>t8BY76LBrT=JiSkhR7oQ_b{xNvdS-!u^UTW7|$;cPsnj(Oq-Xl+GTjbsFm4AszN?T^-u=NcSg&Exx;D8h-bQi_R_^ zRs2RPnHx3C{7-ewQMN<;`IfgiG}#kc3aiC^QfO!ku%xd6C_ZcmESV2#7S-EvW1C0X&&rX5z{9=>+I(g)8D8i>wWR|bf5Tp z<}tx8%VV;(ReH-6OA{pyzt?BQ_C@wItrb@C9+Mx_C(l6{uuV?-y1%bB_+**@y7sdH z>SiU{AAFOrHFYp|7qhca zw=)?NvD2&_#mRT&qC@-|tZVwarPd1p_Xg@#dG_U_ql^XIKX|&F6^;Ty07HENxmkbR zkFAjeEU~G>b?4KMLOj?P>~kY4ocF^DgFwU06uouC3qvepZPY_el$xcQZPx|iW(O?+jH zG+l2X)uamOX7VPU1t}6VTL~0 zBM&z%T8O1L*f1MBkJ7r95f`9tq40n+eg&#sUDL$TEka0NghmZ5_KqK1g%{*5#~$|* zDbc^gB(Hx;(U_B@Msecl*Wz5+>&Q)LKFfY_QRj`E9D)MPMl0$8zS}QsEE!24^*aF6 zw}AWw)AJM9$9DD#W@bOm*SBEf8zKAoFCgpc>S|_Y2EYp7`x9B9tO^vd|A2L*l@h3X z7Znx7#>V~uF$@Iy3GqMRD<>xhUx0S^3u^7n5-0Lr$uwgAKc`gL`6{{rRh%shQy zBh!9ES)mQT5eh+PG9AX0OS6XiBs>u#a0ROiofc$`48U8Ph+=6@RcDCp48&VgMSXG@ zyaNK=3d=J~Lv8p3LEkD8>krcNsc*CwcP53K{Ak?hI0RxQe!Il0#IIlRlD0E~esHXJ z_+!6uts2Sk(=7bY&8{6+!o?P^taFE=7X&`?mfA~CtfA4ps+rDdeYLZ$FvH|AAh2-x z>4&zc)~O|#K;4#uaFtu9UquD;cz6HMQk zsmt~Osb!;A;;wh7{Tg`d7m^RJyQ%yExncV2`c{*qgQ3kY(qF*!qdz*{e)v+tXFl+4 zfK3dlfziP8M$n3QH$X7^Y%{>T>py$OqHm+&DC3aEBomVmTR_smjFQ)7b8`u`HcN4cysNuVkCTFt zM@ZzkNCYd64YPqu_*GtADzi%fXbu4ZeIz&Rx&CpkDjGUj+;A;(SU5 z2cunSA7~MuuSj{DMrm8WM7cJ6=x-j8 z-mDvMaT5Q*;dwO5b|2`-0fhka7g8UJ)Qzemw-dV+u5BmiysiWwENG-u{)}JQ92pkn_nF7I8U(MMQk|h1hOaK_Fv9 zgteSd9e4)`2_KNO-b|mcvhF1jeA69DG39+B`V}AAOqi7w3=fY2P9iV}mX~`4q;d*B zUg+yw2r+H=XimUHMPa_mKnjP5P!NvD$VeafcsQc&ZY@=M%(!}Dd1-3khKT$6^_RZ--IspzsFC?Or~2aGgh-|wDU(80 z0J3Gfq6UL6ucm>zv-kqXhDfhTHUere@))85TJ13Y)E9lbjgs{DwCJ9nuVDHYJ;8o0 z2kACbQ%1{P>tv$*IXREc=!ko|txnr4tnJOR*L!NG7RsfTCJsG~*jP$86IKh(MV+~a z67N5AcRjE!JV`nAt^-RMNsG?zPew2_B|M_x#NQxBWcJ`-bM!u@i|zY-zkm&+hT-b# z#ueHIQ|+UCI7hFU5dP)kIW(nXnWdz&;(4Qupwke7mU5vQ`%kb*1^LgC<&U_%HuCW{ z6h=Jpa!nQoOOG$y%a8Lm6}YLk6^_fycSZQS`qmfTg>z^0=%2l zSbh%Jp{$<{2x3DRH4t8a`lX&n*%;Z7Idy+T4?^SZJcQMK6R@|}Kuz;-(g`?|Uc_x= z5DZv8m4JK7lrIun{-8hqm~}o^h_I2Nj@)k{E6@PC-O%iWG*Rt^KJwtWNJEgnQ67w$3kSwy2SZy&d!WE;>+}aZ z{%LXtg@&;E0cJ8-S@wtb0Wpp4(*n8k|9;Hjy7}?LBegE(X`Kt_{_0TECqCbD2bk*w z$PEqV^>uPn2mL?pLV=yY&u_%s^nc?Y1A!1gNq`94+(2~G2rv=g9l$jpIsyp(N4)xH zP61>DBH^D=4ZtseiGV`idgN3zpRbsdp_5%eFtr6i>KHMuj;?@SV@MWFc% zB+JvP-O4~7pnymj#Jr%NyO&BkSIs~`$>J!McW72MMd6gS7`E#9Wo8>oNF{hjvwCK3 zg+9O&994l9)-Kg}{l$L4ww<_JYF`UkP+>lD7Z? z+@GfAkLdPaCoul7Fo0?LNsE8r1VDv9c9AxovD1^bz$`XikIB&t9l*iUr^v>VXqpXvgjCw3+d4fEKsmJI~<`x7OgP*bKZKRFS(#mO$HE`6)^ufmgY-Pvh@V&5%3r< zO5{izZqD#wL+NtSrxp$Su8&4U5bBktsX%XgL5E8oPxPwb`BMsU<}T0AklW_b`(dN@ zhyNUn>nl9$x9Ov80VHeyVFBLu@0HKk!qCR(S3%m}HGuPMR%27|)n(`IgV69b5La z@#rycTd&GcncQF+m1?erbL3UD0%yz2WOZkDV6P38Ws3EN8z zoo8r+f+FV*qa*r~g}D=sP3a3>62}f~qQoaT@mnDStTx7XmcrJkH3xfWD=ps|b=uI1 z$BMtjq>V`@UW#JIL5AgghY7(})~fr?uV#+Vy#!Nt&b{h(R@`T1mFyJ8-dH^u7N+c% z`OJb4W#pm=3C%58Ku_`+D~N|w^!n*gm=VTFnZZ*^F>>PiRt$8^gHS0|jE}j%<&^z6 z3_aYDBoDvWE5$qUxP#$WhBVWH%%1d_zrL#kBEUfl93pgE4awDF2$XCQgZ~(cFCKdv zTVx8S4aswX-|OyEC0u4aD?8-krA1uuDku&zKXeS`;SnT1yU!|LtY?2GEwT{X7MJ{t zB}X`&yE&`_iBiq}UWAdKxG0p6XK)ZLK*ZKRjX9DbFeu&F;NhdUct{~7!Jc-CEwKyd_1a3=95D{CXCJ#NA@G{3lt?Y723!{e=^oy)KLNwyj{RUxKcnb() zblb!Uo&wFnS3*+O1QGC86t@qJ@Yw?&c%%s6ki_iE?L}?qC|~zld@RdEZ)hPdBU+4* zsM4S$_<}%3n}`Xmc&@YV^QAr2fgoe|1xAr2J7^@RCqt~3oJi{2k`-Ykb!Gp>qf6lb z;!+)Mg_~f*TnC=B26^De3Yp|Vy-_F(7>0Y*+O=pN4Z!=w>N?)xIoq#t6+}03;_;2{ zSm9{6IGjU^9F3hvn68>UCyhaziJD~#p1=ro+JZOE&9!ZkNb%Od`FXzc(0;*JoBPTlwiB7>Q?@l9C^Ee@J(A6fI!3=#DI#z?WNsy&U5#u3mJvsN-4$X_dU~ zi1?1B1?TQxX(}ivm{Y50#1K3$ctuFozb;|=eVa9gPf43MuR!pS;Z&pEq7WuVYRr3| zD|f`)x5rP&?2`u{1KFSY1&bj@{*+athB_nNV$AdW&0JII|Y=xWR(`hFgQ} z?RXg*IW2<>dC2l(Z(|2-R>AWHk+vnCC`$Ehwq^btLbhj2VL7Wq>Xkv$_j6tfR`fAg zZ*QOOKRG^7=jMgH%-d7p=5SYksYzzH2`dRRtymjgFD_V_&u1Er$=gwV;9qJ0_L+Hj zn)IL;S-X=xCN0Q0iBYrXcCHK~^ssBJwEELK*8T3BbIE7rF|^uQEJEg&n>@~Lj-f9$ zg}tJh=*ZZHA2-i*MU|iPo@0GI3bwh2Wo;`M#W`EoOOU*heug-)yDLIO#dEnZ?v-#s zReX;F#`rYpeY*$uT84x6SXBt^na`n2CEe`z6{!jm{9(2cx*FZ>G3qgqk6Q1mXz=Ln zv^|jI*2nJ-=!s`cF>9T>pOYdULlbJI6a0n5@KVOLL4mnq?5|fMJSHN%p0cikgzBO8aIkfz`)o)D`iCxk)nDp(XuE2|aQ%%e$H(w;JxJ`6H=N ztaPNvEC)0Zso2)Sd+qy`_ouZ{Fp=nWNKc9FnV9t5v-&u~%&uABQ7SC8l*pnReu&lDm8_5 z#u)Hago|dec_Ax3<3X~5WLpmjs*C1;v({yytkG8=>1Azs{Eu@9PT8MQ*!1^uugn(0 z+T#UTibnLr_+^|v81&;|koC$iPigDV-RE=RbNBf$wTof#{zDQnuL_}DSfZDm^kkVx z5$nZjUa!6swa|H8U*S{-wVc%b_&n}Y=T0lN+ZI-0Q-!pq`HJDh&NAWL-O^#axlU#) z8<#{{ww#MQ@x{(!M4M%PTeJg+RpU=@Z!}H5?&aDpcyUR;c4FfG3hR;ul&rJgy1_|OXgru!=cbw`!|9UDN9uHR zklaEYuEM3_SH6n$e79A<yst3! zcbzD-N_R9z(7Cl=S1wJHua9taCbO3CuB(#|i7tPIAv4}@F&1=xh2>R^KkBj=ySM$? zUfr&d<^Aq6E#?%fcWUp$eFjM4zI@l=fgAXe!Pfg>bpX;*OsR>sm|J)#Hx3G znpM=~V|&Bev-0&tRnfCrX=vQx>OCpqIR5)&I*xSO==EPoR;XHxjn-dkZC$7-`R}7e zCe^mOa4-i{>@uw^Z%Q-FkVc(Q{C)q(pIzpgB^rKryneqY@n5r9|8blDPr1#1M(<_` zzu(dOAHN*%pLq3uFJAp?%J+La{(qG3|6aDCx+#az3`h|f0&=sM)zsG9($-WOxL_vw z$NV<1AvopNnLD8J35tAe0sMI|!*$k-q3=ypmsNl;VUSnCr>bCO5BEjiIrs|o{vfvy z%1Q^7vKjrf+3wU(TAMUv)H>eT1m1PREKA@nR9A`hl#4ERcsg@e6iwJ-Ja6B@!Kn_e zgl4R&>WH(=oR?LZ&D8NF6jC!9H_C+${}HZ9b&&_NE@y*}h}BPNW6RA=K+xW6)ld72 z3BDwv1+U!gwc{133BReQ^o)k6!21vQjjQ>|h*{QZ3Ik~)&@wC;(Mu!J?#-B+ARGFQ za7Hc%r@Qqi?5(#OqrOj}f{2~5bT!r@5GImb|7*rA_-K5@tUQfp=pST6u%Y=Iopl$i z+)=*J`rw`OJba0e|go!GtbCYOM&r}VpCA1zrcBDX3xeZwarth9vod%SKqyeHuIZF#|EMnRtP zOX`lnAwr((?jajPra>YdbCiV34PH$_iTm?Dj6G6P+gDa}>Mv zulH53sAv8Ou&38rakJy-Z~F>#X#Ln$GjPJMxAjlz!1B8~$XNvnV+Wm6Pnbr1ct!AHQF(-R?B5DH!GlpOeI1x3dAjQn?9^5@3b{c%rYd5HJvEms0!6$zynQ%zM>-7&c#lwm>VPk>U?#FUKfWiF<7fYgvqZ#O~P^H(ch8r_HR z>AebxTO`}pMQ2VJHi-f2zFb5(o*KGr+Uhx21fxF9SE7d3Aj-1zPcq$mil1GI%~!T8 zNM!nOC?+Anks){r*eJE@Neeq zzaB`}vz`%X=w-X1@X93DbF1$4Dq!%nPg&PTQ=d{+OHdx4qTlL3dbSk)Sg4B(-=p%C zc+BwUt*`vYn#Ir^L6xOU){a<=K|3{yl(IrRuTrfxU~yFI%34EBl?B-B3NV z`XX=R3qi!a88OHMHnuB|4|JdE6?@vn6k@cK&D)022_9#Yr4F=ItVrfxXa{R3EqnTG z!`~j0^GLgNyTWlzY4i_{Eq_CDY+=u5F}8Ph_laDh;<;nu;5=+f46;LNguY&i?NKeS zi?-_a&t{liTa{2oTE}`|_paqWApgE>@TVR8-K_lc{X?Qz5`rlpC~sYtgYmPYZT_TnL?VGzQZJsiiEyU_%0gQRDX}1<9BlUcarkf722_A9HpWX>sy_2P7LY zA*HOQB-Av%yh53J4r3^z35}STZBv!jfs|iB;R<%VGwUNQ-2p4quM=c=*XW}0PSMwu z<3MJ#nJj`W1Bb>afm;*x;R-wHi)c3#r}oYdME8?!<9EU(H~;FAK(U%q!L^aSz5)GL z4DAn6{caI1K=81Cau56ZA_?}7d)Pk@NKn)77NP6bb&Yo#g&Xc|I~0=2_kmK1pk9Es z0?rBpE5Ct4Hhz;K;YC@eO!>486=|Qv?#%PAvj#!O@l^PM*bdWDxDc7JX1K6kFV}VM z<`I-sw5OI)@D-%xRfp>pJ17r(rKO`uEz~WKaDnr0Y6?~W7v0Fr;{V)K z=crjUun1wxu>_at7IyKKi95-=nD(Ft>b5#}mJl;^+@$NCoq$xGJ@8uTmL0aw z)MEl{q-x~nNo0@PPx z%$@Rpq^LzeaoHS6>eGDYHC1JrDGe zrOnyw`TcKc&9^?Uw8F`v<@2`ytzXZeG{u&my!bS}QS8&oP&C^WrdXlVyCJY5?)<8L1b%NIhrMNb{U5>PKZRlaVB&3yk0x4%Z&(3nh zDD>T1h(FoLdODpQM8nP!MK)jYa=yo@z`9pL#4e6jMk6D~zfSp@Zoa|p)?Dpz0DqI= zPDZQj#BB`W5RPBn(`du#oWJ&=bpZJ*Uc>cH{ca<4!0&HF=R3dKh#r|{VeG&a3DJ6M zI-HI^#@6Z=ngj?+z{TND1bvMDQf$<2yHtzZDjPJd-zagVdt{HDR27o$kfg>~)=%)k z%h|wFEZXA{d1Dcb9GG5}$es94pEeLq&OajjToE{yw7NEMbfb`IuA1PFEd4)S9a7q@ zM?Dh8-w}@cW>}uTFFekM6`2{b7)s((`B=L~EFRI<2m=x2ju>IX`8@jj*82vsk*xCZ zd6C(#Wj=S6I_YST8Lp8~GfjS|k<^y@HMaxD>aY#~w6+1c*@!_iOKaeok*SHOvzZyt zZe(a}{lnSY2H&~~Z2x7%2Bq;sWjSERCLM6Q2e>qT27FcDRS?J-Xb)dE0NNUuloYsW` zl=Y4L9x4We0jUK#M|~44a`@_zoR2MpV{pr|EOT=i!~M;5$9gAlHG^EfisEmezAUzTmZ!e&~<^Mh6LwB*ftdEr3^2795e@V9;Hl}X>2S@}4 z9Q&IcW@gra)|(qT{rl&O{O&U`uf42&34xHDe}U1Iz@0|4h-}M4HhMd%5gc%%1pGaT z2y=%C35m6U&RcL0u^to}Lkxvh%NQ6GB{tMk>Osxb(=ZhMOY85H#QXW}prCNd1JCwA zN{IcowcU7j2e$N-QmU-^emV_pG0h0$7Y4kC?AL>{Hi!w=iHQOUi8YA`H4{Kzveb}} z?2K{lDBk@>* z@-z608QxG)vU3)S_x0Tuf7h+i_qeaWe(uqLXj(4W4|njYgR7;lcepf1r^0?-xc)-S z9BxxTsm+>w6Hg$Td*#4M@{M;25g3o0gL9Y;#ahO5FIO?#Fv%dcIQal6C%9C|wfU{b z-pSKa>?F|*n2!%uVd7Ya`^5IR>6#Go1g`B)XN^sHaDIBp;A`m<6Bqw|DYbXHDQx8A z4r{ro?Nb*eUlKRWWFU8viq5%SlLjZ3lKS+lu6FkhJn{H4E@`!>GK!K1Pa1@(hNgCg z{`GJSk2LXqOSDRLo<>5$xr!ncOn2#ASm>A6_{g_j@LrF;!vy4J2kGB9@_RGfzxJxp zI><$8ArRGE2n3@C0uh42uf;(inZOLqLL5S1;w}^#x}p#+w2t(+OLOj)W_NwPD?%Vq zw$*_&JYu#RFylnygnkNF=z&UKYYSz!mNPW`k~|=(y4v$q!>gU0rKV*PVmhs!laru) zZ{)?X9_OAc_s^gA3d|y&KOb@%PWlqu)>f}B;s6(5)I?lPyI?o0{Fax7WFKJ%LFhH# z@V>6rSGtQFYSQ$TKZ^8RgWe``GZ*E{<^s(aelfkYcB z3-tc7kM><$Z!J%daRN6dSf0LMkd|haE|X!EK~#oFA_ccrA_Z4UB2fiPsv$|L(Fqsi zyzy(8if=~2#rSf1H^K5v#r>QjUdBG?&JES&WB+1R;9auM1MpwGDl4%(IR8SWxR zL3$OK?kX_Ln4&!F?q(V|aKunz;2h-~;k*YuQT~Me!72c_z8V_jQzExl%6Vw51L-vD zF4U`;q;x*$e1qTO$l?*ls>5S%*jii=1jlF{{dR(O95a;RA$PKKykVIbzu^RIcJ}n( z0R%!e`)Skcw&C;V&(C*KVSWOd!dmb3o%XDj6Ji2jnHfX6LyNe%L$-i$) zTmYrOFMPJ8Db6cO;C}eFrlGW7w9`K7wdC~191(IhnaP5C`9{2HjbY?IFET;x*TfgS zL6#vUgj`4t2*sQys^%BdWEbiJ)vW^cn>d1M!Jgmga`N;ZtBVEY;htEa>4OH2R zFEyC96Wr4yihV#7jc z3_K(q>4qDX35k9s{=XPIhv-a$Fbl_j{KvL!8y$7*bexWDn;qM>t&VNmwrx(&tY+rS zVivWlbH2AW_0?PT+dkK9K8}?4aFA4@DBQ&e5qUB2F_Eyr@*y($aIFty9Quc@ z*w(BY`v;7O?>L|fKeu|LPsHytzMLrLYwlwgW+{Rxm7c-!lhv1~}OX<;QTx&V>G-hv?dUPLwBdi+HkJCeEK%shC+2ZDU#xJE8i!xQsO&e*yCv-6g%Du&f zot}Hv&2HqQoh%pPKxUciOr2LS|4bCq-pvnmf-zktvOM^0a+h>psu9N{n-6O(qF>5N zVz%9mu4pm7+hsXyGY2d02TyFeh8CcP(U-lj!->pbV)X}09&R!)z?+Zg6#+ME$&{uS zYv~IXDs!#n4z|QO=m=ERNx%WEjd%GtZMA`o!PD;3am7$ZE_8*&q z^Ej27bm{OK2G`JVscIKe|0LOzWli0zZOB5POjKi)F>cuN-gzlh;sU6%+zs0vFTVGp zH+Wr+JlLSg9l|ky99z-^o~TSq;6_kBJ2!1E3w==(0jF%Zcu>rs{A*F{`4$;n4nHajgA z_cBi0xRs%#3q`EXiq3BaYtH7tnxXlXh~(fP%{rk(OvfVNPn8vB>I5b>V`RQK3@Ig(E~0BTl0)ukp&64trGQ zeaD(0I*CA=df4<(_8=rZ(qK=VXSVm2HFzj90Nn20=;W0~fIrB6{mV&tN z!`m}yP4a}6AeqmB<(zQYsy{GxGtBg`hp_q4hpq&uTDdUOTEN?Kt!qJZJnryT5Wx8s zxztWZ7EGBG_-wUo{ydPyM;B{4tjiDc^aZPSGIY2PoLK|NzY8SUpGba8|F`^ws8kc zR$EWSJ3-89sV8k5_7H~AQ>zs zlWPh5T=<%J4K-q|+^V0Ky~b&=ZpRw_Z931@G5>Id6!_0`7ZK}Z7g&W}BmERdvAPtrPa;@Qs8{zT;`oncGvF}M3!#ysIe zFwo84!Tq({WYQ`DKC%yRG`t$!ol~x|nDYK@Io>Y`v=_)QViA0E0bChbProB*%u&T$rT_Wuf3-3n_cN=S^%Mcs>Ksb4pry=MwH*G$^rrD&* zO7T33G%LKE1S{t$#9b)FbNMpBfgauX8Y!3^`T5KPc>$%aSO*>88+YM+fm#*_DmQC% zI@3R`sU;Xkfe_r$5K7dQgaWaR0>jB$` z%(4i@*`D&y0H9&4QQtX15b#XhaC=$bg6%H~&5xt@_{iP~rK-rF8HB0>9sM*euOzxG zTb(Xs{H0R(o-YgmlH<`udYF&jItAbf-&VD%1peguO&WujJ-EG3 zpmnlq+IUG847(<$FyAX?KFFnkUTbL=R-P6^ohtpH>uxRZgmXt1b1n7Bi!kdz*Llj) zkP9lZZ7pfyw8IqngtnJwUumQ&ub-7}4avv?@umw$Xi;jp+ncb!=6Vnf-k+RUUmaL- z_cFHf-6_mfx8fzRBMR8f_r`xK32m;Itl?liGdNI5(U;W?)iO0)cN*D-;HG}3)JOUU z-~J8|a1U857nK_>*9E0c*!C+g|8sV#7S3ZY-|q&Y5Lq`pk&oA4mBUP)^-Qc*Xm^sz zTre)&OB8*P!aSkG)Vn@)xJ2n+^>9P|@Vm3@&STO{dXX_CE0OelbJvtjAbB~r_7s2o z(&4g91b8e~Gt-6t6f>xW!k}wEfvh23w-p=rlz+?84pY?~`4t54YnPoI89G#feo{H1 zpwp-8XBwf%arH+P8t1aCT*qy|r7>>{1Q(Gpo+o|mE+}Ogz*b?+WZXd}SF2Tf~a=qi5FeZ;wAq zoFBxJ$p|LDqSNr2bD7hr9kffjyiFYn>#m4(xpk9$9IQx?apf3bway;?(eGDD|?q{6sL zyGiRMNOVH8(I*C_g@|&$`U#IGC<5VKb-f80QmyjMm-yX<()2~FTYTv;n^Wi~b2u}v z-HoVmNt#z^ptee?3ODrl=05}V-sy&wfIc>@;jL}C^j%799g=gffl~$nhyKmvVN#zXk>@m5Z)9ON?ZmHO?^r># zS{_kuoDd&3llf^;9YJx^cSLOvd%ntqpH`~_J5ew04VSNoug!Um;Co?Z&#wK7(dNcY znNo5E^U!R7L_db?*#c~^@+%&=AbF**xjOvA55pO zveNHdE#ipN6WyF`(rNi;PFHgZdQwY~60gm@Y`m;-Y(JqS#Ttw7tmzo!;+HSNE=F@F z5nLyH67J7uT5o%pm)y6KS-;oK5GLzzL=*=~?sL$!yotEkOdhB)(A zb_S$vXECeA-CvqzIFnj`M;mI<(`>$n@KG!SW&6dBg~_oWcsXuxn1vt{CPpKOE+>808+;2481%fTg{i%LVblS&8=?;+e-ijBzE>7fv{=VZ zi6}HRVYH0b2XWYc;ICEB7JDY=4FX&`=HL+~{ph}iB(R99rFC0Dc7M;*rEfz8DtYRv z+j*$1cz`9pa3U99NWpRZp3RhXzggu;&1B3~!@Ho7t9R63p%$_Kd{A>J-1kdlr+uMR z8~BF3?n`gAlC2vSi)0D%wEp(p$|;=x10qudjujw=RR6t@WH%!>)oSUu{n`ZOd!Ahz zG_*_F;Ada}8S<+y1*&Uie1GPYQ3QD5+>!veDE^CrN^gz!QmZ<>3Ie&SSRT;tJwe8z znOGtxMXEjU_-cy3bscb)TV{MXkH;jnZl_T?`O*V;d&m9jRNO%HuERjNd!=pX?~ei9 z_cjJSMVe#UN}0SdJt`y|Hm3%mmaF0Ma;)#ok!Xe+_j29cMJ0DRh4IK5UX=M`JUi2?Rs+~MUNa2~nvn|8)-o1CZI&8U7d%+) z#m|Rr4Vr&6RmI^+gim7bySR%{+QV<*L+Xem@PD~4yz1cbuC@bR^!>!v0^7WGxeC3y z95y(wI%0+g1kqs-+*Db4{eQ?XbrRMyK)d2OV0cR**_}PzNXi}H8V2v4Imc(@^k&Je zKx&|u$%UDwSjZHcq8GHfnd~i2s-a&K5u&`mevvb2LWcN! z!|=7*P+MqLYIax}`W-Vp_9+(+uMtLo!dSidf>66ORSly(0_;RRBuCitFdv1H*jPDQ z;MqL4_e*Q|)(}!rgN1HI5B?%(C=3UKVK@HtFhjYmNpM3^JqT8?(SF5`z+w9N!LBdN zW%8N|zbngl9DUl*18PyF!g1ZG7`FzF^2aNk`FpNJ(2Hs<@1`F^@5 z@tj{Wf5?Z_ghMf#f9ZC0>q{a0yP1@%8Ioz+zAv= z->-{snXTUz#E8VwzW)OOE4D0*FwE4xQ02>Gp93?R;(RyAZcFb+S&xfVJ^K|#*%gcn zrv(D!ldgeg`}C#HRAxX28T$iZN{c@}&PDHd zpP|m0=ujOWwt{dxt#k&uq=0fsmuk(g# z7w@}*tgVsl@$9{KY*qD}oFgsySKrh4B(p*NRT>{*3;U)h%&kk|J~MW<6Z-B)0jo2tu>2*Tr!lR-B3piENOn|_6fxaLdhBZq@eso5 z@TZLh?Fb%3HZ|k(m@p2o{npjuN#$PvC;GXrLU( zo5^GXY^8rpC+p&$>!TJ{(1;#Q>J9WoSDQ%>|DC`)=Nj~?GT|82FHD^_il$Qy#qDsW z0X+u~_?{&=bc7s5lLeKGVPK!=l*NgU>)*P%z74>4U?{mLx6-_o;;enYn?z2uOS8*A zJj;^GT~|v^VyOxyHFcU)<-51EaKI}skKeju|21m=)6R@{PxDcIIM2&{>NyBR#=of& z-~`akc9Sf^)^R>88#R(f_uP+>G79K7UOqa+Y zyRL(zhmd4IW_M+C_UFa%ZBl2tHveLfYZPknl9mA0Z!}|jc6#ER4B~E6_nvERhS0|-mprXrrxuHhJIKbFp<|v zF8*j?&!W+#bsD(O4#RH&I+wlGBq*3snXZg=pO>uwrh*xnjH21}7*+scf4d!jK7A=1 z%bIJicCnr1=lj|Uj$JPKfuYXVUbLM&|5GehU9K@aV~&lpWa&5X)Q`%Xme2MSfg6mm zq#?nw4Vy5;he%+c=EJ5p0^+$ht% zRm?SW=z(O=s=b9T(JV$(RfXu<7tc;v{1*&jJ0DJ-@>Yb5@GKE$+x#JkyDFtuoAx;q zL$@;WZfVQP_X2U8K-!!f6qS=$`Bkf=TNS7vn)MRt$DBBN7hg6Z;hf@dP(u$+$Juck zD|rZlWx{cUlBn;gt0y4QN)xm%4URmPaRM*CW7pEbMPZuU0N_Un&DOV5;Q9>)^zs(< z{y`Mx9*?tJm1sPx-uuCC%Cz+RuXmm_7}W!0e{4z#|Mbgl>NRIb+sl_PX(D`210FnL z=&4uOu41D}2+g)sEEd3KLimaC6MuX0yWIZpfkYCwEtFMRX`UoWz~HY3(ZxgRIVet#1xA9AvR-voJPA+V~g#_KxnMx9K&x{9@&b68H)KSZ}u<18_V)DIel z7Tx(Pi`S2xA=mkf_W@ZH3bW3*Dtbz&?u3fnMI2+wJN8-+YF^&6#^C!1J=OPFf_0~4 zfD$^L<#P0|FWXHz7=w$dBu9a}uD@(!SLovb95SyYL2T-RE7p-fNrJ#V1G@M*t+vW> z_e*kiEiZWZa=+e>uL$Env%=XwW8A%Gwi2{DCxVqv<}RVkO>=o#NB>ChJ`nv; zK^INvxyfWN)Fn$WdUAp#HZM;-0H+ECvBZ$=X(zbL&(ZFK`pxlOxC48mzx!e$37`jd z)Uo%ikpwWkK0kabpzi(}Jo~?b&-FW`;z{5oR`a8eaYs|<8V+iO&Bn=c@b0UdeX&z} zX=}WmvSc9f@^(J^%ziB%CUbriA{J{uJ}YCHZk5%DKoF=zG&>@ggBzso`o4vV8U)wk z_0`R%a<=es_JsQ(2z;j+Wk(czWnvh*YD8tKcNJ+_Ve#TB*@3oe3LbAG9xYd09L}}r z!(z$tyo$FBJUIRtkyXnuwNmdecGQfdS+`tG9}v=c)XOU2IgAMSvij&e2#u&mY@?DK zM;;KQRPk(mlyZYjw5#cl!+hi}&&aJ6Ufa2p!nVur-I^^D=A3DY9d_aG z{P~4mlpdL>G`76rrw4BpWCB zGwDH&S>p@cs8jI!u7BHmYAiz4DkTs<5?ZrwJlBOgCx730xx03>sH8H-LQ{Ge4@%`U zv`ctQhwJjN2_$QIfLLiW%1sEx0(xK4crqfI>Lt!x5bmb8!`onpUyDYuqB7Xbb?;%~v3IuFkRxhUG-|55q8FaJ+L(R^=uh zUpWqWZZ}{pJcNWFrKSwhMM>uw_BA575f-}w z?9aQSo#7J_;$d(d1cC#Y>EA_5@KGLP5i9ZmOvOS*lZ>fG9@Ek2y*Pu~`SP@7M~BJJ z3@cQVA~n|rGiAJ#K|_N27lKd@FqN+8*$NqTq{qyV-X#1tl|>iUW@&lDC0Ka#^OX9%NAKflhD{7H)T4II|Phxp$_CZeQMkgvgF%?1CwP zK-+MPQ;cYrZUlG2fs5qp2%xKAxCi)jCx&ZXa^cXgRg z{2H{WzO>G7a?yVDtxQ^bB%cNHoc2>7QOj~t)#c+NSA$xP-Sn64mA1KYQo|EfHT1z8 zEk2WMWt%pcC2%&I($SVTDpMC2)H6F)q|CvK?o4m*g_C+&OT?&{TnNnf|J`v3YPtvj z@+g&9h;6cG8V>Jo>)eR(XKQV0F}c=%57MQ#o+y_}cAPbH>d8aL+W549tMl@v)r(}b zbp<2t}@EuVly)=_?@@Q$?lDxa*IQ8py@MvSTTq|svzHou zo|~OXR~iJI)t8PkX!~jrE1Xg?ZgvjJE_7FXTOvA@GVXD*SWH3Nq)+%y#4S)ydZ+Ab zz%`l|gAR0&bVIjOc6$75K|LbIYL54z>^wB2PfzAYvdw|k+Aje*Z~%g>HdzZCCdCsA zSnE%`&~2aEuQlIe15!%5i;@XAJ1F07?E8z8nm#J=)7lAys-B>ot;y3$6#re!K!k#h z8yA)|QYT(jm4-v#USI6S3<|Vtda0xvQ>WcsRUSoTFcvGQHuOp@_1|ViEq@U3JlumEW*^?YCIl6 zX09T41Wl0da4NTY$fq9%O12Vo3w4+>2*~QWevsj}hE)Fh6&vkxDSmFEI%8cF+WDMY z_jkaea4ZD0ETC%`9k?|Ivkg4Urp6`m4w}C!Q)>GiyhiR4*BwN*2~Vi+dL=GKML;D< zwqP9WW1t7h6`V4&I2?L4#U(vzY{MCvAKL!h>G_j&^&*t@uwONF4T_rB4i`&T8Rp3G z4XM$$t_(s%9Uh%@wY+t&Xm>az^O|oPfGXmyFv0x&Y7L&NQ~tMe$95|2w`upVE%WQ| zK*YCYHD?dZ*!C1(pLNPVer(=Wbfw$_<~%;0YA+ZUrZWsMLsBM(Q8vfsjkre<)BL^~ z`tyn7&?AR2x-(UDncV?b52x{`dCcNFf`Xp4({I;tgT9(op6Q7*wa!7UKhTjY-O-@H zzVIZcT+lgGmcBv%r=FTb;?0rjA2UPyZ~Q-r#{bUF{PU-=Hg+QAs zhv9C_KY|}wTpwSygKrt#DDQgTMJwmWw%?j`A3B8i&&$3T$F^V69bdiOLovQ@zdl?) z&X%|Ey_6VS!zBnf8Ozmd@)F#1vnmah{D-t1$juU8avXAfk z=1ZKNu&cuT;?K_o$N9Jbo*RA6U+%y!-yH$W4I7Q9XvjB*06^#J8Qhx`y;3)%W6#wI z@3hU6CqwhU0&In|!q9gu3gHfc*F}SdIQq|x`)UP zf&5$;iLZi0E-%8`BZ^_X=gg?UDRI6vDl6ynrF)Cd_qOGQ$xoEAc>?zxfWE%Ycbisk z;8H#ZZ1eVG-nd#OLL3Kf@TVUDM+=CqF^{O#l8#6OG&;<;XCM$YhpVbIHZD{c*b&sy}GtAYi@@S z9xd2M@UjOkI3vqugo91&G8o7%`!2W1&~q!^Uj#{3IfLh)1zk25-`N+q_$;)kgE@fY z%GR~h`^yp1(_r{c*0DO{Mef_iepFwERz7=GHr+qHuWJy{F!t9$EmsfCad>6j4-j!0 z27hkT2XuXqbveU;!fMa|&4-a@NB=bc1q-yAchZ94TiMW!Rar=GAky5QYRO0T2iWLy z-%jlco`ab_)>cPCJNJGNo`DU?aG3nI;VQw4JHB!LmqoVIqTguB^yx{7vF}(++otf> z!*>uL-7y?MwY$MZBl?)b<}U8|>#0{jgB-+?g60afV*YpleUMt)+#sza{MjoQFu~>) za0M}786A3d%Neq834obrbRQh-RdW4tDkv@KX z$@t-B6z=*glz)Lvf(cnLpHZ(~y=!Q@{-X4<%hXXBxCFM%hX8}l%D8J^Iev2#M{ofBv9Vq z0MS{)Ws8YLkr;k=@g^6cBDv{EXbp~%<3I>y7{3%>3aQ2b{eV>-;*^eLc`dzQ46SXj z6Zef5)1g3x6Pe)Sq2U1VB_mVbmTR+`XmC|ai>MKK%i1z>`^F{R?f_VfIgf}2yaxa( z)+3Vi0|23~yAY@|J#vk_m!=-DeGh6!fA@QN`U5Y|5r6{5+?*LqpW+pY@6DaVrmv(*yVl1+z|{#gh3?wYk2=40J6wa}qE`Oh2zU>y zzm4F-fnlosd!C%Ik>1$#U7gdVSAGDCxrvBglk~{Xi+ChuuMmLprw}Ctfmd?*(;6DQ z3&G!**-!=g#yB(RdDJcZ*C;DWg3OKm;k6!vnuyv_vJ*C+n*`q&#{8?1Hx}8C$G{g* zSqJ1f%9I3K7fP~(=DL$#HdZtOl{T?JsM7mDZyTLJgwumLvl*D}iA2KOC2oS2bt@W~ zb`Ql%$N}i&y4_xGhj_e=*gkgnh%Bxej@kYrTca9Nuw7fBL?|PtS}RCA4G`p*nPTIA z9h#t>7_Qx{gAKhMWz@Y1X65-!n;Sl>no`vw48a3da4NS!q~G=)0Dln7*I~<8j}uwD zhGa@w`VS_AUo85m*fB*SgXy3%l^n7=Y&XS&AjT$>A2Ol zd%Cq#DpNS~=FRMz;-qhO?`=VEC!EfUdf7h&hB1TVQWOGUpu=Ve0MNGI$nyCy<)sN- zvUZ%D#Oy~%xy_t(A@=!}&LUx$eaH?DI3N>rAQKcqmP8$2Feoqe<>HeGo^Uh@iMvi! zT~TYtR=MpUi#U4=`Q~rg4*}|(9j7^`uhU6L_3d192$`-c)aOOYg7}Jz9slUrg0R7QOJV0}R7c8#DtMt{{z z+m&8V#wC@?Em2@wv|A4m8DSsL;{()(gSu-4E|AP3-2=FxXuF>{Cm{;RFlB`KkUF72 z2eRc20NqrM!V~H2Azas*7n7ndY?|J}Go6iQWGI)-EU3OKLD_X?Lb%q8>%Y=w-Z!Ii zqd|dfuX>>U&9|NXd{6)%jK7#6dCK<-_AO(k!nVqMJs-@drgkvc1RaWr_Wj^qk=2y` zpU`sXby&agQOR4{VH7b+nvr)(!-{56P8aS;)t+N5f2*E{JH`?C`Hzl4z+d;&z#0i< z29a*fqdr5Cu%isU4v6kcN`i2J(Sl|RaE?7aZFR@G)o%0#7Dx<$vRSil^#*2%fn+Ma zHPL2-x}ySdNN4S+M|7mscflkB)!pwHRz# zwP%-BnA;SfYDVe;P`K(bQlEZ^G_Fq>#p%wsJm$Z-l6KOrFShG=%bGw{+sNm8{4l1( zLOa6Iv2^NOg`?MPm2f-wAkZdd<(rx5TQfxQY(beg?fnvHg$HK$fi-z#hw~cVfEZ9p zCH@3^10ygCuwoso#?cBMZ4OGcYiUb?FmR{04A~>371Yn-&1_&*Dln^kBz8VuvxrMJ-JE!&aSWvMi8jP&}_`Ncw1^_$PtAClN5$u_1mdP+S3Ds}17L$MY(F!h8O|$-q9PYzI z<}3W}*zWrS%I;I2-c88P^4uDGorUFVfB!|Eo`n9;i4f7vjsbTfedv&O7sL=q5GsAd z=eF3&vR39tQZ?5wO#Ql7?nY$$JiG@@uw%<@ZGFLh{s4`w`rWqg|0S9^8|8&D92gY@ zg7M1@tH@VdSuSKvY6a&F^ETqApm{>=GQst!N9SxKN=G_9)roDvrVlM{UT**B`q3^*bz6y z*4O4DAgDziup6`pXxip(}4i#>p@B$g37-Tus1uShDdV_kBKurLWp-| z8=r7u`dBj~q8HMd?|W{wIU{)B1p16Zm3Tn_KD(d85GZ*_y=rA(+7VKKtzBUpBzXdy z-a#_R9+>$!?>_h0&#CPFEVmmD`h*gk8)sDD0cXPROW{p&L_=lEAecLg5gR%3^P-}w z65u1#J!6AX9qI|LK0V#Mhk8LTUr`piM^cDVr#pMjtz7MSSBVv?RDBq(XreFgzx{HW z!OfN;W_+7{zL`Rxj^oORmS1c7z_xDWLu4gwS5eQI+Eay&%rOK2;lMy1SP$7ZTS8i$ZwEOeL7e~8{gQ!4=Er$9 z8s|;m!^49{M7U=*naCbpbpvoPu=k~fWSvz+aX!Ahe)m@~ZmHI%)qsgVj7#39s{T5i z!0b`4W`pcIX-n^~ej1%oeMl3YbG1)6^&hAbAqDqpOa7SW7f&NMqf;Oj##G9$iwLK-f#dH38_c` zSp7+m|HbCb4HoX-~y5%YK_5({l23}Hg+P*gbIUMx;;18J>M(l`T;ybS#MUZLT=Cg!%E0# zXDCOorl=K6P-PWr)3@dZ(9V#~+d#F^5aX~UCTDJWq}`nF`H~z5(5_U>qm^=ENmfTBMLsS4eNLmG410i9y=+9JW^k9 zKQ4|OR{%`%#Cm&)-TZ;-cS*c>Z(wsLZ78mm83w}sTD?K9vTN2dwEH%nw@r)i5cK4Y zzTQ2y?I{2q*cK1BS8ukES6EpA`6HfEkjqJ49bqs1BvM*-`CkvN*hH2(kIFwRS|vIN zJ$J|dR9<}cnk;wAt_@+&XjYZ}-k|W%{^k$&`1g(wJa}$WJJE`stPeD@AAaSD@FMMj3;?YZjT?#K(Z zB3ZBh4)Dh0)A)&y=)H)kk%s@zd{tAs3WvDW6tA=dtuWuPX+jOZ%7GI$6^YP-HkFGT zX}SfHsNs&B)suxT)|(l$c-KF`O~Lkhua^wvji%ow1aOJ0eN;b^LXeWYYP=rl$3t*2 z3;fw}CKY4gW|#DiV;=Uv?MGFW&sD^-E;yee=jP?p<7;NR!x)pImN<~QbSTE|9 zJ~DV$2a~8EnS@@iVjr3Gxp#r2au%t8ws16G z|4=K)vn!LIYyK^T(Eu=5S4or;)wH#wY_nH5O5oPr@1VBYWbeIR%r_X2!N1eD)UGv2 zFqVs^vEji-9(zid(ZktpngnWEH507VEo~Do!n5)`m-sgzn?n25!z9L=XCjYpk`ptz zPHEeN87EH-f+T3%PLyD&LIq*jEB0|fn_!`$tR3N`K@13~h}F#wqVps?4Y9WL_l>2# z&M~-PPQHn94%u737Cw41uPfBg-1n>+urz-1ac?*yB;=WyTR;6~oQldotEdN-UZlBb zfUe5KqI6belf$bQi7)9COiosuE0%V_PM7wdU%2P0)f!6dzyb1yH%TzS5AmCxe)vs1 zoctfmd~u@mX5-_;E_@1Ve$*Cj!u@zURqb`D;n^>mJ=h*#DF!NYE0Ve#1cE@pY4v5iYP z8vE=8%a2tXf~o^)9Y@`##K5tzX1>LL2?2+I(1c^U`}RuK;nf4)G_c)i7YulyyR#dj z{VQ^ba>#F+C)h`()=JqQdm&N_%m@n+pmphl!AhYNGKqe!D>g24{`62xzJ*)(`|Jx2fDzlCbs8*n$c->c>|IO#J_oU%Ge#np)JuUHLGeRj&S0R zlYggmh>-`ui4V)-_hAM?wwP(-6D`3={5%Wx9j7@}t+>OeCfU&ar3U{+)3KTbpR>d~QyyZNQKY;z1hALbG%(0mL<)=6MfX z)BssbN+nG53uhk$J;_mo*e^!eNmk#tt)Y(}^%3lyrm<#!)R>%(0YWK%WM0H! z?~!<)-;|>y*(6*7bXj+x(GwrW;1=E}-<9N>O0Ga3ci|vn^nzL1PttehpJ5m$c>MsV zCFLKFkW4m=mCe#QJAg1iOj8$2L*ugiLm$o4SZdQ8zGmbvqz&ZP;f1jRN@Y@&k~dEw zPsEtvtTL`HJ0uf$;6Lqa5e88QjgYExV!p=j2*YjqxVZ|JAJhhm-70`M>ti*~!z4wE zJncc<9w6U+;$9-S;LTee!=D5?Sz<`SJ6c~u4)0t~4|wkT##YUr;*~-2VDV z^wy_o2R+@%%yYMX^w|hQ8Sa=sGnZX}rK}I~$%bNEa@Sou ztCE3Ip19y8Q}% zBdEsl;dM8ZNf;08qdq865XJs7Yt_a@zY0|~L&vhH?W0SX@658{oY)#>3AIaFTX>zl z?U`+Xjc&jqKaN)1O6AhHDlFIRc>DL&&-XP83Y|xOREU!_a8W*`UC}^y0EXE>BgMpe z9UPD_c+5B~T$jkt=vBr*2Y-)8u-2+gIClbJK+j+YWIQN)4eJW)NMb}1y zA>AX#YQIqRjK0>gR^M^|9BR_4$ZQWQoeOU60OrR+qRghsxjiLX!E4&4-qzzPpL&_x zwQJP@s3ZGzJ_^puxXOS58=`k;}Ra zP? zRTw^YyxHT|0+b#-$_9AxN^&;I6@fyL)hl zAi+HZ_Yj;wg1dXr;OD|50z0dh~;TemEwI<9t>#Z79qejhoyH5=} z4n_`5X=3I%Yp)xEW|D+RPTRYGMCVQvi8^7?g0LgBNq}3_@3c_8a=Dy^i2bO0BbQ@) znJib||I~ZGoSHDd>|}J+dM)&&83Us-@zgm$u&FAlow~f+Ga%Kg_UM?SE4Z#mFNv=o zeQV8}r?Ra!_K*{GSzye$xzlxHns%j?MpFlN%Os7)VCJG>I`Z7k?yH}6R-O5I;Y*4(NIAmb!iUT>O6Y)$O~+i5$rbls9_;lLRwwm%f^EAP9t_86@_3RmKHe%+um z9g&#Ga?|k)K2T~g(pW%s0=BdNqQzb*wGmAO@M$T~7Ul1?!u-$s=>OQnw~On*=%mCH zKY5H)7!%~DrhbY%YtN-8Es40A`Mt8lv-Ab|-6|)t1AdBPfsz`V)#%BWwxPU0$x0>W zjf|m^c#@}@N`%-W7H8u30Uf{EiQb_#cT7_fE}~I~hNaspW6X;R?joYLBUHgu$A|Xn zt?W8RYb%eDehmxVKWn|C9E4og3%ltxT_XPH3I&@13a@4)5a>HFSb)3ypSyclIygH1 zNp1!HjwF5kUsMQ)0RM;b-zo(1GW~#tTp+NEs+1V0Vw7|b_yxgOPD&hLy9T~|A)e}g3e-s*6F862;*^~C+2~KP1 zJ*Kb4!7z#qh$#n%2N_lxTawY#<8xv@i`AUYG*JdzAdgab#QTK6B5Lz{_w{#zL*m6H zL~y}kAX#ow1>yZqJ*WEb6S;BeRNupPS@AYC9%Q|`UQ|n6UxD}qeH2tSvsTE}?PWxwL5N^=>*WHC{??6iqS#&2$&)f4HBJ zC(s6B8XvW&$|B@2qAdP!f;H2oZifj6b$$lNQk+UBz{xT}eQq#E1-c2bHX@Z>$;CvF zz%x2iZqYr)fxm1&JU;p&QDKTjW2U=Q-sl>&OMv23I|*Sy9K9k;@Jw`KNN680VU{al zhHKC~v+@sKx#}TeJ$ZM7C?!7<&VK|uZWR0LcyDZkwfVjPAyH8lLUl%_ttT6<$vGuG zPN)h)uF17ia_uxlU+u(&z#;^sUA)>m4dxO-a$-KQ+S=R5*f301bsQCyji8l@IX;60 zu_eKLe*1h6lTQI9vr6Y83BiQ5n{$2GwD1>lvs0^6!^jpz3aq!QZfk?su$GpJMPc<4 zYT0m-$4<?Ln~f4v)hP~KY=tVz@q?5 z1qb}?B+t8w=4;CZeC?E$I@euIn4h7ol={pdfFK4Iq-CR$LKnpu&MC$OUx>TkXpZt$ zBedQwzKE%;E;S3mcVF$a;K?N?`mylDYkhGLSmdQba314L=!}kKxhCCqc*3%`W%*i*)T~?a+XDs2 ziQrEjv&&-moSHd*sWy34WOOPKeGVFRpz`d(GmB=3Yszheo$lVM+>F;$yLWqwT59Fd z^8`!GFjk53cW9i}PD_}oHT;L}20VXO&?8<9=la%AYV$9S-gW`L5}X|R%3uEE2~A1} zR+z+yf#aA1TYyK1vh`tYcGTKI``G=?)}cJQ?Vm&BOfo zs}{kONusaV*%u#w2LHl1rb6no~MzuLlQmyk$`;;$xOR9E$TBugM;>A)3FlEG8ynQxU$z^h`Y)e* zjGYGiWtgarSK26KoCc7HOn%@NSw+^{eR`sm*U&&ew3>AzjO_#T!-|-HXSJozxH^Cn z!EPasMXtaq(q^{e%=b5x_@Je4bQB|Ypau=N&x1zI(GH!D1Ew%GM-AH!<$6R^CTQCi z0+r@bSXSv`OrcxO14$&YeU|ATuzc=*Gkq=@Fzqz<+8V?=JUYrPWd>fU#$2NMOi0Pe zYc}8l226t*E8@+F3`n9S4~4(Y#Hp^Io}RvQDJhMNUi93CfYvASr6zQSV877EO49Hs zbkP;BB&3h+NGF5@A3NCXTnN;E|L)}I*ghrzg@$k2UWGTUB;Rzblz~-^n-GD<0xtY4B5qXA7;|O+&8)~My}WO znrkDR-JESm!xkh(QG)Q%b&&Vhrrpq)=zu#zjEM_Cr7~=I=d8^dY0QzbtEgD(A1(gz zL1fnLP&@)%mg$=vY9TItBC>lpV^wRsT!LwN{D$Hb{TuE~#SLwe)I_((8HQ{mX=G`5 zMr6jiyMCM<85krm66w-c$CF8=Uq~b7+?$>lJHRt3#vsPFh@VOL1vEM~_}V6DnlZJ# zt+jP-@8u4M+I$Ae0BG_JeBnShcP9qN?$pn^7_2g8a*Pt$j1#-h$BDwHsP% zSSIR$nTVJ$NApwlM`8iD8D>6(E_w?an}eG|D&vNC)Yk&%)D-jUPYpRs){wXjlH0>= z0)q_m$bC+ktRKrw*Au{I&P9??lB}=Oj1ITWJ)7G`41EYF)7oD2I&?xSm}QJZIODpJ zN9tSA6y~9ulDMK_`1DF1VUXnY@4(jsML2s>W>syU3z$W8-mqR{!q_0M6QRYaQpbN? zWFB%3Aa?s0?)+7zXM_Kq6JjiU7DgDx)EW5m5@+mP7j4b7y3<{>n(UIFL*V&}0AjdD zJ%Z1}K`f%T^L&us=@0~AwlJwZ)(;I=VEnzv0*qeMAP3fLwcn4%VqRH6gm8Up^q+E7 zipp7uRQa;>g`^K%p+7^I;VE;9CaoT>vRA0boR1ruuP?51>U#N}Z$2E9sG^*-Ua*zb z-RxHyySc)+wa>vD838b2Wt^rI7*nXyT#1E3j$W0 z_(_j0ZqY8KEWSoC58eJ#zGWvpZue95~cCoT$ ziZKhIxvDW}+G37%%()SB$b;t@-Sqk{sIh2C6cmz{mh`f&b5KqzO8eB#C&Z9K26x)WVx4~m zZ(?MgtYEIT08zzX#CSto-7tUfds+hH?@@3383p}I3uQ}i>fdQz3TFQ!h+!PFiyw#y z=D-wxT=|6aow9>5?v_#U@SZw_VjwsY8k6*vI(cDQPop<#gI_^ylBdsU_+qi1HPcP+ zz7^3zJ7vf7ASn>eWaZk3u(9H6DT;g|o&m#%7hY5i%Xd4RWK`3G#(MP+iL?TUlzWP* zhOWxNnz-;mc|Q$Ow(MjiKE5Udl~|<*ozXCh1bt{@nF#7oNwIYbvHrXRvSl?-*tj?$ zf)mA+irwvqw~hQ=AEI~kA)1c2$LY{B>*RjeQQcS@CL6ZulcW@cAf#idZN<+X&2bYw z{cC#xpS^L-&mQEqQ@$j+yWzRty$WS!_Tqb!fvlRn3TW+kuQoK&Q^S2*p3#PP!CJWt z-wj53D2P^byNpHrlOL^DxN{8MI1GK8ZfJrP%Ft%Me>A{r_f~TYU(ft&@F;Ygr>g28)txfL6S_SO-qV4q!MrCIbt?M;j?_G*?p-dJ+f`X!by3apO#x-h>XB(j1*}Lmq?Um@#)&VfM$$310YR^lUgH zF7^8M%8c~*CRgzn;!3Q&IOSM@cn3V(3-l_s&3ReA&(T3=Ke}zBGxjtsT_JD5adktuQD}rTP@V4aNs7->fU2UBs{U*YLj!BEkv)p!WvG z-|J8KC;b0x7VQlV`D^t5gn?#VES$t+Wn~134`y5L`yrhN4uvB zclnu5Pd(naxSqrZN)8eczYrqDqRLBBbqx*IvAMp_497eRFyE$}(iz*i*mI@E0u-Y3 zRWG3lNCfxz_;{h-w`~RZ#IMbul7Je8`+6CibInFQe0ba;F3t@bpgLH?a?n_Dz#QH` z98O4+&r!?y;S*==r({(f8&FPZO)7cqM#(;eDz9`{Ufd+gfQ6I4AS^2hn_J4J5hg&m zQ)tq|B?_xYsO1@nlO@N0@+f$nL+#oe%}(E zhxzvL+H3wvcS~+=EGKuBX*a#%Jx?Xg4u^8P1q4t*>FhyrxbtYdFQuw%-HeV66FgR` zS;IRvP{8+v=ua-A0y|w^*UL27T2v*7CVH5+yCpUQfxj%EnKPw5D5P0&sFKP_K-7<9Gc+%?C>19wCEYlEul~t z>vLycRRKy(pmEnAe8kb7`wBeWQiRDpJ=Ge0OGFcOgOr7iloXfVyLUX)z=COmpSl;o zHHx!phB_ob=Y<#&B{lyJhr!8m3(Z4EY28!A>*Y586&)LCrnR1r1gFa;tx8OpQGJYs z$~HaLb)7s4C3Sg8L0irdN!YSXRWrtfAMy=-Zcf+qA_uK&T-bn@=sghRZK90`m2D(!(8WV44&q!SZP1s!84IhH?BiXY9%rJ# zSZlyaL|Hr}gS+{9R#{C})FyhwJXkd{XS;=9C+yvKcq4KsEC^JH8-iKki$NvA6qGSlo0I zs@U`Z3x^qEDmeK`;B@j)SO7nZt|Ak#PRQU+Qcd8_K=Bz#QuT;(LkW2U?I7K1>2q$t z#n56)J#Pk9-a6F_MsDQv;&PE5du3eF;D~IKGk{gZKe|^YTE?PPaco_j-o9i30uF#D|E@8;hp3A z_w=fB0t|eCTS8c($*LfbEYoHNpe`%ds*=v5{Q_M&z_z8FXv($!iyJk%1Ob*EG!ryH z!^+=wf_n-1cf`A=bs#PvngP?k_F)%u|L5;P!U&yD7bhp5V8xIS1w@YI1{#po-x+14 z747vtIUx8Wg*@)G*+BXD16;xd0wUrjUU!2pDvqmVPPFh=cZ6{vAgiFOja+tvRvzl0 zYjWR}jq`Ktk3BGTZ}+hKoVur{@w9lVS>BHt9S>nA^-QXrnQgiEX9@W~Erv^ z^|d0h&IR4r5?83ad$?+5m|tZ>Rt3P{yP*7QhI7|!WkV1r5`*pB`7yRD5_i z2ov;EN6jYMx_q-G^^r$GTztxHDe+3s%;ATcaf;cLN6dCc;+`y$Xd^Ry;?C;Vq*vCJ z9?I>*1LEr$IO`h&V-5k&kDMC~H(52B!%;q;>uqqLx=Dai_}2m?2p=C`90MEM=-^;!K>;lb3kxMBB|SYoHFali zZ*Nx@4J~bVXJ_Zo(9rNO3j+fKGcz+C9UVJ+WqJ8XM@L6@cR^+4SYIClBV+%-z?ag} z!T$dKv9Yn9p2D0QN-8R<7cah+lvtXX6;@Q(8yZqFF?}g3V_{{rGdI6_e)b=zoOOpS z&)(i!C!}@~xNLTx%LO5%d>ji2Nn<7>OTr_4Zho?O5?dRNlz!Im+uyP=0yi7-Omd8tU5~dZ-nSey89)Y`*0xmvTTEIb+6&NihkV)e6La3EpNUwQj-rMB$oxrFH4^kD~Cpp4pk)h2HH zdgqzQM7XMHn8T+DWmoL4`dt4OpSMW^FiQl+>;HGS{jjlCAT#0y>Bvnpxk$I$=nckAR4=xxR{E{p6M~eE& z2;N3Ie@Z|U~m3R#0-tQ{mk6#CV zU%hSLXl<|E5(ut%3!@aXqjwD-?%D@ODm zHU+c@Z-D?`1sJb@qyFbu^M5ncf3&>^tH4w|{ud$V|3*sne+%#SKk-gZ(EW%biW#az zza*I0P{4iNEv-eZLR;mjedYN))`}cNd0^Mlj?x(ZG2C7Apzo$gi17(4+f*=<=+n&) z2^?mPi;*v{Cev`w8e(Ac7&~9>H`-&DU-}3+oI}T?^05+2OLcM>BfC(HlhDHY=r#w> zwPU=?#Me+!iIntvR$*no;8Q;4bRHlj5adCt-w?sE<1|A=&eh*^c6e%CtVMA`;)I#^N8 zDaR)CGA?g{e?SSUZE2}pTB>Z%)Q=q#5YDTD%?LW*l_C6a587F4`rP&M9p9Mc-E%z!z}WE*0t{B9&ZtYK zGn~L6Rk{i+x{g~bx~&L_FKFP1Po8vMeic+GX1!iTULOz;3?lJiG;Y2AjU{93$avG* zan05&4yeONrny&T@3VExnM{ydWl!hld9uA|ewL6E-%sy}dmJ1w~t18wv^vEiEk|bs%B|B2!{w zVtjmjczAdqP$eWJgoT9#a1cyv*8{FB_YXHmIB7Qai#Ui96W*{^aXU_B-nhi7e!jK! z`Kz0BleLijjS)uh#)HO?oqPMf*XcOTO>6jmR~;c5l2?gYw{JKjVKB$1Q8*`_SP)wf zA?v_*)pk0<0b1=U>`mn>$!gjpy1*|XwsrP~wGw33eynrTx%c$AB`j%&l!x0mQmdxi zD69=+7d{Q0Hj-^?o5GXb6q8-# zKRd||7I;rqU$2ZYZ_je>{^FVHq1>6{-kRnZYauVFh$#UjrJAWH|v->U+${ReD-RsM%d0jGn_{uXwP|G;jln_{$$7{Fq- zj~Wm@AX@;P#Sun8u*1y+M@#&GFgK?;HYVAAc98?{?ajXgZ~=rr*n~gPNqW8^1fZ}q z$~fIi34k@$PI9v+4!{Zk0l+=dN(g{*ydtnU#SS0{z;v_w=5}9VuAc@#96%OO20#=3 z)PX-0;NQ^)K>rWK*PsB(0K@>ee^Yfp`+KmnA1c5-}Yb$8dG;erhhINg$ z3eRVH&L6Xf;16xzTi{!?u4PZL?WbafOyKdP&vJ_MmFr6D9O1sIJ0{yTyB;4yeEfOJ z5u(C-{B{tTcJhh_s$s_I?H4#(wdqM%T!lo5azenL~ zXJv0?Z{cocYinR^WMcDgZB({E#D7g#`^U*&rRB5$Kg#};6?}(^HJl0(oJcH1zdHuz zdrTGa^dcv%PLofGg@ZxP(>om58HQRx;XC$ZzfTSl^bDe|E1pW<2oidTpk2L0#4vMf{$hfcs)T7dEQTHpMO@XVcoRLH+cuLUgjx9p|j4|@SJ z90LObK@a;1*GZPaNqobp9b8~>_8Xq5@ot>SWoc#Io=hV~`;Jn~i;r<}4 zqyxc!f(J2zV1-~|SztklATSgR^8yBh0)k0_0b_u{%wSL)2*dz_O@##|fM6gn;AAi? zCM*b`k3hd>HRXxae^U(!mR5m-kbN3d#~I z7kB|$ow|8L6RL_5*5P2?&?3@9uWq<3RL}r|sWtsW38sWn7=--d0cHs<-Q4#K~Y{F@iNRP3rEjJu(UarY2n}Kfaq80eJUsDTUY{N&z4b00O|iyu1v+ z0>~bK2+#`vtHs4dKno%xBZGs3gMxx4>NR9#WmQyEhN_eRmpE9d2xtlb)Fiw7DR4`1 ze*&ctEou+TiP=@6Etj~&@0M}(>~NHel#U7x!i39yM!>67=d!nEj_R1#7>V)`*3bf0_k7pe7g~hM=;G5&X5d{TeF1 z{V{{>0^{$oCH{*M{v(|H??Y<^AhbUC#BBi>lzenl#k&Soef^4}yiUWBD*xvvATC5F z;g$c)8@(nB`vw)Z>-o90wG}NL4G#}*D1{ZU*Lxs?*!77bA!pON)W*3Rauoc1o~ z_Ss@S_o2(@^NC6l33pbH>cG&t(TKIv(ax={Em_S6W??S3ZwK6EZd*QNGmQ72UYi|B ze5J)YMq6p7bBT33_4y{fqovmvY}2_k23^v>z7_P@pMUa=M}54AQgOvgoVdsja}9j^ zmqf%R{Gu&bxFAq59tiYDSo}Yyha9Z_gZ9o>%bQZ|@p+}%mQG%R;5!quDpM+A-8}Y$ zg8dt=NgOP}lKw^WLDsE=cSCv!(O))sYt~faqte_~lDO2^es#{>WhNKz+&*0_P%PXY zI=>%1XtqCb=^35T5mnT{fC*$I{Z{P?GN_}Bql+u#aQv9$odhW)vw6}Q z>}yP}Zn#)S)O6F&N}g!2mLSF7$fgN8G;MU%?p@Zzox-xpOPtN(pCxZz$2-#WKiJ@g z^>Ud~?@PZkv8>M7F!7{{zhX2te`tz}-dWvgo8mZFg%=h#nZ8t~F7h7foa$3|1vSHj z>u9B!2c5Vz6$**w5Cl;d2~+q^``MmkXu@R%bxR>vdu4-bH`#l*2fcf592c(adq3Z` zizrSFH<2SvL)|bQJSi2UwDn2yevhoqf3qA+6DIZ!3lc*0G(h=+5?C5*9Zp2WH_J(# zBy^~xbA8v7@`mPN_bdffoj~ zfd3MCy30hG(Q^f)+VNKH)gtmtQz;$Z8H`~y=6<3B%wDWBj|wKe-ov9pVl<4VG~Hby z^y;&ijs^e3@1;*A)86zqmmFg=`X{dDgl%i)6mU<>;6SwYhz3Pd&#|1D!g}T#tPMF% z*9c47I6ST3>a6CN_Z`L1PuZV9W43}p9Y12o*J92FRid~$CObL#UJ1NH(byDb2y?Wc zYhTED!PS0ggxFQ`9io7k@@vnq;!TY8Fs{6 zxT?W9Z?#}C7*W>YB%2)bBS(o(3!xXbSGhqt3bo}-eX%1>!ThZ`Zy(C{RP5zi{*zHp zm)f&#$)lGv)1~ioM@&zDlFr5ZZ{oP*Nlggee#6L-~3@4qnu2*qvJ7`s{j=V+a z6-x4P=&$)km#w22iOWC46uVF(y(Y+`)r1#Wqv}9racqh%qS|wTcEJC_<40qOHrQ!0wWs5_Ii$ zV}@(?!nK3JATl{08rp5j9KxL7q#MoJwh>9|b` zE8;&hT_bX7BD>J|K+CJ(icnhiQ8i5n=4h>pfqyeJCj~35+Jr3hP2^>z+6%EJk=uGB z284TuX08F2+1r zG^{1o>vzv6v@JcVT;(tWb;j__VtqJ`lvGdUcar+xD|BvQ?GKFqXR<5Ub&c&v>$bxxzo#v7AhD8z(#+f^N~W(X0t zs=Yn_jYFrGzFRr1m_|6c!H&_Z#fTdnAT3U&JVO^U2IhH+L}9CyDTtTkmx-TL*eos3 zI2YrjFob(%majHZib}=1%e{E{l5O8u1&b0@KR^Z?jh3o*WfDLkv7j~MVIjB=@r%WS zkmZc?nwNMgj*B00tY{*1-hK{Ssfpv#>|J?PDSfqS*uzjsr`Uw>Q#&q}Ho7ERjCM0W zvQdpa%#PE);c864Dsr_u)>hFwasSu3|L~SfH#e#BFQU^Aj?oRMs8WMW(gS@%cL~t< zdRA+E;RTMmBLo?auWnPT{Jl2(Ls}RwS31dSyk;CP-t}DURYP`jeh*xI@$ zb6dSwJ^aFok}7A@HuB^Cr??r%vIVC07&D!@EydCK@^E0J;Tp1KmtDN~uhK7esV@CM zDqk(!Aw~;vnc#P~o{Y6U>2iZ||KL1bsj9>jn$7Ncnwkjz3SI(7EIQUZ{gj-N2i{NA zG~drX)pp@L5+Zpcv~1*UXfSr=sXN_Zphknobu_pF~kIP`l%bCo*=Bpe4DMpPU)e(n8;qpo?Lf0^guS!Vx+{=R6zp}2P4cKPo+(Ud%+|B+N>XYwT_Xb8mV9NGsLFi zvS$!J6V@GJy%QZBDaA(W_H7UoI>5%hM_D|Y4N~0K?;Z76GovLHHA4Y)(x5Ob zvC=NQODldb*_WS+IzJ!ZahP^yNIFQLm@RT(n9>=|R$TcB?Z7>YaNB7$* zU$2sHCzNt>%gvH+xxerwCh{g%%mq&DQp5w=dH=-9>~vKrdX$%!=s1q=_4t}! z+>LUyN(6;F_B&$fA=}&UPWbdWhoE014Ry8rHlv6jTIVSZ588`B*(vI5Tq1k_wmK%SD2}6Lx(_pX!>B_4v@ zBPvW`qz5H*@1>T2iTalJyNO0jEeMKm=p>mpcF&_I3OqGGqfGTqzfET#jo#}+Jkzvl za$9-1m858W2;Y9KykpUoDUq4)#P}H~pZfLuxO@4v0&|Y(h$GWEG`!v=+>m}L#(|X7 z=!5s0frCP9L8oAA%_iw^VcS_q>A9!UxG=u8qN{yiO~w;+GzXi;f*}ls@Cn%~tQT9! zL7SC=MP2s{Do9h1y5q2M`2}h7p;pi6_4IlS$3|{-qT!zUNAwd5Emlt+@o&Q$K1{lv zQ}ARBnKj-f6dhf*4w8K#zf0IdodS{%krOoEdcjB8beYI5(R}tBV{6>feYcnfcKuZD z$NQuxQeybI=-{31XO7oVQ@_bjX&(u0uDy3+ADwyysX5EivxElOH{^*_B4kNzcjM6k@$Uk3=UZ-U*X`G6di*rO5yXv8)BVZC{q>Yo6{91^{MC~h7eVzy@r%c}uh~i|&3tLPd4GX0N&!yeYGE(^NKb4WyTCx<+BP1Ys-Q^4JI*c{YeUUwlTQrm zVl5ZPlZZ7j3_Hv@Ch}?jaa`k7o-FfbM%A9kt`(*ho)VJ|{ zmZjAq(ufkjQ!lq0c@A#_yO$11Pta@Vv2mv3ZUf$NqcM+g*?X2g6r6iL__<-&1mSuc z$0AVb8k&}3eX=y*DWwWZk0z`Z zEsKbI=Mkz4LZVH%x2vDUS9)1!g)`A{`x6`)2JN<(Zd8W!*B zN#2K0*y8(sSvt(_X(f|7BBv*F6m@8L4z~Q#KEiSSC8^fMVuETcQ2p1r&CKd@D3vokfGKe|6+*Mnt0$o%x39CFwShx+5i4L&D-+a>b4!6jd?n zNXv1~Q148nhS{F;a>`#v@MKk5d&!?{5aYfDY?>Q6A%~~F2C<1!z|}uhUxwYfHltbw zzE0oWwV;&fV12wm%+>1T_dHqWphf@k%=pZ(`jNZXmGEa9-0SOZ%V56*4ofFXlc|yjkLot|P;BCHpWVxxdbEgYz;9 z)ebgp-*_U_UAC~We{dwmrGr(l-0Z^Yr=Run zw$TZ@LU#P}3XK=)?w2%zjr<-#ZfK>$eB}LGzUW^RJYw*^cOhZuvRtse4^d1M#@)@x!4l^~Cb*FEaCylWjI8>m%^Ky7o zO(u2eGELvKcH`N}FI=x~q3^=OV`^j14DejH@1% zFnI0-eXuTJYM5V?#C3_S)?DVk?zLO@%LwTX-k=>Y?u0GOei{9-godD^Im@lp;7Vlb z-Byt%Gv!q6+O&6sn@S7wdQ&}r@=nWr2C=Yl50MOUC=6dwWh~xOHV;l^_Kr)G4AM8T zCwmpn$}8M(wvd$jZ;RadtHMA9v)+YPC`EwO<)gH(imn3k6Kqwg&)2Z?N$PKY-rMVC zx3Lz+et2J!yu)TT@1_Y{FB@v({6$iP1)GHPyJzkg43uC&BPaHG1(t(Ol=R(h$R%hmpG$%5h^Pkx-;FE^daK~;4mte zX7g#0Rx~d+<632Uub?F!(f_s^?R+GeSZ)5YJh!5u#b|%;s89nt*@%9AJeyYtyMOUs zR<{{Do)7QE77a}Y@ezw5f-$}W&ST8U^Os|?M`g1EH(B#IHw4Mh>4py6i3YSAy4@K5 zbIp$#2}1aJ#bYO@I`Vth1eaBk+5O!Nmn3c)>rP*wFxW?oab2pVG*7vW)ESu41aH9GR-2sjp09uy6S5iczo1Y2Br45_UQJbmWv} zNI#qq!^E=3NB4?);*E~-mN(1Y_3!6m^D)Pp5Q14kIxtUK9){LlWPa=NAoy*?{lfB% z+(^4h>@6-PLnZIt#R7VAVW1jq7saOkfiKK*oww0(a>oq0V|ME@no}BwecMp%0MW0| z%b1!$dtIbC3e>9SlWmfI>7u+P7~|q<>$ueMIAkydV!18r7yPW$C&+)^9r;&cfWMaq z|JUT=|0iAmPuIKD6buk39vFYGy5Nsf{|7BVJcj+*e_iYLpJ)LvwEjq!d(3ZT_Qfm? zV}uR~>>%;8*tVm#J?D?WKJdfDut|`8Q2p8myBNxGB`>Fkt!==G_c9CW>3p%;5q$Xr zNFR^1cweVv^B=A_LcM3%61)VcfpLUgPn`keCKmmZr1icd$_&$451KOgnD1uwjfE#FrDV{ zTZo^J#AFh_MwF^b6e}_-$C@)J_5YgqzBD6Zd>@`?%HQ7gn2bS;D~?dyKH2&d_AL+a z2#2n?jl?#deI}}uM}P}ZaGr4?qEHZrXx&@q86fPXvi8QBcizGc3sUx$e7$3vsAMml z6O27~8bF=PUw;10NeY%?M7HKQBL)in%u+f z@{OXWGS$*PJbC)2C=b+|t00sKBYxqQqj_dcH{9#q`)foB#EyK%I2~z4NdIs{UJ_k{sL6z4pKaMzqhyCYZ_`!&E=xzBm z;vZ(H$O~*X+IB<>B0eo~Gy}|y9uZO2X;7l158XP@07ioruR6{PDCFi@BEI=-b+$bm z@%26BIbM+mruH^z4PT>F239#+nB@_Q2yBYo8~x}Z6@l%Mb+?Jx&dp2P|l z?S3@=h%3$;>^Bfs^1LVpb0{SV-%!(fV58+X)l_KsJL(uy@u778D%L(Vblo$Mac`Mk z5qDQJ79=mM@jSq}9tyg6oGhY0A7YGO*a~dymw;MU$}>TJV7&LpaWxS~NL~lOkt8Aa z(EA?#eZ9uG?x_nq?P_vX=ZoJi=?GhvrBV$+87)^{;k)v9W{Ef*t4}m+o^h-jSL-SA zvm1fQZSJU?G(g$=bK9P+p74DK6Ztqnz!sREk=(Gly0_msFsAvD)%l49!g)SiIT&1D zSUM9<1}VADj9Zm}=3FI1bMzgFFP>)(Yx8A1+Y^gDR$Z8$E1}AxGj5)7TbjC1%0Ugx z!JW@U1DgUg-j>ij%Teb*3AUFwo_V^0o`RS>+l{^u<9Ls6R$F!n&?R%94L*p4Atv>61%15`(E!%&|B<5Yx| zl9|xxCC;s+x)i#9TO{Ha+@yKtFQ?qE$Lb>AE|QUpM|@2{WG-)xV32IU?SXyW8Hf0G z`%_!{7=}T6f=q{QDIKKL<6Z!&Jk45sAwm}B5nvS+?(h+@`K2LwE){)|PxSIBd<7oF z16(GbGdU`@)|r?0LR4`D*tjFO!KIf zT3tf9Qc}MM(hZfgP4DQ+!RnN>YxadLGcYgzU?S)2pk+Gco_V_=55UyVXSw z@sbgF*`@TSL?iYR$sf>eHpt=kNl@l?;CEA}Y9{gV9~SMaWYCm}DngQf7fg06-dHJosf-n_w2ih~AR4xps6{5BhM)|9IwDL*CEg2k+b z#=*zzf36q}c6%1vzA7!Wi$r`f=8Xs~^wnNI;f3fVJ5BKBhvS5KVoKJ(AlK^NV3-X~ zLQF!-w3|a%Y4u&$B-4RbU4f~L6`H4qo6-=gynO`}HpAQHj5fVh%sxA&ZFSJQEtjjw zd#<`8x<2gZI!EC_92b1d!#vyR{M2zkle@UiY` zh<^vgc!f%bFxt3fRpO1b{PeJEHVdYc9E zHv7xEC{HqA3Y$?YHJ)jRYM%pT$;JJ!KUmy%CPDk5(}&<##+wQ#fl?(e#PQ+ro^K~` zJ~E7GFo^yRV&0Qj`@6W&BfwWP^u`n(NQY>oP{WqE=NAjq+yg$l__IJ5(*7( z?I3t{KM_@mit3#ohuCWErM0kf5%5+(a~mHbO=d>XzxZ0NNF6#MMA1u%MZ9#@ZoyAu zHTSAq4~cdmD_h}WqC6&RI}jaxMUdRkHOd%m29Ip5BYmrZ7@~9kiCP%Bxwd7qIj?Tv z6X580j6T_+^bMr(r%7*i9K-MiuNie(7?Ln+wZucKzKCe#GkUh)1xFz|qKeRmNDc&> z!Re9DMYv)?9*CXO5UqYSR7$8pbBYOg4a+>*KY4~Dehx9~2`-_xs#A}xXZ?|e__^n0 z%4WaebHwanX-s zi(Q;0=@L=OlkzdNUr6KtJDH2f+9p)tZOwJ4(%TBJ_O&~hP?qbd?Z6f?dGGUph5<9U zdc!kya?|(cy?gui1JN*eR1lVTzJNMhA}cJ}oAl-qk0@T`BzWRe6LFh`mY!ZxlZTjR z*{PByr!F~>YpJa9I#R9xlgmDftyBIqbS${eA&abZM-*>>s8!eD8&@LYoQ74?1)9MR z<+Ff9`5B4_67rj3hwC4;cmEG{UjbEhw)Ra3sHB3Vf+C1Wcb9-lmvl*YNH+ok(jYCV zC@3x6-E{~7=?3XIG#t+NKRV2vJ9n4?@2q+6w_JO%1Qzgg{r0ol!7supB2gaT49t53 zsbpjwq~km3P#jh%sS~dl@2%g%jOi(hK~e6sYV*pZv09>2Vt7u6y&U$C_~UKtRfOv5 zo^0u8aB?5CrU?_c;8!LRiAM4&(_!+~<|nsh*}xvPoGmIE;#_a<^=EB|4J>Y0kvIw? z^kkUtaKhT$vad-L%1vt%3t>tYam9`0cTam{p>?ry=&z|0%nMRVHhHOAOtnSS5BsSK zNNYsi3KE}BL^75NnDwyAYonHGM0Bv+fAsZAISqcogBrt(u2)MKWlN*9hW^8dK07G0 z@Z}^&he88sz!u*o%*;2$^8#rDq@(f!X4d#+(6p~8J%ZYLmc}F<3N1cIvB%z|kL$}@ z?*1--r7FC8(5)rE~B?q!Z?4GfINHW$Z*`Ek8eC#-wAvM!hlw@N_ z@)Xr?*pX9@(bK%JF3HFg#)nk)7Q>U!m0g~d0jl*EMGoDR^SUgTn1E1s zJG#gpMZQ!fHaC9WgPd^&1vf90@Kwc>2aSF){Ku|5pj40Sb)W2mMKe+Feybgj|a~jKtN8@?)n33NRDz){62ly4;%gAPmY%EUF<$ zz*UST>zWhTt+mqfbC@(?qQ>mqqtlgtH;_(L1fR3?b|pp0*Rk7;Pp){vsm)6=ZaWv# zXX0{t!~L-;e=oq7`74jiSv4aTvWz{rP9f9gWhg65$1y$f?opH??>6tCp=^)ut{zSw z_r`ozi^ixW;17IKucs|JfehDtP?jL#k*fvwj6UACBVo$mes|S4?uJ<*7grFHq;0);1;*`s z^@btCj(E$}tUo|4J*Xk&=uKfu9Er@rHTj&ITQ%#;>Er9Bis`jHCcBU>-sY&S$tOtN zs~gGXGK?Gq%R6TiPFIooKBM^F!^<#;FPa(Tv+$|NJ#S3Om0rr|i{ST4{L zSH9Tn!z%m8mYWGdB#TGmAsf#I5BTz%QXn95%y&Kz=7RyZ`%93nguTif?iYfs5R(W7 zN9juZz2m(~#Vkvy1%bn=J#+U?nac9d#wA}KxEK(?li7W9%~tk=^2M5!T@HU*4Z9+D z2KMmo%-7GSEBnreJ^Z&4_ct5+ykHyq+!~wmeI+Ah52=DsFj%KvNT^sexvw|bJjO1m z(YZcOof-6mXdzs61kjMp8@~`J70~TP{6K^u#0O*CnoCzQITcZGJ?IA4A+bV>0O{=?yIJ z$k_R^-gAGxA9?3C15=I=2*e`vwnGW@6x3ZaDc18aIo((auNey!T8fQufN|fFeccqT zI!$%Jv6!CSA*Ck-nME^9buoans4BZ+^(b>#LwTj(Ycz)`n|}$hxV$;m^7SLvCq8Bh zJEdF4h%$ZnyYbH~%kQ=87q)7s#UaB~Zs1WEQw@q3-MUkOwUToRQE49=UFhJ(-;W_Rk(gxqTIj9cO znB_^XskNG7i8G}3Qm)VTL5D&L^j(M2(k5C~CI`r=^cK<#Z|UZ52iIdNaMaR`R49{r zk`2&eZcb|FY%M`Fw~XePaYS%-fDRF z)aOM*N5yp>zCkQ+MjakG9znr9kmNkSyci5ZNPWB@X*tWK3qS~?puPuACcmi?87wg>18@*Oo?r(y&JLAnOKaZ;dp zu!z!=40+US$eklm+ljYFX3m;4ZqIV}-QPVQ{DL?_1|E3)oEU4)pt!2d!FwcUm~vra zr%5x`Xc+87H;d#VjuD0Ndgf?)aznzXaHI^`*V&@?C?WPi5Su^IQzkz5n3K%OP32q3 zUIg6g5VZjga%TA7T?Jym249N@*q#8K^Ibdmh5aG`g8DDCu=do_DPh`$n--3JGo~_a z88VjSsN7k%stiU?#Pv}(CHLj(z}F7q8M;opr=}lMtDxIb5wO=B-fw9p2&2w2-#n15f0^XG2<B?+h* zuMNVU*v{PbCC8OrONxyl2z*M>G556C28FP5a&c)PuZ!~SmEVzPOpui33y>BB9Dd-O z&#n9*?^hpdqh+qEWp#EaYd|9lpZ9l1kmZKwy_3!VMvFG&HRUoOX)ktrV}#P*O8W4J zgAK=)RC^-wWW%AG^kZn+ooBi8U%X>d@KSGr$6*(XJ`d>19Y+-sfVZT}~{BMM}EDS+s6V;PQywg+9N2%;V z?qMddH+O^uu>xdRFJRg#5(SWVpIOlgPa& z1f&n5YIj9F!F{4_*a5Nx2-lgwqT9!6f;eq~JK{TN=x9|qG?&tiw{4!IecqTL`qt9_ ztOk5&2*unzaBeHK;ZbbxPbIsr#^_gBL|@RnF*-pcLGW5NgUK|Gfa2yM$Z#kxV6UDj z`xAHz+c^vTp6%l;UdDy-4&&&B4~-=9sh2169hFwF%B>O%L`EasDU!soXcKK^%@_EL zR(Ytz2{kmkwMMx8;pL znAzEvtRlsgEi@C3j@mVn_aW_6NfR3G;NF!qw!vF`-3Pl^Za4;w7Z~aaN2|;mDTZL^)^#TOdNsvRS8R(9bGZ?7;X{rFWc{>#SK3i ze;cp}L~7~`4jvH{w5Xcnb351vFHg9qS`e7*d8}}3%SNjXv@uC>?PUr;)kol5)Y&Om{7FIbZ^?3JQBJi2l%z$D zQExSR4Y)i4ZPv-3hdU7eo-Cv3g@aV!9J_uvb1`T8Emro+^u?%VI*_cLJKrW7o!leQ z1e$n@rB-lVkmRC#zC76XQz$j%%W>UnVZJk0s9NmKfpdp@9S>A}SgtCEROOzOo`A?4 zd=}A1Y*7ZMVeF!w@JGV(SDx^9F|3SFPN6ko2cX-dwA#eOrRnwU>SxHl25h}AZo0w> ztKj9BFK|vR-=F(Ss_7G0JTqlBL{`0A=Mi*jcG(N#_zcU@%1Ta zrg?IoJ}dOb1a}b-6mw+YFH9^%ShZXcS-F9(^5sL%nAX=^Z7)yxLD5g+Bn%jY>Led- zrj8m6G8kyL-6_HV5ECxnTz&^L)9;cM?xaYHibBZhQWDuJvC> zvrf#qz;HK4I;5+jktL5JE-j=*Mo{2>V7x@8KOgz+pw#Dn1i^Cb5&w)mE6;+vJSYpcCQBoD=%3!}MQwjF_Yjg9&S)(JU$ zbrh1U^+)FqR-ep5pTVseN4Zu^2D$9a4>vm zEiHlQ!!^=}5e(NMr#_|aWg#;d^#jw!az z9&6egXShk~ZL35sKpgzQIe+&1JCWF)Bm4cQCBjnM*T~RN=f2nwP=S7xo0bi;#TSo0 z2G1`7Z(}WF2h<69!=Snp%GMlhYaJ6zn01h~*ck;W>lb!Xo|{Q{gE5b{-h%(F&^P8D zqs=fUMQbJdYO}TtuYzvks=<{c9b;{@98|sXVad#s!s%q?`BBlvfGt8PyYvh*@jdpL z?C0wttIg*5zHAe1v?9++=C5~z8lI%wd6M&dw>2QKb}{FLxz1TKc`F7fI+e-Knu(Q# zz4?VZPZv-6E@&oyAQVkHEPFbvPu0%MP$x^9g4HZNGm@7vyT)|(Ut7RsYhT`b6{q9S z70q>Jw9J%EnrL^8TdOd9QLMYOc>I!JrJD5$TOuW{g#@2PJ*%S*#j;0w%&xG1lERRl z*+!6P2zbA)Oa36c4;=Kq+n|;f>;&ZtaG`2TA7UXV6sPlNADt{zrT13#*%V(OnMV)g zFJ^EkJ1ot#7BxipT|P1MAojbV@cq1@=s0Tq56Yx}{Xbk+8lGV}o)zDG#t6^)K$aq2 zr?_e=YQ?KU-Br<`eO&IKg<+O8Nv5R1W`8fDE!@=t@tFE*#$_xoY1@%&aj1O@R_{AT zvb5wN9hQ$maxm%(n-xeauy{ovcax`@@MNv3(~KxNP)Za`~A}C5QU0ZJ@OV#|fODbX^8kdV2qh zW-|ASnY?4u^g;*;(9=omL;weL5LL@N>ajt0TBo}eD<%yfX;fpoh1ta;nij2eE64qcX;-E0&X7@4*!yMM$b{1#xU@&Gbsx@2QUq_tjjWM4~^HWq$azWt?JWDL<)yxv? zfJk`%OR@Zq`mTjjL%9nW3T8X#(enemS{C(rC-6yEx$Sa4Ia435RPgIn6Ij{>`8DlQ zeLBaLjaqeYZpA>7%Ew8Jotu+E3;8HVqAtk5zfrXhG?FVZ{k7|tQ}S3Qk&s6m*8urf<|s*u;Bu#7KJg&k_D<4=;;B=7GoD>`n|(r}1(`Q5s$J~h5mb3rRYsvRo3iJblT5=Da?Y41<>-|a zJOgvu{9L%QptCF`K-hKUR3^MX=fKRg4D^6yzyEtN{tt5DIJ_%mcn?;hdG2#H)3EKC zG?{)99KWeK(5b~~{2r{*7e{ksn-O56IS)Q9P~zimX}@XdHd>A++nX*R3FtXc3Ue$< zB6kV?R|`oi$V7I3T!sDwgv%WB#pZw6M}LH~9aX#+*%(Q`s&*=spLAfBM&{pFY5i|C zSN_0K@}qO#;B7>?m)!aTOR-k{)l%mAPAz4B6@x)S_gjIjAUQlA+o83`HF$F!)5RDWG#*-0LA zr|0;wU})mbf^YCDUf`0)*`>S)U(69qCa|jUCoRR&*2?n7dmH~-Qu%|raSZjw7xaTf z(}{^<(~+WdnyLy+dFAvv2w^x`PG!Qo;fkG%KGN|%a+0-I)G-NR%@mv5cKy^|K6k-5 z=m*vB)0sM5vYTz)G{{3#^62gB2XDD#cS$`o$sy|)w=xI4#5*QUTDvS&rIooQu1p4< zs36JC=c_nq!qcq@t$dQNu<^__3De* zLufD!K7!&ppOU)lQqRmtjK8fj#Wu&!;5HfEYZ9IU-x~B~3p&C~oh4&14=t~vPtgIT zyM2mp9n|+ng_zmAQA{9vI%fAib*^XVsP2gA<-%CyLQ7-Rq)FWa>4A=%%?Lm1lcBZ~ zuPgj?jPz&qSNbZsF2RywSgrDtm7~3(kCbEMgko#u9SoWWn;IG)tBml_rQ|a5H0VT~jJf`J}rT4*3#cQHnDPzn1%d{VdR>w!E>-PBleIvE@1a>Kf#czda zlBEgX`U+=*f0mVu3vbTAsz+Fv@{_*H5!laYVgJ9Ed-b2zD8Fgf>w%Dfc0Cg}JV#4v-H2cvbih>fcWKP<~AM$_!Yy81HYfYsS0VVYe%fBfNFKSsh>MNl|%!|D&xl`~+Tza|n0J z@Ky61k>N%aoP>Oyt;R#7!)e*aCN!n)s0Qu+7P9clvu9v*dgt~VWB)sP^|Y+NukrkI znf^*IAX9=9C^RX`8hk0VUFrHPUdQCd$|J(inMt5}uY0b(*YQXLS(tbs01PtM=4e;F zZ4)vR&7`>T9uJA6(421aX!`kjn88!k+Eo^ja;1QG)z(#>JNwnpz){0A3O1-ySZxP_L?pi}dbdi1* z`q=s%33OuNj8KY!51?uxnn$Z^b60u6;zMRs37HlznV7Z`pJIF+Vq`k8KRz!IWl%IZec3$*$^k=dbx|rIjp&;hl&9DLE%bBvZ*q{nDf9@{4 zg`}|ttEgiBZ^X@X2HBG$bXR$e$24m88fV7uf<6{`j+nf*`;05RU>f4`+0CP>Gv-cqPx-%{`iAqvf`8Q7zlhk@@*?sDu4=&EdC?AsWqA{Gp?LJHv7@}s=+YmD zVRQ89?cvs77oet~UNu|wp4c1a<%PBl+Aq2)Q1Ic+6QN{( zGWRd#h)lCHmSZ{U}OpZ>)lkM6kX}4QW!^yJm5~=UF zSXPE1SSuYC#8SL{W17~WuWPm0sDh!5c71%M?N z$GDy*MzkP6Ye+g0TnPWM#KBNZa%sM9v|O;wkvK(DD6gEhWvVXi zT1{w3epXGx**lJK3bH!itEVtj;CF9&KAiAx(NzFWn8)pl>!DUQX6#i80;@94PW)7^ zEJxj%BQhhI>_gOnH=H|YK0zK?sanJdDgibT!3@-#U$!6WC`YxXXg7HiHs=u_EYGry zPCc6pagZ+A&gf!IJ~-+_i27!QLzyM?y42>7W3jc;k*foaL^|e70JXgyht?M)B z*QV5vD+gYs_{mZPmyPb0*Fa`MCXjsIH>wSp+`H^uCRDafUsjN(fwo=x=J_l~xZE?4 zt&gz#%5}S|j7sYz#anfqezpAIGw*36-eo8_ooQaMcO$N4X=JVWPa()?E{2C*g4I)> zH#9jnNiAUWWnFA{NW4zAeOFu4{sL{*Fr)fX*eO_Pd7_FvXnDA@k;uVoP-QcJTsm&3 z>)3d3SANy>7GH01N9c(%S+|1^@C+8D0)2TlC@~WyJ;jrbcr?FDGhKhHKX%P;=gO^V zFlq2tI^Hsh$(fYFge?Alv-406pmo<8KWr$ovg{EYk?{?`}FfFK355R9y-DlcsY^bMRGI8%+Q>KW8HU5PIyQBKh_oB3VOH zn?|A@L_KIjH7z!;EMsR25Y*hPTO*|n>%(1-UVf6TOhp^vtfR63)>}`PK3r`c$+GW&jr)a}`l1#Q=(K5+%Vif_FcX`sR|)OY zVnNF~jkV~G0d^|)gf_A|I2&#QJ>-V@y6w`NlwdoPuTS}y;(KN?>Md74M_yiU*vRqd zERD|O<)X>MWS3c454Ulv3p{zj!eqbY@? z=|`Bc>V6L*XND(D8bE8{!|?|kl-`fQbob_XI96M<-;>;B1nuU(0x_`2`0T}2Wv?XJ z59zsWpo>MDKt?{|D~6HnS3h3K@9SCHS+XViVrsW;fjh;4MP5t3ktRVpiL;;*G84Pd zapSHB#+jH`{ieC+|5aH3r(k10Ee=*#SYPfyJlwGkDIMo{?JzSrNICe`ZC&XTds^e$ z!`;RH8zZ~pBN4J&O%ZpSAG(Y`Pb5zOA;wj&Ne|7|tk?z{=*-oXb_rlJ@zGXTv6bxA zmFiItzu6_%0G9ID8H_D#-fuW~LErpZ0iq|>b-80cDGZ!eWLdi3HnuuXf%Y|X%ZW_F zI9`G|k&#$#0_T1Wj{!lq)>+vkO_*f(Y4`tvW$BNw{!b#uE-Do8@0}LRMvip4zUJe7 zH6L=aeQu8HTQ%)HCagx9wpVc_;fK#s4nFEj82*k7C(KkQeizr${b}WF;6>Q)$H`RU zn}381@A`oZrwiRvnPFK#c1&(R6JFW3?r(XD9Q%2p{Es@WKNQMZ6G@z-&at(1wSGqw z=WOSu-q_95lt+ivER{ofn#E;LECSM9V6cn#@nZ{x+8>Kw)~8@&>*qp;$wnPgmA)sy zBeOvXKmx2ij7RDAMlZUsmhAyg*9lckUzw@8NiLNsjn>iJVG1AaY{O1?>P ztl}H@kYU)|JgXZf_c-P0f91OVA-vc{Me?7edpjypJ*w{R1P}gy;>Bj||AiM@`V}u0 zKlHaFE1SxruhWQ;L;nO>In}BCvlzY~X7Z1r#r}JljG)FeqI##|KYr^)^B$kTOxH`o%1@y@O@kP+cA7|(=$YU#cQKzHbiGx$x8vjzEiXq zJJ4Ibz;NM*O#T_H*iQ>Y0CrSO8+|f>6tWmp-2Oc!Z808!H zIJ3Q6n~&LZVpZZU=_IzePeS`E%1!m<6@uPF_eSXz90y9)gMdq`T(C>4d%&et5$)02 z_O4owniJ(AvK-+#oj7=hBj1>FI7L2|tv-=xPs!i&-ZQuiDt88j1<=$EzLZbSjMbc> z>^n$zWukM7twA|kB7(04Y)(t}pK5UZQ%EtI%XNV}l$+Qdp0ecG*T`!RjL7Hwgg>Fd z`^7qvJGo`wxvJOXl;X+kT_c_^RGOZsjBu?98kvUQpGR^w_5Qa6lr+fG zz^-Qhj$%m1^q#mx=uBansp5#=U^VT(@RT>!Id4EkmU!iE^h~g=`_8P8SX6ByDKqO5 zy`rzs3ddw`TwFN*(yQdB#qlSlqJ>TcEZ>3w#eOQb|6?$*3);xi?@N+9(9&kL_4vq2 zYi4j=VeW|;)s4LZ_6oia1j*J;iVp8(guV*|%#@U)Q?e|p=JqVWw0i*eQ6z6-R~ypd zfG341u&lN!L4-9l{#I@7yu&A-h~C5KfFW}_O4orU+3II?U`M84@u$oYno64oN7o># zG>aqc6wC~dE;ln4jk?yX6o%KXkIyA(vSzcxpM9By1Rd}8=|J@S%bmW@xump#*I$kP zvCGL1)`O`=#iM$-y-m zW9z!4Y^yoQr{t<-&*?Fi=k4al+|nH6mLs2XI#Aql)%N(@`mhY)&hp7$yT~Wt0d+eD z{PFp>dwi!)##YP9#tAknhd+ixJo~|DWZ*}WfT3EzhkDq8efIW9xd4p1+i0^;_b%O@ zkL*H;c^uVmhiR~CHgiR=-&hqF+GD-;zJ~Y8B*X9{2M?T4qqD+PFQeb3+f8r1CO>Fl z1~LpelXy@plGem#rA~UpbTQ^m6JGa-sR}V@m^)Ib)=+)A2zsq=CL`=wvWZz+7Vg5p z?(TQHO7-b`)-)9PIn!&$+ekz;qF1|ebGTi?dvb+%Z?-S0hF)9E+P^}^g|KL=+WAbv zQ!lD}+an~6SWf<3*)qeY=Fg`MXP;cDa zP6t=+2&H-{N$$rQ1sE!(rACu*Y4QX%CO${$f{!Z^@Y6Z63@Bu zk9{4Hll`9n?W9`Dy#x@BU?VFj2M1>t-U%bn<;OF_wjp8|p8Qxy8S~he8w&HJ*W6h! zlYRUqwUMvmZKumYwjQAK!;zA`c!|Yk6}E5onAG*tTjZ!I>lF=CFyTac@}R14xbcfc z0*^|>H9}+3Pacw;H*5~EzEpYEDhpd8KBI2;8%RelFFKf~LAZHK3*sDHQ8bAeZHH4e zXy({@wmdWx5rR%<)#u;y@?FQzxxnT(b6nU08$7p)eH%o%pa|b<^(*g%D^Q}YW)^K| zjdR?cVKulhb9@vpi@|ZnukxKhKpArx7aEa*sdVm=3T6M%-6nyQ<&=o}h@%zGd2uw! zQB;YYQ3nZ+d8V`A-mz8Jc{2gpbAfZgLHxOP*i2#q3m;E+*erivVBJLgZ*q%G|AtS+=x zFYG(QByB=+yv4TWMZI3t60o#qUAa?fadhO{m-#OT?E9_62AJ{^_dbBovBi0rNg(nI zC5L0#l{e5PD1_5QnVD0sHamCq#_trG*S(cUut>|5Ux_!zFFKGoM$k_g@@M*xrSTYn zM(eD79XIkz7{dW7Vds2HaABa5@01GtKydvva!clvO4eD>_?@tS*AHGpUE0Pqm&7--AS;< z=Hu?NTGY}7fv+j@K@4OuGkd}pRX@8ScH^G4y=UwlWrY(!qAPIDZ?fOXJRf$3_6Loy z?U;iAb_U{pQiF1!L~x@>r1dJb87lsbn_>>0uG|h*INUMsLwIyV%e40=^A8(^yzX+N zQeR>|3RWMre&Hcdx{@;ID$*>Q?0D92L{H0x{;%cr18D~p zu&f=Q3-=&B-RWC*yQ78PB>2+lPG91b_>UC~DbwDV{CDVJSo46s)+-n*)x}UTsVD5+ zX-e;Vx`)2$Zg`jp))_p@x$ylo*YuLz(&XjFIfWDJ#%W@ zK!b1YxxOB6edX0p$|75llRursgbb3U$BO_1)_;x(41X^ZSfDwt1o__*{$PSC1=kkK z{f*ob5?=F7<(VGsxQTnt50$LhdBiA=^c|j$b*ehJr0gRg%dhQR6Ryy*zS_Wn%g2Cf z>#$f!KC>B^InI6S1L~^mox?>`cVnve)NXDDYr`Ddu#I_;}f6RJwCtzp)9#Cu+eC?ek=;E=WDfp{^G%Rh07|UdyORY`zvwd7q5BVhjzvs=D~l>rx=65%lBMHd>kJzgQ^FBT3DF$l z7x*|2S6Ay)^OX0pQciH=m6*x}V;(mI9n61V!MrD_|5WTUn6oC?)wi!i`62am!sDzq zZ_G@DMumCbcU{%&mJR0cd)Lcg z$+9Ruvt$}f*hXiKesH$kAJvrdafge(;-1{zog9AUuMdrVk zi?wJ$kLZ%6^L}tKEgT(&=~SBwv5l_Eh&Q5av|oMHeKUiAuHx>B4F@#ez9ZM^cJt2E zo9&=i6z&8W#eQrZ->g+i2O;H!n)$<|=lr#$kr>`Os}AI_wvJx`c(e6${9*Zf`BM~{)6AGGUHOAQ`QeybEWizs zc9QUFbw~F-gYv@XM$Ha^A@b$`CgNFTBbJ+Rt4FKc;M+S7_G%bD7{yPR=j6%HIy4vD zS&C`@RMO~YPK-J%wZQ!*uYP;!!;qrEKs=B6VE!W6VCJ$N5(-$CwuJr|!*Z%?C+z8K zjcU2cB!`Z~iA;lo6E)VTgp_Yx`CCuRDY_}oiU3KwZmR`N%at(O5(2m&4W&d z=d8sKyI49S_h_s1s_LcRG}h*<^qk1e>5nk2qATVt5nHP7u8D+I86Pr1+7qFNL@{En z$HsVSbh>cxXIwUsZShk$0(b-cIsUNyz5JQ0r;A#D@sQ_7mQ*as+cNmBX68D`q?*PR zYBS@`HbF1R({BTA3L>W=H>04VE}wLJEuyE@pY9wypqG$!g(fpvmt}l|jd&CkYR$>I zlVKJm;o0PAt6bMKc86ljix*OHCwJ9$C)Orq8xd-uv9L3?FGyyV{k4#7&RPK^iG`~G zA<>7Hy?cBxrd~59CnHNyoi#x@V;@)(p>I#e$&#nmxYu9*CuD(DO+DL;R znZ3`up0su6lHr-_XCRS$C&)nOR^g~3dg zEpfA1x$c4N%R6g_4}3UOq4|Uz4+3@Ab&9f>ZTc%RQG@tV&b%c@FLI3&7ho$sa4uM% z{b21m9Npi-Sz~{gI(kEguZ+5&Bj4=evZt*!I^b@TT%0H6$!GKe^0`Q5ljMk}i-zUd6*+q$-O?DkI9)-kh;_z*^H;ma=;u^Xin1m^*t1|@Y5?*Vx{PW;f;woG3NS6 zu62SUwF2#x7&+^1_sC{Q-%b9#GdX?dW0Vj9z-1!foWCvmFC{)lV*K|oy6gv|d#?n# zJifsmZ-27wYs~NEUL*NAQaXpG!s0xL{5rD|hN- z=$5t5ot-r20mj4$+(I@?lvJ*7PgnKX$y1*xSBtOckI!G}Q&8SgA3K;A#RXM|Ur9H+Pg_ye9og-9ASy z{`cs1;wifWU3_mi#PGR~k0=mt&%X+8N0^|>V5cGWA@j)|b6Q{dyf8Zdd_dltb-2SW zApbB!iHLR0Kr~EmR>|z}arqE9aV}&s>k#rGmFkA0#s+N((@~F%9}`;9)g)}Wq9R4c z8#L0RjB^`TQV^HjSM&C(16MbL>Dnbnb4!rEFma^s#Z+xsEaT9cXtw} z7O!6-)B71b*daaj92-}ZrV)t2@R#OpD;DF4PnUM~ zcx|b=c+k;`6Nf*f+m0_Ly)OCe8TO^4K$FX d;}KF0tr*9Gzo)bWwx1Cwg;%Xk{K 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 mQwi`HYYZJFWas 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�eRQb+ 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

    Fu!aYQF(wvNT;JX+h=JyY!t`Q@U(% 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%0Db`d)H)hl7}(g^8jG74 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

    BhuW(BYNG5Q++0noiH%kx#X$_>kHF$dszf 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