mirror of
https://github.com/krgamestudios/Toy.git
synced 2026-04-15 23:04:08 +10:00
Added the opaque keyword
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
//test the opaque data type works
|
//test the opaque data type works
|
||||||
|
|
||||||
var o = produce();
|
var o: opaque = produce();
|
||||||
|
|
||||||
consume(o);
|
consume(o);
|
||||||
|
|
||||||
|
|||||||
@@ -570,6 +570,8 @@ static bool execVarDecl(Interpreter* interpreter, bool lng) {
|
|||||||
parseCompoundToPureValues(interpreter, &val);
|
parseCompoundToPureValues(interpreter, &val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: could restrict opaque data to only opaque variables
|
||||||
|
|
||||||
//BUGFIX: allow easy coercion on decl
|
//BUGFIX: allow easy coercion on decl
|
||||||
if (AS_TYPE(type).typeOf == LITERAL_FLOAT && IS_INTEGER(val)) {
|
if (AS_TYPE(type).typeOf == LITERAL_FLOAT && IS_INTEGER(val)) {
|
||||||
val = TO_FLOAT_LITERAL(AS_INTEGER(val));
|
val = TO_FLOAT_LITERAL(AS_INTEGER(val));
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ KeywordType keywordTypes[] = {
|
|||||||
{TOKEN_FLOAT, "float"},
|
{TOKEN_FLOAT, "float"},
|
||||||
{TOKEN_STRING, "string"},
|
{TOKEN_STRING, "string"},
|
||||||
{TOKEN_FUNCTION, "fn"},
|
{TOKEN_FUNCTION, "fn"},
|
||||||
|
{TOKEN_OPAQUE, "opaque"},
|
||||||
{TOKEN_ANY, "any"},
|
{TOKEN_ANY, "any"},
|
||||||
|
|
||||||
//other keywords
|
//other keywords
|
||||||
|
|||||||
@@ -816,6 +816,7 @@ ParseRule parseRules[] = { //must match the token types
|
|||||||
{NULL, NULL, PREC_NONE},// TOKEN_ARRAY,
|
{NULL, NULL, PREC_NONE},// TOKEN_ARRAY,
|
||||||
{NULL, NULL, PREC_NONE},// TOKEN_DICTIONARY,
|
{NULL, NULL, PREC_NONE},// TOKEN_DICTIONARY,
|
||||||
{NULL, NULL, PREC_NONE},// TOKEN_FUNCTION,
|
{NULL, NULL, PREC_NONE},// TOKEN_FUNCTION,
|
||||||
|
{NULL, NULL, PREC_NONE},// TOKEN_OPAQUE,
|
||||||
{NULL, NULL, PREC_NONE},// TOKEN_ANY,
|
{NULL, NULL, PREC_NONE},// TOKEN_ANY,
|
||||||
|
|
||||||
//keywords and reserved words
|
//keywords and reserved words
|
||||||
@@ -1486,6 +1487,10 @@ static Literal readTypeToLiteral(Parser* parser) {
|
|||||||
AS_TYPE(literal).typeOf = LITERAL_FUNCTION;
|
AS_TYPE(literal).typeOf = LITERAL_FUNCTION;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case TOKEN_OPAQUE:
|
||||||
|
AS_TYPE(literal).typeOf = LITERAL_OPAQUE;
|
||||||
|
break;
|
||||||
|
|
||||||
case TOKEN_ANY:
|
case TOKEN_ANY:
|
||||||
AS_TYPE(literal).typeOf = LITERAL_ANY;
|
AS_TYPE(literal).typeOf = LITERAL_ANY;
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ typedef enum TokenType {
|
|||||||
TOKEN_ARRAY,
|
TOKEN_ARRAY,
|
||||||
TOKEN_DICTIONARY,
|
TOKEN_DICTIONARY,
|
||||||
TOKEN_FUNCTION,
|
TOKEN_FUNCTION,
|
||||||
|
TOKEN_OPAQUE,
|
||||||
TOKEN_ANY,
|
TOKEN_ANY,
|
||||||
|
|
||||||
//keywords and reserved words
|
//keywords and reserved words
|
||||||
@@ -89,4 +90,3 @@ typedef enum TokenType {
|
|||||||
TOKEN_ERROR,
|
TOKEN_ERROR,
|
||||||
TOKEN_EOF,
|
TOKEN_EOF,
|
||||||
} TokenType;
|
} TokenType;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user