├── .ant-targets-build.xml ├── .classpath ├── .gitattributes ├── .github └── workflows │ └── ant.yml ├── .gitignore ├── .project ├── .travis.yml ├── LICENSE ├── README.md ├── boa-master.code-workspace ├── boa.bat ├── boa.sh ├── build.xml ├── checkstyle-suppress.xml ├── checkstyle.xml ├── compile.bat ├── compile.sh ├── conf └── log4j.properties ├── dataset ├── .gitignore ├── large_sample │ └── repos │ │ ├── Thread-10-page-270.json │ │ ├── Thread-10-page-271.json │ │ ├── Thread-10-page-272.json │ │ ├── Thread-10-page-273.json │ │ ├── Thread-10-page-274.json │ │ ├── Thread-10-page-275.json │ │ ├── Thread-10-page-276.json │ │ ├── Thread-10-page-277.json │ │ ├── Thread-10-page-278.json │ │ ├── Thread-10-page-279.json │ │ ├── Thread-10-page-60.json │ │ ├── Thread-10-page-61.json │ │ ├── Thread-10-page-62.json │ │ ├── Thread-10-page-63.json │ │ ├── Thread-10-page-64.json │ │ ├── Thread-10-page-65.json │ │ ├── Thread-10-page-66.json │ │ ├── Thread-10-page-67.json │ │ ├── Thread-10-page-68.json │ │ ├── Thread-10-page-69.json │ │ ├── Thread-11-page-170.json │ │ ├── Thread-11-page-171.json │ │ ├── Thread-11-page-172.json │ │ ├── Thread-11-page-173.json │ │ ├── Thread-11-page-174.json │ │ ├── Thread-11-page-175.json │ │ ├── Thread-11-page-176.json │ │ ├── Thread-11-page-177.json │ │ ├── Thread-11-page-178.json │ │ ├── Thread-11-page-179.json │ │ ├── Thread-12-page-120.json │ │ ├── Thread-12-page-121.json │ │ ├── Thread-12-page-122.json │ │ ├── Thread-12-page-123.json │ │ ├── Thread-12-page-124.json │ │ ├── Thread-12-page-125.json │ │ ├── Thread-12-page-126.json │ │ ├── Thread-12-page-127.json │ │ ├── Thread-12-page-128.json │ │ ├── Thread-12-page-129.json │ │ ├── Thread-13-page-410.json │ │ ├── Thread-13-page-411.json │ │ ├── Thread-13-page-412.json │ │ ├── Thread-13-page-413.json │ │ ├── Thread-13-page-414.json │ │ ├── Thread-13-page-415.json │ │ ├── Thread-13-page-416.json │ │ ├── Thread-13-page-417.json │ │ ├── Thread-13-page-418.json │ │ ├── Thread-13-page-419.json │ │ ├── Thread-13-page-971.json │ │ ├── Thread-14-page-300.json │ │ ├── Thread-14-page-301.json │ │ ├── Thread-14-page-302.json │ │ ├── Thread-14-page-303.json │ │ ├── Thread-14-page-304.json │ │ ├── Thread-14-page-305.json │ │ ├── Thread-14-page-306.json │ │ ├── Thread-14-page-307.json │ │ ├── Thread-14-page-308.json │ │ ├── Thread-14-page-309.json │ │ ├── Thread-14-page-415.json │ │ ├── Thread-15-page-172.json │ │ ├── Thread-16-page-220.json │ │ ├── Thread-16-page-221.json │ │ ├── Thread-16-page-222.json │ │ ├── Thread-16-page-223.json │ │ ├── Thread-16-page-224.json │ │ ├── Thread-16-page-225.json │ │ ├── Thread-16-page-226.json │ │ ├── Thread-16-page-227.json │ │ ├── Thread-16-page-228.json │ │ ├── Thread-16-page-229.json │ │ ├── Thread-17-page-222.json │ │ ├── Thread-8-page-109.json │ │ ├── Thread-8-page-11.json │ │ ├── Thread-8-page-110.json │ │ ├── Thread-8-page-111.json │ │ ├── Thread-8-page-112.json │ │ ├── Thread-8-page-113.json │ │ ├── Thread-8-page-114.json │ │ ├── Thread-8-page-115.json │ │ ├── Thread-8-page-116.json │ │ ├── Thread-8-page-117.json │ │ ├── Thread-8-page-118.json │ │ ├── Thread-8-page-275.json │ │ ├── Thread-8-page-83.json │ │ ├── Thread-9-page-17.json │ │ ├── Thread-9-page-301.json │ │ ├── Thread-9-page-54.json │ │ ├── Thread-9-page-70.json │ │ ├── Thread-9-page-71.json │ │ ├── Thread-9-page-72.json │ │ ├── Thread-9-page-73.json │ │ ├── Thread-9-page-74.json │ │ ├── Thread-9-page-75.json │ │ ├── Thread-9-page-76.json │ │ ├── Thread-9-page-77.json │ │ ├── Thread-9-page-78.json │ │ └── Thread-9-page-79.json └── small_sample │ └── repos │ ├── Thread-13-page-971.json │ ├── Thread-14-page-415.json │ ├── Thread-15-page-172.json │ ├── Thread-17-page-222.json │ ├── Thread-8-page-11.json │ ├── Thread-8-page-275.json │ ├── Thread-8-page-83.json │ ├── Thread-9-page-17.json │ ├── Thread-9-page-301.json │ └── Thread-9-page-54.json ├── doc └── dev │ ├── img │ ├── boa_evaluator_output.png │ ├── eclipse_library_tab.png │ ├── eclipse_package_explorer_final.png │ ├── eclipse_runconfig_arguments.png │ ├── eclipse_runconfig_main.png │ ├── eclipse_source_tab_final.png │ ├── intellij_clone_repo.png │ ├── intellij_dependencies_tab.png │ ├── intellij_evaluator_output.png │ ├── intellij_project_explorer_final.png │ ├── intellij_runconfig_main.png │ └── intellij_source_tab_final.png │ └── setup.md ├── evaluate.bat ├── evaluate.sh ├── failingtest ├── codegen │ ├── assign-func-params.boa │ ├── curry.boa │ └── quantified-func-call.boa └── typecheck │ ├── errors │ └── quant-missing-use.boa │ └── forward-declare-func.boa ├── lib ├── antlr-4.5-complete.jar ├── checkstyle-6.19-all.jar ├── commons-cli-1.2.jar ├── commons-lang-2.4.jar ├── commons-math-2.1.jar ├── datagen │ ├── app-1.3.200-v20130910-1609-javadoc.jar │ ├── app-1.3.200-v20130910-1609-sources.jar │ ├── app-1.3.200-v20130910-1609.jar │ ├── com.jcraft.jsch-all-1.0.1.release.jar │ ├── commons-beanutils-1.8.3.jar │ ├── commons-collections-3.2.1.jar │ ├── commons-configuration-1.6.jar │ ├── commons-io-2.4.jar │ ├── commons-logging-1.1.1.jar │ ├── cssparser-0.9.23-sources.jar │ ├── cssparser-0.9.23.jar │ ├── dom4j-2.0.2-sources.jar │ ├── dom4j-2.0.2.jar │ ├── eclipse.jdt.core.jar │ ├── ezmorph-1.0.6.jar │ ├── gson-2.7.jar │ ├── gson-gson-parent-2.7.zip │ ├── jena-core-2.7.3.jar │ ├── jena-iri-0.9.3.jar │ ├── jsoup-1.10.3-javadoc.jar │ ├── jsoup-1.10.3-sources.jar │ ├── jsoup-1.10.3.jar │ ├── log4j-1.2.16.jar │ ├── maven-model-3.0-sources.jar │ ├── maven-model-3.0.jar │ ├── org.eclipse.core.contenttype_3.4.100.dist.jar │ ├── org.eclipse.core.filesystem_1.6.0.v20160503-1608.jar │ ├── org.eclipse.core.jobs_3.5.101.dist.jar │ ├── org.eclipse.core.resources_3.7.101.dist.jar │ ├── org.eclipse.core.runtime_3.7.0.dist.jar │ ├── org.eclipse.dltk.core_5.7.1.201703020501.jar │ ├── org.eclipse.equinox.common_3.6.0.dist.jar │ ├── org.eclipse.equinox.preferences_3.4.2.dist.jar │ ├── org.eclipse.equinox.registry.source_3.5.100.v20110502.jar │ ├── org.eclipse.equinox.registry_3.5.100.v20110502.jar │ ├── org.eclipse.jgit-4.0.1.201506240215-r-javadoc.jar │ ├── org.eclipse.jgit-4.0.1.201506240215-r-sources.jar │ ├── org.eclipse.jgit-4.0.1.201506240215-r.jar │ ├── org.eclipse.osgi.source_3.9.1.v20130814-1242.jar │ ├── org.eclipse.osgi_3.9.1.v20130814-1242.jar │ ├── org.eclipse.php.core.parser.source_4.3.1.201703301037.jar │ ├── org.eclipse.php.core.parser_4.3.1.201703301037.jar │ ├── org.eclipse.php.core.source_4.3.1.201703301037.jar │ ├── org.eclipse.php.core_4.3.1.201703301037.jar │ ├── org.eclipse.text-3.5.101-sources.jar │ ├── org.eclipse.text-3.5.101.jar │ ├── org.eclipse.wst.jsdt.core_1.3.1.v201401291437.jar │ ├── plexus-utils-2.0.5-sources.jar │ ├── plexus-utils-2.0.5.jar │ ├── protobuf-2.5.0.zip │ ├── protobuf-java-2.5.0.jar │ ├── rhino-1.7.7.1-sources.zip │ ├── rhino-1.7.7.1.jar │ ├── sac.jar │ ├── sacjavadoc-1.3.zip │ ├── slf4j-api-1.4.3.jar │ ├── slf4j-log4j12-1.4.3.jar │ ├── svnkit-1.7.6.jar │ ├── trove-3.0.3-src.jar │ ├── trove-3.0.3.jar │ ├── xercesImpl.jar │ ├── xml-apis.jar │ └── xml-security-impl-1.0.jar ├── evaluator │ ├── com.springsource.org.codehaus.jackson-1.4.2.jar │ ├── com.springsource.org.codehaus.jackson.mapper-1.4.2.jar │ ├── commons-configuration-1.6.jar │ ├── commons-httpclient-3.1.0.redhat-7.jar │ ├── commons-io-2.4.jar │ └── jackson-mapper-asl-1.9.13.jar ├── hadoop-core-1.0.4.jar ├── hadoop-release-1.0.4.zip ├── hamcrest-all-1.3-javadoc.jar ├── hamcrest-all-1.3-sources.jar ├── hamcrest-all-1.3.jar ├── hamcrest-core-1.3-javadoc.jar ├── hamcrest-core-1.3-sources.jar ├── hamcrest-core-1.3.jar ├── junit-4.11-javadoc.jar ├── junit-4.11-sources.jar ├── junit-4.11.jar └── mrunit-0.9.0-incubating-hadoop1.jar ├── rtlib ├── ST-4.0.8.jar ├── antlr-runtime-4.5.jar ├── commons-cli-1.2.jar ├── log4j-1.2.15.jar ├── protobuf-java-2.5.0.jar └── scannotation-1.0.3.jar ├── src ├── antlr │ ├── Boa.g4 │ └── BoaNoActions.g4 ├── compiled-proto │ └── boa │ │ └── types │ │ ├── Ast.java │ │ ├── Code.java │ │ ├── Control.java │ │ ├── Diff.java │ │ ├── Graph.java │ │ ├── Issues.java │ │ ├── Shared.java │ │ └── Toplevel.java ├── java │ ├── boa │ │ ├── BoaMain.java │ │ ├── aggregators │ │ │ ├── Aggregator.java │ │ │ ├── AggregatorSpec.java │ │ │ ├── BottomAggregator.java │ │ │ ├── BottomOrTopAggregator.java │ │ │ ├── CollectionAggregator.java │ │ │ ├── ConfidenceIntervalAggregator.java │ │ │ ├── CountingSet.java │ │ │ ├── DistinctAggregator.java │ │ │ ├── FinishedException.java │ │ │ ├── FloatHistogramAggregator.java │ │ │ ├── FloatMeanAggregator.java │ │ │ ├── FloatQuantileAggregator.java │ │ │ ├── FloatSumAggregator.java │ │ │ ├── GraphAggregator.java │ │ │ ├── GraphCSVAggregator.java │ │ │ ├── GraphvizAggregator.java │ │ │ ├── HistogramAggregator.java │ │ │ ├── IntHistogramAggregator.java │ │ │ ├── IntMeanAggregator.java │ │ │ ├── IntQuantileAggregator.java │ │ │ ├── IntSumAggregator.java │ │ │ ├── KurtosisAggregator.java │ │ │ ├── LogAggregator.java │ │ │ ├── MaximumAggregator.java │ │ │ ├── MeanAggregator.java │ │ │ ├── MedianAggregator.java │ │ │ ├── MinOrMaxAggregator.java │ │ │ ├── MinimumAggregator.java │ │ │ ├── Pair.java │ │ │ ├── PreconditionAggregator.java │ │ │ ├── QuantileAggregator.java │ │ │ ├── SetAggregator.java │ │ │ ├── SkewnessAggregator.java │ │ │ ├── SortedCountingSet.java │ │ │ ├── StDevAggregator.java │ │ │ ├── StatisticsAggregator.java │ │ │ ├── TopAggregator.java │ │ │ ├── UniqueAggregator.java │ │ │ ├── VarianceAggregator.java │ │ │ └── WeightedString.java │ │ ├── compiler │ │ │ ├── BoaCompiler.java │ │ │ ├── FunctionTrie.java │ │ │ ├── SymbolTable.java │ │ │ ├── TypeCheckException.java │ │ │ ├── ast │ │ │ │ ├── Call.java │ │ │ │ ├── Comparison.java │ │ │ │ ├── Component.java │ │ │ │ ├── Composite.java │ │ │ │ ├── Conjunction.java │ │ │ │ ├── EnumBodyDeclaration.java │ │ │ │ ├── Factor.java │ │ │ │ ├── Identifier.java │ │ │ │ ├── Index.java │ │ │ │ ├── Node.java │ │ │ │ ├── Operand.java │ │ │ │ ├── Pair.java │ │ │ │ ├── Program.java │ │ │ │ ├── Selector.java │ │ │ │ ├── Start.java │ │ │ │ ├── Term.java │ │ │ │ ├── UnaryFactor.java │ │ │ │ ├── expressions │ │ │ │ │ ├── Expression.java │ │ │ │ │ ├── FixPExpression.java │ │ │ │ │ ├── FunctionExpression.java │ │ │ │ │ ├── ParenExpression.java │ │ │ │ │ ├── SimpleExpr.java │ │ │ │ │ ├── TraversalExpression.java │ │ │ │ │ └── VisitorExpression.java │ │ │ │ ├── literals │ │ │ │ │ ├── CharLiteral.java │ │ │ │ │ ├── FloatLiteral.java │ │ │ │ │ ├── ILiteral.java │ │ │ │ │ ├── IntegerLiteral.java │ │ │ │ │ ├── StringLiteral.java │ │ │ │ │ └── TimeLiteral.java │ │ │ │ ├── statements │ │ │ │ │ ├── AssignmentStatement.java │ │ │ │ │ ├── Block.java │ │ │ │ │ ├── BreakStatement.java │ │ │ │ │ ├── ContinueStatement.java │ │ │ │ │ ├── DoStatement.java │ │ │ │ │ ├── EmitStatement.java │ │ │ │ │ ├── ExistsStatement.java │ │ │ │ │ ├── ExprStatement.java │ │ │ │ │ ├── FixPStatement.java │ │ │ │ │ ├── ForStatement.java │ │ │ │ │ ├── ForeachStatement.java │ │ │ │ │ ├── IfAllStatement.java │ │ │ │ │ ├── IfStatement.java │ │ │ │ │ ├── PostfixStatement.java │ │ │ │ │ ├── ReturnStatement.java │ │ │ │ │ ├── Statement.java │ │ │ │ │ ├── StopStatement.java │ │ │ │ │ ├── SwitchCase.java │ │ │ │ │ ├── SwitchStatement.java │ │ │ │ │ ├── TraverseStatement.java │ │ │ │ │ ├── TypeDecl.java │ │ │ │ │ ├── VarDeclStatement.java │ │ │ │ │ ├── VisitStatement.java │ │ │ │ │ └── WhileStatement.java │ │ │ │ └── types │ │ │ │ │ ├── AbstractType.java │ │ │ │ │ ├── ArrayType.java │ │ │ │ │ ├── EnumType.java │ │ │ │ │ ├── FixPType.java │ │ │ │ │ ├── FunctionType.java │ │ │ │ │ ├── MapType.java │ │ │ │ │ ├── OutputType.java │ │ │ │ │ ├── QueueType.java │ │ │ │ │ ├── SetType.java │ │ │ │ │ ├── StackType.java │ │ │ │ │ ├── TraversalType.java │ │ │ │ │ ├── TupleType.java │ │ │ │ │ └── VisitorType.java │ │ │ ├── listeners │ │ │ │ ├── BoaErrorListener.java │ │ │ │ ├── LexerErrorListener.java │ │ │ │ └── ParserErrorListener.java │ │ │ ├── transforms │ │ │ │ ├── ASTFactory.java │ │ │ │ ├── InheritedAttributeTransformer.java │ │ │ │ ├── LocalAggregationTransformer.java │ │ │ │ ├── LocalArgumentTransformer.java │ │ │ │ ├── RecursiveFunctionTransformer.java │ │ │ │ ├── VariableDeclRenameTransformer.java │ │ │ │ ├── VariableRenameTransformer.java │ │ │ │ ├── VisitorDesugar.java │ │ │ │ └── VisitorOptimizingTransformer.java │ │ │ └── visitors │ │ │ │ ├── ASTPrintingVisitor.java │ │ │ │ ├── AbstractCodeGeneratingVisitor.java │ │ │ │ ├── AbstractVisitor.java │ │ │ │ ├── AbstractVisitorBase.java │ │ │ │ ├── AbstractVisitorNoArgNoRet.java │ │ │ │ ├── AbstractVisitorNoReturn.java │ │ │ │ ├── CFGBuildingVisitor.java │ │ │ │ ├── CallFindingVisitor.java │ │ │ │ ├── CodeGeneratingVisitor.java │ │ │ │ ├── IdentifierFindingVisitor.java │ │ │ │ ├── IsFunctionVisitor.java │ │ │ │ ├── PrettyPrintVisitor.java │ │ │ │ ├── TaskClassifyingVisitor.java │ │ │ │ ├── TypeCheckingVisitor.java │ │ │ │ ├── VisitClassifier.java │ │ │ │ └── analysis │ │ │ │ ├── CallGraphAnalysis.java │ │ │ │ ├── CreateNodeId.java │ │ │ │ ├── DataFlowSensitivityAnalysis.java │ │ │ │ ├── InformationAnalysis.java │ │ │ │ ├── LocalMayAliasAnalysis.java │ │ │ │ └── LoopSensitivityAnalysis.java │ │ ├── datagen │ │ │ ├── ASTSeqSort.java │ │ │ ├── BoaGenerator.java │ │ │ ├── CacheGithubIssues.java │ │ │ ├── CacheGithubJSON.java │ │ │ ├── CacheJSON.java │ │ │ ├── DefaultProperties.java │ │ │ ├── MapFileGen.java │ │ │ ├── SeqCombiner.java │ │ │ ├── SeqRepoImporter.java │ │ │ ├── dependencies │ │ │ │ ├── DependencyMangementUtil.java │ │ │ │ ├── GradleFile.java │ │ │ │ └── PomFile.java │ │ │ ├── forges │ │ │ │ ├── github │ │ │ │ │ ├── Config.java │ │ │ │ │ ├── DuplicateRepoRemover.java │ │ │ │ │ ├── DuplicateRepoWorker.java │ │ │ │ │ ├── GetGithubRepoByUser.java │ │ │ │ │ ├── GetReposByLanguage.java │ │ │ │ │ ├── GitHubIssuesDownloader.java │ │ │ │ │ ├── GitHubJsonRetriever.java │ │ │ │ │ ├── GitHubJsonRetrieverWorker.java │ │ │ │ │ ├── GitHubRepoBareDownloader.java │ │ │ │ │ ├── GitHubRepoDownloader.java │ │ │ │ │ ├── GitHubRepoDownloaderWorker.java │ │ │ │ │ ├── GithubLanguageDownloadMaster.java │ │ │ │ │ ├── GithubRepositoryNameDownloader.java │ │ │ │ │ ├── IssueDownloadWorker.java │ │ │ │ │ ├── IssueMetaData.java │ │ │ │ │ ├── JsonSplitter.java │ │ │ │ │ ├── LanguageDownloadWorker.java │ │ │ │ │ ├── ListSplitter.java │ │ │ │ │ ├── LocalGitSequenceGenerator.java │ │ │ │ │ ├── MetaDataDownLoader.java │ │ │ │ │ ├── MetaDataDownloadWorker.java │ │ │ │ │ ├── MetaDataMaster.java │ │ │ │ │ ├── MetaDataWorker.java │ │ │ │ │ ├── MetadataCacher.java │ │ │ │ │ ├── MetadataLangCacher.java │ │ │ │ │ ├── RepoMetadata.java │ │ │ │ │ ├── RepositoryCloner.java │ │ │ │ │ ├── RepositoryClonerWorker.java │ │ │ │ │ ├── Token.java │ │ │ │ │ ├── TokenList.java │ │ │ │ │ └── TokenTest.java │ │ │ │ └── sfnet │ │ │ │ │ └── JSONProjectCacher.java │ │ │ ├── scm │ │ │ │ ├── AbstractCommit.java │ │ │ │ ├── AbstractConnector.java │ │ │ │ ├── GitCommit.java │ │ │ │ └── GitConnector.java │ │ │ ├── treed │ │ │ │ ├── Pair.java │ │ │ │ ├── PairDescendingOrder.java │ │ │ │ ├── StringProcessor.java │ │ │ │ ├── TreedBuilder.java │ │ │ │ ├── TreedConstants.java │ │ │ │ ├── TreedMapper.java │ │ │ │ └── TreedUtils.java │ │ │ └── util │ │ │ │ ├── CssVisitor.java │ │ │ │ ├── FileIO.java │ │ │ │ ├── Forker.java │ │ │ │ ├── ForkerWorker.java │ │ │ │ ├── HtmlVisitor.java │ │ │ │ ├── JavaASTUtil.java │ │ │ │ ├── JavaErrorCheckVisitor.java │ │ │ │ ├── JavaScriptErrorCheckVisitor.java │ │ │ │ ├── JavaScriptVisitor.java │ │ │ │ ├── JavaVisitor.java │ │ │ │ ├── OutputStatusChecker.java │ │ │ │ ├── PHPErrorCheckVisitor.java │ │ │ │ ├── PHPVisitor.java │ │ │ │ ├── Properties.java │ │ │ │ └── XMLVisitor.java │ │ ├── evaluator │ │ │ └── BoaEvaluator.java │ │ ├── functions │ │ │ ├── BoaAstIntrinsics.java │ │ │ ├── BoaCasts.java │ │ │ ├── BoaCollectingVisitor.java │ │ │ ├── BoaCountingVisitor.java │ │ │ ├── BoaGraphIntrinsics.java │ │ │ ├── BoaIntrinsics.java │ │ │ ├── BoaMathIntrinsics.java │ │ │ ├── BoaMetricIntrinsics.java │ │ │ ├── BoaModifierIntrinsics.java │ │ │ ├── BoaNormalFormIntrinsics.java │ │ │ ├── BoaSortIntrinsics.java │ │ │ ├── BoaSpecialIntrinsics.java │ │ │ ├── BoaStringIntrinsics.java │ │ │ ├── BoaTimeIntrinsics.java │ │ │ ├── FunctionSpec.java │ │ │ └── langmode │ │ │ │ ├── JavaLangMode.java │ │ │ │ └── LangMode.java │ │ ├── graphs │ │ │ ├── Edge.java │ │ │ ├── Node.java │ │ │ ├── cdg │ │ │ │ ├── CDG.java │ │ │ │ ├── CDGEdge.java │ │ │ │ └── CDGNode.java │ │ │ ├── cfg │ │ │ │ ├── CFG.java │ │ │ │ ├── CFGEdge.java │ │ │ │ └── CFGNode.java │ │ │ ├── ddg │ │ │ │ ├── DDG.java │ │ │ │ ├── DDGEdge.java │ │ │ │ └── DDGNode.java │ │ │ ├── pdg │ │ │ │ ├── PDG.java │ │ │ │ ├── PDGEdge.java │ │ │ │ └── PDGNode.java │ │ │ ├── slicers │ │ │ │ ├── CFGSlicer.java │ │ │ │ └── PDGSlicer.java │ │ │ └── trees │ │ │ │ ├── DTree.java │ │ │ │ ├── PDTree.java │ │ │ │ ├── TreeEdge.java │ │ │ │ └── TreeNode.java │ │ ├── io │ │ │ ├── BoaOutputCommitter.java │ │ │ ├── BoaOutputFormat.java │ │ │ ├── EmitKey.java │ │ │ └── EmitValue.java │ │ ├── runtime │ │ │ ├── BoaAbstractFixP.java │ │ │ ├── BoaAbstractTraversal.java │ │ │ ├── BoaAbstractVisitor.java │ │ │ ├── BoaCombiner.java │ │ │ ├── BoaMapper.java │ │ │ ├── BoaPartitioner.java │ │ │ ├── BoaReducer.java │ │ │ └── BoaRunner.java │ │ └── types │ │ │ ├── BoaAny.java │ │ │ ├── BoaArray.java │ │ │ ├── BoaBool.java │ │ │ ├── BoaEnum.java │ │ │ ├── BoaFixP.java │ │ │ ├── BoaFloat.java │ │ │ ├── BoaFunction.java │ │ │ ├── BoaInt.java │ │ │ ├── BoaMap.java │ │ │ ├── BoaName.java │ │ │ ├── BoaProtoList.java │ │ │ ├── BoaProtoMap.java │ │ │ ├── BoaProtoTuple.java │ │ │ ├── BoaQueue.java │ │ │ ├── BoaScalar.java │ │ │ ├── BoaSet.java │ │ │ ├── BoaStack.java │ │ │ ├── BoaString.java │ │ │ ├── BoaTable.java │ │ │ ├── BoaTime.java │ │ │ ├── BoaTraversal.java │ │ │ ├── BoaTuple.java │ │ │ ├── BoaType.java │ │ │ ├── BoaTypeVar.java │ │ │ ├── BoaVarargs.java │ │ │ ├── BoaVisitor.java │ │ │ └── proto │ │ │ ├── ASTRootProtoTuple.java │ │ │ ├── AttachmentProtoTuple.java │ │ │ ├── AttributeProtoTuple.java │ │ │ ├── CDGEdgeProtoTuple.java │ │ │ ├── CDGNodeProtoTuple.java │ │ │ ├── CDGProtoTuple.java │ │ │ ├── CFGEdgeProtoTuple.java │ │ │ ├── CFGNodeProtoTuple.java │ │ │ ├── CFGProtoTuple.java │ │ │ ├── CFGSlicerProtoTuple.java │ │ │ ├── ChangedFileProtoTuple.java │ │ │ ├── CodeRepositoryProtoTuple.java │ │ │ ├── CommentProtoTuple.java │ │ │ ├── CommentsRootProtoTuple.java │ │ │ ├── DDGEdgeProtoTuple.java │ │ │ ├── DDGNodeProtoTuple.java │ │ │ ├── DDGProtoTuple.java │ │ │ ├── DTreeProtoTuple.java │ │ │ ├── DeclarationProtoTuple.java │ │ │ ├── DocumentProtoTuple.java │ │ │ ├── ElementProtoTuple.java │ │ │ ├── ExpressionProtoTuple.java │ │ │ ├── IssueCommentProtoTuple.java │ │ │ ├── IssueProtoTuple.java │ │ │ ├── IssueRepositoryProtoTuple.java │ │ │ ├── IssuesRootProtoTuple.java │ │ │ ├── MethodProtoTuple.java │ │ │ ├── ModifierProtoTuple.java │ │ │ ├── NamespaceProtoTuple.java │ │ │ ├── PDGEdgeProtoTuple.java │ │ │ ├── PDGNodeProtoTuple.java │ │ │ ├── PDGProtoTuple.java │ │ │ ├── PDGSlicerProtoTuple.java │ │ │ ├── PDTreeProtoTuple.java │ │ │ ├── PersonProtoTuple.java │ │ │ ├── PositionInfoProtoTuple.java │ │ │ ├── ProjectProtoTuple.java │ │ │ ├── RevisionProtoTuple.java │ │ │ ├── StatementProtoTuple.java │ │ │ ├── TreeNodeProtoTuple.java │ │ │ ├── TypeProtoTuple.java │ │ │ ├── VariableProtoTuple.java │ │ │ └── enums │ │ │ ├── ChangeKindProtoMap.java │ │ │ ├── CommentKindProtoMap.java │ │ │ ├── EdgeLabelProtoMap.java │ │ │ ├── EdgeTypeProtoMap.java │ │ │ ├── ElementKindProtoMap.java │ │ │ ├── ExpressionKindProtoMap.java │ │ │ ├── FileKindProtoMap.java │ │ │ ├── ForgeKindProtoMap.java │ │ │ ├── IssueLabelProtoMap.java │ │ │ ├── IssuePriorityProtoMap.java │ │ │ ├── IssueStatusProtoMap.java │ │ │ ├── ModifierKindProtoMap.java │ │ │ ├── NodeTypeProtoMap.java │ │ │ ├── RepositoryKindProtoMap.java │ │ │ ├── ScopeProtoMap.java │ │ │ ├── StatementKindProtoMap.java │ │ │ ├── TraversalDirectionProtoMap.java │ │ │ ├── TraversalKindProtoMap.java │ │ │ ├── TypeKindProtoMap.java │ │ │ └── VisibilityProtoMap.java │ └── com │ │ └── googlecode │ │ └── protobuf │ │ └── format │ │ ├── JsonFormat.java │ │ └── JsonFormatMin.java ├── proto │ ├── ast.proto │ ├── code.proto │ ├── control.proto │ ├── diff.proto │ ├── graph.proto │ ├── issues.proto │ ├── shared.proto │ └── toplevel.proto └── test │ └── boa │ └── test │ ├── compiler │ ├── BaseTest.java │ ├── ProgramAnalysisGood.java │ ├── TestCodegenGood.java │ ├── TestGood.java │ ├── TestInhAttr.java │ ├── TestLexerBad.java │ ├── TestLexerGood.java │ ├── TestParserBad.java │ ├── TestParserGood.java │ ├── TestTraversalBad.java │ ├── TestTraversalGood.java │ ├── TestTypecheckBad.java │ └── TestTypecheckGood.java │ ├── datagen │ ├── BuildSnapshotBase.java │ ├── ProtoMessageVisitor.java │ ├── TestBuildSnapshot1.java │ ├── TestBuildSnapshot2.java │ ├── TestBuildSnapshot3.java │ ├── TestBuildSnapshot4.java │ ├── TestBuildSnapshotFromSequenceFile.java │ ├── TestCountChangedFiles.java │ ├── TestGetSnapshot.java │ ├── TestSequenceFile.java │ ├── TestTypeFullyQualifiedName.java │ ├── css │ │ ├── CssBaseTest.java │ │ ├── CssParseTest.java │ │ └── TestStyleRule.java │ ├── html │ │ ├── HTMLBaseTest.java │ │ ├── HTMLParseTest.java │ │ ├── TestHTMLPitcureTag.java │ │ ├── TestHtmlDocType.java │ │ ├── TestHtmlEmbeddedWithJS.java │ │ ├── TestHtmlFormTag.java │ │ ├── TestHtmlTextAreaTag.java │ │ ├── TestHtmlWithEmbeddedPHP.java │ │ ├── TestStyleTag.java │ │ └── TestXmlParse.java │ ├── java │ │ ├── ASTDumper.java │ │ ├── DumpJava.java │ │ ├── IASTPrinter.java │ │ ├── ICommentsExtractor.java │ │ ├── Indenter.java │ │ ├── JSONStyleASTPrinter.java │ │ ├── Java7BaseTest.java │ │ ├── Java8BaseTest.java │ │ ├── JavaToBoa.java │ │ ├── TestJLSVersion.java │ │ ├── TestJLSVersionOfChangedFile.java │ │ ├── TestJava.java │ │ └── UglyMathCommentsExtractor.java │ ├── js │ │ ├── JavaScriptBaseTest.java │ │ ├── TestAssign.java │ │ ├── TestDoLoop.java │ │ ├── TestElelementGet.java │ │ ├── TestForLoops.java │ │ ├── TestFucntionNode.java │ │ ├── TestInFixExpressions.java │ │ ├── TestJavaScriptKeyWordLiteral.java │ │ ├── TestJavaScriptSwitchStatement.java │ │ ├── TestLabeledStatement.java │ │ ├── TestLetNode.java │ │ ├── TestNewExpression.java │ │ ├── TestObjectLiteral.java │ │ ├── TestParenthesizedExpression.java │ │ ├── TestPropertyGet.java │ │ ├── TestRegExpLiteral.java │ │ ├── TestThrow.java │ │ ├── TestTryCatch.java │ │ ├── TestUnaryExpressions.java │ │ ├── TestVariableDeclarationNode.java │ │ ├── TestWhileLoop.java │ │ ├── TestWithStatement.java │ │ ├── TestXml.java │ │ └── TestYield.java │ ├── php │ │ ├── PHPBaseTest.java │ │ ├── PHPParseTest.java │ │ ├── TestPHPArrayAccessNode.java │ │ ├── TestPHPArrayCreationNode.java │ │ ├── TestPHPAssign.java │ │ ├── TestPHPBackTick.java │ │ ├── TestPHPCloneExpressionNode.java │ │ ├── TestPHPConstantDeclarationNode.java │ │ ├── TestPHPDeclareStatementNode.java │ │ ├── TestPHPEchoStatementNode.java │ │ ├── TestPHPForEachStatementNode.java │ │ ├── TestPHPFunctionDeclaration.java │ │ ├── TestPHPGlobalStatementNode.java │ │ ├── TestPHPGoto.java │ │ ├── TestPHPInFixExpression.java │ │ ├── TestPHPInclude.java │ │ ├── TestPHPInlineHtml.java │ │ ├── TestPHPList.java │ │ ├── TestPHPNameSpaceDeclaration.java │ │ ├── TestPHPParen.java │ │ ├── TestPHPPrefixExpression.java │ │ ├── TestPHPQuote.java │ │ ├── TestPHPReference.java │ │ ├── TestPHPReflectionVariable.java │ │ ├── TestPHPStaticStatement.java │ │ ├── TestPHPTraitNodes.java │ │ ├── TestPHPTryCatch.java │ │ ├── TestPHPUseStatement.java │ │ └── TestPHPYield.java │ ├── queries │ │ └── TestQueries.java │ └── xml │ │ ├── TestAttribute.java │ │ ├── TestNote.java │ │ ├── TestProcessingInstructions.java │ │ ├── TestXMLNamespace.java │ │ └── XMLBaseTest.java │ └── functions │ ├── TestCdg.java │ ├── TestCfg.java │ ├── TestConvertToSymbolic.java │ ├── TestDdg.java │ ├── TestLiterals.java │ ├── TestNormalForm.java │ ├── TestNormalize.java │ ├── TestPdg.java │ ├── TestPrettyprint.java │ └── TestReduce.java ├── templates ├── BoaJava.stg └── BoaJavaHadoop.stg ├── test ├── cdg │ ├── dot │ │ ├── for-with-return │ │ ├── if-with-return │ │ ├── nest-for-if-with-return │ │ ├── nest-if-with-return │ │ ├── switch-with-return │ │ ├── try-catch │ │ └── while-with-return │ └── src │ │ ├── for-with-return │ │ ├── if-with-return │ │ ├── nest-for-if-with-return │ │ ├── nest-if-with-return │ │ ├── switch-with-return │ │ ├── try-catch │ │ └── while-with-return ├── cfg │ ├── dot │ │ ├── for │ │ ├── for-break-at-end │ │ ├── for-continue-at-end │ │ ├── for-nested │ │ ├── for-no-condition │ │ ├── if-empty-false │ │ ├── if-empty-true │ │ ├── return-exp │ │ ├── return-no-exp │ │ ├── switch-fallthrough-complex │ │ ├── switch-fallthrough-no-default-no-break │ │ ├── switch-fallthrough-no-default-with-break │ │ ├── switch-fallthrough-with-default-no-break │ │ ├── switch-fallthrough-with-default-with-break │ │ ├── switch-no-default-no-break │ │ ├── switch-no-default-with-break │ │ ├── switch-types │ │ ├── switch-with-default-no-break │ │ ├── switch-with-default-with-break │ │ ├── try-no-body-no-catch-no-finally │ │ ├── try-no-body-no-catch-with-finally │ │ ├── try-no-body-only-catch │ │ ├── try-no-body-only-finally │ │ ├── try-no-body-with-catch-no-finally │ │ ├── try-no-body-with-catch-with-finally │ │ ├── try-with-body-no-catch-no-finally │ │ ├── try-with-body-no-catch-with-finally │ │ ├── try-with-body-only-catch │ │ ├── try-with-body-only-finally │ │ ├── try-with-body-with-catch-no-finally │ │ ├── try-with-body-with-catch-with-finally │ │ ├── while │ │ └── while-conditional-break │ └── src │ │ ├── for │ │ ├── for-break-at-end │ │ ├── for-continue-at-end │ │ ├── for-nested │ │ ├── for-no-condition │ │ ├── if-empty-false │ │ ├── if-empty-true │ │ ├── return-exp │ │ ├── return-no-exp │ │ ├── switch-fallthrough-complex │ │ ├── switch-fallthrough-no-default-no-break │ │ ├── switch-fallthrough-no-default-with-break │ │ ├── switch-fallthrough-with-default-no-break │ │ ├── switch-fallthrough-with-default-with-break │ │ ├── switch-no-default-no-break │ │ ├── switch-no-default-with-break │ │ ├── switch-types │ │ ├── switch-with-default-no-break │ │ ├── switch-with-default-with-break │ │ ├── try-no-body-no-catch-no-finally │ │ ├── try-no-body-no-catch-with-finally │ │ ├── try-no-body-only-catch │ │ ├── try-no-body-only-finally │ │ ├── try-no-body-with-catch-no-finally │ │ ├── try-no-body-with-catch-with-finally │ │ ├── try-with-body-no-catch-no-finally │ │ ├── try-with-body-no-catch-with-finally │ │ ├── try-with-body-only-catch │ │ ├── try-with-body-only-finally │ │ ├── try-with-body-with-catch-no-finally │ │ ├── try-with-body-with-catch-with-finally │ │ ├── while │ │ └── while-conditional-break ├── codegen │ ├── allowed-stops.boa │ ├── array-as-map-key.boa │ ├── arrays-non-scalar.boa │ ├── arrays.boa │ ├── boolean-outputs.boa │ ├── declare-same-var.boa │ ├── def.boa │ ├── default-vals.boa │ ├── div-equal.boa │ ├── enum-use.boa │ ├── func-return-inside-visit.boa │ ├── func-returns-int.boa │ ├── function-as-arg.boa │ ├── function-calls.boa │ ├── function-many-args.boa │ ├── issue249.boa │ ├── issue285.boa │ ├── issue87.boa │ ├── join.boa │ ├── local.boa │ ├── lshift-equal.boa │ ├── map-int-index.boa │ ├── maps.boa │ ├── minus-equal.boa │ ├── mod-equal.boa │ ├── nested-func.boa │ ├── nested-maps.boa │ ├── no-weight.boa │ ├── non-scalar-map.boa │ ├── non-scalar-queue.boa │ ├── non-scalar-set.boa │ ├── non-scalar-stack.boa │ ├── oneand-equal.boa │ ├── oneor-equal.boa │ ├── plus-equal.boa │ ├── pp.boa │ ├── proto-as-mapkey.boa │ ├── random.boa │ ├── recursive-funcs.boa │ ├── regex.boa │ ├── rshift-equal.boa │ ├── same-var-names.boa │ ├── select-from-func-return.boa │ ├── sets.boa │ ├── stacks.boa │ ├── star-equal.boa │ ├── sum-double.boa │ ├── tuple.boa │ ├── varswitch.boa │ ├── while.boa │ └── xor-equal.boa ├── datagen │ ├── HTML │ │ ├── DocType.HTML │ │ ├── DocType.boa │ │ ├── EmbeddedJavaScript.HTML │ │ ├── EmbeddedJavaScript.boa │ │ ├── EmbeddedPHP.HTML │ │ ├── EmbeddedPHP.boa │ │ ├── ExternalScript.HTML │ │ ├── ExternalScript.boa │ │ ├── FormTag.HTML │ │ ├── FormTag.boa │ │ ├── HtmlParseTest.dtd │ │ ├── PictureTag.HTML │ │ ├── PictureTag.boa │ │ ├── StyleTag.HTML │ │ ├── StyleTag.boa │ │ ├── TextAreaTag.HTML │ │ ├── TextAreaTag.boa │ │ ├── xml.boa │ │ └── xml.xml │ ├── PHP │ │ ├── ASSIGN_CONCATNode.boa │ │ ├── ASSIGN_CONCATNode.php │ │ ├── ASSIGN_POWNode.boa │ │ ├── ASSIGN_POWNode.php │ │ ├── ArrayAccessNode.boa │ │ ├── ArrayAccessNode.php │ │ ├── ArrayCreationNode.boa │ │ ├── ArrayCreationNode.php │ │ ├── ArrayCreationNode1.boa │ │ ├── ArrayCreationNode1.php │ │ ├── BackTickNode.boa │ │ ├── BackTickNode.php │ │ ├── CloneExpressionNode.boa │ │ ├── CloneExpressionNode.php │ │ ├── ConstantDeclarationNode.boa │ │ ├── ConstantDeclarationNode.php │ │ ├── DeclareStatementNode.boa │ │ ├── DeclareStatementNode.php │ │ ├── EchoStatementNode.boa │ │ ├── EchoStatementNode.php │ │ ├── ForEachStatementNode.boa │ │ ├── ForEachStatementNode.php │ │ ├── FormalParamaterNode.boa │ │ ├── FormalParamaterNode.php │ │ ├── FunctionDeclarationNode.boa │ │ ├── FunctionDeclarationNode.php │ │ ├── GlobalStatementNode.boa │ │ ├── GlobalStatementNode.php │ │ ├── GotoNodes.boa │ │ ├── GotoNodes.php │ │ ├── InFixExpressionConCat.boa │ │ ├── InFixExpressionConCat.php │ │ ├── InFixExpressionIdentical.boa │ │ ├── InFixExpressionIdentical.php │ │ ├── InFixExpressionNotIdentical.boa │ │ ├── InFixExpressionNotIdentical.php │ │ ├── InFixExpressionPower.boa │ │ ├── InFixExpressionPower.php │ │ ├── InFixExpressionSpaceShip.boa │ │ ├── InFixExpressionSpaceShip.php │ │ ├── InFixExpressionStringAnd.boa │ │ ├── InFixExpressionStringAnd.php │ │ ├── InFixExpressionStringOr.boa │ │ ├── InFixExpressionStringOr.php │ │ ├── InFixExpressionStringXor.boa │ │ ├── InFixExpressionStringXor.php │ │ ├── InLineHtml.boa │ │ ├── InLineHtml.php │ │ ├── Include.boa │ │ ├── Include.php │ │ ├── LambdaDeclarationNode.boa │ │ ├── LambdaDeclarationNode.php │ │ ├── List.boa │ │ ├── List.php │ │ ├── MethodDeclarationNode.boa │ │ ├── MethodDeclarationNode.php │ │ ├── NamespaceDeclarationNode.boa │ │ ├── NamespaceDeclarationNode.php │ │ ├── NamespaceDeclarationNode2.boa │ │ ├── NamespaceDeclarationNode2.php │ │ ├── NestedNamespaces.boa │ │ ├── NestedNamespaces.php │ │ ├── PHPParseTest.php │ │ ├── Paren.boa │ │ ├── Paren.php │ │ ├── PreFixExpressionUnpack.boa │ │ ├── PreFixExpressionUnpack.php │ │ ├── QuoteNode.boa │ │ ├── QuoteNode.php │ │ ├── Reference.boa │ │ ├── Reference.php │ │ ├── ReflectionVariable.boa │ │ ├── ReflectionVariable.php │ │ ├── StaticStatementNode.boa │ │ ├── StaticStatementNode.php │ │ ├── TraitAliasNodes.boa │ │ ├── TraitAliasNodes.php │ │ ├── TraitAliasWithFullyQualifiedTraitMethodReference.boa │ │ ├── TraitAliasWithFullyQualifiedTraitMethodReference.php │ │ ├── TraitDeclarationNode.boa │ │ ├── TraitDeclarationNode.php │ │ ├── TraitPrecedenceNodes.boa │ │ ├── TraitPrecedenceNodes.php │ │ ├── TraitUseStatementNode.boa │ │ ├── TraitUseStatementNode.php │ │ ├── TryCatch.boa │ │ ├── TryCatch.php │ │ ├── UseStatementNode.boa │ │ ├── UseStatementNode.php │ │ ├── UseStatementWithAlias.boa │ │ ├── UseStatementWithAlias.php │ │ ├── Yield.boa │ │ ├── Yield.php │ │ ├── YieldFrom.boa │ │ └── YieldFrom.php │ ├── XML │ │ ├── Attribute.boa │ │ ├── Attribute.xml │ │ ├── Namespace.boa │ │ ├── Namespace.xml │ │ ├── Note.boa │ │ ├── Note.xml │ │ ├── ProcessingInstructions.boa │ │ └── ProcessingInstructions.xml │ ├── css │ │ ├── Media_Rule.boa │ │ ├── Media_Rule.css │ │ ├── ParseTest.css │ │ ├── Style_Rule.boa │ │ ├── Style_Rule.css │ │ ├── Style_Rule1.boa │ │ ├── Style_Rule1.css │ │ ├── Style_Rule2.boa │ │ ├── Style_Rule2.css │ │ ├── Style_Rule3.boa │ │ └── Style_Rule3.css │ ├── expected │ │ └── test │ │ │ └── known-good │ │ │ ├── annot-names.boa.txt │ │ │ ├── annotations-define.boa.txt │ │ │ ├── annotations-use.boa.txt │ │ │ ├── assert.boa.txt │ │ │ ├── binary-lit.boa.txt │ │ │ ├── bug-fix.boa.txt │ │ │ ├── catAp1.boa.txt │ │ │ ├── catAp3.boa.txt │ │ │ ├── catAp4.boa.txt │ │ │ ├── catBp1.boa.txt │ │ │ ├── catBp13.boa.txt │ │ │ ├── catBp14.boa.txt │ │ │ ├── catBp15.boa.txt │ │ │ ├── catBp17.boa.txt │ │ │ ├── catBp18.boa.txt │ │ │ ├── catBp3.boa.txt │ │ │ ├── catBp4.boa.txt │ │ │ ├── counts.boa.txt │ │ │ ├── counts2.boa.txt │ │ │ ├── dead-code.boa.txt │ │ │ ├── diamond.boa.txt │ │ │ ├── dupe-types.boa.txt │ │ │ ├── enhanced-for.boa.txt │ │ │ ├── enums.boa.txt │ │ │ ├── fields.boa.txt │ │ │ ├── generics-define-field.boa.txt │ │ │ ├── generics-define-method.boa.txt │ │ │ ├── generics-define-type.boa.txt │ │ │ ├── generics-wildcard-extends.boa.txt │ │ │ ├── generics-wildcard-super.boa.txt │ │ │ ├── generics-wildcard.boa.txt │ │ │ ├── imports.boa.txt │ │ │ ├── java-count.boa.txt │ │ │ ├── len.boa.txt │ │ │ └── multicatch.boa.txt │ ├── java-wrapped │ │ ├── AnonymousClassDeclaration.java │ │ ├── AnonymousClassDeclaration.json │ │ ├── ArrayAccess.java │ │ ├── ArrayAccess.json │ │ ├── ArrayCreation.java │ │ ├── ArrayCreation.json │ │ ├── ArrayInitializer.java │ │ ├── ArrayInitializer.json │ │ ├── Assert.java │ │ ├── Assert.json │ │ ├── Assignment.java │ │ ├── Assignment.json │ │ ├── BitAndAssignment.java │ │ ├── BitAndAssignment.json │ │ ├── BitOrAssignment.java │ │ ├── BitOrAssignment.json │ │ ├── BitXorAssignment.java │ │ ├── BitXorAssignment.json │ │ ├── BooleanLiteral.java │ │ ├── BooleanLiteral.json │ │ ├── CastExpression.java │ │ ├── CastExpression.json │ │ ├── CharacterLiteral.java │ │ ├── CharacterLiteral.json │ │ ├── ClassInstance.java │ │ ├── ClassInstance.json │ │ ├── ConditionalExpression.java │ │ ├── ConditionalExpression.json │ │ ├── DivideAssignment.java │ │ ├── DivideAssignment.json │ │ ├── DoStatement.java │ │ ├── DoStatement.json │ │ ├── DoStatementWithBreak.java │ │ ├── DoStatementWithBreak.json │ │ ├── DoStatementWithContinue.java │ │ ├── DoStatementWithContinue.json │ │ ├── EmptyStatement.java │ │ ├── EmptyStatement.json │ │ ├── EnhancedForStatement.java │ │ ├── EnhancedForStatement.json │ │ ├── ForStatement.java │ │ ├── ForStatement.json │ │ ├── IfStatement.java │ │ ├── IfStatement.json │ │ ├── InfixExpressionAnd.java │ │ ├── InfixExpressionAnd.json │ │ ├── InfixExpressionDivide.java │ │ ├── InfixExpressionDivide.json │ │ ├── InfixExpressionEquals.java │ │ ├── InfixExpressionEquals.json │ │ ├── InfixExpressionGreaterEqual.java │ │ ├── InfixExpressionGreaterEqual.json │ │ ├── InfixExpressionGreaterThen.java │ │ ├── InfixExpressionGreaterThen.json │ │ ├── InfixExpressionLeftShift.java │ │ ├── InfixExpressionLeftShift.json │ │ ├── InfixExpressionLessEqual.java │ │ ├── InfixExpressionLessEqual.json │ │ ├── InfixExpressionLessThen.java │ │ ├── InfixExpressionLessThen.json │ │ ├── InfixExpressionLogicalAnd.java │ │ ├── InfixExpressionLogicalAnd.json │ │ ├── InfixExpressionLogicalOr.java │ │ ├── InfixExpressionLogicalOr.json │ │ ├── InfixExpressionMinus.java │ │ ├── InfixExpressionMinus.json │ │ ├── InfixExpressionNotEqual.java │ │ ├── InfixExpressionNotEqual.json │ │ ├── InfixExpressionOr.java │ │ ├── InfixExpressionOr.json │ │ ├── InfixExpressionPlus.java │ │ ├── InfixExpressionPlus.json │ │ ├── InfixExpressionRemainder.java │ │ ├── InfixExpressionRemainder.json │ │ ├── InfixExpressionRightShiftSigned.java │ │ ├── InfixExpressionRightShiftSigned.json │ │ ├── InfixExpressionRightShiftUnsigned.java │ │ ├── InfixExpressionRightShiftUnsigned.json │ │ ├── InfixExpressionTimes.java │ │ ├── InfixExpressionTimes.json │ │ ├── InfixExpressionXor.java │ │ ├── InfixExpressionXor.json │ │ ├── InstanceOfExpression.java │ │ ├── InstanceOfExpression.json │ │ ├── LabeledStatement.java │ │ ├── LabeledStatement.json │ │ ├── LeftShiftAssignment.java │ │ ├── LeftShiftAssignment.json │ │ ├── MethodInvocation.java │ │ ├── MethodInvocation.json │ │ ├── MinusAssignment.java │ │ ├── MinusAssignment.json │ │ ├── ModAssignment.java │ │ ├── ModAssignment.json │ │ ├── ParanthesizedExpression.java │ │ ├── ParanthesizedExpression.json │ │ ├── PlusAssignment.java │ │ ├── PlusAssignment.json │ │ ├── PostFixDecExpression.java │ │ ├── PostFixDecExpression.json │ │ ├── PostFixIncExpression.java │ │ ├── PostFixIncExpression.json │ │ ├── PreFixComplimentExpression.java │ │ ├── PreFixComplimentExpression.json │ │ ├── PreFixDecExpression.java │ │ ├── PreFixDecExpression.json │ │ ├── PreFixIncExpression.java │ │ ├── PreFixIncExpression.json │ │ ├── PreFixLogicalNotExpression.java │ │ ├── PreFixLogicalNotExpression.json │ │ ├── PreFixPlusExpression.java │ │ ├── PreFixPlusExpression.json │ │ ├── PreFixSubExpression.java │ │ ├── PreFixSubExpression.json │ │ ├── QualifiedName.java │ │ ├── QualifiedName.json │ │ ├── ReturnNull.java │ │ ├── ReturnNull.json │ │ ├── ReturnNumberLiteral.java │ │ ├── ReturnNumberLiteral.json │ │ ├── RightShiftSignedAssignment.java │ │ ├── RightShiftSignedAssignment.json │ │ ├── RightShiftUnsignedAssignment.java │ │ ├── RightShiftUnsignedAssignment.json │ │ ├── StringLiteral.java │ │ ├── StringLiteral.json │ │ ├── SuperConstructorInvocation.java │ │ ├── SuperConstructorInvocation.json │ │ ├── SuperFieldAccess.java │ │ ├── SuperFieldAccess.json │ │ ├── SuperMethodInvocation.java │ │ ├── SuperMethodInvocation.json │ │ ├── SwitchCase.java │ │ ├── SwitchCase.json │ │ ├── SwitchStatement.java │ │ ├── SwitchStatement.json │ │ ├── SynchronizedStatement.java │ │ ├── SynchronizedStatement.json │ │ ├── ThisStatement.java │ │ ├── ThisStatement.json │ │ ├── ThrowStatement.java │ │ ├── ThrowStatement.json │ │ ├── TimesAssignment.java │ │ ├── TimesAssignment.json │ │ ├── TryStatement.java │ │ ├── TryStatement.json │ │ ├── TypeDeclarationStatement.java │ │ ├── TypeDeclarationStatement.json │ │ ├── TypeLiteral.java │ │ ├── TypeLiteral.json │ │ ├── VariableDeclarationStatement.java │ │ ├── VariableDeclarationStatement.json │ │ ├── WhileStatement.java │ │ ├── WhileStatement.json │ │ ├── inst-meth-ref.java │ │ ├── inst-meth-ref.json │ │ ├── lambda-noarg.java │ │ ├── lambda-noarg.json │ │ ├── lambda-noparen.java │ │ ├── lambda-noparen.json │ │ ├── lambda-noret.java │ │ ├── lambda-noret.json │ │ ├── lambda-notype.java │ │ ├── lambda-notype.json │ │ ├── lambda-ret.java │ │ ├── lambda-ret.json │ │ ├── lambda-withtype.java │ │ ├── lambda-withtype.json │ │ ├── lambda.java │ │ ├── lambda.json │ │ ├── lambda2.java │ │ ├── lambda2.json │ │ ├── new-meth-ref.java │ │ ├── new-meth-ref.json │ │ ├── obj-meth-ref.java │ │ ├── obj-meth-ref.json │ │ ├── static-meth-ref.java │ │ ├── static-meth-ref.json │ │ ├── super-meth-ref.java │ │ └── super-meth-ref.json │ ├── java │ │ ├── AnnotationTypeDeclaration.java │ │ ├── AnnotationTypeDeclaration.json │ │ ├── AnnotationTypeMemberDeclaration.java │ │ ├── AnnotationTypeMemberDeclaration.json │ │ ├── EnumDeclaration.java │ │ ├── EnumDeclaration.json │ │ ├── FieldDeclaration.java │ │ ├── FieldDeclaration.json │ │ ├── Import.java │ │ ├── Import.json │ │ ├── JLS2 │ │ │ ├── AssertDemo │ │ │ │ ├── v1 │ │ │ │ │ └── AssertDemo.java │ │ │ │ ├── v2 │ │ │ │ │ └── AssertDemo.java │ │ │ │ ├── v3 │ │ │ │ │ └── AssertDemo.java │ │ │ │ └── v4 │ │ │ │ │ └── AssertDemo.java │ │ │ └── Basic.java │ │ ├── JLS3 │ │ │ ├── AnnDemo │ │ │ │ ├── v1 │ │ │ │ │ ├── AnnDemo.java │ │ │ │ │ └── ThreadSafe.java │ │ │ │ ├── v2 │ │ │ │ │ ├── AnnDemo.java │ │ │ │ │ └── ToDo.java │ │ │ │ ├── v3 │ │ │ │ │ ├── AnnDemo.java │ │ │ │ │ └── ToDo.java │ │ │ │ ├── v4 │ │ │ │ │ ├── AnnDemo.java │ │ │ │ │ └── ToDo.java │ │ │ │ └── v5 │ │ │ │ │ ├── AnnDemo.java │ │ │ │ │ └── ToDo.java │ │ │ ├── AnnProcDemo │ │ │ │ ├── AnnDemo.java │ │ │ │ └── ToDo.java │ │ │ ├── CovarDemo │ │ │ │ └── v2 │ │ │ │ │ └── CovarDemo.java │ │ │ ├── EnForLoopDemo │ │ │ │ ├── v1 │ │ │ │ │ └── EnForLoopDemo.java │ │ │ │ └── v2 │ │ │ │ │ └── EnForLoopDemo.java │ │ │ ├── GenDemo │ │ │ │ ├── v1 │ │ │ │ │ └── GenDemo.java │ │ │ │ ├── v2 │ │ │ │ │ └── GenDemo.java │ │ │ │ ├── v3 │ │ │ │ │ └── GenDemo.java │ │ │ │ ├── v4 │ │ │ │ │ └── GenDemo.java │ │ │ │ └── v5 │ │ │ │ │ └── GenDemo.java │ │ │ ├── StaticImportsDemo │ │ │ │ └── v2 │ │ │ │ │ └── foo │ │ │ │ │ └── Light.java │ │ │ ├── TEDemo │ │ │ │ ├── v1 │ │ │ │ │ └── TEDemo.java │ │ │ │ └── v2 │ │ │ │ │ └── TEDemo.java │ │ │ └── VarargsDemo │ │ │ │ └── VarargsDemo.java │ │ ├── JLS4 │ │ │ ├── BinLitDemo │ │ │ │ └── BinLitDemo.java │ │ │ ├── BoxDemo │ │ │ │ └── BoxDemo.java │ │ │ ├── Copy │ │ │ │ └── v2 │ │ │ │ │ └── Copy.java │ │ │ ├── CopyToDatabaseOrFile │ │ │ │ └── v2 │ │ │ │ │ └── CopyToDatabaseOrFile.java │ │ │ ├── CustomARM │ │ │ │ └── CustomARM.java │ │ │ ├── SupExDemo │ │ │ │ └── SupExDemo.java │ │ │ ├── Touch │ │ │ │ └── Touch.java │ │ │ ├── UndLitDemo │ │ │ │ └── UndLitDemo.java │ │ │ └── UnsafeVarargsDemo │ │ │ │ ├── UnsafeVarargsDemo.java │ │ │ │ └── UnsafeVarargsDemo2.java │ │ ├── JLS8 │ │ │ ├── DMDemo │ │ │ │ ├── v2 │ │ │ │ │ └── Drivable.java │ │ │ │ ├── v3 │ │ │ │ │ └── Drivable.java │ │ │ │ └── v4 │ │ │ │ │ └── DMDemo.java │ │ │ ├── LambdaDemo │ │ │ │ ├── v1 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v10 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v3 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v4 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v5 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v6 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v7 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ ├── v8 │ │ │ │ │ └── LambdaDemo.java │ │ │ │ └── v9 │ │ │ │ │ └── LambdaDemo.java │ │ │ ├── MRDemo │ │ │ │ ├── v1 │ │ │ │ │ └── MRDemo.java │ │ │ │ ├── v2 │ │ │ │ │ └── MRDemo.java │ │ │ │ ├── v3 │ │ │ │ │ └── MRDemo.java │ │ │ │ ├── v4 │ │ │ │ │ └── MRDemo.java │ │ │ │ ├── v5 │ │ │ │ │ └── MRDemo.java │ │ │ │ └── v6 │ │ │ │ │ └── MRDemo.java │ │ │ ├── RADemo │ │ │ │ └── Account.java │ │ │ └── SMDemo │ │ │ │ └── Drawable.java │ │ ├── MarkerAnnotation.java │ │ ├── MarkerAnnotation.json │ │ ├── MethodDeclaration.java │ │ ├── MethodDeclaration.json │ │ ├── MethodDeclaration2.java │ │ ├── MethodDeclaration2.json │ │ ├── SingleMemberAnnotation.java │ │ ├── SingleMemberAnnotation.json │ │ ├── default-method.java │ │ ├── default-method.json │ │ ├── rcv-param-inner.java │ │ ├── rcv-param-inner.json │ │ ├── rcv-param.java │ │ ├── rcv-param.json │ │ ├── repeating-annot.java │ │ └── repeating-annot.json │ ├── javascript │ │ ├── ArrayLiteralNode.boa │ │ ├── ArrayLiteralNode.js │ │ ├── AssignAddNode.boa │ │ ├── AssignAddNode.js │ │ ├── AssignBitAndNode.boa │ │ ├── AssignBitAndNode.js │ │ ├── AssignDecNode.boa │ │ ├── AssignDecNode.js │ │ ├── AssignMultNode.boa │ │ ├── AssignMultNode.js │ │ ├── AssignNode.boa │ │ ├── AssignNode.js │ │ ├── ContinueStatementNode.boa │ │ ├── ContinueStatementNode.js │ │ ├── DebuggerKeyWordLiteralNode.boa │ │ ├── DebuggerKeyWordLiteralNode.js │ │ ├── DoLoopNode.boa │ │ ├── DoLoopNode.js │ │ ├── ElementGetNode.boa │ │ ├── ElementGetNode.js │ │ ├── ForEachNode.boa │ │ ├── ForEachNode.js │ │ ├── ForInLoopNode.boa │ │ ├── ForInLoopNode.js │ │ ├── ForLoopNode.boa │ │ ├── ForLoopNode.js │ │ ├── ForLoopWithBreakStatementNode.boa │ │ ├── ForLoopWithBreakStatementNode.js │ │ ├── FunctionCallWtihFunctionNodeAsArgument.boa │ │ ├── FunctionCallWtihFunctionNodeAsArgument.js │ │ ├── FunctionNode.boa │ │ ├── FunctionNode.js │ │ ├── FunctionNode2.boa │ │ ├── FunctionNode2.js │ │ ├── FunctionNode3.boa │ │ ├── FunctionNode3.js │ │ ├── InFixExpressionIN.boa │ │ ├── InFixExpressionIN.js │ │ ├── InFixExpressionSHEQ.boa │ │ ├── InFixExpressionSHEQ.js │ │ ├── InFixExpressionSHNEQ.boa │ │ ├── InFixExpressionSHNEQ.js │ │ ├── InFixExpressionTYPECOMPARE.boa │ │ ├── InFixExpressionTYPECOMPARE.js │ │ ├── LabeledStatementNode.boa │ │ ├── LabeledStatementNode.js │ │ ├── LabeledStatementNode2.boa │ │ ├── LabeledStatementNode2.js │ │ ├── LetNode.boa │ │ ├── LetNode.js │ │ ├── NewExpressionNode.boa │ │ ├── NewExpressionNode.js │ │ ├── ObjectLiteralNode.boa │ │ ├── ObjectLiteralNode.js │ │ ├── ObjectLiteralNode2.boa │ │ ├── ObjectLiteralNode2.js │ │ ├── ParenthesizedExpression.boa │ │ ├── ParenthesizedExpression.js │ │ ├── PropertyGetNode.boa │ │ ├── PropertyGetNode.js │ │ ├── RegExpLiteral.boa │ │ ├── RegExpLiteral.js │ │ ├── SwitchStatementNode.boa │ │ ├── SwitchStatementNode.js │ │ ├── ThisKeyWordLiteralNode.boa │ │ ├── ThisKeyWordLiteralNode.js │ │ ├── ThrowNode.boa │ │ ├── ThrowNode.js │ │ ├── TrueFalseKeyWordLiteralNodes.boa │ │ ├── TrueFalseKeyWordLiteralNodes.js │ │ ├── TryCatchNodes.boa │ │ ├── TryCatchNodes.js │ │ ├── UnaryExpressionDELETE.boa │ │ ├── UnaryExpressionDELETE.js │ │ ├── UnaryExpressionTYPEOF.boa │ │ ├── UnaryExpressionTYPEOF.js │ │ ├── UnaryExpressionVOID.boa │ │ ├── UnaryExpressionVOID.js │ │ ├── VariableDeclarationNode.boa │ │ ├── VariableDeclarationNode.js │ │ ├── VariableDeclarationNode2.boa │ │ ├── VariableDeclarationNode2.js │ │ ├── VariableDeclarationNode3.boa │ │ ├── VariableDeclarationNode3.js │ │ ├── VariableDeclarationNode4.boa │ │ ├── VariableDeclarationNode4.js │ │ ├── VariableDeclarationNode5.boa │ │ ├── VariableDeclarationNode5.js │ │ ├── WhileNode.boa │ │ ├── WhileNode.js │ │ ├── WithNode.boa │ │ ├── WithNode.js │ │ ├── XmlDotQueryNode.boa │ │ ├── XmlDotQueryNode.js │ │ ├── XmlElemRefNode.boa │ │ ├── XmlElemRefNode.js │ │ ├── XmlLiteralNode.boa │ │ ├── XmlLiteralNode.js │ │ ├── XmlPropRefNode.boa │ │ ├── XmlPropRefNode.js │ │ ├── YieldNode.boa │ │ └── YieldNode.js │ ├── jsons │ │ └── repos.json │ └── test_datagen │ │ ├── ast │ │ ├── data │ │ └── index │ │ ├── commit │ │ ├── data │ │ └── index │ │ └── projects.seq ├── ddg │ ├── dot │ │ ├── loop-condition-use1 │ │ ├── loop-condition-use2 │ │ ├── loop-condition-use3 │ │ └── return-var │ └── src │ │ ├── loop-condition-use1 │ │ ├── loop-condition-use2 │ │ ├── loop-condition-use3 │ │ └── return-var ├── inhattr │ ├── after-id.boa │ ├── after.boa │ ├── before-after.boa │ ├── before-id.boa │ ├── before.boa │ ├── idlist.boa │ ├── mult-current.boa │ ├── mult-current2.boa │ ├── mult-current3.boa │ ├── mult-visitors.boa │ ├── nested.boa │ ├── same-visit.boa │ ├── simple.boa │ └── wildcard.boa ├── known-good │ ├── all.boa │ ├── annot-names.boa │ ├── annotations-define.boa │ ├── annotations-use.boa │ ├── assert.boa │ ├── ast-count.boa │ ├── binary-lit.boa │ ├── bug-fix.boa │ ├── catAp1.boa │ ├── catAp1b.boa │ ├── catAp2.boa │ ├── catAp3.boa │ ├── catAp4.boa │ ├── catBp1.boa │ ├── catBp12.boa │ ├── catBp13.boa │ ├── catBp14.boa │ ├── catBp15.boa │ ├── catBp17.boa │ ├── catBp18.boa │ ├── catBp19.boa │ ├── catBp2.boa │ ├── catBp3.boa │ ├── catBp4.boa │ ├── catBp8.boa │ ├── catDp1.boa │ ├── catDp2.boa │ ├── catEp1.boa │ ├── catEp2.boa │ ├── catEp3.boa │ ├── catEp4.boa │ ├── catEp5.boa │ ├── catEp7.boa │ ├── clonebug.boa │ ├── combiner.boa │ ├── concurrent-log.boa │ ├── concurrent.boa │ ├── counts.boa │ ├── counts2.boa │ ├── dead-code.boa │ ├── diamond.boa │ ├── dupe-types.boa │ ├── enhanced-for.boa │ ├── enum.boa │ ├── enums.boa │ ├── fields.boa │ ├── generics-define-field.boa │ ├── generics-define-method.boa │ ├── generics-define-type.boa │ ├── generics-wildcard-extends.boa │ ├── generics-wildcard-super.boa │ ├── generics-wildcard.boa │ ├── imports.boa │ ├── input.boa │ ├── java-count.boa │ ├── len.boa │ ├── median.boa │ ├── merge.boa │ ├── multicatch.boa │ ├── null-check.boa │ ├── optimizerbug.boa │ ├── potential.boa │ ├── q1.boa │ ├── q10.boa │ ├── q12.boa │ ├── q13.boa │ ├── q14.boa │ ├── q15.boa │ ├── q16.boa │ ├── q17.boa │ ├── q18.boa │ ├── q19.boa │ ├── q2.boa │ ├── q20.boa │ ├── q21.boa │ ├── q22.boa │ ├── q23.boa │ ├── q25.boa │ ├── q26.boa │ ├── q27.boa │ ├── q28.boa │ ├── q3.boa │ ├── q4.boa │ ├── q9.boa │ ├── renamebug.boa │ ├── safe-varargs.boa │ ├── side-effects.boa │ ├── stats.boa │ ├── test.boa │ ├── test2.boa │ ├── thread-use.boa │ ├── try-resources.boa │ ├── types.boa │ ├── underscore-lit.boa │ ├── unreachable.boa │ └── varargs.boa ├── lexing │ ├── char-lit.boa │ ├── comment-eof-no-eol.boa │ ├── empty.boa │ ├── errors │ │ └── bad-comment.boa │ ├── fp-lit.boa │ ├── identifier-lit.boa │ ├── int-lit.boa │ ├── regex-lit.boa │ ├── string-lit.boa │ └── time-lit.boa ├── parsing │ ├── comma.boa │ ├── enums.boa │ ├── errors │ │ ├── assign-to-map.boa │ │ ├── bad-emit-with-weight.boa │ │ ├── bad-identifiers.boa │ │ ├── empty.boa │ │ ├── enum-extra-comma.boa │ │ ├── foreach.boa │ │ ├── keyword-as-id.boa │ │ ├── output-var-equals.boa │ │ └── visitor-missing-before.boa │ ├── expr-numbers-with-space.boa │ ├── ifelse-vardecl-no-braces.boa │ └── multiline-strings.boa ├── pdg │ ├── dot │ │ ├── loop-condition-use1 │ │ ├── loop-condition-use2 │ │ ├── loop-condition-use3 │ │ └── return-var │ └── src │ │ ├── loop-condition-use1 │ │ ├── loop-condition-use2 │ │ ├── loop-condition-use3 │ │ └── return-var ├── program-analysis │ ├── available-expression.boa │ ├── common-expression-detection.boa │ ├── copy-propogation.boa │ ├── dead-code.boa │ ├── dominator.boa │ ├── file-status.boa │ ├── live-variable.boa │ ├── liveness.boa │ ├── local-may-alais.boa │ ├── local-must-not-alias.boa │ ├── loop-invariant-code.boa │ ├── nullness-analysis.boa │ ├── post-dominator.boa │ ├── print-names.boa │ ├── reaching-def.boa │ ├── upsafety-analysis.boa │ ├── usedefvar.boa │ ├── useless-increment-in-return.boa │ ├── very-busy-expressions.boa │ └── wait-not-inloop.boa ├── traversal │ ├── backward-traversecall-withfixpoint.boa │ ├── backward-traversecall-withnofixpoint.boa │ ├── errors │ │ ├── traversal-with-stop.boa │ │ └── traverse-with-no-return-statement.boa │ ├── fixpoint.boa │ ├── forward-traversecall-withfixpoint.boa │ ├── forward-traversecall-withnofixpoint.boa │ ├── getValue-current-traversal.boa │ ├── getValue-other-traversal.boa │ ├── getcfg.boa │ ├── multiple-traversal.boa │ ├── traversal-with-returntype.boa │ └── traversal-without-returntype.boa └── typecheck │ ├── agg-component.boa │ ├── array-of-enum.boa │ ├── arrays.boa │ ├── comparisons.boa │ ├── component-names.boa │ ├── errors │ ├── add-set-wrong-val.boa │ ├── after-return.boa │ ├── aggregator-in-emit.boa │ ├── assign-func-no-ret.boa │ ├── assign-type-to-var.boa │ ├── assign-type-to-var2.boa │ ├── assignoutput.boa │ ├── before-return.boa │ ├── builtin-method-no-call.boa │ ├── cout.boa │ ├── current-badtype.boa │ ├── function-as-arg-bad.boa │ ├── method-call-wrong-type.boa │ ├── method-no-call.boa │ ├── nested-return.boa │ ├── re-decl-var.boa │ ├── re-decl-var2.boa │ ├── stop-in-after.boa │ ├── tuple-redecl.boa │ └── var-as-type.boa │ ├── firstclass-funcs.boa │ ├── functype-diff-argnames.boa │ ├── no-weight.boa │ ├── recursive-func.boa │ ├── returns.boa │ ├── self-cast.boa │ ├── time-lit.boa │ ├── tuple-access.boa │ ├── tuple-copy.boa │ ├── tuple-declare.boa │ └── tuple-same-variable.boa └── tutorial ├── img ├── after_config.png ├── datagen.png ├── datagenparam.png ├── evalparam.png ├── import.png └── json_looklike.png └── run_boa_locally.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.proto linguist-detectable 2 | src/compiled-proto/** linguist-generated 3 | test/datagen/** -linguist-detectable 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /build/ 2 | /dist/ 3 | /compile/ 4 | /output/ 5 | /.idea/ 6 | /bin/ 7 | /.settings/ 8 | /junitvmwatcher*.properties 9 | .vscode/ 10 | /src/antlr/.antlr 11 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | dist: xenial 2 | language: java 3 | jdk: 4 | - openjdk8 5 | addons: 6 | apt: 7 | packages: 8 | - junit4 9 | - ant 10 | - ant-optional 11 | script: ant -Dprotobuf.uptodate=true test checkstyle 12 | notifications: 13 | email: 14 | recipients: 15 | - hridesh@iastate.edu 16 | - rdyer@bgsu.edu 17 | on_success: change 18 | on_failure: always 19 | -------------------------------------------------------------------------------- /boa.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | "%JAVA_HOME%"\bin\java -cp .;"%~dp0dist\boa-compiler.jar";"%~dp0lib\*";"%~dp0lib\evaluator\*";"%~dp0lib\datagen\*";"%~dp0compile" boa.BoaMain %* 4 | pause 5 | -------------------------------------------------------------------------------- /boa.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | BASEDIR=$(dirname "$0") 4 | 5 | java -cp ".:$BASEDIR/dist/boa-compiler.jar:$BASEDIR/lib/*:$BASEDIR/lib/evaluator/*:$BASEDIR/lib/datagen/*:$BASEDIR/compile" boa.BoaMain $* 6 | -------------------------------------------------------------------------------- /checkstyle-suppress.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /compile.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | IF "%1" == "" ( 4 | ECHO "Usage: %0 file.boa [options]" 5 | "%~dp0\boa.bat" -c 6 | EXIT /B 1 7 | ) 8 | 9 | "%~dp0\boa.bat" -c -i %* 10 | -------------------------------------------------------------------------------- /compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$#" -lt 1 ]; then 4 | echo "Usage: $0 file.boa [options]" 5 | $(dirname "$0")/boa.sh -c 6 | exit -1 7 | fi 8 | 9 | $(dirname "$0")/boa.sh -c -i $* 10 | -------------------------------------------------------------------------------- /conf/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootCategory=INFO, console 2 | 3 | log4j.appender.console = org.apache.log4j.ConsoleAppender 4 | log4j.appender.console.layout = org.apache.log4j.PatternLayout 5 | log4j.appender.console.layout.ConversionPattern = %d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n -------------------------------------------------------------------------------- /dataset/.gitignore: -------------------------------------------------------------------------------- 1 | /repos/ 2 | *.crc 3 | index 4 | data 5 | *.seq 6 | -------------------------------------------------------------------------------- /doc/dev/img/boa_evaluator_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/boa_evaluator_output.png -------------------------------------------------------------------------------- /doc/dev/img/eclipse_library_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/eclipse_library_tab.png -------------------------------------------------------------------------------- /doc/dev/img/eclipse_package_explorer_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/eclipse_package_explorer_final.png -------------------------------------------------------------------------------- /doc/dev/img/eclipse_runconfig_arguments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/eclipse_runconfig_arguments.png -------------------------------------------------------------------------------- /doc/dev/img/eclipse_runconfig_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/eclipse_runconfig_main.png -------------------------------------------------------------------------------- /doc/dev/img/eclipse_source_tab_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/eclipse_source_tab_final.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_clone_repo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_clone_repo.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_dependencies_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_dependencies_tab.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_evaluator_output.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_evaluator_output.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_project_explorer_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_project_explorer_final.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_runconfig_main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_runconfig_main.png -------------------------------------------------------------------------------- /doc/dev/img/intellij_source_tab_final.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/doc/dev/img/intellij_source_tab_final.png -------------------------------------------------------------------------------- /evaluate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ "$#" -lt 2 ]; then 4 | echo "Usage: $0 file.boa output-dir/ [options]" 5 | $(dirname "$0")/boa.sh -e 6 | exit -1 7 | fi 8 | 9 | $(dirname "$0")/boa.sh -e -d dataset/ -i $1 -o $2 $* 10 | -------------------------------------------------------------------------------- /failingtest/codegen/assign-func-params.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | f := function(i: int) { 5 | i = 3; 6 | }; 7 | -------------------------------------------------------------------------------- /failingtest/codegen/curry.boa: -------------------------------------------------------------------------------- 1 | TEST: output collection of string; 2 | 3 | type f = function(y: int) : bool; 4 | 5 | curry := function(x: int) : f { 6 | return f { 7 | return x > y; 8 | }; 9 | }; 10 | 11 | if (curry(3)(2)) TEST << "OK"; 12 | -------------------------------------------------------------------------------- /failingtest/codegen/quantified-func-call.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | self: map[string] of bool; 5 | foreach (i : int; def(keys(self)[i])) {} 6 | -------------------------------------------------------------------------------- /failingtest/typecheck/errors/quant-missing-use.boa: -------------------------------------------------------------------------------- 1 | o: output collection of string; 2 | 3 | foreach (i: int; len(input.programming_languages) > 0) 4 | o << "test"; 5 | -------------------------------------------------------------------------------- /failingtest/typecheck/forward-declare-func.boa: -------------------------------------------------------------------------------- 1 | f: function(v: int); 2 | f = function(v: int) { 3 | }; 4 | -------------------------------------------------------------------------------- /lib/antlr-4.5-complete.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/antlr-4.5-complete.jar -------------------------------------------------------------------------------- /lib/checkstyle-6.19-all.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/checkstyle-6.19-all.jar -------------------------------------------------------------------------------- /lib/commons-cli-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/commons-cli-1.2.jar -------------------------------------------------------------------------------- /lib/commons-lang-2.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/commons-lang-2.4.jar -------------------------------------------------------------------------------- /lib/commons-math-2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/commons-math-2.1.jar -------------------------------------------------------------------------------- /lib/datagen/app-1.3.200-v20130910-1609-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/app-1.3.200-v20130910-1609-javadoc.jar -------------------------------------------------------------------------------- /lib/datagen/app-1.3.200-v20130910-1609-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/app-1.3.200-v20130910-1609-sources.jar -------------------------------------------------------------------------------- /lib/datagen/app-1.3.200-v20130910-1609.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/app-1.3.200-v20130910-1609.jar -------------------------------------------------------------------------------- /lib/datagen/com.jcraft.jsch-all-1.0.1.release.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/com.jcraft.jsch-all-1.0.1.release.jar -------------------------------------------------------------------------------- /lib/datagen/commons-beanutils-1.8.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/commons-beanutils-1.8.3.jar -------------------------------------------------------------------------------- /lib/datagen/commons-collections-3.2.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/commons-collections-3.2.1.jar -------------------------------------------------------------------------------- /lib/datagen/commons-configuration-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/commons-configuration-1.6.jar -------------------------------------------------------------------------------- /lib/datagen/commons-io-2.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/commons-io-2.4.jar -------------------------------------------------------------------------------- /lib/datagen/commons-logging-1.1.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/commons-logging-1.1.1.jar -------------------------------------------------------------------------------- /lib/datagen/cssparser-0.9.23-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/cssparser-0.9.23-sources.jar -------------------------------------------------------------------------------- /lib/datagen/cssparser-0.9.23.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/cssparser-0.9.23.jar -------------------------------------------------------------------------------- /lib/datagen/dom4j-2.0.2-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/dom4j-2.0.2-sources.jar -------------------------------------------------------------------------------- /lib/datagen/dom4j-2.0.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/dom4j-2.0.2.jar -------------------------------------------------------------------------------- /lib/datagen/eclipse.jdt.core.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/eclipse.jdt.core.jar -------------------------------------------------------------------------------- /lib/datagen/ezmorph-1.0.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/ezmorph-1.0.6.jar -------------------------------------------------------------------------------- /lib/datagen/gson-2.7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/gson-2.7.jar -------------------------------------------------------------------------------- /lib/datagen/gson-gson-parent-2.7.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/gson-gson-parent-2.7.zip -------------------------------------------------------------------------------- /lib/datagen/jena-core-2.7.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/jena-core-2.7.3.jar -------------------------------------------------------------------------------- /lib/datagen/jena-iri-0.9.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/jena-iri-0.9.3.jar -------------------------------------------------------------------------------- /lib/datagen/jsoup-1.10.3-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/jsoup-1.10.3-javadoc.jar -------------------------------------------------------------------------------- /lib/datagen/jsoup-1.10.3-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/jsoup-1.10.3-sources.jar -------------------------------------------------------------------------------- /lib/datagen/jsoup-1.10.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/jsoup-1.10.3.jar -------------------------------------------------------------------------------- /lib/datagen/log4j-1.2.16.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/log4j-1.2.16.jar -------------------------------------------------------------------------------- /lib/datagen/maven-model-3.0-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/maven-model-3.0-sources.jar -------------------------------------------------------------------------------- /lib/datagen/maven-model-3.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/maven-model-3.0.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.core.contenttype_3.4.100.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.core.contenttype_3.4.100.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.core.filesystem_1.6.0.v20160503-1608.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.core.filesystem_1.6.0.v20160503-1608.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.core.jobs_3.5.101.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.core.jobs_3.5.101.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.core.resources_3.7.101.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.core.resources_3.7.101.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.core.runtime_3.7.0.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.core.runtime_3.7.0.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.dltk.core_5.7.1.201703020501.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.dltk.core_5.7.1.201703020501.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.equinox.common_3.6.0.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.equinox.common_3.6.0.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.equinox.preferences_3.4.2.dist.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.equinox.preferences_3.4.2.dist.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.equinox.registry.source_3.5.100.v20110502.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.equinox.registry.source_3.5.100.v20110502.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.equinox.registry_3.5.100.v20110502.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.equinox.registry_3.5.100.v20110502.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r-javadoc.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r-sources.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.jgit-4.0.1.201506240215-r.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.osgi.source_3.9.1.v20130814-1242.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.osgi.source_3.9.1.v20130814-1242.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.osgi_3.9.1.v20130814-1242.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.osgi_3.9.1.v20130814-1242.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.php.core.parser.source_4.3.1.201703301037.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.php.core.parser.source_4.3.1.201703301037.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.php.core.parser_4.3.1.201703301037.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.php.core.parser_4.3.1.201703301037.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.php.core.source_4.3.1.201703301037.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.php.core.source_4.3.1.201703301037.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.php.core_4.3.1.201703301037.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.php.core_4.3.1.201703301037.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.text-3.5.101-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.text-3.5.101-sources.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.text-3.5.101.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.text-3.5.101.jar -------------------------------------------------------------------------------- /lib/datagen/org.eclipse.wst.jsdt.core_1.3.1.v201401291437.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/org.eclipse.wst.jsdt.core_1.3.1.v201401291437.jar -------------------------------------------------------------------------------- /lib/datagen/plexus-utils-2.0.5-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/plexus-utils-2.0.5-sources.jar -------------------------------------------------------------------------------- /lib/datagen/plexus-utils-2.0.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/plexus-utils-2.0.5.jar -------------------------------------------------------------------------------- /lib/datagen/protobuf-2.5.0.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/protobuf-2.5.0.zip -------------------------------------------------------------------------------- /lib/datagen/protobuf-java-2.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/protobuf-java-2.5.0.jar -------------------------------------------------------------------------------- /lib/datagen/rhino-1.7.7.1-sources.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/rhino-1.7.7.1-sources.zip -------------------------------------------------------------------------------- /lib/datagen/rhino-1.7.7.1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/rhino-1.7.7.1.jar -------------------------------------------------------------------------------- /lib/datagen/sac.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/sac.jar -------------------------------------------------------------------------------- /lib/datagen/sacjavadoc-1.3.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/sacjavadoc-1.3.zip -------------------------------------------------------------------------------- /lib/datagen/slf4j-api-1.4.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/slf4j-api-1.4.3.jar -------------------------------------------------------------------------------- /lib/datagen/slf4j-log4j12-1.4.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/slf4j-log4j12-1.4.3.jar -------------------------------------------------------------------------------- /lib/datagen/svnkit-1.7.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/svnkit-1.7.6.jar -------------------------------------------------------------------------------- /lib/datagen/trove-3.0.3-src.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/trove-3.0.3-src.jar -------------------------------------------------------------------------------- /lib/datagen/trove-3.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/trove-3.0.3.jar -------------------------------------------------------------------------------- /lib/datagen/xercesImpl.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/xercesImpl.jar -------------------------------------------------------------------------------- /lib/datagen/xml-apis.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/xml-apis.jar -------------------------------------------------------------------------------- /lib/datagen/xml-security-impl-1.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/datagen/xml-security-impl-1.0.jar -------------------------------------------------------------------------------- /lib/evaluator/com.springsource.org.codehaus.jackson-1.4.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/com.springsource.org.codehaus.jackson-1.4.2.jar -------------------------------------------------------------------------------- /lib/evaluator/com.springsource.org.codehaus.jackson.mapper-1.4.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/com.springsource.org.codehaus.jackson.mapper-1.4.2.jar -------------------------------------------------------------------------------- /lib/evaluator/commons-configuration-1.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/commons-configuration-1.6.jar -------------------------------------------------------------------------------- /lib/evaluator/commons-httpclient-3.1.0.redhat-7.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/commons-httpclient-3.1.0.redhat-7.jar -------------------------------------------------------------------------------- /lib/evaluator/commons-io-2.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/commons-io-2.4.jar -------------------------------------------------------------------------------- /lib/evaluator/jackson-mapper-asl-1.9.13.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/evaluator/jackson-mapper-asl-1.9.13.jar -------------------------------------------------------------------------------- /lib/hadoop-core-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hadoop-core-1.0.4.jar -------------------------------------------------------------------------------- /lib/hadoop-release-1.0.4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hadoop-release-1.0.4.zip -------------------------------------------------------------------------------- /lib/hamcrest-all-1.3-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-all-1.3-javadoc.jar -------------------------------------------------------------------------------- /lib/hamcrest-all-1.3-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-all-1.3-sources.jar -------------------------------------------------------------------------------- /lib/hamcrest-all-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-all-1.3.jar -------------------------------------------------------------------------------- /lib/hamcrest-core-1.3-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-core-1.3-javadoc.jar -------------------------------------------------------------------------------- /lib/hamcrest-core-1.3-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-core-1.3-sources.jar -------------------------------------------------------------------------------- /lib/hamcrest-core-1.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/hamcrest-core-1.3.jar -------------------------------------------------------------------------------- /lib/junit-4.11-javadoc.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/junit-4.11-javadoc.jar -------------------------------------------------------------------------------- /lib/junit-4.11-sources.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/junit-4.11-sources.jar -------------------------------------------------------------------------------- /lib/junit-4.11.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/junit-4.11.jar -------------------------------------------------------------------------------- /lib/mrunit-0.9.0-incubating-hadoop1.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/lib/mrunit-0.9.0-incubating-hadoop1.jar -------------------------------------------------------------------------------- /rtlib/ST-4.0.8.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/ST-4.0.8.jar -------------------------------------------------------------------------------- /rtlib/antlr-runtime-4.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/antlr-runtime-4.5.jar -------------------------------------------------------------------------------- /rtlib/commons-cli-1.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/commons-cli-1.2.jar -------------------------------------------------------------------------------- /rtlib/log4j-1.2.15.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/log4j-1.2.15.jar -------------------------------------------------------------------------------- /rtlib/protobuf-java-2.5.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/protobuf-java-2.5.0.jar -------------------------------------------------------------------------------- /rtlib/scannotation-1.0.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/rtlib/scannotation-1.0.3.jar -------------------------------------------------------------------------------- /src/test/boa/test/datagen/TestBuildSnapshot2.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen; 2 | 3 | import org.junit.Test; 4 | 5 | import boa.datagen.DefaultProperties; 6 | 7 | public class TestBuildSnapshot2 extends BuildSnapshotBase { 8 | @Test 9 | public void testBuildSnapshot() throws Exception { 10 | DefaultProperties.DEBUG = true; 11 | 12 | buildCodeRepository("boalang/compiler"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/TestBuildSnapshot3.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen; 2 | 3 | import org.junit.Test; 4 | 5 | import boa.datagen.DefaultProperties; 6 | 7 | public class TestBuildSnapshot3 extends BuildSnapshotBase { 8 | @Test 9 | public void testBuildSnapshot() throws Exception { 10 | DefaultProperties.DEBUG = true; 11 | 12 | buildCodeRepository("junit-team/junit4"); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/html/TestHTMLPitcureTag.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.html; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestHTMLPitcureTag extends HTMLBaseTest { 8 | 9 | @Test 10 | public void testPictureTag() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/HTML/PictureTag.boa"), 12 | load("test/datagen/HTML/PictureTag.HTML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/html/TestHtmlDocType.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.html; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestHtmlDocType extends HTMLBaseTest { 8 | 9 | @Test 10 | public void testDocType() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/HTML/DocType.boa"), 12 | load("test/datagen/HTML/DocType.HTML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/html/TestHtmlFormTag.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.html; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestHtmlFormTag extends HTMLBaseTest { 8 | 9 | @Test 10 | public void testFormTag() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/HTML/FormTag.boa"), 12 | load("test/datagen/HTML/FormTag.HTML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/html/TestStyleTag.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.html; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestStyleTag extends HTMLBaseTest { 8 | 9 | @Test 10 | public void testStyleTag() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/HTML/StyleTag.boa"), 12 | load("test/datagen/HTML/StyleTag.HTML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/html/TestXmlParse.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.html; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestXmlParse extends HTMLBaseTest { 8 | 9 | @Test 10 | public void testXml() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/HTML/xml.boa"), 12 | load("test/datagen/HTML/xml.xml")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestElelementGet.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestElelementGet extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void elementGetTest1() throws IOException{ 11 | nodeTest( load("test/datagen/javascript/ElementGetNode.boa"), load("test/datagen/javascript/ElementGetNode.js")); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestLetNode.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestLetNode extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void letTest1() throws IOException { 11 | nodeTest(load("test/datagen/javascript/LetNode.boa"), load("test/datagen/javascript/LetNode.js")); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestThrow.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestThrow extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void throwTest1() throws IOException { 11 | nodeTest(load("test/datagen/javascript/ThrowNode.boa"), load("test/datagen/javascript/ThrowNode.js")); 12 | } 13 | 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestTryCatch.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestTryCatch extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void tryCatchTest1() throws IOException { 11 | nodeTest(load("test/datagen/javascript/TryCatchNodes.boa"), load("test/datagen/javascript/TryCatchNodes.js")); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestWithStatement.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestWithStatement extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void withTest1() throws IOException { 11 | nodeTest(load("test/datagen/javascript/WithNode.boa"), load("test/datagen/javascript/WithNode.js")); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/js/TestYield.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.js; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestYield extends JavaScriptBaseTest { 8 | 9 | @Test 10 | public void yieldTest1() throws IOException { 11 | nodeTest(load("test/datagen/javascript/YieldNode.boa"), load("test/datagen/javascript/YieldNode.js")); 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPBackTick.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPBackTick extends PHPBaseTest { 8 | 9 | @Test 10 | public void testCBackTick() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/BackTickNode.boa"), 12 | load("test/datagen/PHP/BackTickNode.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPGoto.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPGoto extends PHPBaseTest { 8 | 9 | @Test 10 | public void testGoto() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/GotoNodes.boa"), 12 | load("test/datagen/PHP/GotoNodes.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPInclude.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPInclude extends PHPBaseTest { 8 | 9 | @Test 10 | public void testInclude() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/Include.boa"), 12 | load("test/datagen/PHP/Include.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPInlineHtml.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPInlineHtml extends PHPBaseTest { 8 | 9 | @Test 10 | public void testInLineHtml() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/InLineHtml.boa"), 12 | load("test/datagen/PHP/InLineHtml.php")); 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPList.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPList extends PHPBaseTest { 8 | 9 | @Test 10 | public void testList() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/List.boa"), 12 | load("test/datagen/PHP/List.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPParen.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPParen extends PHPBaseTest { 8 | 9 | @Test 10 | public void testParen() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/Paren.boa"), 12 | load("test/datagen/PHP/Paren.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPQuote.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPQuote extends PHPBaseTest { 8 | 9 | @Test 10 | public void testQuote() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/QuoteNode.boa"), 12 | load("test/datagen/PHP/QuoteNode.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPReference.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPReference extends PHPBaseTest { 8 | 9 | @Test 10 | public void testReference() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/Reference.boa"), 12 | load("test/datagen/PHP/Reference.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/php/TestPHPTryCatch.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.php; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestPHPTryCatch extends PHPBaseTest { 8 | 9 | @Test 10 | public void testTryCatch() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/PHP/TryCatch.boa"), 12 | load("test/datagen/PHP/TryCatch.php")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/xml/TestAttribute.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.xml; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestAttribute extends XMLBaseTest { 8 | 9 | @Test 10 | public void testNameSpace() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/XML/Attribute.boa"), 12 | ("test/datagen/XML/Attribute.XML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/xml/TestNote.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.xml; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestNote extends XMLBaseTest { 8 | 9 | @Test 10 | public void testNameSpace() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/XML/Note.boa"), 12 | ("test/datagen/XML/Note.XML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/test/boa/test/datagen/xml/TestXMLNamespace.java: -------------------------------------------------------------------------------- 1 | package boa.test.datagen.xml; 2 | 3 | import java.io.IOException; 4 | 5 | import org.junit.Test; 6 | 7 | public class TestXMLNamespace extends XMLBaseTest{ 8 | 9 | @Test 10 | public void testNameSpace() throws IOException, Exception{ 11 | nodeTest(load("test/datagen/XML/Namespace.boa"), 12 | ("test/datagen/XML/Namespace.XML")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /test/cdg/dot/for-with-return: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | 0[shape=ellipse,label="[0] ENTRY"] 4 | 1[shape=ellipse,label="[1] int i = 0"] 5 | 2[shape=ellipse,label="[2] i < 5"] 6 | 3[shape=ellipse,label="[3] return 5;"] 7 | 4[shape=ellipse,label="[4] i++"] 8 | 5[shape=ellipse,label="[5] return 2;"] 9 | 0 -> 1 [label="T"] 10 | 0 -> 2 [label="T"] 11 | 2 -> 3 [label="T"] 12 | 2 -> 5 [label="F"] 13 | } 14 | -------------------------------------------------------------------------------- /test/cdg/src/for-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | for (int i = 0; i < 5; i++) { 4 | return 5; 5 | } 6 | return 2; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/cdg/src/if-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int x = 7; 4 | if (x < 3) return -1; 5 | if (x <= 5 && x >= 3) return 0; 6 | if (x > 5) return x; 7 | return -1; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cdg/src/nest-for-if-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | for (int i = 0; i < 5; i++) { 4 | if (i == 3) return 3; 5 | for (int j = 0; j < i; j++) { 6 | if (j == 4) return 4; 7 | } 8 | } 9 | return 2; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cdg/src/nest-if-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int x = 7; 4 | if (x < 3) return -1; 5 | else { 6 | if (3 + 5 < 4) return -1; 7 | else { 8 | if (x == 6) return -1; 9 | else if (x == 7) return 0; 10 | else if (x == 8) return -1; 11 | } 12 | } 13 | return -1; 14 | } 15 | } -------------------------------------------------------------------------------- /test/cdg/src/switch-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int c = 5; 4 | switch (c % 3) { 5 | case 0: 6 | case 1: 7 | return 0; 8 | case 2: 9 | default: 10 | break; 11 | } 12 | return 1; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /test/cdg/src/try-catch: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | if (o != null) { 5 | o.close(); 6 | } 7 | } catch (InterruptedException e) { 8 | Thread.currentThread().interrupt(); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cdg/src/while-with-return: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int count = 0; 4 | while(true) { 5 | if (count == 10) return 1; 6 | else count++; 7 | } 8 | return 0; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/cfg/dot/return-exp: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | { rank = sink; 2; } 4 | 0[shape=ellipse,label="[0] ENTRY"] 5 | 1[shape=box,label="[1] return m();"] 6 | 2[shape=ellipse,label="[2] EXIT"] 7 | 0 -> 1 8 | 1 -> 2 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/dot/return-no-exp: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | { rank = sink; 2; } 4 | 0[shape=ellipse,label="[0] ENTRY"] 5 | 1[shape=box,label="[1] return;"] 6 | 2[shape=ellipse,label="[2] EXIT"] 7 | 0 -> 1 8 | 1 -> 2 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/dot/while: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | { rank = sink; 3; } 4 | 0[shape=ellipse,label="[0] ENTRY"] 5 | 1[shape=diamond,label="[1] true"] 6 | 2[shape=parallelogram,label="[2] System.out.println(\"hi\")"] 7 | 3[shape=ellipse,label="[3] EXIT"] 8 | 0 -> 1 9 | 1 -> 2 [label="T"] 10 | 1 -> 3 11 | 2 -> 1 [label="B"] 12 | } 13 | -------------------------------------------------------------------------------- /test/cfg/dot/while-conditional-break: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | { rank = sink; 4; } 4 | 0[shape=ellipse,label="[0] ENTRY"] 5 | 1[shape=diamond,label="[1] true"] 6 | 2[shape=diamond,label="[2] x"] 7 | 3[shape=box,label="[3] break;"] 8 | 4[shape=ellipse,label="[4] EXIT"] 9 | 0 -> 1 10 | 1 -> 2 [label="T"] 11 | 1 -> 4 12 | 2 -> 1 [label="B"] 13 | 2 -> 3 [label="T"] 14 | 3 -> 4 15 | } 16 | -------------------------------------------------------------------------------- /test/cfg/src/for: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | for (int i = 0; i < 5; i++) { 4 | System.out.println("hi"); 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/cfg/src/for-nested: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | for (int i = 0; i < 5; i++) { 4 | System.out.println("hi"); 5 | for (int j = 0; j < 5; j++) { 6 | System.out.println("hello"); 7 | } 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /test/cfg/src/for-no-condition: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m(String[] names) { 3 | for (int i = 0; ; i++) { 4 | System.out.println("hi"); 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/cfg/src/if-empty-false: -------------------------------------------------------------------------------- 1 | public class C { 2 | void emptyFalseBranch() { 3 | if (testEmptyFalse) { 4 | System.out.println("hi"); 5 | } else { 6 | } 7 | System.out.println("after"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/if-empty-true: -------------------------------------------------------------------------------- 1 | public class C { 2 | void emptyTrueBranch() { 3 | if (testEmptyTrue) { 4 | } else { 5 | System.out.println("hi"); 6 | } 7 | System.out.println("after"); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/return-exp: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | return m(); 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/cfg/src/return-no-exp: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | return; 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/cfg/src/switch-fallthrough-complex: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (fallThroughComplex) { 4 | case 1: 5 | if (x > 5) 6 | print(); // falls through 7 | else 8 | break; 9 | case 2: 10 | break; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /test/cfg/src/switch-fallthrough-no-default-no-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (fallThroughNoDefaultNoBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | case 3: 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/cfg/src/switch-fallthrough-no-default-with-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (fallThroughNoDefaultWithBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | case 3: 8 | break; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/switch-fallthrough-with-default-no-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (fallThroughWithDefaultNoBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | default: 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/cfg/src/switch-fallthrough-with-default-with-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (fallThroughWithDefaultWithBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | default: 8 | break; 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/switch-no-default-no-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (noDefaultNoBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/switch-no-default-with-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (noDefaultWithBreak) { 4 | case 1: 5 | break; 6 | case 2: 7 | break; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/cfg/src/switch-with-default-no-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (withDefaultNoBreak) { 4 | case 1: 5 | break; 6 | default: 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/switch-with-default-with-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | switch (withDefaultWithBreak) { 4 | case 1: 5 | break; 6 | default: 7 | break; 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-no-catch-no-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } catch (Exception e) { 6 | // empty 7 | } finally { 8 | // empty 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-no-catch-with-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } catch (Exception e) { 6 | // empty 7 | } finally { 8 | System.out.println("finally"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-only-catch: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } catch (Exception e) { 6 | System.err.println("catch"); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-only-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } finally { 6 | System.err.println("finally"); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-with-catch-no-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } catch (Exception e) { 6 | System.out.println("catch"); 7 | } finally { 8 | // empty 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-no-body-with-catch-with-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | // empty 5 | } catch (Exception e) { 6 | System.out.println("catch"); 7 | } finally { 8 | System.out.println("finally"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-no-catch-no-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.out.println("body"); 5 | } catch (Exception e) { 6 | // empty 7 | } finally { 8 | // empty 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-no-catch-with-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.out.println("body"); 5 | } catch (Exception e) { 6 | // empty 7 | } finally { 8 | System.out.println("finally"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-only-catch: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.err.println("body"); 5 | } catch (Exception e) { 6 | System.err.println("catch"); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-only-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.err.println("body"); 5 | } finally { 6 | System.err.println("finally"); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-with-catch-no-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.out.println("body"); 5 | } catch (Exception e) { 6 | System.out.println("catch"); 7 | } finally { 8 | // empty 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/try-with-body-with-catch-with-finally: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | try { 4 | System.out.println("body"); 5 | } catch (Exception e) { 6 | System.out.println("catch"); 7 | } finally { 8 | System.out.println("finally"); 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/cfg/src/while: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | while (true) { 4 | System.out.println("hi"); 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/cfg/src/while-conditional-break: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | while (true) { 4 | if (x) 5 | break; 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /test/codegen/array-as-map-key.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | m: map[string] of bool; 5 | a: array of string = {"a", "b"}; 6 | 7 | foreach (i: int; a[i]) 8 | m[a[i]] = true; 9 | -------------------------------------------------------------------------------- /test/codegen/boolean-outputs.boa: -------------------------------------------------------------------------------- 1 | b: output collection of bool; 2 | 3 | b << true; 4 | b << false; 5 | -------------------------------------------------------------------------------- /test/codegen/declare-same-var.boa: -------------------------------------------------------------------------------- 1 | o: output collection of int; 2 | a: array of int = {2}; 3 | 4 | foreach (i: int; a[i]) { 5 | f := function(j: int){ 6 | v := j; 7 | o << v; 8 | }; 9 | b := 2; 10 | v := b + a[i]; 11 | v = b + v; 12 | f(b); 13 | } 14 | 15 | 16 | foreach (i: int; a[i]) { 17 | v := a[i]; 18 | b := 3; 19 | o << v; 20 | } -------------------------------------------------------------------------------- /test/codegen/def.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | a: array of int; 4 | 5 | s: array of Statement; 6 | 7 | foreach (i: int; s[i]) 8 | o << 1; 9 | 10 | foreach (i: int; input.programming_languages[i]) 11 | o << 1; 12 | 13 | foreach (i: int; a[i]) 14 | o << a[i]; 15 | -------------------------------------------------------------------------------- /test/codegen/default-vals.boa: -------------------------------------------------------------------------------- 1 | o: output collection of string; 2 | 3 | s: string; 4 | i: int; 5 | b: bool; 6 | t: time; 7 | f: float; 8 | 9 | e: enum { A = "yes", B = "no" }; 10 | v: visitor; 11 | fun: function(x: int, y: int) : bool; 12 | tr: traversal; 13 | fp: fixp; 14 | 15 | o << s + ",hi"; 16 | -------------------------------------------------------------------------------- /test/codegen/div-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 14; 4 | b /= 2; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/enum-use.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | type e = enum { A = 1, B = 2, C = 3 }; 5 | mye: e; 6 | mye = e.A; 7 | mye2 := e.A; 8 | -------------------------------------------------------------------------------- /test/codegen/func-return-inside-visit.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | visit(input, visitor { 5 | before Statement -> { 6 | f := function() : bool { 7 | return true; 8 | }; 9 | } 10 | after Statement -> { 11 | g := function() : bool { 12 | return false; 13 | }; 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /test/codegen/function-as-arg.boa: -------------------------------------------------------------------------------- 1 | TEST: output collection of int; 2 | 3 | imax := function(a: array of int, cmp: function(l: int, r: int) : int) : int { 4 | v := a[0]; 5 | for (i := 1; i < len(a); i++) 6 | if (cmp(v, a[i]) < 0) 7 | v = a[i]; 8 | return v; 9 | }; 10 | 11 | TEST << imax({1, 2}, function(l: int, r: int) : int { return l - r; }); 12 | -------------------------------------------------------------------------------- /test/codegen/function-calls.boa: -------------------------------------------------------------------------------- 1 | # test using function results immediately 2 | o: output collection of string; 3 | 4 | m: map[string] of int; 5 | m["hi"] = 5; 6 | o << keys(m)[0]; 7 | -------------------------------------------------------------------------------- /test/codegen/issue249.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | i := 1; 4 | f := function(i: string) { 5 | s: string; 6 | s = i; 7 | o << 1; 8 | }; 9 | 10 | f("hi"); 11 | -------------------------------------------------------------------------------- /test/codegen/issue285.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | type Foo = enum { 3 | BAR = "BAR", 4 | BAZ = "BAZ" 5 | }; 6 | 7 | type Quux = { id: int, isa: Foo }; 8 | o << 1; 9 | -------------------------------------------------------------------------------- /test/codegen/issue87.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | values: array of int; 4 | keys: array of int; 5 | 6 | o << len(values); 7 | o << len(keys); 8 | -------------------------------------------------------------------------------- /test/codegen/join.boa: -------------------------------------------------------------------------------- 1 | o: output collection of string; 2 | 3 | strs := { 4 | "one", 5 | "two", 6 | "3" 7 | }; 8 | 9 | o << join(".", strs); 10 | o << join("blah", strs); 11 | 12 | stk: stack of string; 13 | foreach (i: int; strs[i]) 14 | push(stk, strs[i]); 15 | 16 | o << join(".", stk); 17 | o << join("blah", stk); 18 | -------------------------------------------------------------------------------- /test/codegen/local.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | f := function(i: int, j: int) : int { 4 | i = 0; 5 | return i + i; 6 | }; 7 | f2 := function(i: int) : int { 8 | i = 0; 9 | return f(i, i); 10 | }; 11 | 12 | g := function(i: int, j: int) { 13 | }; 14 | 15 | h := function() { 16 | }; 17 | 18 | o << f(5, 10); 19 | -------------------------------------------------------------------------------- /test/codegen/lshift-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 1; 4 | b <<= 2; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/map-int-index.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | m: map[int] of string; 5 | m[0] = "0"; 6 | 7 | m2: map[int] of string = { 0 : "0", 1 : "1" }; 8 | -------------------------------------------------------------------------------- /test/codegen/maps.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | # test declaring and using maps 5 | m: map[string] of int = { "1" : 1, "2" : 2 }; 6 | m["2"] = lookup(m, "3", 3); 7 | m[string(3)] = m["hi"]; # undefined index -> RTE, not static error 8 | clear(m); 9 | 10 | m2: map[string] of string; 11 | vals := values(m2); 12 | k := keys(m2); 13 | if (haskey(m2, "2")) 14 | remove(m2, "2"); 15 | -------------------------------------------------------------------------------- /test/codegen/minus-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | c := 2; 4 | b := 3; 5 | b -= 2 * c; 6 | a << b; 7 | -------------------------------------------------------------------------------- /test/codegen/mod-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 5; 4 | b %= 6; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/nested-func.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | f1 := function(i: int) : int { 4 | f2 := function(j: int) : int { 5 | return i + j; 6 | }; 7 | return f2(i); 8 | }; 9 | 10 | o << f1(3); 11 | -------------------------------------------------------------------------------- /test/codegen/no-weight.boa: -------------------------------------------------------------------------------- 1 | o: output bottom(5) of string weight int; 2 | o << "foo"; 3 | -------------------------------------------------------------------------------- /test/codegen/oneand-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 60; 4 | b &= 13; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/oneor-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 5; 4 | b |= 6; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/plus-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 3; 4 | b += 2; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/proto-as-mapkey.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | committers: map[string] of bool; 5 | 6 | foreach (i: int; def(input.code_repositories[i])) 7 | committers[input.code_repositories[i].url] = true; 8 | -------------------------------------------------------------------------------- /test/codegen/random.boa: -------------------------------------------------------------------------------- 1 | o: output top(5)[string] of int weight int; 2 | 3 | for (i := 1; i <= 5; i++) 4 | o[input.id] << nrand(1000) weight i; 5 | -------------------------------------------------------------------------------- /test/codegen/regex.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | if (match(`"foo"`, input.name)) 4 | o << 1; 5 | -------------------------------------------------------------------------------- /test/codegen/rshift-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 32; 4 | b >>= 2; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/same-var-names.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | if (input.id == "") { 5 | var := true; 6 | } else { 7 | var := false; 8 | } 9 | -------------------------------------------------------------------------------- /test/codegen/select-from-func-return.boa: -------------------------------------------------------------------------------- 1 | o: output collection of string; 2 | s: stack of Project; 3 | push(s, input); 4 | o << peek(s).id; 5 | -------------------------------------------------------------------------------- /test/codegen/stacks.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | # test declaring and using stacks 5 | s: stack of int; 6 | push(s, 3); 7 | push(s, 3); 8 | push(s, 4); 9 | i: int; 10 | i = peek(s); 11 | pop(s); 12 | clear(s); 13 | 14 | v: array of int; 15 | v = values(s); 16 | -------------------------------------------------------------------------------- /test/codegen/star-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 3; 4 | b *= 2; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/codegen/sum-double.boa: -------------------------------------------------------------------------------- 1 | o: output sum of float; 2 | 3 | o << 0.5; 4 | -------------------------------------------------------------------------------- /test/codegen/varswitch.boa: -------------------------------------------------------------------------------- 1 | expr: Expression; 2 | 3 | switch (expr.kind) { 4 | case ExpressionKind.METHODCALL: 5 | m := 3; 6 | break; 7 | default: 8 | break; 9 | } 10 | 11 | o: output sum of int; 12 | o << 1; 13 | -------------------------------------------------------------------------------- /test/codegen/while.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | m: map[string] of int; 4 | 5 | while (haskey(m, "foo")) 6 | o << 1; 7 | -------------------------------------------------------------------------------- /test/codegen/xor-equal.boa: -------------------------------------------------------------------------------- 1 | a: output collection of int; 2 | 3 | b := 5; 4 | b ^= 6; 5 | a << b; 6 | -------------------------------------------------------------------------------- /test/datagen/HTML/DocType.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /test/datagen/HTML/EmbeddedJavaScript.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

Assigning JavaScript Values

6 | 7 |

In JavaScript the = operator is used to assign values to variables.

8 | 9 |

10 | 11 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /test/datagen/HTML/EmbeddedPHP.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | Hello, today is . 4 | 5 | -------------------------------------------------------------------------------- /test/datagen/HTML/ExternalScript.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /test/datagen/HTML/FormTag.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | First name:
6 | Last name:
7 | 8 |
9 | 10 | -------------------------------------------------------------------------------- /test/datagen/HTML/HtmlParseTest.dtd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |

JavaScript in Body

6 | 7 |

A Paragraph.

8 | 9 | 10 | 11 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /test/datagen/HTML/PictureTag.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Flowers 8 | 9 | 10 | -------------------------------------------------------------------------------- /test/datagen/HTML/StyleTag.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 |

A heading

11 |

A paragraph.

12 | 13 | 14 | -------------------------------------------------------------------------------- /test/datagen/HTML/TextAreaTag.HTML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /test/datagen/PHP/ASSIGN_CONCATNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_CONCAT 7 | expressions { 8 | kind: VARACCESS 9 | variable: "a" 10 | dollar_sign: true 11 | } 12 | expressions { 13 | kind: LITERAL 14 | literal: "\"World!\"" 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /test/datagen/PHP/ASSIGN_CONCATNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/ASSIGN_POWNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_POW 7 | expressions { 8 | kind: VARACCESS 9 | variable: "a" 10 | dollar_sign: true 11 | } 12 | expressions { 13 | kind: LITERAL 14 | literal: "2" 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /test/datagen/PHP/ASSIGN_POWNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/ArrayAccessNode.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /test/datagen/PHP/ArrayCreationNode1.php: -------------------------------------------------------------------------------- 1 | "bar", 4 | "bar" => "foo", 5 | ); -------------------------------------------------------------------------------- /test/datagen/PHP/BackTickNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: BACKTICK 7 | expressions { 8 | kind: LITERAL 9 | literal: "ls -al" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /test/datagen/PHP/BackTickNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/ConstantDeclarationNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: VARDECL 7 | variable_decls { 8 | name: "x" 9 | modifiers { 10 | kind: FINAL 11 | } 12 | initializer { 13 | kind: LITERAL 14 | literal: "5" 15 | } 16 | } 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /test/datagen/PHP/ConstantDeclarationNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/EchoStatementNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: ECHO 5 | expressions { 6 | kind: VARACCESS 7 | variable: "x" 8 | dollar_sign: true 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /test/datagen/PHP/EchoStatementNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/ForEachStatementNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/FormalParamaterNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | methods { 4 | name: "myFunction" 5 | return_type { 6 | name: "" 7 | kind: OTHER 8 | } 9 | arguments { 10 | name: "formalParamater" 11 | } 12 | statements { 13 | kind: BLOCK 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /test/datagen/PHP/FormalParamaterNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/GotoNodes.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: GOTO 5 | expressions { 6 | kind: LITERAL 7 | literal: "here" 8 | } 9 | } 10 | statements { 11 | kind: LABEL 12 | expressions { 13 | kind: LITERAL 14 | literal: "here" 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/GotoNodes.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionIdentical.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: IDENTICAL 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionIdentical.php: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionNotIdentical.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: NOTIDENTICAL 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionNotIdentical.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionPower.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: OP_POW 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionPower.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionSpaceShip.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: OP_THREE_WAY_COMPARE 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionSpaceShip.php: -------------------------------------------------------------------------------- 1 | y; 3 | ?> -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringAnd.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: STRING_AND 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringAnd.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringOr.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: STRING_OR 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringOr.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringXor.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: STRING_XOR 7 | expressions { 8 | kind: LITERAL 9 | literal: "x" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "y" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InFixExpressionStringXor.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/InLineHtml.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: INLINE_HTML 5 | expressions { 6 | kind: LITERAL 7 | literal: "

this is inline html

" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /test/datagen/PHP/InLineHtml.php: -------------------------------------------------------------------------------- 1 | 2 |

this is inline html

3 | -------------------------------------------------------------------------------- /test/datagen/PHP/Include.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/MethodDeclarationNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/PreFixExpressionUnpack.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: METHODCALL 7 | method: "fn" 8 | method_args { 9 | kind: OP_UNPACK 10 | expressions { 11 | kind: VARACCESS 12 | variable: "array" 13 | dollar_sign: true 14 | } 15 | } 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /test/datagen/PHP/PreFixExpressionUnpack.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/QuoteNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/ReflectionVariable.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: REFLECTION 7 | computed_variable { 8 | kind: VARACCESS 9 | variable: "x" 10 | dollar_sign: true 11 | } 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /test/datagen/PHP/ReflectionVariable.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/StaticStatementNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: STATIC 5 | expressions { 6 | kind: VARACCESS 7 | variable: "x" 8 | dollar_sign: true 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /test/datagen/PHP/StaticStatementNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/TraitPrecedenceNodes.php: -------------------------------------------------------------------------------- 1 | getMessage(), "\n"; 6 | } finally { 7 | echo "First finally.\n"; 8 | } 9 | ?> -------------------------------------------------------------------------------- /test/datagen/PHP/UseStatementNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: USE_NAMESPACE 5 | names: "myNamespace" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/datagen/PHP/UseStatementNode.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/PHP/YieldFrom.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /test/datagen/XML/Attribute.boa: -------------------------------------------------------------------------------- 1 | elements { 2 | tag: "person" 3 | kind: XML_ELEMENT 4 | attributes { 5 | key: "gender" 6 | value: "female" 7 | } 8 | } -------------------------------------------------------------------------------- /test/datagen/XML/Attribute.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /test/datagen/XML/Namespace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Apples 6 | Bananas 7 | 8 | 9 | 10 | 11 | African Coffee Table 12 | 80 13 | 120 14 | 15 | 16 | -------------------------------------------------------------------------------- /test/datagen/XML/Note.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Tove 4 | Jani 5 | Reminder 6 | Don't forget me this weekend! 7 | -------------------------------------------------------------------------------- /test/datagen/XML/ProcessingInstructions.boa: -------------------------------------------------------------------------------- 1 | elements { 2 | tag: "emptyElement" 3 | kind: XML_ELEMENT 4 | } 5 | processing_instruction { 6 | key: "xml-stylesheet" 7 | value: "href=\"style.css\" type=\"text/css\"" 8 | } -------------------------------------------------------------------------------- /test/datagen/XML/ProcessingInstructions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /test/datagen/css/Media_Rule.boa: -------------------------------------------------------------------------------- 1 | tag: "" 2 | kind: STYLE_SHEET 3 | elements { 4 | tag: "" 5 | kind: MEDIA_RULE 6 | elements { 7 | tag: "body" 8 | kind: STYLE_RULE 9 | atributes { 10 | key: "background-color" 11 | value: "lightgreen" 12 | } 13 | } 14 | elements { 15 | tag: "" 16 | kind: MEDIA_QUERY 17 | data: "screen" 18 | } 19 | } -------------------------------------------------------------------------------- /test/datagen/css/Media_Rule.css: -------------------------------------------------------------------------------- 1 | @media screen { 2 | body { 3 | background-color: lightgreen; 4 | } 5 | } -------------------------------------------------------------------------------- /test/datagen/css/Style_Rule.boa: -------------------------------------------------------------------------------- 1 | tag: "" 2 | kind: STYLE_SHEET 3 | elements { 4 | tag: "ul.a" 5 | kind: STYLE_RULE 6 | atributes { 7 | key: "list-style-type" 8 | value: "circle" 9 | } 10 | } 11 | elements { 12 | tag: "ul.b" 13 | kind: STYLE_RULE 14 | atributes { 15 | key: "list-style-type" 16 | value: "disc" 17 | } 18 | } -------------------------------------------------------------------------------- /test/datagen/css/Style_Rule.css: -------------------------------------------------------------------------------- 1 | ul.a {list-style-type: circle;} 2 | ul.b {list-style-type: disc;} -------------------------------------------------------------------------------- /test/datagen/css/Style_Rule1.css: -------------------------------------------------------------------------------- 1 | div.fixed { 2 | position: fixed; 3 | bottom: 0; 4 | right: 0; 5 | width: 300px; 6 | border: 3px solid #73AD21; 7 | } 8 | -------------------------------------------------------------------------------- /test/datagen/css/Style_Rule2.css: -------------------------------------------------------------------------------- 1 | img { 2 | border: 1px solid #ddd; 3 | border-radius: 4px; 4 | padding: 5px; 5 | width: 150px; 6 | } -------------------------------------------------------------------------------- /test/datagen/css/Style_Rule3.css: -------------------------------------------------------------------------------- 1 | .button { 2 | background-color: #4CAF50; /* Green */ 3 | border: none; 4 | color: white; 5 | padding: 15px 32px; 6 | text-align: center; 7 | text-decoration: none; 8 | display: inline-block; 9 | font-size: 16px; 10 | } -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/annot-names.boa.txt: -------------------------------------------------------------------------------- 1 | AnnotUse[FunctionalInterface] = 3 2 | AnnotUse[Override] = 11 3 | AnnotUse[Retention] = 1 4 | AnnotUse[SafeVarargs] = 1 5 | AnnotUse[SuppressWarnings] = 1 6 | AnnotUse[Target] = 2 7 | AnnotUse[ThreadSafe] = 1 8 | AnnotUse[ToDo] = 17 9 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/bug-fix.boa.txt: -------------------------------------------------------------------------------- 1 | AddedNullCheck[] = 1 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catAp1.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = Java, 1.0 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catAp3.boa.txt: -------------------------------------------------------------------------------- 1 | counts[2018] = 1 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catAp4.boa.txt: -------------------------------------------------------------------------------- 1 | counts[2018] = 1 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp1.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 53 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp13.boa.txt: -------------------------------------------------------------------------------- 1 | counts[2018] = 1 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp14.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 6.018867924528302 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp15.boa.txt: -------------------------------------------------------------------------------- 1 | counts[140492550] = 6.018867924528302 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp17.boa.txt: -------------------------------------------------------------------------------- 1 | counts[2018] = 53 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp18.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 4.3584905660377355 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp3.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 2 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/catBp4.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 1 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/counts2.boa.txt: -------------------------------------------------------------------------------- 1 | AstNodes[] = 11639 2 | Files[] = 108 3 | JLS2Files[] = 25 4 | JLS3Files[] = 50 5 | JLS4Files[] = 11 6 | JLS8Files[] = 20 7 | JavaErrorFiles[] = 1 8 | JavaFiles[] = 107 9 | JavaSnapshots[] = 177 10 | NonEmptyJavaProjects[] = 1 11 | NonEmptyProjects[] = 1 12 | Projects[] = 1 13 | Repositories[] = 1 14 | Revisions[] = 53 15 | Snapshots[] = 183 16 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/dead-code.boa.txt: -------------------------------------------------------------------------------- 1 | DEAD[] = { 2 | "change": "UNKNOWN", 3 | "kind": "SOURCE_JAVA_JLS4", 4 | "name": "src/JLS4/UnsafeVarargsDemo/UnsafeVarargsDemo.java", 5 | "key": 142653, 6 | "ast": true 7 | } - unsafe, 1.0 8 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/enums.boa.txt: -------------------------------------------------------------------------------- 1 | USES[https://github.com/boalang/test-datagen][src/JLS3/TEDemo/v1/TEDemo.java][1531520725000000] = 1 2 | USES[https://github.com/boalang/test-datagen][src/JLS3/TEDemo/v2/TEDemo.java][1531520725000000] = 1 3 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/fields.boa.txt: -------------------------------------------------------------------------------- 1 | MeanInstanceFields[] = 0.0 2 | MeanPrivateFields[] = 0.0 3 | MeanStaticFields[] = 0.0 4 | NoFieldClasses[] = 62 5 | TotalClasses[] = 77 6 | TotalInstanceFields[] = 21 7 | TotalStaticFields[] = 5 8 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/generics-wildcard-extends.boa.txt: -------------------------------------------------------------------------------- 1 | USES[https://github.com/boalang/test-datagen][src/JLS3/GenDemo/v2/GenDemo.java][1534438125000000] = 1 2 | USES[https://github.com/boalang/test-datagen][src/JLS3/GenDemo/v2/GenDemo2.java][1534438125000000] = 1 3 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/generics-wildcard-super.boa.txt: -------------------------------------------------------------------------------- 1 | USES[https://github.com/boalang/test-datagen][src/JLS3/GenDemo/v2/GenDemo.java][1534438125000000] = 1 2 | USES[https://github.com/boalang/test-datagen][src/JLS3/GenDemo/v2/GenDemo2.java][1534438125000000] = 1 3 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/java-count.boa.txt: -------------------------------------------------------------------------------- 1 | counts[] = 62 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/len.boa.txt: -------------------------------------------------------------------------------- 1 | len[140492550] = 11745 2 | -------------------------------------------------------------------------------- /test/datagen/expected/test/known-good/multicatch.boa.txt: -------------------------------------------------------------------------------- 1 | USES[https://github.com/boalang/test-datagen][src/JLS4/CopyToDatabaseOrFile/v2/CopyToDatabaseOrFile.java][1531520725000000] = 1 2 | USES[https://github.com/boalang/test-datagen][src/JLS4/CopyToDatabaseOrFile/v2/CopyToDatabaseOrFile.java][1531546584000000] = 1 3 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/AnonymousClassDeclaration.java: -------------------------------------------------------------------------------- 1 | AnonymousClass anonymous = new Anonymous() { }; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ArrayAccess.java: -------------------------------------------------------------------------------- 1 | int[] x = new int[3]; 2 | x[2] = 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ArrayCreation.java: -------------------------------------------------------------------------------- 1 | int[] x = new int[3]; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ArrayInitializer.java: -------------------------------------------------------------------------------- 1 | int[] x = {0,1,2,3}; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/Assert.java: -------------------------------------------------------------------------------- 1 | assert list != null && list.size() > 0 : "list variable is null or empty"; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/Assignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x = 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/BitAndAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x &= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/BitOrAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x |= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/BitXorAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x ^= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/BooleanLiteral.java: -------------------------------------------------------------------------------- 1 | boolean x = true; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/CastExpression.java: -------------------------------------------------------------------------------- 1 | String x = (String ) 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/CharacterLiteral.java: -------------------------------------------------------------------------------- 1 | char x = 'x'; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ClassInstance.java: -------------------------------------------------------------------------------- 1 | Person x = new Person(name); -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ConditionalExpression.java: -------------------------------------------------------------------------------- 1 | return (a > b) ? a : b; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DivideAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x /= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatement.java: -------------------------------------------------------------------------------- 1 | do{ 2 | 3 | }while(true) -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "DO", 3 | "statements": [ 4 | { 5 | "kind": "BLOCK" 6 | } 7 | ], 8 | "conditions": [ 9 | { 10 | "kind": "LITERAL", 11 | "literal": "true" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatementWithBreak.java: -------------------------------------------------------------------------------- 1 | do{ 2 | break; 3 | }while(true) -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatementWithBreak.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "DO", 3 | "statements": [ 4 | { 5 | "kind": "BLOCK", 6 | "statements": [ 7 | { 8 | "kind": "BREAK" 9 | } 10 | ] 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "kind": "LITERAL", 16 | "literal": "true" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatementWithContinue.java: -------------------------------------------------------------------------------- 1 | do{ 2 | continue; 3 | }while(true) -------------------------------------------------------------------------------- /test/datagen/java-wrapped/DoStatementWithContinue.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "DO", 3 | "statements": [ 4 | { 5 | "kind": "BLOCK", 6 | "statements": [ 7 | { 8 | "kind": "CONTINUE" 9 | } 10 | ] 11 | } 12 | ], 13 | "conditions": [ 14 | { 15 | "kind": "LITERAL", 16 | "literal": "true" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/EmptyStatement.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/java-wrapped/EmptyStatement.java -------------------------------------------------------------------------------- /test/datagen/java-wrapped/EmptyStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EMPTY" 3 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/EnhancedForStatement.java: -------------------------------------------------------------------------------- 1 | for(int x : intList){} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ForStatement.java: -------------------------------------------------------------------------------- 1 | for (int i = 0; i < x ; i++){} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/IfStatement.java: -------------------------------------------------------------------------------- 1 | if (true) {} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/IfStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "IF", 3 | "statements": [ 4 | { 5 | "kind": "BLOCK" 6 | } 7 | ], 8 | "conditions": [ 9 | { 10 | "kind": "LITERAL", 11 | "literal": "true" 12 | } 13 | ] 14 | }, 15 | { 16 | "kind": "EMPTY" 17 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionAnd.java: -------------------------------------------------------------------------------- 1 | z = x&y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionDivide.java: -------------------------------------------------------------------------------- 1 | z = x/y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionEquals.java: -------------------------------------------------------------------------------- 1 | z = x == y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionGreaterEqual.java: -------------------------------------------------------------------------------- 1 | z = x >= y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionGreaterThen.java: -------------------------------------------------------------------------------- 1 | z = x > y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionLeftShift.java: -------------------------------------------------------------------------------- 1 | z = x << y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionLessEqual.java: -------------------------------------------------------------------------------- 1 | z = x <= y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionLessThen.java: -------------------------------------------------------------------------------- 1 | z = x < y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionLogicalAnd.java: -------------------------------------------------------------------------------- 1 | z = x&&y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionLogicalOr.java: -------------------------------------------------------------------------------- 1 | z = x||y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionMinus.java: -------------------------------------------------------------------------------- 1 | z = x - y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionNotEqual.java: -------------------------------------------------------------------------------- 1 | z = x != y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionOr.java: -------------------------------------------------------------------------------- 1 | z = x | y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionPlus.java: -------------------------------------------------------------------------------- 1 | z = x + y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionRemainder.java: -------------------------------------------------------------------------------- 1 | z = x % y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionRightShiftSigned.java: -------------------------------------------------------------------------------- 1 | z = x >> y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionRightShiftUnsigned.java: -------------------------------------------------------------------------------- 1 | z = x >>> y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionTimes.java: -------------------------------------------------------------------------------- 1 | z = x * y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InfixExpressionXor.java: -------------------------------------------------------------------------------- 1 | z = x ^ y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/InstanceOfExpression.java: -------------------------------------------------------------------------------- 1 | z = x instanceof y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/LabeledStatement.java: -------------------------------------------------------------------------------- 1 | Label: -------------------------------------------------------------------------------- /test/datagen/java-wrapped/LabeledStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "LABEL", 3 | "statements": [ 4 | { 5 | "kind": "EMPTY" 6 | } 7 | ], 8 | "expressions": [ 9 | { 10 | "kind": "LITERAL", 11 | "literal": "Label" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/LeftShiftAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x <<= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/MethodInvocation.java: -------------------------------------------------------------------------------- 1 | x.myMethod(); -------------------------------------------------------------------------------- /test/datagen/java-wrapped/MethodInvocation.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "METHODCALL", 6 | "expressions": [ 7 | { 8 | "kind": "VARACCESS", 9 | "variable": "x" 10 | } 11 | ], 12 | "method": "myMethod" 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/MinusAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x -= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ModAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x %= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ParanthesizedExpression.java: -------------------------------------------------------------------------------- 1 | z = (x+y); -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PlusAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x += 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PostFixDecExpression.java: -------------------------------------------------------------------------------- 1 | i--; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PostFixDecExpression.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "OP_DEC", 6 | "expressions": [ 7 | { 8 | "kind": "VARACCESS", 9 | "variable": "i" 10 | } 11 | ], 12 | "is_postfix": true 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PostFixIncExpression.java: -------------------------------------------------------------------------------- 1 | i++; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PostFixIncExpression.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "OP_INC", 6 | "expressions": [ 7 | { 8 | "kind": "VARACCESS", 9 | "variable": "i" 10 | } 11 | ], 12 | "is_postfix": true 13 | } 14 | ] 15 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixComplimentExpression.java: -------------------------------------------------------------------------------- 1 | y = ~x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixDecExpression.java: -------------------------------------------------------------------------------- 1 | --x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixDecExpression.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "OP_DEC", 6 | "expressions": [ 7 | { 8 | "kind": "VARACCESS", 9 | "variable": "x" 10 | } 11 | ] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixIncExpression.java: -------------------------------------------------------------------------------- 1 | ++x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixIncExpression.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "OP_INC", 6 | "expressions": [ 7 | { 8 | "kind": "VARACCESS", 9 | "variable": "x" 10 | } 11 | ] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixLogicalNotExpression.java: -------------------------------------------------------------------------------- 1 | y = !x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixPlusExpression.java: -------------------------------------------------------------------------------- 1 | y = +x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/PreFixSubExpression.java: -------------------------------------------------------------------------------- 1 | y = -x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/QualifiedName.java: -------------------------------------------------------------------------------- 1 | x = MyClass.x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ReturnNull.java: -------------------------------------------------------------------------------- 1 | return null; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ReturnNull.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "RETURN", 3 | "expressions": [ 4 | { 5 | "kind": "LITERAL", 6 | "literal": "null" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ReturnNumberLiteral.java: -------------------------------------------------------------------------------- 1 | return 4; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ReturnNumberLiteral.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "RETURN", 3 | "expressions": [ 4 | { 5 | "kind": "LITERAL", 6 | "literal": "4" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/RightShiftSignedAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x >>= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/RightShiftUnsignedAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x >>>= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/StringLiteral.java: -------------------------------------------------------------------------------- 1 | x = "Hello World"; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SuperConstructorInvocation.java: -------------------------------------------------------------------------------- 1 | super(); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SuperConstructorInvocation.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "METHODCALL", 6 | "method": "super" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SuperFieldAccess.java: -------------------------------------------------------------------------------- 1 | super.x = y; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SuperMethodInvocation.java: -------------------------------------------------------------------------------- 1 | super.method(); -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SuperMethodInvocation.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "EXPRESSION", 3 | "expressions": [ 4 | { 5 | "kind": "METHODCALL", 6 | "method": "super.method" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SwitchCase.java: -------------------------------------------------------------------------------- 1 | switch(x){ 2 | case 1: 3 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SwitchStatement.java: -------------------------------------------------------------------------------- 1 | switch(x){} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SwitchStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "SWITCH", 3 | "expressions": [ 4 | { 5 | "kind": "VARACCESS", 6 | "variable": "x" 7 | } 8 | ] 9 | }, 10 | { 11 | "kind": "EMPTY" 12 | } 13 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SynchronizedStatement.java: -------------------------------------------------------------------------------- 1 | synchronized (y) {} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/SynchronizedStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "SYNCHRONIZED", 3 | "expressions": [ 4 | { 5 | "kind": "VARACCESS", 6 | "variable": "y" 7 | } 8 | ] 9 | }, 10 | { 11 | "kind": "EMPTY" 12 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ThisStatement.java: -------------------------------------------------------------------------------- 1 | y = this.x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ThrowStatement.java: -------------------------------------------------------------------------------- 1 | throw new RuntimeException(); -------------------------------------------------------------------------------- /test/datagen/java-wrapped/ThrowStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "THROW", 3 | "expressions": [ 4 | { 5 | "kind": "NEW", 6 | "new_type": { 7 | "name": "RuntimeException", 8 | "kind": "CLASS" 9 | } 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/TimesAssignment.java: -------------------------------------------------------------------------------- 1 | int x; 2 | x *= 5; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/TryStatement.java: -------------------------------------------------------------------------------- 1 | try { 2 | } catch (ArithmeticException e){ 3 | return; 4 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/TypeDeclarationStatement.java: -------------------------------------------------------------------------------- 1 | class x{} -------------------------------------------------------------------------------- /test/datagen/java-wrapped/TypeDeclarationStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "TYPEDECL", 3 | "type_declaration": { 4 | "name": "x", 5 | "kind": "CLASS", 6 | "fully_qualified_name": "" 7 | } 8 | }, 9 | { 10 | "kind": "EMPTY" 11 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/TypeLiteral.java: -------------------------------------------------------------------------------- 1 | x = String.class; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/VariableDeclarationStatement.java: -------------------------------------------------------------------------------- 1 | int x; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/WhileStatement.java: -------------------------------------------------------------------------------- 1 | while(true){}; -------------------------------------------------------------------------------- /test/datagen/java-wrapped/WhileStatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "kind": "WHILE", 3 | "statements": [ 4 | { 5 | "kind": "BLOCK" 6 | } 7 | ], 8 | "conditions": [ 9 | { 10 | "kind": "LITERAL", 11 | "literal": "true" 12 | } 13 | ] 14 | }, 15 | { 16 | "kind": "EMPTY" 17 | } -------------------------------------------------------------------------------- /test/datagen/java-wrapped/inst-meth-ref.java: -------------------------------------------------------------------------------- 1 | m(String::compareToIgnoreCase); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-noarg.java: -------------------------------------------------------------------------------- 1 | int x = () -> m(); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-noparen.java: -------------------------------------------------------------------------------- 1 | y += x -> x + x; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-noret.java: -------------------------------------------------------------------------------- 1 | MathOperation division = (int a, int b) -> a / b; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-notype.java: -------------------------------------------------------------------------------- 1 | MathOperation subtraction = (a, b) -> a - b; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-ret.java: -------------------------------------------------------------------------------- 1 | MathOperation multiplication = (int a, int b) -> { return a * b; } 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda-withtype.java: -------------------------------------------------------------------------------- 1 | MathOperation add = (int a, int b) -> a + b; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda.java: -------------------------------------------------------------------------------- 1 | MathOperation division = (int a, int b) -> a / b; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/lambda2.java: -------------------------------------------------------------------------------- 1 | x += (int x) -> x + y; 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/new-meth-ref.java: -------------------------------------------------------------------------------- 1 | m(Item::new); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/obj-meth-ref.java: -------------------------------------------------------------------------------- 1 | m(o::compare); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/static-meth-ref.java: -------------------------------------------------------------------------------- 1 | m(Person::compareByAge); 2 | -------------------------------------------------------------------------------- /test/datagen/java-wrapped/super-meth-ref.java: -------------------------------------------------------------------------------- 1 | m(super::sayHello); 2 | -------------------------------------------------------------------------------- /test/datagen/java/AnnotationTypeDeclaration.java: -------------------------------------------------------------------------------- 1 | @interface ClassPreamble {} -------------------------------------------------------------------------------- /test/datagen/java/AnnotationTypeDeclaration.json: -------------------------------------------------------------------------------- 1 | { 2 | "namespaces": [ 3 | { 4 | "name": "", 5 | "declarations": [ 6 | { 7 | "name": "ClassPreamble", 8 | "kind": "ANNOTATION", 9 | "fully_qualified_name": "ClassPreamble" 10 | } 11 | ] 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /test/datagen/java/AnnotationTypeMemberDeclaration.java: -------------------------------------------------------------------------------- 1 | @interface ClassPreamble { 2 | String author(); 3 | } 4 | -------------------------------------------------------------------------------- /test/datagen/java/EnumDeclaration.java: -------------------------------------------------------------------------------- 1 | public enum myEnum { 2 | ONE = "one", 3 | TWO = "two", 4 | }; -------------------------------------------------------------------------------- /test/datagen/java/FieldDeclaration.java: -------------------------------------------------------------------------------- 1 | public class FieldDeclaration{ 2 | int x; 3 | } -------------------------------------------------------------------------------- /test/datagen/java/Import.java: -------------------------------------------------------------------------------- 1 | import boa.types.Ast.*; 2 | import boa.types.Ast.Type; 3 | import static boa.datagen.util.JavaASTUtil.getFullyQualifiedName; 4 | 5 | public class Import{} -------------------------------------------------------------------------------- /test/datagen/java/JLS2/AssertDemo/v1/AssertDemo.java: -------------------------------------------------------------------------------- 1 | public class AssertDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | int x = -1; 6 | assert x >= 0; 7 | } 8 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS2/AssertDemo/v2/AssertDemo.java: -------------------------------------------------------------------------------- 1 | public class AssertDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | int x = -1; 6 | assert x >= 0: "x < 0"; 7 | } 8 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS2/Basic.java: -------------------------------------------------------------------------------- 1 | class Basic { 2 | public static void main(String[] args) { 3 | System.out.println("Hello World!"); 4 | } 5 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v1/AnnDemo.java: -------------------------------------------------------------------------------- 1 | public class AnnDemo 2 | { 3 | @ThreadSafe 4 | public static void main(String[] args) 5 | { 6 | } 7 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v1/ThreadSafe.java: -------------------------------------------------------------------------------- 1 | public @interface ThreadSafe 2 | { 3 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v2/AnnDemo.java: -------------------------------------------------------------------------------- 1 | public class AnnDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | String[] cities = { "New York", "Melbourne", "Beijing", "Moscow", 6 | "Paris", "London" }; 7 | sort(cities); 8 | } 9 | 10 | @ToDo(id=1000, finishDate="10/10/2013", coder="John Doe") 11 | static void sort(Object[] objects) 12 | { 13 | } 14 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v2/ToDo.java: -------------------------------------------------------------------------------- 1 | public @interface ToDo 2 | { 3 | int id(); 4 | String finishDate(); 5 | String coder() default "n/a"; 6 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v3/ToDo.java: -------------------------------------------------------------------------------- 1 | public @interface ToDo 2 | { 3 | String value(); 4 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v4/ToDo.java: -------------------------------------------------------------------------------- 1 | public @interface ToDo 2 | { 3 | String value(); 4 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnDemo/v5/ToDo.java: -------------------------------------------------------------------------------- 1 | import java.lang.annotation.ElementType; 2 | import java.lang.annotation.Target; 3 | 4 | @Target({ElementType.METHOD}) 5 | public @interface ToDo 6 | { 7 | String value(); 8 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/AnnProcDemo/ToDo.java: -------------------------------------------------------------------------------- 1 | import java.lang.annotation.ElementType; 2 | import java.lang.annotation.Retention; 3 | import java.lang.annotation.RetentionPolicy; 4 | import java.lang.annotation.Target; 5 | 6 | @Target({ElementType.METHOD}) 7 | @Retention(RetentionPolicy.RUNTIME) 8 | public @interface ToDo 9 | { 10 | String value(); 11 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS3/StaticImportsDemo/v2/foo/Light.java: -------------------------------------------------------------------------------- 1 | package foo; 2 | 3 | import static foo.Switchable.*; 4 | 5 | public class Light 6 | { 7 | private boolean state = OFF; 8 | 9 | public void printState() 10 | { 11 | System.out.printf("state = %s%n", (state == OFF) ? "OFF" : "ON"); 12 | } 13 | 14 | public void toggle() 15 | { 16 | state = (state == OFF) ? ON : OFF; 17 | } 18 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS4/BoxDemo/BoxDemo.java: -------------------------------------------------------------------------------- 1 | public class BoxDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | new Box("Aggies"); 6 | Box box = new Box<>("Aggies"); 7 | } 8 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS4/UndLitDemo/UndLitDemo.java: -------------------------------------------------------------------------------- 1 | public class UndLitDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | long creditCardNumber = 1234_5678_9012_3456L; 6 | double PI = 3.141_592_654; 7 | short s = 12__345; 8 | System.out.println(creditCardNumber); 9 | System.out.println(PI); 10 | System.out.println(s); 11 | } 12 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/LambdaDemo/v1/LambdaDemo.java: -------------------------------------------------------------------------------- 1 | public class LambdaDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | new Thread(() -> System.out.println("Hello")).start(); 6 | } 7 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/LambdaDemo/v5/LambdaDemo.java: -------------------------------------------------------------------------------- 1 | public class LambdaDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | int limit = 10; 6 | Runnable r = () -> { 7 | int limit = 5; 8 | for (int i = 0; i < limit; i++) 9 | System.out.println(i); 10 | }; 11 | } 12 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/LambdaDemo/v6/LambdaDemo.java: -------------------------------------------------------------------------------- 1 | public class LambdaDemo 2 | { 3 | public static void main(String[] args) 4 | { 5 | int limit = 10; 6 | Runnable r = () -> { 7 | limit = 5; 8 | for (int i = 0; i < limit; i++) 9 | System.out.println(i); 10 | }; 11 | } 12 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/MRDemo/v4/MRDemo.java: -------------------------------------------------------------------------------- 1 | import java.util.function.Supplier; 2 | 3 | public class MRDemo 4 | { 5 | public static void main(String[] args) 6 | { 7 | Supplier supplier = MRDemo::new; 8 | System.out.println(supplier.get()); 9 | } 10 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/RADemo/Account.java: -------------------------------------------------------------------------------- 1 | @ToDo("Add Javadoc") 2 | @ToDo("Add constructor") 3 | @ToDo("Add deposit() method") 4 | @ToDo("Add withdrawal() Method") 5 | public class Account 6 | { 7 | } -------------------------------------------------------------------------------- /test/datagen/java/JLS8/SMDemo/Drawable.java: -------------------------------------------------------------------------------- 1 | public interface Drawable 2 | { 3 | public void draw(int color); 4 | 5 | public static int rgb(int r, int g, int b) 6 | { 7 | return r << 16 | g << 8 | b; 8 | } 9 | } -------------------------------------------------------------------------------- /test/datagen/java/MarkerAnnotation.java: -------------------------------------------------------------------------------- 1 | @MyAnnotation 2 | public class MarkerAnnotation { 3 | } -------------------------------------------------------------------------------- /test/datagen/java/MethodDeclaration.java: -------------------------------------------------------------------------------- 1 | public class MethodDeclaration{ 2 | public void method(){ 3 | } 4 | } -------------------------------------------------------------------------------- /test/datagen/java/MethodDeclaration2.java: -------------------------------------------------------------------------------- 1 | public class MethodDeclaration{ 2 | public int method(int x, int y){ 3 | return x+y; 4 | } 5 | } -------------------------------------------------------------------------------- /test/datagen/java/SingleMemberAnnotation.java: -------------------------------------------------------------------------------- 1 | public class SingleMemberAnnotation{ 2 | 3 | @MyAnnotation(101) 4 | public static void myMethod() { 5 | } 6 | } -------------------------------------------------------------------------------- /test/datagen/java/default-method.java: -------------------------------------------------------------------------------- 1 | interface I { 2 | default String notRequired() {} 3 | } 4 | -------------------------------------------------------------------------------- /test/datagen/java/rcv-param-inner.java: -------------------------------------------------------------------------------- 1 | class t { 2 | class inner { 3 | void m(t inner.this) {} 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /test/datagen/java/rcv-param.java: -------------------------------------------------------------------------------- 1 | class t { 2 | void m(Test this) {} 3 | } 4 | -------------------------------------------------------------------------------- /test/datagen/java/repeating-annot.java: -------------------------------------------------------------------------------- 1 | @Annot(1) @Annot(2) class C { 2 | } 3 | -------------------------------------------------------------------------------- /test/datagen/javascript/ArrayLiteralNode.js: -------------------------------------------------------------------------------- 1 | var cars = ["Saab", "Volvo", "BMW"]; -------------------------------------------------------------------------------- /test/datagen/javascript/AssignAddNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_ADD 7 | expressions { 8 | kind: VARACCESS 9 | variable: "text" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/AssignAddNode.js: -------------------------------------------------------------------------------- 1 | text += i; -------------------------------------------------------------------------------- /test/datagen/javascript/AssignBitAndNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_BITAND 7 | expressions { 8 | kind: VARACCESS 9 | variable: "text" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/AssignBitAndNode.js: -------------------------------------------------------------------------------- 1 | text &= i; -------------------------------------------------------------------------------- /test/datagen/javascript/AssignDecNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_SUB 7 | expressions { 8 | kind: VARACCESS 9 | variable: "text" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/AssignDecNode.js: -------------------------------------------------------------------------------- 1 | text -= i; -------------------------------------------------------------------------------- /test/datagen/javascript/AssignMultNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN_MULT 7 | expressions { 8 | kind: VARACCESS 9 | variable: "text" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/AssignMultNode.js: -------------------------------------------------------------------------------- 1 | text *= i; -------------------------------------------------------------------------------- /test/datagen/javascript/AssignNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ASSIGN 7 | expressions { 8 | kind: VARACCESS 9 | variable: "text" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/AssignNode.js: -------------------------------------------------------------------------------- 1 | text = i; -------------------------------------------------------------------------------- /test/datagen/javascript/ContinueStatementNode.js: -------------------------------------------------------------------------------- 1 | for (i = 0; i < 5; i++) { 2 | continue; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/DebuggerKeyWordLiteralNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: DEBUGGER 5 | } 6 | } -------------------------------------------------------------------------------- /test/datagen/javascript/DebuggerKeyWordLiteralNode.js: -------------------------------------------------------------------------------- 1 | debugger; -------------------------------------------------------------------------------- /test/datagen/javascript/DoLoopNode.js: -------------------------------------------------------------------------------- 1 | do { 2 | text += "The number is " + i; 3 | i++; 4 | } 5 | while (i < 5); -------------------------------------------------------------------------------- /test/datagen/javascript/ElementGetNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: ARRAYACCESS 7 | expressions { 8 | kind: VARACCESS 9 | variable: "i" 10 | } 11 | expressions { 12 | kind: LITERAL 13 | literal: "3.0" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ElementGetNode.js: -------------------------------------------------------------------------------- 1 | i[3]; -------------------------------------------------------------------------------- /test/datagen/javascript/ForEachNode.js: -------------------------------------------------------------------------------- 1 | for each (var x in person) { 2 | text += person[x]; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ForInLoopNode.js: -------------------------------------------------------------------------------- 1 | for (var x in person) { 2 | text += person[x]; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ForLoopNode.js: -------------------------------------------------------------------------------- 1 | var text = ""; 2 | var i; 3 | for (i = 0; i < 5; i++) { 4 | text += "The number is " + i + "
"; 5 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ForLoopWithBreakStatementNode.js: -------------------------------------------------------------------------------- 1 | var text = ""; 2 | var i; 3 | for (i = 0; i < 5; i++) { 4 | text += "The number is " + i + "
"; 5 | break; 6 | } -------------------------------------------------------------------------------- /test/datagen/javascript/FunctionCallWtihFunctionNodeAsArgument.js: -------------------------------------------------------------------------------- 1 | var p = new ParallelArray([0, 1, 2, 3, 4]); 2 | var m = p.map(function (v) { 3 | return v + 1; 4 | }); -------------------------------------------------------------------------------- /test/datagen/javascript/FunctionNode.js: -------------------------------------------------------------------------------- 1 | function myFunction() { 2 | document.getElementById("demo").innerHTML = "Hello World!"; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/FunctionNode2.js: -------------------------------------------------------------------------------- 1 | function add(y, z) { 2 | return y + z; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/FunctionNode3.js: -------------------------------------------------------------------------------- 1 | var x = function(y,z){ 2 | return y + z; 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionIN.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: IN 7 | expressions { 8 | kind: VARACCESS 9 | variable: "j" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionIN.js: -------------------------------------------------------------------------------- 1 | j in i; -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionSHEQ.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: SHEQ 7 | expressions { 8 | kind: VARACCESS 9 | variable: "j" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionSHEQ.js: -------------------------------------------------------------------------------- 1 | j===i; -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionSHNEQ.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: SHNEQ 7 | expressions { 8 | kind: VARACCESS 9 | variable: "j" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionSHNEQ.js: -------------------------------------------------------------------------------- 1 | j!==i; -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionTYPECOMPARE.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: TYPECOMPARE 7 | expressions { 8 | kind: VARACCESS 9 | variable: "j" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "i" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/InFixExpressionTYPECOMPARE.js: -------------------------------------------------------------------------------- 1 | j instanceof i; -------------------------------------------------------------------------------- /test/datagen/javascript/LabeledStatementNode.js: -------------------------------------------------------------------------------- 1 | loop1: 2 | for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1" 3 | loop2: 4 | for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2" 5 | if (i === 1 && j === 1) { 6 | continue loop1; 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /test/datagen/javascript/LabeledStatementNode2.js: -------------------------------------------------------------------------------- 1 | loop1: 2 | var x; -------------------------------------------------------------------------------- /test/datagen/javascript/LetNode.js: -------------------------------------------------------------------------------- 1 | let (x,y,z){}; 2 | -------------------------------------------------------------------------------- /test/datagen/javascript/NewExpressionNode.js: -------------------------------------------------------------------------------- 1 | new Car('Eagle', 'Talon TSi', 1993); -------------------------------------------------------------------------------- /test/datagen/javascript/ObjectLiteralNode.js: -------------------------------------------------------------------------------- 1 | var myObject = { 2 | sProp: 'some string value', 3 | numProp: 2, 4 | bProp: false, 5 | property: function ([parameters]) {}, 6 | get property() {}, 7 | set property(value) {}, 8 | property([parameters]) {} 9 | }; -------------------------------------------------------------------------------- /test/datagen/javascript/ObjectLiteralNode2.js: -------------------------------------------------------------------------------- 1 | var Swapper = { 2 | images: ["smile.gif", "grim.gif", "frown.gif", "bomb.gif"], 3 | pos: { 4 | x: 40, 5 | y: 300 6 | }, 7 | onSwap: function() { 8 | } 9 | }; -------------------------------------------------------------------------------- /test/datagen/javascript/ParenthesizedExpression.js: -------------------------------------------------------------------------------- 1 | (x+y) * x; -------------------------------------------------------------------------------- /test/datagen/javascript/PropertyGetNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: VARACCESS 7 | expressions { 8 | kind: VARACCESS 9 | variable: "Employee" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "name" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/PropertyGetNode.js: -------------------------------------------------------------------------------- 1 | Employee.name; -------------------------------------------------------------------------------- /test/datagen/javascript/RegExpLiteral.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: REGEXPLITERAL 7 | literal: "ab+c" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /test/datagen/javascript/RegExpLiteral.js: -------------------------------------------------------------------------------- 1 | /ab+c/; -------------------------------------------------------------------------------- /test/datagen/javascript/SwitchStatementNode.js: -------------------------------------------------------------------------------- 1 | switch (expr) { 2 | case 'Oranges': 3 | console.log('Oranges are $0.59 a pound.'); 4 | break; 5 | case 'Mangoes': 6 | case 'Papayas': 7 | console.log('Mangoes and papayas are $2.79 a pound.'); 8 | break; 9 | default: 10 | console.log('Sorry, we are out of ' + expr + '.'); 11 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ThisKeyWordLiteralNode.js: -------------------------------------------------------------------------------- 1 | console.log(this === window); // true 2 | this.b = "MDN"; 3 | -------------------------------------------------------------------------------- /test/datagen/javascript/ThrowNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: THROW 5 | expressions { 6 | kind: LITERAL 7 | literal: "throw example" 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /test/datagen/javascript/ThrowNode.js: -------------------------------------------------------------------------------- 1 | throw "throw example"; -------------------------------------------------------------------------------- /test/datagen/javascript/TrueFalseKeyWordLiteralNodes.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: LITERAL 7 | literal: "true" 8 | } 9 | } 10 | statements { 11 | kind: EXPRESSION 12 | expressions { 13 | kind: LITERAL 14 | literal: "false" 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/TrueFalseKeyWordLiteralNodes.js: -------------------------------------------------------------------------------- 1 | true; 2 | false; -------------------------------------------------------------------------------- /test/datagen/javascript/TryCatchNodes.js: -------------------------------------------------------------------------------- 1 | try { 2 | 3 | } 4 | catch(err) { 5 | 6 | } -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionDELETE.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: DELETE 7 | expressions { 8 | kind: VARACCESS 9 | variable: "x" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionDELETE.js: -------------------------------------------------------------------------------- 1 | delete x; -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionTYPEOF.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: TYPEOF 7 | expressions { 8 | kind: VARACCESS 9 | variable: "x" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionTYPEOF.js: -------------------------------------------------------------------------------- 1 | typeof x; -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionVOID.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: VOID 7 | expressions { 8 | kind: VARACCESS 9 | variable: "x" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /test/datagen/javascript/UnaryExpressionVOID.js: -------------------------------------------------------------------------------- 1 | void x; -------------------------------------------------------------------------------- /test/datagen/javascript/VariableDeclarationNode.js: -------------------------------------------------------------------------------- 1 | var x = 5; -------------------------------------------------------------------------------- /test/datagen/javascript/VariableDeclarationNode2.js: -------------------------------------------------------------------------------- 1 | var x = 10, y = 5; -------------------------------------------------------------------------------- /test/datagen/javascript/VariableDeclarationNode3.js: -------------------------------------------------------------------------------- 1 | var x, y, z; -------------------------------------------------------------------------------- /test/datagen/javascript/VariableDeclarationNode4.js: -------------------------------------------------------------------------------- 1 | var x = "hello", y = "world!"; -------------------------------------------------------------------------------- /test/datagen/javascript/VariableDeclarationNode5.js: -------------------------------------------------------------------------------- 1 | var x; 2 | let y; 3 | const z; -------------------------------------------------------------------------------- /test/datagen/javascript/WhileNode.js: -------------------------------------------------------------------------------- 1 | while (i < 5) { 2 | text += "
The number is " + i; 3 | i++; 4 | } -------------------------------------------------------------------------------- /test/datagen/javascript/WithNode.js: -------------------------------------------------------------------------------- 1 | with (o) { 2 | console.log(x); 3 | } -------------------------------------------------------------------------------- /test/datagen/javascript/XmlDotQueryNode.js: -------------------------------------------------------------------------------- 1 | var x = foo.(bar); -------------------------------------------------------------------------------- /test/datagen/javascript/XmlElemRefNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: OTHER 7 | expressions { 8 | kind: VARACCESS 9 | variable: "ns" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "expr" 14 | } 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /test/datagen/javascript/XmlElemRefNode.js: -------------------------------------------------------------------------------- 1 | ns::[expr]; -------------------------------------------------------------------------------- /test/datagen/javascript/XmlLiteralNode.js: -------------------------------------------------------------------------------- 1 | var el = bar; -------------------------------------------------------------------------------- /test/datagen/javascript/XmlPropRefNode.boa: -------------------------------------------------------------------------------- 1 | namespaces { 2 | name: "" 3 | statements { 4 | kind: EXPRESSION 5 | expressions { 6 | kind: XML_PROPERTYREF 7 | expressions { 8 | kind: VARACCESS 9 | variable: "ns" 10 | } 11 | expressions { 12 | kind: VARACCESS 13 | variable: "name" 14 | } 15 | is_member_access: true 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /test/datagen/javascript/XmlPropRefNode.js: -------------------------------------------------------------------------------- 1 | @ns::name; -------------------------------------------------------------------------------- /test/datagen/javascript/YieldNode.js: -------------------------------------------------------------------------------- 1 | function foo() { 2 | var index = 0; 3 | while (index <= 2) 4 | yield index++; 5 | } -------------------------------------------------------------------------------- /test/datagen/test_datagen/ast/data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/test_datagen/ast/data -------------------------------------------------------------------------------- /test/datagen/test_datagen/ast/index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/test_datagen/ast/index -------------------------------------------------------------------------------- /test/datagen/test_datagen/commit/data: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/test_datagen/commit/data -------------------------------------------------------------------------------- /test/datagen/test_datagen/commit/index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/test_datagen/commit/index -------------------------------------------------------------------------------- /test/datagen/test_datagen/projects.seq: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/datagen/test_datagen/projects.seq -------------------------------------------------------------------------------- /test/ddg/dot/return-var: -------------------------------------------------------------------------------- 1 | digraph { 2 | { rank = source; 0; } 3 | 0[shape=ellipse,label="[0] ENTRY"] 4 | 1[shape=ellipse,label="[1] int x = 1"] 5 | 2[shape=ellipse,label="[2] System.out.println(\"hi\")"] 6 | 3[shape=ellipse,label="[3] return x;"] 7 | 0 -> 1 8 | 0 -> 2 9 | 1 -> 3 [label="x"] 10 | } 11 | -------------------------------------------------------------------------------- /test/ddg/src/loop-condition-use1: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x = x + 1; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/ddg/src/loop-condition-use2: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x++; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/ddg/src/loop-condition-use3: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x += 1; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/ddg/src/return-var: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int x = 1; 4 | System.out.println("hi"); 5 | return x; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/inhattr/after-id.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | after m: Method -> o << 1; 5 | before s: Statement -> 6 | if (current(Method).name == "foo") 7 | o << 1; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/after.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | after Method -> o << 1; 5 | before s: Statement -> 6 | if (current(Method).name == "foo") 7 | o << 1; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/before-after.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Method -> stop; 5 | after Method -> o << 1; 6 | before s: Statement -> 7 | if (current(Method).name == "foo") 8 | o << 1; 9 | }); 10 | -------------------------------------------------------------------------------- /test/inhattr/before-id.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before m: Method -> stop; 5 | before s: Statement -> 6 | if (current(Method).name == "foo") 7 | o << 1; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/before.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Method -> stop; 5 | before s: Statement -> 6 | if (current(Method).name == "foo") 7 | o << 1; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/idlist.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Method,Namespace -> stop; 5 | after Type,Method -> o << 1; 6 | before s: Statement -> 7 | if (current(Method).name == "foo") 8 | o << 1; 9 | }); 10 | -------------------------------------------------------------------------------- /test/inhattr/mult-current.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before d: Declaration -> 5 | if (current(Statement).kind == StatementKind.TYPEDECL) o << 1; 6 | else if (current(Method).name == "foo") 7 | o << 2; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/mult-current2.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Method -> stop; 5 | before d: Declaration -> 6 | if (current(Statement).kind == StatementKind.TYPEDECL) o << 1; 7 | else if (current(Method).name == "foo") 8 | o << 2; 9 | }); 10 | -------------------------------------------------------------------------------- /test/inhattr/mult-current3.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Method -> if (current(Statement).kind == StatementKind.TYPEDECL) stop; 5 | before Declaration -> 6 | if (current(Statement).kind == StatementKind.TYPEDECL) 7 | o << 1; 8 | }); 9 | -------------------------------------------------------------------------------- /test/inhattr/nested.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before s: Statement -> 5 | if (current(Method).name != "foo") 6 | visit(input, visitor { 7 | before Declaration -> 8 | if (current(Method).name != "foo") 9 | o << 1; 10 | }); 11 | else 12 | visit(input, visitor { 13 | after Method -> 14 | o << 1; 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /test/inhattr/same-visit.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before s: Statement -> 5 | if (current(Statement).kind != StatementKind.FOR) 6 | o << 1; 7 | }); 8 | -------------------------------------------------------------------------------- /test/inhattr/simple.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before s: Statement -> 5 | if (current(Method).name == "foo") 6 | o << 1; 7 | }); 8 | -------------------------------------------------------------------------------- /test/known-good/ast-count.boa: -------------------------------------------------------------------------------- 1 | len: output sum of int; 2 | p: Project = input; 3 | 4 | lenVisitor := visitor { 5 | before _ -> len << 1; 6 | before Project, CodeRepository, Revision, ASTRoot -> ; 7 | }; 8 | 9 | visit(p, lenVisitor); 10 | -------------------------------------------------------------------------------- /test/known-good/catAp1.boa: -------------------------------------------------------------------------------- 1 | # Counting the N most used programming languages 2 | counts: output top(5) of string weight int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.programming_languages[i])) 6 | counts << p.programming_languages[i] weight 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catAp1b.boa: -------------------------------------------------------------------------------- 1 | # Counting the N most used programming languages in 2011 2 | counts: output sum[string] of int; 3 | p: Project = input; 4 | 5 | if (yearof(p.created_date) == 2011) 6 | foreach (i: int; def(p.programming_languages[i])) 7 | counts[p.programming_languages[i]] << 1; 8 | -------------------------------------------------------------------------------- /test/known-good/catAp2.boa: -------------------------------------------------------------------------------- 1 | # Counting the number of projects written in more than one languages 2 | counts: output sum of int; 3 | p: Project = input; 4 | 5 | if (len(p.programming_languages) > 1) 6 | counts << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catAp3.boa: -------------------------------------------------------------------------------- 1 | # what year were the most Java projects added 2 | counts: output sum[int] of int; 3 | p: Project = input; 4 | 5 | exists (i: int; match(`^java$`, lowercase(p.programming_languages[i]))) 6 | counts[yearof(p.created_date)] << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catBp1.boa: -------------------------------------------------------------------------------- 1 | # Counting the number of revisions for all Java projects with GIT 2 | counts: output sum of int; 3 | p: Project = input; 4 | 5 | exists (i: int; match(`^java$`, lowercase(p.programming_languages[i]))) 6 | foreach (j: int; p.code_repositories[j].kind == RepositoryKind.GIT) 7 | counts << getrevisionscount(p.code_repositories[j]); 8 | -------------------------------------------------------------------------------- /test/known-good/catBp12.boa: -------------------------------------------------------------------------------- 1 | # which year were GIT projects added most 2 | counts: output top(1) of int weight int; 3 | p: Project = input; 4 | 5 | exists (j: int; match(`^java$`, lowercase(p.programming_languages[j]))) 6 | foreach (i: int; p.code_repositories[i].kind == RepositoryKind.GIT) 7 | if (getrevisionscount(p.code_repositories[i]) > 0) 8 | counts << yearof(getrevision(p.code_repositories[i], 0).commit_date) weight 1; 9 | -------------------------------------------------------------------------------- /test/known-good/catBp13.boa: -------------------------------------------------------------------------------- 1 | # How many projects created each year? 2 | counts: output sum[int] of int; 3 | p: Project = input; 4 | 5 | counts[yearof(p.created_date)] << 1; 6 | -------------------------------------------------------------------------------- /test/known-good/catBp14.boa: -------------------------------------------------------------------------------- 1 | # what is the average churn rate? 2 | counts: output mean of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.code_repositories[i])) 6 | for (j := 0; j < getrevisionscount(p.code_repositories[i]) ; j++) 7 | counts << len(getrevision(p.code_repositories[i],j).files); 8 | 9 | -------------------------------------------------------------------------------- /test/known-good/catBp15.boa: -------------------------------------------------------------------------------- 1 | # what are the N projects w/ the highest churn rate? 2 | counts: output mean[string] of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; getrevisionscount(p.code_repositories[i]) > 10) 6 | for (j := 0; j < getrevisionscount(p.code_repositories[i]) ; j++) 7 | counts[p.id] << len(getrevision(p.code_repositories[i],j).files); 8 | -------------------------------------------------------------------------------- /test/known-good/catBp19.boa: -------------------------------------------------------------------------------- 1 | # how many projects self-classify into each topic? 2 | values: output sum[string] of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.topics[i])) 6 | values[lowercase(p.topics[i])] << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catBp8.boa: -------------------------------------------------------------------------------- 1 | # How many developers work on multiple projects 2 | counts: output sum[string] of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.developers[i].username)) 6 | counts[p.developers[i].username] << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catDp1.boa: -------------------------------------------------------------------------------- 1 | # Counting the N most frequently used licenses 2 | counts: output top(5) of string weight int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.licenses[i])) 6 | counts << p.licenses[i] weight 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catDp2.boa: -------------------------------------------------------------------------------- 1 | # Counting the number of projects using more than 1 license 2 | counts: output sum of int; 3 | p: Project = input; 4 | 5 | if (len(p.licenses) > 1) 6 | counts << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp1.boa: -------------------------------------------------------------------------------- 1 | # what are the 5 most supported OSes? 2 | counts: output top(5) of string weight int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.operating_systems[i])) 6 | counts << p.operating_systems[i] weight 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp2.boa: -------------------------------------------------------------------------------- 1 | # which projects support multiple OSes? 2 | counts: output collection[string] of string; 3 | p: Project = input; 4 | 5 | if (len(p.operating_systems) > 1) 6 | counts[p.id] << p.project_url; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp3.boa: -------------------------------------------------------------------------------- 1 | # what databases are used? 2 | counts: output sum[string] of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.databases[i])) 6 | counts[p.databases[i]] << 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp4.boa: -------------------------------------------------------------------------------- 1 | # what are the 5 most popular databases? 2 | counts: output top(5) of string weight int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.databases[i])) 6 | counts << p.databases[i] weight 1; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp5.boa: -------------------------------------------------------------------------------- 1 | # which projects support multiple databases? 2 | counts: output collection[string] of string; 3 | p: Project = input; 4 | 5 | if (len(p.databases) > 1) 6 | counts[p.id] << p.name; 7 | -------------------------------------------------------------------------------- /test/known-good/catEp7.boa: -------------------------------------------------------------------------------- 1 | # pairs of programming language/database 2 | counts: output sum[string][string] of int; 3 | p: Project = input; 4 | 5 | foreach (i: int; def(p.programming_languages[i])) 6 | foreach (j: int; def(p.databases[j])) 7 | counts[p.programming_languages[i]][p.databases[j]] << 1; 8 | -------------------------------------------------------------------------------- /test/known-good/clonebug.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | visit(input, visitor { 5 | before _ -> { 6 | y := 3; 7 | o << y; 8 | } 9 | after _ -> { 10 | z := 2; 11 | o << z; 12 | } 13 | before Project, CodeRepository -> { 14 | x := 5; 15 | o << int(current(Revision).commit_date); 16 | } 17 | }); 18 | -------------------------------------------------------------------------------- /test/known-good/combiner.boa: -------------------------------------------------------------------------------- 1 | len: output sum of int; 2 | p: Project = input; 3 | 4 | visit(p, visitor { 5 | before _ -> len << 1; 6 | before Project, CodeRepository, Revision, ASTRoot -> ; 7 | }); 8 | -------------------------------------------------------------------------------- /test/known-good/enum.boa: -------------------------------------------------------------------------------- 1 | p: Project = input; 2 | 3 | type T1 = enum {A = "true", B = "false"}; 4 | t1 : T1 = T1.A; 5 | 6 | type T2 = enum {A = "yes", B = "no"}; 7 | t2 : T2 = T2.A; 8 | 9 | col : output collection of int; 10 | 11 | switch (t1) { 12 | case T1.A : 13 | col << 1; break; 14 | case T1.B : 15 | col << 2; break; 16 | 17 | default: break; 18 | } -------------------------------------------------------------------------------- /test/known-good/input.boa: -------------------------------------------------------------------------------- 1 | p: Project = input; 2 | TopPL: output top(5) of string weight int; 3 | 4 | foreach (i: int; def(p.programming_languages[i])) 5 | TopPL << p.programming_languages[i] weight 1; 6 | -------------------------------------------------------------------------------- /test/known-good/java-count.boa: -------------------------------------------------------------------------------- 1 | # count how many valid Java files are in the latest snapshot 2 | counts: output sum of int; 3 | p: Project = input; 4 | 5 | visit(p, visitor { 6 | before node: CodeRepository -> 7 | counts << len(getsnapshot(node, "SOURCE_JAVA_JLS")); 8 | }); 9 | -------------------------------------------------------------------------------- /test/known-good/len.boa: -------------------------------------------------------------------------------- 1 | len: output sum[string] of int; 2 | p: Project = input; 3 | 4 | count := 0; 5 | 6 | lenVisitor := visitor { 7 | before _ -> count++; 8 | before Project, CodeRepository, Revision, ChangedFile, ASTRoot -> ; 9 | }; 10 | 11 | visit(p, lenVisitor); 12 | len[p.id] << count; 13 | -------------------------------------------------------------------------------- /test/known-good/median.boa: -------------------------------------------------------------------------------- 1 | m: output median of int; 2 | ci: output confidence(95) of int; 3 | v: output variance of int; 4 | st: output stdev of int; 5 | s: output skewness of int; 6 | k: output kurtosis of int; 7 | 8 | p: Project = input; 9 | 10 | m << int(p.id); 11 | ci << int(p.id); 12 | v << int(p.id); 13 | st << int(p.id); 14 | s << int(p.id); 15 | k << int(p.id); 16 | -------------------------------------------------------------------------------- /test/known-good/optimizerbug.boa: -------------------------------------------------------------------------------- 1 | o: output sum[string] of int; 2 | 3 | visit(input, visitor { 4 | after cf2: ChangedFile -> { 5 | x := 3; 6 | o[cf2.name] << x; 7 | } 8 | }); 9 | -------------------------------------------------------------------------------- /test/known-good/renamebug.boa: -------------------------------------------------------------------------------- 1 | o: output sum[string] of int; 2 | 3 | visit(input, visitor { 4 | before cf: ChangedFile -> { 5 | x := 5; 6 | o[current(ChangedFile).name] << x; 7 | } 8 | after cf2: ChangedFile -> { 9 | x := 3; 10 | o[cf2.name] << x; 11 | } 12 | }); 13 | -------------------------------------------------------------------------------- /test/known-good/test2.boa: -------------------------------------------------------------------------------- 1 | Projects: output sum[string] of int; 2 | Revisions: output sum[string] of int; 3 | 4 | Projects[format("%d-%d", yearof(input.created_date), monthof(input.created_date))] << 1; 5 | 6 | visit(input, visitor { 7 | before n: Revision -> 8 | Revisions[format("%d-%d", yearof(n.commit_date), monthof(n.commit_date))] << 1; 9 | }); 10 | -------------------------------------------------------------------------------- /test/lexing/char-lit.boa: -------------------------------------------------------------------------------- 1 | # characters 2 | 'a' 3 | '\n' 4 | '\r' 5 | '\t' 6 | '\b' 7 | '\f' 8 | ' ' 9 | ' ' 10 | '\\' 11 | '\'' 12 | '"' 13 | '\"' 14 | '\0' 15 | '\00' 16 | '\000' 17 | -------------------------------------------------------------------------------- /test/lexing/comment-eof-no-eol.boa: -------------------------------------------------------------------------------- 1 | # there is no EOL on the last line, which is a comment 2 | # so it hits EOF before EOL, which is allowed 3 | -------------------------------------------------------------------------------- /test/lexing/empty.boa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/lexing/empty.boa -------------------------------------------------------------------------------- /test/lexing/errors/bad-comment.boa: -------------------------------------------------------------------------------- 1 | @ bad comment 2 | -------------------------------------------------------------------------------- /test/lexing/fp-lit.boa: -------------------------------------------------------------------------------- 1 | # floating point 2 | 05. 3 | 5. 4 | 5.55 5 | 5.e5 6 | 5.e+5 7 | 5.e-5 8 | 5.E-5 9 | 5.E5 10 | 11 | .5 12 | .5e0 13 | .5e+0 14 | .5e-0 15 | .5E0 16 | 17 | 000e0 18 | 000E0 19 | 000E-0 20 | 000E+0 21 | -------------------------------------------------------------------------------- /test/lexing/identifier-lit.boa: -------------------------------------------------------------------------------- 1 | # identifiers 2 | valid_ 3 | valid0 4 | valid0_ 5 | Valid_0_valid 6 | -------------------------------------------------------------------------------- /test/lexing/int-lit.boa: -------------------------------------------------------------------------------- 1 | # integer num 2 | 7 3 | 94 4 | 50 5 | 6 | # hex num 7 | 0x9aF 8 | 0X9Af 9 | 0x9 10 | 0X9 11 | 0x000 12 | 13 | # octal num 14 | 0753 15 | 0 16 | 17 | # binary num 18 | 0b10 19 | 0B10 20 | 0b0 21 | 0B1 22 | -------------------------------------------------------------------------------- /test/lexing/regex-lit.boa: -------------------------------------------------------------------------------- 1 | # regular expressions 2 | `` 3 | `\n"\r\\\ !@#$%^&*()-_=+[]{};:',.<>/?|~1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ` 4 | -------------------------------------------------------------------------------- /test/lexing/string-lit.boa: -------------------------------------------------------------------------------- 1 | # strings 2 | "" 3 | " !@#$%^&*()-_=+[]{};:',.<>/?|`~1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 4 | "\r" 5 | "\n" 6 | "\b" 7 | "\t" 8 | "\f" 9 | "\"" 10 | "\'" 11 | "\\" 12 | "\7" 13 | "\77" 14 | "\77" 15 | -------------------------------------------------------------------------------- /test/lexing/time-lit.boa: -------------------------------------------------------------------------------- 1 | # time 2 | 0t # 0 microseconds 3 | 1000000T # 1 second 4 | T"Wed Feb 4 16:26:41 PST 2004" # date/time string with short tz 5 | T"Tue Jun 5 10:43:07 America/Los_Angeles 2007" # date/time string with long tz 6 | -------------------------------------------------------------------------------- /test/parsing/comma.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | a := { 4 | 1, 5 | 2, 6 | 3, 7 | }; 8 | 9 | o << a[1]; 10 | -------------------------------------------------------------------------------- /test/parsing/enums.boa: -------------------------------------------------------------------------------- 1 | type T1 = enum { A = "yes" }; 2 | type T2 = enum { A = "yes", B = "no" }; 3 | type T3 = enum { A = "yes", B = "no", C = "maybe" }; 4 | 5 | # trailing commas 6 | type T1B = enum { A = "yes", }; 7 | type T2B = enum { A = "yes", B = "no", }; 8 | type T3B = enum { A = "yes", B = "no", C = "maybe", }; 9 | -------------------------------------------------------------------------------- /test/parsing/errors/assign-to-map.boa: -------------------------------------------------------------------------------- 1 | m: map[string] of string; 2 | m["foo"] := "bar"; 3 | -------------------------------------------------------------------------------- /test/parsing/errors/bad-emit-with-weight.boa: -------------------------------------------------------------------------------- 1 | o << weight 1; 2 | -------------------------------------------------------------------------------- /test/parsing/errors/bad-identifiers.boa: -------------------------------------------------------------------------------- 1 | # bad identifiers 2 | _invalid := 0; 3 | 0invalid := 0; 4 | inval+id := 0; 5 | -------------------------------------------------------------------------------- /test/parsing/errors/empty.boa: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/test/parsing/errors/empty.boa -------------------------------------------------------------------------------- /test/parsing/errors/enum-extra-comma.boa: -------------------------------------------------------------------------------- 1 | # NO 2 | type T1 = enum { A = "yes", B = "no", ,C = "maybe" }; 3 | -------------------------------------------------------------------------------- /test/parsing/errors/foreach.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | for (i: int; input.programming_langagues[i] == "foo") 4 | o << 1; 5 | -------------------------------------------------------------------------------- /test/parsing/errors/keyword-as-id.boa: -------------------------------------------------------------------------------- 1 | INPUTS: output sum of int; 2 | output << 1; 3 | -------------------------------------------------------------------------------- /test/parsing/errors/output-var-equals.boa: -------------------------------------------------------------------------------- 1 | o := output sum of int; 2 | o << 1; 3 | -------------------------------------------------------------------------------- /test/parsing/errors/visitor-missing-before.boa: -------------------------------------------------------------------------------- 1 | visit(input, visitor { 2 | n: Revision -> stop; 3 | n: ChangedFile -> stop; 4 | }); 5 | -------------------------------------------------------------------------------- /test/parsing/expr-numbers-with-space.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | j := -5; 4 | j = - 5; 5 | k := -0.1; 6 | k = - 0.1; 7 | 8 | for (i := 0; i < 0 - 5; i++) 9 | o << 1; 10 | for (m := 0; m < 0 -5; m++) 11 | o << 1; 12 | -------------------------------------------------------------------------------- /test/parsing/ifelse-vardecl-no-braces.boa: -------------------------------------------------------------------------------- 1 | if (input.id == "") 2 | var := true; 3 | else 4 | var := false; 5 | -------------------------------------------------------------------------------- /test/pdg/dot/return-var: -------------------------------------------------------------------------------- 1 | digraph { 2 | 0[shape=ellipse,label="[0] ENTRY"] 3 | 1[shape=ellipse,label="[1] int x = 1"] 4 | 2[shape=ellipse,label="[2] System.out.println(\"hi\")"] 5 | 3[shape=ellipse,label="[3] return x;"] 6 | 0 -> 1 [label="CONTROL:T"] 7 | 0 -> 2 [label="CONTROL:T"] 8 | 0 -> 3 [label="CONTROL:T"] 9 | 1 -> 3 [label="DATA:x"] 10 | } 11 | -------------------------------------------------------------------------------- /test/pdg/src/loop-condition-use1: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x = x + 1; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/pdg/src/loop-condition-use2: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x++; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/pdg/src/loop-condition-use3: -------------------------------------------------------------------------------- 1 | public class C { 2 | public void m() { 3 | int x = 1; 4 | while (x < 10) { 5 | System.out.println("loop"); 6 | x += 1; 7 | } 8 | System.out.println("x = " + x); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /test/pdg/src/return-var: -------------------------------------------------------------------------------- 1 | public class C { 2 | public int m() { 3 | int x = 1; 4 | System.out.println("hi"); 5 | return x; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /test/program-analysis/print-names.boa: -------------------------------------------------------------------------------- 1 | ids: output collection of string; 2 | 3 | printNodes := traversal(n: CFGNode) { 4 | ids << n.name; 5 | }; 6 | 7 | visit(input, visitor { 8 | before m: Method -> 9 | traverse(getcfg(m), TraversalDirection.FORWARD, TraversalKind.DFS, printNodes); 10 | }); 11 | -------------------------------------------------------------------------------- /test/traversal/errors/traversal-with-stop.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | p: Project = input; 4 | 5 | # traversal with no return type 6 | dom_result := traversal(node: CFGNode) { 7 | stop; 8 | }; 9 | 10 | m << 1; 11 | 12 | -------------------------------------------------------------------------------- /test/traversal/errors/traverse-with-no-return-statement.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | # print results 4 | dom_result := traversal(node: CFGNode) : string { 5 | }; 6 | 7 | m << 1; 8 | -------------------------------------------------------------------------------- /test/traversal/fixpoint.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | p: Project = input; 4 | 5 | type T= {dom: set of string, dummy : int}; 6 | 7 | # user-defined fix point function that is used for analysis termination. 8 | fixp1 := fixp(curr, prev: T) : bool { 9 | if (len(difference(curr.dom, prev.dom)) == 0) 10 | return true; 11 | return false; 12 | }; 13 | 14 | m << 1; 15 | -------------------------------------------------------------------------------- /test/traversal/getValue-current-traversal.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | # print results 4 | dom_result := traversal(node: CFGNode) : string { 5 | #getvalue from current traversal 6 | cur_value := getvalue(node); 7 | return string(node.id); 8 | }; 9 | 10 | m << 1; 11 | -------------------------------------------------------------------------------- /test/traversal/getcfg.boa: -------------------------------------------------------------------------------- 1 | m: output median of int; 2 | 3 | q_all := visitor { 4 | before method: Method -> { 5 | cfg := getcfg(method); 6 | m << len(cfg.nodes); 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /test/traversal/multiple-traversal.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | p: Project = input; 4 | 5 | # traversal with return type 6 | allnode_ids := traversal(node: CFGNode) : string { 7 | return string(node.id); 8 | }; 9 | 10 | # traversal with no return type 11 | dom_result := traversal(node: CFGNode) { 12 | j:= node.id; 13 | }; 14 | 15 | m << 1; 16 | 17 | -------------------------------------------------------------------------------- /test/traversal/traversal-with-returntype.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | p: Project = input; 4 | 5 | # traversal with return type 6 | allnode_ids := traversal(node: CFGNode) : string { 7 | return string(node.id); 8 | }; 9 | 10 | m << 1; 11 | -------------------------------------------------------------------------------- /test/traversal/traversal-without-returntype.boa: -------------------------------------------------------------------------------- 1 | m: output collection of int; 2 | 3 | p: Project = input; 4 | 5 | # traversal with no return type 6 | dom_result := traversal(node: CFGNode) { 7 | j:= node.id; 8 | }; 9 | 10 | m << 1; 11 | 12 | -------------------------------------------------------------------------------- /test/typecheck/agg-component.boa: -------------------------------------------------------------------------------- 1 | # issue 280 2 | o: output sum of count: int; 3 | o << 1; 4 | -------------------------------------------------------------------------------- /test/typecheck/array-of-enum.boa: -------------------------------------------------------------------------------- 1 | kinds: array of StatementKind = { StatementKind.IF, StatementKind.OTHER }; 2 | -------------------------------------------------------------------------------- /test/typecheck/arrays.boa: -------------------------------------------------------------------------------- 1 | a1: array of int; 2 | a2: array of Statement; 3 | a3: array of { int, float }; 4 | -------------------------------------------------------------------------------- /test/typecheck/errors/add-set-wrong-val.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | s: set of string; 5 | cf: ChangedFile; 6 | add(s, cf); 7 | -------------------------------------------------------------------------------- /test/typecheck/errors/after-return.boa: -------------------------------------------------------------------------------- 1 | visit(input, visitor { 2 | after _ -> return; 3 | }); 4 | -------------------------------------------------------------------------------- /test/typecheck/errors/aggregator-in-emit.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | sum << 1; 3 | -------------------------------------------------------------------------------- /test/typecheck/errors/assign-func-no-ret.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | f := function(i: int) { 4 | o << i; 5 | }; 6 | 7 | 8 | g := f(5); 9 | -------------------------------------------------------------------------------- /test/typecheck/errors/assign-type-to-var.boa: -------------------------------------------------------------------------------- 1 | p := Project; # error 2 | -------------------------------------------------------------------------------- /test/typecheck/errors/assign-type-to-var2.boa: -------------------------------------------------------------------------------- 1 | p: Project; 2 | p = Project; # error 3 | -------------------------------------------------------------------------------- /test/typecheck/errors/assignoutput.boa: -------------------------------------------------------------------------------- 1 | o: output sum[int][int] of int; 2 | 3 | o[3][3] = 3; 4 | -------------------------------------------------------------------------------- /test/typecheck/errors/before-return.boa: -------------------------------------------------------------------------------- 1 | visit(input, visitor { 2 | before _ -> return; 3 | }); 4 | -------------------------------------------------------------------------------- /test/typecheck/errors/builtin-method-no-call.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | if (clear) 4 | o << 1; 5 | -------------------------------------------------------------------------------- /test/typecheck/errors/cout.boa: -------------------------------------------------------------------------------- 1 | data: output collection of string; 2 | 3 | # C++ users might try to chain the emits, like with iostreams 4 | data << input.name << input.id; # error 5 | -------------------------------------------------------------------------------- /test/typecheck/errors/current-badtype.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | visit(input, visitor { 4 | before Statement -> if (current(int)) o << 1; 5 | }); 6 | -------------------------------------------------------------------------------- /test/typecheck/errors/function-as-arg-bad.boa: -------------------------------------------------------------------------------- 1 | TEST: output collection of int; 2 | 3 | f := function(f2: function(l: int, r: int) : int) : int { 4 | return l; 5 | }; 6 | 7 | TEST << f(function(l: int, r: int) : int { return 1; }); 8 | -------------------------------------------------------------------------------- /test/typecheck/errors/method-call-wrong-type.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 0; 3 | 4 | s: stack of int; 5 | push(s, s); 6 | -------------------------------------------------------------------------------- /test/typecheck/errors/method-no-call.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | f := function() : bool { return true; }; 4 | 5 | if (f) 6 | o << 1; 7 | -------------------------------------------------------------------------------- /test/typecheck/errors/nested-return.boa: -------------------------------------------------------------------------------- 1 | visit(input, visitor { 2 | before n: Statement -> { 3 | visit(n, visitor { 4 | after n: Statement -> { 5 | } 6 | }); 7 | return; 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /test/typecheck/errors/re-decl-var.boa: -------------------------------------------------------------------------------- 1 | f: function(); 2 | 3 | f := function() { 4 | v := 1; 5 | }; 6 | -------------------------------------------------------------------------------- /test/typecheck/errors/re-decl-var2.boa: -------------------------------------------------------------------------------- 1 | a: array of int; 2 | foreach (i: int; a[i] > 0) 3 | foreach (i: int; a[i] > 0) { 4 | } 5 | -------------------------------------------------------------------------------- /test/typecheck/errors/stop-in-after.boa: -------------------------------------------------------------------------------- 1 | visitor { 2 | after Expression -> stop; 3 | }; 4 | -------------------------------------------------------------------------------- /test/typecheck/errors/tuple-redecl.boa: -------------------------------------------------------------------------------- 1 | type foo = {a: float, b: float, a: bool}; 2 | -------------------------------------------------------------------------------- /test/typecheck/errors/var-as-type.boa: -------------------------------------------------------------------------------- 1 | p: input = input; # error 2 | -------------------------------------------------------------------------------- /test/typecheck/functype-diff-argnames.boa: -------------------------------------------------------------------------------- 1 | o: output collection of int; 2 | 3 | f := function(cmp: function(l: int, r: int) : int) : int { 4 | return cmp(3, 5); 5 | }; 6 | 7 | o << f(function(r: int, l: int) : int { return r; }); 8 | -------------------------------------------------------------------------------- /test/typecheck/no-weight.boa: -------------------------------------------------------------------------------- 1 | o: output minimum(5) of string weight int; 2 | o << "foo"; 3 | -------------------------------------------------------------------------------- /test/typecheck/recursive-func.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | 3 | f := function(i: int) { 4 | if (i > 0) 5 | f(i - 1); 6 | }; 7 | 8 | f2 := function(i: int) : int { 9 | if (i > 0) 10 | return f2(i - 1); 11 | return i; 12 | }; 13 | 14 | o << f2(5); 15 | -------------------------------------------------------------------------------- /test/typecheck/returns.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | visit(input, visitor { 5 | before n: Statement -> { 6 | function() : bool { 7 | return true; 8 | }; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /test/typecheck/self-cast.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | i: int; 5 | i = int(i); 6 | 7 | b: bool; 8 | b = bool(b); 9 | 10 | f: float; 11 | f = float(f); 12 | 13 | t: time; 14 | t = time(t); 15 | 16 | s: string; 17 | s = string(s); 18 | -------------------------------------------------------------------------------- /test/typecheck/time-lit.boa: -------------------------------------------------------------------------------- 1 | o: output sum of int; 2 | o << 1; 3 | 4 | t: time; 5 | 6 | t = time(100000); 7 | t = time("June 30, 2009, 7:03:47 AM UTC"); 8 | t = T"Tue Jun 30 2009 07:03:47 PDT"; 9 | -------------------------------------------------------------------------------- /test/typecheck/tuple-declare.boa: -------------------------------------------------------------------------------- 1 | type t1 = { i: int, string, b: bool }; 2 | tup1: t1 = { 5, "string", false }; 3 | 4 | # structurally similar tuple, different names 5 | type t2 = { i2: int, s: string, b2: bool }; 6 | tup2: t2 = { 5, "string", false }; 7 | 8 | # tuples without declaring explicit type 9 | tup3 := { 5, false }; 10 | -------------------------------------------------------------------------------- /test/typecheck/tuple-same-variable.boa: -------------------------------------------------------------------------------- 1 | a := 1; 2 | 3 | type foo = {a: float, b: float, c: bool}; 4 | type bar = {a: int, c: float}; 5 | 6 | b := true; 7 | -------------------------------------------------------------------------------- /tutorial/img/after_config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/after_config.png -------------------------------------------------------------------------------- /tutorial/img/datagen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/datagen.png -------------------------------------------------------------------------------- /tutorial/img/datagenparam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/datagenparam.png -------------------------------------------------------------------------------- /tutorial/img/evalparam.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/evalparam.png -------------------------------------------------------------------------------- /tutorial/img/import.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/import.png -------------------------------------------------------------------------------- /tutorial/img/json_looklike.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/boalang/compiler/4e5c5383b39afc244634d3256a99e357716229a4/tutorial/img/json_looklike.png --------------------------------------------------------------------------------