From 188c78073d5bf2b2a92b05c60edfea5e87fb9b99 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 17 Mar 2021 11:44:20 -0600 Subject: [PATCH] Allow &meta and :Void to co-exist --- kiss/src/kiss/FieldForms.hx | 24 ++++++++++++------- kiss/src/kiss/Helpers.hx | 2 +- projects/flixel/rpg-tutorial/source/Coin.kiss | 8 +++---- .../flixel/rpg-tutorial/source/Player.kiss | 3 +-- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/kiss/src/kiss/FieldForms.hx b/kiss/src/kiss/FieldForms.hx index 671d7ae0..82513d29 100644 --- a/kiss/src/kiss/FieldForms.hx +++ b/kiss/src/kiss/FieldForms.hx @@ -66,15 +66,26 @@ class FieldForms { static function fieldName(formName:String, nameExp:ReaderExp) { return switch (nameExp.def) { - case Symbol(name) | TypedExp(_, {pos: _, def: Symbol(name)}): + case Symbol(name): name; - case MetaExp(_, nameExp): + case MetaExp(_, nameExp) | TypedExp(_, nameExp): fieldName(formName, nameExp); default: - throw CompileError.fromExp(nameExp, 'The first argument to $formName should be a variable name or typed variable name.'); + throw CompileError.fromExp(nameExp, 'The first argument to $formName should be a variable name, :Typed variable name, and/or &meta variable name.'); }; } + static function isVoid(nameExp:ReaderExp) { + return switch (nameExp.def) { + case MetaExp(_, nameExp): + isVoid(nameExp); + case TypedExp("Void", _) | Symbol("new"): + true; + default: + false; + } + } + static function varOrProperty(formName:String, wholeExp:ReaderExp, args:Array, k:KissState):Field { wholeExp.checkNumArgs(2, 3, '($formName [optional: &mut] [optional :type] [variable] [value])'); @@ -98,12 +109,7 @@ class FieldForms { var name = fieldName(formName, args[0]); var access = fieldAccess(formName, name, args[0]); - var returnsValue = switch (args[0].def) { - case TypedExp("Void", _): - false; - default: - true; - }; + var returnsValue = !isVoid(args[0]); return { name: name, diff --git a/kiss/src/kiss/Helpers.hx b/kiss/src/kiss/Helpers.hx index d51b9f09..f4df8c99 100644 --- a/kiss/src/kiss/Helpers.hx +++ b/kiss/src/kiss/Helpers.hx @@ -71,7 +71,7 @@ class Helpers { case Symbol(name) | TypedExp(_, {pos: _, def: Symbol(name)}): name; default: - throw CompileError.fromExp(name, 'function name should be a symbol or typed symbol'); + throw CompileError.fromExp(name, 'function name should be a symbol or :Typed symbol'); }; } else { ""; diff --git a/projects/flixel/rpg-tutorial/source/Coin.kiss b/projects/flixel/rpg-tutorial/source/Coin.kiss index ae4c73a5..3e739c8d 100644 --- a/projects/flixel/rpg-tutorial/source/Coin.kiss +++ b/projects/flixel/rpg-tutorial/source/Coin.kiss @@ -1,9 +1,8 @@ (defmethod new [:Float x :Float y] (super x y) - (loadGraphic AssetPaths.coin__png false 8 8) - (return)) + (loadGraphic AssetPaths.coin__png false 8 8)) -(defmethod &override kill [] +(defmethod &override :Void kill [] (set alive false) (FlxTween.tween this @@ -13,8 +12,7 @@ 0.33 (object ease FlxEase.circOut - onComplete finishKill)) - (return)) + onComplete finishKill))) (defmethod finishKill [_] (set exists false)) \ No newline at end of file diff --git a/projects/flixel/rpg-tutorial/source/Player.kiss b/projects/flixel/rpg-tutorial/source/Player.kiss index d52ed742..4ce3257c 100644 --- a/projects/flixel/rpg-tutorial/source/Player.kiss +++ b/projects/flixel/rpg-tutorial/source/Player.kiss @@ -10,8 +10,7 @@ (animation.add "d" [0 1 0 2] 6 false) (set drag.x (set drag.y 1600)) (setSize 8 8) - (offset.set 4 4) - (return)) + (offset.set 4 4)) (defmethod updateMovement [] (let [[&mut up &mut down &mut left &mut right]