Move ReaderExp to its own file

This commit is contained in:
2021-05-21 16:13:00 -06:00
parent 64ea5c79c9
commit 85658df321
19 changed files with 98 additions and 21 deletions

View File

@@ -6,6 +6,7 @@ import haxe.macro.PositionTools;
import hscript.Parser; import hscript.Parser;
import hscript.Interp; import hscript.Interp;
import kiss.Reader; import kiss.Reader;
import kiss.ReaderExp;
import kiss.CompileError; import kiss.CompileError;
import kiss.Kiss; import kiss.Kiss;
import kiss.SpecialForms; import kiss.SpecialForms;
@@ -246,7 +247,7 @@ class Helpers {
interp.variables.set("ReaderExp", ReaderExpDef); interp.variables.set("ReaderExp", ReaderExpDef);
interp.variables.set("nextToken", Reader.nextToken.bind(_, "a token")); interp.variables.set("nextToken", Reader.nextToken.bind(_, "a token"));
interp.variables.set("kiss", { interp.variables.set("kiss", {
Reader: { ReaderExp: {
ReaderExpDef: ReaderExpDef ReaderExpDef: ReaderExpDef
}, },
Operand: { Operand: {

View File

@@ -7,6 +7,7 @@ import haxe.macro.Expr;
import haxe.io.Path; import haxe.io.Path;
import kiss.Stream; import kiss.Stream;
import kiss.Reader; import kiss.Reader;
import kiss.ReaderExp;
import kiss.FieldForms; import kiss.FieldForms;
import kiss.SpecialForms; import kiss.SpecialForms;
import kiss.Macros; import kiss.Macros;

View File

@@ -3,6 +3,7 @@ package kiss;
import haxe.macro.Expr; import haxe.macro.Expr;
import haxe.macro.Context; import haxe.macro.Context;
import kiss.Reader; import kiss.Reader;
import kiss.ReaderExp;
import kiss.Kiss; import kiss.Kiss;
import kiss.CompileError; import kiss.CompileError;

View File

@@ -3,6 +3,7 @@ package kiss;
using Std; using Std;
import kiss.Operand; import kiss.Operand;
import kiss.ReaderExp;
import haxe.ds.Either; import haxe.ds.Either;
import haxe.Constraints; import haxe.Constraints;
#if (!macro && hxnodejs) #if (!macro && hxnodejs)

View File

@@ -3,16 +3,12 @@ package kiss;
import haxe.ds.Option; import haxe.ds.Option;
import kiss.Stream; import kiss.Stream;
import kiss.Kiss; import kiss.Kiss;
import kiss.ReaderExp;
using kiss.Reader; using kiss.Reader;
using kiss.Stream; using kiss.Stream;
using kiss.Helpers; using kiss.Helpers;
typedef ReaderExp = {
pos:Position,
def:ReaderExpDef
};
class UnmatchedBracketSignal { class UnmatchedBracketSignal {
public var type:String; public var type:String;
public var position:Stream.Position; public var position:Stream.Position;
@@ -23,21 +19,6 @@ class UnmatchedBracketSignal {
} }
} }
enum ReaderExpDef {
CallExp(func:ReaderExp, args:Array<ReaderExp>); // (f a1 a2...)
ListExp(exps:Array<ReaderExp>); // [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<ReaderExpDef>; typedef ReadFunction = (Stream, KissState) -> Null<ReaderExpDef>;
typedef ReadTable = Map<String, ReadFunction>; typedef ReadTable = Map<String, ReadFunction>;

View File

@@ -0,0 +1,23 @@
package kiss;
import kiss.Stream;
typedef ReaderExp = {
pos:Position,
def:ReaderExpDef
};
enum ReaderExpDef {
CallExp(func:ReaderExp, args:Array<ReaderExp>); // (f a1 a2...)
ListExp(exps:Array<ReaderExp>); // [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]
}

View File

@@ -3,6 +3,7 @@ package kiss;
import haxe.macro.Expr; import haxe.macro.Expr;
import haxe.macro.Context; import haxe.macro.Context;
import kiss.Reader; import kiss.Reader;
import kiss.ReaderExp;
import uuid.Uuid; import uuid.Uuid;
import kiss.Kiss; import kiss.Kiss;

View File

@@ -0,0 +1,9 @@
package test;
import kiss.Kiss;
import kiss.Prelude;
import nap.BoolExpInterp;
import nap.Archive;
@:build(kiss.Kiss.build())
class TestMain {}

View File

@@ -0,0 +1,25 @@
(defun :Void main []
(assert (BoolExpInterp.eval "true" []))
(assert !(BoolExpInterp.eval "false" []))
(assert !(BoolExpInterp.eval "flag" []))
(assert (BoolExpInterp.eval "flag" ["flag"]))
(assert !(BoolExpInterp.eval "(and flag false)" ["flag"]))
(assert (BoolExpInterp.eval "(or flag otherFlag)" ["otherFlag"]))
//trace(error);
(let [systems
[]
archive
(new Archive "src/test/example-archive" systems)]
(print "TODO")))
/*
(let [e (new Entry "name")]
(dictSet e.components "f" [5])
(dictSet e.components "b" [(object c "d")])
(let [s (haxe.Json.stringify e)
:Entry e2 (haxe.Json.parse s)]
// can't call Entry methods on e2
(print s))))
*/

View File

@@ -0,0 +1 @@
"Rafael Krux"

View File

@@ -0,0 +1 @@
"Kevin MacLeod"

View File

@@ -0,0 +1 @@
"Adventure"

View File

@@ -0,0 +1 @@
"Ancient Rite"

View File

@@ -0,0 +1,4 @@
[
["song", 1],
["western", 1]
]

View File

@@ -0,0 +1,4 @@
[
["song", 1],
["religious", 1]
]

View File

@@ -0,0 +1,11 @@
{
"id": "song1",
"components": [
["Name", "name1"],
["Author", "author1"],
["Tags", "tags1"]
],
"files": [
"Adventure.mp3"
]
}

View File

@@ -0,0 +1,11 @@
{
"id": "song2",
"components": [
["Name", "name2"],
["Author", "author2"],
["Tags", "tags2"]
],
"files": [
"Ancient Rite.mp3"
]
}