cauldron 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +20 -0
- data/README +1 -0
- data/README.rdoc +19 -0
- data/Rakefile +53 -0
- data/VERSION +1 -0
- data/bin/cauldron +10 -0
- data/cauldron/.autotest +23 -0
- data/cauldron/History.txt +6 -0
- data/cauldron/Manifest.txt +8 -0
- data/cauldron/README.txt +57 -0
- data/cauldron/Rakefile +27 -0
- data/cauldron/bin/cauldron +3 -0
- data/cauldron/lib/cauldron.rb +3 -0
- data/cauldron/test/test_cauldron.rb +8 -0
- data/features/cauldron_example_cases.feature +13 -0
- data/features/cauldron_generates_runtime_method.feature +12 -0
- data/features/cauldron_start_terminal.feature +13 -0
- data/features/step_definitions/cauldron_steps.rb +16 -0
- data/features/step_definitions/terminal_steps.rb +34 -0
- data/features/support/env.rb +19 -0
- data/lib/Chain.rb +879 -0
- data/lib/ChainMapping.rb +172 -0
- data/lib/CodeHandler.rb +517 -0
- data/lib/Mapping.rb +26 -0
- data/lib/MappingValues.rb +24 -0
- data/lib/ScopeDependencies.rb +7 -0
- data/lib/Theory.rb +274 -0
- data/lib/UnifiedChain.rb +110 -0
- data/lib/cauldron.rb +6 -0
- data/lib/cauldron/conversion.rb +15 -0
- data/lib/cauldron/pot.rb +134 -0
- data/lib/cauldron/sexp2cauldron.rb +156 -0
- data/lib/cauldron/terminal.rb +120 -0
- data/lib/cauldron/theory_factory.rb +10 -0
- data/lib/core/ActsAsCode.rb +25 -0
- data/lib/core/BlockToken.rb +33 -0
- data/lib/core/CCall.rb +7 -0
- data/lib/core/CTestCase.rb +27 -0
- data/lib/core/ClassMethodCallContainer.rb +45 -0
- data/lib/core/Container.rb +85 -0
- data/lib/core/InstanceCallContainer.rb +272 -0
- data/lib/core/MethodUsage.rb +66 -0
- data/lib/core/PrintVariables.rb +25 -0
- data/lib/core/TheoryGenerator.rb +764 -0
- data/lib/core/Token.rb +7 -0
- data/lib/core/assignment/Assignment.rb +18 -0
- data/lib/core/assignment/Equal.rb +39 -0
- data/lib/core/assignment/Equivalent.rb +20 -0
- data/lib/core/assignment/NotEqual.rb +14 -0
- data/lib/core/call_container/CallContainer.rb +66 -0
- data/lib/core/class_method_call/New.rb +15 -0
- data/lib/core/class_method_call/RuntimeClassMethodCall.rb +31 -0
- data/lib/core/declaration/Declaration.rb +16 -0
- data/lib/core/declaration/LiteralDeclaration.rb +47 -0
- data/lib/core/declaration/VariableDeclaration.rb +59 -0
- data/lib/core/instance_call/ArrayEach.rb +23 -0
- data/lib/core/instance_call/ArrayLength.rb +15 -0
- data/lib/core/instance_call/Chop.rb +28 -0
- data/lib/core/instance_call/Copy.rb +22 -0
- data/lib/core/instance_call/DeclaredVariable.rb +18 -0
- data/lib/core/instance_call/InstanceCall.rb +77 -0
- data/lib/core/instance_call/Params.rb +15 -0
- data/lib/core/instance_call/Push.rb +20 -0
- data/lib/core/instance_call/StringLength.rb +32 -0
- data/lib/core/instance_call/Times.rb +20 -0
- data/lib/core/instance_call/instance_calls.rb +168 -0
- data/lib/core/instance_call/length_equal.rb +15 -0
- data/lib/core/kernal/EvalCall.rb +15 -0
- data/lib/core/kernal/LocalVariablesCall.rb +15 -0
- data/lib/core/literal/Literal.rb +111 -0
- data/lib/core/literal/Raw.rb +23 -0
- data/lib/core/literal/RuntimeMethodLiteral.rb +21 -0
- data/lib/core/literal/StatementLiteral.rb +28 -0
- data/lib/core/method_call/AvailableVariablesCall.rb +25 -0
- data/lib/core/method_call/ClassCall.rb +33 -0
- data/lib/core/method_call/DefCall.rb +72 -0
- data/lib/core/method_call/EvaluateClassCall.rb +29 -0
- data/lib/core/method_call/MethodNameCall.rb +27 -0
- data/lib/core/method_call/ToDeclarationCall.rb +15 -0
- data/lib/core/requirement/Requirement.rb +291 -0
- data/lib/core/runtime_class/ArrayClass.rb +19 -0
- data/lib/core/runtime_class/ClassCallClass.rb +23 -0
- data/lib/core/runtime_class/ClassEvaluationClass.rb +19 -0
- data/lib/core/runtime_class/ClassName.rb +18 -0
- data/lib/core/runtime_class/DefCallClass.rb +21 -0
- data/lib/core/runtime_class/EqualClass.rb +19 -0
- data/lib/core/runtime_class/FixnumClass.rb +15 -0
- data/lib/core/runtime_class/IfStatementClass.rb +12 -0
- data/lib/core/runtime_class/InstanceCallClass.rb +19 -0
- data/lib/core/runtime_class/InstanceCallContainerClass.rb +16 -0
- data/lib/core/runtime_class/InstanceClassCallClass.rb +19 -0
- data/lib/core/runtime_class/LiteralClass.rb +19 -0
- data/lib/core/runtime_class/MethodParameterClass.rb +27 -0
- data/lib/core/runtime_class/MethodUsageClass.rb +27 -0
- data/lib/core/runtime_class/RequirementClass.rb +19 -0
- data/lib/core/runtime_class/ReturnClass.rb +21 -0
- data/lib/core/runtime_class/RuntimeClass.rb +30 -0
- data/lib/core/runtime_class/RuntimeClassClass.rb +19 -0
- data/lib/core/runtime_class/RuntimeMethodClass.rb +34 -0
- data/lib/core/runtime_class/StatementClass.rb +53 -0
- data/lib/core/runtime_class/StringClass.rb +23 -0
- data/lib/core/runtime_class/StringLengthClass.rb +19 -0
- data/lib/core/runtime_class/StringVariableClass.rb +19 -0
- data/lib/core/runtime_class/ThisClass.rb +15 -0
- data/lib/core/runtime_class/UnknownClass.rb +23 -0
- data/lib/core/runtime_class/class_names.rb +95 -0
- data/lib/core/runtime_class/runtime_class.rb +123 -0
- data/lib/core/runtime_method/ActsAsRuntimeMethod.rb +300 -0
- data/lib/core/runtime_method/ParametersContainer.rb +29 -0
- data/lib/core/runtime_method/RealisedRuntimeMethod.rb +94 -0
- data/lib/core/runtime_method/RuntimeMethod.rb +817 -0
- data/lib/core/runtime_method/WriteParameters.rb +35 -0
- data/lib/core/statement/ActsAsStatement.rb +116 -0
- data/lib/core/statement/ArrayAccess.rb +96 -0
- data/lib/core/statement/BlockStatement.rb +348 -0
- data/lib/core/statement/DeclarationStatement.rb +19 -0
- data/lib/core/statement/HackStatement.rb +25 -0
- data/lib/core/statement/HashAccess.rb +18 -0
- data/lib/core/statement/OpenStatement.rb +171 -0
- data/lib/core/statement/RealisedStatement.rb +5 -0
- data/lib/core/statement/SingleLineBlockStatement.rb +39 -0
- data/lib/core/statement/Statement.rb +1223 -0
- data/lib/core/statement/StatementDependencies.rb +271 -0
- data/lib/core/statement/StatementGroup.rb +157 -0
- data/lib/core/statement/StatementStructure2.rb +224 -0
- data/lib/core/statement/TheoryStatement.rb +60 -0
- data/lib/core/statement/TopologicalStatements.rb +34 -0
- data/lib/core/structure/DeclareNewInstanceStructure.rb +49 -0
- data/lib/core/structure/DeclareRuntimeMethodStructure.rb +34 -0
- data/lib/core/structure/DeclareVariableAsLiteralStructure.rb +31 -0
- data/lib/core/structure/DeclareVariableAsVariableStructure.rb +52 -0
- data/lib/core/structure/FixnumAdditionStructure.rb +56 -0
- data/lib/core/structure/InstanceCallContainerStructure.rb +50 -0
- data/lib/core/structure/InstanceCallStructure.rb +53 -0
- data/lib/core/structure/InstanceMethodCallStructure.rb +21 -0
- data/lib/core/structure/ReturnStructure.rb +20 -0
- data/lib/core/structure/StatementStructure.rb +11 -0
- data/lib/core/syntax/Addition.rb +25 -0
- data/lib/core/syntax/BlockContainer.rb +130 -0
- data/lib/core/syntax/Boolean.rb +15 -0
- data/lib/core/syntax/Code.rb +11 -0
- data/lib/core/syntax/Do.rb +20 -0
- data/lib/core/syntax/False.rb +12 -0
- data/lib/core/syntax/If.rb +28 -0
- data/lib/core/syntax/IfContainer.rb +100 -0
- data/lib/core/syntax/Nil.rb +15 -0
- data/lib/core/syntax/Return.rb +33 -0
- data/lib/core/syntax/Subtract.rb +19 -0
- data/lib/core/syntax/This.rb +40 -0
- data/lib/core/syntax/True.rb +20 -0
- data/lib/core/syntax/syntax.rb +24 -0
- data/lib/core/tracking/ActsAsTrackable.rb +65 -0
- data/lib/core/tracking/History.rb +167 -0
- data/lib/core/tracking/RuntimeTrackingMethod.rb +32 -0
- data/lib/core/tracking/Step.rb +52 -0
- data/lib/core/variable/ArrayVariable.rb +76 -0
- data/lib/core/variable/BaseVariable.rb +154 -0
- data/lib/core/variable/BlockVariable.rb +92 -0
- data/lib/core/variable/FixnumVariable.rb +36 -0
- data/lib/core/variable/HistoryVariable.rb +8 -0
- data/lib/core/variable/MethodParameter.rb +206 -0
- data/lib/core/variable/MethodUsageVariable.rb +60 -0
- data/lib/core/variable/NilVariable.rb +29 -0
- data/lib/core/variable/RuntimeMethodParameter.rb +67 -0
- data/lib/core/variable/StatementVariable.rb +72 -0
- data/lib/core/variable/StepVariable.rb +7 -0
- data/lib/core/variable/StringVariable.rb +46 -0
- data/lib/core/variable/TypeVariable.rb +72 -0
- data/lib/core/variable/Unknown.rb +116 -0
- data/lib/core/variable/UnknownVariable.rb +29 -0
- data/lib/core/variable/Variable.rb +70 -0
- data/lib/core/variable/VariableContainer.rb +28 -0
- data/lib/core/variable/VariableIncluded.rb +27 -0
- data/lib/core/variable/VariableReference.rb +85 -0
- data/lib/error/FailedToFindStatementContainerError.rb +7 -0
- data/lib/error/FailedToFindStatementError.rb +7 -0
- data/lib/error/FailedToFindVariableError.rb +7 -0
- data/lib/error/FailedToLiteraliseError.rb +7 -0
- data/lib/error/FailedVariableMatch.rb +7 -0
- data/lib/error/ImproperStatementUsageError.rb +7 -0
- data/lib/error/IncompatiableRequirementsError.rb +7 -0
- data/lib/error/InvalidStatementError.rb +7 -0
- data/lib/error/MethodSizeError.rb +7 -0
- data/lib/error/RuntimeSyntaxError.rb +7 -0
- data/lib/error/UnexpectedStatementTypeError.rb +7 -0
- data/lib/error/UnknownStatementType.rb +7 -0
- data/lib/error/UnliteralisableError.rb +7 -0
- data/lib/implemented_chain.rb +34 -0
- data/lib/intrinsic/IntrinsicLastRuntimeMethod.rb +20 -0
- data/lib/intrinsic/IntrinsicLiteral.rb +26 -0
- data/lib/intrinsic/IntrinsicObject.rb +22 -0
- data/lib/intrinsic/IntrinsicRuntimeMethod.rb +27 -0
- data/lib/intrinsic/IntrinsicTestCases.rb +17 -0
- data/lib/logger/StandardLogger.rb +62 -0
- data/lib/required.rb +236 -0
- data/lib/ruby_code/Array.rb +95 -0
- data/lib/ruby_code/Fixnum.rb +39 -0
- data/lib/ruby_code/Hash.rb +25 -0
- data/lib/ruby_code/NilClass.rb +19 -0
- data/lib/ruby_code/Object.rb +24 -0
- data/lib/ruby_code/String.rb +86 -0
- data/lib/ruby_code/Symbol.rb +7 -0
- data/lib/standard_library/Tasks.rb +12 -0
- data/lib/theories.rb +143 -0
- data/lib/theory/ActionImplementation.rb +17 -0
- data/lib/theory/TheoryAction.rb +70 -0
- data/lib/theory/TheoryChainValidator.rb +101 -0
- data/lib/theory/TheoryComponent.rb +42 -0
- data/lib/theory/TheoryConnector.rb +755 -0
- data/lib/theory/TheoryDependent.rb +135 -0
- data/lib/theory/TheoryImplementation.rb +74 -0
- data/lib/theory/TheoryResult.rb +131 -0
- data/lib/theory/TheoryVariable.rb +63 -0
- data/lib/theory/theory_collection.rb +62 -0
- data/lib/util/ClassEvaluation.rb +68 -0
- data/lib/util/CodeEvaluation.rb +35 -0
- data/lib/util/DeclarationStatementEvaluation.rb +31 -0
- data/lib/util/MethodEvaluation.rb +49 -0
- data/lib/util/MethodTester.rb +71 -0
- data/lib/util/MethodValidation.rb +145 -0
- data/lib/util/MethodWriter.rb +66 -0
- data/lib/util/Parser.rb +299 -0
- data/lib/util/StatementCheck.rb +42 -0
- data/lib/util/StringToTheory.rb +119 -0
- data/lib/util/System.rb +8 -0
- data/spec/cauldron/pot_spec.rb +6 -0
- data/spec/cauldron/runtime_method_spec.rb +36 -0
- data/spec/cauldron/sexp_2_cauldron_spec.rb +26 -0
- data/spec/cauldron/terminal_spec.rb +38 -0
- data/spec/cauldron/theory_action_spec.rb +5 -0
- data/spec/spec_helper.rb +4 -0
- data/test/fixtures/chains/1/declaration.txt +26 -0
- data/test/fixtures/chains/1/dump +0 -0
- data/test/fixtures/chains/2/declaration.txt +26 -0
- data/test/fixtures/chains/2/dump +0 -0
- data/test/fixtures/chains/3/declaration.txt +26 -0
- data/test/fixtures/chains/3/dump +0 -0
- data/test/fixtures/implementation_results/0/declaration.txt +3 -0
- data/test/fixtures/implementation_results/0/dump +0 -0
- data/test/fixtures/theories/0/declaration.txt +9 -0
- data/test/fixtures/theories/0/desc +10 -0
- data/test/fixtures/theories/0/dump +0 -0
- data/test/fixtures/theories/1/declaration.txt +15 -0
- data/test/fixtures/theories/1/desc +11 -0
- data/test/fixtures/theories/1/dump +0 -0
- data/test/fixtures/theories/10/declaration.txt +23 -0
- data/test/fixtures/theories/10/desc +17 -0
- data/test/fixtures/theories/10/dump +0 -0
- data/test/fixtures/theories/11/declaration.txt +20 -0
- data/test/fixtures/theories/11/desc +14 -0
- data/test/fixtures/theories/11/dump +0 -0
- data/test/fixtures/theories/12/declaration.txt +18 -0
- data/test/fixtures/theories/12/desc +12 -0
- data/test/fixtures/theories/12/dump +0 -0
- data/test/fixtures/theories/13/declaration.txt +24 -0
- data/test/fixtures/theories/13/desc +20 -0
- data/test/fixtures/theories/13/dump +0 -0
- data/test/fixtures/theories/14/declaration.txt +26 -0
- data/test/fixtures/theories/14/desc +20 -0
- data/test/fixtures/theories/14/dump +0 -0
- data/test/fixtures/theories/15/declaration.txt +20 -0
- data/test/fixtures/theories/15/desc +14 -0
- data/test/fixtures/theories/15/dump +0 -0
- data/test/fixtures/theories/16/declaration.txt +30 -0
- data/test/fixtures/theories/16/desc +14 -0
- data/test/fixtures/theories/16/dump +0 -0
- data/test/fixtures/theories/17/declaration.txt +25 -0
- data/test/fixtures/theories/17/desc +11 -0
- data/test/fixtures/theories/17/dump +0 -0
- data/test/fixtures/theories/18/declaration.txt +23 -0
- data/test/fixtures/theories/18/desc +11 -0
- data/test/fixtures/theories/18/dump +0 -0
- data/test/fixtures/theories/19/declaration.txt +23 -0
- data/test/fixtures/theories/19/desc +11 -0
- data/test/fixtures/theories/19/dump +0 -0
- data/test/fixtures/theories/2/declaration.txt +12 -0
- data/test/fixtures/theories/2/desc +10 -0
- data/test/fixtures/theories/2/dump +0 -0
- data/test/fixtures/theories/20/declaration.txt +23 -0
- data/test/fixtures/theories/20/desc +17 -0
- data/test/fixtures/theories/20/dump +0 -0
- data/test/fixtures/theories/3/declaration.txt +19 -0
- data/test/fixtures/theories/3/desc +11 -0
- data/test/fixtures/theories/3/dump +0 -0
- data/test/fixtures/theories/4/declaration.txt +11 -0
- data/test/fixtures/theories/4/desc +11 -0
- data/test/fixtures/theories/4/dump +0 -0
- data/test/fixtures/theories/5/declaration.txt +6 -0
- data/test/fixtures/theories/5/desc +9 -0
- data/test/fixtures/theories/5/dump +0 -0
- data/test/fixtures/theories/6/declaration.txt +13 -0
- data/test/fixtures/theories/6/desc +11 -0
- data/test/fixtures/theories/6/dump +0 -0
- data/test/fixtures/theories/7/declaration.txt +19 -0
- data/test/fixtures/theories/7/desc +11 -0
- data/test/fixtures/theories/7/dump +0 -0
- data/test/fixtures/theories/8/declaration.txt +21 -0
- data/test/fixtures/theories/8/desc +11 -0
- data/test/fixtures/theories/8/dump +0 -0
- data/test/fixtures/theories/9/declaration.txt +24 -0
- data/test/fixtures/theories/9/desc +20 -0
- data/test/fixtures/theories/9/dump +0 -0
- data/test/fixtures/theory_implementations/0/declaration.txt +11 -0
- data/test/fixtures/theory_implementations/0/desc.txt +9 -0
- data/test/fixtures/theory_implementations/0/dump +0 -0
- data/test/fixtures/theory_implementations/0/theory_id +1 -0
- data/test/fixtures/theory_implementations/1/desc.txt +9 -0
- data/test/fixtures/theory_implementations/1/dump +0 -0
- data/test/fixtures/theory_implementations/1/theory_id +1 -0
- data/test/fixtures/theory_implementations/2/desc.txt +9 -0
- data/test/fixtures/theory_implementations/2/dump +0 -0
- data/test/fixtures/theory_implementations/2/theory_id +1 -0
- data/test/output/simple_method.txt +6 -0
- data/test/output/test_method/first_possible_method.txt +6 -0
- data/test/output/test_simple_cases/simple_case_01.txt +8 -0
- data/test/output/test_simple_cases/simple_case_02.txt +7 -0
- data/test/output/test_simple_cases/simple_case_03.txt +8 -0
- data/test/output/test_simple_cases/simple_case_04.txt +8 -0
- data/test/output/test_simple_cases/simple_case_05.txt +8 -0
- data/test/output/test_simple_cases/simple_case_06.txt +9 -0
- data/test/output/test_simple_cases/simple_case_07.txt +9 -0
- data/test/output/test_simple_cases/simple_case_08.txt +9 -0
- data/test/tc_contextual_variables.rb +87 -0
- data/test/tc_describe.rb +47 -0
- data/test/tc_method.rb +133 -0
- data/test/tc_requirement.rb +30 -0
- data/test/tc_suite_complete.rb +26 -0
- data/test/tc_variable.rb +52 -0
- data/test/ts_complete.rb +84 -0
- data/test/ts_stable.rb +81 -0
- data/test/unit/core/declaration/tc_literal_declaration.rb +34 -0
- data/test/unit/core/method_call/tc_class_call.rb +20 -0
- data/test/unit/core/runtime_method/tc_realised_runtime_method.rb +129 -0
- data/test/unit/core/runtime_method/tc_runtime_method.rb +616 -0
- data/test/unit/core/statement/tc_array_access.rb +63 -0
- data/test/unit/core/statement/tc_block_statement.rb +51 -0
- data/test/unit/core/statement/tc_hack_statement.rb +26 -0
- data/test/unit/core/statement/tc_open_statement.rb +70 -0
- data/test/unit/core/statement/tc_statement.rb +681 -0
- data/test/unit/core/statement/tc_statement_dependencies.rb +146 -0
- data/test/unit/core/statement/tc_statement_group.rb +35 -0
- data/test/unit/core/statement/tc_statement_replace_variable.rb +61 -0
- data/test/unit/core/statement/tc_theory_statement.rb +51 -0
- data/test/unit/core/structure/tc_declare_new_instance_structure.rb +41 -0
- data/test/unit/core/structure/tc_declare_variable_as_literal_structure.rb +41 -0
- data/test/unit/core/structure/tc_declare_variable_as_variable_structure.rb +66 -0
- data/test/unit/core/structure/tc_instance_call_container_structure.rb +41 -0
- data/test/unit/core/structure/tc_return_structure.rb +32 -0
- data/test/unit/core/syntax/tc_block_container.rb +32 -0
- data/test/unit/core/syntax/tc_if_container.rb +39 -0
- data/test/unit/core/tc_class_method_call.rb +34 -0
- data/test/unit/core/tc_container.rb +41 -0
- data/test/unit/core/tc_ctest_case.rb +25 -0
- data/test/unit/core/tc_instance_call_container.rb +93 -0
- data/test/unit/core/tc_literal.rb +30 -0
- data/test/unit/core/tc_theory_generator.rb +336 -0
- data/test/unit/core/tc_theory_generator_heavy.rb +42 -0
- data/test/unit/core/tracking/tc_history.rb +102 -0
- data/test/unit/core/tracking/tc_step.rb +65 -0
- data/test/unit/core/variable/tc_array_variable.rb +61 -0
- data/test/unit/core/variable/tc_block_variable.rb +17 -0
- data/test/unit/core/variable/tc_fixnum_variable.rb +54 -0
- data/test/unit/core/variable/tc_method_parameter_variable.rb +22 -0
- data/test/unit/core/variable/tc_runtime_method_variable.rb +32 -0
- data/test/unit/core/variable/tc_string_variable.rb +37 -0
- data/test/unit/core/variable/tc_unknown.rb +24 -0
- data/test/unit/core/variable/tc_variable_reference.rb +28 -0
- data/test/unit/ruby_code/tc_array.rb +64 -0
- data/test/unit/ruby_code/tc_fixnum.rb +18 -0
- data/test/unit/ruby_code/tc_hash.rb +41 -0
- data/test/unit/ruby_code/tc_string.rb +38 -0
- data/test/unit/tc_chain.rb +434 -0
- data/test/unit/tc_chain_mapping.rb +62 -0
- data/test/unit/tc_chain_with_case_1.rb +169 -0
- data/test/unit/tc_instance_call.rb +40 -0
- data/test/unit/tc_instance_call_structure.rb +35 -0
- data/test/unit/tc_method_usage.rb +35 -0
- data/test/unit/tc_pot.rb +124 -0
- data/test/unit/tc_runtime_tracking_method.rb +40 -0
- data/test/unit/tc_statement_structure_2.rb +43 -0
- data/test/unit/tc_theory.rb +533 -0
- data/test/unit/tc_variable_declaration.rb +32 -0
- data/test/unit/theory/tc_theory_action.rb +80 -0
- data/test/unit/theory/tc_theory_action_implementation.rb +23 -0
- data/test/unit/theory/tc_theory_chain_validator.rb +340 -0
- data/test/unit/theory/tc_theory_connector.rb +396 -0
- data/test/unit/theory/tc_theory_dependent.rb +151 -0
- data/test/unit/theory/tc_theory_implementation.rb +133 -0
- data/test/unit/theory/tc_theory_result.rb +111 -0
- data/test/unit/theory/tc_theory_variable.rb +45 -0
- data/test/unit/util/tc_method_validation.rb +98 -0
- data/test/unit/util/tc_parser.rb +108 -0
- data/test/unit/util/tc_string_to_theory.rb +299 -0
- data/test/unit/variable/tc_method_usage_variable.rb +25 -0
- data/tmp/runtime_method_evaluation.rb +10 -0
- metadata +522 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
# NOTE FROM VARIABLE REFERENCE
|
2
|
+
# I'm not sure if this is the way to go, but I need some way
|
3
|
+
# to handle the case where variables reference variables.
|
4
|
+
#
|
5
|
+
# For example:
|
6
|
+
#
|
7
|
+
# #
|
8
|
+
# #
|
9
|
+
# def method_8
|
10
|
+
# var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
|
11
|
+
# var_570 = var_12.declared_variable
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# In this case it is difficult to realise var_570 since it references an
|
15
|
+
# unrealised variable. I should maybe have created an Unknown class, but
|
16
|
+
# it is still an Unknown.
|
17
|
+
#
|
18
|
+
class UnknownVariable < TypeVariable
|
19
|
+
|
20
|
+
def initialize(val,id=nil)
|
21
|
+
super(val,id)
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
def destructive_instance_calls(available=[])
|
26
|
+
return []
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# This class represents any variable object used to help generate
|
2
|
+
# a method.
|
3
|
+
#
|
4
|
+
|
5
|
+
module Variable
|
6
|
+
|
7
|
+
include VariableIncluded
|
8
|
+
|
9
|
+
@@variable_id = 0
|
10
|
+
|
11
|
+
# The unique id is used to identify actually different variables. This essentially occurs
|
12
|
+
# when a destructive method call is used. For example an two array variables might have the
|
13
|
+
# same variable_id say '2' so would both be written as 'var_2' but one of them might have had
|
14
|
+
# another element pushed into it e.g. 'var_2.push(6)'. The changed variable would then
|
15
|
+
# receive a different uniq_id.
|
16
|
+
@@uniq_id = 0
|
17
|
+
|
18
|
+
#CONST_TEST = 'test'
|
19
|
+
# 331 Constants are in capitals and accesses Variable::CONST_TEST class variables use @@
|
20
|
+
|
21
|
+
# Create the declaration for a unique variable id. The unique_variable_id reflects the different
|
22
|
+
# values a variable might have. For example if a variable is overwritten it will have the same
|
23
|
+
# name as it's predisessor but not the same value.
|
24
|
+
attr_reader :uniq_id, :scope_id
|
25
|
+
attr_writer :scope_id
|
26
|
+
|
27
|
+
def self.reset_global_id
|
28
|
+
#http://www.zenspider.com/Languages/Ruby/QuickRef.html
|
29
|
+
unless $".include?('test/unit.rb')
|
30
|
+
StandardLogger.log 'WARNING: Resetting variable id, this should only be done for tests'
|
31
|
+
end
|
32
|
+
@@variable_id = 0
|
33
|
+
@@uniq_id = 0
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.variable_id
|
37
|
+
return @@variable_id
|
38
|
+
end
|
39
|
+
|
40
|
+
# TODO This is not a permenant method it is a temporary fix
|
41
|
+
# as I migrate away from requirements.
|
42
|
+
#
|
43
|
+
def meets_requirements? of
|
44
|
+
return true if of.literalise.value == self.value
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
# Change the value of the variables uniq_id
|
49
|
+
#
|
50
|
+
# @param The new value for the variables uniq_id
|
51
|
+
#
|
52
|
+
def uniq_id=(value)
|
53
|
+
@uniq_id = value
|
54
|
+
raise StandardError.new('Should be fixnum') unless value.kind_of?(Fixnum)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Updates the uniq_id for this variable so it can be regarded
|
58
|
+
# differently. Uniq_ids are used in the CodeHandler to allow
|
59
|
+
# the inclusion of the correct statements to recreate a variable.
|
60
|
+
#
|
61
|
+
def increament_uniq_id!
|
62
|
+
@uniq_id = @@uniq_id
|
63
|
+
@@uniq_id += 1
|
64
|
+
end
|
65
|
+
|
66
|
+
def to_var(id=nil)
|
67
|
+
raise StandardError.new(self.class.to_s+' is already a Variable - should not call to_var')
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class VariableContainer < BaseVariable
|
2
|
+
|
3
|
+
attr_writer :realised
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
super()
|
7
|
+
|
8
|
+
@realised = false
|
9
|
+
end
|
10
|
+
|
11
|
+
# Returns a duplicate of this variable container.
|
12
|
+
#
|
13
|
+
def copy
|
14
|
+
result = VariableContainer.new(){{:variable_id => self.variable_id,:uniq_id=>@uniq_id, :uniq_id_history=>@uniq_id_history.copy}}
|
15
|
+
result.instance_variable = @instance_variable
|
16
|
+
self.each do |x|
|
17
|
+
result.push(x)
|
18
|
+
end
|
19
|
+
result.realised = @realised
|
20
|
+
return result
|
21
|
+
end
|
22
|
+
|
23
|
+
# TODO Write description - hack for instance calls
|
24
|
+
def variable
|
25
|
+
return self
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# Classes that include this module are presumeed to include a variable,
|
2
|
+
# this is is used in the following classes.
|
3
|
+
#
|
4
|
+
# Variable
|
5
|
+
# InstanceCallContainer
|
6
|
+
# ArrayAccess
|
7
|
+
#
|
8
|
+
module VariableIncluded
|
9
|
+
|
10
|
+
# Should have the following methods
|
11
|
+
# variable
|
12
|
+
|
13
|
+
# Returns the variable. This call also exists in the InstanceCallContainer class. It is
|
14
|
+
# included to allow access of the variable with the need to disgiush whether it
|
15
|
+
# is variable or an instance call.
|
16
|
+
#
|
17
|
+
def variable
|
18
|
+
return self
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns the actual variable with the specified id.
|
22
|
+
#
|
23
|
+
def find_actual_variable(id)
|
24
|
+
raise StandardError.new('Method needs defined in class')
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# I'm not sure if this is the way to go, but I need some way
|
2
|
+
# to handle the case where variables reference variables.
|
3
|
+
#
|
4
|
+
# For example:
|
5
|
+
#
|
6
|
+
# #
|
7
|
+
# #
|
8
|
+
# def method_8
|
9
|
+
# var_12 = Statement.new(Unknown.new,Equal.new,8.to_declaration)
|
10
|
+
# var_570 = var_12.declared_variable
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# In this case it is difficult to realise var_570 since it references an
|
14
|
+
# unrealised variable. I should maybe have created an Unknown class, but
|
15
|
+
# it is still an Unknown.
|
16
|
+
#
|
17
|
+
class VariableReference
|
18
|
+
include Variable
|
19
|
+
|
20
|
+
attr_reader :variable_id
|
21
|
+
|
22
|
+
#
|
23
|
+
# @param referenced_variable_id
|
24
|
+
#
|
25
|
+
def initialize(var_id,referenced_variable_id)
|
26
|
+
@variable_id = var_id
|
27
|
+
@referenced_variable_id = referenced_variable_id
|
28
|
+
raise StandardError.new('I am getting rid of this')
|
29
|
+
end
|
30
|
+
|
31
|
+
def copy
|
32
|
+
return VariableReference.new(@variable_id,@referenced_variable_id)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns the variable if the ids matched
|
36
|
+
#
|
37
|
+
# @param id The id of the variable that is being looked for
|
38
|
+
#
|
39
|
+
def find_actual_variable(id)
|
40
|
+
return self if @variable_id == id
|
41
|
+
throw :variable_not_found
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
#
|
46
|
+
#
|
47
|
+
def write()
|
48
|
+
if (@instance_variable)
|
49
|
+
return '@var_'+variable_id.to_s
|
50
|
+
end
|
51
|
+
return 'var_'+variable_id.to_s
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_literal_string
|
55
|
+
return 'var'
|
56
|
+
end
|
57
|
+
|
58
|
+
def realised?
|
59
|
+
return false
|
60
|
+
end
|
61
|
+
|
62
|
+
# TODO Write tests for this
|
63
|
+
# Returns an array of desctructive instance calls given the available
|
64
|
+
# variables.
|
65
|
+
#
|
66
|
+
# @param available An array of other variables that can be used as
|
67
|
+
# parameters.
|
68
|
+
#
|
69
|
+
def destructive_instance_calls(available=[])
|
70
|
+
|
71
|
+
# Find the variable it references
|
72
|
+
available_variables = available.select {|x| x.kind_of?(Variable)}
|
73
|
+
|
74
|
+
not_found = lambda{raise StandardError.new('Unable to find variable with id '+@referenced_variable_id.to_s)}
|
75
|
+
referenced_variable = available_variables.detect(not_found) {|x| x.variable_id == @referenced_variable_id}
|
76
|
+
|
77
|
+
# Duplicate the referenced variable and update it's variable id
|
78
|
+
duplicated_var = referenced_variable.copy
|
79
|
+
duplicated_var.variable_id = @variable_id
|
80
|
+
|
81
|
+
return duplicated_var.destructive_instance_calls(available)
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# This represents a chain that doesn't contain any theory variables. All the variables
|
2
|
+
# have been replaced with intrinsic/real values.
|
3
|
+
#
|
4
|
+
class ImplementedChain
|
5
|
+
|
6
|
+
#
|
7
|
+
#
|
8
|
+
#
|
9
|
+
def initialize(nodes)
|
10
|
+
@nodes = nodes
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
@nodes.each(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO Note sure how I feel about this direct access
|
18
|
+
def [](index)
|
19
|
+
return @nodes[index]
|
20
|
+
end
|
21
|
+
|
22
|
+
def length
|
23
|
+
return @nodes.length
|
24
|
+
end
|
25
|
+
|
26
|
+
def describe(tab=0)
|
27
|
+
return @nodes.inject('') {|total,x| total += x.describe}
|
28
|
+
end
|
29
|
+
|
30
|
+
def write(tab=0)
|
31
|
+
return @nodes.inject('') {|total,x| total += x.write}
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# This represents any reference to main runtime method instance
|
2
|
+
# within theories.
|
3
|
+
#
|
4
|
+
class IntrinsicLastRuntimeMethod < IntrinsicObject
|
5
|
+
include Token
|
6
|
+
|
7
|
+
def initialize(intrinsic_object_id=nil)
|
8
|
+
@intrinsic_object_id = intrinsic_object_id
|
9
|
+
super()
|
10
|
+
end
|
11
|
+
|
12
|
+
def write
|
13
|
+
return 'last_runtime_method'
|
14
|
+
end
|
15
|
+
|
16
|
+
def describe
|
17
|
+
return '<last_runtime_method>'
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class IntrinsicLiteral < IntrinsicObject
|
2
|
+
include Token
|
3
|
+
|
4
|
+
def initialize(value,intrinsic_object_id=nil)
|
5
|
+
@intrinsic_object_id = intrinsic_object_id
|
6
|
+
super()
|
7
|
+
@value = value
|
8
|
+
end
|
9
|
+
|
10
|
+
def write
|
11
|
+
@value.write
|
12
|
+
end
|
13
|
+
|
14
|
+
def describe
|
15
|
+
@value.describe
|
16
|
+
end
|
17
|
+
|
18
|
+
def copy
|
19
|
+
return IntrinsicLiteral.new(@value,@intrinsic_object_id)
|
20
|
+
end
|
21
|
+
|
22
|
+
def literal
|
23
|
+
return @value
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|