]> git.mxchange.org Git - simgear.git/blobdiff - simgear/nasal/parse.h
Alas. Fix #pragma magic for GCC <= 4.5.
[simgear.git] / simgear / nasal / parse.h
index 060a1fea63a1d3fa0e1bae37e56011ac767e97ba..1574ea305f3999f869355d4c066d58adf203e572 100644 (file)
@@ -7,7 +7,7 @@
 #include "data.h"
 #include "code.h"
 
-enum {
+enum tok {
     TOK_TOP=1, TOK_AND, TOK_OR, TOK_NOT, TOK_LPAR, TOK_RPAR, TOK_LBRA,
     TOK_RBRA, TOK_LCURL, TOK_RCURL, TOK_MUL, TOK_PLUS, TOK_MINUS, TOK_NEG,
     TOK_DIV, TOK_CAT, TOK_COLON, TOK_DOT, TOK_COMMA, TOK_SEMI,
@@ -19,13 +19,16 @@ enum {
     TOK_FORINDEX
 };
 
+// Precedence rules
+enum { PREC_BINARY=1, PREC_REVERSE, PREC_PREFIX, PREC_SUFFIX };
+
 struct Token {
-    int type;
+    enum tok type;
     int line;
     char* str;
     int strlen;
+    int rule;
     double num;
-    struct Token* parent;
     struct Token* next;
     struct Token* prev;
     struct Token* children;
@@ -60,7 +63,7 @@ struct Parser {
     // Computed line number table for the lexer
     int* lines;
     int  nLines;
-    
+
     struct CodeGenerator* cg;
 };
 
@@ -77,6 +80,11 @@ struct CodeGenerator {
     int nLineIps; // number of pairs
     int nextLineIp;
 
+    int* argSyms;
+    int* optArgSyms;
+    int* optArgVals;
+    naRef restArgSym;
+
     // Stack of "loop" frames for break/continue statements
     struct {
         int breakIP;
@@ -94,6 +102,7 @@ void naParseInit(struct Parser* p);
 void* naParseAlloc(struct Parser* p, int bytes);
 void naParseDestroy(struct Parser* p);
 void naLex(struct Parser* p);
+int naLexUtf8C(char* s, int len, int* used); /* in utf8lib.c */
 naRef naCodeGen(struct Parser* p, struct Token* block, struct Token* arglist);
 
 void naParse(struct Parser* p);