From 967be9e750221ab2ab783f95df79bb26d290a45e Mon Sep 17 00:00:00 2001 From: Martial Simon Date: Mon, 15 Sep 2025 01:07:58 +0200 Subject: add: added projects --- tiger-compiler/src/assert/binder.cc | 12 + tiger-compiler/src/assert/binder.hh | 22 + tiger-compiler/src/assert/desugar-visitor.cc | 33 + tiger-compiler/src/assert/desugar-visitor.hh | 42 + tiger-compiler/src/assert/desugar-visitor.hxx | 39 + tiger-compiler/src/assert/libassert.cc | 36 + tiger-compiler/src/assert/libassert.hh | 79 ++ tiger-compiler/src/assert/libassert.hxx | 45 + tiger-compiler/src/assert/local.am | 17 + tiger-compiler/src/assert/renamer.cc | 18 + tiger-compiler/src/assert/renamer.hh | 30 + tiger-compiler/src/assert/tasks.cc | 53 + tiger-compiler/src/assert/tasks.hh | 59 + tiger-compiler/src/assert/type-checker.cc | 21 + tiger-compiler/src/assert/type-checker.hh | 30 + tiger-compiler/src/ast/README.txt | 66 ++ tiger-compiler/src/ast/all.hh | 51 + tiger-compiler/src/ast/array-exp.cc | 31 + tiger-compiler/src/ast/array-exp.hh | 60 ++ tiger-compiler/src/ast/array-exp.hxx | 22 + tiger-compiler/src/ast/array-ty.cc | 21 + tiger-compiler/src/ast/array-ty.hh | 48 + tiger-compiler/src/ast/array-ty.hxx | 16 + tiger-compiler/src/ast/assert-exp.cc | 24 + tiger-compiler/src/ast/assert-exp.hh | 42 + tiger-compiler/src/ast/assert-exp.hxx | 14 + tiger-compiler/src/ast/assert-visitor.hh | 51 + tiger-compiler/src/ast/assert-visitor.hxx | 32 + tiger-compiler/src/ast/assign-exp.cc | 26 + tiger-compiler/src/ast/assign-exp.hh | 54 + tiger-compiler/src/ast/assign-exp.hxx | 19 + tiger-compiler/src/ast/ast-nodes.mk | 41 + tiger-compiler/src/ast/ast.cc | 15 + tiger-compiler/src/ast/ast.hh | 48 + tiger-compiler/src/ast/ast.hxx | 18 + tiger-compiler/src/ast/break-exp.cc | 18 + tiger-compiler/src/ast/break-exp.hh | 49 + tiger-compiler/src/ast/break-exp.hxx | 21 + tiger-compiler/src/ast/call-exp.cc | 27 + tiger-compiler/src/ast/call-exp.hh | 64 ++ tiger-compiler/src/ast/call-exp.hxx | 25 + tiger-compiler/src/ast/cast-exp.cc | 26 + tiger-compiler/src/ast/cast-exp.hh | 62 ++ tiger-compiler/src/ast/cast-exp.hxx | 19 + tiger-compiler/src/ast/chunk-interface.hh | 25 + tiger-compiler/src/ast/chunk-interface.hxx | 16 + tiger-compiler/src/ast/chunk-list.cc | 58 + tiger-compiler/src/ast/chunk-list.hh | 80 ++ tiger-compiler/src/ast/chunk-list.hxx | 19 + tiger-compiler/src/ast/chunk.hh | 139 +++ tiger-compiler/src/ast/chunk.hxx | 118 ++ tiger-compiler/src/ast/class-ty.cc | 22 + tiger-compiler/src/ast/class-ty.hh | 55 + tiger-compiler/src/ast/class-ty.hxx | 19 + tiger-compiler/src/ast/dec.cc | 17 + tiger-compiler/src/ast/dec.hh | 50 + tiger-compiler/src/ast/dec.hxx | 15 + tiger-compiler/src/ast/default-visitor.hh | 151 +++ tiger-compiler/src/ast/default-visitor.hxx | 247 +++++ tiger-compiler/src/ast/dumper-dot.cc | 438 ++++++++ tiger-compiler/src/ast/dumper-dot.hh | 112 ++ tiger-compiler/src/ast/dumper-dot.hxx | 214 ++++ tiger-compiler/src/ast/escapable.cc | 14 + tiger-compiler/src/ast/escapable.hh | 30 + tiger-compiler/src/ast/escapable.hxx | 16 + tiger-compiler/src/ast/exp.cc | 16 + tiger-compiler/src/ast/exp.hh | 43 + tiger-compiler/src/ast/exp.hxx | 11 + tiger-compiler/src/ast/field-init.cc | 22 + tiger-compiler/src/ast/field-init.hh | 55 + tiger-compiler/src/ast/field-init.hxx | 19 + tiger-compiler/src/ast/field-var.cc | 22 + tiger-compiler/src/ast/field-var.hh | 60 ++ tiger-compiler/src/ast/field-var.hxx | 22 + tiger-compiler/src/ast/field.cc | 22 + tiger-compiler/src/ast/field.hh | 55 + tiger-compiler/src/ast/field.hxx | 19 + tiger-compiler/src/ast/for-exp.cc | 28 + tiger-compiler/src/ast/for-exp.hh | 60 ++ tiger-compiler/src/ast/for-exp.hxx | 22 + tiger-compiler/src/ast/function-dec.cc | 33 + tiger-compiler/src/ast/function-dec.hh | 72 ++ tiger-compiler/src/ast/function-dec.hxx | 23 + tiger-compiler/src/ast/fwd.hh | 80 ++ tiger-compiler/src/ast/if-exp.cc | 31 + tiger-compiler/src/ast/if-exp.hh | 71 ++ tiger-compiler/src/ast/if-exp.hxx | 22 + tiger-compiler/src/ast/int-exp.cc | 19 + tiger-compiler/src/ast/int-exp.hh | 44 + tiger-compiler/src/ast/int-exp.hxx | 15 + tiger-compiler/src/ast/let-exp.cc | 26 + tiger-compiler/src/ast/let-exp.hh | 55 + tiger-compiler/src/ast/let-exp.hxx | 19 + tiger-compiler/src/ast/libast.cc | 44 + tiger-compiler/src/ast/libast.hh | 26 + tiger-compiler/src/ast/local.am | 30 + tiger-compiler/src/ast/location.hh | 14 + tiger-compiler/src/ast/method-call-exp.cc | 24 + tiger-compiler/src/ast/method-call-exp.hh | 70 ++ tiger-compiler/src/ast/method-call-exp.hxx | 21 + tiger-compiler/src/ast/method-dec.cc | 22 + tiger-compiler/src/ast/method-dec.hh | 45 + tiger-compiler/src/ast/method-dec.hxx | 11 + tiger-compiler/src/ast/name-ty.cc | 19 + tiger-compiler/src/ast/name-ty.hh | 56 + tiger-compiler/src/ast/name-ty.hxx | 20 + tiger-compiler/src/ast/nil-exp.cc | 19 + tiger-compiler/src/ast/nil-exp.hh | 37 + tiger-compiler/src/ast/nil-exp.hxx | 11 + tiger-compiler/src/ast/non-assert-visitor.hh | 51 + tiger-compiler/src/ast/non-assert-visitor.hxx | 34 + tiger-compiler/src/ast/non-object-visitor.hh | 92 ++ tiger-compiler/src/ast/non-object-visitor.hxx | 62 ++ tiger-compiler/src/ast/object-exp.cc | 19 + tiger-compiler/src/ast/object-exp.hh | 47 + tiger-compiler/src/ast/object-exp.hxx | 16 + tiger-compiler/src/ast/object-visitor.hh | 89 ++ tiger-compiler/src/ast/object-visitor.hxx | 69 ++ tiger-compiler/src/ast/op-exp.cc | 42 + tiger-compiler/src/ast/op-exp.hh | 80 ++ tiger-compiler/src/ast/op-exp.hxx | 21 + tiger-compiler/src/ast/pretty-printer.cc | 419 ++++++++ tiger-compiler/src/ast/pretty-printer.hh | 96 ++ tiger-compiler/src/ast/record-exp.cc | 30 + tiger-compiler/src/ast/record-exp.hh | 57 + tiger-compiler/src/ast/record-exp.hxx | 22 + tiger-compiler/src/ast/record-ty.cc | 26 + tiger-compiler/src/ast/record-ty.hh | 49 + tiger-compiler/src/ast/record-ty.hxx | 16 + tiger-compiler/src/ast/seq-exp.cc | 26 + tiger-compiler/src/ast/seq-exp.hh | 47 + tiger-compiler/src/ast/seq-exp.hxx | 16 + tiger-compiler/src/ast/simple-var.cc | 19 + tiger-compiler/src/ast/simple-var.hh | 56 + tiger-compiler/src/ast/simple-var.hxx | 20 + tiger-compiler/src/ast/string-exp.cc | 19 + tiger-compiler/src/ast/string-exp.hh | 47 + tiger-compiler/src/ast/string-exp.hxx | 16 + tiger-compiler/src/ast/subscript-var.cc | 26 + tiger-compiler/src/ast/subscript-var.hh | 54 + tiger-compiler/src/ast/subscript-var.hxx | 19 + tiger-compiler/src/ast/tasks.cc | 32 + tiger-compiler/src/ast/tasks.hh | 24 + tiger-compiler/src/ast/ty.cc | 17 + tiger-compiler/src/ast/ty.hh | 39 + tiger-compiler/src/ast/ty.hxx | 11 + tiger-compiler/src/ast/typable.cc | 15 + tiger-compiler/src/ast/typable.hh | 50 + tiger-compiler/src/ast/typable.hxx | 24 + tiger-compiler/src/ast/type-constructor.cc | 31 + tiger-compiler/src/ast/type-constructor.hh | 38 + tiger-compiler/src/ast/type-constructor.hxx | 23 + tiger-compiler/src/ast/type-dec.cc | 22 + tiger-compiler/src/ast/type-dec.hh | 51 + tiger-compiler/src/ast/type-dec.hxx | 16 + tiger-compiler/src/ast/var-dec.cc | 31 + tiger-compiler/src/ast/var-dec.hh | 61 ++ tiger-compiler/src/ast/var-dec.hxx | 19 + tiger-compiler/src/ast/var.cc | 15 + tiger-compiler/src/ast/var.hh | 26 + tiger-compiler/src/ast/var.hxx | 11 + tiger-compiler/src/ast/visitor.hh | 114 ++ tiger-compiler/src/ast/visitor.hxx | 36 + tiger-compiler/src/ast/while-exp.cc | 26 + tiger-compiler/src/ast/while-exp.hh | 53 + tiger-compiler/src/ast/while-exp.hxx | 19 + tiger-compiler/src/astclone/cloner.cc | 311 ++++++ tiger-compiler/src/astclone/cloner.hh | 102 ++ tiger-compiler/src/astclone/cloner.hxx | 72 ++ tiger-compiler/src/astclone/libastclone.hh | 42 + tiger-compiler/src/astclone/libastclone.hxx | 40 + tiger-compiler/src/astclone/local.am | 12 + tiger-compiler/src/astclone/tasks.cc | 26 + tiger-compiler/src/astclone/tasks.hh | 20 + tiger-compiler/src/bind/binder.cc | 183 ++++ tiger-compiler/src/bind/binder.hh | 138 +++ tiger-compiler/src/bind/binder.hxx | 124 +++ tiger-compiler/src/bind/libbind.cc | 31 + tiger-compiler/src/bind/libbind.hh | 29 + tiger-compiler/src/bind/local.am | 17 + tiger-compiler/src/bind/renamer.cc | 63 ++ tiger-compiler/src/bind/renamer.hh | 62 ++ tiger-compiler/src/bind/renamer.hxx | 24 + tiger-compiler/src/bind/tasks.cc | 34 + tiger-compiler/src/bind/tasks.hh | 42 + tiger-compiler/src/callgraph/call-graph-visitor.cc | 56 + tiger-compiler/src/callgraph/call-graph-visitor.hh | 38 + tiger-compiler/src/callgraph/fundec-graph.hh | 76 ++ tiger-compiler/src/callgraph/fundec-graph.hxx | 56 + tiger-compiler/src/callgraph/libcallgraph.cc | 36 + tiger-compiler/src/callgraph/libcallgraph.hh | 28 + tiger-compiler/src/callgraph/local.am | 14 + .../src/callgraph/parent-graph-visitor.cc | 42 + .../src/callgraph/parent-graph-visitor.hh | 36 + tiger-compiler/src/callgraph/tasks.cc | 52 + tiger-compiler/src/callgraph/tasks.hh | 46 + tiger-compiler/src/combine/binder.cc | 17 + tiger-compiler/src/combine/binder.hh | 16 + tiger-compiler/src/combine/libcombine.cc | 26 + tiger-compiler/src/combine/libcombine.hh | 44 + tiger-compiler/src/combine/local.am | 6 + tiger-compiler/src/combine/tasks.cc | 74 ++ tiger-compiler/src/combine/tasks.hh | 56 + tiger-compiler/src/combine/type-checker.cc | 14 + tiger-compiler/src/combine/type-checker.hh | 20 + tiger-compiler/src/common.cc | 19 + tiger-compiler/src/common.hh | 49 + .../src/desugar/bounds-checking-visitor.cc | 31 + .../src/desugar/bounds-checking-visitor.hh | 46 + tiger-compiler/src/desugar/desugar-visitor.cc | 144 +++ tiger-compiler/src/desugar/desugar-visitor.hh | 42 + tiger-compiler/src/desugar/libdesugar.hh | 85 ++ tiger-compiler/src/desugar/libdesugar.hxx | 95 ++ tiger-compiler/src/desugar/local.am | 27 + tiger-compiler/src/desugar/tasks.cc | 49 + tiger-compiler/src/desugar/tasks.hh | 75 ++ tiger-compiler/src/doc.hh | 23 + tiger-compiler/src/escapes/escapes-visitor.cc | 31 + tiger-compiler/src/escapes/escapes-visitor.hh | 75 ++ tiger-compiler/src/escapes/libescapes.cc | 23 + tiger-compiler/src/escapes/libescapes.hh | 23 + tiger-compiler/src/escapes/local.am | 7 + tiger-compiler/src/escapes/tasks.cc | 38 + tiger-compiler/src/escapes/tasks.hh | 28 + tiger-compiler/src/inlining/inliner.cc | 64 ++ tiger-compiler/src/inlining/inliner.hh | 44 + tiger-compiler/src/inlining/libinlining.cc | 54 + tiger-compiler/src/inlining/libinlining.hh | 42 + tiger-compiler/src/inlining/local.am | 8 + tiger-compiler/src/inlining/pruner.cc | 34 + tiger-compiler/src/inlining/pruner.hh | 42 + tiger-compiler/src/inlining/tasks.cc | 31 + tiger-compiler/src/inlining/tasks.hh | 36 + .../src/llvmtranslate/escapes-collector.cc | 151 +++ .../src/llvmtranslate/escapes-collector.hh | 13 + tiger-compiler/src/llvmtranslate/fwd.hh | 31 + .../src/llvmtranslate/generate-runtime.sh | 32 + .../src/llvmtranslate/libllvmtranslate.cc | 47 + .../src/llvmtranslate/libllvmtranslate.hh | 31 + .../src/llvmtranslate/llvm-type-visitor.cc | 110 ++ .../src/llvmtranslate/llvm-type-visitor.hh | 50 + tiger-compiler/src/llvmtranslate/local.am | 39 + tiger-compiler/src/llvmtranslate/tasks.cc | 64 ++ tiger-compiler/src/llvmtranslate/tasks.hh | 34 + tiger-compiler/src/llvmtranslate/tiger-runtime.c | 304 ++++++ tiger-compiler/src/llvmtranslate/translator.cc | 737 +++++++++++++ tiger-compiler/src/llvmtranslate/translator.hh | 145 +++ tiger-compiler/src/llvmtranslate/translator.hxx | 30 + tiger-compiler/src/local.am | 75 ++ tiger-compiler/src/object/binder.cc | 176 +++ tiger-compiler/src/object/binder.hh | 98 ++ tiger-compiler/src/object/desugar-visitor.cc | 1127 ++++++++++++++++++++ tiger-compiler/src/object/desugar-visitor.hh | 301 ++++++ tiger-compiler/src/object/fwd.hh | 16 + tiger-compiler/src/object/libobject.cc | 49 + tiger-compiler/src/object/libobject.hh | 82 ++ tiger-compiler/src/object/libobject.hxx | 48 + tiger-compiler/src/object/local.am | 33 + tiger-compiler/src/object/renamer.cc | 142 +++ tiger-compiler/src/object/renamer.hh | 79 ++ tiger-compiler/src/object/tasks.cc | 52 + tiger-compiler/src/object/tasks.hh | 60 ++ tiger-compiler/src/object/type-checker.cc | 405 +++++++ tiger-compiler/src/object/type-checker.hh | 108 ++ tiger-compiler/src/overload/binder.cc | 45 + tiger-compiler/src/overload/binder.hh | 65 ++ tiger-compiler/src/overload/liboverload.cc | 28 + tiger-compiler/src/overload/liboverload.hh | 36 + tiger-compiler/src/overload/local.am | 9 + tiger-compiler/src/overload/over-table.hh | 63 ++ tiger-compiler/src/overload/over-table.hxx | 64 ++ tiger-compiler/src/overload/tasks.cc | 38 + tiger-compiler/src/overload/tasks.hh | 29 + tiger-compiler/src/overload/type-checker.cc | 21 + tiger-compiler/src/overload/type-checker.hh | 37 + tiger-compiler/src/parse/fwd.hh | 38 + tiger-compiler/src/parse/generate-prelude.sh | 31 + tiger-compiler/src/parse/libparse.cc | 137 +++ tiger-compiler/src/parse/libparse.hh | 76 ++ tiger-compiler/src/parse/local.am | 125 +++ tiger-compiler/src/parse/metavar-map.hh | 48 + tiger-compiler/src/parse/metavar-map.hxx | 69 ++ tiger-compiler/src/parse/tasks.cc | 53 + tiger-compiler/src/parse/tasks.hh | 51 + tiger-compiler/src/parse/tiger-driver.cc | 215 ++++ tiger-compiler/src/parse/tiger-driver.hh | 110 ++ tiger-compiler/src/parse/tiger-factory.hh | 144 +++ tiger-compiler/src/parse/tiger-factory.hxx | 272 +++++ tiger-compiler/src/parse/tweast.cc | 87 ++ tiger-compiler/src/parse/tweast.hh | 79 ++ tiger-compiler/src/parse/tweast.hxx | 75 ++ tiger-compiler/src/task/argument-task.cc | 29 + tiger-compiler/src/task/argument-task.hh | 58 + tiger-compiler/src/task/boolean-task.cc | 22 + tiger-compiler/src/task/boolean-task.hh | 28 + tiger-compiler/src/task/disjunctive-task.cc | 32 + tiger-compiler/src/task/disjunctive-task.hh | 27 + tiger-compiler/src/task/function-task.cc | 22 + tiger-compiler/src/task/function-task.hh | 31 + tiger-compiler/src/task/fwd.hh | 22 + tiger-compiler/src/task/int-task.cc | 55 + tiger-compiler/src/task/int-task.hh | 33 + tiger-compiler/src/task/libtask.hh | 107 ++ tiger-compiler/src/task/local.am | 15 + tiger-compiler/src/task/multiple-string-task.cc | 21 + tiger-compiler/src/task/multiple-string-task.hh | 34 + tiger-compiler/src/task/simple-task.cc | 21 + tiger-compiler/src/task/simple-task.hh | 34 + tiger-compiler/src/task/string-task.cc | 22 + tiger-compiler/src/task/string-task.hh | 28 + tiger-compiler/src/task/task-register.cc | 353 ++++++ tiger-compiler/src/task/task-register.hh | 118 ++ tiger-compiler/src/task/task-register.hxx | 15 + tiger-compiler/src/task/task.cc | 68 ++ tiger-compiler/src/task/task.hh | 103 ++ tiger-compiler/src/task/task.hxx | 24 + tiger-compiler/src/task/tasks.cc | 28 + tiger-compiler/src/task/tasks.hh | 23 + tiger-compiler/src/tc.cc | 53 + tiger-compiler/src/testsuite/libtestsuite.cc | 30 + tiger-compiler/src/testsuite/libtestsuite.hh | 41 + tiger-compiler/src/testsuite/local.am | 15 + tiger-compiler/src/testsuite/tasks.cc | 49 + tiger-compiler/src/testsuite/tasks.hh | 21 + tiger-compiler/src/testsuite/tests-collector.cc | 19 + tiger-compiler/src/testsuite/tests-collector.hh | 53 + tiger-compiler/src/testsuite/tests-collector.hxx | 21 + .../src/testsuite/testsuite-generator.cc | 143 +++ .../src/testsuite/testsuite-generator.hh | 23 + tiger-compiler/src/type/README.txt | 92 ++ tiger-compiler/src/type/array.cc | 28 + tiger-compiler/src/type/array.hh | 30 + tiger-compiler/src/type/array.hxx | 18 + tiger-compiler/src/type/attribute.cc | 16 + tiger-compiler/src/type/attribute.hh | 44 + tiger-compiler/src/type/attribute.hxx | 25 + tiger-compiler/src/type/builtin-types.cc | 22 + tiger-compiler/src/type/builtin-types.hh | 40 + tiger-compiler/src/type/class.cc | 123 +++ tiger-compiler/src/type/class.hh | 159 +++ tiger-compiler/src/type/class.hxx | 88 ++ tiger-compiler/src/type/default-visitor.hh | 65 ++ tiger-compiler/src/type/default-visitor.hxx | 95 ++ tiger-compiler/src/type/field.cc | 17 + tiger-compiler/src/type/field.hh | 45 + tiger-compiler/src/type/field.hxx | 16 + tiger-compiler/src/type/function.cc | 38 + tiger-compiler/src/type/function.hh | 59 + tiger-compiler/src/type/function.hxx | 16 + tiger-compiler/src/type/fwd.hh | 31 + tiger-compiler/src/type/libtype.cc | 19 + tiger-compiler/src/type/libtype.hh | 19 + tiger-compiler/src/type/local.am | 29 + tiger-compiler/src/type/method.cc | 48 + tiger-compiler/src/type/method.hh | 90 ++ tiger-compiler/src/type/method.hxx | 27 + tiger-compiler/src/type/named.cc | 61 ++ tiger-compiler/src/type/named.hh | 90 ++ tiger-compiler/src/type/named.hxx | 28 + tiger-compiler/src/type/nil.cc | 34 + tiger-compiler/src/type/nil.hh | 47 + tiger-compiler/src/type/pretty-printer.cc | 127 +++ tiger-compiler/src/type/pretty-printer.hh | 67 ++ tiger-compiler/src/type/record.cc | 52 + tiger-compiler/src/type/record.hh | 69 ++ tiger-compiler/src/type/record.hxx | 34 + tiger-compiler/src/type/tasks.cc | 22 + tiger-compiler/src/type/tasks.hh | 29 + tiger-compiler/src/type/type-checker.cc | 639 +++++++++++ tiger-compiler/src/type/type-checker.hh | 279 +++++ tiger-compiler/src/type/type-checker.hxx | 127 +++ tiger-compiler/src/type/type.cc | 18 + tiger-compiler/src/type/type.hh | 66 ++ tiger-compiler/src/type/type.hxx | 37 + tiger-compiler/src/type/types.hh | 18 + tiger-compiler/src/type/visitor.hh | 57 + tiger-compiler/src/type/visitor.hxx | 29 + tiger-compiler/src/version.cc.in | 34 + tiger-compiler/src/version.hh | 23 + 379 files changed, 22593 insertions(+) create mode 100644 tiger-compiler/src/assert/binder.cc create mode 100644 tiger-compiler/src/assert/binder.hh create mode 100644 tiger-compiler/src/assert/desugar-visitor.cc create mode 100644 tiger-compiler/src/assert/desugar-visitor.hh create mode 100644 tiger-compiler/src/assert/desugar-visitor.hxx create mode 100644 tiger-compiler/src/assert/libassert.cc create mode 100644 tiger-compiler/src/assert/libassert.hh create mode 100644 tiger-compiler/src/assert/libassert.hxx create mode 100644 tiger-compiler/src/assert/local.am create mode 100644 tiger-compiler/src/assert/renamer.cc create mode 100644 tiger-compiler/src/assert/renamer.hh create mode 100644 tiger-compiler/src/assert/tasks.cc create mode 100644 tiger-compiler/src/assert/tasks.hh create mode 100644 tiger-compiler/src/assert/type-checker.cc create mode 100644 tiger-compiler/src/assert/type-checker.hh create mode 100644 tiger-compiler/src/ast/README.txt create mode 100644 tiger-compiler/src/ast/all.hh create mode 100644 tiger-compiler/src/ast/array-exp.cc create mode 100644 tiger-compiler/src/ast/array-exp.hh create mode 100644 tiger-compiler/src/ast/array-exp.hxx create mode 100644 tiger-compiler/src/ast/array-ty.cc create mode 100644 tiger-compiler/src/ast/array-ty.hh create mode 100644 tiger-compiler/src/ast/array-ty.hxx create mode 100644 tiger-compiler/src/ast/assert-exp.cc create mode 100644 tiger-compiler/src/ast/assert-exp.hh create mode 100644 tiger-compiler/src/ast/assert-exp.hxx create mode 100644 tiger-compiler/src/ast/assert-visitor.hh create mode 100644 tiger-compiler/src/ast/assert-visitor.hxx create mode 100644 tiger-compiler/src/ast/assign-exp.cc create mode 100644 tiger-compiler/src/ast/assign-exp.hh create mode 100644 tiger-compiler/src/ast/assign-exp.hxx create mode 100644 tiger-compiler/src/ast/ast-nodes.mk create mode 100644 tiger-compiler/src/ast/ast.cc create mode 100644 tiger-compiler/src/ast/ast.hh create mode 100644 tiger-compiler/src/ast/ast.hxx create mode 100644 tiger-compiler/src/ast/break-exp.cc create mode 100644 tiger-compiler/src/ast/break-exp.hh create mode 100644 tiger-compiler/src/ast/break-exp.hxx create mode 100644 tiger-compiler/src/ast/call-exp.cc create mode 100644 tiger-compiler/src/ast/call-exp.hh create mode 100644 tiger-compiler/src/ast/call-exp.hxx create mode 100644 tiger-compiler/src/ast/cast-exp.cc create mode 100644 tiger-compiler/src/ast/cast-exp.hh create mode 100644 tiger-compiler/src/ast/cast-exp.hxx create mode 100644 tiger-compiler/src/ast/chunk-interface.hh create mode 100644 tiger-compiler/src/ast/chunk-interface.hxx create mode 100644 tiger-compiler/src/ast/chunk-list.cc create mode 100644 tiger-compiler/src/ast/chunk-list.hh create mode 100644 tiger-compiler/src/ast/chunk-list.hxx create mode 100644 tiger-compiler/src/ast/chunk.hh create mode 100644 tiger-compiler/src/ast/chunk.hxx create mode 100644 tiger-compiler/src/ast/class-ty.cc create mode 100644 tiger-compiler/src/ast/class-ty.hh create mode 100644 tiger-compiler/src/ast/class-ty.hxx create mode 100644 tiger-compiler/src/ast/dec.cc create mode 100644 tiger-compiler/src/ast/dec.hh create mode 100644 tiger-compiler/src/ast/dec.hxx create mode 100644 tiger-compiler/src/ast/default-visitor.hh create mode 100644 tiger-compiler/src/ast/default-visitor.hxx create mode 100644 tiger-compiler/src/ast/dumper-dot.cc create mode 100644 tiger-compiler/src/ast/dumper-dot.hh create mode 100644 tiger-compiler/src/ast/dumper-dot.hxx create mode 100644 tiger-compiler/src/ast/escapable.cc create mode 100644 tiger-compiler/src/ast/escapable.hh create mode 100644 tiger-compiler/src/ast/escapable.hxx create mode 100644 tiger-compiler/src/ast/exp.cc create mode 100644 tiger-compiler/src/ast/exp.hh create mode 100644 tiger-compiler/src/ast/exp.hxx create mode 100644 tiger-compiler/src/ast/field-init.cc create mode 100644 tiger-compiler/src/ast/field-init.hh create mode 100644 tiger-compiler/src/ast/field-init.hxx create mode 100644 tiger-compiler/src/ast/field-var.cc create mode 100644 tiger-compiler/src/ast/field-var.hh create mode 100644 tiger-compiler/src/ast/field-var.hxx create mode 100644 tiger-compiler/src/ast/field.cc create mode 100644 tiger-compiler/src/ast/field.hh create mode 100644 tiger-compiler/src/ast/field.hxx create mode 100644 tiger-compiler/src/ast/for-exp.cc create mode 100644 tiger-compiler/src/ast/for-exp.hh create mode 100644 tiger-compiler/src/ast/for-exp.hxx create mode 100644 tiger-compiler/src/ast/function-dec.cc create mode 100644 tiger-compiler/src/ast/function-dec.hh create mode 100644 tiger-compiler/src/ast/function-dec.hxx create mode 100644 tiger-compiler/src/ast/fwd.hh create mode 100644 tiger-compiler/src/ast/if-exp.cc create mode 100644 tiger-compiler/src/ast/if-exp.hh create mode 100644 tiger-compiler/src/ast/if-exp.hxx create mode 100644 tiger-compiler/src/ast/int-exp.cc create mode 100644 tiger-compiler/src/ast/int-exp.hh create mode 100644 tiger-compiler/src/ast/int-exp.hxx create mode 100644 tiger-compiler/src/ast/let-exp.cc create mode 100644 tiger-compiler/src/ast/let-exp.hh create mode 100644 tiger-compiler/src/ast/let-exp.hxx create mode 100644 tiger-compiler/src/ast/libast.cc create mode 100644 tiger-compiler/src/ast/libast.hh create mode 100644 tiger-compiler/src/ast/local.am create mode 100644 tiger-compiler/src/ast/location.hh create mode 100644 tiger-compiler/src/ast/method-call-exp.cc create mode 100644 tiger-compiler/src/ast/method-call-exp.hh create mode 100644 tiger-compiler/src/ast/method-call-exp.hxx create mode 100644 tiger-compiler/src/ast/method-dec.cc create mode 100644 tiger-compiler/src/ast/method-dec.hh create mode 100644 tiger-compiler/src/ast/method-dec.hxx create mode 100644 tiger-compiler/src/ast/name-ty.cc create mode 100644 tiger-compiler/src/ast/name-ty.hh create mode 100644 tiger-compiler/src/ast/name-ty.hxx create mode 100644 tiger-compiler/src/ast/nil-exp.cc create mode 100644 tiger-compiler/src/ast/nil-exp.hh create mode 100644 tiger-compiler/src/ast/nil-exp.hxx create mode 100644 tiger-compiler/src/ast/non-assert-visitor.hh create mode 100644 tiger-compiler/src/ast/non-assert-visitor.hxx create mode 100644 tiger-compiler/src/ast/non-object-visitor.hh create mode 100644 tiger-compiler/src/ast/non-object-visitor.hxx create mode 100644 tiger-compiler/src/ast/object-exp.cc create mode 100644 tiger-compiler/src/ast/object-exp.hh create mode 100644 tiger-compiler/src/ast/object-exp.hxx create mode 100644 tiger-compiler/src/ast/object-visitor.hh create mode 100644 tiger-compiler/src/ast/object-visitor.hxx create mode 100644 tiger-compiler/src/ast/op-exp.cc create mode 100644 tiger-compiler/src/ast/op-exp.hh create mode 100644 tiger-compiler/src/ast/op-exp.hxx create mode 100644 tiger-compiler/src/ast/pretty-printer.cc create mode 100644 tiger-compiler/src/ast/pretty-printer.hh create mode 100644 tiger-compiler/src/ast/record-exp.cc create mode 100644 tiger-compiler/src/ast/record-exp.hh create mode 100644 tiger-compiler/src/ast/record-exp.hxx create mode 100644 tiger-compiler/src/ast/record-ty.cc create mode 100644 tiger-compiler/src/ast/record-ty.hh create mode 100644 tiger-compiler/src/ast/record-ty.hxx create mode 100644 tiger-compiler/src/ast/seq-exp.cc create mode 100644 tiger-compiler/src/ast/seq-exp.hh create mode 100644 tiger-compiler/src/ast/seq-exp.hxx create mode 100644 tiger-compiler/src/ast/simple-var.cc create mode 100644 tiger-compiler/src/ast/simple-var.hh create mode 100644 tiger-compiler/src/ast/simple-var.hxx create mode 100644 tiger-compiler/src/ast/string-exp.cc create mode 100644 tiger-compiler/src/ast/string-exp.hh create mode 100644 tiger-compiler/src/ast/string-exp.hxx create mode 100644 tiger-compiler/src/ast/subscript-var.cc create mode 100644 tiger-compiler/src/ast/subscript-var.hh create mode 100644 tiger-compiler/src/ast/subscript-var.hxx create mode 100644 tiger-compiler/src/ast/tasks.cc create mode 100644 tiger-compiler/src/ast/tasks.hh create mode 100644 tiger-compiler/src/ast/ty.cc create mode 100644 tiger-compiler/src/ast/ty.hh create mode 100644 tiger-compiler/src/ast/ty.hxx create mode 100644 tiger-compiler/src/ast/typable.cc create mode 100644 tiger-compiler/src/ast/typable.hh create mode 100644 tiger-compiler/src/ast/typable.hxx create mode 100644 tiger-compiler/src/ast/type-constructor.cc create mode 100644 tiger-compiler/src/ast/type-constructor.hh create mode 100644 tiger-compiler/src/ast/type-constructor.hxx create mode 100644 tiger-compiler/src/ast/type-dec.cc create mode 100644 tiger-compiler/src/ast/type-dec.hh create mode 100644 tiger-compiler/src/ast/type-dec.hxx create mode 100644 tiger-compiler/src/ast/var-dec.cc create mode 100644 tiger-compiler/src/ast/var-dec.hh create mode 100644 tiger-compiler/src/ast/var-dec.hxx create mode 100644 tiger-compiler/src/ast/var.cc create mode 100644 tiger-compiler/src/ast/var.hh create mode 100644 tiger-compiler/src/ast/var.hxx create mode 100644 tiger-compiler/src/ast/visitor.hh create mode 100644 tiger-compiler/src/ast/visitor.hxx create mode 100644 tiger-compiler/src/ast/while-exp.cc create mode 100644 tiger-compiler/src/ast/while-exp.hh create mode 100644 tiger-compiler/src/ast/while-exp.hxx create mode 100644 tiger-compiler/src/astclone/cloner.cc create mode 100644 tiger-compiler/src/astclone/cloner.hh create mode 100644 tiger-compiler/src/astclone/cloner.hxx create mode 100644 tiger-compiler/src/astclone/libastclone.hh create mode 100644 tiger-compiler/src/astclone/libastclone.hxx create mode 100644 tiger-compiler/src/astclone/local.am create mode 100644 tiger-compiler/src/astclone/tasks.cc create mode 100644 tiger-compiler/src/astclone/tasks.hh create mode 100644 tiger-compiler/src/bind/binder.cc create mode 100644 tiger-compiler/src/bind/binder.hh create mode 100644 tiger-compiler/src/bind/binder.hxx create mode 100644 tiger-compiler/src/bind/libbind.cc create mode 100644 tiger-compiler/src/bind/libbind.hh create mode 100644 tiger-compiler/src/bind/local.am create mode 100644 tiger-compiler/src/bind/renamer.cc create mode 100644 tiger-compiler/src/bind/renamer.hh create mode 100644 tiger-compiler/src/bind/renamer.hxx create mode 100644 tiger-compiler/src/bind/tasks.cc create mode 100644 tiger-compiler/src/bind/tasks.hh create mode 100644 tiger-compiler/src/callgraph/call-graph-visitor.cc create mode 100644 tiger-compiler/src/callgraph/call-graph-visitor.hh create mode 100644 tiger-compiler/src/callgraph/fundec-graph.hh create mode 100644 tiger-compiler/src/callgraph/fundec-graph.hxx create mode 100644 tiger-compiler/src/callgraph/libcallgraph.cc create mode 100644 tiger-compiler/src/callgraph/libcallgraph.hh create mode 100644 tiger-compiler/src/callgraph/local.am create mode 100644 tiger-compiler/src/callgraph/parent-graph-visitor.cc create mode 100644 tiger-compiler/src/callgraph/parent-graph-visitor.hh create mode 100644 tiger-compiler/src/callgraph/tasks.cc create mode 100644 tiger-compiler/src/callgraph/tasks.hh create mode 100644 tiger-compiler/src/combine/binder.cc create mode 100644 tiger-compiler/src/combine/binder.hh create mode 100644 tiger-compiler/src/combine/libcombine.cc create mode 100644 tiger-compiler/src/combine/libcombine.hh create mode 100644 tiger-compiler/src/combine/local.am create mode 100644 tiger-compiler/src/combine/tasks.cc create mode 100644 tiger-compiler/src/combine/tasks.hh create mode 100644 tiger-compiler/src/combine/type-checker.cc create mode 100644 tiger-compiler/src/combine/type-checker.hh create mode 100644 tiger-compiler/src/common.cc create mode 100644 tiger-compiler/src/common.hh create mode 100644 tiger-compiler/src/desugar/bounds-checking-visitor.cc create mode 100644 tiger-compiler/src/desugar/bounds-checking-visitor.hh create mode 100644 tiger-compiler/src/desugar/desugar-visitor.cc create mode 100644 tiger-compiler/src/desugar/desugar-visitor.hh create mode 100644 tiger-compiler/src/desugar/libdesugar.hh create mode 100644 tiger-compiler/src/desugar/libdesugar.hxx create mode 100644 tiger-compiler/src/desugar/local.am create mode 100644 tiger-compiler/src/desugar/tasks.cc create mode 100644 tiger-compiler/src/desugar/tasks.hh create mode 100644 tiger-compiler/src/doc.hh create mode 100644 tiger-compiler/src/escapes/escapes-visitor.cc create mode 100644 tiger-compiler/src/escapes/escapes-visitor.hh create mode 100644 tiger-compiler/src/escapes/libescapes.cc create mode 100644 tiger-compiler/src/escapes/libescapes.hh create mode 100644 tiger-compiler/src/escapes/local.am create mode 100644 tiger-compiler/src/escapes/tasks.cc create mode 100644 tiger-compiler/src/escapes/tasks.hh create mode 100644 tiger-compiler/src/inlining/inliner.cc create mode 100644 tiger-compiler/src/inlining/inliner.hh create mode 100644 tiger-compiler/src/inlining/libinlining.cc create mode 100644 tiger-compiler/src/inlining/libinlining.hh create mode 100644 tiger-compiler/src/inlining/local.am create mode 100644 tiger-compiler/src/inlining/pruner.cc create mode 100644 tiger-compiler/src/inlining/pruner.hh create mode 100644 tiger-compiler/src/inlining/tasks.cc create mode 100644 tiger-compiler/src/inlining/tasks.hh create mode 100644 tiger-compiler/src/llvmtranslate/escapes-collector.cc create mode 100644 tiger-compiler/src/llvmtranslate/escapes-collector.hh create mode 100644 tiger-compiler/src/llvmtranslate/fwd.hh create mode 100755 tiger-compiler/src/llvmtranslate/generate-runtime.sh create mode 100644 tiger-compiler/src/llvmtranslate/libllvmtranslate.cc create mode 100644 tiger-compiler/src/llvmtranslate/libllvmtranslate.hh create mode 100644 tiger-compiler/src/llvmtranslate/llvm-type-visitor.cc create mode 100644 tiger-compiler/src/llvmtranslate/llvm-type-visitor.hh create mode 100644 tiger-compiler/src/llvmtranslate/local.am create mode 100644 tiger-compiler/src/llvmtranslate/tasks.cc create mode 100644 tiger-compiler/src/llvmtranslate/tasks.hh create mode 100644 tiger-compiler/src/llvmtranslate/tiger-runtime.c create mode 100644 tiger-compiler/src/llvmtranslate/translator.cc create mode 100644 tiger-compiler/src/llvmtranslate/translator.hh create mode 100644 tiger-compiler/src/llvmtranslate/translator.hxx create mode 100644 tiger-compiler/src/local.am create mode 100644 tiger-compiler/src/object/binder.cc create mode 100644 tiger-compiler/src/object/binder.hh create mode 100644 tiger-compiler/src/object/desugar-visitor.cc create mode 100644 tiger-compiler/src/object/desugar-visitor.hh create mode 100644 tiger-compiler/src/object/fwd.hh create mode 100644 tiger-compiler/src/object/libobject.cc create mode 100644 tiger-compiler/src/object/libobject.hh create mode 100644 tiger-compiler/src/object/libobject.hxx create mode 100644 tiger-compiler/src/object/local.am create mode 100644 tiger-compiler/src/object/renamer.cc create mode 100644 tiger-compiler/src/object/renamer.hh create mode 100644 tiger-compiler/src/object/tasks.cc create mode 100644 tiger-compiler/src/object/tasks.hh create mode 100644 tiger-compiler/src/object/type-checker.cc create mode 100644 tiger-compiler/src/object/type-checker.hh create mode 100644 tiger-compiler/src/overload/binder.cc create mode 100644 tiger-compiler/src/overload/binder.hh create mode 100644 tiger-compiler/src/overload/liboverload.cc create mode 100644 tiger-compiler/src/overload/liboverload.hh create mode 100644 tiger-compiler/src/overload/local.am create mode 100644 tiger-compiler/src/overload/over-table.hh create mode 100644 tiger-compiler/src/overload/over-table.hxx create mode 100644 tiger-compiler/src/overload/tasks.cc create mode 100644 tiger-compiler/src/overload/tasks.hh create mode 100644 tiger-compiler/src/overload/type-checker.cc create mode 100644 tiger-compiler/src/overload/type-checker.hh create mode 100644 tiger-compiler/src/parse/fwd.hh create mode 100755 tiger-compiler/src/parse/generate-prelude.sh create mode 100644 tiger-compiler/src/parse/libparse.cc create mode 100644 tiger-compiler/src/parse/libparse.hh create mode 100644 tiger-compiler/src/parse/local.am create mode 100644 tiger-compiler/src/parse/metavar-map.hh create mode 100644 tiger-compiler/src/parse/metavar-map.hxx create mode 100644 tiger-compiler/src/parse/tasks.cc create mode 100644 tiger-compiler/src/parse/tasks.hh create mode 100644 tiger-compiler/src/parse/tiger-driver.cc create mode 100644 tiger-compiler/src/parse/tiger-driver.hh create mode 100644 tiger-compiler/src/parse/tiger-factory.hh create mode 100644 tiger-compiler/src/parse/tiger-factory.hxx create mode 100644 tiger-compiler/src/parse/tweast.cc create mode 100644 tiger-compiler/src/parse/tweast.hh create mode 100644 tiger-compiler/src/parse/tweast.hxx create mode 100644 tiger-compiler/src/task/argument-task.cc create mode 100644 tiger-compiler/src/task/argument-task.hh create mode 100644 tiger-compiler/src/task/boolean-task.cc create mode 100644 tiger-compiler/src/task/boolean-task.hh create mode 100644 tiger-compiler/src/task/disjunctive-task.cc create mode 100644 tiger-compiler/src/task/disjunctive-task.hh create mode 100644 tiger-compiler/src/task/function-task.cc create mode 100644 tiger-compiler/src/task/function-task.hh create mode 100644 tiger-compiler/src/task/fwd.hh create mode 100644 tiger-compiler/src/task/int-task.cc create mode 100644 tiger-compiler/src/task/int-task.hh create mode 100644 tiger-compiler/src/task/libtask.hh create mode 100644 tiger-compiler/src/task/local.am create mode 100644 tiger-compiler/src/task/multiple-string-task.cc create mode 100644 tiger-compiler/src/task/multiple-string-task.hh create mode 100644 tiger-compiler/src/task/simple-task.cc create mode 100644 tiger-compiler/src/task/simple-task.hh create mode 100644 tiger-compiler/src/task/string-task.cc create mode 100644 tiger-compiler/src/task/string-task.hh create mode 100644 tiger-compiler/src/task/task-register.cc create mode 100644 tiger-compiler/src/task/task-register.hh create mode 100644 tiger-compiler/src/task/task-register.hxx create mode 100644 tiger-compiler/src/task/task.cc create mode 100644 tiger-compiler/src/task/task.hh create mode 100644 tiger-compiler/src/task/task.hxx create mode 100644 tiger-compiler/src/task/tasks.cc create mode 100644 tiger-compiler/src/task/tasks.hh create mode 100644 tiger-compiler/src/tc.cc create mode 100644 tiger-compiler/src/testsuite/libtestsuite.cc create mode 100644 tiger-compiler/src/testsuite/libtestsuite.hh create mode 100644 tiger-compiler/src/testsuite/local.am create mode 100644 tiger-compiler/src/testsuite/tasks.cc create mode 100644 tiger-compiler/src/testsuite/tasks.hh create mode 100644 tiger-compiler/src/testsuite/tests-collector.cc create mode 100644 tiger-compiler/src/testsuite/tests-collector.hh create mode 100644 tiger-compiler/src/testsuite/tests-collector.hxx create mode 100644 tiger-compiler/src/testsuite/testsuite-generator.cc create mode 100644 tiger-compiler/src/testsuite/testsuite-generator.hh create mode 100644 tiger-compiler/src/type/README.txt create mode 100644 tiger-compiler/src/type/array.cc create mode 100644 tiger-compiler/src/type/array.hh create mode 100644 tiger-compiler/src/type/array.hxx create mode 100644 tiger-compiler/src/type/attribute.cc create mode 100644 tiger-compiler/src/type/attribute.hh create mode 100644 tiger-compiler/src/type/attribute.hxx create mode 100644 tiger-compiler/src/type/builtin-types.cc create mode 100644 tiger-compiler/src/type/builtin-types.hh create mode 100644 tiger-compiler/src/type/class.cc create mode 100644 tiger-compiler/src/type/class.hh create mode 100644 tiger-compiler/src/type/class.hxx create mode 100644 tiger-compiler/src/type/default-visitor.hh create mode 100644 tiger-compiler/src/type/default-visitor.hxx create mode 100644 tiger-compiler/src/type/field.cc create mode 100644 tiger-compiler/src/type/field.hh create mode 100644 tiger-compiler/src/type/field.hxx create mode 100644 tiger-compiler/src/type/function.cc create mode 100644 tiger-compiler/src/type/function.hh create mode 100644 tiger-compiler/src/type/function.hxx create mode 100644 tiger-compiler/src/type/fwd.hh create mode 100644 tiger-compiler/src/type/libtype.cc create mode 100644 tiger-compiler/src/type/libtype.hh create mode 100644 tiger-compiler/src/type/local.am create mode 100644 tiger-compiler/src/type/method.cc create mode 100644 tiger-compiler/src/type/method.hh create mode 100644 tiger-compiler/src/type/method.hxx create mode 100644 tiger-compiler/src/type/named.cc create mode 100644 tiger-compiler/src/type/named.hh create mode 100644 tiger-compiler/src/type/named.hxx create mode 100644 tiger-compiler/src/type/nil.cc create mode 100644 tiger-compiler/src/type/nil.hh create mode 100644 tiger-compiler/src/type/pretty-printer.cc create mode 100644 tiger-compiler/src/type/pretty-printer.hh create mode 100644 tiger-compiler/src/type/record.cc create mode 100644 tiger-compiler/src/type/record.hh create mode 100644 tiger-compiler/src/type/record.hxx create mode 100644 tiger-compiler/src/type/tasks.cc create mode 100644 tiger-compiler/src/type/tasks.hh create mode 100644 tiger-compiler/src/type/type-checker.cc create mode 100644 tiger-compiler/src/type/type-checker.hh create mode 100644 tiger-compiler/src/type/type-checker.hxx create mode 100644 tiger-compiler/src/type/type.cc create mode 100644 tiger-compiler/src/type/type.hh create mode 100644 tiger-compiler/src/type/type.hxx create mode 100644 tiger-compiler/src/type/types.hh create mode 100644 tiger-compiler/src/type/visitor.hh create mode 100644 tiger-compiler/src/type/visitor.hxx create mode 100644 tiger-compiler/src/version.cc.in create mode 100644 tiger-compiler/src/version.hh (limited to 'tiger-compiler/src') diff --git a/tiger-compiler/src/assert/binder.cc b/tiger-compiler/src/assert/binder.cc new file mode 100644 index 0000000..04008bc --- /dev/null +++ b/tiger-compiler/src/assert/binder.cc @@ -0,0 +1,12 @@ +/** + ** \file assert/binder.cc + ** \brief Implementation of assert::Binder. + */ + +#include + +namespace assert { + + Binder::Binder() = default; + +} // namespace assert diff --git a/tiger-compiler/src/assert/binder.hh b/tiger-compiler/src/assert/binder.hh new file mode 100644 index 0000000..7ede6d7 --- /dev/null +++ b/tiger-compiler/src/assert/binder.hh @@ -0,0 +1,22 @@ +/** + ** \file assert/binder.hh + ** \brief Declaration of assert::Binder. + */ + +#pragma once + +#include + +namespace assert { + + class Binder + : public bind::Binder + { + public: + using super_class = bind::Binder; + + // Build a Binder + Binder(); + }; + +} // namespace assert diff --git a/tiger-compiler/src/assert/desugar-visitor.cc b/tiger-compiler/src/assert/desugar-visitor.cc new file mode 100644 index 0000000..5f18a07 --- /dev/null +++ b/tiger-compiler/src/assert/desugar-visitor.cc @@ -0,0 +1,33 @@ +/** + ** \file assert/desugar-visitor.cc + ** \brief Implementation of assert::DesugarVisitor. + */ + +#include + +namespace assert +{ + + DesugarVisitor::DesugarVisitor(const bool desugar_for_p, + const bool desugar_string_cmp_p) + : super_type(desugar_for_p, desugar_string_cmp_p) + {} + + void DesugarVisitor::operator()(const ast::AssertExp& e) + { + // FIXME DONE: Some code was deleted here. (replace the AssertExp to a CallExp) + const ast::Location location = e.location_get(); + + const auto args = new ast::exps_type; + + const std::string condition_text = get_formatted_assert_cond(e); + const std::string filename = get_formatted_location(e.location_get()); + + args->push_back(recurse(e.cond_get())); + args->push_back(new ast::StringExp(location, condition_text)); + args->push_back(new ast::StringExp(location, filename)); + + result_ = new ast::CallExp(location, "assertion", args); + } + +} // namespace assert diff --git a/tiger-compiler/src/assert/desugar-visitor.hh b/tiger-compiler/src/assert/desugar-visitor.hh new file mode 100644 index 0000000..88d689e --- /dev/null +++ b/tiger-compiler/src/assert/desugar-visitor.hh @@ -0,0 +1,42 @@ +/** + ** \file assert/desugar-visitor.hh + ** \brief Declaration of assert::DesugarVisitor. + */ + +#pragma once + +#include +#include + +namespace assert { + + class DesugarVisitor + : public desugar::DesugarVisitor + , public ast::AssertConstVisitor + { + public: + using super_type = desugar::DesugarVisitor; + using super_type::operator(); + + // Build a DesugarVisitor + DesugarVisitor(bool desugar_for_p, bool desugar_string_cmp_p); + + // Desugar assertions + // \param e Node to visit + void operator()(const ast::AssertExp& e) override; + + private: + + // Retrieve the pretty-printed version of an assertion's condition as a + // string + // \param e Node to pretty-print. + inline std::string get_formatted_assert_cond(const ast::AssertExp& e); + + // Retrieve the pretty-printed version of a Location as a string + // \param loc Location record to pretty-print + inline std::string get_formatted_location(const ast::Location& loc); + }; + +} // namespace assert + +#include diff --git a/tiger-compiler/src/assert/desugar-visitor.hxx b/tiger-compiler/src/assert/desugar-visitor.hxx new file mode 100644 index 0000000..9e839c1 --- /dev/null +++ b/tiger-compiler/src/assert/desugar-visitor.hxx @@ -0,0 +1,39 @@ +/** + ** \file assert/desugar-visitor.hxx + ** \brief Implementation of assert::DesugarVisitor (inlined methods). + */ + +#pragma once + +#include + +#include +#include + +#include + +namespace assert +{ + + inline std::string + DesugarVisitor::get_formatted_assert_cond(const ast::AssertExp& e) + { + std::stringstream stream{}; + ast::PrettyPrinter pretty_printer(stream); + + pretty_printer(e.cond_get()); + + return stream.str(); + } + + inline std::string + DesugarVisitor::get_formatted_location(const ast::Location& loc) + { + std::stringstream stream{}; + + stream << loc; + + return stream.str(); + } + +} diff --git a/tiger-compiler/src/assert/libassert.cc b/tiger-compiler/src/assert/libassert.cc new file mode 100644 index 0000000..8114b74 --- /dev/null +++ b/tiger-compiler/src/assert/libassert.cc @@ -0,0 +1,36 @@ +/** + ** \file assert/libassert.cc + ** \brief Implementation of functions exported by the assert module. + */ + +#include +#include +#include +#include +#include + +namespace assert +{ + + misc::error bind(ast::Ast& last) + { + Binder binder; + binder(last); + return binder.error_get(); + } + + misc::error types_check(ast::Ast& tree) + { + TypeChecker typer; + typer(tree); + return typer.error_get(); + } + + misc::error rename(ast::Ast& ast) + { + Renamer renamer; + renamer(ast); + return misc::error{}; + } + +} diff --git a/tiger-compiler/src/assert/libassert.hh b/tiger-compiler/src/assert/libassert.hh new file mode 100644 index 0000000..aba01b1 --- /dev/null +++ b/tiger-compiler/src/assert/libassert.hh @@ -0,0 +1,79 @@ +/** + ** \file assert/libassert.hh + ** \brief Declare functions and variables exported by assert module. + */ + +#pragma once + +#include +#include + +namespace assert +{ + /*-------. + | Bind. | + `-------*/ + + /// \brief Bind the whole AST in place, return the error code + /// + /// \param last the ast you want to bind + /// + /// \return a misc::error that serve to indicate possible failure + misc::error bind(ast::Ast& last); + + /*----------------. + | Compute types. | + `----------------*/ + + /** \brief Check types allowing assertions. + + \param tree abstract syntax tree's root. + + \return success of the type-checking. */ + misc::error types_check(ast::Ast& tree); + + /*---------. + | Rename. | + `---------*/ + + /// \brief Rename the whole ast in place + /// + /// \param ast the ast you want to rename + /// + /// \return a misc::error that serve to indicate possible failure + misc::error rename(ast::Ast& ast); + + /*---------------------. + | Desugar assertions. | + `---------------------*/ + + /** \brief Remove assertions constructs from an AST. + + \param tree abstract syntax tree's root, whose bindings + and types have been computed, and whose + identifiers are all unique. + \param class_names the names of the class types of the AST + + \return the desugared, bound and type-checked AST. */ + template + A* desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p); + + /** \brief Remove assertions constructs from an AST without recomputing + its bindings nor its types. + + This function acts like assertions::assertions_desugar, but stops just + after the desugaring step (in fact, assertions::desugar is built + upon this function). It is meant to be used as a test of + DesugarVisitor (i.e., even if the desugared tree is badly bound + or typed, it can still be pretty-printed). + + \param tree AST to desugar. + \param class_names the names of the class types of the AST + + \return the desugared AST. */ + template + A* raw_desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p); + +} + +#include diff --git a/tiger-compiler/src/assert/libassert.hxx b/tiger-compiler/src/assert/libassert.hxx new file mode 100644 index 0000000..fcd2eb4 --- /dev/null +++ b/tiger-compiler/src/assert/libassert.hxx @@ -0,0 +1,45 @@ +/** + ** \file assert/libassert.hxx + ** \brief Implementation of functions exported by the assert module. + */ + +#pragma once + +#include + +#include +#include +#include +#include + +namespace assert +{ + + template void bind_and_types_check(A& tree) + { + misc::error e; + e << ::assert::bind(tree); + e.ice_on_error_here(); + e << ::assert::types_check(tree); + e.ice_on_error_here(); + } + + template + A* raw_desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p) + { + DesugarVisitor desugar(desugar_for_p, desugar_string_cmp_p); + desugar(tree); + return dynamic_cast(desugar.result_get()); + } + + template + A* desugar(const A& tree, bool desugar_for_p, bool desugar_string_cmp_p) + { + A* desugared = raw_desugar(tree, desugar_for_p, desugar_string_cmp_p); + assertion(desugared); + std::unique_ptr desugared_ptr(desugared); + bind_and_types_check(*desugared_ptr); + return desugared_ptr.release(); + } + +} diff --git a/tiger-compiler/src/assert/local.am b/tiger-compiler/src/assert/local.am new file mode 100644 index 0000000..18a8421 --- /dev/null +++ b/tiger-compiler/src/assert/local.am @@ -0,0 +1,17 @@ +## assert module + +src_libtc_la_SOURCES += \ + %D%/libassert.hh \ + %D%/libassert.cc \ + %D%/libassert.hxx + +src_libtc_la_SOURCES += \ + %D%/binder.hh %D%/binder.cc \ + %D%/desugar-visitor.hh %D%/desugar-visitor.cc %D%/desugar-visitor.hxx \ + %D%/type-checker.hh %D%/type-checker.cc \ + %D%/renamer.hh %D%/renamer.cc + + +## tasks + +TASKS += %D%/tasks.hh %D%/tasks.cc diff --git a/tiger-compiler/src/assert/renamer.cc b/tiger-compiler/src/assert/renamer.cc new file mode 100644 index 0000000..7c63cfa --- /dev/null +++ b/tiger-compiler/src/assert/renamer.cc @@ -0,0 +1,18 @@ +/** + ** \file assert/renamer.cc + ** \brief Implementation of assert::Renamer. + */ + +#include + +namespace assert +{ + + Renamer::Renamer() = default; + + void Renamer::operator()(ast::AssertExp& e) + { + ast::AssertVisitor::operator()(e); + } + +} // namespace assert diff --git a/tiger-compiler/src/assert/renamer.hh b/tiger-compiler/src/assert/renamer.hh new file mode 100644 index 0000000..6a5bd14 --- /dev/null +++ b/tiger-compiler/src/assert/renamer.hh @@ -0,0 +1,30 @@ +/** + ** \file assert/renamer.hh + ** \brief Declaration of assert::Renamer. + */ + +#pragma once + +#include +#include + +namespace assert { + + class Renamer + : public bind::Renamer + , public ast::AssertVisitor + { + public: + using super_type = ::bind::Renamer; + using super_type::operator(); + + // Build a renamer + Renamer(); + + // Visiting method for AssertExp nodes (redirects to + // `ast::AssertVisitor::operator()(ast::AssertExp&)`) + // \param e Node to visit + void operator()(ast::AssertExp& e) override; + }; + +} // namespace assert diff --git a/tiger-compiler/src/assert/tasks.cc b/tiger-compiler/src/assert/tasks.cc new file mode 100644 index 0000000..3e43ecd --- /dev/null +++ b/tiger-compiler/src/assert/tasks.cc @@ -0,0 +1,53 @@ +/** + ** \file assert/tasks.cc + ** \brief Assert module related tasks' implementation. + */ + +#include +#include +#include +#include +#include +#include +#include +#define DEFINE_TASKS 1 +#include +#undef DEFINE_TASKS + +namespace assert::tasks +{ + void parse() {} + + void bind() + { + task_error() << ::assert::bind(*ast::tasks::the_program.get()) + << &misc::error::exit_on_error; + } + + void types_compute() + { + task_error() << ::assert::types_check(*ast::tasks::the_program.get()) + << &misc::error::exit_on_error; + } + + void rename() + { + task_error() << ::assert::rename(*ast::tasks::the_program.get()) + << &misc::error::exit_on_error; + } + + void desugar() + { + astclone::apply(::assert::desugar, ast::tasks::the_program, + desugar::tasks::desugar_for_p, + desugar::tasks::desugar_string_cmp_p); + } + + void raw_desugar() + { + astclone::apply(::assert::raw_desugar, ast::tasks::the_program, + desugar::tasks::desugar_for_p, + desugar::tasks::desugar_string_cmp_p); + } + +} // namespace assert::tasks diff --git a/tiger-compiler/src/assert/tasks.hh b/tiger-compiler/src/assert/tasks.hh new file mode 100644 index 0000000..7f062de --- /dev/null +++ b/tiger-compiler/src/assert/tasks.hh @@ -0,0 +1,59 @@ +/** + ** \file assert/tasks.hh + ** \brief Assert module related tasks. + */ + +#pragma once + +#include + +// The tasks of the assert module +namespace assert::tasks +{ + TASK_GROUP("Assert"); + + // Enable assert extensions. + BOOLEAN_TASK_DECLARE("assert", + "enable assert extensions", + enable_assert_extensions_p, + ""); + + // Parse the input file, allowing assertions. + TASK_DECLARE("assert-parse", + "parse a file, allowing assertions", + parse, + "assert parse"); + + // Bind the parsed file, allowing assertions. + TASK_DECLARE("assert-bindings-compute", + "bind the name uses to their definitions, allowing assertions", + bind, + "assert-parse"); + + // Check for type violation, allowing assertions. + TASK_DECLARE("assert-types-compute", + "check for type violations, allowing assertions", + types_compute, + "assert-bindings-compute"); + + // Perform a renaming, before desugaring assertions. + TASK_DECLARE("assert-rename", + "rename identifiers to unique names, allowing assertions", + rename, + "assert-bindings-compute"); + + // Remove syntactic sugar from the Ast. + TASK_DECLARE("assert-desugar", + "remove assertions constructs from the program", + desugar, + "assert-rename assert-types-compute"); + + // Remove syntactic sugar from the Ast without recomputing + // bindings nor types. + TASK_DECLARE("raw-assert-desugar", + "remove assertions constructs from the program " + "without recomputing bindings nor types", + raw_desugar, + "assert-rename assert-types-compute"); + +} // namespace assert::tasks diff --git a/tiger-compiler/src/assert/type-checker.cc b/tiger-compiler/src/assert/type-checker.cc new file mode 100644 index 0000000..894ff6f --- /dev/null +++ b/tiger-compiler/src/assert/type-checker.cc @@ -0,0 +1,21 @@ +/** + ** \file assert/type-checker.cc + ** \brief Implementation of assert::TypeChecker. + */ + +#include + +namespace assert +{ + + TypeChecker::TypeChecker() = default; + + void TypeChecker::operator()(ast::AssertExp& e) + { + // FIXME DONE: Some code was deleted here. (implement method documentation) + check_type(e.cond_get(), "assertion", type::Int::instance()); + + type_default(e, &type::Void::instance()); + } + +} // namespace assert diff --git a/tiger-compiler/src/assert/type-checker.hh b/tiger-compiler/src/assert/type-checker.hh new file mode 100644 index 0000000..e15e393 --- /dev/null +++ b/tiger-compiler/src/assert/type-checker.hh @@ -0,0 +1,30 @@ +/** + ** \file assert/type-checker.hh + ** \brief Declaration of assert::TypeChecker. + */ + +#pragma once + +#include +#include + +namespace assert { + + class TypeChecker + : public type::TypeChecker + , public ast::AssertVisitor + { + public: + using super_type = type::TypeChecker; + using super_type::operator(); + + // Build a TypeChecker + TypeChecker(); + + // Type an AssertExp node. All AssertExp must follow the typing table : + // cond_ : int | assert cond_ : void + // \param e Node to visit + void operator()(ast::AssertExp& e) override; + }; + +} // assert diff --git a/tiger-compiler/src/ast/README.txt b/tiger-compiler/src/ast/README.txt new file mode 100644 index 0000000..4291b24 --- /dev/null +++ b/tiger-compiler/src/ast/README.txt @@ -0,0 +1,66 @@ +* README + +Tiger Abstract Syntax Tree nodes with their principal members. +Incomplete classes are tagged with a `*'. + +/Ast/ (Location location) + /Dec/ (symbol name) + FunctionDec (VarChunk formals, NameTy result, Exp body) + MethodDec () + TypeDec (Ty ty) + VarDec (NameTy type_name, Exp init) + + /Exp/ () + /Var/ () + FieldVar (Var var, symbol name) + SimpleVar (symbol name) + SubscriptVar (Var var, Exp index) + + ArrayExp (NameTy type_name, Exp size, Exp init) + AssertExp (Exp exp) + AssignExp (Var var, Exp exp) + BreakExp () + CallExp (symbol name, exps_type args) + MethodCallExp (Var object) + CastExp (Exp exp, Ty ty) + ForExp (VarDec vardec, Exp hi, Exp body) + IfExp (Exp test, Exp thenclause, Exp elseclause) + IntExp (int value) + LetExp (ChunkList chunks, Exp body) + NilExp () + ObjectExp (NameTy type_name) + OpExp (Exp left, Oper oper, Exp right) + RecordExp (NameTy type_name, fieldinits_type fields) + SeqExp (exps_type exps) + StringExp (string value) + WhileExp (Exp test, Exp body) + + /Ty/ () + ArrayTy (NameTy base_type) + ClassTy (NameTy super, ChunkList chunks) + NameTy (symbol name) + RecordTy (fields_type fields) + + ChunkList (list_type chunks) + + Field (symbol name, NameTy type_name) + + FieldInit (symbol name, Exp init) + + +Some of these classes also inherit from other classes. + +/Escapable/ + VarDec (NameTy type_name, Exp init) + +/Typable/ + /Dec/ (symbol name) + /Exp/ () + /Ty/ () + +/TypeConstructor/ + /Ty/ () + FunctionDec (VarChunk formals, NameTy result, Exp body) + NilExp () + TypeDec (Ty ty) + diff --git a/tiger-compiler/src/ast/all.hh b/tiger-compiler/src/ast/all.hh new file mode 100644 index 0000000..c55c3eb --- /dev/null +++ b/tiger-compiler/src/ast/all.hh @@ -0,0 +1,51 @@ +/** + ** \file ast/all.hh + ** \brief Include all the exported headers. + */ + +#pragma once + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/tiger-compiler/src/ast/array-exp.cc b/tiger-compiler/src/ast/array-exp.cc new file mode 100644 index 0000000..8c0f241 --- /dev/null +++ b/tiger-compiler/src/ast/array-exp.cc @@ -0,0 +1,31 @@ +/** + ** \file ast/array-exp.cc + ** \brief Implementation of ast::ArrayExp. + */ + +#include +#include + +namespace ast +{ + ArrayExp::ArrayExp(const Location& location, + NameTy* type_name, + Exp* size, + Exp* init) + : Exp(location) + , type_name_(type_name) + , size_(size) + , init_(init) + {} + + ArrayExp::~ArrayExp() + { + delete type_name_; + delete size_; + delete init_; + } + + void ArrayExp::accept(ConstVisitor& v) const { v(*this); } + + void ArrayExp::accept(Visitor& v) { v(*this); } +} // namespace ast diff --git a/tiger-compiler/src/ast/array-exp.hh b/tiger-compiler/src/ast/array-exp.hh new file mode 100644 index 0000000..ceab385 --- /dev/null +++ b/tiger-compiler/src/ast/array-exp.hh @@ -0,0 +1,60 @@ +/** + ** \file ast/array-exp.hh + ** \brief Declaration of ast::ArrayExp. + */ + +#pragma once + +#include +#include + +namespace ast +{ + /// ArrayExp. + class ArrayExp : public Exp + { + public: + /** \name Ctor & dtor. + ** \{ */ + /// Construct an ArrayExp node. + ArrayExp(const Location& location, NameTy* type_name, Exp* size, Exp* init); + ArrayExp(const ArrayExp&) = delete; + ArrayExp& operator=(const ArrayExp&) = delete; + /// Destroy an ArrayExp node. + ~ArrayExp() override; + /** \} */ + + /// \name Visitors entry point. + /// \{ */ + /// Accept a const visitor \a v. + void accept(ConstVisitor& v) const override; + /// Accept a non-const visitor \a v. + void accept(Visitor& v) override; + /// \} + + /** \name Accessors. + ** \{ */ + /// Return identifier of the stored elements type. + const NameTy& type_name_get() const; + /// Return identifier of the stored elements type. + NameTy& type_name_get(); + /// Return size of the array. + const Exp& size_get() const; + /// Return size of the array. + Exp& size_get(); + /// Return initial value assigned to all elements of the array. + const Exp& init_get() const; + /// Return initial value assigned to all elements of the array. + Exp& init_get(); + /** \} */ + + protected: + /// Identifier of the stored elements type. + NameTy* type_name_; + /// Size of the array. + Exp* size_; + /// Initial value assigned to all elements of the array. + Exp* init_; + }; +} // namespace ast +#include diff --git a/tiger-compiler/src/ast/array-exp.hxx b/tiger-compiler/src/ast/array-exp.hxx new file mode 100644 index 0000000..cab3e8b --- /dev/null +++ b/tiger-compiler/src/ast/array-exp.hxx @@ -0,0 +1,22 @@ +/** + ** \file ast/array-exp.hxx + ** \brief Inline methods of ast::ArrayExp. + */ + +#pragma once + +#include + +namespace ast +{ + + inline const NameTy& ArrayExp::type_name_get() const { return *type_name_; } + inline NameTy& ArrayExp::type_name_get() { return *type_name_; } + + inline const Exp& ArrayExp::size_get() const { return *size_; } + inline Exp& ArrayExp::size_get() { return *size_; } + + inline const Exp& ArrayExp::init_get() const { return *init_; } + inline Exp& ArrayExp::init_get() { return *init_; } + +} // namespace ast diff --git a/tiger-compiler/src/ast/array-ty.cc b/tiger-compiler/src/ast/array-ty.cc new file mode 100644 index 0000000..d7af8b4 --- /dev/null +++ b/tiger-compiler/src/ast/array-ty.cc @@ -0,0 +1,21 @@ +/** + ** \file ast/array-ty.cc + ** \brief Implementation of ast::ArrayTy. + */ + +#include +#include + +namespace ast +{ + ArrayTy::ArrayTy(const Location& location, NameTy* base_type) + : Ty(location) + , base_type_(base_type) + {} + + ArrayTy::~ArrayTy() { delete base_type_; } + + void ArrayTy::accept(ConstVisitor& v) const { v(*this); } + + void ArrayTy::accept(Visitor& v) { v(*this); } +} // namespace ast diff --git a/tiger-compiler/src/ast/array-ty.hh b/tiger-compiler/src/ast/array-ty.hh new file mode 100644 index 0000000..73bb956 --- /dev/null +++ b/tiger-compiler/src/ast/array-ty.hh @@ -0,0 +1,48 @@ +/** + ** \file ast/array-ty.hh + ** \brief Declaration of ast::ArrayTy. + */ + +#pragma once + +#include +#include + +namespace ast +{ + /// ArrayTy. + class ArrayTy : public Ty + { + public: + /** \name Ctor & dtor. + ** \{ */ + /// Construct an ArrayTy node. + ArrayTy(const Location& location, NameTy* base_type); + ArrayTy(const ArrayTy&) = delete; + ArrayTy& operator=(const ArrayTy&) = delete; + /// Destroy an ArrayTy node. + ~ArrayTy() override; + /** \} */ + + /// \name Visitors entry point. + /// \{ */ + /// Accept a const visitor \a v. + void accept(ConstVisitor& v) const override; + /// Accept a non-const visitor \a v. + void accept(Visitor& v) override; + /// \} + + /** \name Accessors. + ** \{ */ + /// Return name of the base type. + const NameTy& base_type_get() const; + /// Return name of the base type. + NameTy& base_type_get(); + /** \} */ + + protected: + /// Name of the base type. + NameTy* base_type_; + }; +} // namespace ast +#include diff --git a/tiger-compiler/src/ast/array-ty.hxx b/tiger-compiler/src/ast/array-ty.hxx new file mode 100644 index 0000000..c679b1c --- /dev/null +++ b/tiger-compiler/src/ast/array-ty.hxx @@ -0,0 +1,16 @@ +/** + ** \file ast/array-ty.hxx + ** \brief Inline methods of ast::ArrayTy. + */ + +#pragma once + +#include + +namespace ast +{ + + inline const NameTy& ArrayTy::base_type_get() const { return *base_type_; } + inline NameTy& ArrayTy::base_type_get() { return *base_type_; } + +} // namespace ast diff --git a/tiger-compiler/src/ast/assert-exp.cc b/tiger-compiler/src/ast/assert-exp.cc new file mode 100644 index 0000000..251f776 --- /dev/null +++ b/tiger-compiler/src/ast/assert-exp.cc @@ -0,0 +1,24 @@ +/** + ** \file ast/assert-exp.cc + ** \brief Implementation of ast::AssertExp. + */ + +#include +#include + +namespace ast +{ + AssertExp::AssertExp(const Location& location, Exp* condition) + : Exp(location) + , cond_{condition} + {} + + AssertExp::~AssertExp() + { + delete cond_; + } + + void AssertExp::accept(ConstVisitor& v) const { v(*this); } + + void AssertExp::accept(Visitor& v) { v(*this); } +} // namespace ast diff --git a/tiger-compiler/src/ast/assert-exp.hh b/tiger-compiler/src/ast/assert-exp.hh new file mode 100644 index 0000000..6650ca4 --- /dev/null +++ b/tiger-compiler/src/ast/assert-exp.hh @@ -0,0 +1,42 @@ +/** + ** \file ast/assert-exp.hh + ** \brief Declaration of ast::AssertExp. + */ + +#pragma once + +#include + +namespace ast +{ + // AssertExp + class AssertExp : public Exp + { + public: + /// Construct an AssertExp node. + AssertExp(const Location& location, Exp* cond); + AssertExp(const AssertExp&) = delete; + AssertExp& operator=(const AssertExp&) = delete; + + /// Destroy an AssertExp node. + ~AssertExp() override; + + + // Here are the visitor methods + /// Accept a const visitor \a v. + void accept(ConstVisitor& v) const override; + /// Accept a non-const visitor \a v. + void accept(Visitor& v) override; + + // Some basic getters + // Return the asserted condition in const form + const Exp& cond_get() const; + // Return the asserted condition + Exp& cond_get(); + + protected: + // The condition that the assertion will evaluate + Exp* cond_; + }; +} // namespace ast +#include diff --git a/tiger-compiler/src/ast/assert-exp.hxx b/tiger-compiler/src/ast/assert-exp.hxx new file mode 100644 index 0000000..d5f8af8 --- /dev/null +++ b/tiger-compiler/src/ast/assert-exp.hxx @@ -0,0 +1,14 @@ +/** + ** \file ast/assert-exp.hxx + ** \brief Inline methods of ast::AssertExp. + */ + +#pragma once + +#include + +namespace ast +{ + inline const Exp& AssertExp::cond_get() const { return *cond_; } + inline Exp& AssertExp::cond_get() { return *cond_; } +} // namespace ast diff --git a/tiger-compiler/src/ast/assert-visitor.hh b/tiger-compiler/src/ast/assert-visitor.hh new file mode 100644 index 0000000..0488c1c --- /dev/null +++ b/tiger-compiler/src/ast/assert-visitor.hh @@ -0,0 +1,51 @@ +/** + ** \file ast/object-visitor.hh + ** \brief Provide default visits for assertion nodes. + */ + +#pragma once + +#include + +namespace ast +{ + template