Annotation of OpenXM/src/kan96xx/Kan/var.sm1, Revision 1.1
1.1 ! maekawa 1:
! 2:
! 3: %% start of var.sm1. 1997, 2/27
! 4: %%(type in initv to initialize the variable stack and type in test.var to start a test) message
! 5:
! 6: /sm1.var.Verbose 0 def
! 7: /@@@.quiet.var 1 def
! 8: @@@.quiet.var { }
! 9: { (var.sm1 (module for debugging): Version 3/7, 1997. cf. strictMode, debugMode) message } ifelse
! 10:
! 11: /db.initVariableStack {
! 12: 1000 newstack /db.VariableStack set
! 13: } def
! 14:
! 15:
! 16: /localVariables {
! 17: { dup [ 3 1 roll load ] } map /db.arg0 set
! 18: db.VariableStack setstack db.arg0 stdstack
! 19: } def
! 20:
! 21: /restoreVariables {
! 22: db.VariableStack setstack
! 23: % dup print
! 24: { aload pop def } map pop
! 25: stdstack
! 26: } def
! 27:
! 28:
! 29:
! 30: /db.where {
! 31: db.VariableStack setstack
! 32: pstack
! 33: stdstack
! 34: } def
! 35:
! 36: /db.clear {
! 37: db.VariableStack setstack
! 38: /db.arg1 [(StackPointer) ] system_variable 2 sub def
! 39: %% arg1 print
! 40: 0 1 db.arg1
! 41: {
! 42: pop pop
! 43: } for
! 44: stdstack
! 45: } def
! 46:
! 47: /db.restore { %% You cannot use local variable in this function.
! 48: db.VariableStack setstack
! 49: /db.arg1 [(StackPointer) ] system_variable 2 sub def
! 50: 0 1 db.arg1
! 51: {
! 52: pop /db.variableArray set
! 53: sm1.var.Verbose { db.variableArray print } { } ifelse
! 54: db.variableArray isArray
! 55: { db.variableArray length 0 gt
! 56: {
! 57: db.variableArray { aload pop def } map pop
! 58: }
! 59: { } ifelse
! 60: }
! 61: %%% Don't call restoreVariables. Otherwise, stack is set to stdstack.
! 62: { } ifelse
! 63: } for
! 64: stdstack
! 65: } def
! 66:
! 67:
! 68:
! 69: /db.initDebugStack { 1000 newstack /db.DebugStack set } def
! 70:
! 71:
! 72: /db.where.ds {
! 73: db.DebugStack setstack
! 74: pstack
! 75: stdstack
! 76: } def
! 77:
! 78: /db.clear.ds {
! 79: db.DebugStack setstack
! 80: /db.arg1 [(StackPointer) ] system_variable 2 sub def
! 81: %% arg1 print
! 82: 0 1 db.arg1
! 83: {
! 84: pop pop
! 85: } for
! 86: stdstack
! 87: } def
! 88:
! 89:
! 90: /db.initErrorStack {
! 91: [(ErrorStack)] system_variable /db.ErrorStack set
! 92: } def
! 93:
! 94: /db.where.es {
! 95: db.ErrorStack setstack
! 96: /db.arg1 [(StackPointer) ] system_variable 2 sub def
! 97: %% db.arg1 print
! 98: 0 1 db.arg1
! 99: {
! 100: pop rc message
! 101: %% pop rc message %% This caused coredump for %%Warning:The identifier...
! 102: %% This bug was a mistery. (1997, 3/1)
! 103: %% Perhaps you do not output dollar sign, you get the core.
! 104: %% I found the missing "%s" in the function printObject() and fixed the
! 105: %% bug.
! 106: } for
! 107: stdstack
! 108: } def
! 109:
! 110:
! 111: /db.clear.es {
! 112: db.ErrorStack setstack
! 113: /db.arg1 [(StackPointer) ] system_variable 2 sub def
! 114: %% arg1 print
! 115: 0 1 db.arg1
! 116: {
! 117: pop pop
! 118: } for
! 119: stdstack
! 120: } def
! 121:
! 122: %%% Usages.
! 123: [(resolution)
! 124: [(Efficient resolution is still be tested. See Kan/debug/tower-sugar.sm1)
! 125: (DMacaulay provides a function to compute resolution in the ring of)
! 126: (homogenized differential operators. See http://www.math.kobe-u.ac.jp/KAN)
! 127: ]
! 128: ] putUsages
! 129:
! 130: [(db.where)
! 131: [(db.where shows the db.VariableStack)
! 132: (cf. localVariables, restoreVariables,)
! 133: ( db.clear, db.restore, db.where.ds, db.where.es, debugMode)
! 134: ]
! 135: ] putUsages
! 136:
! 137: [(db.clear)
! 138: [(db.clear cleans db.VariableStack)
! 139: (cf. db.restore, db.where, db.clear.ds, db.clear.es, debugMode)
! 140: ]
! 141: ] putUsages
! 142:
! 143: [(db.restore)
! 144: [(db.restore recovers bindings of variables by reading db.VariableStack)
! 145: (cf. localVariables, restoreVariables,)
! 146: ( db.clear, db.where , debugMode)
! 147: ]
! 148: ] putUsages
! 149:
! 150: [(db.where.ds)
! 151: [(db.where.ds shows the db.DebugStack)
! 152: (db.DebugStack is used by kan/k? to get error lines.)
! 153: (cf. db.clear.ds, db.where, debugMode)
! 154: ]
! 155: ] putUsages
! 156:
! 157: [(db.clear.ds)
! 158: [(db.clear.ds cleans db.DebugStack)
! 159: (cf. db.where.ds, db.clear, debugMode)
! 160: ]
! 161: ] putUsages
! 162:
! 163: [(db.where.es)
! 164: [(db.where.es shows the db.ErrorStack)
! 165: (Error and warning messages are put in db.ErrorStack when the global)
! 166: (variables ErrorMessageMode or WarningMessageMode are set to 1 or 2.)
! 167: (cf. db.where, system_variable)
! 168: ]
! 169: ] putUsages
! 170:
! 171: [(db.clear.es)
! 172: [(db.clear.es cleans db.ErrorStack)
! 173: (cf. db.clear, db.where.es)
! 174: ]
! 175: ] putUsages
! 176:
! 177: [(localVariables)
! 178: [(This function is as same as pushVariables, but it pushes the variable to)
! 179: (db.VariableStack)
! 180: (cf. db.where, pushVariables, restoreVariables, debugMode)
! 181: ]
! 182: ] putUsages
! 183:
! 184: [(restoreVariables)
! 185: [(This function is as same as popVariables, but it pops the variable from)
! 186: (db.VariableStack)
! 187: (cf. db.where, popVariables, localVariables, debugMode)
! 188: ]
! 189: ] putUsages
! 190:
! 191: /initv { db.initVariableStack db.initDebugStack db.initErrorStack } def
! 192: initv
! 193: %% (initv is executed.) message
! 194:
! 195: /db.pop.es {
! 196: db.ErrorStack setstack
! 197: /db.arg1 set
! 198: stdstack
! 199: db.arg1
! 200: } def
! 201:
! 202: /db.pop.ds {
! 203: db.DebugStack setstack
! 204: /db.arg1 set
! 205: stdstack
! 206: db.arg1
! 207: } def
! 208:
! 209: /db.push.ds {
! 210: /db.arg1 set
! 211: db.DebugStack setstack
! 212: db.arg1
! 213: stdstack
! 214: } def
! 215:
! 216:
! 217: %%% if you like rigorous naming system execute the following command.
! 218: /strictMode {
! 219: [(Strict2) 1] system_variable
! 220: [(chattrs) 1] extension
! 221: [(chattr) 0 /arg1] extension
! 222: [(chattr) 0 /arg2] extension
! 223: [(chattr) 0 /arg3] extension
! 224: [(chattr) 0 /v1] extension %% used in join.
! 225: [(chattr) 0 /v2] extension
! 226: [(chattr) 0 /@.usages] extension
! 227: @@@.quiet.var { }
! 228: { (var.sm1 : Strict control of the name space is enabled. (cf. extension)) message }
! 229: ifelse
! 230: } def
! 231: [(strictMode)
! 232: [(StrictMode enables the protection for an unexpected redefinition)]
! 233: ] putUsages
! 234:
! 235: /debugMode {
! 236: /pushVariables { localVariables } def
! 237: /popVariables { restoreVariables } def
! 238: } def
! 239: [(debugMode)
! 240: [(debugMode overrides on the functions pushVariables and popVariables)
! 241: (and enables to use db.where)
! 242: ]
! 243: ] putUsages
! 244:
! 245: %%%% Test Codes.
! 246: /foo1 {
! 247: /arg1 set
! 248: [/n /val] localVariables
! 249: /n arg1 def
! 250: n 2 le
! 251: {
! 252: /val 1 def
! 253: }
! 254: {
! 255: /val n 1 sub foo1 n 2 sub foo1 add def
! 256: } ifelse
! 257: /arg1 val def
! 258: restoreVariables
! 259: arg1
! 260: } def
! 261:
! 262: /test.var.1 {
! 263: (Now, we are testing new features ErrorStack of sm1 (1997, 3/1 )...) message
! 264: (ErrorStack:) message
! 265: [(ErrorStack)] system_variable /db.ErrorStack set
! 266: db.ErrorStack message
! 267: db.ErrorStack lc message
! 268: db.ErrorStack rc message
! 269: (ErrorMessageMode:) message
! 270: [(ErrorMessageMode)] system_variable message
! 271: [(ErrorMessageMode) 2 ] system_variable
! 272: [(WarningMessageMode) 2 ] system_variable
! 273: [(ErrorMessageMode)] system_variable message
! 274:
! 275: (Cause an error with the mode 1) message
! 276: 0 1 get %% The macro breaks here.
! 277: 0 2 get
! 278: db.where.es
! 279: db.clear.es
! 280: db.where.es
! 281:
! 282: [(ErrorMessageMode) 0 ] system_variable
! 283: [(ErrorMessageMode)] system_variable message
! 284:
! 285: (Cause an error with the mode 0) message
! 286: 0 1 get
! 287: 0 2 get
! 288: db.where.es
! 289: } def
! 290:
! 291: /test.var {
! 292: (Now, we are testing new features <<gb>> of sm1 (1997, 3/1 )...) message
! 293: [(x,y) ring_of_polynomials ( ) elimination_order 0] define_ring
! 294: [(isReducible) (x^2 y). (x y).] gb message
! 295: [(lcm) (x y). (y^2).] gb message
! 296: [(grade) (x^2 y). ] gb message
! 297: ( --- 1 , xy^2, 3 OK? ----) message
! 298: (Computing isReducible for 1000 times.... ) messagen
! 299: { 1 1 1000 { pop [(isReducible) (x^2 y). (x y).] gb pop } for
! 300: ( ) message } timer
! 301: (Done) message
! 302: } def
! 303: %%% end of test codes.
! 304: %% end of var.sm1
! 305:
! 306:
! 307:
! 308:
! 309:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>