-- JaMLiteral.mesa -- Written by: John Warnock, January, 1979 -- Last changed by Doug Wyatt, February 10, 1981 7:09 PM DIRECTORY JaMLiteralDefs, JaMMasterDefs USING [Object, Stack], JaMStackDefs USING [Push], JaMVMDefs USING [AllocateCharsVM, PutCharsVM], StreamDefs USING [StreamHandle]; JaMLiteral: PROGRAM IMPORTS JaMStackDefs, JaMVMDefs EXPORTS JaMLiteralDefs = BEGIN OPEN JaMMasterDefs; -- The following routines implement a set of literal building routines. -- The resulting constructed literal is pushed on the operand stack. IntegerLit: PUBLIC PROCEDURE [i:INTEGER,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,IntegerType[i]],s]; END; LongIntegerLit: PUBLIC PROCEDURE [l:LONG INTEGER,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,LongIntegerType[l]],s]; END; RealLit: PUBLIC PROCEDURE [r:REAL,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,RealType[r]],s]; END; BooleanLit: PUBLIC PROCEDURE [b:BOOLEAN,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,BooleanType[BooleanVal:b]],s]; END; StringLit: PUBLIC PROCEDURE [string:STRING,s:Stack] = BEGIN st:StringType Object _ MakeStringObject[string]; st.litflag _ lit; JaMStackDefs.Push[st,s]; END; UserLit: PUBLIC PROCEDURE [type:INTEGER,address:LONG POINTER,s:Stack] = BEGIN us:UserType Object _[lit,UserType[type,address]]; JaMStackDefs.Push[us,s]; END; MakeStringObject: PUBLIC PROCEDURE[string: STRING] RETURNS[StringType Object] = BEGIN ob: StringType Object _ [nolit,StringType[,,]]; [ob.Address,ob.Offset]_JaMVMDefs.AllocateCharsVM[string.length]; ob.Length_string.length; JaMVMDefs.PutCharsVM[ob.Address,ob.Offset, @string.text,0,string.length]; RETURN[ob]; END; StreamLit: PUBLIC PROCEDURE[stream:StreamDefs.StreamHandle,s:Stack] = BEGIN JaMStackDefs.Push[Object[lit,StreamType[stream]],s]; END; STOP; END.(670)