diff --git a/src/kiss/Helpers.hx b/src/kiss/Helpers.hx index 922f6b3..b12c8f8 100644 --- a/src/kiss/Helpers.hx +++ b/src/kiss/Helpers.hx @@ -6,6 +6,7 @@ import haxe.macro.PositionTools; import hscript.Parser; import hscript.Interp; import kiss.Reader; +import kiss.ReaderExp; import kiss.CompileError; import kiss.Kiss; import kiss.SpecialForms; @@ -246,7 +247,7 @@ class Helpers { interp.variables.set("ReaderExp", ReaderExpDef); interp.variables.set("nextToken", Reader.nextToken.bind(_, "a token")); interp.variables.set("kiss", { - Reader: { + ReaderExp: { ReaderExpDef: ReaderExpDef }, Operand: { diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index 635a283..d5c2761 100644 --- a/src/kiss/Kiss.hx +++ b/src/kiss/Kiss.hx @@ -7,6 +7,7 @@ import haxe.macro.Expr; import haxe.io.Path; import kiss.Stream; import kiss.Reader; +import kiss.ReaderExp; import kiss.FieldForms; import kiss.SpecialForms; import kiss.Macros; diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index c72ddc9..6ca505e 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -3,6 +3,7 @@ package kiss; import haxe.macro.Expr; import haxe.macro.Context; import kiss.Reader; +import kiss.ReaderExp; import kiss.Kiss; import kiss.CompileError; diff --git a/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index d136b46..bd3d288 100644 --- a/src/kiss/Prelude.hx +++ b/src/kiss/Prelude.hx @@ -3,6 +3,7 @@ package kiss; using Std; import kiss.Operand; +import kiss.ReaderExp; import haxe.ds.Either; import haxe.Constraints; #if (!macro && hxnodejs) diff --git a/src/kiss/Reader.hx b/src/kiss/Reader.hx index 417ced0..6b67fc6 100644 --- a/src/kiss/Reader.hx +++ b/src/kiss/Reader.hx @@ -3,16 +3,12 @@ package kiss; import haxe.ds.Option; import kiss.Stream; import kiss.Kiss; +import kiss.ReaderExp; using kiss.Reader; using kiss.Stream; using kiss.Helpers; -typedef ReaderExp = { - pos:Position, - def:ReaderExpDef -}; - class UnmatchedBracketSignal { public var type:String; public var position:Stream.Position; @@ -23,21 +19,6 @@ class UnmatchedBracketSignal { } } -enum ReaderExpDef { - CallExp(func:ReaderExp, args:Array); // (f a1 a2...) - ListExp(exps:Array); // [v1 v2 v3] - StrExp(s:String); // "literal" - Symbol(name:String); // s - RawHaxe(code:String); // #| haxeCode() |# - TypedExp(path:String, exp:ReaderExp); // :type [exp] - MetaExp(meta:String, exp:ReaderExp); // &meta [exp] - FieldExp(field:String, exp:ReaderExp); // .field [exp] - KeyValueExp(key:ReaderExp, value:ReaderExp); // =>key value - Quasiquote(exp:ReaderExp); // `[exp] - Unquote(exp:ReaderExp); // ,[exp] - UnquoteList(exp:ReaderExp); // ,@[exp] -} - typedef ReadFunction = (Stream, KissState) -> Null; typedef ReadTable = Map; diff --git a/src/kiss/ReaderExp.hx b/src/kiss/ReaderExp.hx new file mode 100644 index 0000000..a0dae77 --- /dev/null +++ b/src/kiss/ReaderExp.hx @@ -0,0 +1,23 @@ +package kiss; + +import kiss.Stream; + +typedef ReaderExp = { + pos:Position, + def:ReaderExpDef +}; + +enum ReaderExpDef { + CallExp(func:ReaderExp, args:Array); // (f a1 a2...) + ListExp(exps:Array); // [v1 v2 v3] + StrExp(s:String); // "literal" + Symbol(name:String); // s + RawHaxe(code:String); // #| haxeCode() |# + TypedExp(path:String, exp:ReaderExp); // :type [exp] + MetaExp(meta:String, exp:ReaderExp); // &meta [exp] + FieldExp(field:String, exp:ReaderExp); // .field [exp] + KeyValueExp(key:ReaderExp, value:ReaderExp); // =>key value + Quasiquote(exp:ReaderExp); // `[exp] + Unquote(exp:ReaderExp); // ,[exp] + UnquoteList(exp:ReaderExp); // ,@[exp] +} diff --git a/src/kiss/SpecialForms.hx b/src/kiss/SpecialForms.hx index 031f83d..f403e9e 100644 --- a/src/kiss/SpecialForms.hx +++ b/src/kiss/SpecialForms.hx @@ -3,6 +3,7 @@ package kiss; import haxe.macro.Expr; import haxe.macro.Context; import kiss.Reader; +import kiss.ReaderExp; import uuid.Uuid; import kiss.Kiss;