From 2b5351eb4624ce3c3ada994caaaea77c9d397eb8 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 15 Oct 2019 00:50:03 -0400 Subject: Compiler extensions have been tested to work. --- stdlib/source/test/lux.lux | 9 ++++--- stdlib/source/test/lux/extension.lux | 46 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 stdlib/source/test/lux/extension.lux (limited to 'stdlib/source/test') diff --git a/stdlib/source/test/lux.lux b/stdlib/source/test/lux.lux index d9fbc7b1d..4be2dcf27 100644 --- a/stdlib/source/test/lux.lux +++ b/stdlib/source/test/lux.lux @@ -136,6 +136,7 @@ ["#." type] ["#." world] ["#." host] + ["#." extension] ["#." target #_ ["#/." jvm]]] )) @@ -368,9 +369,11 @@ /tool.test /type.test /world.test)) - /host.test - ($_ _.and - /target/jvm.test) + (!bundle ($_ _.and + /host.test + /extension.test + ($_ _.and + /target/jvm.test))) ))) (program: args diff --git a/stdlib/source/test/lux/extension.lux b/stdlib/source/test/lux/extension.lux new file mode 100644 index 000000000..f73ad63a1 --- /dev/null +++ b/stdlib/source/test/lux/extension.lux @@ -0,0 +1,46 @@ +(.module: + [lux #* + [abstract + [monad (#+ do)]] + [control + ["<>" parser + ["" code] + ["" analysis]]] + [data + ["." text ("#@." equivalence) + ["%" format (#+ format)]]] + [tool + [compiler + ["." analysis] + ["." synthesis] + ["." directive] + [phase + [analysis + ["." type]]]]] + ["_" test (#+ Test)]] + {1 + ["." / (#+ analysis: synthesis: directive:)]}) + +(def: my-extension "example YOLO") + +(analysis: (..my-extension self phase {parameters (<>.some .any)}) + (do @ + [_ (type.infer .Text)] + (wrap (#analysis.Extension self (list))))) + +(synthesis: (..my-extension self phase {parameters (<>.some .any)}) + (wrap (synthesis.text self))) + +(directive: (..my-extension self phase {parameters (<>.some .any)}) + (do @ + [#let [_ (log! (format "directive: " (%.text self)))]] + (wrap directive.no-requirements))) + +("example YOLO") + +(def: #export test + Test + (<| (_.context (%.name (name-of /._))) + (_.test "Can define and user analysis & synthesis extensions." + (text@= ("example YOLO") + "example YOLO")))) -- cgit v1.2.3