[Commit] nickle ChangeLog,1.49,1.50 compile.c,1.151,1.152
Keith Packard
commit at keithp.com
Tue May 25 20:13:09 PDT 2004
- Previous message: [Commit] cairo_u128 ChangeLog, 1.1, 1.2 Makefile, 1.3,
1.4 cairo_test.c, 1.3, 1.4 cairo_uint128.c, 1.3,
1.4 cairo_uint128.h, 1.3, 1.4 checkdata.5c, 1.3,
1.4 makedata.5c, 1.1.1.1, 1.2
- Next message: [Commit] nickle ChangeLog,1.50,1.51
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Committed by: keithp
Update of /local/src/CVS/nickle
In directory home.keithp.com:/tmp/cvs-serv30740
Modified Files:
ChangeLog compile.c
Log Message:
2004-05-25 Keith Packard <keithp at keithp.com>
version 2.35
* compile.c: (CompileLvalue), (CompileAssign), (CompileAssignOp),
(CompileAssignFunc), (CompileArrayInit), (_CompileExpr),
(CompileDecl):
Allow &rvalue and have it automatically box the value.
Index: ChangeLog
===================================================================
RCS file: /local/src/CVS/nickle/ChangeLog,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -d -r1.49 -r1.50
--- a/ChangeLog 23 May 2004 06:01:51 -0000 1.49
+++ b/ChangeLog 26 May 2004 03:13:06 -0000 1.50
@@ -1,3 +1,11 @@
+2004-05-25 Keith Packard <keithp at keithp.com>
+version 2.35
+
+ * compile.c: (CompileLvalue), (CompileAssign), (CompileAssignOp),
+ (CompileAssignFunc), (CompileArrayInit), (_CompileExpr),
+ (CompileDecl):
+ Allow &rvalue and have it automatically box the value.
+
2004-05-21 Bart Massey <bart at cs.pdx.edu>
version 2.34
Index: compile.c
===================================================================
RCS file: /local/src/CVS/nickle/compile.c,v
retrieving revision 1.151
retrieving revision 1.152
diff -u -d -r1.151 -r1.152
--- a/compile.c 21 May 2004 06:10:34 -0000 1.151
+++ b/compile.c 26 May 2004 03:13:06 -0000 1.152
@@ -218,7 +218,7 @@
typedef enum _tail { TailNever, TailVoid, TailAlways } Tail;
-ObjPtr CompileLvalue (ObjPtr obj, ExprPtr expr, ExprPtr stat, CodePtr code, Bool createIfNecessary, Bool assign, Bool initialize, Bool amper);
+ObjPtr CompileLvalue (ObjPtr obj, ExprPtr expr, ExprPtr stat, CodePtr code, Bool createIfNecessary, Bool assign, Bool initialize, Bool amper, Bool auto_reference);
ObjPtr CompileBinOp (ObjPtr obj, ExprPtr expr, BinaryOp op, ExprPtr stat, CodePtr code);
ObjPtr CompileBinFunc (ObjPtr obj, ExprPtr expr, BinaryFunc func, ExprPtr stat, CodePtr code, char *name);
ObjPtr CompileUnOp (ObjPtr obj, ExprPtr expr, UnaryOp op, ExprPtr stat, CodePtr code);
@@ -455,10 +455,11 @@
*/
ObjPtr
CompileLvalue (ObjPtr obj, ExprPtr expr, ExprPtr stat, CodePtr code,
- Bool createIfNecessary, Bool assign, Bool initialize, Bool amper)
+ Bool createIfNecessary, Bool assign, Bool initialize,
+ Bool amper, Bool auto_reference)
{
ENTER ();
- InstPtr inst;
+ InstPtr inst = 0;
SymbolPtr s;
int depth;
int ndim;
@@ -524,11 +525,13 @@
break;
case AMPER:
obj = CompileLvalue (obj, expr->tree.left, stat, code,
- createIfNecessary, assign, initialize, True);
+ createIfNecessary, assign, initialize,
+ True, False);
expr->base.type = expr->tree.left->base.type;
break;
case COLONCOLON:
- obj = CompileLvalue (obj, expr->tree.right, stat, code, False, assign, initialize, amper);
+ obj = CompileLvalue (obj, expr->tree.right, stat, code, False, assign, initialize,
+ amper, auto_reference);
expr->base.type = expr->tree.right->base.type;
break;
case DOT:
@@ -601,8 +604,17 @@
}
break;
default:
- CompileError (obj, stat, "Invalid lvalue");
- expr->base.type = typePoly;
+ if (auto_reference)
+ {
+ obj = _CompileExpr (obj, expr, True, stat, code);
+ BuildInst (obj, OpUnFunc, inst, stat);
+ inst->unfunc.func = do_reference;
+ }
+ else
+ {
+ CompileError (obj, stat, "Invalid lvalue");
+ expr->base.type = typePoly;
+ }
break;
}
if (flipTypes)
@@ -855,7 +867,8 @@
ENTER ();
InstPtr inst;
- obj = CompileLvalue (obj, expr->tree.left, stat, code, True, True, initialize, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code, True, True, initialize,
+ False, False);
SetPush (obj);
obj = _CompileExpr (obj, expr->tree.right, True, stat, code);
expr->base.type = TypeCombineBinary (expr->tree.left->base.type,
@@ -879,7 +892,8 @@
ENTER ();
InstPtr inst;
- obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False,
+ False, False);
SetPush (obj);
BuildInst (obj, OpFetch, inst, stat);
SetPush (obj);
@@ -906,7 +920,8 @@
ENTER ();
InstPtr inst;
- obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False,
+ False, False);
SetPush (obj);
BuildInst (obj, OpFetch, inst, stat);
SetPush (obj);
@@ -1674,7 +1689,7 @@
SetPush (obj);
obj = CompileLvalue (obj,
expr->tree.left->tree.right,
- stat, code, False, True, True, False);
+ stat, code, False, True, True, False, False);
SetPush (obj);
}
obj = CompileBuildArray (obj, expr, type, dimensions, ndim, stat, code);
@@ -2401,7 +2416,8 @@
break;
case STAR: obj = CompileUnFunc (obj, expr, Dereference, stat, code,"*"); break;
case AMPER:
- obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False,
+ False, True);
t = CompileRefType (expr->tree.left->base.type);
if (!t)
t = expr->tree.left->base.type;
@@ -2421,7 +2437,8 @@
case INC:
if (expr->tree.left)
{
- obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False,
+ False, False);
expr->base.type = TypeCombineBinary (expr->tree.left->base.type,
ASSIGNPLUS,
typePrim[rep_int]);
@@ -2429,7 +2446,8 @@
}
else
{
- obj = CompileLvalue (obj, expr->tree.right, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.right, stat, code,
+ False, False, False, False, False);
expr->base.type = TypeCombineBinary (expr->tree.right->base.type,
ASSIGNPLUS,
typePrim[rep_int]);
@@ -2448,7 +2466,8 @@
case DEC:
if (expr->tree.left)
{
- obj = CompileLvalue (obj, expr->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.left, stat, code,
+ False, False, False, False, False);
expr->base.type = TypeCombineBinary (expr->tree.left->base.type,
ASSIGNMINUS,
typePrim[rep_int]);
@@ -2456,7 +2475,8 @@
}
else
{
- obj = CompileLvalue (obj, expr->tree.right, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.right, stat, code,
+ False, False, False, False, False);
expr->base.type = TypeCombineBinary (expr->tree.right->base.type,
ASSIGNMINUS,
typePrim[rep_int]);
@@ -2681,7 +2701,8 @@
case ASSIGNPOW:
obj = _CompileExpr (obj, expr->tree.left, True, stat, code);
SetPush (obj);
- obj = CompileLvalue (obj, expr->tree.right->tree.left, stat, code, False, False, False, False);
+ obj = CompileLvalue (obj, expr->tree.right->tree.left, stat, code,
+ False, False, False, False, False);
SetPush (obj);
obj = _CompileExpr (obj, expr->tree.right->tree.right, True, stat, code);
expr->base.type = TypeCombineBinary (expr->tree.right->tree.left->base.type,
@@ -4008,7 +4029,8 @@
lvalue = NewExprAtom (decl->name, decl->symbol, False);
*initObj = CompileLvalue (*initObj, lvalue,
decls, code, False, True, True,
- CompileRefType (s->symbol.type) != 0);
+ CompileRefType (s->symbol.type) != 0,
+ False);
SetPush (*initObj);
*initObj = CompileInit (*initObj, init, s->symbol.type, stat, code);
CompileDeclInitObjFinish (&obj, initObj, code, code_compile);
- Previous message: [Commit] cairo_u128 ChangeLog, 1.1, 1.2 Makefile, 1.3,
1.4 cairo_test.c, 1.3, 1.4 cairo_uint128.c, 1.3,
1.4 cairo_uint128.h, 1.3, 1.4 checkdata.5c, 1.3,
1.4 makedata.5c, 1.1.1.1, 1.2
- Next message: [Commit] nickle ChangeLog,1.50,1.51
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Commit
mailing list