Changed my mind about oftype/typeof

This commit is contained in:
2022-09-07 15:02:17 +01:00
parent 4137b7f057
commit 23fdec541d
7 changed files with 10 additions and 10 deletions

View File

@@ -31,7 +31,7 @@ DONE: are compounds shallow or deep copies? Deep copies
DONE: third output stream, for lexer/parser/compiler/interpreter errors DONE: third output stream, for lexer/parser/compiler/interpreter errors
DONE: Assertion-based test scripts DONE: Assertion-based test scripts
DONE: Import/export keywords DONE: Import/export keywords
DONE: A way to check the type of a variable (oftype keyword) DONE: A way to check the type of a variable (typeOf keyword)
DONE: slice and dot notation around the builtin _index and _dot functions DONE: slice and dot notation around the builtin _index and _dot functions

View File

@@ -45,12 +45,12 @@ The following list of keywords cannot be used as names, due to their significanc
* int * int
* null * null
* of * of
* oftype
* print * print
* return * return
* string * string
* true * true
* type * type
* typeof
* var * var
* while * while

View File

@@ -11,5 +11,5 @@ t = astype [float]; //redefnition
var b: u; var b: u;
print oftype a; //<[<int>]> print typeof a; //<[<int>]>
print oftype b; //<[<float>]> print typeof b; //<[<float>]>

View File

@@ -32,7 +32,7 @@
assert func() == 69, "import/export of functions failed"; assert func() == 69, "import/export of functions failed";
} }
//test that variables retain their types with the oftype keyword //test that variables retain their types with the typeof keyword
{ {
var t: type = int; var t: type = int;
@@ -42,7 +42,7 @@
{ {
import t; import t;
assert oftype t == type, "type retention failed"; assert typeof t == type, "type retention failed";
} }
print "All good"; print "All good";

View File

@@ -34,7 +34,7 @@ KeywordType keywordTypes[] = {
{TOKEN_RETURN, "return"}, {TOKEN_RETURN, "return"},
{TOKEN_TYPE, "type"}, {TOKEN_TYPE, "type"},
{TOKEN_ASTYPE, "astype"}, {TOKEN_ASTYPE, "astype"},
{TOKEN_OFTYPE, "oftype"}, {TOKEN_TYPEOF, "typeof"},
{TOKEN_VAR, "var"}, {TOKEN_VAR, "var"},
{TOKEN_WHILE, "while"}, {TOKEN_WHILE, "while"},

View File

@@ -136,7 +136,7 @@ static Opcode asType(Parser* parser, Node** nodeHandle) {
return OP_EOF; return OP_EOF;
} }
static Opcode ofType(Parser* parser, Node** nodeHandle) { static Opcode typeOf(Parser* parser, Node** nodeHandle) {
Node* rhs = NULL; Node* rhs = NULL;
parsePrecedence(parser, &rhs, PREC_TERNARY); parsePrecedence(parser, &rhs, PREC_TERNARY);
emitNodeUnary(nodeHandle, OP_TYPE_OF, rhs); emitNodeUnary(nodeHandle, OP_TYPE_OF, rhs);
@@ -821,7 +821,7 @@ ParseRule parseRules[] = { //must match the token types
{NULL, NULL, PREC_NONE},// TOKEN_RETURN, {NULL, NULL, PREC_NONE},// TOKEN_RETURN,
{atomic, NULL, PREC_NONE},// TOKEN_TYPE, {atomic, NULL, PREC_NONE},// TOKEN_TYPE,
{asType, NULL, PREC_PRIMARY},// TOKEN_ASTYPE, {asType, NULL, PREC_PRIMARY},// TOKEN_ASTYPE,
{ofType, NULL, PREC_CALL},// TOKEN_OFTYPE, {typeOf, NULL, PREC_CALL},// TOKEN_TYPEOF,
{NULL, NULL, PREC_NONE},// TOKEN_VAR, {NULL, NULL, PREC_NONE},// TOKEN_VAR,
{NULL, NULL, PREC_NONE},// TOKEN_WHILE, {NULL, NULL, PREC_NONE},// TOKEN_WHILE,

View File

@@ -32,7 +32,7 @@ typedef enum TokenType {
TOKEN_RETURN, TOKEN_RETURN,
TOKEN_TYPE, TOKEN_TYPE,
TOKEN_ASTYPE, TOKEN_ASTYPE,
TOKEN_OFTYPE, TOKEN_TYPEOF,
TOKEN_VAR, TOKEN_VAR,
TOKEN_WHILE, TOKEN_WHILE,