📄 no.117.mal
字号:
# Monet Mil to Mal compiler# Copyright (c) 2001-2004, CWI. All rights reserved.#Predefined code segment#The compiler can not guarantee an accurate compilation,#because MIL unlike MAL is a dynamically typed language.#A few guidelines to maximize usefullness.#- make the type of variables explicit, in particular 'nil'#- upon advice of M2m to remap identifiers, change it in your program directly#use the "mil_schema" for additional support routines# io.print("# >Number: 117\n");# io.print("# >Category: Mserver\n");# io.print("# >Synopsis: multiplex fails in a loop\n");# io.print("# >Confidential: no\n");# io.print("# >Severity: critical\n");# io.print("# >Priority: high\n");# io.print("# >Responsible: boncz\n");# io.print("# >State: open\n");# io.print("# >Class: sw-bug\n");# io.print("# >Submitter-Id: unknown\n");# io.print("# >Arrival-Date: Thu Feb 5 13:46:05 1998\n");# io.print("# >Originator: windhouw\n");# io.print("# >Organization:\n");# io.print("# UvA\n");# io.print("# >Release: 971007\n");# io.print("# >Environment:\n");# io.print("# \n");# io.print("# >Description:\n");# io.print("# The following script fails:\n");# io.print("# \n");# io.print("# =====\n");# io.print("# \n");# io.print("# test := bbp.new(oid,int);\n");# io.print("# test.insert(oid(1),1);\n");# io.print("# test.insert(oid(2),2);\n");# io.print("# test.insert(oid(3),3);\n");# io.print("# \n");# io.print("# PROC addNr( any theNrs, any theNr) : any {\n");# io.print("# printf(\"add Nr: %d\\n\",theNr);\n");# io.print("# VAR r := [+](theNrs,theNr);\n");# io.print("# r.print;\n");# io.print("# return r;\n");# io.print("# }\n");# io.print("# \n");# io.print("# PROC loopTest( any theBAT, any theMax) : void {\n");# io.print("# VAR i := 0;\n");# io.print("# WHILE (i < theMax) {\n");# io.print("# addNr(theBAT,i);\n");# io.print("# i := i + 1;\n");# io.print("# }\n");# io.print("# }\n");# io.print("# \n");# io.print("# =====\n");# io.print("# \n");# io.print("# >loopTest(test,1);\n");# io.print("# add Nr: 0\n");# io.print("# #-----------------#\n");# io.print("# # oid | tmp_25 #\n");# io.print("# #-----------------#\n");# io.print("# [ 1@0, 1 ]\n");# io.print("# [ 2@0, 2 ]\n");# io.print("# [ 3@0, 3 ]\n");# io.print("# >loopTest(test,2);\n");# io.print("# add Nr: 0\n");# io.print("# #-----------------#\n");# io.print("# # oid | tmp_47 #\n");# io.print("# #-----------------#\n");# io.print("# [ 1@0, 1 ]\n");# io.print("# [ 2@0, 2 ]\n");# io.print("# [ 3@0, 3 ]\n");# io.print("# add Nr: 1\n");# io.print("# !WARNING: BATdescriptor: range error\n");# io.print("# ... segmentation fault\n");# io.print("# \n");# io.print("# =====\n");# io.print("# \n");# io.print("setoid(oid(20000000));"); aa_a := calc.oid(20000000); ba_a := setoid(aa_a);# io.print("var test := bbp.new(oid,int);"); test := bbp.new(nil:oid,nil:int);# io.print("test.insert(oid(1),1);"); ca_a := calc.oid(1); da_a := bat.insert(test,ca_a,1);# io.print("test.insert(oid(2),2);"); ea_a := calc.oid(2); fa_a := bat.insert(test,ea_a,2);# io.print("test.insert(oid(3),3);"); ga_a := calc.oid(3); ha_a := bat.insert(test,ga_a,3);# io.print("PROC addNr(any theNrs, any theNr) : any {");function addNr(theNrs:any$1, theNr:any$2):any$3;# io.print(" printf(\"add Nr: %d\\n\",theNr);"); ia_a := printf("add Nr: %d\n",theNr);# io.print(" VAR r := [+](theNrs,theNr);"); r := multiplex.tactics("+",theNrs,theNr);# io.print(" r.print();"); ja_a := bat.print(r);# io.print(" return r;"); return ka_a :=r;end addNr;# io.print("PROC loopTest(any theBAT,any theMax) : void {");function loopTest(theBAT:any$1, theMax:any$2):void;# io.print(" VAR i := 0;"); i := 0;# io.print(" WHILE (i < theMax) {");barrier la_a := true;barrier ma_a := <(i,theMax);# io.print(" addNr(theBAT,i);"); na_a := addNr(theBAT,i);# io.print(" i := i + 1;"); i := +(i,1);# io.print(" }");redo la_a;exit ma_a;exit la_a;end loopTest;# io.print("loopTest(test,1);"); oa_a := loopTest(test,1);# io.print("loopTest(test,2);"); pa_a := loopTest(test,2);# io.print("quit();"); qa_a := clients.quit();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -