aboutsummaryrefslogtreecommitdiff
path: root/jim.h
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-01-24 12:56:45 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:45 +1000
commit5dbbcf87423edb96cde7dfe59a2c8ef0a9d8ae2f (patch)
tree80fbe36dad45f9ee8ca33464933abf2a43f22db1 /jim.h
parent9373863b490be45da1b823949ebd76425057dd3e (diff)
downloadjimtcl-5dbbcf87423edb96cde7dfe59a2c8ef0a9d8ae2f.zip
jimtcl-5dbbcf87423edb96cde7dfe59a2c8ef0a9d8ae2f.tar.gz
jimtcl-5dbbcf87423edb96cde7dfe59a2c8ef0a9d8ae2f.tar.bz2
Simplify and speed up expr
*: Reuse the ParseTokenList/ScriptToken machinery for 'expr' *: This is simpler than managing separate opcode/obj arrays *: expr opcodes are now in the same namespace as token types *: expr identifies int and double during parsing *: Move the 'while' common expr optimisations into Jim_EvalExpression *: Add a special trueObj and falseObj to help with these boolean optimisations *: Add lazy versions as the byte code is created instead of at the end *: Avoid repeated conversion attempts to int *: Once an object fails conversion to int and succeeds conversion to double, invalidate the string rep so the int conversion attempt no longer happens *: Also, avoid converting non-ints to int in expression optimisation *: No need for a string token for SEP and EOL tokens *: Fix shimmering of int -> double *: When an int shimmers to a double during an expression, remember that the value was originally an int (via a new type, coerced double)
Diffstat (limited to 'jim.h')
-rw-r--r--jim.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/jim.h b/jim.h
index dc4adfa..6ff5e33 100644
--- a/jim.h
+++ b/jim.h
@@ -515,6 +515,8 @@ typedef struct Jim_Interp {
Jim_Obj *freeList; /* Linked list of all the unused objects. */
Jim_Obj *currentScriptObj; /* Script currently in execution. */
Jim_Obj *emptyObj; /* Shared empty string object. */
+ Jim_Obj *trueObj; /* Shared true int object. */
+ Jim_Obj *falseObj; /* Shared false int object. */
unsigned jim_wide referenceNextId; /* Next id for reference. */
struct Jim_HashTable references; /* References hash table. */
jim_wide lastCollectId; /* reference max Id of the last GC
@@ -549,6 +551,8 @@ typedef struct Jim_Interp {
#define Jim_SetResultString(i,s,l) Jim_SetResult(i, Jim_NewStringObj(i,s,l))
#define Jim_SetResultInt(i,intval) Jim_SetResult(i, Jim_NewIntObj(i,intval))
#define Jim_SetEmptyResult(i) Jim_SetResult(i, (i)->emptyObj)
+#define Jim_SetTrueResult(i) Jim_SetResult(i, (i)->trueObj)
+#define Jim_SetFalseResult(i) Jim_SetResult(i, (i)->falseObj)
#define Jim_GetResult(i) ((i)->result)
#define Jim_CmdPrivData(i) ((i)->cmdPrivData)