Reusable KissState
This commit is contained in:
@@ -27,33 +27,40 @@ typedef KissState = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class Kiss {
|
class Kiss {
|
||||||
|
public static function defaultKissState():KissState {
|
||||||
|
var className = Context.getLocalClass().get().name;
|
||||||
|
|
||||||
|
var k = {
|
||||||
|
className: className,
|
||||||
|
readTable: Reader.builtins(),
|
||||||
|
fieldForms: FieldForms.builtins(),
|
||||||
|
specialForms: SpecialForms.builtins(),
|
||||||
|
macros: Macros.builtins(),
|
||||||
|
wrapListExps: true
|
||||||
|
};
|
||||||
|
|
||||||
|
// Helpful aliases
|
||||||
|
k.defAlias("print", Symbol("Prelude.print"));
|
||||||
|
k.defAlias("groups", Symbol("Prelude.groups"));
|
||||||
|
k.defAlias("zip", Symbol("Prelude.zip"));
|
||||||
|
k.defAlias("map", Symbol("Lambda.map"));
|
||||||
|
k.defAlias("filter", Symbol("Lambda.filter")); // TODO use truthy as the default filter function
|
||||||
|
k.defAlias("has", Symbol("Lambda.has"));
|
||||||
|
k.defAlias("count", Symbol("Lambda.count"));
|
||||||
|
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Build a Haxe class from a corresponding .kiss file
|
Build a Haxe class from a corresponding .kiss file
|
||||||
**/
|
**/
|
||||||
macro static public function build(kissFile:String):Array<Field> {
|
macro static public function build(kissFile:String, ?k:KissState):Array<Field> {
|
||||||
try {
|
try {
|
||||||
var classFields = Context.getBuildFields();
|
var classFields = Context.getBuildFields();
|
||||||
var className = Context.getLocalClass().get().name;
|
|
||||||
|
|
||||||
var stream = new Stream(kissFile);
|
var stream = new Stream(kissFile);
|
||||||
|
|
||||||
var k = {
|
if (k == null)
|
||||||
className: className,
|
k = defaultKissState();
|
||||||
readTable: Reader.builtins(),
|
|
||||||
fieldForms: FieldForms.builtins(),
|
|
||||||
specialForms: SpecialForms.builtins(),
|
|
||||||
macros: Macros.builtins(),
|
|
||||||
wrapListExps: true
|
|
||||||
};
|
|
||||||
|
|
||||||
// Helpful aliases
|
|
||||||
k.defAlias("print", Symbol("Prelude.print"));
|
|
||||||
k.defAlias("groups", Symbol("Prelude.groups"));
|
|
||||||
k.defAlias("zip", Symbol("Prelude.zip"));
|
|
||||||
k.defAlias("map", Symbol("Lambda.map"));
|
|
||||||
k.defAlias("filter", Symbol("Lambda.filter")); // TODO use truthy as the default filter function
|
|
||||||
k.defAlias("has", Symbol("Lambda.has"));
|
|
||||||
k.defAlias("count", Symbol("Lambda.count"));
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
stream.dropWhitespace();
|
stream.dropWhitespace();
|
||||||
|
Reference in New Issue
Block a user