Allow &meta and :Void to co-exist

This commit is contained in:
2021-03-17 11:44:20 -06:00
parent 023648b90e
commit 188c78073d
4 changed files with 20 additions and 17 deletions

View File

@@ -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<ReaderExp>, 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,

View File

@@ -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 {
"";

View File

@@ -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))

View File

@@ -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]