🎉 ifl
command
This commit is contained in:
parent
32271498be
commit
f5e25dfc8d
91
src/command/ifl.js
Normal file
91
src/command/ifl.js
Normal file
@ -0,0 +1,91 @@
|
||||
Juicescript.command_define({
|
||||
name: "ifl",
|
||||
alias: ["if"],
|
||||
|
||||
validate: function(runner){
|
||||
// COUNT //
|
||||
runner.argument_validate_count({min: 1, max: 3});
|
||||
if(runner.has_error) return;
|
||||
|
||||
|
||||
// TYPES //
|
||||
// single value
|
||||
if(runner.command.argument.length === 1){
|
||||
runner.argument_validate_type(1, Juicescript.argument_type.VALUE);
|
||||
return;
|
||||
}
|
||||
|
||||
// single value negated
|
||||
if(runner.command.argument.length === 2){
|
||||
runner.argument_validate_type(1, Juicescript.argument_type.OPERATOR);
|
||||
runner.argument_validate_type(2, Juicescript.argument_type.VALUE);
|
||||
return;
|
||||
}
|
||||
|
||||
// two values compared
|
||||
runner.argument_validate_type(1, Juicescript.argument_type.VALUE);
|
||||
runner.argument_validate_type(2, Juicescript.argument_type.OPERATOR);
|
||||
runner.argument_validate_type(3, Juicescript.argument_type.VALUE);
|
||||
},
|
||||
|
||||
execute: function(runner){
|
||||
// EVALUATE CONDITION //
|
||||
let is_true = this.evaluate(runner);
|
||||
|
||||
|
||||
// MAYBE JUMP OVER NEXT COMMAND //
|
||||
if(!is_true){
|
||||
// increase command counter by one
|
||||
runner.counter++;
|
||||
}
|
||||
},
|
||||
|
||||
evaluate: function(runner){
|
||||
// SINGLE VALUE //
|
||||
if(runner.command.argument.length === 1){
|
||||
// get value
|
||||
let value = runner.argument_value(1);
|
||||
|
||||
// compare to true
|
||||
return (value === true);
|
||||
}
|
||||
|
||||
|
||||
// SINGLE VALUE NEGATED //
|
||||
if(runner.command.argument.length === 2){
|
||||
// make sure first argument is an exclamation mark
|
||||
if(runner.command.argument[0].operator !== Juicescript.token_type.NOT){
|
||||
// ignore with error
|
||||
runner.error("expected NOT, but got " + Juicescript.token_type.name(runner.command.argument[0].operator));
|
||||
return false;
|
||||
}
|
||||
|
||||
// get value
|
||||
let value = runner.argument_value(2);
|
||||
|
||||
// compare to true and negate
|
||||
return !(value === true);
|
||||
}
|
||||
|
||||
|
||||
// TWO VALUES COMPARED //
|
||||
// get operator
|
||||
let operator = runner.command.argument[1].operator;
|
||||
|
||||
// get two values
|
||||
let a = runner.argument_value(1);
|
||||
let b = runner.argument_value(3);
|
||||
|
||||
// do compare
|
||||
if(operator === Juicescript.token_type.EQUAL_EQUAL) return (a === b);
|
||||
if(operator === Juicescript.token_type.NOT_EQUAL) return (a !== b);
|
||||
if(operator === Juicescript.token_type.GREATER) return (a > b);
|
||||
if(operator === Juicescript.token_type.GREATER_EQUAL) return (a >= b);
|
||||
if(operator === Juicescript.token_type.LESS) return (a < b);
|
||||
if(operator === Juicescript.token_type.LESS_EQUAL) return (a <= b);
|
||||
|
||||
// if we reach this, the operator is invalid
|
||||
runner.error("expected COMPARE OPERATOR, but got " + Juicescript.token_type.name(operator));
|
||||
return false;
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user