Summary:
Copy files from (clean commit) FCP [024a101](024a101228
) repo to folder in infer repo (i.e. no longer a subrepo).
Excluding all dotfiles except .gitingnore and .clang-format
```
$ git checkout https://github.com/facebook/facebook-clang-plugins.git
$ mkdir ~/infer/facebook-clang-plugins
$ cp -r facebook-clang-plugins/* ~/infer/facebook-clang-plugins/
Reviewed By: ngorogiannis
Differential Revision: D23315608
fbshipit-source-id: 2fc38b25e
master
parent
a7dee1edc3
commit
0ded7805c2
@ -0,0 +1,46 @@
|
||||
---
|
||||
AccessModifierOffset: -1
|
||||
AlignEscapedNewlinesLeft: true
|
||||
AlignTrailingComments: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AlwaysBreakTemplateDeclarations: true
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
BreakBeforeBinaryOperators: false
|
||||
BreakBeforeBraces: Attach
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
ColumnLimit: 80
|
||||
CommentPragmas: '^@atd'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: true
|
||||
DerivePointerAlignment: false
|
||||
ExperimentalAutoDetectBinPacking: true
|
||||
IndentCaseLabels: false
|
||||
IndentFunctionDeclarationAfterType: false
|
||||
IndentWidth: 2
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
ObjCSpaceBeforeProtocolList: false
|
||||
PenaltyBreakBeforeFirstCallParameter: 10
|
||||
PenaltyBreakComment: 60
|
||||
PenaltyBreakFirstLessLess: 20
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyReturnTypeOnItsOwnLine: 200
|
||||
PointerAlignment: Right
|
||||
SpaceAfterControlStatementKeyword: true
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceInEmptyParentheses: false
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
Standard: Cpp11
|
||||
TabWidth: 8
|
||||
UseTab: Never
|
||||
...
|
@ -0,0 +1,6 @@
|
||||
build
|
||||
clang-ocaml/.depend
|
||||
xcode/*
|
||||
*~
|
||||
clang/install
|
||||
clang/installed.version
|
@ -0,0 +1,3 @@
|
||||
# Code of Conduct
|
||||
|
||||
Facebook has adopted a Code of Conduct that we expect project participants to adhere to. Please [read the full text](https://code.facebook.com/codeofconduct) so that you can understand what actions will and will not be tolerated.
|
@ -0,0 +1,41 @@
|
||||
# Contributing to facebook-clang-plugins
|
||||
We want to make contributing to this project as easy and transparent as
|
||||
possible.
|
||||
|
||||
## Code of Conduct
|
||||
The code of conduct is described in [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md).
|
||||
|
||||
## Our Development Process
|
||||
The github repository https://github.com/facebook/facebook-clang-plugins is the source of truth.
|
||||
|
||||
## Pull Requests
|
||||
We actively welcome your pull requests.
|
||||
|
||||
1. Fork the repo and create your branch from `master`.
|
||||
2. If you've added code that should be tested, add tests
|
||||
3. If you've changed APIs, update the documentation.
|
||||
4. Ensure the test suite passes.
|
||||
Run tests with `make -C libtooling test`. For re-recording the tests, run `make -C libtooling record-test-outputs`.
|
||||
5. If you haven't already, complete the Contributor License Agreement ("CLA").
|
||||
|
||||
## Contributor License Agreement ("CLA")
|
||||
In order to accept your pull request, we need you to submit a CLA. You only need
|
||||
to do this once to work on any of Facebook's open source projects.
|
||||
|
||||
Complete your CLA here: <https://developers.facebook.com/opensource/cla>
|
||||
|
||||
## Issues
|
||||
We use GitHub issues to track public bugs. Please ensure your description is
|
||||
clear and has sufficient instructions to be able to reproduce the issue.
|
||||
|
||||
Facebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe
|
||||
disclosure of security bugs. In those cases, please go through the process
|
||||
outlined on that page and do not file a public issue.
|
||||
|
||||
## Coding Style
|
||||
Please use the LLVM style for new code: http://llvm.org/docs/CodingStandards.html
|
||||
while we are (slowly) updating the rest of the files.
|
||||
|
||||
## License
|
||||
By contributing to facebook-clang-plugins, you agree that your contributions will be licensed
|
||||
under its MIT license.
|
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2014-present, Facebook, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
@ -0,0 +1,43 @@
|
||||
==============================================================================
|
||||
LLVM Release License
|
||||
==============================================================================
|
||||
University of Illinois/NCSA
|
||||
Open Source License
|
||||
|
||||
Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign.
|
||||
All rights reserved.
|
||||
|
||||
Developed by:
|
||||
|
||||
LLVM Team
|
||||
|
||||
University of Illinois at Urbana-Champaign
|
||||
|
||||
http://llvm.org
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal with
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
||||
of the Software, and to permit persons to whom the Software is furnished to do
|
||||
so, subject to the following conditions:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimers.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimers in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the names of the LLVM Team, University of Illinois at
|
||||
Urbana-Champaign, nor the names of its contributors may be used to
|
||||
endorse or promote products derived from this Software without specific
|
||||
prior written permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
|
||||
SOFTWARE.
|
@ -0,0 +1,42 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
LEVEL=.
|
||||
include Makefile.common
|
||||
|
||||
.PHONY: all
|
||||
all:
|
||||
$(MAKE) -C libtooling/atdlib all
|
||||
$(MAKE) -C libtooling all
|
||||
|
||||
.PHONY: test
|
||||
test: all
|
||||
$(MAKE) -C libtooling/atdlib test
|
||||
$(MAKE) -C libtooling test
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
$(MAKE) -C libtooling/atdlib clean
|
||||
$(MAKE) -C libtooling clean
|
||||
|
||||
.PHONY: fmt_all
|
||||
fmt_all:
|
||||
find libtooling \
|
||||
\( -name '*'.cpp -or -name '*'.h -or -name '*'.c -or -name '*'.m -or -name '*'.mm \) \
|
||||
-exec ./clang/install/bin/clang-format -verbose -i \{\} \+
|
||||
|
||||
CHECKCOPYRIGHT=../infer/bin/checkCopyright
|
||||
|
||||
.PHONY: copyright
|
||||
copyright:
|
||||
@[ -x $(CHECKCOPYRIGHT) ] || { \
|
||||
echo "only works when this repo is checked out as a git submodule inside the infer repo" >&2; \
|
||||
echo "make sure this is the case and that `make checkCopyright` has been run from within infer" >&2; \
|
||||
exit 1; \
|
||||
}
|
||||
git ls-files \
|
||||
| grep -e '\(\.\(atd\|c\|cpp\|h\|m\|ml\|mli\|mm\|py\|sh\)\(\|\.p\)$$\|^\(.*/\|\)Makefile\)' \
|
||||
| grep -v 'libtooling/ASTExporter\.\(cpp\|h\)' \
|
||||
| xargs $(CHECKCOPYRIGHT) -i
|
@ -0,0 +1,66 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
include $(LEVEL)/Makefile.config
|
||||
|
||||
# Typical compilation flags for Objective C examples
|
||||
ifeq ($(HAS_OBJC),yes)
|
||||
IOSFLAGS=-isysroot $(SDKPATH) -mios-simulator-version-min=8.2 -target x86_64-apple-darwin14 -fobjc-arc \
|
||||
-Wno-unused-command-line-argument \
|
||||
-Wno-objc-property-implementation
|
||||
endif
|
||||
|
||||
# we assume that the targeted clang was configured with --enable-libcpp --enable-cxx14
|
||||
CFLAGS_Darwin+=-stdlib=libc++ -std=c++14
|
||||
LDFLAGS_Darwin+=-stdlib=libc++
|
||||
|
||||
CFLAGS_Linux+=-std=c++14 -fPIC
|
||||
LDFLAGS_Linux+=
|
||||
|
||||
override CFLAGS+=$(CFLAGS_$(shell uname)) -g
|
||||
override LDFLAGS+=$(LDFLAGS_$(shell uname))
|
||||
|
||||
override CFLAGS+=$(CLANG_INCLUDES:%=-I%) -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fvisibility-inlines-hidden -fno-exceptions -fno-rtti -fno-common -Woverloaded-virtual -Wcast-qual -fno-strict-aliasing -pedantic -Wno-long-long -Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-uninitialized -Wno-missing-field-initializers -Wno-vla-extension -Wno-c99-extensions
|
||||
|
||||
ifdef DEBUG
|
||||
override CFLAGS+=-DDEBUG
|
||||
export VERBOSE:=1
|
||||
SHELL=bash -O nullglob
|
||||
else
|
||||
override CFLAGS+=-O3 -DNDEBUG
|
||||
override LDFLAGS+=-O3
|
||||
# early exit when tests fail
|
||||
SHELL=bash -e -O nullglob
|
||||
endif
|
||||
|
||||
# project headers (if any)
|
||||
HEADERS?=
|
||||
|
||||
# test runner
|
||||
RUNTEST=$(LEVEL)/scripts/run_test.sh
|
||||
|
||||
LDFLAGS_DYLIB=$(LDFLAGS)
|
||||
LDFLAGS_DYLIB+=-Wl,-rpath -Wl,@executable_path/../lib -Wl,-undefined,dynamic_lookup -Wl,-flat_namespace -Wl,-undefined,suppress -dynamiclib -shared
|
||||
|
||||
CLANG_TOOL_LIBS := \
|
||||
-lclangFrontend \
|
||||
-lclangIndex \
|
||||
-lclangSerialization \
|
||||
-lclangDriver \
|
||||
-lclangTooling \
|
||||
-lclangCodeGen \
|
||||
-lclangParse \
|
||||
-lclangSema \
|
||||
-lclangAnalysis \
|
||||
-lclangRewriteFrontend \
|
||||
-lclangRewrite \
|
||||
-lclangEdit \
|
||||
-lclangAST \
|
||||
-lclangLex \
|
||||
-lclangBasic
|
||||
|
||||
# Local Variables:
|
||||
# mode: makefile
|
||||
# End:
|
@ -0,0 +1,49 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
# Template configuration file for make.
|
||||
# You may use $(LEVEL) to refer to the directory containing this file.
|
||||
|
||||
# --- targeted clang compiler ----
|
||||
|
||||
# Where to find clang installation directories
|
||||
CLANG_PREFIX?=$(LEVEL)/clang/install
|
||||
# Where to find clang headers (possibly a list, see below)
|
||||
CLANG_INCLUDES?=$(CLANG_PREFIX)/include
|
||||
|
||||
# example of alternative paths to compile and load the plugin into a locally compiled, not yet installed llvm/clang
|
||||
#CLANG_PREFIX=llvm-build/Debug+Asserts
|
||||
#CLANG_INCLUDES=llvm/tools/clang/include llvm-build/tools/clang/include llvm-build/include llvm/include
|
||||
|
||||
# target compiler, must match the exact same version of clang as the include files
|
||||
CLANG?=$(CLANG_PREFIX)/bin/clang
|
||||
|
||||
LLVM_CXXFLAGS?=`$(CLANG_PREFIX)/bin/llvm-config --cxxflags 2>/dev/null || true`
|
||||
LLVM_LDFLAGS?=`$(CLANG_PREFIX)/bin/llvm-config --ldflags --libs --system-libs 2>/dev/null || true`
|
||||
|
||||
# --- local clang compiler ---
|
||||
|
||||
# Which compiler to use to compile the plugin themselves.
|
||||
LOCAL_CLANG?=clang
|
||||
CC=$(LOCAL_CLANG)
|
||||
CXX=$(LOCAL_CLANG)++
|
||||
|
||||
# Which preprocessor to use to extract ATD comments from cpp files.
|
||||
# @requires clang >= 3.4 (The nonstandard part here is that we want to expand doc-comments contained in macros.)
|
||||
ATD_CPP?=$(LOCAL_CLANG) -cc1 -E -traditional-cpp -w -P -main-file-name - -o -
|
||||
|
||||
# Which preprocessor to use on ocaml "pre-source" files.
|
||||
OCAML_CPP?=$(LOCAL_CLANG) -cc1 -E -P -x c -main-file-name - -o -
|
||||
|
||||
# --- Objective C ---
|
||||
|
||||
# Which SDK to use (if any)
|
||||
SDKPATH?=$(shell ls -d "`xcode-select --print-path 2> /dev/null`"/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator*.sdk 2> /dev/null | sort -r | head -n 1 || true)
|
||||
|
||||
ifeq ($(SDKPATH),)
|
||||
HAS_OBJC=no
|
||||
else
|
||||
HAS_OBJC=yes
|
||||
endif
|
@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
build/%.o: %.cpp $(HEADERS) $(CLANG)
|
||||
@mkdir -p $$(dirname $@)
|
||||
$(CXX) $(CFLAGS) -c $< -o $@
|
@ -0,0 +1,42 @@
|
||||
Facebook Clang Plugins
|
||||
======================
|
||||
|
||||
This [repository](https://github.com/facebook/facebook-clang-plugins) aims to share some useful clang plugins developed at Facebook. They are mostly used by [infer](https://github.com/facebook/infer).
|
||||
|
||||
It contains frontend plugins to the [clang compiler](http://clang.llvm.org/) to process the syntax of source files directly to accomplish more general tasks; specifically, we have developed a clang-to-ocaml bridge to make code analyses easier.
|
||||
|
||||
Structure of the repository
|
||||
---------------------------
|
||||
|
||||
- [`libtooling`](https://github.com/facebook/facebook-clang-plugins/tree/master/libtooling) : frontend plugins (currently a clang-to-json AST exporter),
|
||||
|
||||
- [`clang-ocaml`](https://github.com/facebook/facebook-clang-plugins/tree/master/clang-ocaml) : OCaml libraries to process the JSON output of frontend plugins,
|
||||
|
||||
|
||||
Quick start
|
||||
-----------
|
||||
|
||||
The current version of the plugins requires recent version of the clang compiler, re-compiled from source. Clang source which is used by this project can be found in `clang/src/`
|
||||
|
||||
General instructions to compile clang can be found here: http://clang.llvm.org/get_started.html
|
||||
|
||||
To compile and use the required version of clang, please run ./clang/setup.sh.
|
||||
Using this script should make the variable CLANG_PREFIX unnecessary to compile the plugin.
|
||||
|
||||
Caveat:
|
||||
- Because of the nature of C++, clang and the plugins need to be compiled with the exact same C++ libraries.
|
||||
- Also, the default stripping command of clang in release mode breaks plugins.
|
||||
|
||||
Once the target compiler is installed, `make test` should run the unit tests.
|
||||
|
||||
OCaml users may also run:
|
||||
```
|
||||
make -C clang-ocaml test #requires proper ocaml libraries, see included clang-ocaml/README
|
||||
```
|
||||
|
||||
Additional configuration options are available in `Makefile.config`.
|
||||
|
||||
Licence
|
||||
-------
|
||||
|
||||
The plugins are MIT-licensed.
|
@ -0,0 +1,2 @@
|
||||
margin 100
|
||||
version 0.5
|
@ -0,0 +1,162 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
.PHONY: all clean test
|
||||
|
||||
LEVEL=..
|
||||
include $(LEVEL)/Makefile.common
|
||||
|
||||
LIBTOOLING=$(LEVEL)/libtooling
|
||||
ATDLIB=$(LEVEL)/libtooling/atdlib
|
||||
|
||||
# see README for the required versions
|
||||
ATDGEN=atdgen
|
||||
ATDCAT=atdcat -i
|
||||
|
||||
OCAMLOPT=ocamlfind ocamlopt -package unix,atdgen,atdgen-runtime,camlzip -I build -safe-string
|
||||
|
||||
all: build/clang_ast_converter build/clang_ast_named_decl_printer
|
||||
|
||||
# type definitions
|
||||
%_t.ml %_t.mli: %.atd
|
||||
$(ATDGEN) -t -o $* $<
|
||||
|
||||
# yojson
|
||||
%_j.ml %_j.mli: %.atd
|
||||
$(ATDGEN) -j -o $* $<
|
||||
|
||||
# biniou
|
||||
%_b.ml %_b.mli: %.atd
|
||||
$(ATDGEN) -b -o $* $<
|
||||
|
||||
# validator
|
||||
%_v.ml %_v.mli: %.atd
|
||||
$(ATDGEN) -v -o $* $<
|
||||
|
||||
# standard ocaml rules
|
||||
build/%.cmx:%.ml
|
||||
$(OCAMLOPT) -o $@ -c $<
|
||||
|
||||
build/%.cmi:%.mli
|
||||
$(OCAMLOPT) -o $@ -c $<
|
||||
|
||||
build/%.cmx:build/%.ml
|
||||
$(OCAMLOPT) -o $@ -c $<
|
||||
|
||||
build/%.cmi:build/%.mli
|
||||
$(OCAMLOPT) -o $@ -c $<
|
||||
|
||||
# clang AST
|
||||
build/ast_inline.atd.p: $(LIBTOOLING)/ASTExporter.h
|
||||
@mkdir -p build
|
||||
@$(MAKE) -C $(LIBTOOLING) build/ASTExporter.h.p
|
||||
$(ATDLIB)/extract_atd_from_cpp.py $(LIBTOOLING)/build/ASTExporter.h.p | $(ATDLIB)/normalize_names_in_atd.py > $@
|
||||
|
||||
build/ast_inline.atd: build/ast_inline.atd.p
|
||||
$(ATD_CPP) $< > $@
|
||||
|
||||
build/clang_ast.atd: build/ast_inline.atd
|
||||
# $(ATDCAT) returns 0 even if it fails - look at the output file to
|
||||
# determine whether it failed or not. Then remove the result file as
|
||||
# make misteriously doesn't do that by itself
|
||||
$(ATDCAT) $< > $@ && { [ -s $@ ] || { rm $@; exit 1; }; }
|
||||
|
||||
build/ast_inline.atd.inc: build/ast_inline.atd.p
|
||||
cat $< | grep '^#' > $@
|
||||
|
||||
build/ast_inline.pat.inc: build/ast_inline.atd.inc
|
||||
cat $< | sed 's/*/,/g; s/ list/_list/g' > $@
|
||||
|
||||
build/clang_ast_proj.mli: clang_ast_proj.mli.p build/ast_inline.atd.inc
|
||||
cat $< | $(ATD_CPP) -include build/ast_inline.atd.inc > $@
|
||||
|
||||
build/clang_ast_proj.ml: clang_ast_proj.ml.p build/ast_inline.pat.inc
|
||||
$(OCAML_CPP) -I$(CLANG_PREFIX)/include $< -o - | $(ATDLIB)/normalize_names_in_atd.py | $(ATD_CPP) -include build/ast_inline.pat.inc > $@
|
||||
|
||||
# test files except for Objective-C
|
||||
TEST_FILES_COMMON=c_attributes.c bind_temporary.cpp \
|
||||
c_cast.cpp const_cast.cpp dynamic_cast.cpp expr_with_cleanups.cpp inheritance.cpp \
|
||||
lambda.cpp materialize_temporary.cpp namespace_decl.cpp new.cpp struct.cpp this.cpp \
|
||||
unresolved_lookup.cpp using_directive.cpp class_template.cpp function_template.cpp \
|
||||
type_trait.cpp no_except_expr.cpp friend.cpp
|
||||
|
||||
TEST_FILES=$(TEST_FILES_COMMON)
|
||||
|
||||
# only add Objective-C(++) files on mac
|
||||
ifeq ($(HAS_OBJC),yes)
|
||||
TEST_FILES+=Hello.m ObjCTest.m ObjCBridgeTransferTest.m objcpp_template_unboxing.mm
|
||||
endif
|
||||
|
||||
PRINTER_TEST_FILES=$(TEST_FILES)
|
||||
CONVERTER_TEST_FILE=struct.cpp
|
||||
YOJSON_VALIDATOR_TEST_FILE=$(TEST_FILES)
|
||||
|
||||
# simple library for composing unix processes
|
||||
build/process_test: build/process.cmx build/process_test.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
# Utilities
|
||||
build/utils_test: build/process.cmx build/utils.cmx build/utils_test.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
CLANG_AST_LIBS=$(patsubst %,build/%.cmx,clang_ast_types clang_ast_t clang_ast_j process utils yojson_utils)
|
||||
|
||||
build/yojson_utils_test: $(CLANG_AST_LIBS) build/yojson_utils_test.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
build/clang_ast_proj_test: $(CLANG_AST_LIBS) build/clang_ast_proj.cmx build/clang_ast_proj_test.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
# AST format converter
|
||||
build/clang_ast_converter: $(CLANG_AST_LIBS) build/clang_ast_converter.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
CLANG_AST_PROJ_LIBS=$(patsubst %,build/%.cmx,clang_ast_types clang_ast_t clang_ast_j clang_ast_proj clang_ast_visit clang_ast_v clang_ast_main)
|
||||
|
||||
# example of AST visitor
|
||||
build/clang_ast_named_decl_printer: $(CLANG_AST_PROJ_LIBS) build/clang_ast_named_decl_printer.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
build/clang_ast_main_test: $(CLANG_AST_PROJ_LIBS) build/clang_ast_main_test.cmx
|
||||
$(OCAMLOPT) -linkpkg -o $@ $^
|
||||
|
||||
test: $(patsubst %,build/%,process_test utils_test yojson_utils_test clang_ast_proj_test clang_ast_converter clang_ast_named_decl_printer clang_ast_main_test)
|
||||
@$(MAKE) -C $(LIBTOOLING) $(PRINTER_TEST_FILES:%=build/ast_samples/%.yjson) $(TEST_FILES:%=build/ast_samples/%.yjson.gz) $(CONVERTER_TEST_FILE:%=build/ast_samples/%.yjson)
|
||||
@export LIMIT=100; \
|
||||
$(RUNTEST) tests/process_test build/process_test; \
|
||||
$(RUNTEST) tests/utils_test build/utils_test; \
|
||||
$(RUNTEST) tests/yojson_utils_test build/yojson_utils_test; \
|
||||
$(RUNTEST) tests/clang_ast_proj_test build/clang_ast_proj_test; \
|
||||
if [ "$(HAS_OBJC)" = "yes" ]; then \
|
||||
$(RUNTEST) tests/clang_ast_named_decl_printer build/clang_ast_named_decl_printer $(PRINTER_TEST_FILES:%=$(LIBTOOLING)/build/ast_samples/%.yjson); \
|
||||
else \
|
||||
printf "[~] %s skipped (no Objective-C support)\n" clang_ast_named_decl_printer; \
|
||||
fi; \
|
||||
$(RUNTEST) tests/clang_ast_converter build/clang_ast_converter --pretty $(CONVERTER_TEST_FILE:%=$(LIBTOOLING)/build/ast_samples/%.yjson); \
|
||||
$(RUNTEST) tests/clang_ast_yojson_validation ./yojson_validator.sh build/clang_ast_converter $(YOJSON_VALIDATOR_TEST_FILE:%=$(LIBTOOLING)/build/ast_samples/%.yjson.gz); \
|
||||
if [ "$(HAS_OBJC)" = "yes" ]; then \
|
||||
$(RUNTEST) tests/clang_ast_main_test build/clang_ast_main_test $(PRINTER_TEST_FILES:%=$(LIBTOOLING)/build/ast_samples/%.yjson); \
|
||||
else \
|
||||
printf "[~] %s skipped (no Objective-C support)\n" clang_ast_main_test; \
|
||||
fi
|
||||
@if [ ! $$KEEP_TEST_OUTPUTS ]; then rm -f tests/*.out; fi
|
||||
|
||||
record-test-outputs:
|
||||
@rm -f tests/*.out
|
||||
@$(MAKE) DEBUG=1 KEEP_TEST_OUTPUTS=1 test || true
|
||||
@for F in tests/*.out; do cp $$F $${F%.out}.exp; done
|
||||
@rm -f tests/*.out
|
||||
|
||||
.PHONY: fmt
|
||||
fmt:
|
||||
ocamlformat -i $(wildcard *.ml) $(wildcard *.mli)
|
||||
|
||||
-include .depend
|
||||
|
||||
.depend: $(wildcard *.ml) $(wildcard *.mli) build/clang_ast_t.mli build/clang_ast_t.ml build/clang_ast_j.mli build/clang_ast_j.ml build/clang_ast_v.mli build/clang_ast_v.ml build/clang_ast_proj.mli build/clang_ast_proj.ml
|
||||
ocamldep -native -I build $^ | sed -e 's/\([a-zA-Z0-9_]*\.cm.\)/build\/\1/g' | sed -e 's/build\/build\//build\//g' > .depend
|
||||
|
||||
clean:
|
||||
rm -rf tests/*.out build .depend
|
@ -0,0 +1,95 @@
|
||||
|
||||
# Ocaml frontend to the Clang AST
|
||||
|
||||
|
||||
Additional requirements:
|
||||
- ocaml >= 4.02
|
||||
- camlzip
|
||||
- yojson
|
||||
- atd >= 1.1.2
|
||||
- atdgen >= 2.0.0
|
||||
|
||||
The simplest way to install these dependencies is
|
||||
1) to install ocaml and opam using your system package manager (e.g. homebrew on MAC OS).
|
||||
2) run 'opam install camlzip yojson atd atdgen'
|
||||
|
||||
Assuming that the current dir is the root of the git repository and CLANG_PREFIX=/usr/local, you may compile and run tests with
|
||||
```
|
||||
export CLANG_PREFIX=/usr/local
|
||||
make -C clang-ocaml depend
|
||||
make -C clang-ocaml test
|
||||
```
|
||||
|
||||
## API details
|
||||
|
||||
The precise AST datatype is described using the "ATD" language. To view the generated ATD file, run `make all` in this directory and then open `build/clang_ast.atd`. That should be enough to get started.
|
||||
|
||||
The sections below describe extra functionality for visiting and manipulating the AST from OCaml.
|
||||
|
||||
### Autogenerated utility functions
|
||||
|
||||
The `Clang_ast_proj` module provides utility functions for AST nodes. Its implementation is autogenerated from the header files provided by the current version of clang. Always prefer to use utility functions from this module vs writing them manually.
|
||||
Refer to [clang_ast_proj.mli.p](clang_ast_proj.mli.p) for a list of currently available functions.
|
||||
|
||||
### Visitors
|
||||
|
||||
The `Clang_ast_visit` module provides hooks to be run on AST nodes. Currently there is support for visitors in `Decl`, `Stmt`, `Type` and `SourceLocation` nodes. Here is basic example, that prints kinds of all decl and stmt nodes:
|
||||
```OCaml
|
||||
let print_decl _ decl =
|
||||
prerr (Clang_ast_proj.get_decl_kind_string decl)
|
||||
|
||||
let print_stmt _ stmt =
|
||||
prerr (Clang_ast_proj.get_stmt_kind_string decl)
|
||||
|
||||
let print_ast decl =
|
||||
Clang_ast_visit.decl_visitor := print_decl;
|
||||
Clang_ast_visit.stmt_visitor := print_stmt;
|
||||
ignore (Clang_ast_v.validate_decl [] decl)
|
||||
```
|
||||
|
||||
See [`clang_ast_main.ml`](clang_ast_main.ml) for an example of how to use this mechanism to produce maps from node pointers to the nodes they refer to. See `Clang_ast_main.visit_ast` for an example wrapper that provides a convenient API to the `Clang_ast_visit` module.
|
||||
|
||||
See [`clang_ast_visit.ml`](clang_ast_visit.ml) for the current list of nodes that support custom visitors.
|
||||
|
||||
For more examples of custom visitors, see [`clang_ast_main_test.ml`](clang_ast_main_test.ml).
|
||||
|
||||
### Extending types from AST
|
||||
|
||||
It's possible to extend existing OCaml variant types in the AST structure with more variants. Currently, `type_ptr` is the only type that allows it. It's achieved via an [OCaml extensible variant type](https://caml.inria.fr/pub/docs/manual-ocaml/extn.html#sec252).
|
||||
|
||||
For example, see how [infer's frontend](https://github.com/facebook/infer/blob/8c6615963f79f03a644ae9087eb160da89a09a1a/infer/src/clang/clang_ast_extend.ml) uses this feature to extend `type_ptr`.
|
||||
|
||||
|
||||
## Implementation details
|
||||
|
||||
High level:
|
||||
- The plugin YojsonASTExporter defined in libtooling/ASTExporter.cpp outputs AST trees in an extended JSON format called "Yojson". Respectively, BiniouASTExporter outputs the AST in the "Biniou" format.
|
||||
|
||||
- Most of the ATD definitions are embedded in the C++ code of the ASTExporter. Refer to [ATD guidelines](../libtooling/ATD_GUIDELINES.md) for more information.
|
||||
|
||||
- We use scripts in libtooling/atdlib to extract and process the ATD definitions, then we use `atdgen` to generate the OCaml type definitions and json stub.
|
||||
|
||||
Utility functions in `Clang_ast_proj`:
|
||||
- This module relies heavily on the C preprocessor - it uses information from clang headers to generate OCaml code.
|
||||
- Clang provides `.inc` and `.def` files that provide information about available Node kinds. For example, [`TypeNode.def`](https://github.com/llvm-mirror/clang/blob/fe32c6a33461a8c60e18c0414d4844a47442328a/include/clang/AST/TypeNodes.def) contains information about all possible types that clang can produce. Internally clang uses the same headers.
|
||||
- In order to add new function, one needs to identify clang header that contains relevant information. Sometimes it's useful to read clang codebase to see how certain enums are generated - usually clang includes same headers to generate them. For example decl kind enum is [defined](https://github.com/llvm-mirror/clang/blob/c5dd58546ce4d20cd71cc26cb790e7f91c8f908f/include/clang/AST/DeclBase.h#L84-L91) by including `clang/AST/DeclNodes.inc` file.
|
||||
- Refer to existing code to see how to generate OCaml code with the C preprocessor.
|
||||
- If something doesn't work, `build/Clang_ast_proj.ml` will contain generated code. This way, it's easier to see what happens during macro expansion.
|
||||
|
||||
Visitors:
|
||||
- Implemented via [atdgen validation](https://mjambon.github.io/atdgen-doc/atdgen#field-validator)
|
||||
- Adding support for a new visitor requires changing ATD annotations in ASTExporter and modifying `Clang_ast_visit.ml`
|
||||
- Refer to existing visitors to see how it's done
|
||||
- It is possible to modify the current node inside a visitor as long as its fields are mutable
|
||||
|
||||
Extensible variants:
|
||||
- Implemented via [atdgen custom wrapper](https://mjambon.github.io/atdgen-doc/atdgen#field-t). It defines `type_ptr` to be extensible variant.
|
||||
- When looking at Yojson/Biniou output, `type_ptr` will be of type int. It's up to atdgen serializer to call `wrap`/`unwrap`
|
||||
|
||||
Testing:
|
||||
- The main program [`clang_ast_yojson_validator.ml`](clang_ast_yojson_validator.ml) is meant to parse, re-print, and compare yojson files emitted by ASTExporter. We use ydump (part of the yojson package) to normalize the original json and the re-emitted json before comparing them.
|
||||
- `clang_ast_main_test.ml` runs custom validators to confirm that visitors work as expected. Its output is recorded and checked into repository.
|
||||
|
||||
## ATD docs
|
||||
https://mjambon.github.io/atdgen-doc/atdgen
|
||||
https://mjambon.github.io/atdgen-doc/atd-syntax
|
@ -0,0 +1,8 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
let () = Yojson_utils.run_converter_tool Clang_ast_j.read_decl Clang_ast_j.write_decl
|
@ -0,0 +1,116 @@
|
||||
(*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
module PointerOrd = struct
|
||||
type t = int
|
||||
|
||||
let compare (i: int) (j: int) = i - j
|
||||
end
|
||||
|
||||
module PointerMap = Map.Make (PointerOrd)
|
||||
|
||||
let declMap = ref PointerMap.empty
|
||||
|
||||
let stmtMap = ref PointerMap.empty
|
||||
|
||||
let typeMap = ref PointerMap.empty
|
||||
|
||||
let ivarToPropertyMap = ref PointerMap.empty
|
||||
|
||||
let empty_v = Clang_ast_visit.empty_visitor
|
||||
|
||||
(* This function is not thread-safe *)
|
||||
let visit_ast ?(visit_decl= empty_v) ?(visit_stmt= empty_v) ?(visit_type= empty_v)
|
||||
?(visit_src_loc= empty_v) top_decl =
|
||||
Clang_ast_visit.decl_visitor := visit_decl ;
|
||||
Clang_ast_visit.stmt_visitor := visit_stmt ;
|
||||
Clang_ast_visit.type_visitor := visit_type ;
|
||||
Clang_ast_visit.source_location_visitor := visit_src_loc ;
|
||||
(* visit *)
|
||||
ignore (Clang_ast_v.validate_decl [] top_decl)
|
||||
|
||||
|
||||
let get_ptr_from_node node =
|
||||
match node with
|
||||
| `DeclNode decl ->
|
||||
let decl_info = Clang_ast_proj.get_decl_tuple decl in
|
||||
decl_info.Clang_ast_t.di_pointer
|
||||
| `StmtNode stmt ->
|
||||
let stmt_info, _ = Clang_ast_proj.get_stmt_tuple stmt in
|
||||
stmt_info.Clang_ast_t.si_pointer
|
||||
| `TypeNode c_type ->
|
||||
let type_info = Clang_ast_proj.get_type_tuple c_type in
|
||||
type_info.Clang_ast_t.ti_pointer
|
||||
|
||||
|
||||
let get_val_from_node node =
|
||||
match node with `DeclNode decl -> decl | `StmtNode stmt -> stmt | `TypeNode c_type -> c_type
|
||||
|
||||
|
||||
let add_node_to_cache node cache =
|
||||
let key = get_ptr_from_node node in
|
||||
let value = get_val_from_node node in
|
||||
cache := PointerMap.add key value !cache
|
||||
|
||||
|
||||
let process_decl _path decl =
|
||||
add_node_to_cache (`DeclNode decl) declMap ;
|
||||
match decl with
|
||||
| Clang_ast_t.ObjCPropertyDecl (_, _, obj_c_property_decl_info) -> (
|
||||
match obj_c_property_decl_info.Clang_ast_t.opdi_ivar_decl with
|
||||
| Some decl_ref ->
|
||||
let ivar_pointer = decl_ref.Clang_ast_t.dr_decl_pointer in
|
||||
ivarToPropertyMap := PointerMap.add ivar_pointer decl !ivarToPropertyMap
|
||||
| None ->
|
||||
() )
|
||||
| _ ->
|
||||
()
|
||||
|
||||
|
||||
let add_stmt_to_cache _path stmt = add_node_to_cache (`StmtNode stmt) stmtMap
|
||||
|
||||
let add_type_to_cache _path c_type = add_node_to_cache (`TypeNode c_type) typeMap
|
||||
|
||||
let previous_sloc = {Clang_ast_t.sl_file= None; sl_line= None; sl_column= None}
|
||||
|
||||
let get_sloc current previous = match current with None -> previous | Some _ -> current
|
||||
|
||||
let mutate_sloc sloc file line column =
|
||||
let open Clang_ast_t in
|
||||
sloc.sl_file <- file ;
|
||||
sloc.sl_line <- line ;
|
||||
sloc.sl_column <- column
|
||||
|
||||
|
||||
let reset_sloc sloc = mutate_sloc sloc None None None
|
||||
|
||||
let complete_source_location _path source_loc =
|
||||
let open Clang_ast_t in
|
||||
let file = get_sloc source_loc.sl_file previous_sloc.sl_file in
|
||||
let line = get_sloc source_loc.sl_line previous_sloc.sl_line in
|
||||
let column = get_sloc source_loc.sl_column previous_sloc.sl_column in
|
||||
mutate_sloc source_loc file line column ;
|
||||
mutate_sloc previous_sloc file line column
|
||||
|
||||
|
||||
let reset_cache () =
|
||||
declMap := PointerMap.empty ;
|
||||
stmtMap := PointerMap.empty ;
|
||||
typeMap := PointerMap.empty ;
|
||||
ivarToPropertyMap := PointerMap.empty ;
|
||||
reset_sloc previous_sloc
|
||||
|
||||
|
||||
(* This function is not thread-safe *)
|
||||
let index_node_pointers top_decl =
|
||||
(* just in case *)
|
||||
reset_cache () ;
|
||||
(* populate cache *)
|
||||
visit_ast ~visit_decl:process_decl ~visit_stmt:add_stmt_to_cache ~visit_type:add_type_to_cache
|
||||
~visit_src_loc:complete_source_location top_decl ;
|
||||
let result = (!declMap, !stmtMap, !typeMap, !ivarToPropertyMap) in
|
||||
reset_cache () ; result
|
@ -0,0 +1,73 @@
|
||||
(*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
exception PointerMismatch
|
||||
|
||||
let validate_ptr key_ptr node =
|
||||
let node_ptr = Clang_ast_main.get_ptr_from_node node in
|
||||
if node_ptr != key_ptr then raise PointerMismatch
|
||||
|
||||
|
||||
let validate_decl_ptr key_ptr decl = validate_ptr key_ptr (`DeclNode decl)
|
||||
|
||||
let validate_stmt_ptr key_ptr stmt = validate_ptr key_ptr (`StmtNode stmt)
|
||||
|
||||
let validate_type_ptr key_ptr c_type = validate_ptr key_ptr (`TypeNode c_type)
|
||||
|
||||
let print_node path kind_str =
|
||||
let indent = String.make (List.length path) ' ' in
|
||||
prerr_string indent ; prerr_string kind_str ; prerr_newline ()
|
||||
|
||||
|
||||
let sloc_to_str sloc =
|
||||
let opt_to_str to_str_f v = match v with Some x -> to_str_f x | None -> "None" in
|
||||
let file_str = opt_to_str (fun f -> f) sloc.Clang_ast_t.sl_file in
|
||||
let line_str = opt_to_str string_of_int sloc.Clang_ast_t.sl_line in
|
||||
let column_str = opt_to_str string_of_int sloc.Clang_ast_t.sl_column in
|
||||
file_str ^ ":" ^ line_str ^ ":" ^ column_str
|
||||
|
||||
|
||||
let src_range_to_str range =
|
||||
let first, last = range in
|
||||
sloc_to_str first ^ " " ^ sloc_to_str last
|
||||
|
||||
|
||||
let print_decl path decl =
|
||||
let kind_str = Clang_ast_proj.get_decl_kind_string decl in
|
||||
let decl_info = Clang_ast_proj.get_decl_tuple decl in
|
||||
let src_str = src_range_to_str decl_info.Clang_ast_t.di_source_range in
|
||||
print_node path (kind_str ^ " " ^ src_str)
|
||||
|
||||
|
||||
let print_stmt path stmt = print_node path (Clang_ast_proj.get_stmt_kind_string stmt)
|
||||
|
||||
let print_map_size map =
|
||||
let s = Clang_ast_main.PointerMap.cardinal map in
|
||||
prerr_string (string_of_int s ^ " ")
|
||||
|
||||
|
||||
let check_decl_cache_from_file fname =
|
||||
let ast = Atdgen_runtime.Util.Json.from_file Clang_ast_j.read_decl fname in
|
||||
let decl_cache, stmt_cache, type_cache, _ = Clang_ast_main.index_node_pointers ast in
|
||||
print_map_size decl_cache ;
|
||||
print_map_size stmt_cache ;
|
||||
print_map_size type_cache ;
|
||||
prerr_newline () ;
|
||||
Clang_ast_main.PointerMap.iter validate_decl_ptr decl_cache ;
|
||||
Clang_ast_main.PointerMap.iter validate_stmt_ptr stmt_cache ;
|
||||
Clang_ast_main.PointerMap.iter validate_type_ptr type_cache ;
|
||||
Clang_ast_main.visit_ast ~visit_decl:print_decl ~visit_stmt:print_stmt ast
|
||||
|
||||
|
||||
let main =
|
||||
let v = Sys.argv in
|
||||
try for i = 1 to Array.length v - 1 do check_decl_cache_from_file v.(i) done with
|
||||
| PointerMismatch ->
|
||||
prerr_string "Pointer in cache doesn't match" ;
|
||||
exit 1
|
||||
| Yojson.Json_error s | Atdgen_runtime.Oj_run.Error s ->
|
||||
prerr_string s ; prerr_newline () ; exit 1
|
@ -0,0 +1,34 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
module P = Printf
|
||||
|
||||
let rec visit_named_decls f decl =
|
||||
let () =
|
||||
match Clang_ast_proj.get_named_decl_tuple decl with Some (x, y) -> f x y | None -> ()
|
||||
in
|
||||
match Clang_ast_proj.get_decl_context_tuple decl with
|
||||
| Some (l, _) ->
|
||||
List.iter (visit_named_decls f) l
|
||||
| None ->
|
||||
()
|
||||
|
||||
|
||||
let print_named_decl_from_file fname =
|
||||
let ast = Atdgen_runtime.Util.Json.from_file Clang_ast_j.read_decl fname in
|
||||
let getname name_info = name_info.Clang_ast_t.ni_name in
|
||||
visit_named_decls
|
||||
(fun _ info ->
|
||||
print_string (getname info) ;
|
||||
print_newline () )
|
||||
ast
|
||||
|
||||
|
||||
let main =
|
||||
try Array.iteri (fun i arg -> if i <> 0 then print_named_decl_from_file arg) Sys.argv with
|
||||
| Yojson.Json_error s | Atdgen_runtime.Oj_run.Error s ->
|
||||
prerr_string s ; prerr_newline () ; exit 1
|
@ -0,0 +1,225 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Clang_ast_t
|
||||
|
||||
#define s(x) #x
|
||||
|
||||
let get_decl_kind_string = function
|
||||
#define DECL(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> s(DERIVED) ^ "Decl"
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
|
||||
let get_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> (decl_tuple)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
|
||||
let update_decl_tuple __f = function
|
||||
#define DECL(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (decl_tuple) = __f (decl_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
|
||||
|
||||
let get_decl_context_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define MY_DECL_CONTEXT(DERIVED) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (decl_context_tuple)
|
||||
(* skipping Function and ObjCMethod *)
|
||||
#define TAG(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define OBJCCONTAINER(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define CAPTURED(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define LINKAGESPEC(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define NAMESPACE(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define TRANSLATIONUNIT(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
#undef MY_DECL_CONTEXT
|
||||
| _ -> None
|
||||
|
||||
let update_decl_context_tuple __f = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define MY_DECL_CONTEXT(DERIVED) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (decl_context_tuple) = __f (decl_context_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
(* skipping Function and ObjCMethod *)
|
||||
#define TAG(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define OBJCCONTAINER(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define CAPTURED(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define LINKAGESPEC(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define NAMESPACE(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#define TRANSLATIONUNIT(DERIVED, BASE) MY_DECL_CONTEXT(DERIVED)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
#undef MY_DECL_CONTEXT
|
||||
| x -> x
|
||||
|
||||
|
||||
let get_function_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define FUNCTION(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (function_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let get_named_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define NAMED(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (named_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_named_decl_tuple __f = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define NAMED(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (named_decl_tuple) = __f (named_decl_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| x -> x
|
||||
|
||||
|
||||
let get_type_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define TYPE(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (type_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_type_decl_tuple __f = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define TYPE(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (type_decl_tuple) = __f (type_decl_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| x -> x
|
||||
|
||||
|
||||
let get_tag_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define TAG(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (tag_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_tag_decl_tuple __f = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define TAG(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (tag_decl_tuple) = __f (tag_decl_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| x -> x
|
||||
|
||||
|
||||
let get_var_decl_tuple = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define VAR(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> Some (var_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_var_decl_tuple __f = function
|
||||
#define DECL(DERIVED, BASE)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#define VAR(DERIVED, BASE) | DERIVED@@Decl (@DERIVED@_decl_tuple) -> \
|
||||
let (var_decl_tuple) = __f (var_decl_tuple) in DERIVED@@Decl (@DERIVED@_decl_tuple)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
| x -> x
|
||||
|
||||
|
||||
let get_stmt_kind_string = function
|
||||
#define STMT(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> s(CLASS)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
|
||||
let get_stmt_tuple = function
|
||||
#define STMT(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> (stmt_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
|
||||
let update_stmt_tuple __f = function
|
||||
#define STMT(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> \
|
||||
let (stmt_tuple) = __f (stmt_tuple) in CLASS (@CLASS@_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
|
||||
|
||||
let get_expr_tuple = function
|
||||
#define STMT(CLASS, PARENT)
|
||||
#define EXPR(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> Some (expr_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_expr_tuple __f = function
|
||||
#define STMT(CLASS, PARENT)
|
||||
#define EXPR(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> \
|
||||
let (expr_tuple) = __f (expr_tuple) in CLASS (@CLASS@_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
| x -> x
|
||||
|
||||
let get_cxx_construct_expr_tuple = function
|
||||
#define STMT(CLASS, PARENT)
|
||||
#define CXXCONSTRUCTEXPR(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> Some (cxx_construct_expr_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
| _ -> None
|
||||
|
||||
let update_cxx_construct_expr_tuple __f = function
|
||||
#define STMT(CLASS, PARENT)
|
||||
#define CXXCONSTRUCTEXPR(CLASS, PARENT) | CLASS (@CLASS@_tuple) -> \
|
||||
let (cxx_construct_expr_tuple) = __f (cxx_construct_expr_tuple) in CLASS (@CLASS@_tuple)
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
| x -> x
|
||||
|
||||
let get_type_tuple = function
|
||||
#define TYPE(DERIVED, BASE) | DERIVED@@Type (@DERIVED@_type_tuple) -> (type_tuple)
|
||||
#define ABSTRACT_TYPE(DERIVED, BASE)
|
||||
TYPE(None, Type) (* special case for nullptr type *)
|
||||
#include <clang/AST/TypeNodes.def>
|
||||
|
||||
let is_valid_binop_kind_name = function
|
||||
#define BINARY_OPERATION(Name, Spelling) | s(Name) -> true
|
||||
#include <clang/AST/OperationKinds.def>
|
||||
| _ -> false
|
||||
|
||||
let is_valid_unop_kind_name = function
|
||||
#define UNARY_OPERATION(Name, Spelling) | s(Name) -> true
|
||||
#include <clang/AST/OperationKinds.def>
|
||||
| _ -> false
|
||||
|
||||
let string_of_binop_kind = function
|
||||
#define BINARY_OPERATION(Name, Spelling) | `Name -> s(Name)
|
||||
#include <clang/AST/OperationKinds.def>
|
||||
|
||||
let string_of_unop_kind = function
|
||||
#define UNARY_OPERATION(Name, Spelling) | `Name -> s(Name)
|
||||
#include <clang/AST/OperationKinds.def>
|
||||
|
||||
let is_valid_astnode_kind = function
|
||||
#define DECL(DERIVED, BASE) | s(DERIVED@@Decl) -> true
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
#define STMT(CLASS, PARENT) | s(CLASS) -> true
|
||||
#define ABSTRACT_STMT(STMT)
|
||||
#include <clang/AST/StmtNodes.inc>
|
||||
| _ -> false
|
||||
|
||||
let string_of_cast_kind = function
|
||||
#define CAST_OPERATION(Name) | `Name -> s(Name)
|
||||
#include <clang/AST/OperationKinds.def>
|
||||
|
||||
let get_cast_kind = function
|
||||
#define STMT(CLASS, PARENT)
|
||||
#define ABSTRACT_STMT(TYPE)
|
||||
#define CASTEXPR(Type, Base) | Type (_, _, _, cast_expr_info)
|
||||
#define EXPLICITCASTEXPR(Type, Base) | Type (_, _, _, cast_expr_info, _)
|
||||
#define CXXNAMEDCASTEXPR(Type, Base) | Type (_, _, _, cast_expr_info, _, _)
|
||||
#define OBJCBRIDGEDCASTEXPR(Type, Base) | Type (_, _, _, cast_expr_info, _, _)
|
||||
#include<clang/AST/StmtNodes.inc>
|
||||
-> Some cast_expr_info.cei_cast_kind
|
||||
| _ -> None
|
@ -0,0 +1,41 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Clang_ast_t
|
||||
|
||||
val get_cast_kind : stmt -> cast_kind option
|
||||
val get_decl_context_tuple : decl -> (decl_context_tuple) option
|
||||
val get_decl_kind_string : decl -> string
|
||||
val get_decl_tuple : decl -> (decl_tuple)
|
||||
val get_expr_tuple : stmt -> (expr_tuple) option
|
||||
val get_cxx_construct_expr_tuple : stmt -> (cxx_construct_expr_tuple) option
|
||||
val get_function_decl_tuple : decl -> (function_decl_tuple) option
|
||||
val get_named_decl_tuple : decl -> (named_decl_tuple) option
|
||||
val get_stmt_kind_string : stmt -> string
|
||||
val get_stmt_tuple : stmt -> (stmt_tuple)
|
||||
val get_tag_decl_tuple : decl -> (tag_decl_tuple) option
|
||||
val get_type_decl_tuple : decl -> (type_decl_tuple) option
|
||||
val get_type_tuple : c_type -> (type_tuple)
|
||||
val get_var_decl_tuple : decl -> (var_decl_tuple) option
|
||||
|
||||
val is_valid_astnode_kind : string -> bool
|
||||
val is_valid_binop_kind_name : string -> bool
|
||||
val is_valid_unop_kind_name : string -> bool
|
||||
|
||||
val string_of_binop_kind : binary_operator_kind -> string
|
||||
val string_of_cast_kind : cast_kind -> string
|
||||
val string_of_unop_kind : unary_operator_kind -> string
|
||||
|
||||
val update_cxx_construct_expr_tuple : ((cxx_construct_expr_tuple) -> (cxx_construct_expr_tuple)) -> stmt -> stmt
|
||||
val update_decl_context_tuple : ((decl_context_tuple) -> (decl_context_tuple)) -> decl -> decl
|
||||
val update_decl_tuple : ((decl_tuple) -> (decl_tuple)) -> decl -> decl
|
||||
val update_expr_tuple : ((expr_tuple) -> (expr_tuple)) -> stmt -> stmt
|
||||
val update_named_decl_tuple : ((named_decl_tuple) -> (named_decl_tuple)) -> decl -> decl
|
||||
val update_stmt_tuple : ((stmt_tuple) -> (stmt_tuple)) -> stmt -> stmt
|
||||
val update_tag_decl_tuple : ((tag_decl_tuple) -> (tag_decl_tuple)) -> decl -> decl
|
||||
val update_type_decl_tuple : ((type_decl_tuple) -> (type_decl_tuple)) -> decl -> decl
|
||||
val update_var_decl_tuple : ((var_decl_tuple) -> (var_decl_tuple)) -> decl -> decl
|
@ -0,0 +1,122 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Utils
|
||||
open Clang_ast_t
|
||||
open Clang_ast_proj
|
||||
|
||||
let source_location ?file ?line ?column () = {sl_file= file; sl_line= line; sl_column= column}
|
||||
|
||||
let empty_source_location = source_location ()
|
||||
|
||||
let decl_info start stop =
|
||||
{ di_pointer= 0
|
||||
; di_parent_pointer= None
|
||||
; di_source_range= (start, stop)
|
||||
; di_owning_module= None
|
||||
; di_is_hidden= false
|
||||
; di_is_implicit= false
|
||||
; di_is_used= false
|
||||
; di_is_this_declaration_referenced= false
|
||||
; di_is_invalid_decl= false
|
||||
; di_attributes= []
|
||||
; di_full_comment= None
|
||||
; di_access= `None }
|
||||
|
||||
|
||||
let name_info name = {ni_name= name; ni_qual_name= [name]}
|
||||
|
||||
let append_name_info info suffix =
|
||||
{ni_name= info.ni_name ^ suffix; ni_qual_name= List.map (fun x -> x ^ suffix) info.ni_qual_name}
|
||||
|
||||
let qual_type ptr =
|
||||
{ qt_type_ptr= ptr
|
||||
; qt_is_const= false
|
||||
; qt_is_restrict= false
|
||||
; qt_is_volatile= false }
|
||||
|
||||
let var_decl_info ~is_global =
|
||||
{ vdi_is_global= is_global
|
||||
; vdi_is_extern= false
|
||||
; vdi_is_static_local= false
|
||||
; vdi_is_static_data_member= false
|
||||
; vdi_is_const_expr= false
|
||||
; vdi_is_init_ice= false
|
||||
; vdi_is_init_expr_cxx11_constant= false
|
||||
; vdi_init_expr= None
|
||||
; vdi_parm_index_in_function= None
|
||||
; vdi_is_static = false}
|
||||
|
||||
let stmt_info pointer =
|
||||
{ si_pointer= pointer
|
||||
; si_source_range= (empty_source_location, empty_source_location) }
|
||||
|
||||
let expr_info qual_type =
|
||||
{ ei_qual_type= qual_type
|
||||
; ei_value_kind= `RValue
|
||||
; ei_object_kind= `Ordinary }
|
||||
|
||||
let cxx_construct_expr_info decl_ref is_copy_constructor =
|
||||
{ xcei_decl_ref= decl_ref
|
||||
; xcei_is_elidable= false
|
||||
; xcei_requires_zero_initialization= false
|
||||
; xcei_is_copy_constructor= is_copy_constructor }
|
||||
|
||||
|
||||
let () =
|
||||
let di = decl_info empty_source_location empty_source_location in
|
||||
let decl = LabelDecl (di, name_info "foo") in
|
||||
assert_equal "get_decl_kind_string" (get_decl_kind_string decl) "LabelDecl" ;
|
||||
assert_equal "get_decl_tuple" (get_decl_tuple decl) di ;
|
||||
assert_equal "get_decl_context_tuple" (get_decl_context_tuple decl) None ;
|
||||
assert_equal "get_named_decl_tuple" (get_named_decl_tuple decl) (Some (di, name_info "foo")) ;
|
||||
assert_equal "get_type_decl_tuple" (get_type_decl_tuple decl) None ;
|
||||
assert_equal "get_tag_decl_tuple" (get_tag_decl_tuple decl) None ;
|
||||
assert_equal "is_valid_astnode_kind" (is_valid_astnode_kind (get_decl_kind_string decl)) true ;
|
||||
assert_equal "is_valid_astnode_kind" (is_valid_astnode_kind "AFakeNodeThatDoesNotExist") false ;
|
||||
let decl2 = update_named_decl_tuple (fun (di, info) -> (di, append_name_info info "bar")) decl in
|
||||
assert_equal "update_named_decl_tuple" (get_named_decl_tuple decl2)
|
||||
(Some (di, name_info "foobar")) ;
|
||||
let di2 = decl_info (source_location ~file:"bla" ()) (source_location ~file:"bleh" ()) in
|
||||
let decl3 = update_decl_tuple (fun _ -> di2) decl in
|
||||
assert_equal "update_decl_tuple" (get_decl_tuple decl3) di2 ;
|
||||
|
||||
assert_equal "get_var_decl_tuple_none" (get_var_decl_tuple decl) None ;
|
||||
let vdi = var_decl_info ~is_global:true in
|
||||
let qt = qual_type (Clang_ast_types.TypePtr.wrap 0) in
|
||||
let var_decl = ParmVarDecl(di, name_info "fooey", qt, vdi) in
|
||||
assert_equal "get_var_decl_tuple" (get_var_decl_tuple var_decl)
|
||||
(Some (di, name_info "fooey", qt, vdi)) ;
|
||||
let updated_var_decl = update_var_decl_tuple
|
||||
(fun (di, ni, qt, vdi) ->
|
||||
(di, append_name_info ni "-mod", qt, var_decl_info ~is_global:false))
|
||||
var_decl in
|
||||
assert_equal "update_var_decl_tuple" (get_var_decl_tuple updated_var_decl)
|
||||
(Some (di, name_info "fooey-mod", qt, var_decl_info ~is_global:false)) ;
|
||||
|
||||
let stmt = DoStmt(stmt_info 0, []) in
|
||||
assert_equal "get_cxx_construct_expr_tuple_from_stmt"
|
||||
(get_cxx_construct_expr_tuple stmt) None ;
|
||||
let ei = expr_info qt in
|
||||
let dr = { dr_kind= `CXXConstructor
|
||||
; dr_decl_pointer= 0
|
||||
; dr_name= None
|
||||
; dr_is_hidden= false
|
||||
; dr_qual_type= None } in
|
||||
let xcei = cxx_construct_expr_info dr true in
|
||||
let xcei2 = cxx_construct_expr_info dr false in
|
||||
let cxx_ctor_expr = CXXConstructExpr(stmt_info 1, [], ei, xcei) in
|
||||
assert_equal "get_cxx_construct_expr_tuple"
|
||||
(get_cxx_construct_expr_tuple cxx_ctor_expr)
|
||||
(Some (stmt_info 1, [], ei, xcei)) ;
|
||||
let updated_cxx_ctor_expr = update_cxx_construct_expr_tuple
|
||||
(fun (si, sl, ei, xcei) ->
|
||||
(stmt_info (si.si_pointer + 1)), sl, ei, xcei2)
|
||||
cxx_ctor_expr in
|
||||
assert_equal "update_cxx_construct_expr_tuple"
|
||||
(get_cxx_construct_expr_tuple updated_cxx_ctor_expr)
|
||||
(Some (stmt_info 2, [], ei, xcei2)) ;
|
@ -0,0 +1,17 @@
|
||||
(*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
(* Type pointers *)
|
||||
module TypePtr = struct
|
||||
(* extensible type to allow users to specify more variants *)
|
||||
type t = ..
|
||||
|
||||
type t += Ptr of int
|
||||
|
||||
let wrap x = Ptr x
|
||||
|
||||
let unwrap = function Ptr x -> x | _ -> raise (invalid_arg "Unknown variant type")
|
||||
end
|
@ -0,0 +1,47 @@
|
||||
(*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
type visit_decl_t = Atdgen_runtime.Util.Validation.path -> Clang_ast_t.decl -> unit
|
||||
|
||||
type visit_stmt_t = Atdgen_runtime.Util.Validation.path -> Clang_ast_t.stmt -> unit
|
||||
|
||||
type visit_type_t = Atdgen_runtime.Util.Validation.path -> Clang_ast_t.c_type -> unit
|
||||
|
||||
type visit_src_loc_t = Atdgen_runtime.Util.Validation.path -> Clang_ast_t.source_location -> unit
|
||||
|
||||
let empty_visitor _path _decl = ()
|
||||
|
||||
let decl_visitor = ref (empty_visitor : visit_decl_t)
|
||||
|
||||
let stmt_visitor = ref (empty_visitor : visit_stmt_t)
|
||||
|
||||
let type_visitor = ref (empty_visitor : visit_type_t)
|
||||
|
||||
let source_location_visitor = ref (empty_visitor : visit_src_loc_t)
|
||||
|
||||
let visit_decl path decl =
|
||||
!decl_visitor path decl ;
|
||||
(* return None to pass atd validation *)
|
||||
None
|
||||
|
||||
|
||||
let visit_stmt path stmt =
|
||||
!stmt_visitor path stmt ;
|
||||
(* return None to pass atd validation *)
|
||||
None
|
||||
|
||||
|
||||
let visit_type path c_type =
|
||||
!type_visitor path c_type ;
|
||||
(* return None to pass atd validation *)
|
||||
None
|
||||
|
||||
|
||||
let visit_source_loc path src_loc =
|
||||
!source_location_visitor path src_loc ;
|
||||
(* return None to pass atd validation *)
|
||||
None
|
@ -0,0 +1,8 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
let main = Yojson_utils.make_yojson_validator Clang_ast_j.read_decl Clang_ast_j.write_decl Sys.argv
|
@ -0,0 +1,125 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
module U = Unix
|
||||
|
||||
let file_exists name =
|
||||
try
|
||||
U.access name [U.F_OK] ;
|
||||
true
|
||||
with U.Unix_error _ -> false
|
||||
|
||||
|
||||
(* Forked processes will not start from 0 but this is inessential. *)
|
||||
let tmp_counter = ref 0
|
||||
|
||||
let mktemp base =
|
||||
let pid = U.getpid () in
|
||||
let rec aux () =
|
||||
let name = Printf.sprintf "%s.%d.%08d.tmp" base pid !tmp_counter in
|
||||
incr tmp_counter ;
|
||||
if
|
||||
file_exists name
|
||||
(* This should not happen unless the file is very old and the pid is reused. *)
|
||||
then aux ()
|
||||
else name
|
||||
in
|
||||
aux ()
|
||||
|
||||
|
||||
let buffer_size = 8192
|
||||
|
||||
let tee ic ocs =
|
||||
let buffer = Bytes.create buffer_size in
|
||||
let rec loop () =
|
||||
match input ic buffer 0 buffer_size with
|
||||
| 0 ->
|
||||
()
|
||||
| r ->
|
||||
List.iter (fun oc -> output oc buffer 0 r) ocs ;
|
||||
loop ()
|
||||
in
|
||||
loop ()
|
||||
|
||||
|
||||
let gzip ic oc =
|
||||
let ocz = Gzip.open_out_chan oc in
|
||||
let buffer = Bytes.create buffer_size in
|
||||
let rec loop () =
|
||||
match input ic buffer 0 buffer_size with 0 -> () | r -> Gzip.output ocz buffer 0 r ; loop ()
|
||||
in
|
||||
let success = try loop () ; true with Gzip.Error _ -> false in
|
||||
Gzip.close_out ocz ; success
|
||||
|
||||
|
||||
let gunzip ic oc =
|
||||
let icz = Gzip.open_in_chan ic in
|
||||
let buffer = Bytes.create buffer_size in
|
||||
let rec loop () =
|
||||
match Gzip.input icz buffer 0 buffer_size with 0 -> () | r -> output oc buffer 0 r ; loop ()
|
||||
in
|
||||
let success = try loop () ; true with Gzip.Error _ -> false in
|
||||
Gzip.close_in icz ; success
|
||||
|
||||
|
||||
let copy ic oc = tee ic [oc]
|
||||
|
||||
let rec restart_on_EINTR f x = try f x with U.Unix_error (U.EINTR, _, _) -> restart_on_EINTR f x
|
||||
|
||||
let close fd = try U.close fd with U.Unix_error _ -> ()
|
||||
|
||||
let close_in = close_in_noerr
|
||||
|
||||
let close_out = close_out_noerr
|
||||
|
||||
let wait pid =
|
||||
match snd (restart_on_EINTR (U.waitpid []) pid) with U.WEXITED 0 -> true | _ -> false
|
||||
|
||||
|
||||
let exec args stdin stdout stderr =
|
||||
wait
|
||||
(U.create_process args.(0) args (U.descr_of_in_channel stdin) (U.descr_of_out_channel stdout)
|
||||
(U.descr_of_out_channel stderr))
|
||||
|
||||
|
||||
let diff file1 file2 oc = exec [|"diff"; file1; file2|] stdin oc stderr
|
||||
|
||||
let fork f =
|
||||
let fd_in, fd_out = U.pipe () in
|
||||
match U.fork () with
|
||||
| 0
|
||||
-> (
|
||||
U.close fd_in ;
|
||||
try if f (U.out_channel_of_descr fd_out) then exit 0 else ( close fd_out ; exit 1 )
|
||||
with _ -> close fd_out ; exit 2 )
|
||||
| pid ->
|
||||
if pid < 0 then failwith "fork error"
|
||||
else ( U.close fd_out ; (pid, U.in_channel_of_descr fd_in) )
|
||||
|
||||
|
||||
let compose f g ic oc =
|
||||
let pid, ic1 = fork (f ic) in
|
||||
let r1 = g ic1 oc in
|
||||
let r2 = wait pid in
|
||||
close_in ic1 ; r1 && r2
|
||||
|
||||
|
||||
let diff_on_same_input f1 f2 ic oc =
|
||||
let file = mktemp "input" in
|
||||
let ofile = open_out file in
|
||||
copy ic ofile ;
|
||||
close_out ofile ;
|
||||
let ifile1 = open_in file and ifile2 = open_in file in
|
||||
let file1 = mktemp "output1" and file2 = mktemp "output2" in
|
||||
let ofile1 = open_out file1 and ofile2 = open_out file2 in
|
||||
let r1 = f1 ifile1 ofile1 and r2 = f2 ifile2 ofile2 in
|
||||
close_in ifile1 ;
|
||||
close_in ifile2 ;
|
||||
close_out ofile1 ;
|
||||
close_out ofile2 ;
|
||||
let success = if r1 && r2 then diff file1 file2 oc else false in
|
||||
U.unlink file ; U.unlink file1 ; U.unlink file2 ; success
|
@ -0,0 +1,38 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
val file_exists : string -> bool
|
||||
|
||||
val mktemp : string -> string
|
||||
|
||||
val wait : int -> bool
|
||||
|
||||
val exec : string array -> in_channel -> out_channel -> out_channel -> bool
|
||||
|
||||
val close_in : in_channel -> unit
|
||||
|
||||
val close_out : out_channel -> unit
|
||||
|
||||
val tee : in_channel -> out_channel list -> unit
|
||||
|
||||
val copy : in_channel -> out_channel -> unit
|
||||
|
||||
val diff : string -> string -> out_channel -> bool
|
||||
|
||||
val gzip : in_channel -> out_channel -> bool
|
||||
|
||||
val gunzip : in_channel -> out_channel -> bool
|
||||
|
||||
val fork : (out_channel -> bool) -> int * in_channel
|
||||
|
||||
val compose :
|
||||
(in_channel -> out_channel -> bool) -> (in_channel -> out_channel -> bool) -> in_channel
|
||||
-> out_channel -> bool
|
||||
|
||||
val diff_on_same_input :
|
||||
(in_channel -> out_channel -> bool) -> (in_channel -> out_channel -> bool) -> in_channel
|
||||
-> out_channel -> bool
|
@ -0,0 +1,19 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Process
|
||||
|
||||
let main =
|
||||
let pid, ic =
|
||||
fork (fun oc ->
|
||||
output_string oc "This is a test\n" ;
|
||||
true )
|
||||
in
|
||||
let zipunzip = compose gzip gunzip in
|
||||
ignore (diff_on_same_input (fun ic oc -> copy ic oc ; flush_all () ; true) zipunzip ic stderr) ;
|
||||
close_in ic ;
|
||||
ignore (wait pid)
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,440 @@
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
add_all_ints
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
S
|
||||
S
|
||||
S
|
||||
~S
|
||||
S
|
||||
test
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
i
|
||||
l
|
||||
m
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
Foo
|
||||
Foo
|
||||
func
|
||||
someFunction
|
||||
i
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
A
|
||||
A
|
||||
f
|
||||
operator=
|
||||
operator=
|
||||
~A
|
||||
A
|
||||
A
|
||||
A
|
||||
B
|
||||
B
|
||||
operator=
|
||||
operator=
|
||||
~B
|
||||
B
|
||||
B
|
||||
B
|
||||
C
|
||||
C
|
||||
f
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
X
|
||||
X
|
||||
X
|
||||
X
|
||||
operator=
|
||||
~X
|
||||
Y
|
||||
Y
|
||||
Y
|
||||
~Y
|
||||
Y
|
||||
f
|
||||
g
|
||||
h
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
sqrt
|
||||
pow
|
||||
Form
|
||||
Form
|
||||
area
|
||||
color
|
||||
vmethod
|
||||
getArea
|
||||
setArea
|
||||
operator=
|
||||
operator=
|
||||
~Form
|
||||
Circle
|
||||
Circle
|
||||
vmethod
|
||||
getRatio
|
||||
setRatio
|
||||
isDark
|
||||
operator=
|
||||
operator=
|
||||
~Circle
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
main
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
r
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
Q
|
||||
V
|
||||
V
|
||||
I
|
||||
i
|
||||
|
||||
<using-directive>
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
pod
|
||||
pod
|
||||
a
|
||||
pod
|
||||
pod
|
||||
pod
|
||||
~pod
|
||||
cpplike
|
||||
cpplike
|
||||
a
|
||||
b
|
||||
c
|
||||
cpplike
|
||||
cpplike
|
||||
cpplike
|
||||
cpplike
|
||||
~cpplike
|
||||
test
|
||||
operator new
|
||||
operator new[]
|
||||
operator delete
|
||||
operator delete[]
|
||||
test_c11
|
||||
operator new
|
||||
test_placement
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
Point
|
||||
Point
|
||||
x
|
||||
y
|
||||
fun
|
||||
blank
|
||||
A
|
||||
A
|
||||
a
|
||||
a
|
||||
B
|
||||
B
|
||||
b
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
T
|
||||
T
|
||||
age
|
||||
foo
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
S
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
nsa
|
||||
nsb
|
||||
a
|
||||
<using-directive>
|
||||
B
|
||||
b
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
N
|
||||
S
|
||||
S
|
||||
S
|
||||
field
|
||||
S
|
||||
S
|
||||
field
|
||||
S
|
||||
~S
|
||||
S
|
||||
S
|
||||
operator=
|
||||
operator=
|
||||
test
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
get
|
||||
get
|
||||
test
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
X
|
||||
X
|
||||
f
|
||||
operator=
|
||||
operator=
|
||||
~X
|
||||
is_pod
|
||||
a
|
||||
b
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
no_throw
|
||||
main
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
AnotherClass
|
||||
Y
|
||||
y1
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
SEL
|
||||
id
|
||||
Class
|
||||
Protocol
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
BOOL
|
||||
NSUInteger
|
||||
NSObject
|
||||
alloc
|
||||
new
|
||||
autorelease
|
||||
init
|
||||
class
|
||||
respondsToSelector:
|
||||
conformsToProtocol:
|
||||
NSNumber
|
||||
numberWithInt:
|
||||
NSString
|
||||
length
|
||||
NSDictionary
|
||||
dictionaryWithObjects:forKeys:count:
|
||||
objectForKeyedSubscript:
|
||||
NSArray
|
||||
arrayWithObjects:count:
|
||||
objectAtIndexedSubscript:
|
||||
NSException
|
||||
NSLog
|
||||
NSLog
|
||||
Hello
|
||||
say:
|
||||
Hello
|
||||
say:
|
||||
main
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
SEL
|
||||
id
|
||||
Class
|
||||
Protocol
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
BOOL
|
||||
NSUInteger
|
||||
NSObject
|
||||
alloc
|
||||
new
|
||||
autorelease
|
||||
init
|
||||
class
|
||||
respondsToSelector:
|
||||
conformsToProtocol:
|
||||
NSNumber
|
||||
numberWithInt:
|
||||
NSString
|
||||
length
|
||||
NSDictionary
|
||||
dictionaryWithObjects:forKeys:count:
|
||||
objectForKeyedSubscript:
|
||||
NSArray
|
||||
arrayWithObjects:count:
|
||||
objectAtIndexedSubscript:
|
||||
NSException
|
||||
NSLog
|
||||
NSLog
|
||||
MyProtocol
|
||||
str
|
||||
str
|
||||
setStr:
|
||||
SomeProtocol
|
||||
MyClass
|
||||
str
|
||||
x
|
||||
y
|
||||
delegate
|
||||
str
|
||||
setStr:
|
||||
x
|
||||
setX:
|
||||
y
|
||||
setY:
|
||||
delegate
|
||||
setDelegate:
|
||||
|
||||
foo:
|
||||
MyClass
|
||||
foo:
|
||||
_str
|
||||
_x
|
||||
_y
|
||||
_delegate
|
||||
MyCategory
|
||||
bar:
|
||||
MyCategory
|
||||
bar:
|
||||
MyClassGenerics
|
||||
BarGenerics
|
||||
newWithCs:
|
||||
MySubclass
|
||||
MySubclass
|
||||
bar:
|
||||
foo:
|
||||
main
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
SEL
|
||||
id
|
||||
Class
|
||||
Protocol
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
BOOL
|
||||
NSUInteger
|
||||
NSObject
|
||||
alloc
|
||||
new
|
||||
autorelease
|
||||
init
|
||||
class
|
||||
respondsToSelector:
|
||||
conformsToProtocol:
|
||||
NSNumber
|
||||
numberWithInt:
|
||||
NSString
|
||||
length
|
||||
NSDictionary
|
||||
dictionaryWithObjects:forKeys:count:
|
||||
objectForKeyedSubscript:
|
||||
NSArray
|
||||
arrayWithObjects:count:
|
||||
objectAtIndexedSubscript:
|
||||
NSException
|
||||
NSLog
|
||||
NSLog
|
||||
ABFDataRef
|
||||
ABFDataRef
|
||||
ABFData
|
||||
ABFDataCreate
|
||||
A
|
||||
A
|
||||
bridge_transfer_example
|
||||
instancetype
|
||||
__int128_t
|
||||
__uint128_t
|
||||
SEL
|
||||
id
|
||||
Class
|
||||
Protocol
|
||||
__NSConstantString
|
||||
__builtin_ms_va_list
|
||||
__builtin_va_list
|
||||
box
|
||||
instancetype
|
@ -0,0 +1,21 @@
|
||||
length of raw value: 135
|
||||
pretty-printed value (without dictionary):
|
||||
<#33e33622:
|
||||
(<#33e33622: (<#0307aa6d>, { #00000078: 1, #00000079: 2 }, <#0307aa6d>)>,
|
||||
{ #00000078: 2, #00000079: 2 },
|
||||
<#33e33622:
|
||||
(<#33e33622:
|
||||
(<#0307aa6d>, { #00000078: 3, #00000079: 2 }, <#0307aa6d>)>,
|
||||
{ #00000078: 4, #00000079: 2 },
|
||||
<#33e33622:
|
||||
(<#0307aa6d>, { #00000078: 5, #00000079: 2 }, <#0307aa6d>)>)>)>
|
||||
pretty-printed value (with dictionary):
|
||||
<"Node":
|
||||
(<"Node": (<"Empty">, { #00000078: 1, #00000079: 2 }, <"Empty">)>,
|
||||
{ #00000078: 2, #00000079: 2 },
|
||||
<"Node":
|
||||
(<"Node": (<"Empty">, { #00000078: 3, #00000079: 2 }, <"Empty">)>,
|
||||
{ #00000078: 4, #00000079: 2 },
|
||||
<"Node": (<"Empty">, { #00000078: 5, #00000079: 2 }, <"Empty">)>)>)>
|
||||
value:<"Node":(<"Node":(<"Empty">,{"x":1,"y":2},<"Empty">)>,{"x":2,"y":2},<"Node":(<"Node":(<"Empty">,{"x":3,"y":2},<"Empty">)>,{"x":4,"y":2},<"Node":(<"Empty">,{"x":5,"y":2},<"Empty">)>)>)>
|
||||
length: 184
|
@ -0,0 +1,194 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
module H = Hashtbl
|
||||
|
||||
(* misc *)
|
||||
(* maps '-' to the standard input *)
|
||||
let open_in name = if name = "-" then stdin else Pervasives.open_in name
|
||||
|
||||
(* maps '-' to the standard output *)
|
||||
let open_out name = if name = "-" then stdout else Pervasives.open_out name
|
||||
|
||||
let make_cached f =
|
||||
let h = H.create 10 in
|
||||
function
|
||||
| x ->
|
||||
try H.find h x with Not_found ->
|
||||
let y = f x in
|
||||
H.add h x y ; y
|
||||
|
||||
|
||||
(* missing string API *)
|
||||
|
||||
let string_starts_with s1 s2 =
|
||||
try
|
||||
let n = String.length s2 in
|
||||
String.sub s1 0 n = s2
|
||||
with Invalid_argument _ -> false
|
||||
|
||||
|
||||
let string_ends_with s1 s2 =
|
||||
try
|
||||
let n = String.length s2 in
|
||||
String.sub s1 (String.length s1 - n) n = s2
|
||||
with Invalid_argument _ -> false
|
||||
|
||||
|
||||
let string_split c s =
|
||||
let len = String.length s in
|
||||
let rec aux acc pos =
|
||||
if pos >= len then "" :: acc
|
||||
else
|
||||
try
|
||||
let next = String.index_from s pos c in
|
||||
aux (String.sub s pos (next - pos) :: acc) (next + 1)
|
||||
with Not_found -> String.sub s pos (String.length s - pos) :: acc
|
||||
in
|
||||
List.rev (aux [] 0)
|
||||
|
||||
|
||||
let string_join c l = String.concat (String.make 1 c) l
|
||||
|
||||
(* lists *)
|
||||
|
||||
let rec list_starts_with l1 l2 =
|
||||
match (l1, l2) with
|
||||
| _, [] ->
|
||||
true
|
||||
| x1 :: q1, x2 :: q2 when x1 = x2 ->
|
||||
list_starts_with q1 q2
|
||||
| _ ->
|
||||
false
|
||||
|
||||
|
||||
let list_ends_with l1 l2 = list_starts_with (List.rev l1) (List.rev l2)
|
||||
|
||||
(* missing stream API *)
|
||||
|
||||
let line_stream_of_channel channel =
|
||||
Stream.from (fun _ -> try Some (input_line channel) with End_of_file -> None)
|
||||
|
||||
|
||||
let stream_concat streams =
|
||||
let current_stream = ref None in
|
||||
let rec next i =
|
||||
try
|
||||
let stream =
|
||||
match !current_stream with
|
||||
| Some stream ->
|
||||
stream
|
||||
| None ->
|
||||
let stream = Stream.next streams in
|
||||
current_stream := Some stream ;
|
||||
stream
|
||||
in
|
||||
try Some (Stream.next stream) with Stream.Failure ->
|
||||
current_stream := None ;
|
||||
next i
|
||||
with Stream.Failure -> None
|
||||
in
|
||||
Stream.from next
|
||||
|
||||
|
||||
let stream_append s1 s2 = stream_concat (Stream.of_list [s1; s2])
|
||||
|
||||
let stream_map f stream =
|
||||
let rec next _ = try Some (f (Stream.next stream)) with Stream.Failure -> None in
|
||||
Stream.from next
|
||||
|
||||
|
||||
let stream_filter p stream =
|
||||
let rec next i =
|
||||
try
|
||||
let value = Stream.next stream in
|
||||
if p value then Some value else next i
|
||||
with Stream.Failure -> None
|
||||
in
|
||||
Stream.from next
|
||||
|
||||
|
||||
let stream_fold f init stream =
|
||||
let result = ref init in
|
||||
Stream.iter (fun x -> result := f x !result) stream ;
|
||||
!result
|
||||
|
||||
|
||||
let stream_to_list s = List.rev (stream_fold (fun x l -> x :: l) [] s)
|
||||
|
||||
(* simplistic unit testing *)
|
||||
|
||||
let string_counters = Hashtbl.create 10
|
||||
|
||||
let assert_true s b =
|
||||
( try
|
||||
let i = Hashtbl.find string_counters s in
|
||||
Hashtbl.replace string_counters s (i + 1)
|
||||
with Not_found -> Hashtbl.add string_counters s 1 ) ;
|
||||
if not b then (
|
||||
Printf.fprintf stderr "%s (%d)\n" s (Hashtbl.find string_counters s) ;
|
||||
exit 1 )
|
||||
else ()
|
||||
|
||||
|
||||
let assert_false s b = assert_true s (not b)
|
||||
|
||||
let assert_equal s x y = assert_true s (x = y)
|
||||
|
||||
(* union-find data structure *)
|
||||
|
||||
module DisjointSet = struct
|
||||
type 'a bucket = {mutable parent: 'a; mutable rank: int}
|
||||
|
||||
type 'a t = ('a, 'a bucket) Hashtbl.t
|
||||
|
||||
let create () = Hashtbl.create 10
|
||||
|
||||
let bucket t x =
|
||||
try Hashtbl.find t x with Not_found ->
|
||||
let b = {parent= x; rank= 0} in
|
||||
Hashtbl.add t x b ; b
|
||||
|
||||
|
||||
let rec find_bucket t x =
|
||||
let b = bucket t x in
|
||||
if b.parent = x then b
|
||||
else
|
||||
let b0 = find_bucket t b.parent in
|
||||
b.parent <- b0.parent ;
|
||||
b0
|
||||
|
||||
|
||||
let find t x = (find_bucket t x).parent
|
||||
|
||||
let union t x y =
|
||||
let bx = find_bucket t x and by = find_bucket t y in
|
||||
if bx.parent <> by.parent then
|
||||
if bx.rank < by.rank then bx.parent <- by.parent
|
||||
else (
|
||||
by.parent <- bx.parent ;
|
||||
if bx.rank = by.rank then bx.rank <- bx.rank + 1 )
|
||||
|
||||
|
||||
let iter t f = Hashtbl.iter (fun x b -> f x (if x = b.parent then x else find t b.parent)) t
|
||||
end
|
||||
|
||||
(* Helper for command line parsing with Arg *)
|
||||
|
||||
let fix_arg_spec l usage_msg =
|
||||
let result = ref [] in
|
||||
let usage () =
|
||||
Arg.usage !result usage_msg ;
|
||||
exit 0
|
||||
in
|
||||
let extra =
|
||||
[ ("-h", Arg.Unit usage, " Display this list of options.")
|
||||
; ("-help", Arg.Unit usage, " ")
|
||||
; ("--help", Arg.Unit usage, " ") ]
|
||||
in
|
||||
result := Arg.align (l @ extra) ;
|
||||
!result
|
@ -0,0 +1,59 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
val open_in : string -> in_channel
|
||||
|
||||
val open_out : string -> out_channel
|
||||
|
||||
val string_starts_with : string -> string -> bool
|
||||
|
||||
val string_ends_with : string -> string -> bool
|
||||
|
||||
val string_split : char -> string -> string list
|
||||
|
||||
val string_join : char -> string list -> string
|
||||
|
||||
val list_starts_with : 'a list -> 'a list -> bool
|
||||
|
||||
val list_ends_with : 'a list -> 'a list -> bool
|
||||
|
||||
val make_cached : ('a -> 'b) -> 'a -> 'b
|
||||
|
||||
val line_stream_of_channel : in_channel -> string Stream.t
|
||||
|
||||
val stream_concat : 'a Stream.t Stream.t -> 'a Stream.t
|
||||
|
||||
val stream_append : 'a Stream.t -> 'a Stream.t -> 'a Stream.t
|
||||
|
||||
val stream_map : ('a -> 'b) -> 'a Stream.t -> 'b Stream.t
|
||||
|
||||
val stream_filter : ('a -> bool) -> 'a Stream.t -> 'a Stream.t
|
||||
|
||||
val stream_fold : ('a -> 'b -> 'b) -> 'b -> 'a Stream.t -> 'b
|
||||
|
||||
val stream_to_list : 'a Stream.t -> 'a list
|
||||
|
||||
val assert_true : string -> bool -> unit
|
||||
|
||||
val assert_false : string -> bool -> unit
|
||||
|
||||
val assert_equal : string -> 'a -> 'a -> unit
|
||||
|
||||
module DisjointSet : sig
|
||||
type 'a t
|
||||
|
||||
val create : unit -> 'a t
|
||||
|
||||
val find : 'a t -> 'a -> 'a
|
||||
|
||||
val union : 'a t -> 'a -> 'a -> unit
|
||||
|
||||
val iter : 'a t -> ('a -> 'a -> unit) -> unit
|
||||
end
|
||||
|
||||
val fix_arg_spec :
|
||||
(Arg.key * Arg.spec * Arg.doc) list -> Arg.usage_msg -> (Arg.key * Arg.spec * Arg.doc) list
|
@ -0,0 +1,93 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Utils
|
||||
open Process
|
||||
|
||||
let () =
|
||||
assert_true "string_ends_with" (string_ends_with "foo" "o") ;
|
||||
assert_true "string_ends_with" (string_ends_with "foo" "") ;
|
||||
assert_false "string_ends_with" (string_ends_with "foo" "f")
|
||||
|
||||
|
||||
let () =
|
||||
assert_true "string_starts_with" (string_starts_with "foo" "f") ;
|
||||
assert_true "string_starts_with" (string_starts_with "foo" "") ;
|
||||
assert_false "string_starts_with" (string_starts_with "foo" "o")
|
||||
|
||||
|
||||
let () =
|
||||
assert_equal "string_split" (string_split ' ' "foo bla") ["foo"; "bla"] ;
|
||||
assert_equal "string_split" (string_split ' ' "foo") ["foo"] ;
|
||||
assert_equal "string_split" (string_split ' ' "") [""] ;
|
||||
assert_equal "string_split" (string_split ' ' " ") [""; ""] ;
|
||||
assert_equal "string_split" (string_split ' ' " foo bla ") [""; "foo"; "bla"; ""]
|
||||
|
||||
|
||||
let () =
|
||||
assert_true "list_ends_with" (list_ends_with [1; 2; 3] [3]) ;
|
||||
assert_false "list_ends_with" (list_ends_with [1; 2; 3] [2])
|
||||
|
||||
|
||||
let () =
|
||||
assert_true "list_starts_with" (list_starts_with [1; 2; 3] [1]) ;
|
||||
assert_false "list_starts_with" (list_starts_with [1; 2; 3] [2])
|
||||
|
||||
|
||||
let () =
|
||||
let pid, ic = Process.fork (fun oc -> output_string oc "foo\nbar\n" ; true) in
|
||||
let lines = stream_to_list (line_stream_of_channel ic) in
|
||||
assert_true "line_stream_of_channel::wait" (Process.wait pid) ;
|
||||
assert_equal "line_stream_of_channel::result" lines ["foo"; "bar"]
|
||||
|
||||
|
||||
let () =
|
||||
let lines = stream_to_list (stream_append (Stream.of_list ["foo"]) (Stream.of_list ["bar"])) in
|
||||
assert_equal "line_stream_of_channel::result" lines ["foo"; "bar"]
|
||||
|
||||
|
||||
let () =
|
||||
let count = ref 0 in
|
||||
let f _ = incr count in
|
||||
let g = make_cached f in
|
||||
List.iter g [1; 2; 1; 3; 1] ;
|
||||
assert_equal "make_cached" !count 3
|
||||
|
||||
|
||||
let () =
|
||||
let s = DisjointSet.create () in
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 1) 1 ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 2) 2 ;
|
||||
DisjointSet.union s 1 2 ;
|
||||
DisjointSet.union s 1 3 ;
|
||||
DisjointSet.union s 2 4 ;
|
||||
DisjointSet.union s 5 6 ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 2) ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 3) ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 4) ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 1) (DisjointSet.find s 4) ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 5) (DisjointSet.find s 6) ;
|
||||
assert_true "DisjointSet" (DisjointSet.find s 1 <> DisjointSet.find s 6) ;
|
||||
DisjointSet.union s 3 6 ;
|
||||
assert_true "DisjointSet" (DisjointSet.find s 1 = DisjointSet.find s 6) ;
|
||||
assert_equal "DisjointSet" (DisjointSet.find s 5) (DisjointSet.find s 6) ;
|
||||
let l = ref [] in
|
||||
DisjointSet.iter s (fun x y -> l := (y, x) :: !l) ;
|
||||
assert_equal "DisjointSetFinal" (List.sort compare !l |> List.map snd) [1; 2; 3; 4; 5; 6]
|
||||
|
||||
|
||||
let () =
|
||||
let take13 = List.map (fun (x, y, z) -> (x, z)) in
|
||||
assert_equal "fix_arg_spec"
|
||||
(fix_arg_spec [] "bla" |> take13)
|
||||
[("-h", " Display this list of options."); ("-help", " "); ("--help", " ")] ;
|
||||
assert_equal "fix_arg_spec"
|
||||
(fix_arg_spec [("--foo", Arg.String ignore, "FOO fooling")] "bla" |> take13)
|
||||
[ ("--foo", "FOO fooling")
|
||||
; ("-h", " Display this list of options.")
|
||||
; ("-help", " ")
|
||||
; ("--help", " ") ]
|
@ -0,0 +1,106 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
module U = Utils
|
||||
module P = Process
|
||||
|
||||
(* Needed as a (pointer-stable) default value for atd specs. *)
|
||||
let empty_string = ""
|
||||
|
||||
let ydump ?(compact_json= false) ?(std_json= false) ic oc =
|
||||
let cmd =
|
||||
["ydump"] @ (if compact_json then ["-c"] else []) @ if std_json then ["-std"] else []
|
||||
in
|
||||
P.exec (Array.of_list cmd) ic oc stderr
|
||||
|
||||
|
||||
let read_data_from_file reader fname =
|
||||
let input_gunzipped read_data ic =
|
||||
let pid, icz = P.fork (P.gunzip ic) in
|
||||
let data = read_data icz in
|
||||
let r = P.wait pid in
|
||||
P.close_in icz ;
|
||||
if not r then failwith "read_data_from_file (gunzip)" else () ;
|
||||
data
|
||||
in
|
||||
let ic = open_in fname in
|
||||
let data =
|
||||
if U.string_ends_with fname ".value.gz" then input_gunzipped Marshal.from_channel ic
|
||||
else if U.string_ends_with fname ".gz" then
|
||||
input_gunzipped (Atdgen_runtime.Util.Json.from_channel ~fname reader) ic
|
||||
else if U.string_ends_with fname ".value" then Marshal.from_channel ic
|
||||
else Atdgen_runtime.Util.Json.from_channel ~fname reader ic
|
||||
in
|
||||
close_in ic ; data
|
||||
|
||||
|
||||
let write_data_to_file ?(pretty= false) ?(compact_json= false) ?(std_json= false) writer fname data =
|
||||
let output_gzipped write_data oc data =
|
||||
let pid, icz = P.fork (fun ocz -> write_data ocz data ; true) in
|
||||
let r1 = P.gzip icz oc and r2 = P.wait pid in
|
||||
P.close_in icz ;
|
||||
if not (r1 && r2) then failwith "write_data_to_file (gzip)" else ()
|
||||
and output_pretty write_data oc data =
|
||||
(* TODO(mathieubaudet): find out how to write directly pretty json? *)
|
||||
let pid, icp = P.fork (fun ocp -> write_data ocp data ; true) in
|
||||
let r1 = ydump ~compact_json ~std_json icp oc and r2 = P.wait pid in
|
||||
P.close_in icp ;
|
||||
if not (r1 && r2) then failwith "write_data_to_file (pretty)" else ()
|
||||
in
|
||||
let write_json ocx data =
|
||||
if pretty then output_pretty (Atdgen_runtime.Util.Json.to_channel writer) ocx data
|
||||
else Atdgen_runtime.Util.Json.to_channel writer ocx data
|
||||
in
|
||||
let oc = open_out fname in
|
||||
if U.string_ends_with fname ".value.gz" then
|
||||
output_gzipped (fun oc data -> Marshal.to_channel oc data []) oc data
|
||||
else if U.string_ends_with fname ".value" then Marshal.to_channel oc data []
|
||||
else if U.string_ends_with fname ".gz" then output_gzipped write_json oc data
|
||||
else write_json oc data ;
|
||||
close_out oc
|
||||
|
||||
|
||||
let convert ?(pretty= false) ?(compact_json= false) ?(std_json= false) reader writer fin fout =
|
||||
try
|
||||
read_data_from_file reader fin
|
||||
|> write_data_to_file writer ~pretty ~compact_json ~std_json fout
|
||||
with
|
||||
| Yojson.Json_error s | Atdgen_runtime.Oj_run.Error s ->
|
||||
prerr_string s ; prerr_newline () ; exit 1
|
||||
|
||||
|
||||
let run_converter_tool reader writer =
|
||||
let pretty = ref false
|
||||
and std_json = ref false
|
||||
and compact_json = ref false
|
||||
and files = ref [] in
|
||||
let add_files x = files := x :: !files
|
||||
and usage_msg =
|
||||
"Usage: " ^ Sys.argv.(0) ^ "[OPTIONS] INPUT_FILE [OUTPUT_FILE]\n"
|
||||
^ "Parse yojson values and convert them to another format based on the extension"
|
||||
^ " of the output file (default: ${INPUT_FILE}.value.gz).\n"
|
||||
in
|
||||
let spec =
|
||||
Utils.fix_arg_spec
|
||||
[ ("--pretty", Arg.Set pretty, " Pretty print outputs.")
|
||||
; ("--std", Arg.Set std_json, " Use standard json for outputs.")
|
||||
; ("--compact", Arg.Set compact_json, " Use compact json for outputs.")
|
||||
; ("--", Arg.Rest add_files, " Mark the end of options.") ] usage_msg
|
||||
in
|
||||
(* Parse the command line. *)
|
||||
Arg.parse spec add_files usage_msg ;
|
||||
let input, output =
|
||||
match List.rev !files with
|
||||
| [input] ->
|
||||
(input, input ^ ".value.gz")
|
||||
| [input; output] ->
|
||||
(input, output)
|
||||
| _ ->
|
||||
prerr_string usage_msg ; exit 1
|
||||
in
|
||||
convert ~pretty:!pretty ~std_json:!std_json ~compact_json:!compact_json reader writer input
|
||||
output
|
@ -0,0 +1,19 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
val read_data_from_file : 'a Atdgen_runtime.Util.Json.reader -> string -> 'a
|
||||
|
||||
val write_data_to_file :
|
||||
?pretty:bool -> ?compact_json:bool -> ?std_json:bool -> 'a Atdgen_runtime.Util.Json.writer
|
||||
-> string -> 'a -> unit
|
||||
|
||||
val ydump : ?compact_json:bool -> ?std_json:bool -> in_channel -> out_channel -> bool
|
||||
|
||||
val empty_string : string
|
||||
|
||||
val run_converter_tool :
|
||||
'a Atdgen_runtime.Util.Json.reader -> 'a Atdgen_runtime.Util.Json.writer -> unit
|
@ -0,0 +1,24 @@
|
||||
(*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*)
|
||||
|
||||
open Clang_ast_j
|
||||
open Yojson_utils
|
||||
|
||||
let data = {sl_file= Some "foo"; sl_line= Some 1; sl_column= None}
|
||||
|
||||
let basic_test pretty name =
|
||||
write_data_to_file ~pretty write_source_location name data ;
|
||||
let data3 = read_data_from_file read_source_location name in
|
||||
Unix.unlink name ;
|
||||
Utils.assert_equal (Printf.sprintf "test %s pretty=%b" name pretty) data data3
|
||||
|
||||
|
||||
let files = List.map (( ^ ) "yojson_utils_test_tmpfile") [".gz"; ".value"; ".value.gz"; ".yjson"]
|
||||
|
||||
let test1 = List.iter (basic_test false) files
|
||||
|
||||
let test2 = List.iter (basic_test true) files
|
@ -0,0 +1,42 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
# Script to validate Yojson outputs w.r.t. ATD specifications.
|
||||
# This works by running a given 'converter' to parse and pretty-print the outputs, then observing the difference with gunzip + pretty-print.
|
||||
|
||||
if [ "$2" == "--std" ]; then
|
||||
CONVERTER=("$1" --std --pretty)
|
||||
YDUMP=(ydump -std)
|
||||
shift 2
|
||||
else
|
||||
CONVERTER=("$1" --pretty)
|
||||
YDUMP=(ydump)
|
||||
shift
|
||||
fi
|
||||
|
||||
while [ -n "$1" ]
|
||||
do
|
||||
if [[ "$1" == *.gz ]]; then
|
||||
DUMP_CMD=(gunzip -c "$1")
|
||||
else
|
||||
DUMP_CMD=(cat "$1")
|
||||
fi
|
||||
|
||||
if ! diff -q <("${DUMP_CMD[@]}" | "${YDUMP[@]}") <("${CONVERTER[@]}" "$1" /dev/stdout) >/dev/null 2>&1; then
|
||||
echo "The file '$1' does not respect the ATD format implemented by $CONVERTER."
|
||||
echo "Here is the command that shows the problem:"
|
||||
echo -n " diff <("
|
||||
printf '%s ' "${DUMP_CMD[@]}"
|
||||
echo -n "| "
|
||||
printf '"%s" ' "${YDUMP[@]}"
|
||||
echo -n ") <("
|
||||
printf '"%s" ' "${CONVERTER[@]}" "$1"
|
||||
echo "/dev/stdout)"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
shift;
|
||||
done
|
@ -0,0 +1,239 @@
|
||||
#!/bin/bash
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
# Simple installation script for llvm/clang.
|
||||
|
||||
set -e
|
||||
set -o pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SCRIPT_RELATIVE_PATH="$(basename "${BASH_SOURCE[0]}")"
|
||||
CLANG_RELATIVE_SRC="src/llvm_clang_compiler-rt_libcxx_libcxxabi_openmp-9.0.0.tar.xz"
|
||||
CLANG_SRC="$SCRIPT_DIR/$CLANG_RELATIVE_SRC"
|
||||
CLANG_PREBUILD_PATCHES=(
|
||||
"$SCRIPT_DIR/src/err_ret_local_block.patch"
|
||||
"$SCRIPT_DIR/src/mangle_suppress_errors.patch"
|
||||
"$SCRIPT_DIR/src/template_ambiguous.patch"
|
||||
)
|
||||
CLANG_PREFIX="$SCRIPT_DIR/install"
|
||||
CLANG_INSTALLED_VERSION_FILE="$SCRIPT_DIR/installed.version"
|
||||
PATCH=${PATCH:-patch}
|
||||
STRIP=${STRIP:-strip}
|
||||
|
||||
NCPUS="$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 2)"
|
||||
JOBS="${JOBS:-$(($NCPUS>=8?$NCPUS/4:2))}"
|
||||
|
||||
SHASUM=${SHASUM:-shasum -a 256}
|
||||
|
||||
usage () {
|
||||
echo "Usage: $0 [-chr]"
|
||||
echo
|
||||
echo " options:"
|
||||
echo " -c,--only-check-install check if recompiling clang is needed"
|
||||
echo " -h,--help show this message"
|
||||
echo " -n,--ninja use ninja for building"
|
||||
echo " -r,--only-record-install do not install clang but pretend we did"
|
||||
echo " -s,--sequential-link only use one process for linking (ninja only)"
|
||||
}
|
||||
|
||||
check_installed () {
|
||||
pushd "$SCRIPT_DIR" > /dev/null
|
||||
$SHASUM -c "$CLANG_INSTALLED_VERSION_FILE" >& /dev/null
|
||||
local result=$?
|
||||
popd > /dev/null
|
||||
return $result
|
||||
}
|
||||
|
||||
record_installed () {
|
||||
pushd "$SCRIPT_DIR" > /dev/null
|
||||
$SHASUM "$CLANG_RELATIVE_SRC" "$SCRIPT_RELATIVE_PATH" > "$CLANG_INSTALLED_VERSION_FILE"
|
||||
popd > /dev/null
|
||||
}
|
||||
|
||||
ONLY_CHECK=
|
||||
ONLY_RECORD=
|
||||
USE_NINJA=
|
||||
SEQUENTIAL_LINK=
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
opt_key="$1"
|
||||
case $opt_key in
|
||||
-c|--only-check-install)
|
||||
ONLY_CHECK=yes
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
-r|--only-record-install)
|
||||
ONLY_RECORD=yes
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
-n|--ninja)
|
||||
USE_NINJA=yes
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
-s|--sequential-link)
|
||||
SEQUENTIAL_LINK=yes
|
||||
shift
|
||||
continue
|
||||
;;
|
||||
-h|--help)
|
||||
usage
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
exit 2
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ "$ONLY_RECORD" = "yes" ]; then
|
||||
record_installed
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if check_installed; then
|
||||
# already installed
|
||||
if [ "$ONLY_CHECK" = "yes" ]; then
|
||||
exit 0
|
||||
fi
|
||||
echo "Clang is already installed according to $CLANG_INSTALLED_VERSION_FILE"
|
||||
echo "Nothing to do, exiting."
|
||||
exit 0
|
||||
else
|
||||
if [ "$ONLY_CHECK" = "yes" ]; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
if [[ x"$MAKEFLAGS" != x ]]; then
|
||||
echo "WARNING: MAKEFLAGS var was set to: $MAKEFLAGS"
|
||||
echo " which may (and will!) interfere with the setup"
|
||||
echo " ... ignoring MAKEFLAGS."
|
||||
unset MAKEFLAGS
|
||||
fi
|
||||
|
||||
if [[ x"$DESTDIR" != x ]]; then
|
||||
echo "WARNING: DESTDIR var was set to: $DESTDIR"
|
||||
echo " but the setup script is not designed to handle"
|
||||
echo " relocation of the installation."
|
||||
echo " ... ignoring DESTDIR."
|
||||
unset DESTDIR
|
||||
fi
|
||||
|
||||
platform=`uname`
|
||||
|
||||
CMAKE_ARGS=(
|
||||
-DCMAKE_INSTALL_PREFIX="$CLANG_PREFIX"
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
-DCMAKE_C_FLAGS="$CFLAGS $CMAKE_C_FLAGS"
|
||||
-DCMAKE_CXX_FLAGS="$CXXFLAGS $CMAKE_CXX_FLAGS"
|
||||
-DLLVM_ENABLE_ASSERTIONS=Off
|
||||
-DLLVM_ENABLE_EH=On
|
||||
-DLLVM_ENABLE_RTTI=On
|
||||
-DLLVM_INCLUDE_DOCS=Off
|
||||
-DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;Mips"
|
||||
-DLLVM_BUILD_EXTERNAL_COMPILER_RT=On
|
||||
)
|
||||
|
||||
if [ "$platform" = "Darwin" ]; then
|
||||
CMAKE_ARGS+=(
|
||||
-DLLVM_ENABLE_LIBCXX=On
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS $CMAKE_SHARED_LINKER_FLAGS"
|
||||
-DLLVM_BUILD_LLVM_DYLIB=ON
|
||||
)
|
||||
else
|
||||
CMAKE_ARGS+=(
|
||||
-DCMAKE_SHARED_LINKER_FLAGS="$LDFLAGS $CMAKE_SHARED_LINKER_FLAGS -lstdc++ -fPIC"
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$USE_NINJA" = "yes" ]; then
|
||||
CMAKE_GENERATOR="Ninja"
|
||||
BUILD_BIN="ninja"
|
||||
# Do not set a 'j' build default for Ninja (let Ninja decide)
|
||||
BUILD_ARGS=""
|
||||
else
|
||||
CMAKE_GENERATOR="Unix Makefiles"
|
||||
BUILD_BIN="make"
|
||||
BUILD_ARGS="-j $JOBS"
|
||||
fi
|
||||
|
||||
if [ "$SEQUENTIAL_LINK" = "yes" ]; then
|
||||
if [[ x"$USE_NINJA" = x ]]; then
|
||||
echo "Linking with a single process is only supported with the Ninja generator."
|
||||
echo "Unable to proceed, exiting."
|
||||
exit 1
|
||||
fi
|
||||
# For Ninja, the compile jobs is the number of CPUs *not* $JOBS
|
||||
CMAKE_ARGS+=(
|
||||
-DCMAKE_JOB_POOLS:STRING="compile=$NCPUS;link=1"
|
||||
-DCMAKE_JOB_POOL_COMPILE:STRING="compile"
|
||||
-DCMAKE_JOB_POOL_LINK:STRING="link"
|
||||
)
|
||||
fi
|
||||
|
||||
# start the installation
|
||||
if [ -n "$CLANG_TMP_DIR" ]; then
|
||||
TMP=$CLANG_TMP_DIR
|
||||
else
|
||||
TMP=`mktemp -d /tmp/clang-setup.XXXXXX`
|
||||
fi
|
||||
pushd "$TMP"
|
||||
|
||||
if tar --version | grep -q 'GNU'; then
|
||||
# GNU tar is too verbose if the tarball was created on MacOS
|
||||
QUIET_TAR="--warning=no-unknown-keyword"
|
||||
fi
|
||||
echo "unpacking '$CLANG_SRC'..."
|
||||
tar --extract $QUIET_TAR --file "$CLANG_SRC"
|
||||
|
||||
# apply prebuild patch
|
||||
for PATCH_FILE in ${CLANG_PREBUILD_PATCHES[*]}; do
|
||||
"$PATCH" --batch -p 1 < "$PATCH_FILE"
|
||||
done
|
||||
|
||||
mkdir -p build
|
||||
pushd build
|
||||
|
||||
# workaround install issue with ocaml llvm bindings and ocamldoc
|
||||
mkdir -p docs/ocamldoc/html
|
||||
|
||||
cmake -G "$CMAKE_GENERATOR" ../llvm "${CMAKE_ARGS[@]}" $CLANG_CMAKE_ARGS
|
||||
|
||||
$BUILD_BIN $BUILD_ARGS
|
||||
|
||||
echo "testing clang build"
|
||||
./bin/clang --version
|
||||
|
||||
# "uninstall" previous clang
|
||||
rm -fr "$CLANG_PREFIX"
|
||||
|
||||
$BUILD_BIN $BUILD_ARGS install
|
||||
|
||||
popd # build
|
||||
popd # $TMP
|
||||
|
||||
# brutally strip everything, ignore errors
|
||||
set +e
|
||||
find "$CLANG_PREFIX"/{bin,lib} -type f -exec "$STRIP" -x \{\} \;
|
||||
set -e
|
||||
|
||||
echo "testing installed clang"
|
||||
"$CLANG_PREFIX"/bin/clang --version
|
||||
|
||||
echo "deleting temp dir '$CLANG_TMP_DIR'..."
|
||||
if [ -n "$CLANG_TMP_DIR" ]; then
|
||||
rm -rf "$TMP/*"
|
||||
else
|
||||
rm -rf "$TMP"
|
||||
fi
|
||||
|
||||
record_installed
|
@ -0,0 +1,31 @@
|
||||
= LLVM+Clang 9.0.0 -- official release
|
||||
|
||||
Downloaded from http://releases.llvm.org/download.html#9.0.0
|
||||
|
||||
Included components:
|
||||
$ sha256sum *.tar.xz
|
||||
7ba81eef7c22ca5da688fdf9d88c20934d2d6b40bfe150ffd338900890aa4610 cfe-9.0.0.src.tar.xz
|
||||
56e4cd96dd1d8c346b07b4d6b255f976570c6f2389697347a6c3dcb9e820d10e compiler-rt-9.0.0.src.tar.xz
|
||||
3c4162972b5d3204ba47ac384aa456855a17b5e97422723d4758251acf1ed28c libcxx-9.0.0.src.tar.xz
|
||||
675041783565c906ac2f7f8b2bc5c40f14d871ecfa8ade34855aa18de95530e9 libcxxabi-9.0.0.src.tar.xz
|
||||
d6a0565cf21f22e9b4353b2eb92622e8365000a9e90a16b09b56f8157eabfe84 llvm-9.0.0.src.tar.xz
|
||||
9979eb1133066376cc0be29d1682bc0b0e7fb541075b391061679111ae4d3b5b openmp-9.0.0.src.tar.xz
|
||||
|
||||
Script to build the archive:
|
||||
|
||||
tar xf llvm-9.0.0.src.tar.xz
|
||||
cd llvm-9.0.0.src/tools/
|
||||
tar xf ../../cfe-9.0.0.src.tar.xz
|
||||
mv cfe-9.0.0.src/ clang
|
||||
cd ../projects/
|
||||
tar xf ../../compiler-rt-9.0.0.src.tar.xz
|
||||
mv compiler-rt-9.0.0.src/ compiler-rt
|
||||
tar xf ../../libcxx-9.0.0.src.tar.xz
|
||||
mv libcxx-9.0.0.src/ libcxx
|
||||
tar xf ../../libcxxabi-9.0.0.src.tar.xz
|
||||
mv libcxxabi-9.0.0.src/ libcxxabi
|
||||
tar xf ../../openmp-9.0.0.src.tar.xz
|
||||
mv openmp-9.0.0.src/ openmp
|
||||
cd ../..
|
||||
mv llvm-9.0.0.src llvm
|
||||
tar cJ llvm > llvm_clang_compiler-rt_libcxx_libcxxabi_openmp-9.0.0.tar.xz
|
@ -0,0 +1,13 @@
|
||||
--- a/llvm/tools/clang/lib/Sema/SemaInit.cpp
|
||||
+++ b/llvm/tools/clang/lib/Sema/SemaInit.cpp
|
||||
@@ -7147,7 +7147,9 @@ void Sema::checkInitializerLifetime(const InitializedEntity &Entity,
|
||||
<< Entity.getType()->isReferenceType() << DRE->getDecl()
|
||||
<< isa<ParmVarDecl>(DRE->getDecl()) << DiagRange;
|
||||
} else if (isa<BlockExpr>(L)) {
|
||||
- Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;
|
||||
+ // Don't throw this error during Infer runs
|
||||
+ // Diag(DiagLoc, diag::err_ret_local_block) << DiagRange;
|
||||
+ return false;
|
||||
} else if (isa<AddrLabelExpr>(L)) {
|
||||
// Don't warn when returning a label from a statement expression.
|
||||
// Leaving the scope doesn't end its lifetime.
|
@ -0,0 +1,77 @@
|
||||
--- a/llvm/tools/clang/lib/AST/ItaniumMangle.cpp
|
||||
+++ b/llvm/tools/clang/lib/AST/ItaniumMangle.cpp
|
||||
@@ -3048,11 +3048,7 @@ void CXXNameMangler::mangleNeonVectorType(const VectorType *T) {
|
||||
}
|
||||
|
||||
void CXXNameMangler::mangleNeonVectorType(const DependentVectorType *T) {
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID = Diags.getCustomDiagID(
|
||||
- DiagnosticsEngine::Error,
|
||||
- "cannot mangle this dependent neon vector type yet");
|
||||
- Diags.Report(T->getAttributeLoc(), DiagID);
|
||||
+ Out << "__unhandled_NeonVectorType";
|
||||
}
|
||||
|
||||
static StringRef mangleAArch64VectorBase(const BuiltinType *EltType) {
|
||||
@@ -3123,11 +3119,7 @@ void CXXNameMangler::mangleAArch64NeonVectorType(const VectorType *T) {
|
||||
Out << TypeName.length() << TypeName;
|
||||
}
|
||||
void CXXNameMangler::mangleAArch64NeonVectorType(const DependentVectorType *T) {
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID = Diags.getCustomDiagID(
|
||||
- DiagnosticsEngine::Error,
|
||||
- "cannot mangle this dependent neon vector type yet");
|
||||
- Diags.Report(T->getAttributeLoc(), DiagID);
|
||||
+ Out << "__unhandled_AArch64NeonVectorType";
|
||||
}
|
||||
|
||||
// GNU extension: vector types
|
||||
@@ -3626,12 +3618,7 @@ recurse:
|
||||
case Expr::BuiltinBitCastExprClass:
|
||||
{
|
||||
if (!NullOut) {
|
||||
- // As bad as this diagnostic is, it's better than crashing.
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
- "cannot yet mangle expression type %0");
|
||||
- Diags.Report(E->getExprLoc(), DiagID)
|
||||
- << E->getStmtClassName() << E->getSourceRange();
|
||||
+ Out << "__unhandled_expression";
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -3652,12 +3639,7 @@ recurse:
|
||||
|
||||
// Even gcc-4.5 doesn't mangle this.
|
||||
case Expr::BinaryConditionalOperatorClass: {
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID =
|
||||
- Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
- "?: operator with omitted middle operand cannot be mangled");
|
||||
- Diags.Report(E->getExprLoc(), DiagID)
|
||||
- << E->getStmtClassName() << E->getSourceRange();
|
||||
+ Out << "__unhandled_BinaryConditionalOperatorClass";
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3952,18 +3934,11 @@ recurse:
|
||||
Out << 'a';
|
||||
break;
|
||||
case UETT_VecStep: {
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
- "cannot yet mangle vec_step expression");
|
||||
- Diags.Report(DiagID);
|
||||
+ Out << "__unhandled_VecStep";
|
||||
return;
|
||||
}
|
||||
case UETT_OpenMPRequiredSimdAlign: {
|
||||
- DiagnosticsEngine &Diags = Context.getDiags();
|
||||
- unsigned DiagID = Diags.getCustomDiagID(
|
||||
- DiagnosticsEngine::Error,
|
||||
- "cannot yet mangle __builtin_omp_required_simd_align expression");
|
||||
- Diags.Report(DiagID);
|
||||
+ Out << "__unhandled_UETT_OpenMPRequiredSimdAlign";
|
||||
return;
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
--- a/llvm/tools/clang/lib/Sema/SemaTemplate.cpp
|
||||
+++ b/llvm/tools/clang/lib/Sema/SemaTemplate.cpp
|
||||
@@ -441,9 +441,6 @@ bool Sema::LookupTemplateName(LookupResult &Found,
|
||||
IsDependent |= Found.wasNotFoundInCurrentInstantiation();
|
||||
}
|
||||
|
||||
- if (Found.isAmbiguous())
|
||||
- return false;
|
||||
-
|
||||
if (ATK && !SS.isSet() && ObjectType.isNull() && TemplateKWLoc.isInvalid()) {
|
||||
// C++2a [temp.names]p2:
|
||||
// A name is also considered to refer to a template if it is an
|
@ -0,0 +1,33 @@
|
||||
/**
|
||||
* Copyright (c) 2014, Facebook, Inc.
|
||||
* Copyright (c) 2003-2014 University of Illinois at Urbana-Champaign.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This file is distributed under the University of Illinois Open Source
|
||||
* License.
|
||||
* See LLVM-LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Clang frontend plugin to export an AST of clang into Json, Yojson and Biniou
|
||||
* while conforming to the inlined ATD specifications.
|
||||
*/
|
||||
|
||||
#include "ASTExporter.h"
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ASTExporter Plugin
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static ASTLib::FrontendPluginRegistry::Add<ASTLib::JsonExporterASTAction> X(
|
||||
"JsonASTExporter",
|
||||
"Export the AST of source files into ATD-specified Json data");
|
||||
|
||||
static ASTLib::FrontendPluginRegistry::Add<ASTLib::YojsonExporterASTAction> Y(
|
||||
"YojsonASTExporter",
|
||||
"Export the AST of source files into ATD-specified Yojson data");
|
||||
|
||||
static ASTLib::FrontendPluginRegistry::Add<ASTLib::BiniouExporterASTAction> Z(
|
||||
"BiniouASTExporter",
|
||||
"Export the AST of source files into ATD-specified biniou data");
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,279 @@
|
||||
Guidelines for writing ATD annotations in ASTExporter.cpp
|
||||
=========================================================
|
||||
|
||||
The ATD specifications inlined in ASTExporter.cpp are used to generate Ocaml parsers using `atdgen`. Those annotations must reflect
|
||||
closely the Yojson/Json/Biniou emitted by the C++ plugin.
|
||||
|
||||
The ATD language and the parser generating tool `atdgen` are documented here:
|
||||
https://atd.readthedocs.io/en/latest/atdgen.html
|
||||
|
||||
ATD basics
|
||||
----------
|
||||
|
||||
The definition of object in ASTExporter.cpp typically look like this:
|
||||
```
|
||||
//@atd type record = {
|
||||
//@atd mandatory_field : string
|
||||
//@atd ?optional_int : int option
|
||||
//@atd ~string_empty_by_default : string
|
||||
//@atd } <ocaml field_prefix="r_">
|
||||
```
|
||||
|
||||
Each line of ATD definitions must start with `//@atd`-style comments.
|
||||
|
||||
The `?` symbols mean that an absent field is ok and maps to the ocaml value `None`.
|
||||
The `~` symbols mean that an absent field is ok and maps to some default value for this type.
|
||||
|
||||
The `<ocaml field_prefix="r_">` annotations are currently required to disambiguate records on the ocaml side. The prefix should be
|
||||
made the first letters of the C++ types, except for a few exceptions (e.g. `CXX` is mapped to `x`).
|
||||
|
||||
Valid Yojson values for this specification are for instance:
|
||||
```
|
||||
{ "mandatory_field" : "foo" }
|
||||
{ "mandatory_field" : "foo", "optional_int" : 3 }
|
||||
```
|
||||
|
||||
Simple example
|
||||
--------------
|
||||
|
||||
```
|
||||
//@atd type source_location = {
|
||||
//@atd ?file : string option;
|
||||
//@atd ?line : int option;
|
||||
//@atd ?column : int option;
|
||||
//@atd } <ocaml field_prefix="sl_">
|
||||
template <class ATDWriter>
|
||||
void ASTExporter<ATDWriter>::dumpSourceLocation(SourceLocation Loc) {
|
||||
|
||||
SourceLocation SpellingLoc = SM.getSpellingLoc(Loc);
|
||||
PresumedLoc PLoc = SM.getPresumedLoc(SpellingLoc);
|
||||
if (PLoc.isInvalid()) {
|
||||
// Outputs an object. The closing brace will be added when 'Scope' is destroyed.
|
||||
// This is typical in C++ : http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
|
||||
// Second argument encodes size of an object. In this case there are 0 tags exported
|
||||
ObjectScope Scope(OF, 0);
|
||||
// Early return is ok because all fields are optional.
|
||||
// return will destroy Scope and add closing brace
|
||||
return;
|
||||
}
|
||||
|
||||
// There are at most 3 tags exported in this case. It's ok to specify upper bound
|
||||
// on the size of the object. It will be correct, but inefficient.
|
||||
ObjectScope Scope(OF, 3);
|
||||
|
||||
if (strcmp(PLoc.getFilename(), LastLocFilename) != 0) {
|
||||
// emits the tag of the field 'file'
|
||||
OF.emitTag("file");
|
||||
// emits a string (since we do emit something, the ocaml value is 'Some (...)')
|
||||
OF.emitString(PLoc.getFilename());
|
||||
OF.emitTag("line");
|
||||
OF.emitInteger(PLoc.getLine());
|
||||
OF.emitTag("column");
|
||||
OF.emitInteger(PLoc.getColumn());
|
||||
}
|
||||
} // Scope gets destroyed here and adds closing brace
|
||||
```
|
||||
|
||||
Note that parser expects the C++ code to emit the corresponding fields in the same order.
|
||||
|
||||
More complex example
|
||||
--------------------
|
||||
|
||||
To get types of AST nodes, exporter relies on generated header files from clang.
|
||||
```
|
||||
//@atd type decl_ref = {
|
||||
//@atd kind : decl_kind; (* ATD type declared below *)
|
||||
//@atd ?name : string;
|
||||
//@atd ~is_hidden : bool;
|
||||
//@atd ?qual_type : qual_type option
|
||||
//@atd } <ocaml field_prefix="dr_">
|
||||
//@atd
|
||||
//@atd type decl_kind = [
|
||||
|
||||
// define macros used in clang/AST/DeclNodes.inc to produce ATD annotations
|
||||
#define DECL(DERIVED, BASE) //@atd | DERIVED
|
||||
#define ABSTRACT_DECL(DECL) DECL
|
||||
// clang/AST/DeclNodes.inc file contains all possible Decl nodes
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
|
||||
//@atd ]
|
||||
|
||||
template <class ATDWriter>
|
||||
void ASTExporter<ATDWriter>::dumpBareDeclRef(const Decl &D) {
|
||||
const NamedDecl *ND = dyn_cast<NamedDecl>(&D);
|
||||
bool isHidden = ND ? ND->isHidden() : false;
|
||||
const ValueDecl *VD = dyn_cast<ValueDecl>(&D);
|
||||
|
||||
// specify exact size of the scope.
|
||||
ObjectScope Scope(OF, 1 + (bool)ND + isHidden + (bool)VD);
|
||||
OF.emitTag("kind");
|
||||
// case of an algebraic datatype that carries no value (like a C enum field)
|
||||
OF.emitSimpleVariant(D.getDeclKindName());
|
||||
|
||||
// ok not to output anything because the field is optional
|
||||
if (ND) {
|
||||
OF.emitTag("name");
|
||||
OF.emitString(ND->getNameAsString());
|
||||
// flags correspond to ATD fields of the form "~tag : bool"
|
||||
OF.emitFlag("is_hidden", ND->isHidden());
|
||||
}
|
||||
// ok not to output anything because the field is optional
|
||||
if (VD) {
|
||||
OF.emitTag("qual_type");
|
||||
dumpQualType(VD->getType()); // will emit value for a QualType
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
The complex definition for decl_kind is processed in several stages.
|
||||
|
||||
First we use an adequate node of the clang preprocessor and expand the `#include <clang/AST/DeclNodes.inc>` to following code:
|
||||
```
|
||||
//@atd type decl_kind = [
|
||||
//@atd | AccessSpec
|
||||
//@atd | Block
|
||||
//@atd | Captured
|
||||
//@atd (* ... *)
|
||||
//@atd ]
|
||||
```
|
||||
|
||||
Then we extract the ATD specifications by looking for `//@atd`-style comments
|
||||
```
|
||||
type decl_kind = [
|
||||
| AccessSpec
|
||||
| Block
|
||||
| Captured
|
||||
(* ... *)
|
||||
]
|
||||
```
|
||||
|
||||
After calling `atdgen`, the final Ocaml type is:
|
||||
```
|
||||
type decl_kind = `AccessSpec | `Block | `Captured | `ClassScopeFunctionSpecialization (* ... *)
|
||||
```
|
||||
|
||||
Testing
|
||||
-------
|
||||
|
||||
Compiling with `DEBUG=1` will make the ATDWriter enforce the general well-formedness of the emitted Yojson/Json/Biniou. For instance, a missing tag will trigger an assert failure.
|
||||
|
||||
Discrepancies between annotations and emitted values are detected by the tests in `../clang-ocaml`.
|
||||
|
||||
It's is important to test both exporter (`make test`) and atd annotations (`make -C ../clang-ocaml test`)
|
||||
|
||||
When changing the exporter, sometimes tests will fail due to exporting new information. To record this fact, run `make record-test-outputs`
|
||||
|
||||
Mapping clang AST nodes to ocaml values
|
||||
---------------------------------------
|
||||
|
||||
Clang AST entities of a given type are typically represented by a cluster of classes.
|
||||
|
||||
For instance, here is the cluster for declarations: http://clang.llvm.org/doxygen/classclang_1_1Decl.html
|
||||
Function declaration: https://clang.llvm.org/doxygen/classclang_1_1FunctionDecl.html
|
||||
|
||||
To map these entities to a flat algebraic data type of Ocaml (serialized as a "variant" by ATDWriter), as seen
|
||||
before, we heavily rely on a (hacky) C-preprocessing stage and several scripts. They can be found in `atdlib` directory.
|
||||
|
||||
Let us study how declarations are handled more precisely. Handling for statement and type nodes is very similar.
|
||||
|
||||
##### Default values for node tuples
|
||||
```
|
||||
#define DECL(DERIVED, BASE) //@atd #define @DERIVED@_decl_tuple @BASE@_tuple
|
||||
#define ABSTRACT_DECL(DECL) DECL
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
```
|
||||
|
||||
After one step of preprocessing + ATD-extraction, this creates the following intermediate code (see `build/ast_inline.atd.inc`)
|
||||
```
|
||||
#define access_spec_decl_tuple decl_tuple
|
||||
#define block_decl_tuple decl_tuple
|
||||
#define captured_decl_tuple decl_tuple
|
||||
// ...
|
||||
#define named_decl_tuple decl_tuple
|
||||
#define decl_context_tuple decl list * decl_context_info
|
||||
```
|
||||
|
||||
This defines the default value of each `xxxx_decl_tuple` to be that of the base class.
|
||||
|
||||
The `@...@` signs are processed by python macros in `libtooling/atdlib`. For instance, `@CaptureDecl@` gives `capture_decl`.
|
||||
|
||||
##### Overriding node tuples when outputting data
|
||||
|
||||
When the visiting method for nodes of given type is effectively written, it is expected that the
|
||||
corresponding `#define xxxx_decl_tuple` is overwritten to add the specific information of the kind of nodes.
|
||||
It is important to name tuples correctly. For example, for `SomeNewNodeDecl`, tuple needs to be named as `some_new_node_decl_tuple`. Failure to name them exactly like this will result in picking up default value for tuple node instead of overridden one.
|
||||
|
||||
It is also required to specify how many fields tuple for given node has via `XxxTupleSize()` method
|
||||
|
||||
```
|
||||
|
||||
//@atd #define decl_tuple decl_info
|
||||
//@atd type decl_info = {
|
||||
//@atd (* ... *)
|
||||
//@atd } <ocaml field_prefix="di_">
|
||||
|
||||
template <class ATDWriter>
|
||||
int ASTExporter<ATDWriter>::DeclTupleSize() {
|
||||
return 1; // decl_tuple has size of 1 (decl_info)
|
||||
}
|
||||
|
||||
// Decl is the top class. Everything here concerns all declarations nodes.
|
||||
template <class ATDWriter>
|
||||
void ASTExporter<ATDWriter>::VisitDecl(const Decl *D) {
|
||||
// ...
|
||||
}
|
||||
|
||||
|
||||
//@atd #define named_decl_tuple decl_tuple * string (* must start with the tuple of the base class *)
|
||||
template <class ATDWriter>
|
||||
int ASTExporter<ATDWriter>::NamedDeclTupleSize() {
|
||||
return DeclTupleSize() + 1; // named_decl_tuple has size of decl_tuple + 1 (for string field)
|
||||
}
|
||||
|
||||
// Some important intermediate abstract class NamedDecl.
|
||||
template <class ATDWriter>
|
||||
void ASTExporter<ATDWriter>::VisitNamedDecl(const NamedDecl *D) {
|
||||
// Must visit the base class to output its tuple of information.
|
||||
VisitDecl(D);
|
||||
|
||||
// Extra information for the derived class.
|
||||
OF.emitString(D->getNameAsString());
|
||||
}
|
||||
```
|
||||
|
||||
##### Putting everything together
|
||||
|
||||
The final definitions of the `xxx_decl_tuple` are meant to be inlined in the declaration of the actual sum type for all declarations.
|
||||
|
||||
```
|
||||
// main variant for declarations
|
||||
//@atd type decl = [
|
||||
#define DECL(DERIVED, BASE) //@atd | DERIVED@@Decl of (@DERIVED@_decl_tuple)
|
||||
#define ABSTRACT_DECL(DECL)
|
||||
#include <clang/AST/DeclNodes.inc>
|
||||
//@atd ]
|
||||
|
||||
```
|
||||
|
||||
This expands first to: (see `build/ast_inline.atd.p`)
|
||||
```
|
||||
type decl = [
|
||||
| AccessSpecDecl of (access_spec_decl_tuple)
|
||||
| BlockDecl of (block_decl_tuple)
|
||||
| CapturedDecl of (captured_decl_tuple)
|
||||
| ClassScopeFunctionSpecializationDecl of (class_scope_function_specialization_decl_tuple)
|
||||
(* ... *)
|
||||
]
|
||||
```
|
||||
|
||||
Then after a last stage of preprocessing: (see `build/clang_ast.atd`)
|
||||
```
|
||||
type decl = [
|
||||
AccessSpecDecl of (decl_info)
|
||||
| BlockDecl
|
||||
of (decl_info * decl list * decl_context_info * block_decl_info)
|
||||
| CapturedDecl of (decl_info * decl list * decl_context_info)
|
||||
| ClassScopeFunctionSpecializationDecl of (decl_info)
|
||||
(* ... *)
|
||||
]
|
||||
```
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include "AttrParameterVectorStream.h"
|
||||
|
||||
#include <llvm/Support/raw_ostream.h>
|
||||
|
||||
namespace ASTLib {
|
||||
|
||||
AttrParameterVectorStream &AttrParameterVectorStream::operator<<(
|
||||
const std::string &str) {
|
||||
// hack to get rid of spurious leading " "s
|
||||
if (str != " ") {
|
||||
Content.push_back(str);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
AttrParameterVectorStream &AttrParameterVectorStream::operator<<(
|
||||
const unsigned int x) {
|
||||
return operator<<(std::to_string(x));
|
||||
}
|
||||
|
||||
AttrParameterVectorStream &AttrParameterVectorStream::operator<<(
|
||||
const llvm::VersionTuple &verTup) {
|
||||
return operator<<(verTup.getAsString());
|
||||
}
|
||||
|
||||
const std::vector<std::string> &AttrParameterVectorStream::getContent() {
|
||||
return Content;
|
||||
}
|
||||
|
||||
} // end of namespace ASTLib
|
@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <llvm/Support/VersionTuple.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace ASTLib {
|
||||
|
||||
class AttrParameterVectorStream {
|
||||
|
||||
private:
|
||||
std::vector<std::string> Content;
|
||||
|
||||
public:
|
||||
AttrParameterVectorStream() {}
|
||||
|
||||
AttrParameterVectorStream &operator<<(const std::string &str);
|
||||
AttrParameterVectorStream &operator<<(const unsigned int x);
|
||||
AttrParameterVectorStream &operator<<(const llvm::VersionTuple &verTup);
|
||||
|
||||
const std::vector<std::string> &getContent();
|
||||
};
|
||||
|
||||
} // end of namespace ASTLib
|
@ -0,0 +1,95 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <clang/AST/AST.h>
|
||||
#include <llvm/ADT/SmallVector.h>
|
||||
#include <llvm/Support/Path.h>
|
||||
#include <vector>
|
||||
|
||||
#include "FileUtils.h"
|
||||
|
||||
namespace FileUtils {
|
||||
|
||||
/**
|
||||
* Simplify away "." and ".." elements.
|
||||
* If pathToNormalize is a relative path, it will be pre-pended with
|
||||
* currentWorkingDirectory unless currentWorkingDirectory == "".
|
||||
*/
|
||||
std::string makeAbsolutePath(const std::string ¤tWorkingDirectory,
|
||||
std::string path) {
|
||||
llvm::SmallVector<char, 16> result;
|
||||
std::vector<std::string> elements;
|
||||
int skip = 0;
|
||||
|
||||
if (llvm::sys::path::is_relative(path)) {
|
||||
// Prepend currentWorkingDirectory to path (unless currentWorkingDirectory
|
||||
// is empty).
|
||||
llvm::SmallVector<char, 16> vec(currentWorkingDirectory.begin(),
|
||||
currentWorkingDirectory.end());
|
||||
llvm::sys::path::append(vec, path);
|
||||
path = std::string(vec.begin(), vec.end());
|
||||
} else {
|
||||
// Else copy the separator to maintain an absolute path.
|
||||
result.append(1, path.front());
|
||||
}
|
||||
|
||||
elements.push_back(llvm::sys::path::filename(path));
|
||||
|
||||
while (llvm::sys::path::has_parent_path(path)) {
|
||||
path = llvm::sys::path::parent_path(path);
|
||||
const std::string &element(llvm::sys::path::filename(path));
|
||||
if (element == ".") {
|
||||
continue;
|
||||
}
|
||||
if (element == "..") {
|
||||
skip++;
|
||||
continue;
|
||||
}
|
||||
if (skip > 0) {
|
||||
skip--;
|
||||
continue;
|
||||
}
|
||||
elements.push_back(element);
|
||||
}
|
||||
while (skip > 0) {
|
||||
elements.push_back("..");
|
||||
skip--;
|
||||
}
|
||||
|
||||
for (auto I = elements.rbegin(), E = elements.rend(); I != E; I++) {
|
||||
llvm::sys::path::append(result, *I);
|
||||
}
|
||||
return std::string(result.begin(), result.end());
|
||||
}
|
||||
|
||||
std::string makeRelativePath(const std::string &repoRoot,
|
||||
const std::string &sysRoot,
|
||||
bool keepExternalPaths,
|
||||
bool allowSiblingsToRepoRoot,
|
||||
const std::string &path) {
|
||||
if (repoRoot != "") {
|
||||
if (llvm::StringRef(path).startswith(repoRoot + "/")) {
|
||||
return path.substr(repoRoot.size() + 1);
|
||||
}
|
||||
if (allowSiblingsToRepoRoot) {
|
||||
std::string parentOfRoot = llvm::sys::path::parent_path(repoRoot);
|
||||
if (llvm::StringRef(path).startswith(parentOfRoot + "/")) {
|
||||
return "../" + path.substr(parentOfRoot.size() + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (sysRoot != "" && llvm::StringRef(path).startswith(sysRoot + "/")) {
|
||||
// Intentionally keep the heading "/" in this case.
|
||||
return path.substr(sysRoot.size());
|
||||
}
|
||||
if (keepExternalPaths) {
|
||||
return path;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
} // namespace FileUtils
|
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <clang/AST/Decl.h>
|
||||
#include <string>
|
||||
|
||||
namespace FileUtils {
|
||||
|
||||
/**
|
||||
* Simplify away "." and ".." elements.
|
||||
* If pathToNormalize is a relative path, it will be pre-pended with
|
||||
* currentWorkingDirectory unless currentWorkingDirectory == "".
|
||||
*/
|
||||
std::string makeAbsolutePath(const std::string ¤tWorkingDirectory,
|
||||
std::string path);
|
||||
|
||||
/**
|
||||
* Try to delete a prefix "repoRoot/" OR "sysRoot" from the given absolute path.
|
||||
* If no rule applies AND keepExternalPaths is true, return the same path,
|
||||
* otherwise return the empty string.
|
||||
*/
|
||||
std::string makeRelativePath(const std::string &repoRoot,
|
||||
const std::string &sysRoot,
|
||||
bool keepExternalPaths,
|
||||
bool allowSiblingsToRoot,
|
||||
const std::string &path);
|
||||
|
||||
} // namespace FileUtils
|
@ -0,0 +1,158 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
.PHONY: clean all test all_ast_samples
|
||||
|
||||
LEVEL=..
|
||||
include $(LEVEL)/Makefile.common
|
||||
|
||||
HEADERS+=SimplePluginASTAction.h FileUtils.h AttrParameterVectorStream.h
|
||||
OBJS+=SimplePluginASTAction.o FileUtils.o AttrParameterVectorStream.o
|
||||
|
||||
# ASTExporter
|
||||
HEADERS+=atdlib/ATDWriter.h ASTExporter.h NamePrinter.h
|
||||
OBJS+=ASTExporter.o
|
||||
|
||||
# Json
|
||||
PLUGINS+=JsonASTExporter
|
||||
EXTS+=.json
|
||||
|
||||
# Yojson
|
||||
PLUGINS+=YojsonASTExporter
|
||||
EXTS+=.yjson
|
||||
|
||||
# biniou
|
||||
BINIOU_PLUGIN=BiniouASTExporter
|
||||
PLUGINS+=$(BINIOU_PLUGIN)
|
||||
EXTS+=.biniou
|
||||
|
||||
all: build/FacebookClangPlugin.dylib build/ast_exporter_bin
|
||||
|
||||
include $(LEVEL)/Makefile.rules
|
||||
|
||||
CLANG_FRONTEND=$(CLANG) -fsyntax-only -Xpreprocessor -detailed-preprocessing-record -Xclang -load -Xclang $(shell pwd)/build/FacebookClangPlugin.dylib
|
||||
|
||||
build/FacebookClangPlugin.dylib: $(OBJS:%=build/%) $(HEADERS)
|
||||
@mkdir -p build
|
||||
$(CXX) $(LDFLAGS_DYLIB) -o $@ $(OBJS:%=build/%) -lz -lpthread -lm
|
||||
|
||||
# Experimental tool. This requires clang static libraries.
|
||||
AST_EXPORTER_OBJS=ast_exporter_bin.o SimplePluginASTAction.o FileUtils.o AttrParameterVectorStream.o
|
||||
build/ast_exporter_bin: $(AST_EXPORTER_OBJS:%=build/%) $(HEADERS)
|
||||
@mkdir -p build
|
||||
$(CXX) -o $@ $(AST_EXPORTER_OBJS:%=build/%) $(LDFLAGS) $(LLVM_CXXFLAGS) $(CLANG_TOOL_LIBS) $(LLVM_LDFLAGS) -lz -lpthread -lm
|
||||
|
||||
TEST_DIRS=tests
|
||||
|
||||
OUT_TEST_FILES=${TEST_DIRS:%=%/*/*.out}
|
||||
|
||||
# To make sharing of test files easier, each source file should be
|
||||
# found in 'tests'. A plugin will only use the source files for which
|
||||
# a .exp file exists in the corresponding subdirectory.
|
||||
EXPFILES_FORMULA=tests/$$P/*.exp
|
||||
SRCFILE_FORMULA=tests/$$(basename $$TEST)
|
||||
FILTERFILE_FORMULA=tests/$${P}/filter.sh
|
||||
|
||||
test: build/FacebookClangPlugin.dylib
|
||||
@for P in $(PLUGINS); do \
|
||||
if [ "$$P" == "BiniouASTExporter" ] && ! hash bdump 2>/dev/null; \
|
||||
then continue; \
|
||||
fi; \
|
||||
echo "-- $$P --"; \
|
||||
export CLANG_FRONTEND_PLUGIN__AST_WITH_POINTERS=0; \
|
||||
rm -rf build/tmp_$$P; \
|
||||
mkdir -p build/tmp_$$P; \
|
||||
for EXPFILE in $(EXPFILES_FORMULA); do \
|
||||
TEST=$${EXPFILE%.exp}; \
|
||||
EXTRA_FLAGS=""; \
|
||||
case "$(SRCFILE_FORMULA)" in \
|
||||
*.m ) \
|
||||
if [ "$(HAS_OBJC)" = "no" ]; then \
|
||||
printf "[~] %s skipped (no Objective-C support)\n" \
|
||||
"$$(basename $(SRCFILE_FORMULA))"; \
|
||||
continue; \
|
||||
fi; \
|
||||
EXTRA_FLAGS="-ObjC -fblocks $(IOSFLAGS)"; \
|
||||
;; \
|
||||
*.cpp ) \
|
||||
EXTRA_FLAGS="--std=c++14"; \
|
||||
;; \
|
||||
*.mm ) \
|
||||
EXTRA_FLAGS="--std=c++14 -ObjC++ -fblocks $(IOSFLAGS)"; \
|
||||
;; \
|
||||
esac; \
|
||||
$(RUNTEST) "$$TEST" $(FILTERFILE_FORMULA) \
|
||||
$(CLANG_FRONTEND) $$EXTRA_FLAGS -Xclang -plugin -Xclang $$P \
|
||||
-Xclang -plugin-arg-$$P -Xclang - \
|
||||
-Xclang -plugin-arg-$$P -Xclang USE_TEMP_DIR_FOR_DEDUPLICATION=build/tmp_$$P \
|
||||
-c $(SRCFILE_FORMULA); \
|
||||
done; \
|
||||
done
|
||||
@if [ ! $$KEEP_TEST_OUTPUTS ]; then rm -f $(OUT_TEST_FILES); fi
|
||||
|
||||
record-test-outputs:
|
||||
@$(MAKE) DEBUG=1 KEEP_TEST_OUTPUTS=1 test || true
|
||||
@for F in $(OUT_TEST_FILES); do cp $$F $${F%.out}.exp; done
|
||||
@rm -f $(OUT_TEST_FILES)
|
||||
|
||||
clean:
|
||||
@rm -rf build/* $(OUT_TEST_FILES)
|
||||
|
||||
# -- AST samples for specific end-to-end tests --
|
||||
|
||||
REGULAR_SOURCES=$(wildcard tests/*.m) $(wildcard tests/*.c) $(wildcard tests/*.cpp) $(wildcard tests/*.mm)
|
||||
AST_SAMPLE_FILES=ASTExporter.cpp $(REGULAR_SOURCES:tests/%=%)
|
||||
all_ast_samples: $(AST_SAMPLE_FILES:%=build/ast_samples/%.json.gz) $(AST_SAMPLE_FILES:%=build/ast_samples/%.yjson.gz)
|
||||
|
||||
# dump samples files in Yojson using ASTExporter.cpp
|
||||
YJ_DUMPER_ARGS=-Xclang -plugin -Xclang YojsonASTExporter -Xclang -plugin-arg-YojsonASTExporter -Xclang
|
||||
|
||||
build/ast_samples/%.cpp.yjson: %.cpp build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(CFLAGS) -Wno-ignored-qualifiers -I. $(YJ_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.cpp.yjson: tests/%.cpp build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) --std=c++14 $(YJ_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.c.yjson: tests/%.c build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(YJ_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.m.yjson: tests/%.m build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(IOSFLAGS) $(YJ_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.mm.yjson: tests/%.mm build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) --std=c++14 $(IOSFLAGS) $(YJ_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
# dump sample files in Yojson using ASTExporter.cpp
|
||||
J_DUMPER_ARGS=-Xclang -plugin -Xclang JsonASTExporter -Xclang -plugin-arg-JsonASTExporter -Xclang
|
||||
|
||||
build/ast_samples/%.cpp.json: %.cpp build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(CFLAGS) -Wno-ignored-qualifiers -I. $(J_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.cpp.json: tests/%.cpp build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) --std=c++14 $(J_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.c.json: tests/%.c build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(J_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.m.json: tests/%.m build/FacebookClangPlugin.dylib
|
||||
@mkdir -p build/ast_samples
|
||||
$(CLANG_FRONTEND) $(IOSFLAGS) $(J_DUMPER_ARGS) $@ -c $<
|
||||
|
||||
build/ast_samples/%.gz: build/ast_samples/%
|
||||
@gzip -f < $< > $@
|
||||
|
||||
# generate a preprocessed version of ASTExporter.cpp where ATD directives can be read
|
||||
# we do not include the C/C++ headers to avoid parsing issues with the 'traditional' cpp (needed for precisely expanding our /// comments)
|
||||
build/ASTExporter.h.p: ASTExporter.h
|
||||
@mkdir -p build
|
||||
@cat $< | grep -v '#include *["<][^.]*\(\.h\)\?[">]' | $(ATD_CPP) -I$(CLANG_PREFIX)/include > $@
|
@ -0,0 +1,194 @@
|
||||
/*
|
||||
* Copyright (c) 2016-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include <clang/AST/DeclVisitor.h>
|
||||
#include <clang/Basic/SourceManager.h>
|
||||
|
||||
#include "atdlib/ATDWriter.h"
|
||||
namespace ASTLib {
|
||||
|
||||
using namespace clang;
|
||||
template <class ATDWriter>
|
||||
class NamePrinter : public ConstDeclVisitor<NamePrinter<ATDWriter>> {
|
||||
typedef typename ATDWriter::ObjectScope ObjectScope;
|
||||
typedef typename ATDWriter::ArrayScope ArrayScope;
|
||||
typedef typename ATDWriter::TupleScope TupleScope;
|
||||
typedef typename ATDWriter::VariantScope VariantScope;
|
||||
|
||||
const SourceManager &SM;
|
||||
ATDWriter &OF;
|
||||
|
||||
PrintingPolicy getPrintingPolicy();
|
||||
void printTemplateArgList(llvm::raw_ostream &OS,
|
||||
const ArrayRef<TemplateArgument> Args);
|
||||
|
||||
public:
|
||||
NamePrinter(const SourceManager &SM, ATDWriter &OF) : SM(SM), OF(OF) {}
|
||||
|
||||
// implementation is inspired by NamedDecl::printQualifiedName
|
||||
// but with better handling for anonymous structs,unions and namespaces
|
||||
void printDeclName(const NamedDecl &D);
|
||||
|
||||
void VisitNamedDecl(const NamedDecl *D);
|
||||
void VisitNamespaceDecl(const NamespaceDecl *ND);
|
||||
void VisitTagDecl(const TagDecl *TD);
|
||||
void VisitFunctionDecl(const FunctionDecl *FD);
|
||||
};
|
||||
|
||||
// 64 bits fnv-1a
|
||||
const uint64_t FNV64_hash_start = 14695981039346656037ULL;
|
||||
const uint64_t FNV64_prime = 1099511628211ULL;
|
||||
uint64_t fnv64Hash(const char *s, int n) {
|
||||
uint64_t hash = FNV64_hash_start;
|
||||
for (int i = 0; i < n; ++i) {
|
||||
hash ^= s[i];
|
||||
hash *= FNV64_prime;
|
||||
}
|
||||
return hash;
|
||||
}
|
||||
|
||||
uint64_t fnv64Hash(llvm::raw_svector_ostream &OS) {
|
||||
std::string s = OS.str();
|
||||
return fnv64Hash(s.data(), s.size());
|
||||
}
|
||||
|
||||
const int templateLengthThreshold = 40;
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::printTemplateArgList(
|
||||
llvm::raw_ostream &OS, const ArrayRef<TemplateArgument> Args) {
|
||||
SmallString<64> Buf;
|
||||
llvm::raw_svector_ostream tmpOS(Buf);
|
||||
clang::printTemplateArgumentList(tmpOS, Args, getPrintingPolicy());
|
||||
if (tmpOS.str().size() > templateLengthThreshold) {
|
||||
OS << "<";
|
||||
OS.write_hex(fnv64Hash(tmpOS));
|
||||
OS << ">";
|
||||
} else {
|
||||
OS << tmpOS.str();
|
||||
}
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::printDeclName(const NamedDecl &D) {
|
||||
const DeclContext *Ctx = D.getDeclContext();
|
||||
SmallVector<const NamedDecl *, 8> Contexts;
|
||||
Contexts.push_back(&D);
|
||||
|
||||
// Don't dump full qualifier for variables declared
|
||||
// inside a function/method/block
|
||||
// For structs defined inside functions, dump fully qualified name
|
||||
if (Ctx->isFunctionOrMethod() && !isa<TagDecl>(&D)) {
|
||||
Ctx = nullptr;
|
||||
}
|
||||
|
||||
while (Ctx && isa<NamedDecl>(Ctx)) {
|
||||
bool shouldPrintCtx = true;
|
||||
// skip inline namespaces when printing qualified name
|
||||
if (const NamespaceDecl *ND = dyn_cast<NamespaceDecl>(Ctx)) {
|
||||
if (ND->isInline()) {
|
||||
shouldPrintCtx = false;
|
||||
}
|
||||
}
|
||||
if (shouldPrintCtx) {
|
||||
Contexts.push_back(cast<NamedDecl>(Ctx));
|
||||
}
|
||||
Ctx = Ctx->getParent();
|
||||
}
|
||||
|
||||
ArrayScope aScope(OF, Contexts.size());
|
||||
// dump list in reverse
|
||||
for (const Decl *Ctx : Contexts) {
|
||||
ConstDeclVisitor<NamePrinter<ATDWriter>>::Visit(Ctx);
|
||||
}
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::VisitNamedDecl(const NamedDecl *D) {
|
||||
OF.emitString(D->getNameAsString());
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::VisitNamespaceDecl(const NamespaceDecl *ND) {
|
||||
if (ND->isAnonymousNamespace()) {
|
||||
PresumedLoc PLoc = SM.getPresumedLoc(ND->getLocation());
|
||||
std::string file = "invalid_loc";
|
||||
if (PLoc.isValid()) {
|
||||
file = PLoc.getFilename();
|
||||
}
|
||||
OF.emitString("anonymous_namespace_" + file);
|
||||
} else {
|
||||
// for non-anonymous namespaces, fallback to normal behavior
|
||||
VisitNamedDecl(ND);
|
||||
}
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::VisitTagDecl(const TagDecl *D) {
|
||||
// heavily inspired by clang's TypePrinter::printTag() function
|
||||
SmallString<64> Buf;
|
||||
llvm::raw_svector_ostream StrOS(Buf);
|
||||
if (const IdentifierInfo *II = D->getIdentifier()) {
|
||||
StrOS << II->getName();
|
||||
} else if (TypedefNameDecl *Typedef = D->getTypedefNameForAnonDecl()) {
|
||||
StrOS << Typedef->getIdentifier()->getName();
|
||||
} else {
|
||||
if (isa<CXXRecordDecl>(D) && cast<CXXRecordDecl>(D)->isLambda()) {
|
||||
StrOS << "lambda";
|
||||
} else {
|
||||
StrOS << "anonymous_" << D->getKindName();
|
||||
}
|
||||
PresumedLoc PLoc = SM.getPresumedLoc(D->getLocation());
|
||||
if (PLoc.isValid()) {
|
||||
StrOS << "_" << PLoc.getFilename() << ':' << PLoc.getLine() << ':'
|
||||
<< PLoc.getColumn();
|
||||
}
|
||||
}
|
||||
if (const ClassTemplateSpecializationDecl *Spec =
|
||||
dyn_cast<ClassTemplateSpecializationDecl>(D)) {
|
||||
ArrayRef<TemplateArgument> Args;
|
||||
const TemplateArgumentList &TemplateArgs = Spec->getTemplateArgs();
|
||||
Args = TemplateArgs.asArray();
|
||||
printTemplateArgList(StrOS, Args);
|
||||
}
|
||||
OF.emitString(StrOS.str());
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
void NamePrinter<ATDWriter>::VisitFunctionDecl(const FunctionDecl *FD) {
|
||||
std::string template_str = "";
|
||||
// add instantiated template arguments for readability
|
||||
if (const TemplateArgumentList *TemplateArgs =
|
||||
FD->getTemplateSpecializationArgs()) {
|
||||
SmallString<64> Buf;
|
||||
llvm::raw_svector_ostream StrOS(Buf);
|
||||
printTemplateArgList(StrOS, TemplateArgs->asArray());
|
||||
template_str = StrOS.str();
|
||||
}
|
||||
OF.emitString(FD->getNameAsString() + template_str);
|
||||
}
|
||||
|
||||
template <class ATDWriter>
|
||||
PrintingPolicy NamePrinter<ATDWriter>::getPrintingPolicy() {
|
||||
// configure what to print
|
||||
LangOptions LO;
|
||||
PrintingPolicy Policy(LO);
|
||||
// print tag types
|
||||
Policy.IncludeTagDefinition = false;
|
||||
// print fully qualified names - this is needed by PrintTemplateArgumentList
|
||||
Policy.SuppressScope = false;
|
||||
// don't print inline and anonymous namespaces
|
||||
Policy.SuppressUnwrittenScope = true;
|
||||
// print locations of anonymous tags
|
||||
Policy.AnonymousTagLocations = true;
|
||||
// don't add 'struct' inside a name regardless of language
|
||||
Policy.SuppressTagKeyword = true;
|
||||
|
||||
return Policy;
|
||||
}
|
||||
|
||||
} // end of namespace ASTLib
|
@ -0,0 +1,13 @@
|
||||
|
||||
Front end plugins for Clang
|
||||
---------------------------
|
||||
|
||||
Assuming that the current dir is the root of the git repository and CLANG_PREFIX=/usr/local, you may compile and run tests with
|
||||
```
|
||||
export CLANG_PREFIX=/usr/local
|
||||
make -C libtooling test
|
||||
```
|
||||
|
||||
More information:
|
||||
- [`ATD_GUIDELINES`](https://github.com/facebook/facebook-clang-plugins/tree/master/libtooling/ATD_GUIDELINES.md) for documentation about ASTExporter.
|
||||
- http://clang.llvm.org/docs/ClangPlugins.html for general documentation about clang plugins
|
@ -0,0 +1,180 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <unistd.h>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <llvm/Support/Path.h>
|
||||
|
||||
#include "FileUtils.h"
|
||||
#include "SimplePluginASTAction.h"
|
||||
|
||||
namespace ASTPluginLib {
|
||||
|
||||
/**
|
||||
* The actual prefix to prepend to environment variables (but not for the
|
||||
* command line).
|
||||
*/
|
||||
const std::string PluginASTOptionsBase::envPrefix = "CLANG_FRONTEND_PLUGIN__";
|
||||
|
||||
PluginASTOptionsBase::argmap_t PluginASTOptionsBase::makeMap(
|
||||
const std::vector<std::string> &args) {
|
||||
argmap_t map;
|
||||
for (auto arg : args) {
|
||||
size_t pos = arg.find('=');
|
||||
if (pos != std::string::npos) {
|
||||
std::string key = arg.substr(0, pos);
|
||||
std::string value = arg.substr(pos + 1);
|
||||
map[key] = value;
|
||||
}
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
bool PluginASTOptionsBase::loadString(const argmap_t &map,
|
||||
const char *key,
|
||||
std::string &val) {
|
||||
auto I = map.find(key);
|
||||
if (I != map.end()) {
|
||||
val = I->second;
|
||||
return true;
|
||||
}
|
||||
const char *s = getenv((envPrefix + key).c_str());
|
||||
if (s != nullptr) {
|
||||
val = s;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PluginASTOptionsBase::loadBool(const argmap_t &map,
|
||||
const char *key,
|
||||
bool &val) {
|
||||
std::string s_val;
|
||||
if (loadString(map, key, s_val)) {
|
||||
errno = 0;
|
||||
val = (bool)strtol(s_val.c_str(), nullptr, 10);
|
||||
if (errno) {
|
||||
std::cerr << "[!] Failed to read a bool from " << key << "\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PluginASTOptionsBase::loadInt(const argmap_t &map,
|
||||
const char *key,
|
||||
long &val) {
|
||||
std::string s_val;
|
||||
if (loadString(map, key, s_val)) {
|
||||
errno = 0;
|
||||
val = strtol(s_val.c_str(), nullptr, 10);
|
||||
if (errno) {
|
||||
std::cerr << "[!] Failed to read an int from " << key << "\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool PluginASTOptionsBase::loadUnsignedInt(const argmap_t &map,
|
||||
const char *key,
|
||||
unsigned long &val) {
|
||||
std::string s_val;
|
||||
if (loadString(map, key, s_val)) {
|
||||
errno = 0;
|
||||
val = strtoul(s_val.c_str(), nullptr, 10);
|
||||
if (errno) {
|
||||
std::cerr << "[!] Failed to read an unsigned int from " << key << "\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void PluginASTOptionsBase::loadValuesFromEnvAndMap(const argmap_t map) {
|
||||
bool needBasePath = false;
|
||||
|
||||
loadBool(map, "ALLOW_SIBLINGS_TO_REPO_ROOT", allowSiblingsToRepoRoot);
|
||||
loadBool(map, "KEEP_EXTERNAL_PATHS", keepExternalPaths);
|
||||
loadString(map, "MAKE_RELATIVE_TO", repoRoot);
|
||||
loadUnsignedInt(map, "MAX_STRING_SIZE", maxStringSize);
|
||||
|
||||
// Possibly override the first argument given on the command line.
|
||||
loadString(map, "OUTPUT_FILE", outputFile);
|
||||
|
||||
loadBool(map, "PREPEND_CURRENT_DIR", needBasePath);
|
||||
loadBool(map, "RESOLVE_SYMLINKS", resolveSymlinks);
|
||||
loadString(map, "STRIP_ISYSROOT", iSysRoot);
|
||||
|
||||
if (needBasePath) {
|
||||
llvm::SmallString<1024> CurrentDir;
|
||||
if (llvm::sys::fs::current_path(CurrentDir)) {
|
||||
llvm::errs() << "Failed to retrieve current working directory\n";
|
||||
} else {
|
||||
basePath = CurrentDir.str();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PluginASTOptionsBase::setObjectFile(const std::string &path) {
|
||||
objectFile = path;
|
||||
if (path != "" && outputFile.size() > 0 && outputFile[0] == '%') {
|
||||
outputFile = path + outputFile.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Expects an immutable string on the heap as an argument
|
||||
* (e.g. a path extracted from a node in the AST)
|
||||
* Do not pass pointers to stack variables to this function.
|
||||
* (e.g. a .str() call on a StringRef)
|
||||
*/
|
||||
const std::string &PluginASTOptionsBase::normalizeSourcePath(
|
||||
const char *path) const {
|
||||
auto I = normalizationCache->find(path);
|
||||
if (I != normalizationCache->end()) {
|
||||
return I->second;
|
||||
}
|
||||
std::string &result = (*normalizationCache)[path];
|
||||
if (basePath == "") {
|
||||
result = path;
|
||||
return result;
|
||||
}
|
||||
std::string absPath = FileUtils::makeAbsolutePath(basePath, path);
|
||||
if (resolveSymlinks) {
|
||||
// if realPath is a symlink, resolve it
|
||||
char buf[2048];
|
||||
int len = readlink(absPath.c_str(), buf, sizeof(buf) - 1);
|
||||
if (len != -1) {
|
||||
buf[len] = '\0';
|
||||
absPath = buf;
|
||||
}
|
||||
}
|
||||
// By convention, relative paths are only activated when repoRoot != "".
|
||||
if (repoRoot != "") {
|
||||
result = FileUtils::makeRelativePath(repoRoot,
|
||||
iSysRoot,
|
||||
keepExternalPaths,
|
||||
allowSiblingsToRepoRoot,
|
||||
absPath);
|
||||
} else {
|
||||
result = absPath;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
const std::string &PluginASTOptionsBase::normalizeSourcePath(
|
||||
llvm::StringRef path) const {
|
||||
return normalizeSourcePath(path.data());
|
||||
}
|
||||
} // namespace ASTPluginLib
|
@ -0,0 +1,264 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <stdlib.h>
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <clang/AST/ASTConsumer.h>
|
||||
#include <clang/Frontend/CompilerInstance.h>
|
||||
#include <clang/Frontend/FrontendAction.h>
|
||||
#include <clang/Frontend/FrontendActions.h>
|
||||
#include <clang/Lex/Preprocessor.h>
|
||||
#include <clang/Tooling/Tooling.h>
|
||||
|
||||
#include "FileUtils.h"
|
||||
|
||||
namespace ASTPluginLib {
|
||||
|
||||
struct PluginASTOptionsBase {
|
||||
// source file being parsed
|
||||
clang::FrontendInputFile inputFile;
|
||||
// output file for the plugin
|
||||
std::string outputFile;
|
||||
// object file produced by the usual frontend (possibly empty)
|
||||
std::string objectFile;
|
||||
|
||||
/* Will contain the current directory if PREPEND_CURRENT_DIR was specified.
|
||||
* The intention is to make file paths in the AST absolute if needed.
|
||||
*/
|
||||
std::string basePath;
|
||||
|
||||
/* Configure a second pass on file paths to make them relative to the repo
|
||||
* root. */
|
||||
std::string repoRoot;
|
||||
/* Configure a third pass on (absolute) file paths to blank the system root:
|
||||
* /path/to/sysroot/usr/lib/foo.h --> /usr/lib/foo.h
|
||||
*/
|
||||
std::string iSysRoot;
|
||||
/* Configure a fourth pass on (absolute) file paths to detect siblings to
|
||||
* the repo root. If the repo root is /some/path, /some/other_path will be
|
||||
* rewritten ../other_path
|
||||
*/
|
||||
bool allowSiblingsToRepoRoot = false;
|
||||
/* Whether file paths that could not be normalized by any of the rules above
|
||||
* should be kept or blanked.
|
||||
*/
|
||||
bool keepExternalPaths = false;
|
||||
/* Resolve symlinks to their real path. */
|
||||
bool resolveSymlinks = false;
|
||||
/* do not emit string literals larger than this size */
|
||||
unsigned long maxStringSize = 65535;
|
||||
|
||||
typedef std::unordered_map<std::string, std::string> argmap_t;
|
||||
|
||||
static argmap_t makeMap(const std::vector<std::string> &args);
|
||||
|
||||
private:
|
||||
/* cache for normalizeSourcePath */
|
||||
std::unique_ptr<std::unordered_map<const char *, std::string>>
|
||||
normalizationCache;
|
||||
|
||||
protected:
|
||||
static const std::string envPrefix;
|
||||
|
||||
static bool loadString(const argmap_t &map,
|
||||
const char *key,
|
||||
std::string &val);
|
||||
|
||||
static bool loadBool(const argmap_t &map, const char *key, bool &val);
|
||||
|
||||
static bool loadInt(const argmap_t &map, const char *key, long &val);
|
||||
|
||||
static bool loadUnsignedInt(const argmap_t &map,
|
||||
const char *key,
|
||||
unsigned long &val);
|
||||
|
||||
public:
|
||||
PluginASTOptionsBase() {
|
||||
normalizationCache.reset(
|
||||
new std::unordered_map<const char *, std::string>());
|
||||
};
|
||||
|
||||
void loadValuesFromEnvAndMap(const argmap_t map);
|
||||
|
||||
// This should be called after outputFile has been set, so as to finalize
|
||||
// the output file in case a pattern "%.bla" was given.
|
||||
void setObjectFile(const std::string &path);
|
||||
|
||||
const std::string &normalizeSourcePath(const char *path) const;
|
||||
const std::string &normalizeSourcePath(llvm::StringRef path) const;
|
||||
};
|
||||
|
||||
struct EmptyPreprocessorHandlerData {};
|
||||
|
||||
struct EmptyPreprocessorHandler : public clang::PPCallbacks {
|
||||
EmptyPreprocessorHandler(
|
||||
clang::SourceManager &SM,
|
||||
std::shared_ptr<PluginASTOptionsBase> options,
|
||||
std::shared_ptr<EmptyPreprocessorHandlerData> sharedData) {}
|
||||
};
|
||||
|
||||
template <class PluginASTOptions = PluginASTOptionsBase,
|
||||
class PreprocessorHandler = EmptyPreprocessorHandler,
|
||||
class PreprocessorHandlerData = EmptyPreprocessorHandlerData>
|
||||
class SimplePluginASTActionBase : public clang::PluginASTAction {
|
||||
protected:
|
||||
std::shared_ptr<PluginASTOptions> options;
|
||||
std::shared_ptr<PreprocessorHandlerData> sharedData;
|
||||
|
||||
void ExecuteAction() override {
|
||||
auto &preprocessor = getCompilerInstance().getPreprocessor();
|
||||
preprocessor.addPPCallbacks(llvm::make_unique<PreprocessorHandler>(
|
||||
preprocessor.getSourceManager(), options, sharedData));
|
||||
clang::PluginASTAction::ExecuteAction();
|
||||
}
|
||||
|
||||
// Called when FrontendPluginRegistry is used.
|
||||
bool ParseArgs(const clang::CompilerInstance &CI,
|
||||
const std::vector<std::string> &args_) override {
|
||||
std::vector<std::string> args = args_;
|
||||
if (args.size() > 0) {
|
||||
options->outputFile = args[0];
|
||||
args.erase(args.begin());
|
||||
}
|
||||
options->loadValuesFromEnvAndMap(PluginASTOptions::makeMap(args));
|
||||
return true;
|
||||
}
|
||||
|
||||
SimplePluginASTActionBase() {
|
||||
// These data structures will be shared between PreprocessorHandler
|
||||
// and ASTConsumer (the relative lifetimes of which are unknown).
|
||||
// During the AST traversal, it is expected that `options` is only read
|
||||
// and `sharedData` is only written.
|
||||
options = std::make_shared<PluginASTOptions>();
|
||||
sharedData = std::make_shared<PreprocessorHandlerData>();
|
||||
}
|
||||
|
||||
// Alternate constructor to pass an optional sequence "KEY=VALUE,.."
|
||||
// expected to be use with SimpleFrontendActionFactory below.
|
||||
explicit SimplePluginASTActionBase(const std::vector<std::string> &args)
|
||||
: SimplePluginASTActionBase() {
|
||||
options->loadValuesFromEnvAndMap(PluginASTOptions::makeMap(args));
|
||||
}
|
||||
|
||||
bool SetFileOptions(clang::CompilerInstance &CI,
|
||||
llvm::StringRef inputFilename) {
|
||||
// When running clang tool on more than one source file, CreateASTConsumer
|
||||
// will be ran for each of them separately. Hence, Inputs.size() = 1.
|
||||
clang::FrontendInputFile inputFile = CI.getFrontendOpts().Inputs[0];
|
||||
|
||||
switch (inputFile.getKind().getLanguage()) {
|
||||
case clang::InputKind::Unknown:
|
||||
case clang::InputKind::Asm:
|
||||
case clang::InputKind::LLVM_IR:
|
||||
// We can't do anything with these - they may trigger errors when running
|
||||
// clang frontend
|
||||
return false;
|
||||
default:
|
||||
// run the consumer for IK_AST and all others
|
||||
break;
|
||||
}
|
||||
options->inputFile = inputFile;
|
||||
options->setObjectFile(CI.getFrontendOpts().OutputFile);
|
||||
// success
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
template <class SimpleASTAction>
|
||||
class SimpleFrontendActionFactory
|
||||
: public clang::tooling::FrontendActionFactory {
|
||||
std::vector<std::string> args_;
|
||||
|
||||
public:
|
||||
explicit SimpleFrontendActionFactory(std::vector<std::string> args)
|
||||
: args_(args) {}
|
||||
|
||||
clang::FrontendAction *create() override {
|
||||
return new SimpleASTAction(args_);
|
||||
}
|
||||
};
|
||||
|
||||
template <class ASTConsumer,
|
||||
bool Binary = 0,
|
||||
bool RemoveFileOnSignal = 1,
|
||||
bool UseTemporary = 1,
|
||||
bool CreateMissingDirectories = 0>
|
||||
class SimplePluginASTAction
|
||||
: public SimplePluginASTActionBase<
|
||||
typename ASTConsumer::ASTConsumerOptions,
|
||||
typename ASTConsumer::PreprocessorHandler,
|
||||
typename ASTConsumer::PreprocessorHandlerData> {
|
||||
using Parent =
|
||||
SimplePluginASTActionBase<typename ASTConsumer::ASTConsumerOptions,
|
||||
typename ASTConsumer::PreprocessorHandler,
|
||||
typename ASTConsumer::PreprocessorHandlerData>;
|
||||
|
||||
public:
|
||||
SimplePluginASTAction() {}
|
||||
|
||||
explicit SimplePluginASTAction(const std::vector<std::string> &args)
|
||||
: Parent(args) {}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(
|
||||
clang::CompilerInstance &CI, llvm::StringRef inputFilename) {
|
||||
if (!Parent::SetFileOptions(CI, inputFilename)) {
|
||||
return nullptr;
|
||||
}
|
||||
std::unique_ptr<llvm::raw_ostream> OS =
|
||||
CI.createOutputFile(Parent::options->outputFile,
|
||||
Binary,
|
||||
RemoveFileOnSignal,
|
||||
"",
|
||||
"",
|
||||
UseTemporary,
|
||||
CreateMissingDirectories);
|
||||
if (!OS) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return std::unique_ptr<clang::ASTConsumer>(new ASTConsumer(
|
||||
CI, Parent::options, Parent::sharedData, std::move(OS)));
|
||||
}
|
||||
};
|
||||
|
||||
template <class ASTConsumer>
|
||||
class NoOpenSimplePluginASTAction
|
||||
: public SimplePluginASTActionBase<
|
||||
typename ASTConsumer::ASTConsumerOptions,
|
||||
typename ASTConsumer::PreprocessorHandler,
|
||||
typename ASTConsumer::PreprocessorHandlerData> {
|
||||
using Parent =
|
||||
SimplePluginASTActionBase<typename ASTConsumer::ASTConsumerOptions,
|
||||
typename ASTConsumer::PreprocessorHandler,
|
||||
typename ASTConsumer::PreprocessorHandlerData>;
|
||||
|
||||
public:
|
||||
NoOpenSimplePluginASTAction() {}
|
||||
|
||||
explicit NoOpenSimplePluginASTAction(const std::vector<std::string> &args)
|
||||
: Parent(args) {}
|
||||
|
||||
protected:
|
||||
std::unique_ptr<clang::ASTConsumer> CreateASTConsumer(
|
||||
clang::CompilerInstance &CI, llvm::StringRef inputFilename) {
|
||||
if (!Parent::SetFileOptions(CI, inputFilename)) {
|
||||
return nullptr;
|
||||
}
|
||||
std::unique_ptr<std::string> outputFile = std::unique_ptr<std::string>(
|
||||
new std::string(Parent::options->outputFile));
|
||||
return std::unique_ptr<clang::ASTConsumer>(new ASTConsumer(
|
||||
CI, Parent::options, Parent::sharedData, std::move(outputFile)));
|
||||
}
|
||||
};
|
||||
} // namespace ASTPluginLib
|
@ -0,0 +1,78 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Clang tool to export an AST of clang into Json, Yojson, and Biniou
|
||||
* while conforming to the inlined ATD specifications.
|
||||
*/
|
||||
|
||||
#include "ASTExporter.h"
|
||||
|
||||
#include <clang/Tooling/CommonOptionsParser.h>
|
||||
#include <clang/Tooling/Tooling.h>
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ASTExporter Tool
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
static llvm::cl::OptionCategory astExporterCategory("ast_exporter_bin");
|
||||
|
||||
enum Mode { json, yojson, biniou };
|
||||
|
||||
static llvm::cl::opt<Mode> astExporterMode(
|
||||
"ast-exporter-mode",
|
||||
llvm::cl::desc("Mode of operation"),
|
||||
llvm::cl::values(clEnumVal(json, "json output"),
|
||||
clEnumVal(yojson, "yojson output"),
|
||||
clEnumVal(biniou, "biniou output")),
|
||||
llvm::cl::cat(astExporterCategory));
|
||||
|
||||
static llvm::cl::opt<std::string> astExporterOutput(
|
||||
"ast-exporter-output",
|
||||
llvm::cl::desc("output file"),
|
||||
llvm::cl::cat(astExporterCategory));
|
||||
|
||||
// TODO: Unpack the other ASTExporterOptions into native command line options.
|
||||
static llvm::cl::list<std::string> astExporterOptions(
|
||||
"ast-exporter-option",
|
||||
llvm::cl::desc("One or several comma-separated pairs [KEY]=[VALUE]. "
|
||||
"This will override the corresponding environment variables "
|
||||
"CLANG_FRONTEND_PLUGIN__[KEY]."),
|
||||
llvm::cl::CommaSeparated,
|
||||
llvm::cl::cat(astExporterCategory));
|
||||
|
||||
static llvm::cl::extrahelp commonHelp(
|
||||
clang::tooling::CommonOptionsParser::HelpMessage);
|
||||
|
||||
int main(int argc, const char **argv) {
|
||||
clang::tooling::CommonOptionsParser optionsParser(
|
||||
argc, argv, astExporterCategory);
|
||||
clang::tooling::ClangTool tool(optionsParser.getCompilations(),
|
||||
optionsParser.getSourcePathList());
|
||||
|
||||
if (!astExporterOutput.empty()) {
|
||||
astExporterOptions.push_back("OUTPUT_FILE=" + astExporterOutput);
|
||||
}
|
||||
|
||||
std::unique_ptr<clang::tooling::ToolAction> factory = nullptr;
|
||||
switch (astExporterMode) {
|
||||
case json:
|
||||
factory.reset(new ASTPluginLib::SimpleFrontendActionFactory<
|
||||
ASTLib::JsonExporterASTAction>(astExporterOptions));
|
||||
break;
|
||||
case yojson:
|
||||
factory.reset(new ASTPluginLib::SimpleFrontendActionFactory<
|
||||
ASTLib::YojsonExporterASTAction>(astExporterOptions));
|
||||
break;
|
||||
case biniou:
|
||||
factory.reset(new ASTPluginLib::SimpleFrontendActionFactory<
|
||||
ASTLib::BiniouExporterASTAction>(astExporterOptions));
|
||||
break;
|
||||
}
|
||||
|
||||
return tool.run(factory.get());
|
||||
}
|
@ -0,0 +1,690 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <assert.h>
|
||||
#include <functional>
|
||||
#include <iostream>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace ATDWriter {
|
||||
|
||||
struct ATDWriterOptions {
|
||||
bool useYojson;
|
||||
bool prettifyJson;
|
||||
};
|
||||
|
||||
// Symbols to be stacked
|
||||
enum Symbol { SARRAY, STUPLE, SOBJECT, SVARIANT, STAG };
|
||||
|
||||
// whether the container has a {maximum,exact} size
|
||||
enum ContainerSizeKind {
|
||||
CSKNONE, // no size info
|
||||
CSKEXACT, // the container expects exactly this number of items
|
||||
CSKMAX // the container expects at most this number of items
|
||||
};
|
||||
|
||||
// Main class for writing ATD-like data
|
||||
// - In NDEBUG mode this class is only a wrapper around an ATDEmitter
|
||||
// - In DEBUG mode it acts as a validator: asserts will fire if the events do
|
||||
// not correspond to a well-formed ATD/JSON value
|
||||
template <class ATDEmitter>
|
||||
class GenWriter {
|
||||
|
||||
protected:
|
||||
ATDEmitter emitter_;
|
||||
|
||||
private:
|
||||
#ifdef DEBUG
|
||||
// State of the automaton
|
||||
std::vector<enum Symbol> stack_;
|
||||
|
||||
// Objects want tagged values
|
||||
static bool needsTag(enum Symbol s) { return s == SOBJECT; }
|
||||
|
||||
// How many elements are expected in the current container
|
||||
std::vector<int> containerSize_;
|
||||
std::vector<enum ContainerSizeKind> containerSizeKind_;
|
||||
#endif
|
||||
|
||||
void enterValue() {
|
||||
#ifdef DEBUG
|
||||
if (stack_.empty()) {
|
||||
return;
|
||||
}
|
||||
assert(!needsTag(stack_.back()));
|
||||
#endif
|
||||
}
|
||||
|
||||
void leaveValue() {
|
||||
#ifdef DEBUG
|
||||
switch (containerSizeKind_.back()) {
|
||||
case CSKEXACT:
|
||||
case CSKMAX:
|
||||
containerSize_.back() -= 1;
|
||||
break;
|
||||
case CSKNONE:
|
||||
break;
|
||||
}
|
||||
if (stack_.empty()) {
|
||||
return;
|
||||
}
|
||||
if (stack_.back() == STAG) {
|
||||
stack_.pop_back();
|
||||
assert(needsTag(stack_.back()));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void emitValue() {
|
||||
enterValue();
|
||||
leaveValue();
|
||||
}
|
||||
|
||||
void enterContainer(enum Symbol s,
|
||||
enum ContainerSizeKind csk = CSKNONE,
|
||||
int numElems = 0) {
|
||||
#ifdef DEBUG
|
||||
enterValue();
|
||||
stack_.push_back(s);
|
||||
containerSizeKind_.push_back(csk);
|
||||
switch (csk) {
|
||||
case CSKEXACT:
|
||||
case CSKMAX:
|
||||
containerSize_.push_back(numElems);
|
||||
break;
|
||||
case CSKNONE:
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void leaveContainer(enum Symbol s) {
|
||||
#ifdef DEBUG
|
||||
assert(stack_.back() == s);
|
||||
stack_.pop_back();
|
||||
switch (containerSizeKind_.back()) {
|
||||
case CSKEXACT:
|
||||
assert(containerSize_.back() == 0);
|
||||
case CSKMAX:
|
||||
assert(!containerSize_.empty());
|
||||
assert(containerSize_.back() >= 0);
|
||||
containerSize_.pop_back();
|
||||
break;
|
||||
case CSKNONE:
|
||||
break;
|
||||
}
|
||||
containerSizeKind_.pop_back();
|
||||
leaveValue();
|
||||
#endif
|
||||
}
|
||||
|
||||
public:
|
||||
GenWriter(ATDEmitter emitter) : emitter_(emitter) {
|
||||
#ifdef DEBUG
|
||||
containerSizeKind_.push_back(CSKNONE);
|
||||
#endif
|
||||
}
|
||||
|
||||
~GenWriter() {
|
||||
#ifdef DEBUG
|
||||
assert(stack_.empty());
|
||||
assert(containerSizeKind_.size() == 1);
|
||||
assert(containerSizeKind_.back() == CSKNONE);
|
||||
#endif
|
||||
emitter_.emitEOF();
|
||||
}
|
||||
|
||||
void emitNull() {
|
||||
emitValue();
|
||||
emitter_.emitNull();
|
||||
}
|
||||
void emitBoolean(bool val) {
|
||||
emitValue();
|
||||
emitter_.emitBoolean(val);
|
||||
}
|
||||
void emitInteger(int64_t val) {
|
||||
emitValue();
|
||||
emitter_.emitInteger(val);
|
||||
}
|
||||
void emitFloat(float val) {
|
||||
emitValue();
|
||||
emitter_.emitFloat(val);
|
||||
}
|
||||
void emitString(const std::string &val) {
|
||||
emitValue();
|
||||
emitter_.emitString(val);
|
||||
}
|
||||
void emitTag(const std::string &val) {
|
||||
#ifdef DEBUG
|
||||
assert(needsTag(stack_.back()));
|
||||
stack_.push_back(STAG);
|
||||
#endif
|
||||
emitter_.emitTag(val);
|
||||
}
|
||||
|
||||
void enterArray(int numElems) {
|
||||
enterContainer(SARRAY, CSKEXACT, numElems);
|
||||
emitter_.enterArray(numElems);
|
||||
}
|
||||
void enterArray() {
|
||||
enterContainer(SARRAY);
|
||||
emitter_.enterArray();
|
||||
}
|
||||
void leaveArray() {
|
||||
leaveContainer(SARRAY);
|
||||
emitter_.leaveArray();
|
||||
}
|
||||
void enterObject(int numElems) {
|
||||
enterContainer(SOBJECT, CSKMAX, numElems);
|
||||
emitter_.enterObject(numElems);
|
||||
}
|
||||
void enterObject() {
|
||||
enterContainer(SOBJECT);
|
||||
emitter_.enterObject();
|
||||
}
|
||||
void leaveObject() {
|
||||
leaveContainer(SOBJECT);
|
||||
emitter_.leaveObject();
|
||||
}
|
||||
void enterTuple(int numElems) {
|
||||
enterContainer(STUPLE, CSKEXACT, numElems);
|
||||
emitter_.enterTuple(numElems);
|
||||
}
|
||||
void enterTuple() {
|
||||
enterContainer(STUPLE);
|
||||
emitter_.enterTuple();
|
||||
}
|
||||
void leaveTuple() {
|
||||
leaveContainer(STUPLE);
|
||||
emitter_.leaveTuple();
|
||||
}
|
||||
|
||||
void enterVariant(const std::string &tag, bool hasArg = true) {
|
||||
// variants have at most one value, so we can safely use hasArg
|
||||
// as the number of arguments
|
||||
enterContainer(SVARIANT, CSKEXACT, hasArg);
|
||||
emitter_.enterVariant();
|
||||
emitter_.emitVariantTag(tag, hasArg);
|
||||
}
|
||||
void leaveVariant() {
|
||||
leaveContainer(SVARIANT);
|
||||
emitter_.leaveVariant();
|
||||
}
|
||||
void emitSimpleVariant(const std::string &tag) {
|
||||
if (emitter_.shouldSimpleVariantsBeEmittedAsStrings) {
|
||||
emitString(tag);
|
||||
} else {
|
||||
enterVariant(tag, false);
|
||||
leaveVariant();
|
||||
}
|
||||
}
|
||||
|
||||
// convenient methods
|
||||
|
||||
void emitFlag(const std::string &tag, bool val) {
|
||||
if (val) {
|
||||
emitTag(tag);
|
||||
emitBoolean(true);
|
||||
}
|
||||
}
|
||||
|
||||
// convenient classes for automatically closing containers using C++ scoping
|
||||
|
||||
class ArrayScope {
|
||||
GenWriter &f_;
|
||||
|
||||
public:
|
||||
ArrayScope(GenWriter &f, int size) : f_(f) { f_.enterArray(size); }
|
||||
ArrayScope(GenWriter &f) : f_(f) { f_.enterArray(); }
|
||||
~ArrayScope() { f_.leaveArray(); }
|
||||
};
|
||||
|
||||
class ObjectScope {
|
||||
GenWriter &f_;
|
||||
|
||||
public:
|
||||
ObjectScope(GenWriter &f, int size) : f_(f) { f_.enterObject(size); }
|
||||
ObjectScope(GenWriter &f) : f_(f) { f_.enterObject(); }
|
||||
~ObjectScope() { f_.leaveObject(); }
|
||||
};
|
||||
|
||||
class TupleScope {
|
||||
GenWriter &f_;
|
||||
|
||||
public:
|
||||
TupleScope(GenWriter &f, int size) : f_(f) { f_.enterTuple(size); }
|
||||
TupleScope(GenWriter &f) : f_(f) { f_.enterTuple(); }
|
||||
~TupleScope() { f_.leaveTuple(); }
|
||||
};
|
||||
|
||||
class VariantScope {
|
||||
GenWriter &f_;
|
||||
|
||||
public:
|
||||
VariantScope(GenWriter &f, const std::string &tag) : f_(f) {
|
||||
f_.enterVariant(tag, true);
|
||||
}
|
||||
~VariantScope() { f_.leaveVariant(); }
|
||||
};
|
||||
};
|
||||
|
||||
// Configure GenWriter for Yojson / Json textual outputs
|
||||
template <class OStream = std::ostream>
|
||||
class JsonEmitter {
|
||||
|
||||
const char *QUOTE = "\"";
|
||||
const char *COMMA = ",";
|
||||
const char *TAB = " ";
|
||||
const char *NEWLINE = "\n";
|
||||
const char *COLON = ":";
|
||||
const char *COLONWITHSPACES = " : ";
|
||||
const char *COMMAWITHSPACES = " , ";
|
||||
const char *NULLSTR = "null";
|
||||
const char *FALSESTR = "false";
|
||||
const char *TRUESTR = "true";
|
||||
const char LBRACKET = '[';
|
||||
const char RBRACKET = ']';
|
||||
const char LBRACE = '{';
|
||||
const char RBRACE = '}';
|
||||
const char LPAREN = '(';
|
||||
const char RPAREN = ')';
|
||||
const char LANGLE = '<';
|
||||
const char RANGLE = '>';
|
||||
|
||||
private:
|
||||
OStream &os_;
|
||||
const ATDWriterOptions options_;
|
||||
unsigned indentLevel_;
|
||||
bool nextElementNeedsNewLine_;
|
||||
bool previousElementNeedsComma_;
|
||||
bool previousElementIsVariantTag_;
|
||||
|
||||
public:
|
||||
bool shouldSimpleVariantsBeEmittedAsStrings;
|
||||
|
||||
JsonEmitter(OStream &os, const ATDWriterOptions opts)
|
||||
: os_(os),
|
||||
options_(opts),
|
||||
indentLevel_(0),
|
||||
nextElementNeedsNewLine_(false),
|
||||
previousElementNeedsComma_(false),
|
||||
previousElementIsVariantTag_(false),
|
||||
shouldSimpleVariantsBeEmittedAsStrings(!opts.useYojson) {}
|
||||
|
||||
void tab() {
|
||||
if (previousElementIsVariantTag_) {
|
||||
if (options_.prettifyJson) {
|
||||
os_ << (options_.useYojson ? COLONWITHSPACES : COMMAWITHSPACES);
|
||||
} else {
|
||||
os_ << (options_.useYojson ? COLON : COMMA);
|
||||
}
|
||||
} else if (previousElementNeedsComma_) {
|
||||
os_ << COMMA;
|
||||
}
|
||||
if (nextElementNeedsNewLine_ && options_.prettifyJson) {
|
||||
os_ << NEWLINE;
|
||||
for (size_t i = 0; i < indentLevel_; i++) {
|
||||
os_ << TAB;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
// TODO: unicode and other control chars
|
||||
void write_escaped(const std::string &val) {
|
||||
for (std::string::const_iterator i = val.begin(), e = val.end(); i != e;
|
||||
i++) {
|
||||
char x = *i;
|
||||
switch (x) {
|
||||
case '\\':
|
||||
os_ << "\\\\";
|
||||
break;
|
||||
case '"':
|
||||
os_ << "\\\"";
|
||||
break;
|
||||
case '\n':
|
||||
os_ << "\\n";
|
||||
break;
|
||||
case '\t':
|
||||
os_ << "\\t";
|
||||
break;
|
||||
case '\b':
|
||||
os_ << "\\b";
|
||||
break;
|
||||
case '\f':
|
||||
os_ << "\\f";
|
||||
break;
|
||||
case '\r':
|
||||
os_ << "\\r";
|
||||
break;
|
||||
default:
|
||||
os_ << x;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void enterContainer(char c) {
|
||||
tab();
|
||||
os_ << c;
|
||||
indentLevel_++;
|
||||
previousElementNeedsComma_ = false;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
|
||||
void leaveContainer(char c) {
|
||||
indentLevel_--;
|
||||
// suppress the last comma or variant separator
|
||||
previousElementNeedsComma_ = false;
|
||||
previousElementIsVariantTag_ = false;
|
||||
tab();
|
||||
os_ << c;
|
||||
previousElementNeedsComma_ = true;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
}
|
||||
|
||||
public:
|
||||
void emitEOF() { os_ << NEWLINE; }
|
||||
|
||||
void emitNull() {
|
||||
tab();
|
||||
os_ << NULLSTR;
|
||||
previousElementNeedsComma_ = true;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
void emitBoolean(bool val) {
|
||||
tab();
|
||||
os_ << (val ? TRUESTR : FALSESTR);
|
||||
previousElementNeedsComma_ = true;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
void emitInteger(int64_t val) {
|
||||
tab();
|
||||
os_ << val;
|
||||
previousElementNeedsComma_ = true;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
void emitString(const std::string &val) {
|
||||
tab();
|
||||
os_ << QUOTE;
|
||||
write_escaped(val);
|
||||
os_ << QUOTE;
|
||||
previousElementNeedsComma_ = true;
|
||||
nextElementNeedsNewLine_ = true;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
void emitTag(const std::string &val) {
|
||||
tab();
|
||||
os_ << QUOTE;
|
||||
write_escaped(val);
|
||||
os_ << QUOTE;
|
||||
if (options_.prettifyJson) {
|
||||
os_ << COLONWITHSPACES;
|
||||
} else {
|
||||
os_ << COLON;
|
||||
}
|
||||
previousElementNeedsComma_ = false;
|
||||
nextElementNeedsNewLine_ = false;
|
||||
previousElementIsVariantTag_ = false;
|
||||
}
|
||||
void emitVariantTag(const std::string &val, bool hasArgs) {
|
||||
tab();
|
||||
os_ << QUOTE;
|
||||
write_escaped(val);
|
||||
os_ << QUOTE;
|
||||
previousElementNeedsComma_ = false;
|
||||
nextElementNeedsNewLine_ = false;
|
||||
previousElementIsVariantTag_ = true;
|
||||
}
|
||||
|
||||
void enterArray() { enterContainer(LBRACKET); }
|
||||
void enterArray(int size) { enterArray(); }
|
||||
void leaveArray() { leaveContainer(RBRACKET); }
|
||||
void enterObject() { enterContainer(LBRACE); }
|
||||
void enterObject(int size) { enterObject(); }
|
||||
void leaveObject() { leaveContainer(RBRACE); }
|
||||
void enterTuple() { enterContainer(options_.useYojson ? LPAREN : LBRACKET); }
|
||||
void enterTuple(int size) { enterTuple(); }
|
||||
void leaveTuple() { leaveContainer(options_.useYojson ? RPAREN : RBRACKET); }
|
||||
void enterVariant() {
|
||||
enterContainer(options_.useYojson ? LANGLE : LBRACKET);
|
||||
// cancel indent
|
||||
indentLevel_--;
|
||||
nextElementNeedsNewLine_ = false;
|
||||
}
|
||||
void leaveVariant() {
|
||||
nextElementNeedsNewLine_ = false;
|
||||
leaveContainer(options_.useYojson ? RANGLE : RBRACKET);
|
||||
indentLevel_++;
|
||||
}
|
||||
};
|
||||
|
||||
const uint8_t bool_tag = 0;
|
||||
const uint8_t int8_tag = 1;
|
||||
const uint8_t int16_tag = 2;
|
||||
const uint8_t int32_tag = 3;
|
||||
const uint8_t int64_tag = 4;
|
||||
const uint8_t float64_tag = 12;
|
||||
const uint8_t uvint_tag = 16;
|
||||
const uint8_t svint_tag = 17;
|
||||
const uint8_t string_tag = 18;
|
||||
const uint8_t ARRAY_tag = 19;
|
||||
const uint8_t TUPLE_tag = 20;
|
||||
const uint8_t RECORD_tag = 21;
|
||||
const uint8_t NUM_VARIANT_tag = 22;
|
||||
const uint8_t VARIANT_tag = 23;
|
||||
const uint8_t unit_tag = 24;
|
||||
const uint8_t TABLE_tag = 25;
|
||||
const uint8_t SHARED_tag = 26;
|
||||
|
||||
const int SIZE_NOT_NEEDED = -1;
|
||||
|
||||
// Configure GenWriter for Biniou binary output
|
||||
template <class OStream = std::ostream>
|
||||
class BiniouEmitter {
|
||||
|
||||
private:
|
||||
OStream &os_;
|
||||
|
||||
// Opened container, writing in progress.
|
||||
struct ATDContainer {
|
||||
uint8_t tag;
|
||||
int size;
|
||||
int count;
|
||||
|
||||
ATDContainer(uint8_t tag, int size) : tag(tag), size(size), count(0) {}
|
||||
};
|
||||
|
||||
// The full stack of opened containers
|
||||
std::vector<ATDContainer> atdContainers;
|
||||
|
||||
public:
|
||||
const bool shouldSimpleVariantsBeEmittedAsStrings = false;
|
||||
|
||||
BiniouEmitter(OStream &os) : os_(os) {}
|
||||
|
||||
private:
|
||||
bool isValueTagNeeded() {
|
||||
if (!atdContainers.empty()) {
|
||||
const ATDContainer &obj = atdContainers.back();
|
||||
return obj.tag != ARRAY_tag || obj.count == 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void markWrite() {
|
||||
if (!atdContainers.empty()) {
|
||||
atdContainers.back().count++;
|
||||
}
|
||||
}
|
||||
|
||||
void enterContainer(uint8_t tag, int size) {
|
||||
bool needTag = isValueTagNeeded();
|
||||
atdContainers.emplace_back(tag, size);
|
||||
writeValueTag(os_, needTag, tag);
|
||||
if (size != SIZE_NOT_NEEDED) {
|
||||
writeUvint(os_, size);
|
||||
}
|
||||
}
|
||||
|
||||
void leaveContainer() {
|
||||
atdContainers.pop_back();
|
||||
markWrite();
|
||||
}
|
||||
|
||||
// string hash algorithm from the biniou spec
|
||||
static uint32_t biniou_hash(const std::string &str) {
|
||||
uint32_t hash = 0;
|
||||
for (const char &c : str) {
|
||||
hash = 223 * hash + c;
|
||||
}
|
||||
hash %= 1 << 31;
|
||||
return hash;
|
||||
}
|
||||
|
||||
static void write8(OStream &os, uint8_t c) { os.write((const char *)&c, 1); }
|
||||
|
||||
static void write32(OStream &os, int32_t x) {
|
||||
write8(os, x >> 24);
|
||||
write8(os, x >> 16);
|
||||
write8(os, x >> 8);
|
||||
write8(os, x);
|
||||
}
|
||||
|
||||
static void writeUvint(OStream &os, uint64_t x) {
|
||||
while (x > 127) {
|
||||
write8(os, x | 128);
|
||||
x >>= 7;
|
||||
}
|
||||
|
||||
write8(os, (uint8_t)x);
|
||||
}
|
||||
|
||||
static void writeSvint(OStream &os, int64_t x) {
|
||||
if (x >= 0) {
|
||||
uint64_t t = x;
|
||||
t = t * 2;
|
||||
writeUvint(os, t);
|
||||
} else {
|
||||
uint64_t t = -x;
|
||||
t = t * 2 - 1;
|
||||
writeUvint(os, t);
|
||||
}
|
||||
}
|
||||
|
||||
static void writeValueTag(OStream &os, bool needTag, uint8_t tag) {
|
||||
if (needTag) {
|
||||
write8(os, tag);
|
||||
}
|
||||
}
|
||||
|
||||
void emitDummyRecordField() {
|
||||
emitTag("!!DUMMY!!");
|
||||
markWrite();
|
||||
// unit is the smallest value (2 bytes)
|
||||
write8(os_, unit_tag);
|
||||
write8(os_, 0);
|
||||
}
|
||||
|
||||
public:
|
||||
void emitEOF() {}
|
||||
|
||||
void emitBoolean(bool val) {
|
||||
bool needTag = isValueTagNeeded();
|
||||
markWrite();
|
||||
writeValueTag(os_, needTag, bool_tag);
|
||||
write8(os_, val);
|
||||
}
|
||||
|
||||
void emitInteger(int64_t val) {
|
||||
bool needTag = isValueTagNeeded();
|
||||
markWrite();
|
||||
writeValueTag(os_, needTag, svint_tag);
|
||||
writeSvint(os_, val);
|
||||
}
|
||||
|
||||
void emitString(const std::string &val) {
|
||||
bool needTag = isValueTagNeeded();
|
||||
markWrite();
|
||||
writeValueTag(os_, needTag, string_tag);
|
||||
writeUvint(os_, val.length());
|
||||
for (const char &c : val) {
|
||||
write8(os_, c);
|
||||
}
|
||||
}
|
||||
|
||||
void emitTag(const std::string &val) {
|
||||
int32_t hash = biniou_hash(val);
|
||||
// set first bit of hash
|
||||
hash |= 1 << 31;
|
||||
markWrite();
|
||||
write32(os_, hash);
|
||||
}
|
||||
|
||||
void emitVariantTag(const std::string &val, bool hasArg) {
|
||||
int32_t hash = biniou_hash(val);
|
||||
// set first bit of hash if the variant has an argument
|
||||
if (hasArg) {
|
||||
hash |= 1 << 31;
|
||||
}
|
||||
markWrite();
|
||||
write32(os_, hash);
|
||||
}
|
||||
|
||||
void enterArray(int size) { enterContainer(ARRAY_tag, size); }
|
||||
// unsupported:
|
||||
// void enterArray() { enterContainer(ARRAY_tag); }
|
||||
void leaveArray() { leaveContainer(); }
|
||||
void enterObject(int size) { enterContainer(RECORD_tag, size); }
|
||||
// unsupported:
|
||||
// void enterObject() { enterContainer(RECORD_tag); }
|
||||
void leaveObject() {
|
||||
const ATDContainer &obj = atdContainers.back();
|
||||
// Container's size was already written -> must fill in for missing
|
||||
// records.
|
||||
for (int i = obj.count / 2; i < obj.size; i++) {
|
||||
emitDummyRecordField();
|
||||
}
|
||||
leaveContainer();
|
||||
}
|
||||
void enterTuple(int size) { enterContainer(TUPLE_tag, size); }
|
||||
// unsupported:
|
||||
// void enterTuple() { enterContainer(TUPLE_tag); }
|
||||
void leaveTuple() { leaveContainer(); }
|
||||
void enterVariant() { enterContainer(VARIANT_tag, SIZE_NOT_NEEDED); }
|
||||
void leaveVariant() { leaveContainer(); }
|
||||
};
|
||||
|
||||
// The full class for JSON and YOJSON writing
|
||||
template <class OStream = std::ostream>
|
||||
class JsonWriter : public GenWriter<JsonEmitter<OStream>> {
|
||||
typedef JsonEmitter<OStream> Emitter;
|
||||
|
||||
public:
|
||||
JsonWriter(OStream &os, const ATDWriterOptions opts)
|
||||
: GenWriter<Emitter>(Emitter(os, opts)) {}
|
||||
};
|
||||
|
||||
// The full class for biniou writing
|
||||
template <class OStream>
|
||||
class BiniouWriter : public GenWriter<BiniouEmitter<OStream>> {
|
||||
typedef BiniouEmitter<OStream> Emitter;
|
||||
|
||||
public:
|
||||
BiniouWriter(OStream &os) : GenWriter<Emitter>(Emitter(os)) {}
|
||||
|
||||
BiniouWriter(OStream &os, const ATDWriterOptions opts)
|
||||
: GenWriter<Emitter>(Emitter(os)) {}
|
||||
};
|
||||
} // namespace ATDWriter
|
@ -0,0 +1,35 @@
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
.PHONY: clean all test
|
||||
|
||||
LEVEL=../..
|
||||
include $(LEVEL)/Makefile.common
|
||||
|
||||
all: build/jsontest build/binioutest
|
||||
|
||||
build/jsontest: tests/jsontest.cpp ATDWriter.h
|
||||
@mkdir -p build
|
||||
$(CXX) $(CFLAGS) $< -o $@
|
||||
|
||||
build/binioutest: tests/binioutest.cpp ATDWriter.h
|
||||
@mkdir -p build
|
||||
$(CXX) $(CFLAGS) $< -o $@
|
||||
|
||||
test: build/jsontest build/binioutest extract_atd_from_cpp.py normalize_names_in_atd.py
|
||||
@$(RUNTEST) tests/jsontest build/jsontest
|
||||
@! hash bdump 2>/dev/null || $(RUNTEST) tests/binioutest tests/binioutest.sh
|
||||
@$(RUNTEST) tests/extract_test.cpp extract_atd_from_cpp.py tests/extract_test.cpp
|
||||
@$(RUNTEST) tests/normalize_test.atd normalize_names_in_atd.py tests/normalize_test.atd
|
||||
@if [ ! $$KEEP_TEST_OUTPUTS ]; then rm -f tests/*.out; fi
|
||||
|
||||
record-test-outputs:
|
||||
@rm -f tests/*.out
|
||||
@$(MAKE) DEBUG=1 KEEP_TEST_OUTPUTS=1 test || true
|
||||
@for F in tests/*.out; do cp $$F $${F%.out}.exp; done
|
||||
@rm -f tests/*.out
|
||||
|
||||
clean:
|
||||
@rm -rf build/* tests/*.o tests/*.out
|
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
import sys
|
||||
import argparse
|
||||
import re
|
||||
|
||||
"""
|
||||
Extract the ATD specifications inlined in a C/C++ file
|
||||
"""
|
||||
|
||||
atd_comment = re.compile(r'^ *//@atd ?(.*)')
|
||||
|
||||
def start(file):
|
||||
for line in file:
|
||||
m = atd_comment.match(line)
|
||||
if m:
|
||||
print(m.group(1))
|
||||
|
||||
def main():
|
||||
arg_parser = argparse.ArgumentParser(description='Extract the ATD specifications inlined in a C/C++ file')
|
||||
arg_parser.add_argument(metavar="FILE", nargs='?', dest="input_file", help="Input log file (default: stdin)")
|
||||
args = arg_parser.parse_args()
|
||||
if args.input_file:
|
||||
file = open(args.input_file, "r")
|
||||
else:
|
||||
file = sys.stdin
|
||||
start(file)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Copyright (c) 2014-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
import sys
|
||||
import re
|
||||
import argparse
|
||||
|
||||
"""
|
||||
This script normalizes the names between "@" across the file + removes empty lines.
|
||||
"""
|
||||
|
||||
bigcap = re.compile("([A-Z]*)([A-Z])")
|
||||
|
||||
def normalize_name(name, first_letter_in_bigcap = False):
|
||||
"""
|
||||
Convert a name in java-like convention to the small-caps + underscores convention.
|
||||
Examples of renaming:
|
||||
ThisName -> this_name
|
||||
CXXDecl -> cxx_decl
|
||||
"""
|
||||
name = name.strip()
|
||||
if name == "":
|
||||
return
|
||||
|
||||
def f_sub(m):
|
||||
res = "";
|
||||
if m.start() != 0:
|
||||
res += "_"
|
||||
if m.group(1) != "":
|
||||
res += m.group(1).lower()
|
||||
res += "_"
|
||||
res += m.group(2).lower()
|
||||
return res
|
||||
|
||||
name = bigcap.sub(f_sub, name)
|
||||
|
||||
if first_letter_in_bigcap:
|
||||
name = name[0].upper() + name[1:]
|
||||
return name
|
||||
|
||||
at_word = re.compile("@(.*?)@")
|
||||
|
||||
def start(file):
|
||||
for line in file:
|
||||
if not line.strip():
|
||||
continue
|
||||
line = at_word.sub(lambda m: normalize_name(m.group(1)), line)
|
||||
sys.stdout.write(line)
|
||||
|
||||
def main():
|
||||
arg_parser = argparse.ArgumentParser(description='Normalize the strings "@AxxByy@" to "axx_byy" across the ATD file and remove empty lines.')
|
||||
arg_parser.add_argument(metavar="FILE", nargs='?', dest="input_file", help="Input log file (default: stdin)")
|
||||
args = arg_parser.parse_args()
|
||||
if args.input_file:
|
||||
file = open(args.input_file, "r")
|
||||
else:
|
||||
file = sys.stdin
|
||||
start(file)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -0,0 +1,145 @@
|
||||
/*
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
#include "../ATDWriter.h"
|
||||
|
||||
typedef ATDWriter::BiniouWriter<std::ostream> BiniouWriter;
|
||||
typedef BiniouWriter::ObjectScope ObjectScope;
|
||||
typedef BiniouWriter::ArrayScope ArrayScope;
|
||||
typedef BiniouWriter::VariantScope VariantScope;
|
||||
typedef BiniouWriter::TupleScope TupleScope;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
OF.emitInteger(-100000);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
int64_t min_ocaml = -4611686018427387904;
|
||||
OF.emitInteger(min_ocaml);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
int64_t max_ocaml = 4611686018427387903;
|
||||
OF.emitInteger(max_ocaml);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
OF.emitString("Hello");
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
OF.emitBoolean(true);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ArrayScope Scope(OF, 0);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ArrayScope Scope(OF, 3);
|
||||
OF.emitString("Hello, how are you?");
|
||||
OF.emitString("I'm well, thank you; and you, how are you?");
|
||||
OF.emitString("I'm fine, thank you.");
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ArrayScope Scope(OF, 3);
|
||||
{
|
||||
ArrayScope Scope(OF, 1);
|
||||
{
|
||||
ArrayScope Scope(OF, 1);
|
||||
OF.emitInteger(1);
|
||||
}
|
||||
}
|
||||
{
|
||||
ArrayScope Scope(OF, 2);
|
||||
{ ArrayScope Scope(OF, 0); }
|
||||
{
|
||||
ArrayScope Scope(OF, 2);
|
||||
OF.emitInteger(2);
|
||||
OF.emitInteger(3);
|
||||
}
|
||||
}
|
||||
{ ArrayScope Scope(OF, 0); }
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ObjectScope Scope(OF, 12); // 12 is larger than the actual size on purpose
|
||||
OF.emitTag("string");
|
||||
OF.emitString("Hello");
|
||||
OF.emitTag("boolean");
|
||||
OF.emitBoolean(true);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(100000);
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ObjectScope Scope(OF, 2);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(100000);
|
||||
OF.emitTag("array");
|
||||
{
|
||||
ArrayScope Scope(OF, 2);
|
||||
OF.emitInteger(1);
|
||||
OF.emitInteger(2);
|
||||
}
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
ObjectScope Scope(OF, 2);
|
||||
OF.emitTag("string");
|
||||
OF.emitString("multiply");
|
||||
OF.emitTag("array");
|
||||
{
|
||||
ArrayScope Scope(OF, 2);
|
||||
{
|
||||
ObjectScope Scope(OF, 1);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(32);
|
||||
}
|
||||
{
|
||||
ObjectScope Scope(OF, 2);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(52);
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitSimpleVariant("zero");
|
||||
{
|
||||
VariantScope Scope(OF, "succ");
|
||||
{
|
||||
VariantScope Scope(OF, "pred");
|
||||
OF.emitSimpleVariant("zero");
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
BiniouWriter OF(std::cout);
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitSimpleVariant("zero");
|
||||
{
|
||||
VariantScope Scope(OF, "succ");
|
||||
{
|
||||
VariantScope Scope(OF, "pred");
|
||||
{
|
||||
VariantScope Scope(OF, "eval");
|
||||
{
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitString("f");
|
||||
OF.emitString("\"3\t4\n\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
-100000
|
||||
-4611686018427387904
|
||||
4611686018427387903
|
||||
"Hello"
|
||||
true
|
||||
[]
|
||||
[
|
||||
"Hello, how are you?", "I'm well, thank you; and you, how are you?",
|
||||
"I'm fine, thank you."
|
||||
]
|
||||
[ [ [ 1 ] ], [ [], [ 2, 3 ] ], [] ]
|
||||
{
|
||||
#113028d1: "Hello",
|
||||
#fdfeeaa8: true,
|
||||
#171bbdbe: 100000,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit,
|
||||
#21ac3408: unit
|
||||
}
|
||||
{ #171bbdbe: 100000, #258f6d99: [ 1, 2 ] }
|
||||
{
|
||||
#113028d1: "multiply",
|
||||
#258f6d99: [ { #171bbdbe: 32 }, { #171bbdbe: 52, #21ac3408: unit } ]
|
||||
}
|
||||
(<#d0f10f28>, <#cc5ca7c2: <#ca5ebee1: <#d0f10f28>>>)
|
||||
(<#d0f10f28>, <#cc5ca7c2: <#ca5ebee1: <#c31c6b9c: ("f", "\"3\t4\n\"")>>>)
|
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
# Copyright (c) 2015-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
|
||||
./build/binioutest | bdump
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
//@atd type x = {
|
||||
//@atd foo : int
|
||||
//@atd }
|
||||
//@atd
|
||||
// main
|
||||
int main() {}
|
||||
|
||||
//@atd type x = {
|
||||
//@atd}
|
||||
// bla
|
||||
|
||||
//@atd foo
|
||||
//@atd bar
|
||||
|
||||
//@atd still there
|
||||
|
||||
//@atd some long line cut with \
|
||||
//@atd bla
|
@ -0,0 +1,11 @@
|
||||
type x = {
|
||||
foo : int
|
||||
}
|
||||
|
||||
type x = {
|
||||
}
|
||||
foo
|
||||
bar
|
||||
still there
|
||||
some long line cut with \
|
||||
bla
|
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (c) 2014-present, Facebook, Inc.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
#include "../ATDWriter.h"
|
||||
|
||||
typedef ATDWriter::JsonWriter<std::ostream> JsonWriter;
|
||||
typedef JsonWriter::ObjectScope ObjectScope;
|
||||
typedef JsonWriter::ArrayScope ArrayScope;
|
||||
typedef JsonWriter::VariantScope VariantScope;
|
||||
typedef JsonWriter::TupleScope TupleScope;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
const struct ATDWriter::ATDWriterOptions jsonWriterOptions = {
|
||||
.useYojson = false,
|
||||
.prettifyJson = true,
|
||||
};
|
||||
const struct ATDWriter::ATDWriterOptions yojsonWriterOptions = {
|
||||
.useYojson = true,
|
||||
.prettifyJson = true,
|
||||
};
|
||||
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
OF.emitInteger(100000);
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
OF.emitInteger(-100000);
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
OF.emitString("Hello");
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
OF.emitBoolean(true);
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
ArrayScope Scope(OF, 3);
|
||||
OF.emitString("Hello");
|
||||
OF.emitBoolean(true);
|
||||
OF.emitInteger(100000);
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
ObjectScope Scope(OF, 4); // 4 is larger than the actual size on purpose
|
||||
OF.emitTag("string");
|
||||
OF.emitString("Hello");
|
||||
OF.emitTag("boolean");
|
||||
OF.emitBoolean(true);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(100000);
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
ObjectScope Scope(OF, 2);
|
||||
OF.emitTag("integer");
|
||||
OF.emitInteger(100000);
|
||||
OF.emitTag("array");
|
||||
{
|
||||
ArrayScope Scope(OF, 2);
|
||||
OF.emitInteger(1);
|
||||
OF.emitInteger(2);
|
||||
}
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, jsonWriterOptions);
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitSimpleVariant("zero");
|
||||
{
|
||||
VariantScope Scope(OF, "succ");
|
||||
{
|
||||
VariantScope Scope(OF, "pred");
|
||||
OF.emitSimpleVariant("zero");
|
||||
}
|
||||
}
|
||||
}
|
||||
{
|
||||
JsonWriter OF(std::cout, yojsonWriterOptions);
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitSimpleVariant("zero");
|
||||
{
|
||||
VariantScope Scope(OF, "succ");
|
||||
{
|
||||
VariantScope Scope(OF, "pred");
|
||||
{
|
||||
VariantScope Scope(OF, "eval");
|
||||
{
|
||||
TupleScope Scope(OF, 2);
|
||||
OF.emitString("f");
|
||||
OF.emitString("\"3\t4\n\"");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
100000
|
||||
-100000
|
||||
"Hello"
|
||||
true
|
||||
[
|
||||
"Hello",
|
||||
true,
|
||||
100000
|
||||
]
|
||||
{
|
||||
"string" : "Hello",
|
||||
"boolean" : true,
|
||||
"integer" : 100000
|
||||
}
|
||||
{
|
||||
"integer" : 100000,
|
||||
"array" : [
|
||||
1,
|
||||
2
|
||||
]
|
||||
}
|
||||
[
|
||||
"zero",
|
||||
["succ" , ["pred" , "zero"]]
|
||||
]
|
||||
(
|
||||
<"zero">,
|
||||
<"succ" : <"pred" : <"eval" : (
|
||||
"f",
|
||||
"\"3\t4\n\""
|
||||
)>>>
|
||||
)
|
@ -0,0 +1,5 @@
|
||||
type @ObjCExpression@ = {}
|
||||
|
||||
type x@@yz = {
|
||||
@CXXExpression@ : string
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
type obj_c_expression = {}
|
||||
type xyz = {
|
||||
cxx_expression : string
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,399 @@
|
||||
tests/available_expression.m:8:12: warning: class 'NSObject' defined without specifying a base class [-Wobjc-root-class]
|
||||
@interface NSObject
|
||||
^
|
||||
tests/available_expression.m:8:20: note: add a super class to fix this problem
|
||||
@interface NSObject
|
||||
^
|
||||
: NSObject
|
||||
1 warning generated.
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "SEL", #2cdb06fb: [ "SEL" ] },
|
||||
5,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "id", #2cdb06fb: [ "id" ] },
|
||||
7,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 8, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "Class", #2cdb06fb: [ "Class" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#f9005968: 1,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "Protocol", #2cdb06fb: [ "Protocol" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 10, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 11, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 12, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/available_expression.m",
|
||||
#c7b317f4: 8,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 9, #c68b4ed6: 2 })
|
||||
},
|
||||
{ #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] },
|
||||
[],
|
||||
{ },
|
||||
{
|
||||
#d32dd232: {
|
||||
#c709e154: <#c37c57de>,
|
||||
#ec05e4a8: 14,
|
||||
#c8ff724b: { #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] }
|
||||
}
|
||||
})>,
|
||||
<#0e281b68:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] },
|
||||
[],
|
||||
{ },
|
||||
{
|
||||
#2ec29bb2: {
|
||||
#c709e154: <#3cf18b8d>,
|
||||
#ec05e4a8: 13,
|
||||
#c8ff724b: { #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] }
|
||||
}
|
||||
})>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 15, #c68b4ed6: 2 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "available_expression",
|
||||
#2cdb06fb: [ "available_expression" ]
|
||||
},
|
||||
[],
|
||||
{ },
|
||||
{
|
||||
#04c0017b: {
|
||||
#c709e154: <#3cf18b8d>,
|
||||
#ec05e4a8: 13,
|
||||
#c8ff724b: { #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] }
|
||||
},
|
||||
#d32dd232: {
|
||||
#c709e154: <#c37c57de>,
|
||||
#ec05e4a8: 16,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "available_expression",
|
||||
#2cdb06fb: [ "available_expression" ]
|
||||
}
|
||||
}
|
||||
})>,
|
||||
<#0e281b68:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 17, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 27, #c68b4ed6: 1 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "available_expression",
|
||||
#2cdb06fb: [ "available_expression" ]
|
||||
},
|
||||
[
|
||||
<#3ccd3797:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#f9005968: 16,
|
||||
#21793419:
|
||||
({ #c7b317f4: 19, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 25, #c68b4ed6: 1 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "test_no_bug:and:",
|
||||
#2cdb06fb: [ "test_no_bug:and:", "available_expression" ]
|
||||
},
|
||||
{
|
||||
#3ba2c7f6: true,
|
||||
#137b649c: { #c1127ea9: 18 },
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c7b317f4: 19, #c68b4ed6: 22 },
|
||||
{ #c68b4ed6: 26 })
|
||||
},
|
||||
{ #c8ff724b: "n", #2cdb06fb: [ "n" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{ #0370b1b2: 0 })>,
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419: ({ #c68b4ed6: 33 }, { #c68b4ed6: 56 })
|
||||
},
|
||||
{ #c8ff724b: "data", #2cdb06fb: [ "data" ] },
|
||||
{ #c1127ea9: 22 },
|
||||
{ #0370b1b2: 1 })>
|
||||
],
|
||||
#28dcb2c4: [
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "self", #2cdb06fb: [ "self" ] },
|
||||
{ #c1127ea9: 22, #ea1a680e: true },
|
||||
{ })>,
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "_cmd", #2cdb06fb: [ "_cmd" ] },
|
||||
{ #c1127ea9: 5 },
|
||||
{ })>
|
||||
],
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 25,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 61 },
|
||||
{ #c7b317f4: 25, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#22219ce5:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c7b317f4: 20, #c68b4ed6: 3 },
|
||||
{ #c7b317f4: 21, #c68b4ed6: 3 })
|
||||
},
|
||||
[
|
||||
<#f0f37d96:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419:
|
||||
({ #c7b317f4: 20, #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 42 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 28 } },
|
||||
{ #fcf1e718: "11.0" })>,
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 29,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 45 },
|
||||
{ #c7b317f4: 21, #c68b4ed6: 3 })
|
||||
},
|
||||
[])>
|
||||
],
|
||||
{ #c1c4b9e2: 27, #ccfc02dd: 29 })>,
|
||||
<#22219ce5:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#21793419:
|
||||
({ #c7b317f4: 23, #c68b4ed6: 3 },
|
||||
{ #c7b317f4: 24, #c68b4ed6: 3 })
|
||||
},
|
||||
[
|
||||
<#f0f37d96:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419:
|
||||
({ #c7b317f4: 23, #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 48 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 28 } },
|
||||
{ #fcf1e718: "8" })>,
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 51 },
|
||||
{ #c7b317f4: 24, #c68b4ed6: 3 })
|
||||
},
|
||||
[])>
|
||||
],
|
||||
{ #c1c4b9e2: 31, #ccfc02dd: 32 })>
|
||||
])>,
|
||||
#d2e9b40c: "-[available_expression test_no_bug:and:]"
|
||||
})>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#2ec29bb2: {
|
||||
#c709e154: <#3cf18b8d>,
|
||||
#ec05e4a8: 15,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "available_expression",
|
||||
#2cdb06fb: [ "available_expression" ]
|
||||
}
|
||||
}
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 33, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
34,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/available_expression.m",
|
||||
#e52854e9: <#3ff69d49>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 85 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 86 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 87 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 88 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 92 }, { #c1127ea9: 18 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#2fe155d3>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 95 }, { #c1127ea9: 91 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 96 }, { #fcd148e8: 89 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 97 }, { #c1127ea9: 96 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 98 }, { #fcd148e8: 90 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 99 }, { #c1127ea9: 98 })>,
|
||||
<#2374f4e7: ({ #d121c0bd: 100 }, 9)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 101 }, 102)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 103 }, { #c1127ea9: 20, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 104 }, { #c1127ea9: 35, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 105 }, { #c1127ea9: 35 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 106 }, 107)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 108 },
|
||||
{ #cd26765d: { #c1127ea9: 106 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#2374f4e7: ({ #d121c0bd: 109 }, 13)>,
|
||||
<#2374f4e7: ({ #d121c0bd: 110 }, 15)>,
|
||||
<#2e3d736c: ({ #d121c0bd: 22 }, { #c1127ea9: 110 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 7, #26f32be5: 97 },
|
||||
{ #0b680f7d: { #c1127ea9: 97 }, #c3687459: 6 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 34, #26f32be5: 97 },
|
||||
{ #0b680f7d: { #c1127ea9: 7 }, #c3687459: 33 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 5, #26f32be5: 95 },
|
||||
{ #0b680f7d: { #c1127ea9: 95 }, #c3687459: 4 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,553 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/bind_temporary.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "S", #2cdb06fb: [ "S" ] },
|
||||
8,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 7, #c68b4ed6: 1 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "S", #2cdb06fb: [ "S", "S" ] },
|
||||
8,
|
||||
[],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 0 },
|
||||
{ })>,
|
||||
<#1cd5be29:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 2 }, { #c68b4ed6: 8 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
})>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 3 }, { #c68b4ed6: 8 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "S", #2cdb06fb: [ "S", "S" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#d2e9b40c: "320519083853435709",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 11,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419: ({ #c68b4ed6: 7 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>,
|
||||
<#cfe47fa6:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 3 }, { #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "~S", #2cdb06fb: [ "~S", "S" ] },
|
||||
{ #c1127ea9: 15 },
|
||||
{
|
||||
#d2e9b40c: "3243028866176254141",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 14,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 9 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 7, #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "S", #2cdb06fb: [ "S", "S" ] },
|
||||
{ #c1127ea9: 18 },
|
||||
{
|
||||
#d2e9b40c: "1635307583371793064",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>
|
||||
],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 7, #1a9a7e84: true },
|
||||
{
|
||||
#1411db39: {
|
||||
#c709e154: <#3266451c>,
|
||||
#ec05e4a8: 14,
|
||||
#c8ff724b: { #c8ff724b: "~S", #2cdb06fb: [ "~S", "S" ] },
|
||||
#30e4876a: { #c1127ea9: 15 }
|
||||
}
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 14, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "test", #2cdb06fb: [ "test" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#d2e9b40c: "18241244337164948030",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 21,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 13 },
|
||||
{ #c7b317f4: 14, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 23 })
|
||||
},
|
||||
[
|
||||
<#d0cddcea:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#c27b9a39:
|
||||
({
|
||||
#d121c0bd: 25,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#d27fbfe6:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#1b3b8242:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8
|
||||
}
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#034d69b7>,
|
||||
#ec05e4a8: 11,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "S",
|
||||
#2cdb06fb: [
|
||||
"S", "S"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 }
|
||||
},
|
||||
{ #e715f735: 29 })>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14: <#33e323e2>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 30,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "s_ref",
|
||||
#2cdb06fb: [ "s_ref" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8, #ea1a680e: true },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ })>
|
||||
],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
{ #c8ff724b: "s_ref", #2cdb06fb: [ "s_ref" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#d0cddcea:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#c27b9a39:
|
||||
({
|
||||
#d121c0bd: 25,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 20 },
|
||||
{ #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#d27fbfe6:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6: 20
|
||||
},
|
||||
{
|
||||
#c68b4ed6: 22
|
||||
})
|
||||
},
|
||||
[
|
||||
<#1b3b8242:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6:
|
||||
20
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
22
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
8
|
||||
}
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#034d69b7>,
|
||||
#ec05e4a8:
|
||||
11,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"S",
|
||||
#2cdb06fb: [
|
||||
"S", "S"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
12
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8
|
||||
}
|
||||
},
|
||||
{ #e715f735: 29 })>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14: <#33e323e2>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 30,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "s_ref",
|
||||
#2cdb06fb: [ "s_ref" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ })>
|
||||
})>
|
||||
])>
|
||||
])>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 31, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
32,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/bind_temporary.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 88 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 89 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 90 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 91 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 95 }, { #c1127ea9: 33 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 96 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 97 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 98 }, 99)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 100 }, { #c1127ea9: 38, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 101 }, { #c1127ea9: 35, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 102 }, { #c1127ea9: 35 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 103 }, 104)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 105 },
|
||||
{ #cd26765d: { #c1127ea9: 103 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 8 }, 7)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 106 }, { #c1127ea9: 8 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 12 }, { #f9c96be9: { #c1127ea9: 33 } }, { })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 107 }, { #f9c96be9: { #c1127ea9: 33 } }, { })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 15 }, { #f9c96be9: { #c1127ea9: 33 } }, { })>,
|
||||
<#0b08cd60: ({ #d121c0bd: 20 }, { #c1127ea9: 8, #ea1a680e: true })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 108 },
|
||||
{ #f9c96be9: { #c1127ea9: 33 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 20 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 18 },
|
||||
{ #f9c96be9: { #c1127ea9: 33 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 20 } ] })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 109 }, { #fcd148e8: 92 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 110 }, { #c1127ea9: 109 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 111, #26f32be5: 110 },
|
||||
{ #0b680f7d: { #c1127ea9: 110 }, #c3687459: 112 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 32, #26f32be5: 110 },
|
||||
{ #0b680f7d: { #c1127ea9: 111 }, #c3687459: 31 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,176 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/c_attributes.c",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c68b4ed6: 60 }),
|
||||
#1771a8d7: [
|
||||
<#eebf2855:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#21793419: ({ #c68b4ed6: 45 }, { #c68b4ed6: 58 })
|
||||
},
|
||||
{ #251950e4: 0, #31ee909c: 1 })>
|
||||
]
|
||||
},
|
||||
{ #c8ff724b: "add_all_ints", #2cdb06fb: [ "add_all_ints" ] },
|
||||
{ #c1127ea9: 9 },
|
||||
{
|
||||
#ed526254: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419: ({ #c68b4ed6: 18 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
{ #c8ff724b: "a", #2cdb06fb: [ "a" ] },
|
||||
{ #c1127ea9: 11 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 12, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
13,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/c_attributes.c",
|
||||
#e52854e9: <#3079cf66>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 14 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 15 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 16 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 11 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 19 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 66 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 67 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 68 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 69 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 73 }, { #c1127ea9: 14 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 76 }, 77)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 78 }, { #c1127ea9: 11, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 79 }, { #c1127ea9: 16, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 80 }, { #c1127ea9: 16 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 81 }, 82)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 83 },
|
||||
{ #cd26765d: { #c1127ea9: 81 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 9 },
|
||||
{ #f9c96be9: { #c1127ea9: 11 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 11 } ] })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 84 }, { #fcd148e8: 70 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 85 }, { #c1127ea9: 84 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 86, #26f32be5: 85 },
|
||||
{ #0b680f7d: { #c1127ea9: 85 }, #c3687459: 87 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 13, #26f32be5: 85 },
|
||||
{ #0b680f7d: { #c1127ea9: 86 }, #c3687459: 12 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,287 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({ #c3bbce7c: "tests/c_cast.cpp", #c7b317f4: 7, #c68b4ed6: 1 },
|
||||
{ #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "i", #2cdb06fb: [ "i" ] },
|
||||
{ #c1127ea9: 8 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#fe93c404:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419: ({ #c68b4ed6: 9 }, { #c68b4ed6: 9 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 8 } },
|
||||
{ #d9aa98d1: true, #1f65f619: 32, #31b87f71: "10" })>
|
||||
})>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419: ({ #c7b317f4: 8, #c68b4ed6: 1 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
{ #c8ff724b: "l", #2cdb06fb: [ "l" ] },
|
||||
{ #c1127ea9: 11 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#fe93c404:
|
||||
<#ca9fafa2:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#21793419: ({ #c68b4ed6: 10 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419: ({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "i",
|
||||
#2cdb06fb: [ "i" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 8 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 8 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 11 } },
|
||||
{ #c91e0a14: <#2677d46b>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 11 } },
|
||||
{ #c91e0a14: <#33e323e2>, #fa1a3bd3: [] },
|
||||
{ #c1127ea9: 11 })>
|
||||
})>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#21793419: ({ #c7b317f4: 9, #c68b4ed6: 1 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
{ #c8ff724b: "m", #2cdb06fb: [ "m" ] },
|
||||
{ #c1127ea9: 11 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#fe93c404:
|
||||
<#3f28859a:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419: ({ #c68b4ed6: 10 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#21793419: ({ #c68b4ed6: 15 }, { #c68b4ed6: 15 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 15 }, { #c68b4ed6: 15 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 15 }, { #c68b4ed6: 15 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "i",
|
||||
#2cdb06fb: [ "i" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 8 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 8 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 11 } },
|
||||
{ #c91e0a14: <#2677d46b>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 11 } },
|
||||
{ #c91e0a14: <#33e323e2>, #fa1a3bd3: [] },
|
||||
{ #c1127ea9: 11 })>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 21, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
22,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/c_cast.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 8 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 11 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 76 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 77 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 78 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 79 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 83 }, { #c1127ea9: 23 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 86 }, 87)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 88 }, { #c1127ea9: 8, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 89 }, { #c1127ea9: 25, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 90 }, { #c1127ea9: 25 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 91 }, 92)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 93 },
|
||||
{ #cd26765d: { #c1127ea9: 91 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#0098a8c5: ({ #d121c0bd: 94 }, { #fcd148e8: 80 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 95 }, { #c1127ea9: 94 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 96, #26f32be5: 95 },
|
||||
{ #0b680f7d: { #c1127ea9: 95 }, #c3687459: 97 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 22, #26f32be5: 95 },
|
||||
{ #0b680f7d: { #c1127ea9: 96 }, #c3687459: 21 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,160 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({ #c3bbce7c: "tests/comments.c", #c7b317f4: 8, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "foo", #2cdb06fb: [ "foo" ] },
|
||||
{ #c1127ea9: 8 },
|
||||
{
|
||||
#ebe3c415: 7,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 12 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
[])>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 10, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
11,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/comments.c",
|
||||
#e52854e9: <#3079cf66>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 12 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 13 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 14 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 15 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 16 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 19 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 65 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 66 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 67 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 68 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 72 }, { #c1127ea9: 12 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 75 }, 76)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 77 }, { #c1127ea9: 17, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 78 }, { #c1127ea9: 14, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 79 }, { #c1127ea9: 14 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 80 }, 81)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 82 },
|
||||
{ #cd26765d: { #c1127ea9: 80 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#01fe18e9: ({ #d121c0bd: 8 }, { #f9c96be9: { #c1127ea9: 12 } })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 83 }, { #fcd148e8: 69 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 84 }, { #c1127ea9: 83 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 85, #26f32be5: 84 },
|
||||
{ #0b680f7d: { #c1127ea9: 84 }, #c3687459: 86 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 11, #26f32be5: 84 },
|
||||
{ #0b680f7d: { #c1127ea9: 85 }, #c3687459: 10 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,443 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/const_cast.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 10, #c68b4ed6: 1 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "Foo", #2cdb06fb: [ "Foo" ] },
|
||||
8,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 7, #c68b4ed6: 1 }, { #c68b4ed6: 7 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "Foo", #2cdb06fb: [ "Foo", "Foo" ] },
|
||||
8,
|
||||
[],
|
||||
{ },
|
||||
<#01fae064>,
|
||||
{ #33244202: 0 },
|
||||
{ })>,
|
||||
<#1cd5be29:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 2 }, { #c68b4ed6: 8 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
})>,
|
||||
<#29ca61ce:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 3 }, { #c68b4ed6: 16 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "func", #2cdb06fb: [ "func", "Foo" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#d2e9b40c: "999725558640074098",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 11,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419: ({ #c68b4ed6: 15 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
<#01fae064>,
|
||||
{ #33244202: 7, #1a9a7e84: true },
|
||||
{ #f1ae3b70: true })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 15, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "someFunction", #2cdb06fb: [ "someFunction" ] },
|
||||
{ #c1127ea9: 15 },
|
||||
{
|
||||
#d2e9b40c: "9689270513361838995",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 19 }, { #c68b4ed6: 30 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "f", #2cdb06fb: [ "f" ] },
|
||||
{ #c1127ea9: 17 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 14,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 33 }, { #c7b317f4: 15, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 35 })
|
||||
},
|
||||
[
|
||||
<#0acc0a14:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 15 }, { #c68b4ed6: 34 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 33 }, { #c68b4ed6: 33 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 16,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "f",
|
||||
#2cdb06fb: [ "f" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 17 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ #c91e0a14: <#33e323e2>, #fa1a3bd3: [] },
|
||||
{ #c1127ea9: 22 },
|
||||
"const_cast")>
|
||||
],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 34 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "fRef", #2cdb06fb: [ "fRef" ] },
|
||||
{ #c1127ea9: 22 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#0acc0a14:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 15 },
|
||||
{ #c68b4ed6: 34 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 33 },
|
||||
{ #c68b4ed6: 33 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8,
|
||||
#ea1a680e: true
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 16,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "f",
|
||||
#2cdb06fb: [ "f" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 17 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c91e0a14: <#33e323e2>,
|
||||
#fa1a3bd3: []
|
||||
},
|
||||
{ #c1127ea9: 22 },
|
||||
"const_cast")>
|
||||
})>
|
||||
])>,
|
||||
<#ee1808d0:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 13 })
|
||||
},
|
||||
[
|
||||
<#090744cf:
|
||||
({
|
||||
#d121c0bd: 25,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 3 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 8 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 23,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "fRef",
|
||||
#2cdb06fb: [ "fRef" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 22 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 27 } },
|
||||
{
|
||||
#f708701b: true,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "func",
|
||||
#2cdb06fb: [ "func", "Foo" ]
|
||||
},
|
||||
#c369ebbe: {
|
||||
#c709e154: <#e7d5f344>,
|
||||
#ec05e4a8: 11,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "func",
|
||||
#2cdb06fb: [ "func", "Foo" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 12 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 28 } })>
|
||||
])>
|
||||
})>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 29,
|
||||
#21793419: ({ #c7b317f4: 17, #c68b4ed6: 1 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
{ #c8ff724b: "i", #2cdb06fb: [ "i" ] },
|
||||
{ #c1127ea9: 30, #ea1a680e: true },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#e45abe46: true,
|
||||
#dd3d1991: true,
|
||||
#fe93c404:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419: ({ #c68b4ed6: 19 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 30 } },
|
||||
{ #d9aa98d1: true, #1f65f619: 32, #31b87f71: "1" })>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 32, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
33,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/const_cast.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 86 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 87 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 88 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 89 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 93 }, { #c1127ea9: 28 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 96 }, 97)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 98 }, { #c1127ea9: 30, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 99 }, { #c1127ea9: 35, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 100 }, { #c1127ea9: 35 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 101 }, 102)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 103 },
|
||||
{ #cd26765d: { #c1127ea9: 101 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 8 }, 7)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 104 }, { #c1127ea9: 8 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 12 }, { #f9c96be9: { #c1127ea9: 28 } }, { })>,
|
||||
<#0b08cd60: ({ #d121c0bd: 17 }, { #c1127ea9: 8, #ea1a680e: true })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 15 },
|
||||
{ #f9c96be9: { #c1127ea9: 28 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 17 } ] })>,
|
||||
<#0b08cd60: ({ #d121c0bd: 22 }, { #c1127ea9: 8 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 105 }, { #c1127ea9: 8, #ea1a680e: true })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 106 }, { #fcd148e8: 90 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 107 }, { #c1127ea9: 106 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 108, #26f32be5: 107 },
|
||||
{ #0b680f7d: { #c1127ea9: 107 }, #c3687459: 109 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 33, #26f32be5: 107 },
|
||||
{ #0b680f7d: { #c1127ea9: 108 }, #c3687459: 32 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,6 @@
|
||||
#/bin/bash
|
||||
# Copyright (c) 2015-present, Facebook, Inc.
|
||||
#
|
||||
# This source code is licensed under the MIT license found in the
|
||||
# LICENSE file in the root directory of this source tree.
|
||||
"$@" | bdump
|
@ -0,0 +1,420 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#37b901fc:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({ #c3bbce7c: "tests/friend.cpp", #c7b317f4: 8, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 9, #c68b4ed6: 22 })
|
||||
},
|
||||
{ #c8ff724b: "AnotherClass", #2cdb06fb: [ "AnotherClass" ] },
|
||||
{
|
||||
#dfe08e08: [
|
||||
<#e0b96727:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 9, #c68b4ed6: 22 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "AnotherClass",
|
||||
#2cdb06fb: [ "AnotherClass<int *>" ]
|
||||
},
|
||||
9,
|
||||
[],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 0 },
|
||||
{ },
|
||||
"8348715085918813141",
|
||||
{
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 10 }> ]
|
||||
})>
|
||||
]
|
||||
})>,
|
||||
<#37b901fc:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#21793419:
|
||||
({ #c7b317f4: 11, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 16, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y" ] },
|
||||
{
|
||||
#dfe08e08: [
|
||||
<#e0b96727:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 11, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 16, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y<int>" ] },
|
||||
13,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#f9005968: 12,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 },
|
||||
{ #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y", "Y<int>" ] },
|
||||
13,
|
||||
[],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 12 },
|
||||
{ })>,
|
||||
<#1e196208:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 32 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
<#37e21eda: 16>)>,
|
||||
<#1e196208:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 3 },
|
||||
{ #c7b317f4: 15, #c68b4ed6: 16 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
<#2d3f7c8a:
|
||||
<#37b901fc:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 3 },
|
||||
{ #c7b317f4: 15, #c68b4ed6: 16 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "AnotherClass",
|
||||
#2cdb06fb: [ "AnotherClass" ]
|
||||
},
|
||||
{ })>>)>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#f9005968: 12,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 8 },
|
||||
{ #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y", "Y<int>" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{
|
||||
#d2e9b40c: "17039860285578718334",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#ebe3c415: 19,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#f9005968: 12,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y", "Y<int>" ] },
|
||||
{ #c1127ea9: 23 },
|
||||
{
|
||||
#d2e9b40c: "10269173081916450237",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 25 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#f9005968: 12,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "Y", #2cdb06fb: [ "Y", "Y<int>" ] },
|
||||
{ #c1127ea9: 27 },
|
||||
{
|
||||
#d2e9b40c: "15856009432989426751",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 29 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>
|
||||
],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 12, #1a9a7e84: true },
|
||||
{ #f1ae3b70: true },
|
||||
"12207844931495093295",
|
||||
{
|
||||
#e43971cf: 11,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 30 }> ]
|
||||
})>
|
||||
]
|
||||
})>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419: ({ #c7b317f4: 18, #c68b4ed6: 1 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "y1", #2cdb06fb: [ "y1" ] },
|
||||
{ #c1127ea9: 32 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#fe93c404:
|
||||
<#e5067ee9:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 32 } },
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#034d69b7>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "Y",
|
||||
#2cdb06fb: [ "Y", "Y<int>" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
}
|
||||
})>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 34, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
35,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/friend.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 90 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 91 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 92 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 93 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 96 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 97 }, { #c1127ea9: 36 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 98 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 99 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 100 }, 101)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 102 }, { #c1127ea9: 30, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 103 }, { #c1127ea9: 38, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 104 }, { #c1127ea9: 38 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 105 }, 106)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 107 },
|
||||
{ #cd26765d: { #c1127ea9: 105 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#f3f3711a: ({ #d121c0bd: 108 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 109 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 110 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 111 })>,
|
||||
<#d49f978d: ({ #d121c0bd: 112 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 113 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 114 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 115 })>,
|
||||
<#d49f978d: ({ #d121c0bd: 116 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 117 }, { #c1127ea9: 108 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 118 }, { #c1127ea9: 113 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 119 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 120 })>,
|
||||
<#263b5f37: ({ #d121c0bd: 121, #26f32be5: 120 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 122 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 123 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 124 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 125 })>,
|
||||
<#d49f978d: ({ #d121c0bd: 126 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 13 }, 12)>,
|
||||
<#ece2635f: ({ #d121c0bd: 32, #26f32be5: 13 })>,
|
||||
<#dd64b59b: ({ #d121c0bd: 127, #26f32be5: 30 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 10 }, { #c1127ea9: 30 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 128 }, { #c1127ea9: 127 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 9 }, 8)>,
|
||||
<#ece2635f: ({ #d121c0bd: 129, #26f32be5: 9 })>,
|
||||
<#263b5f37: ({ #d121c0bd: 16, #26f32be5: 9 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 130 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 131 }, { #f9c96be9: { #c1127ea9: 36 } }, { })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 132 }, { #f9c96be9: { #c1127ea9: 36 } }, { })>,
|
||||
<#0b08cd60: ({ #d121c0bd: 25 }, { #c1127ea9: 13, #ea1a680e: true })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 133 },
|
||||
{ #f9c96be9: { #c1127ea9: 36 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 25 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 23 },
|
||||
{ #f9c96be9: { #c1127ea9: 36 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 25 } ] })>,
|
||||
<#295746e6: ({ #d121c0bd: 29 }, { #c1127ea9: 13 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 134 },
|
||||
{ #f9c96be9: { #c1127ea9: 36 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 29 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 27 },
|
||||
{ #f9c96be9: { #c1127ea9: 36 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 29 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 20 }, { #f9c96be9: { #c1127ea9: 36 } }, { })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 135 }, { #fcd148e8: 94 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 136 }, { #c1127ea9: 135 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 137, #26f32be5: 136 },
|
||||
{ #0b680f7d: { #c1127ea9: 136 }, #c3687459: 138 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 35, #26f32be5: 136 },
|
||||
{ #0b680f7d: { #c1127ea9: 137 }, #c3687459: 34 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,885 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#c589b11c:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/function_template.cpp",
|
||||
#c7b317f4: 8,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "get", #2cdb06fb: [ "get" ] },
|
||||
{
|
||||
#dfe08e08: [
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "get", #2cdb06fb: [ "get<double>" ] },
|
||||
{ #c1127ea9: 9 },
|
||||
{
|
||||
#d2e9b40c: "18441705267350886400",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "x", #2cdb06fb: [ "x" ] },
|
||||
{ #c1127ea9: 11 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 8,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 12 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 11 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 10,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 11 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 11 } },
|
||||
{
|
||||
#c91e0a14: <#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
])>
|
||||
])>,
|
||||
#f3c2adb0: {
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 16 }> ]
|
||||
}
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "get", #2cdb06fb: [ "get<char>" ] },
|
||||
{ #c1127ea9: 18 },
|
||||
{
|
||||
#d2e9b40c: "1909523640421882241",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "x", #2cdb06fb: [ "x" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 17,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 12 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 20 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 20 } },
|
||||
{
|
||||
#c91e0a14: <#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
])>
|
||||
])>,
|
||||
#f3c2adb0: {
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 25 }> ]
|
||||
}
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "get", #2cdb06fb: [ "get<float>" ] },
|
||||
{ #c1127ea9: 27 },
|
||||
{
|
||||
#d2e9b40c: "2862116284697721030",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "x", #2cdb06fb: [ "x" ] },
|
||||
{ #c1127ea9: 29 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 26,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 12 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 29 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 28,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 29 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 29 } },
|
||||
{
|
||||
#c91e0a14: <#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
])>
|
||||
])>,
|
||||
#f3c2adb0: {
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 34 }> ]
|
||||
}
|
||||
})>
|
||||
]
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 35,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 17, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "get", #2cdb06fb: [ "get<int>" ] },
|
||||
{ #c1127ea9: 36 },
|
||||
{
|
||||
#d2e9b40c: "8674435321115121355",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 37,
|
||||
#21793419:
|
||||
({ #c7b317f4: 15, #c68b4ed6: 9 }, { #c68b4ed6: 13 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "x", #2cdb06fb: [ "x" ] },
|
||||
{ #c1127ea9: 38 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 35,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c7b317f4: 17, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 40,
|
||||
#21793419:
|
||||
({ #c7b317f4: 16, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#d49390e5:
|
||||
({
|
||||
#d121c0bd: 41,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 }, { #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 42,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 }, { #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 38 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>,
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 43,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 14 }, { #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 44,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 14 },
|
||||
{ #c68b4ed6: 14 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 38 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#334f163b>,
|
||||
#ec05e4a8: 37,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 38 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 38 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 38 } },
|
||||
{ #c709e154: <#003ad3e4> })>
|
||||
])>
|
||||
])>,
|
||||
#f3c2adb0: {
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 38 }> ]
|
||||
}
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 45,
|
||||
#21793419:
|
||||
({ #c7b317f4: 22, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 27, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "test", #2cdb06fb: [ "test" ] },
|
||||
{ #c1127ea9: 46 },
|
||||
{
|
||||
#d2e9b40c: "18241244337164948030",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 45,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 47,
|
||||
#21793419:
|
||||
({ #c7b317f4: 22, #c68b4ed6: 13 },
|
||||
{ #c7b317f4: 27, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 48,
|
||||
#21793419:
|
||||
({ #c7b317f4: 23, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 49,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 8 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "c", #2cdb06fb: [ "c" ] },
|
||||
{ #c1127ea9: 25 },
|
||||
{ })>
|
||||
])>,
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 50,
|
||||
#21793419:
|
||||
({ #c7b317f4: 24, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 51,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 9 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "f", #2cdb06fb: [ "f" ] },
|
||||
{ #c1127ea9: 34 },
|
||||
{ })>
|
||||
])>,
|
||||
<#d49390e5:
|
||||
({
|
||||
#d121c0bd: 52,
|
||||
#21793419:
|
||||
({ #c7b317f4: 25, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 12 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 53,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 3 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 25 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 49,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "c",
|
||||
#2cdb06fb: [ "c" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 25 }
|
||||
}
|
||||
})>,
|
||||
<#c59ea513:
|
||||
({
|
||||
#d121c0bd: 54,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 }, { #c68b4ed6: 12 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 55,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 }, { #c68b4ed6: 7 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 56,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 7 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 18 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#ee046738>,
|
||||
#ec05e4a8: 17,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "get",
|
||||
#2cdb06fb: [ "get<char>" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 18 }
|
||||
},
|
||||
#e3ab889b: {
|
||||
#c709e154: <#de0c0392>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "get",
|
||||
#2cdb06fb: [ "get" ]
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 57 } },
|
||||
{ #c91e0a14: <#210490b0>, #fa1a3bd3: [] })>,
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 58,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 59,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 25 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 49,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "c",
|
||||
#2cdb06fb: [ "c" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 25 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 25 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 20 } })>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 25 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ #c709e154: <#009aba4f> })>,
|
||||
<#d49390e5:
|
||||
({
|
||||
#d121c0bd: 60,
|
||||
#21793419:
|
||||
({ #c7b317f4: 26, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 12 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 61,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 3 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 34 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 51,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "f",
|
||||
#2cdb06fb: [ "f" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 34 }
|
||||
}
|
||||
})>,
|
||||
<#c59ea513:
|
||||
({
|
||||
#d121c0bd: 62,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 }, { #c68b4ed6: 12 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 63,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 }, { #c68b4ed6: 7 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 64,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 7 },
|
||||
{ #c68b4ed6: 7 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 27 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#ee046738>,
|
||||
#ec05e4a8: 26,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "get",
|
||||
#2cdb06fb: [ "get<float>" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 27 }
|
||||
},
|
||||
#e3ab889b: {
|
||||
#c709e154: <#de0c0392>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "get",
|
||||
#2cdb06fb: [ "get" ]
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 65 } },
|
||||
{ #c91e0a14: <#210490b0>, #fa1a3bd3: [] })>,
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 66,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 67,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 34 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 51,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "f",
|
||||
#2cdb06fb: [ "f" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 34 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 34 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 29 } })>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 34 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ #c709e154: <#009aba4f> })>
|
||||
])>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 68, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
69,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/function_template.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 16 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 96 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 97 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 98 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 99 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 100 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 101 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 102 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 103 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 104 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 105 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 106 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 107 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 108 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 109 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 110 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 111 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 112 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 113 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 114 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 115 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 116 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 117 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 118 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 119 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 120 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 121 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 122 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 123 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 124 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 125 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 126 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 127 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 128 }, { #c1127ea9: 70 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 129 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 130 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 131 }, 132)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 133 }, { #c1127ea9: 38, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 134 }, { #c1127ea9: 25, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 135 }, { #c1127ea9: 25 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 136 }, 137)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 138 },
|
||||
{ #cd26765d: { #c1127ea9: 136 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#f3f3711a: ({ #d121c0bd: 139 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 140 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 141 },
|
||||
{ #f9c96be9: { #c1127ea9: 139 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 139 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 142 },
|
||||
{ #f9c96be9: { #c1127ea9: 140 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 140 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 36 },
|
||||
{ #f9c96be9: { #c1127ea9: 38 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 38 } ] })>,
|
||||
<#dd64b59b: ({ #d121c0bd: 143, #26f32be5: 38 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 144 },
|
||||
{ #f9c96be9: { #c1127ea9: 143 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 143 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 145 },
|
||||
{ #f9c96be9: { #c1127ea9: 16 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 16 } ] })>,
|
||||
<#dd64b59b: ({ #d121c0bd: 11, #26f32be5: 16 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 9 },
|
||||
{ #f9c96be9: { #c1127ea9: 11 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 11 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 46 }, { #f9c96be9: { #c1127ea9: 70 } }, { })>,
|
||||
<#dd64b59b: ({ #d121c0bd: 20, #26f32be5: 25 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 146 },
|
||||
{ #f9c96be9: { #c1127ea9: 25 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 25 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 18 },
|
||||
{ #f9c96be9: { #c1127ea9: 20 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 20 } ] })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 147 }, { #c1127ea9: 146 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 57 }, { #c1127ea9: 18 })>,
|
||||
<#dd64b59b: ({ #d121c0bd: 29, #26f32be5: 34 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 148 },
|
||||
{ #f9c96be9: { #c1127ea9: 34 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 34 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 27 },
|
||||
{ #f9c96be9: { #c1127ea9: 29 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 29 } ] })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 149 }, { #c1127ea9: 148 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 65 }, { #c1127ea9: 27 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 150 }, { #fcd148e8: 125 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 151 }, { #c1127ea9: 150 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 152, #26f32be5: 151 },
|
||||
{ #0b680f7d: { #c1127ea9: 151 }, #c3687459: 153 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 69, #26f32be5: 151 },
|
||||
{ #0b680f7d: { #c1127ea9: 152 }, #c3687459: 68 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,897 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/generic_selector_expression.c",
|
||||
#c7b317f4: 9,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 15, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "test_typename", #2cdb06fb: [ "test_typename" ] },
|
||||
{ #c1127ea9: 8 },
|
||||
{
|
||||
#ebe3c415: 7,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 25 },
|
||||
{ #c7b317f4: 15, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 8 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "s", #2cdb06fb: [ "s" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{ })>
|
||||
])>,
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419:
|
||||
({ #c7b317f4: 11, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 8 })
|
||||
},
|
||||
[],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 7 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "y", #2cdb06fb: [ "y" ] },
|
||||
{ #c1127ea9: 15 },
|
||||
{ })>
|
||||
])>,
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 18 })
|
||||
},
|
||||
[
|
||||
<#c835bf2a:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#02335a3f:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 11,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "s",
|
||||
#2cdb06fb: [ "s" ]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 12 },
|
||||
#0e89e422: <#28055b85>
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 12 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "1"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "4"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#31b87f71:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>
|
||||
})>
|
||||
],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 25,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 11 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "x", #2cdb06fb: [ "x" ] },
|
||||
{ #c1127ea9: 15 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#c835bf2a:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#02335a3f:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6: 11
|
||||
},
|
||||
{
|
||||
#c68b4ed6: 11
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#004196c7>,
|
||||
#ec05e4a8: 11,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "s",
|
||||
#2cdb06fb: [
|
||||
"s"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 12
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 12 } },
|
||||
{
|
||||
#c91e0a14: <#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "1"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "4"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#31b87f71:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 15 }
|
||||
},
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>
|
||||
})>
|
||||
})>
|
||||
])>,
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 18 })
|
||||
},
|
||||
[
|
||||
<#c835bf2a:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#02335a3f:
|
||||
({
|
||||
#d121c0bd: 29,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 15
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 14,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "y",
|
||||
#2cdb06fb: [ "y" ]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 15
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 15 },
|
||||
#0e89e422: <#28055b85>
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "1"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 34,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "4"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#31b87f71:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>
|
||||
})>
|
||||
],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 35,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 11 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "z", #2cdb06fb: [ "z" ] },
|
||||
{ #c1127ea9: 15 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#c835bf2a:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#02335a3f:
|
||||
({
|
||||
#d121c0bd: 29,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6: 11
|
||||
},
|
||||
{
|
||||
#c68b4ed6: 11
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 15
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#004196c7>,
|
||||
#ec05e4a8: 14,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "y",
|
||||
#2cdb06fb: [
|
||||
"y"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 15
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 15
|
||||
},
|
||||
#0e89e422: <#28055b85>
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#c91e0a14: <#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "1"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "2"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>,
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 34,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "4"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#31b87f71:
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 },
|
||||
{ #c68b4ed6: 11 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 15 }
|
||||
},
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "3"
|
||||
})>
|
||||
})>
|
||||
})>
|
||||
])>,
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 36,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#d49390e5:
|
||||
({
|
||||
#d121c0bd: 37,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 }, { #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 38,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 }, { #c68b4ed6: 10 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 10 },
|
||||
{ #c68b4ed6: 10 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 15 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 25,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 15 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>,
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 40,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 14 }, { #c68b4ed6: 14 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 41,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 14 },
|
||||
{ #c68b4ed6: 14 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 15 },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 35,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "z",
|
||||
#2cdb06fb: [ "z" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 15 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{ #c91e0a14: <#f7495e1f>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{ #c709e154: <#0031aa01> })>
|
||||
])>
|
||||
])>
|
||||
})>,
|
||||
<#21116177:
|
||||
({
|
||||
#d121c0bd: 42,
|
||||
#21793419: ({ #c7b317f4: 15, #c68b4ed6: 2 }, { #c68b4ed6: 2 })
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 43, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
44,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/generic_selector_expression.c",
|
||||
#e52854e9: <#3079cf66>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 12 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 15 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 96 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 97 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 98 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 99 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 100 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 101 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 102 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 103 }, { #c1127ea9: 45 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 104 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 105 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 106 }, 107)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 108 }, { #c1127ea9: 15, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 109 }, { #c1127ea9: 12, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 110 }, { #c1127ea9: 12 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 111 }, 112)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 113 },
|
||||
{ #cd26765d: { #c1127ea9: 111 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#26796f6a: ({ #d121c0bd: 8 }, { #f9c96be9: { #c1127ea9: 15 } }, { })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 114 }, { #fcd148e8: 100 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 115 }, { #c1127ea9: 114 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 116, #26f32be5: 115 },
|
||||
{ #0b680f7d: { #c1127ea9: 115 }, #c3687459: 117 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 44, #26f32be5: 115 },
|
||||
{ #0b680f7d: { #c1127ea9: 116 }, #c3687459: 43 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,678 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/inheriting_constructor.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 10, #c68b4ed6: 1 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A" ] },
|
||||
8,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 7, #c68b4ed6: 1 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A", "A" ] },
|
||||
8,
|
||||
[],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 0 },
|
||||
{ })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 3 }, { #c68b4ed6: 11 }),
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A", "A" ] },
|
||||
{ #c1127ea9: 11 },
|
||||
{
|
||||
#d2e9b40c: "14779048587651412014",
|
||||
#f1a45f0e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#21793419: ({ #c68b4ed6: 5 }, { #c68b4ed6: 5 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 13 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 10,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419: ({ #c68b4ed6: 10 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>,
|
||||
<#29ca61ce:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 9, #c68b4ed6: 3 }, { #c68b4ed6: 14 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "foo", #2cdb06fb: [ "foo", "A" ] },
|
||||
{ #c1127ea9: 16 },
|
||||
{
|
||||
#d2e9b40c: "11285596688767843576",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 15,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419: ({ #c68b4ed6: 13 }, { #c68b4ed6: 14 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#f9005968: 7,
|
||||
#21793419:
|
||||
({ #c7b317f4: 7, #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A", "A" ] },
|
||||
{ #c1127ea9: 19 },
|
||||
{
|
||||
#d2e9b40c: "3430056695640597274",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 21 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#f9005968: 7,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A", "A" ] },
|
||||
{ #c1127ea9: 23 },
|
||||
{
|
||||
#d2e9b40c: "1361265890968139694",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 25 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cfe47fa6:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#f9005968: 7,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "~A", #2cdb06fb: [ "~A", "A" ] },
|
||||
{ #c1127ea9: 27 },
|
||||
{
|
||||
#d2e9b40c: "5328378654181921475",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true
|
||||
},
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 7, #1a9a7e84: true },
|
||||
{
|
||||
#1411db39: {
|
||||
#c709e154: <#3266451c>,
|
||||
#ec05e4a8: 26,
|
||||
#c8ff724b: { #c8ff724b: "~A", #2cdb06fb: [ "~A", "A" ] },
|
||||
#30e4876a: { #c1127ea9: 27 }
|
||||
}
|
||||
})>,
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 14, #c68b4ed6: 1 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B" ] },
|
||||
29,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#f9005968: 28,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] },
|
||||
29,
|
||||
[],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 0 },
|
||||
{ })>,
|
||||
<#c0e5c3ae:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 3 }, { #c68b4ed6: 12 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] })>,
|
||||
<#39c4b314:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] })>,
|
||||
<#39c4b314:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] })>,
|
||||
<#39c4b314:
|
||||
({
|
||||
#d121c0bd: 34,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 35,
|
||||
#f9005968: 28,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] },
|
||||
{ #c1127ea9: 36 },
|
||||
{
|
||||
#d2e9b40c: "10798876524598897542",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true
|
||||
},
|
||||
{ })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 37,
|
||||
#f9005968: 28,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] },
|
||||
{ #c1127ea9: 38 },
|
||||
{
|
||||
#d2e9b40c: "7710293714478488613",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 40 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 41,
|
||||
#f9005968: 28,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 }),
|
||||
#eb8a1f5a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "B", #2cdb06fb: [ "B", "B" ] },
|
||||
{ #c1127ea9: 42 },
|
||||
{
|
||||
#d2e9b40c: "16903082029399050859",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 43,
|
||||
#21793419: ({ #c68b4ed6: 8 }, { #c68b4ed6: 8 })
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 44 },
|
||||
{ #0370b1b2: 0 })>
|
||||
]
|
||||
},
|
||||
{ #fe288443: true })>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 45,
|
||||
#f9005968: 28,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#eb8a1f5a: true,
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{ #c8ff724b: "A", #2cdb06fb: [ "A", "B" ] },
|
||||
{ #c1127ea9: 46 },
|
||||
{
|
||||
#d2e9b40c: "18258347749069050656",
|
||||
#f1a45f0e: true,
|
||||
#3e64314e: true,
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 47,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "", #2cdb06fb: [ "" ] },
|
||||
{ #c1127ea9: 13 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#ebe3c415: 45,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 48,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{
|
||||
#ef684b00: [
|
||||
{
|
||||
#298801ac: <#fa100247: (8, false)>,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 12 }),
|
||||
#fe93c404:
|
||||
<#364949d0:
|
||||
({
|
||||
#d121c0bd: 49,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 12 }, { #c68b4ed6: 12 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 8 } },
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#034d69b7>,
|
||||
#ec05e4a8: 10,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "A",
|
||||
#2cdb06fb: [ "A", "A" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 11 }
|
||||
}
|
||||
})>
|
||||
}
|
||||
]
|
||||
})>
|
||||
],
|
||||
{ },
|
||||
<#c5b1f8a9>,
|
||||
{ #33244202: 28, #1a9a7e84: true },
|
||||
{ #2dba2742: [ 8 ] })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 50,
|
||||
#21793419: ({ #c7b317f4: 16, #c68b4ed6: 1 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
{ #c8ff724b: "main", #2cdb06fb: [ "main" ] },
|
||||
{ #c1127ea9: 51 },
|
||||
{
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 50,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 52,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 22 })
|
||||
},
|
||||
[
|
||||
<#152ea3f2:
|
||||
({
|
||||
#d121c0bd: 53,
|
||||
#21793419: ({ #c68b4ed6: 14 }, { #c68b4ed6: 20 })
|
||||
},
|
||||
[
|
||||
<#e5067ee9:
|
||||
({
|
||||
#d121c0bd: 54,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
[
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 55,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 18 }, { #c68b4ed6: 18 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 13 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "5"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 29 } },
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#034d69b7>,
|
||||
#ec05e4a8: 45,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "A",
|
||||
#2cdb06fb: [ "A", "B" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 46 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 56,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 14 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
{ #c8ff724b: "b", #2cdb06fb: [ "b" ] },
|
||||
{ #c1127ea9: 29 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#e5067ee9:
|
||||
({
|
||||
#d121c0bd: 54,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 },
|
||||
{ #c68b4ed6: 19 })
|
||||
},
|
||||
[
|
||||
<#0fb8fb71:
|
||||
({
|
||||
#d121c0bd: 55,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 18 },
|
||||
{ #c68b4ed6: 18 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 13 } },
|
||||
{
|
||||
#d9aa98d1: true,
|
||||
#1f65f619: 32,
|
||||
#31b87f71: "5"
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 29 } },
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#034d69b7>,
|
||||
#ec05e4a8: 45,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "A",
|
||||
#2cdb06fb: [ "A", "B" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 46 }
|
||||
}
|
||||
})>
|
||||
})>
|
||||
])>
|
||||
])>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 57, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
58,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/inheriting_constructor.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 13 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 96 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 97 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 98 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 99 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 100 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 101 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 102 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 103 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 104 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 105 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 106 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 107 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 108 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 109 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 110 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 111 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 112 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 113 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 114 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 115 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 116 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 117 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 118 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 119 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 120 }, { #c1127ea9: 59 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 121 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 122 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 123 }, 124)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 125 }, { #c1127ea9: 13, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 126 }, { #c1127ea9: 61, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 127 }, { #c1127ea9: 61 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 128 }, 129)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 130 },
|
||||
{ #cd26765d: { #c1127ea9: 128 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 8 }, 7)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 131 }, { #c1127ea9: 8 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 11 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 13 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 16 }, { #f9c96be9: { #c1127ea9: 59 } }, { })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 29 }, 28)>,
|
||||
<#0b08cd60: ({ #d121c0bd: 21 }, { #c1127ea9: 8, #ea1a680e: true })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 132 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 21 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 19 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 21 } ] })>,
|
||||
<#295746e6: ({ #d121c0bd: 25 }, { #c1127ea9: 8 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 133 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 25 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 23 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 25 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 36 }, { #f9c96be9: { #c1127ea9: 59 } }, { })>,
|
||||
<#0b08cd60: ({ #d121c0bd: 40 }, { #c1127ea9: 29, #ea1a680e: true })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 134 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 40 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 38 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 40 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 27 }, { #f9c96be9: { #c1127ea9: 59 } }, { })>,
|
||||
<#295746e6: ({ #d121c0bd: 44 }, { #c1127ea9: 29 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 135 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 44 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 42 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 44 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 51 }, { #f9c96be9: { #c1127ea9: 13 } }, { })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 136 }, { #c1127ea9: 127 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 137 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 13 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 46 },
|
||||
{ #f9c96be9: { #c1127ea9: 59 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 13 } ] })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 138 }, { #fcd148e8: 117 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 139 }, { #c1127ea9: 138 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 140, #26f32be5: 139 },
|
||||
{ #0b680f7d: { #c1127ea9: 139 }, #c3687459: 141 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 58, #26f32be5: 139 },
|
||||
{ #0b680f7d: { #c1127ea9: 140 }, #c3687459: 57 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,211 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/materialize_temporary.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c68b4ed6: 16 })
|
||||
},
|
||||
{ #c8ff724b: "r", #2cdb06fb: [ "r" ] },
|
||||
{ #c1127ea9: 8 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#dd3d1991: true,
|
||||
#fe93c404:
|
||||
<#d0cddcea:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419: ({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#c27b9a39:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419: ({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[
|
||||
<#d1b36d29:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 16 }, { #c68b4ed6: 16 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 13 } },
|
||||
"1")>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 14, #ea1a680e: true }
|
||||
},
|
||||
{ #c91e0a14: <#0da6788d>, #fa1a3bd3: [] })>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 14, #ea1a680e: true },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154: <#004196c7>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: { #c8ff724b: "r", #2cdb06fb: [ "r" ] },
|
||||
#30e4876a: { #c1127ea9: 8 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 14, #ea1a680e: true },
|
||||
#0e89e422: <#28055b85>
|
||||
},
|
||||
{ })>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 15, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
16,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/materialize_temporary.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 19 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 14 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 13 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 70 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 71 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 72 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 73 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 77 }, { #c1127ea9: 17 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 80 }, 81)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 82 }, { #c1127ea9: 14, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 83 }, { #c1127ea9: 19, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 84 }, { #c1127ea9: 19 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 85 }, 86)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 87 },
|
||||
{ #cd26765d: { #c1127ea9: 85 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#0b08cd60: ({ #d121c0bd: 8 }, { #c1127ea9: 14, #ea1a680e: true })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 88 }, { #fcd148e8: 74 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 89 }, { #c1127ea9: 88 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 90, #26f32be5: 89 },
|
||||
{ #0b680f7d: { #c1127ea9: 89 }, #c3687459: 91 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 16, #26f32be5: 89 },
|
||||
{ #0b680f7d: { #c1127ea9: 90 }, #c3687459: 15 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,242 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#da76a085:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/namespace_decl.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 15, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "Q", #2cdb06fb: [ "Q" ] },
|
||||
[
|
||||
<#da76a085:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#21793419:
|
||||
({ #c7b317f4: 8, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 9, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "V", #2cdb06fb: [ "V", "Q" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#da76a085:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 11, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "V", #2cdb06fb: [ "V", "Q" ] },
|
||||
[],
|
||||
{ },
|
||||
{
|
||||
#caa189ed: {
|
||||
#c709e154: <#09c0ca7b>,
|
||||
#ec05e4a8: 8,
|
||||
#c8ff724b: { #c8ff724b: "V", #2cdb06fb: [ "V", "Q" ] }
|
||||
}
|
||||
})>,
|
||||
<#da76a085:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 14, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "I", #2cdb06fb: [ "I", "Q" ] },
|
||||
[
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#21793419:
|
||||
({ #c7b317f4: 13, #c68b4ed6: 1 }, { #c68b4ed6: 5 })
|
||||
},
|
||||
{ #c8ff724b: "i", #2cdb06fb: [ "i", "Q" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{ #ccd69858: true })>
|
||||
],
|
||||
{ },
|
||||
{ #3e64314e: true })>
|
||||
],
|
||||
{ },
|
||||
{ })>,
|
||||
<#da76a085:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419:
|
||||
({ #c7b317f4: 17, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 19, #c68b4ed6: 1 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "",
|
||||
#2cdb06fb: [ "anonymous_namespace_tests/namespace_decl.cpp" ]
|
||||
},
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#c7bdbc95:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419: ({ #c7b317f4: 17, #c68b4ed6: 11 }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{
|
||||
#c8ff724b: "<using-directive>",
|
||||
#2cdb06fb: [ "<using-directive>" ]
|
||||
},
|
||||
{
|
||||
#309827d0: { #c68b4ed6: 11 },
|
||||
#fa5a1379: { },
|
||||
#d15fe800: [],
|
||||
#0781349f: {
|
||||
#c709e154: <#09c0ca7b>,
|
||||
#ec05e4a8: 13,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "",
|
||||
#2cdb06fb: [ "anonymous_namespace_tests/namespace_decl.cpp" ]
|
||||
}
|
||||
}
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 15, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
16,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/namespace_decl.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 19 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 12 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 71 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 72 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 73 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 74 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 78 }, { #c1127ea9: 17 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 81 }, 82)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 83 }, { #c1127ea9: 12, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 84 }, { #c1127ea9: 19, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 85 }, { #c1127ea9: 19 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 86 }, 87)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 88 },
|
||||
{ #cd26765d: { #c1127ea9: 86 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#0098a8c5: ({ #d121c0bd: 89 }, { #fcd148e8: 75 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 90 }, { #c1127ea9: 89 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 91, #26f32be5: 90 },
|
||||
{ #0b680f7d: { #c1127ea9: 90 }, #c3687459: 92 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 16, #26f32be5: 90 },
|
||||
{ #0b680f7d: { #c1127ea9: 91 }, #c3687459: 15 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,285 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/no_except_expr.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c68b4ed6: 27 }),
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "no_throw", #2cdb06fb: [ "no_throw" ] },
|
||||
{ #c1127ea9: 8 },
|
||||
{
|
||||
#d2e9b40c: "17033017651186285990",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 7,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#21793419: ({ #c68b4ed6: 26 }, { #c68b4ed6: 27 })
|
||||
},
|
||||
[])>
|
||||
})>,
|
||||
<#21116177:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#21793419: ({ #c68b4ed6: 28 }, { #c68b4ed6: 28 })
|
||||
})>,
|
||||
<#f173dfc2:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#21793419: ({ #c7b317f4: 9, #c68b4ed6: 1 }, { #c68b4ed6: 43 })
|
||||
},
|
||||
{ #c8ff724b: "main", #2cdb06fb: [ "main" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 11,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419: ({ #c68b4ed6: 12 }, { #c68b4ed6: 43 })
|
||||
},
|
||||
[
|
||||
<#df3bdb38:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419: ({ #c68b4ed6: 14 }, { #c68b4ed6: 40 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 21 }, { #c68b4ed6: 40 })
|
||||
},
|
||||
[
|
||||
<#d1cde112:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 21 }, { #c68b4ed6: 40 })
|
||||
},
|
||||
[
|
||||
<#c59ea513:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 30 },
|
||||
{ #c68b4ed6: 39 })
|
||||
},
|
||||
[
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 30 },
|
||||
{ #c68b4ed6: 30 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 30 },
|
||||
{ #c68b4ed6: 30 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#ee046738>,
|
||||
#ec05e4a8: 7,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"no_throw",
|
||||
#2cdb06fb: [
|
||||
"no_throw"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9: 8
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 20
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14: <#210490b0>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 21 } })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 22 } },
|
||||
{ #31b87f71: true })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 23 } },
|
||||
{ #c91e0a14: <#2677d46b>, #fa1a3bd3: [] })>
|
||||
])>
|
||||
])>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 24, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
25,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/no_except_expr.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 78 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 79 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 80 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 81 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 85 }, { #c1127ea9: 21 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 88 }, 89)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 90 }, { #c1127ea9: 23, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 91 }, { #c1127ea9: 26, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 92 }, { #c1127ea9: 26 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 93 }, 94)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 95 },
|
||||
{ #cd26765d: { #c1127ea9: 93 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 96 }, { #f9c96be9: { #c1127ea9: 21 } }, { })>,
|
||||
<#26796f6a: ({ #d121c0bd: 8 }, { #f9c96be9: { #c1127ea9: 21 } }, { })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 12 }, { #f9c96be9: { #c1127ea9: 23 } }, { })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 97 }, { #c1127ea9: 92 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 98 }, { #c1127ea9: 96 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 20 }, { #c1127ea9: 8 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 99 }, { #fcd148e8: 82 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 100 }, { #c1127ea9: 99 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 101, #26f32be5: 100 },
|
||||
{ #0b680f7d: { #c1127ea9: 100 }, #c3687459: 102 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 25, #26f32be5: 100 },
|
||||
{ #0b680f7d: { #c1127ea9: 101 }, #c3687459: 24 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,193 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "SEL", #2cdb06fb: [ "SEL" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "id", #2cdb06fb: [ "id" ] },
|
||||
6,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 7, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "Class", #2cdb06fb: [ "Class" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#f9005968: 1,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "Protocol", #2cdb06fb: [ "Protocol" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 9, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 10, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 11, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#c589b11c:
|
||||
({
|
||||
#d121c0bd: 12,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/objcpp_template_unboxing.mm",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 10, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "box", #2cdb06fb: [ "box" ] },
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 13, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
14,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/objcpp_template_unboxing.mm",
|
||||
#e52854e9: <#20cf8e89>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 15 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 16 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 18 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 19 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 20 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 21 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 22 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 23 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 24 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 26 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 27 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 70 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 71 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 72 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 73 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 77 }, { #c1127ea9: 15 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#2fe155d3>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 80 }, { #c1127ea9: 76 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 81 }, { #fcd148e8: 74 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 82 }, { #c1127ea9: 81 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 83 }, { #fcd148e8: 75 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 84 }, { #c1127ea9: 83 })>,
|
||||
<#2374f4e7: ({ #d121c0bd: 85 }, 8)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 86 }, 87)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 88 }, { #c1127ea9: 20, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 89 }, { #c1127ea9: 17, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 90 }, { #c1127ea9: 17 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 91 }, 92)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 93 },
|
||||
{ #cd26765d: { #c1127ea9: 91 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#f3f3711a: ({ #d121c0bd: 94 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 95 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 96 },
|
||||
{ #f9c96be9: { #c1127ea9: 77 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 94 } ] })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 97 },
|
||||
{ #f9c96be9: { #c1127ea9: 77 } },
|
||||
{ #08ec7593: [ { #c1127ea9: 95 } ] })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 6, #26f32be5: 82 },
|
||||
{ #0b680f7d: { #c1127ea9: 82 }, #c3687459: 5 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 14, #26f32be5: 82 },
|
||||
{ #0b680f7d: { #c1127ea9: 6 }, #c3687459: 13 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,876 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "SEL", #2cdb06fb: [ "SEL" ] },
|
||||
5,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({
|
||||
#d121c0bd: 6,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "id", #2cdb06fb: [ "id" ] },
|
||||
7,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 8, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "Class", #2cdb06fb: [ "Class" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 9,
|
||||
#f9005968: 1,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "Protocol", #2cdb06fb: [ "Protocol" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 10, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 11, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 12, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c3bbce7c: "tests/optional.m", #c7b317f4: 8, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 9, #c68b4ed6: 2 })
|
||||
},
|
||||
{ #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#e1b0618e:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 11, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 12, #c68b4ed6: 2 })
|
||||
},
|
||||
{ #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] },
|
||||
[],
|
||||
{ },
|
||||
{ })>,
|
||||
<#e1b0618e:
|
||||
({
|
||||
#d121c0bd: 15,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 17, #c68b4ed6: 2 })
|
||||
},
|
||||
{ #c8ff724b: "BarDelegate", #2cdb06fb: [ "BarDelegate" ] },
|
||||
[
|
||||
<#3ccd3797:
|
||||
({
|
||||
#d121c0bd: 16,
|
||||
#f9005968: 15,
|
||||
#21793419:
|
||||
({ #c7b317f4: 16, #c68b4ed6: 1 }, { #c68b4ed6: 25 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "optionalFunction",
|
||||
#2cdb06fb: [ "optionalFunction", "BarDelegate" ]
|
||||
},
|
||||
{
|
||||
#3ba2c7f6: true,
|
||||
#137b649c: { #c1127ea9: 17 },
|
||||
#22b27dd5: true,
|
||||
#d2e9b40c: "-[BarDelegate optionalFunction]"
|
||||
})>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#d688371b: [
|
||||
{
|
||||
#c709e154: <#cd511304>,
|
||||
#ec05e4a8: 14,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "NSObject",
|
||||
#2cdb06fb: [ "NSObject" ]
|
||||
}
|
||||
}
|
||||
]
|
||||
})>,
|
||||
<#18d25297:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 19, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 21, #c68b4ed6: 2 })
|
||||
},
|
||||
{ #c8ff724b: "Bar", #2cdb06fb: [ "Bar" ] },
|
||||
[
|
||||
<#c5b2960b:
|
||||
({
|
||||
#d121c0bd: 19,
|
||||
#f9005968: 18,
|
||||
#21793419:
|
||||
({ #c7b317f4: 20, #c68b4ed6: 1 }, { #c68b4ed6: 46 })
|
||||
},
|
||||
{ #c8ff724b: "delegate", #2cdb06fb: [ "delegate", "Bar" ] },
|
||||
{
|
||||
#30e4876a: { #c1127ea9: 20 },
|
||||
#3106f0d5: {
|
||||
#c709e154: <#e655f08d>,
|
||||
#ec05e4a8: 21,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "delegate",
|
||||
#2cdb06fb: [ "delegate", "Bar" ]
|
||||
}
|
||||
},
|
||||
#f60cd2e1: {
|
||||
#c709e154: <#e655f08d>,
|
||||
#ec05e4a8: 22,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "setDelegate:",
|
||||
#2cdb06fb: [ "setDelegate:", "Bar" ]
|
||||
}
|
||||
},
|
||||
#2e0d396b: {
|
||||
#c709e154: <#38103cca>,
|
||||
#ec05e4a8: 23,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "_delegate",
|
||||
#2cdb06fb: [ "_delegate", "Bar" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
},
|
||||
#e42793c1: [
|
||||
<#009aba4f>, <#2fe629a9>, <#cd718b98>, <#374fb956>
|
||||
]
|
||||
})>,
|
||||
<#3ccd3797:
|
||||
({
|
||||
#d121c0bd: 21,
|
||||
#f9005968: 18,
|
||||
#21793419: ({ #c68b4ed6: 46 }, { #c68b4ed6: 46 }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "delegate", #2cdb06fb: [ "delegate", "Bar" ] },
|
||||
{
|
||||
#3ba2c7f6: true,
|
||||
#137b649c: { #c1127ea9: 20 },
|
||||
#001e675c: true,
|
||||
#2c8fcfd4: {
|
||||
#c709e154: <#f9260501>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "delegate",
|
||||
#2cdb06fb: [ "delegate", "Bar" ]
|
||||
}
|
||||
},
|
||||
#28dcb2c4: [
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "self", #2cdb06fb: [ "self" ] },
|
||||
{ #c1127ea9: 25, #ea1a680e: true },
|
||||
{ })>,
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 26,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "_cmd", #2cdb06fb: [ "_cmd" ] },
|
||||
{ #c1127ea9: 5 },
|
||||
{ })>
|
||||
],
|
||||
#d2e9b40c: "-[Bar delegate]"
|
||||
})>,
|
||||
<#3ccd3797:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#f9005968: 18,
|
||||
#21793419: ({ #c68b4ed6: 46 }, { #c68b4ed6: 46 }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{
|
||||
#c8ff724b: "setDelegate:",
|
||||
#2cdb06fb: [ "setDelegate:", "Bar" ]
|
||||
},
|
||||
{
|
||||
#3ba2c7f6: true,
|
||||
#137b649c: { #c1127ea9: 17 },
|
||||
#001e675c: true,
|
||||
#2c8fcfd4: {
|
||||
#c709e154: <#f9260501>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "delegate",
|
||||
#2cdb06fb: [ "delegate", "Bar" ]
|
||||
}
|
||||
},
|
||||
#d17ebeaa: [
|
||||
<#fd75cc45:
|
||||
({
|
||||
#d121c0bd: 27,
|
||||
#21793419: ({ #c68b4ed6: 46 }, { #c68b4ed6: 46 })
|
||||
},
|
||||
{ #c8ff724b: "delegate", #2cdb06fb: [ "delegate" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{ #0370b1b2: 0 })>
|
||||
],
|
||||
#28dcb2c4: [
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 28,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "self", #2cdb06fb: [ "self" ] },
|
||||
{ #c1127ea9: 25, #ea1a680e: true },
|
||||
{ })>,
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 29,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "_cmd", #2cdb06fb: [ "_cmd" ] },
|
||||
{ #c1127ea9: 5 },
|
||||
{ })>
|
||||
],
|
||||
#d2e9b40c: "-[Bar setDelegate:]"
|
||||
})>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#04c0017b: {
|
||||
#c709e154: <#3cf18b8d>,
|
||||
#ec05e4a8: 13,
|
||||
#c8ff724b: { #c8ff724b: "NSObject", #2cdb06fb: [ "NSObject" ] }
|
||||
},
|
||||
#d32dd232: {
|
||||
#c709e154: <#c37c57de>,
|
||||
#ec05e4a8: 30,
|
||||
#c8ff724b: { #c8ff724b: "Bar", #2cdb06fb: [ "Bar" ] }
|
||||
}
|
||||
})>,
|
||||
<#0e281b68:
|
||||
({
|
||||
#d121c0bd: 30,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 23, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 28, #c68b4ed6: 1 })
|
||||
},
|
||||
{ #c8ff724b: "Bar", #2cdb06fb: [ "Bar" ] },
|
||||
[
|
||||
<#3ccd3797:
|
||||
({
|
||||
#d121c0bd: 31,
|
||||
#f9005968: 30,
|
||||
#21793419:
|
||||
({ #c7b317f4: 24, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 26, #c68b4ed6: 1 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "unsafeAction",
|
||||
#2cdb06fb: [ "unsafeAction", "Bar" ]
|
||||
},
|
||||
{
|
||||
#3ba2c7f6: true,
|
||||
#137b649c: { #c1127ea9: 17 },
|
||||
#28dcb2c4: [
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 32,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true,
|
||||
#0a16e1f2: true,
|
||||
#d3368c8a: true
|
||||
},
|
||||
{ #c8ff724b: "self", #2cdb06fb: [ "self" ] },
|
||||
{ #c1127ea9: 25, #ea1a680e: true },
|
||||
{ })>,
|
||||
<#d0d84992:
|
||||
({
|
||||
#d121c0bd: 33,
|
||||
#21793419: ({ }, { }),
|
||||
#eb8a1f5a: true
|
||||
},
|
||||
{ #c8ff724b: "_cmd", #2cdb06fb: [ "_cmd" ] },
|
||||
{ #c1127ea9: 5 },
|
||||
{ })>
|
||||
],
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 34,
|
||||
#21793419:
|
||||
({ #c7b317f4: 24, #c68b4ed6: 22 },
|
||||
{ #c7b317f4: 26, #c68b4ed6: 1 })
|
||||
},
|
||||
[
|
||||
<#d0cddcea:
|
||||
({
|
||||
#d121c0bd: 35,
|
||||
#21793419:
|
||||
({ #c7b317f4: 25, #c68b4ed6: 3 },
|
||||
{ #c68b4ed6: 34 })
|
||||
},
|
||||
[
|
||||
<#f104c570:
|
||||
({
|
||||
#d121c0bd: 36,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 3 }, { #c68b4ed6: 34 })
|
||||
},
|
||||
[
|
||||
<#26afa8d2:
|
||||
({
|
||||
#d121c0bd: 37,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 4 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[
|
||||
<#e9c8dd27:
|
||||
({
|
||||
#d121c0bd: 38,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 4 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[
|
||||
<#0d679c05:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 4 },
|
||||
{ #c68b4ed6: 4 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 25
|
||||
}
|
||||
},
|
||||
{
|
||||
#12076e59:
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 40,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd:
|
||||
41,
|
||||
#21793419:
|
||||
(
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#c6dba908>,
|
||||
#ec05e4a8:
|
||||
32,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"self",
|
||||
#2cdb06fb: [
|
||||
"self"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14:
|
||||
<#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 42
|
||||
},
|
||||
#0e89e422: <#28055b85>,
|
||||
#d61caa14: <#f9260501>
|
||||
},
|
||||
{
|
||||
#c709e154:
|
||||
<#fac503de: {
|
||||
#c709e154: <#f9260501>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"delegate",
|
||||
#2cdb06fb: [
|
||||
"delegate", "Bar"
|
||||
]
|
||||
}
|
||||
}>,
|
||||
#2827bd9b: true
|
||||
})>,
|
||||
<#0d679c05:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 4 },
|
||||
{ #c68b4ed6: 4 })
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 25
|
||||
}
|
||||
},
|
||||
{
|
||||
#12076e59:
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 40,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 4 },
|
||||
{ #c68b4ed6: 4 })
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd: 41,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#c6dba908>,
|
||||
#ec05e4a8:
|
||||
32,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"self",
|
||||
#2cdb06fb: [
|
||||
"self"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 25
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14:
|
||||
<#f7495e1f>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
})>,
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 43,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 9 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[
|
||||
<#f104c570:
|
||||
({
|
||||
#d121c0bd: 44,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 9 },
|
||||
{ #c68b4ed6: 9 })
|
||||
},
|
||||
[
|
||||
<#0d679c05:
|
||||
({
|
||||
#d121c0bd: 39,
|
||||
#21793419:
|
||||
({
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 25
|
||||
}
|
||||
},
|
||||
{
|
||||
#12076e59:
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd:
|
||||
40,
|
||||
#21793419:
|
||||
(
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[
|
||||
<#e9db58be:
|
||||
({
|
||||
#d121c0bd:
|
||||
41,
|
||||
#21793419:
|
||||
(
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
},
|
||||
{
|
||||
#c68b4ed6:
|
||||
4
|
||||
})
|
||||
},
|
||||
[],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
},
|
||||
#0e89e422:
|
||||
<#28055b85>
|
||||
},
|
||||
{
|
||||
#c369ebbe: {
|
||||
#c709e154:
|
||||
<#c6dba908>,
|
||||
#ec05e4a8:
|
||||
32,
|
||||
#c8ff724b: {
|
||||
#c8ff724b:
|
||||
"self",
|
||||
#2cdb06fb: [
|
||||
"self"
|
||||
]
|
||||
},
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25,
|
||||
#ea1a680e:
|
||||
true
|
||||
}
|
||||
}
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9:
|
||||
25
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14:
|
||||
<#f7495e1f>,
|
||||
#fa1a3bd3:
|
||||
[]
|
||||
})>
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 20
|
||||
}
|
||||
},
|
||||
{
|
||||
#316d331f: "delegate",
|
||||
#ec05e4a8: 21
|
||||
})>
|
||||
],
|
||||
{
|
||||
#30e4876a: {
|
||||
#c1127ea9: 20
|
||||
}
|
||||
},
|
||||
{
|
||||
#c91e0a14: <#e02d4a65>,
|
||||
#fa1a3bd3: []
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 20 } })>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 17 } },
|
||||
{
|
||||
#316d331f: "optionalFunction",
|
||||
#ec05e4a8: 16
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 17 } },
|
||||
{ })>
|
||||
])>,
|
||||
#d2e9b40c: "-[Bar unsafeAction]"
|
||||
})>,
|
||||
<#070ee654:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#f9005968: 30,
|
||||
#21793419:
|
||||
({ #c7b317f4: 20, #c68b4ed6: 46 }, { #c68b4ed6: 46 })
|
||||
},
|
||||
{ #c8ff724b: "_delegate", #2cdb06fb: [ "_delegate", "Bar" ] },
|
||||
{ #c1127ea9: 20 },
|
||||
{ },
|
||||
{ #015a971f: true, #f9049e82: <#d6c054e3> })>,
|
||||
<#c1a9158b:
|
||||
({ #d121c0bd: 45, #21793419: ({ }, { #c68b4ed6: 46 }) },
|
||||
{
|
||||
#d32dd232: <#009015ca>,
|
||||
#2c8fcfd4: {
|
||||
#c709e154: <#f9260501>,
|
||||
#ec05e4a8: 19,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "delegate",
|
||||
#2cdb06fb: [ "delegate", "Bar" ]
|
||||
}
|
||||
},
|
||||
#2e0d396b: {
|
||||
#c709e154: <#38103cca>,
|
||||
#ec05e4a8: 23,
|
||||
#c8ff724b: {
|
||||
#c8ff724b: "_delegate",
|
||||
#2cdb06fb: [ "_delegate", "Bar" ]
|
||||
},
|
||||
#30e4876a: { #c1127ea9: 20 }
|
||||
}
|
||||
})>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#2ec29bb2: {
|
||||
#c709e154: <#3cf18b8d>,
|
||||
#ec05e4a8: 18,
|
||||
#c8ff724b: { #c8ff724b: "Bar", #2cdb06fb: [ "Bar" ] }
|
||||
}
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 46, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
47,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/optional.m",
|
||||
#e52854e9: <#3ff69d49>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 17 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 80 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 81 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 82 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 83 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 87 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 90 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 91 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 92 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 93 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 94 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 95 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 96 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 97 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 98 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 99 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 100 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 101 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 102 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 103 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 104 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 105 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 106 }, { #c1127ea9: 17 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 107 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 108 }, <#2fe155d3>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 109 }, { #c1127ea9: 105 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 110 }, { #fcd148e8: 103 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 111 }, { #c1127ea9: 110 })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 112 }, { #fcd148e8: 104 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 113 }, { #c1127ea9: 112 })>,
|
||||
<#2374f4e7: ({ #d121c0bd: 114 }, 9)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 115 }, 116)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 117 }, { #c1127ea9: 52, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 118 }, { #c1127ea9: 49, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 119 }, { #c1127ea9: 49 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 120 }, 121)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 122 },
|
||||
{ #cd26765d: { #c1127ea9: 120 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#2374f4e7: ({ #d121c0bd: 123 }, 13)>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 7, #26f32be5: 111 },
|
||||
{ #0b680f7d: { #c1127ea9: 111 }, #c3687459: 6 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 47, #26f32be5: 111 },
|
||||
{ #0b680f7d: { #c1127ea9: 7 }, #c3687459: 46 })>,
|
||||
<#2374f4e7: ({ #d121c0bd: 124 }, 18)>,
|
||||
<#0098a8c5:
|
||||
({ #d121c0bd: 125 }, { #fcd148e8: 103, #0b037c51: [ 15 ] })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 20 }, { #c1127ea9: 125 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 25 }, { #c1127ea9: 124 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 5, #26f32be5: 109 },
|
||||
{ #0b680f7d: { #c1127ea9: 109 }, #c3687459: 4 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
@ -0,0 +1,314 @@
|
||||
<#032016ff:
|
||||
({ #d121c0bd: 1, #21793419: ({ }, { }) },
|
||||
[
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 2, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__int128_t", #2cdb06fb: [ "__int128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 3, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "__uint128_t", #2cdb06fb: [ "__uint128_t" ] },
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 4, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__NSConstantString",
|
||||
#2cdb06fb: [ "__NSConstantString" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 5, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_ms_va_list",
|
||||
#2cdb06fb: [ "__builtin_ms_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 6, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{
|
||||
#c8ff724b: "__builtin_va_list",
|
||||
#2cdb06fb: [ "__builtin_va_list" ]
|
||||
},
|
||||
0,
|
||||
{ })>,
|
||||
<#37b901fc:
|
||||
({
|
||||
#d121c0bd: 7,
|
||||
#21793419:
|
||||
({
|
||||
#c3bbce7c: "tests/sizeof_static_evaluation.cpp",
|
||||
#c7b317f4: 7,
|
||||
#c68b4ed6: 1
|
||||
},
|
||||
{ #c7b317f4: 8, #c68b4ed6: 7 })
|
||||
},
|
||||
{ #c8ff724b: "__foo", #2cdb06fb: [ "__foo" ] },
|
||||
{ })>,
|
||||
<#2339e324:
|
||||
({
|
||||
#d121c0bd: 8,
|
||||
#f9005968: 1,
|
||||
#21793419:
|
||||
({ #c7b317f4: 10, #c68b4ed6: 1 },
|
||||
{ #c7b317f4: 16, #c68b4ed6: 1 })
|
||||
},
|
||||
{
|
||||
#c8ff724b: "__foo",
|
||||
#2cdb06fb: [ "__foo<type-parameter-0-0, true>" ]
|
||||
},
|
||||
9,
|
||||
[
|
||||
<#f50d797e:
|
||||
({
|
||||
#d121c0bd: 10,
|
||||
#f9005968: 8,
|
||||
#21793419:
|
||||
({ #c7b317f4: 11, #c68b4ed6: 1 }, { #c68b4ed6: 7 }),
|
||||
#eb8a1f5a: true,
|
||||
#d3368c8a: true,
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{
|
||||
#c8ff724b: "__foo",
|
||||
#2cdb06fb: [ "__foo", "__foo<type-parameter-0-0, true>" ]
|
||||
},
|
||||
9,
|
||||
[],
|
||||
{ },
|
||||
<#01fae064>,
|
||||
{ #33244202: 0, #fd16bc2f: true },
|
||||
{ })>,
|
||||
<#fb87d624:
|
||||
({
|
||||
#d121c0bd: 11,
|
||||
#f9005968: 8,
|
||||
#21793419:
|
||||
({ #c7b317f4: 12, #c68b4ed6: 3 }, { #c68b4ed6: 19 }),
|
||||
#0b0695a4: <#d6c054e3>
|
||||
},
|
||||
{
|
||||
#c8ff724b: "x",
|
||||
#2cdb06fb: [ "x", "__foo<type-parameter-0-0, true>" ]
|
||||
},
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#fe93c404:
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 13,
|
||||
#21793419: ({ #c68b4ed6: 11 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
[
|
||||
<#ea792ce2:
|
||||
({
|
||||
#d121c0bd: 14,
|
||||
#21793419:
|
||||
({ #c68b4ed6: 11 }, { #c68b4ed6: 19 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#c709e154: <#f5a2cc58>,
|
||||
#30e4876a: { #c1127ea9: 16 }
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 12 } },
|
||||
{ #c91e0a14: <#2677d46b>, #fa1a3bd3: [] })>
|
||||
})>,
|
||||
<#1cd5be29:
|
||||
({
|
||||
#d121c0bd: 17,
|
||||
#21793419:
|
||||
({ #c7b317f4: 14, #c68b4ed6: 2 }, { #c68b4ed6: 8 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
})>,
|
||||
<#cc498dc1:
|
||||
({
|
||||
#d121c0bd: 18,
|
||||
#f9005968: 8,
|
||||
#21793419:
|
||||
({ #c7b317f4: 15, #c68b4ed6: 3 }, { #c68b4ed6: 11 }),
|
||||
#0b0695a4: <#1b87f4c9>
|
||||
},
|
||||
{
|
||||
#c8ff724b: "__foo<type-parameter-0-0, true>",
|
||||
#2cdb06fb: [
|
||||
"__foo<type-parameter-0-0, true>",
|
||||
"__foo<type-parameter-0-0, true>"
|
||||
]
|
||||
},
|
||||
{ #c1127ea9: 19 },
|
||||
{
|
||||
#d2e9b40c: "800005863435481739",
|
||||
#f1a45f0e: true,
|
||||
#ebe3c415: 18,
|
||||
#c11b7aa2:
|
||||
<#d394bb73:
|
||||
({
|
||||
#d121c0bd: 20,
|
||||
#21793419: ({ #c68b4ed6: 10 }, { #c68b4ed6: 11 })
|
||||
},
|
||||
[])>
|
||||
},
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
<#01fae064>,
|
||||
{ #33244202: 8, #1a9a7e84: true, #fd16bc2f: true },
|
||||
{ },
|
||||
"2204753185921246810",
|
||||
{
|
||||
#e43971cf: 7,
|
||||
#0de52551: [ <#37e21eda: { #c1127ea9: 21 }>, <#fae5d38c: "1"> ]
|
||||
})>,
|
||||
<#11c182d1:
|
||||
({
|
||||
#d121c0bd: 22,
|
||||
#21793419: ({ #c7b317f4: 18, #c68b4ed6: 1 }, { #c68b4ed6: 20 })
|
||||
},
|
||||
{ #c8ff724b: "y", #2cdb06fb: [ "y" ] },
|
||||
{ #c1127ea9: 12 },
|
||||
{
|
||||
#ccd69858: true,
|
||||
#fe93c404:
|
||||
<#c3b129f9:
|
||||
({
|
||||
#d121c0bd: 23,
|
||||
#21793419: ({ #c68b4ed6: 9 }, { #c68b4ed6: 20 })
|
||||
},
|
||||
[
|
||||
<#ea792ce2:
|
||||
({
|
||||
#d121c0bd: 24,
|
||||
#21793419: ({ #c68b4ed6: 9 }, { #c68b4ed6: 20 })
|
||||
},
|
||||
[],
|
||||
{ #30e4876a: { #c1127ea9: 15 } },
|
||||
{
|
||||
#c709e154: <#c2fc5e5f: 1>,
|
||||
#30e4876a: { #c1127ea9: 25 }
|
||||
})>
|
||||
],
|
||||
{ #30e4876a: { #c1127ea9: 12 } },
|
||||
{ #c91e0a14: <#2677d46b>, #fa1a3bd3: [] })>
|
||||
})>,
|
||||
<#0f3f4d35:
|
||||
({ #d121c0bd: 26, #21793419: ({ }, { }), #eb8a1f5a: true },
|
||||
{ #c8ff724b: "instancetype", #2cdb06fb: [ "instancetype" ] },
|
||||
27,
|
||||
{ })>
|
||||
],
|
||||
{ },
|
||||
{
|
||||
#e870593a: "tests/sizeof_static_evaluation.cpp",
|
||||
#e52854e9: <#1e1941e6>,
|
||||
#f81dea91: {
|
||||
#26452803: 8,
|
||||
#c674c89d: 16,
|
||||
#3569bf4a: 32,
|
||||
#d7cd079d: 64,
|
||||
#048ad2a1: 64
|
||||
},
|
||||
#1acb7079: [
|
||||
<#22d546dd: ({ #d121c0bd: 28 }, <#392cef74>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 29 }, <#2bf4b04a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 25 }, <#ec0a078a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 30 }, <#f6dab0c9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 31 }, <#0f54f45c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 12 }, <#0037c4cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 32 }, <#3290d19c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 33 }, <#fee0a138>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 34 }, <#1da7d9cb>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 35 }, <#0baa9fe7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 36 }, <#3866e79a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 15 }, <#23a02071>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 37 }, <#09087e8d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 38 }, <#15c4357c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 39 }, <#e75f9f31>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 40 }, <#c2f78dcd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 41 }, <#3726ba3b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 42 }, <#3759b761>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 43 }, <#ebd317dd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 44 }, <#2ec759b9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 45 }, <#284d329d>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 46 }, <#35acb472>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 47 }, <#2b1d0544>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 48 }, <#0106ffa8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 49 }, <#d6bc9d8a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 50 }, <#19b0df66>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 51 }, <#1336b84a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 52 }, <#20963a1f>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 53 }, <#16068af1>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 54 }, <#ebf08555>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 55 }, <#d78ceb63>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 56 }, <#dd2a33f3>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 57 }, <#ef62b1d7>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 58 }, <#0c8bf62c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 59 }, <#13391dca>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 60 }, <#ecc0d32e>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 61 }, <#c2767110>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 62 }, <#c813b9a0>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 63 }, <#da4c3784>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 64 }, <#f7757bd9>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 65 }, <#fe22a377>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 66 }, <#d7aa58db>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 67 }, <#d2f340c8>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 68 }, <#2193aedd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 69 }, <#0dd56321>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 70 }, <#d8e10c82>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 71 }, <#ec09df5b>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 72 }, <#ec09e115>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 73 }, <#c4f079df>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 74 }, <#1ee7219a>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 75 }, <#0d506118>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 76 }, <#dec9bcfd>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 77 }, <#f1f6e5a2>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 78 }, <#d935d0cf>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 79 }, <#d35a4eab>)>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 80 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 81 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 82 })>,
|
||||
<#2e6cf4ea: ({ #d121c0bd: 83 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 84 }, <#c9ba0f87>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 85 }, <#db21580c>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 86 }, <#391b1e6e>)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 87 }, { #c1127ea9: 28 })>,
|
||||
<#22d546dd: ({ #d121c0bd: 88 }, <#ea323187>)>,
|
||||
<#22d546dd: ({ #d121c0bd: 89 }, <#2fe155d3>)>,
|
||||
<#d80cb60b: ({ #d121c0bd: 90 }, 91)>,
|
||||
<#d3d219f7: ({ #d121c0bd: 92 }, { #c1127ea9: 12, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 93 }, { #c1127ea9: 25, #ea1a680e: true })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 94 }, { #c1127ea9: 25 })>,
|
||||
<#d80cb60b: ({ #d121c0bd: 95 }, 96)>,
|
||||
<#da0c5ecf:
|
||||
({ #d121c0bd: 97 },
|
||||
{ #cd26765d: { #c1127ea9: 95 }, #11302019: 24 },
|
||||
1)>,
|
||||
<#f3f3711a: ({ #d121c0bd: 21 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 98 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 99 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 100 })>,
|
||||
<#d49f978d: ({ #d121c0bd: 101 })>,
|
||||
<#f3f3711a: ({ #d121c0bd: 16 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 102 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 103 })>,
|
||||
<#d49f978d: ({ #d121c0bd: 9 })>,
|
||||
<#ece2635f: ({ #d121c0bd: 104 })>,
|
||||
<#d3d219f7: ({ #d121c0bd: 105 }, { #c1127ea9: 9 })>,
|
||||
<#26796f6a:
|
||||
({ #d121c0bd: 19 }, { #f9c96be9: { #c1127ea9: 28 } }, { })>,
|
||||
<#0098a8c5: ({ #d121c0bd: 106 }, { #fcd148e8: 84 })>,
|
||||
<#2e3d736c: ({ #d121c0bd: 107 }, { #c1127ea9: 106 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 108, #26f32be5: 107 },
|
||||
{ #0b680f7d: { #c1127ea9: 107 }, #c3687459: 109 })>,
|
||||
<#19e1ef85:
|
||||
({ #d121c0bd: 27, #26f32be5: 107 },
|
||||
{ #0b680f7d: { #c1127ea9: 108 }, #c3687459: 26 })>,
|
||||
<#cfc9a9b2: ({ #d121c0bd: 0 })>
|
||||
]
|
||||
})>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue